From 4bb203fda9bb58d964b83664d844035d90de1fd8 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Thu, 6 Feb 2025 19:46:41 +0300 Subject: [PATCH 01/13] convert codebase to TypeScript, replace Mocha to Jest --- .eslintrc.json | 60 - eslint.config.mjs | 95 + index.js | 7 - index.umd.js | 1249 --------- jest.config.js | 10 + package.json | 29 +- pnpm-lock.yaml | 2493 +++++++++++++---- src/assertions.js | 43 - src/assertions.ts | 43 + src/builders/base.js | 125 - src/builders/base.ts | 125 + src/builders/index.js | 20 - src/builders/index.ts | 21 + src/builders/request.js | 46 - src/builders/request.ts | 55 + src/builders/response.js | 32 - src/builders/response.ts | 35 + src/builders/types.ts | 25 + src/constants.ts | 111 + src/consts.js | 117 - src/error.js | 16 - src/error.ts | 16 + src/index.ts | 13 + src/parsers/{base.js => base.ts} | 108 +- src/parsers/form-data-param-parser.js | 98 - src/parsers/form-data-param-parser.ts | 97 + src/parsers/index.js | 23 - src/parsers/index.ts | 24 + src/parsers/{request.js => request.ts} | 83 +- src/parsers/response.js | 101 - src/parsers/response.ts | 103 + src/parsers/types.ts | 30 + src/types.ts | 30 + src/utils.js | 174 -- src/utils.ts | 184 ++ test/.eslintrc.json | 19 - test/assertions-spec.js | 125 - test/assertions-spec.ts | 122 + test/builders/{base-spec.js => base-spec.ts} | 279 +- test/builders/builders-spec.js | 79 - test/builders/builders-spec.ts | 80 + .../{request-spec.js => request-spec.ts} | 216 +- .../{response-spec.js => response-spec.ts} | 126 +- test/httpz-spec.js | 20 - test/httpz-spec.ts | 26 + test/index.js | 4 - test/parsers/{base-spec.js => base-spec.ts} | 320 ++- test/parsers/parsers-spec.js | 74 - test/parsers/parsers-spec.ts | 76 + .../{request-spec.js => request-spec.ts} | 372 +-- .../{response-spec.js => response-spec.ts} | 223 +- test/test-utils.ts | 21 + test/{utils-spec.js => utils-spec.ts} | 132 +- tsconfig.json | 22 + 54 files changed, 4280 insertions(+), 3897 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs delete mode 100644 index.js delete mode 100644 index.umd.js create mode 100644 jest.config.js delete mode 100644 src/assertions.js create mode 100644 src/assertions.ts delete mode 100644 src/builders/base.js create mode 100644 src/builders/base.ts delete mode 100644 src/builders/index.js create mode 100644 src/builders/index.ts delete mode 100644 src/builders/request.js create mode 100644 src/builders/request.ts delete mode 100644 src/builders/response.js create mode 100644 src/builders/response.ts create mode 100644 src/builders/types.ts create mode 100644 src/constants.ts delete mode 100644 src/consts.js delete mode 100644 src/error.js create mode 100644 src/error.ts create mode 100644 src/index.ts rename src/parsers/{base.js => base.ts} (52%) delete mode 100644 src/parsers/form-data-param-parser.js create mode 100644 src/parsers/form-data-param-parser.ts delete mode 100644 src/parsers/index.js create mode 100644 src/parsers/index.ts rename src/parsers/{request.js => request.ts} (52%) delete mode 100644 src/parsers/response.js create mode 100644 src/parsers/response.ts create mode 100644 src/parsers/types.ts create mode 100644 src/types.ts delete mode 100644 src/utils.js create mode 100644 src/utils.ts delete mode 100644 test/.eslintrc.json delete mode 100644 test/assertions-spec.js create mode 100644 test/assertions-spec.ts rename test/builders/{base-spec.js => base-spec.ts} (50%) delete mode 100644 test/builders/builders-spec.js create mode 100644 test/builders/builders-spec.ts rename test/builders/{request-spec.js => request-spec.ts} (76%) rename test/builders/{response-spec.js => response-spec.ts} (65%) delete mode 100644 test/httpz-spec.js create mode 100644 test/httpz-spec.ts delete mode 100644 test/index.js rename test/parsers/{base-spec.js => base-spec.ts} (52%) delete mode 100644 test/parsers/parsers-spec.js create mode 100644 test/parsers/parsers-spec.ts rename test/parsers/{request-spec.js => request-spec.ts} (72%) rename test/parsers/{response-spec.js => response-spec.ts} (63%) create mode 100644 test/test-utils.ts rename test/{utils-spec.js => utils-spec.ts} (54%) create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index eff239d..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "env": { - "node": true, - "es2020": true - }, - "parserOptions": { - "sourceType": "module", - "ecmaFeatures": { - "impliedStrict": true - } - }, - "extends": "eslint:recommended", - "rules": { - "array-bracket-spacing": ["error", "never"], - "block-scoped-var": "error", - "brace-style": ["error", "1tbs"], - "camelcase": "error", - "comma-spacing": ["error", { "before": false, "after": true }], - "computed-property-spacing": ["error", "never"], - "complexity": ["error", 12], - "curly": "error", - "eol-last": "error", - "indent": ["error", 2, { "SwitchCase": 1, "MemberExpression": 1 }], - "eqeqeq": ["error", "smart"], - "keyword-spacing": ["error", { "before": true, "after": true }], - "max-depth": ["warn", 3], - "max-len": ["warn", 130], - "max-nested-callbacks": ["warn", 3], - "max-params": ["warn", 3], - "max-statements": ["warn", 15], - "new-cap": "off", - "no-console": "error", - "no-duplicate-imports": "error", - "no-else-return": "error", - "no-extend-native": "error", - "no-extra-parens": "warn", - "no-invalid-this": "error", - "no-lone-blocks": "warn", - "no-mixed-spaces-and-tabs": "error", - "no-multi-spaces": "error", - "no-return-await": "warn", - "no-shadow": "error", - "no-trailing-spaces": "error", - "no-throw-literal": "error", - "no-unused-expressions": "error", - "no-unused-vars": "error", - "no-use-before-define": "off", - "no-useless-call": "warn", - "object-curly-spacing": ["error", "always", { "objectsInObjects": false }], - "prefer-const": "off", - "prefer-rest-params": "error", - "prefer-spread": "error", - "require-await": "warn", - "semi": ["warn", "never"], - "space-infix-ops": "error", - "space-unary-ops": "error", - "strict": "error", - "quotes": ["error", "single", "avoid-escape"] - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..73d7826 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,95 @@ +import globals from "globals"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [...compat.extends("eslint:recommended"), { + languageOptions: { + globals: { + ...globals.node, + }, + ecmaVersion: 5, + sourceType: "module", + parserOptions: { + ecmaFeatures: { + impliedStrict: true, + }, + }, + }, + + rules: { + "array-bracket-spacing": ["error", "never"], + "block-scoped-var": "error", + "brace-style": ["error", "1tbs"], + camelcase: "error", + + "comma-spacing": ["error", { + before: false, + after: true, + }], + + "computed-property-spacing": ["error", "never"], + complexity: ["error", 12], + curly: "error", + "eol-last": "error", + + indent: ["error", 2, { + SwitchCase: 1, + MemberExpression: 1, + }], + + eqeqeq: ["error", "smart"], + + "keyword-spacing": ["error", { + before: true, + after: true, + }], + + "max-depth": ["warn", 3], + "max-len": ["warn", 130], + "max-nested-callbacks": ["warn", 3], + "max-params": ["warn", 3], + "max-statements": ["warn", 15], + "new-cap": "off", + "no-console": "error", + "no-duplicate-imports": "error", + "no-else-return": "error", + "no-extend-native": "error", + "no-extra-parens": "warn", + "no-invalid-this": "error", + "no-lone-blocks": "warn", + "no-mixed-spaces-and-tabs": "error", + "no-multi-spaces": "error", + "no-return-await": "warn", + "no-shadow": "error", + "no-trailing-spaces": "error", + "no-throw-literal": "error", + "no-unused-expressions": "error", + "no-unused-vars": "error", + "no-use-before-define": "off", + "no-useless-call": "warn", + + "object-curly-spacing": ["error", "always", { + objectsInObjects: false, + }], + + "prefer-const": "off", + "prefer-rest-params": "error", + "prefer-spread": "error", + "require-await": "warn", + semi: ["warn", "never"], + "space-infix-ops": "error", + "space-unary-ops": "error", + strict: "error", + quotes: ["error", "single", "avoid-escape"], + }, +}]; diff --git a/index.js b/index.js deleted file mode 100644 index 7996d84..0000000 --- a/index.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - consts: require('./src/consts'), - HttpZError: require('./src/error'), - utils: require('./src/utils'), - parse: require('./src/parsers'), - build: require('./src/builders') -} diff --git a/index.umd.js b/index.umd.js deleted file mode 100644 index e677f59..0000000 --- a/index.umd.js +++ /dev/null @@ -1,1249 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.httpZ = factory()); -})(this, (function () { 'use strict'; - - function getDefaultExportFromCjs (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; - } - - var consts; - var hasRequiredConsts; - - function requireConsts () { - if (hasRequiredConsts) return consts; - hasRequiredConsts = 1; - const EOL = '\r\n'; - const EOL2X = EOL + EOL; - const BASIC_LATIN = '[\\u0009\\u0020-\\u007E]'; - const PARAM_NAME = '[A-Za-z0-9_.\\[\\]-]'; // TODO: extend - const HTTP_METHODS = '(CONNECT|OPTIONS|TRACE|GET|HEAD|POST|PUT|PATCH|DELETE)'; - const HTTP_PROTOCOL_VERSIONS = '(HTTP)\\/(1\\.0|1\\.1|2(\\.0){0,1})'; - - const regexps = {}; - regexps.quote = /"/g; - regexps.startNl = new RegExp(`^${EOL}`); - regexps.endNl = new RegExp(`${EOL}$`); - regexps.requestStartRow = new RegExp(`^${HTTP_METHODS} \\S* ${HTTP_PROTOCOL_VERSIONS}$`); - regexps.responseStartRow = new RegExp(`^${HTTP_PROTOCOL_VERSIONS} \\d{3} ${BASIC_LATIN}*$`); - // eslint-disable-next-line no-control-regex - regexps.quoutedHeaderValue = new RegExp('^"[\\u0009\\u0020\\u0021\\u0023-\\u007E]+"$'); - regexps.boundary = /(?<=boundary=)"{0,1}[A-Za-z0-9'()+_,.:=?-]+"{0,1}/; - regexps.contentDisposition = new RegExp( - `^Content-Disposition: *(form-data|inline|attachment)${BASIC_LATIN}*${EOL}`, - 'i', - ); - regexps.contentType = new RegExp(`^Content-Type:[\\S ]*${EOL}`, 'i'); - regexps.contentDispositionType = /(?<=Content-Disposition:) *(form-data|inline|attachment)/; - regexps.dispositionName = new RegExp(`(?<=name=)"${PARAM_NAME}+"`, 'i'); - regexps.dispositionFileName = new RegExp(`(?<=filename=)"${PARAM_NAME}+"`, 'i'); - regexps.chunkRow = new RegExp(`^[0-9a-fA-F]+${EOL}`); - - const http = {}; - - http.protocols = { - http: 'HTTP', - https: 'HTTPS', - }; - - http.protocolVersions = { - http10: 'HTTP/1.0', - http11: 'HTTP/1.1', - http20: 'HTTP/2.0', - }; - - http.methods = { - connect: 'CONNECT', - options: 'OPTIONS', - trace: 'TRACE', - head: 'HEAD', - get: 'GET', - post: 'POST', - put: 'PUT', - patch: 'PATCH', - delete: 'DELETE', - }; - - http.postMethods = [http.methods.post, http.methods.put, http.methods.patch]; - - http.contentTypes = { - text: { - any: 'text/', - css: 'text/css', - csv: 'text/csv', - html: 'text/html', - javascript: 'text/javascript', - plain: 'text/plain', - xml: 'text/xml', - }, - application: { - any: 'application/', - javascript: 'application/javascript', - json: 'application/json', - octetStream: 'application/octet-stream', - ogg: 'application/ogg', - pdf: 'application/pdf', - xhtml: 'application/xhtml+xml', - xml: 'application/xml', - xShockwaveFlash: 'application/x-shockwave-flash', - xWwwFormUrlencoded: 'application/x-www-form-urlencoded', - zip: 'application/zip', - }, - multipart: { - any: 'multipart/', - alternative: 'multipart/alternative', - formData: 'multipart/form-data', - mixed: 'multipart/mixed', - related: 'multipart/related', - }, - image: { - any: 'image/', - gif: 'image/gif', - jpeg: 'image/jpeg', - png: 'image/png', - tiff: 'image/tiff', - icon: 'image/x-icon', - }, - audio: { - any: 'audio/', - }, - video: { - any: 'audio/', - }, - font: { - any: 'font/', - }, - }; - - http.headers = { - host: 'Host', - contentType: 'Content-Type', - contentLength: 'Content-Length', - userAgent: 'User-Agent', - setCookie: 'Set-Cookie', - transferEncoding: 'Transfer-Encoding', - }; - - consts = { - EOL, - EOL2X, - regexps, - http, - }; - return consts; - } - - var error; - var hasRequiredError; - - function requireError () { - if (hasRequiredError) return error; - hasRequiredError = 1; - error = class HttpZError extends Error { - static get(...params) { - return new HttpZError(...params) - } - - constructor(message, details) { - super(message); - - this.name = this.constructor.name; - this.details = details; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - }; - return error; - } - - var utils = {}; - - var hasRequiredUtils; - - function requireUtils () { - if (hasRequiredUtils) return utils; - hasRequiredUtils = 1; - (function (exports) { - exports.getLibVersion = () => { - return '8.0.0-dev' - }; - - exports.splitBy = (str, delimiter) => { - if (exports.isEmpty(str)) { - return [] - } - - const delimiterIndex = str.indexOf(delimiter); - if (delimiterIndex === -1) { - return [] - } - - const result = [str.slice(0, delimiterIndex), str.slice(delimiterIndex + delimiter.length)]; - result[0] = result[0].trim(' '); - result[1] = result[1].trim(' '); - - return result - }; - - exports.isAbsoluteUrl = (url) => { - // Don't match Windows paths `c:\` - if (/^[a-zA-Z]:\\/.test(url)) { - return false - } - - // Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - // Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 - return /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url) - }; - - exports.parseUrl = (url, host) => { - if (!host) { - host = url; - url = null; - } - const supportedProtocols = ['http', 'https']; - if (!supportedProtocols.some((known) => host.startsWith(known + '://'))) { - host = 'http://' + host; - } - - const parsedUrl = url ? new URL(url, host) : new URL(host); - const protocol = parsedUrl.protocol.replace(':', '').toUpperCase(); - const params = []; - parsedUrl.searchParams.forEach((value, name) => params.push({ name, value })); - - return { - protocol, - host: parsedUrl.host, - path: parsedUrl.pathname, - params, - } - }; - - exports.arrayToPairs = (params) => { - return params.map(({ name, value }) => [name, exports.getEmptyStringForUndefined(value)]) - }; - - exports.prettifyHeaderName = (name) => { - return (name ?? '').toString().split('-').map(exports.capitalize).join('-') - }; - - exports.getEmptyStringForUndefined = (val) => { - if (exports.isUndefined(val)) { - return '' - } - return val - }; - - exports.extendIfNotUndefined = (obj, fieldName, fieldValue) => { - if (!exports.isUndefined(fieldValue)) { - obj[fieldName] = fieldValue; - } - }; - - // ********************** - // Lodash native replaces - exports.isUndefined = (value) => { - return value === undefined - }; - - exports.isNil = (value) => { - return value == null - }; - - exports.isEmpty = (value) => { - if (value?.length || value?.size) { - return false - } - if (typeof value !== 'object') { - return true - } - for (const key in value) { - if (Object.hasOwn(value, key)) { - return false - } - } - return true - }; - - exports.isString = (value) => { - return typeof value === 'string' - }; - - exports.isNumber = (value) => { - return typeof value === 'number' - }; - - exports.isArray = (value) => { - return Array.isArray(value) - }; - - exports.isError = (value) => { - return value instanceof Error - }; - - exports.isPlainObject = (value) => { - if (typeof value !== 'object' || value === null) { - return false - } - if (Object.prototype.toString.call(value) !== '[object Object]') { - return false - } - const proto = Object.getPrototypeOf(value); - if (proto === null) { - return true - } - - const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return ( - typeof Ctor === 'function' && - Ctor instanceof Ctor && - Function.prototype.call(Ctor) === Function.prototype.call(value) - ) - }; - - exports.capitalize = (value) => { - return value ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase() : '' - }; - - exports.head = (value) => { - // eslint-disable-next-line no-unused-vars - const [head, ...tail] = value; - return head - }; - - exports.tail = (value) => { - // eslint-disable-next-line no-unused-vars - const [head, ...tail] = value; - return tail - }; - - exports.trim = (value, chars = undefined) => { - if (exports.isNil(value)) { - return value - } - value = value.toString(); - if (chars === undefined || chars === '\\s') { - return value.trim() - } - return value.replace(new RegExp(`^([${chars}]*)(.*?)([${chars}]*)$`), '$2') - }; - - exports.trimEnd = (value, chars = undefined) => { - if (exports.isNil(value)) { - return value - } - value = value.toString(); - if (chars === undefined || chars === '\\s') { - return value.trimEnd() - } - return value.replace(new RegExp(`^(.*?)([${chars}]*)$`), '$1') - }; - } (utils)); - return utils; - } - - var assertions = {}; - - var hasRequiredAssertions; - - function requireAssertions () { - if (hasRequiredAssertions) return assertions; - hasRequiredAssertions = 1; - (function (exports) { - const { isNil, isString, isEmpty, isNumber, isArray } = requireUtils(); - const HttpZError = requireError(); - - exports.assertRequired = (val, field, details) => { - if (isNil(val)) { - throw HttpZError.get(`${field} is required`, details) - } - }; - - exports.assertString = (val, field, details) => { - exports.assertRequired(val, field, details); - if (!isString(val)) { - throw HttpZError.get(`${field} must be a string`, details) - } - }; - - exports.assertNotEmptyString = (val, field, details) => { - exports.assertString(val, field, details); - if (isEmpty(val)) { - throw HttpZError.get(`${field} must be not empty string`, details) - } - }; - - exports.assertNumber = (val, field, details) => { - exports.assertRequired(val, field, details); - if (!isNumber(val)) { - throw HttpZError.get(`${field} must be a number`, details) - } - }; - - exports.assertPositiveNumber = (val, field, details) => { - exports.assertNumber(val, field, details); - if (val <= 0) { - throw HttpZError.get(`${field} must be a positive number`, details) - } - }; - - exports.assertArray = (val, field, details) => { - exports.assertRequired(val, field, details); - if (!isArray(val)) { - throw HttpZError.get(`${field} must be an array`, details) - } - }; - } (assertions)); - return assertions; - } - - var formDataParamParser; - var hasRequiredFormDataParamParser; - - function requireFormDataParamParser () { - if (hasRequiredFormDataParamParser) return formDataParamParser; - hasRequiredFormDataParamParser = 1; - const consts = requireConsts(); - const { extendIfNotUndefined, trim, trimEnd } = requireUtils(); - const HttpZError = requireError(); - - class FormDataParamParser { - // TODO: test it - static parse(...params) { - const instance = new FormDataParamParser(...params); - return instance.parse() - } - - constructor(paramGroup) { - this.paramGroup = paramGroup; - } - - // TODO: test it - parse() { - this.paramGroup = this.paramGroup.replace(consts.regexps.startNl, '').replace(consts.regexps.endNl, ''); - - const contentDispositionHeader = this._getContentDisposition(); - const contentType = this._getContentType(); - const dispositionType = this._getDispositionType(contentDispositionHeader); - const name = dispositionType === 'form-data' ? this._getParamName(contentDispositionHeader) : undefined; - const fileName = this._getFileName(contentDispositionHeader); - const value = this._getParamValue(); - - const param = { - value, - }; - if (dispositionType !== 'form-data') { - param.type = dispositionType; - } - extendIfNotUndefined(param, 'contentType', contentType); - extendIfNotUndefined(param, 'name', name); - extendIfNotUndefined(param, 'fileName', fileName); - - return param - } - - // TODO: test it - _getContentDisposition() { - const contentDisposition = this.paramGroup.match(consts.regexps.contentDisposition); - if (!contentDisposition) { - throw HttpZError.get('Incorrect Content-Disposition', this.paramGroup) - } - this.paramGroup = this.paramGroup.replace(contentDisposition[0], ''); - return trimEnd(contentDisposition[0], consts.EOL) - } - - // TODO: test it - _getContentType() { - const contentType = this.paramGroup.match(consts.regexps.contentType); - if (contentType) { - this.paramGroup = this.paramGroup.replace(contentType[0], ''); - return contentType - .toString() - .toLowerCase() - .replace(/^content-type: */, '') - .trimEnd(consts.EOL) - } - } - - // TODO: test it - _getDispositionType(contentDisposition) { - const dispositionType = contentDisposition.match(consts.regexps.contentDispositionType); - if (!dispositionType) { - throw HttpZError.get('Incorrect Content-Disposition type', contentDisposition) - } - return dispositionType[0].trim().toLowerCase() - } - - // TODO: test it - _getParamName(contentDisposition) { - const paramName = contentDisposition.match(consts.regexps.dispositionName); - if (!paramName) { - throw HttpZError.get('Incorrect Content-Disposition, expected param name', contentDisposition) - } - return trim(paramName, '"') - } - - // TODO: test it - _getFileName(contentDisposition) { - const fileName = contentDisposition.match(consts.regexps.dispositionFileName); - if (fileName) { - return trim(fileName, '"') - } - } - - // TODO: test it - _getParamValue() { - if (this.paramGroup.match(consts.regexps.startNl)) { - return this.paramGroup.replace(consts.regexps.startNl, '') - } - throw HttpZError.get('Incorrect form-data parameter', this.paramGroup) - } - } - - formDataParamParser = FormDataParamParser; - return formDataParamParser; - } - - var base$1; - var hasRequiredBase$1; - - function requireBase$1 () { - if (hasRequiredBase$1) return base$1; - hasRequiredBase$1 = 1; - const consts = requireConsts(); - const HttpZError = requireError(); - const { isNil, trim } = requireUtils(); - const { splitBy, prettifyHeaderName, head, tail } = requireUtils(); - const formDataParamParser = requireFormDataParamParser(); - - class HttpZBaseParser { - constructor(rawMessage) { - this.rawMessage = rawMessage; - } - - _parseMessageForRows() { - const [headers, body] = splitBy(this.rawMessage, consts.EOL2X); - if (isNil(headers) || isNil(body)) { - throw HttpZError.get( - 'Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]', - ) - } - - this._calcSizes(headers, body); - const headerRows = headers.split(consts.EOL); - - return { - startRow: head(headerRows), - headerRows: tail(headerRows), - bodyRows: body, - } - } - - _parseHeaderRows() { - this.headers = this.headerRows.map((hRow) => { - let [name, value] = splitBy(hRow, ':'); - if (!name) { - throw HttpZError.get('Incorrect header row format, expected: Name: Value', hRow) - } - - // quoted string must be parsed as a single value (https://tools.ietf.org/html/rfc7230#section-3.2.6) - if (isNil(value)) { - value = ''; - } else if (consts.regexps.quoutedHeaderValue.test(value)) { - value = trim(value, '"'); - } - - return { - name: prettifyHeaderName(name), - value, - } - }); - } - - _parseBodyRows() { - if (!this.bodyRows) { - return - } - - this._processTransferEncodingChunked(); - - this.body = {}; - const contentTypeHeader = this._getContentTypeValue(); - if (contentTypeHeader) { - this.body.contentType = contentTypeHeader.toLowerCase().split(';')[0]; - } - switch (this.body.contentType) { - case consts.http.contentTypes.multipart.formData: - case consts.http.contentTypes.multipart.alternative: - case consts.http.contentTypes.multipart.mixed: - case consts.http.contentTypes.multipart.related: - this._parseFormDataBody(); - break - case consts.http.contentTypes.application.xWwwFormUrlencoded: - this._parseUrlencodedBody(); - break - default: - this._parseTextBody(); - break - } - } - - // eslint-disable-next-line max-statements - _processTransferEncodingChunked() { - const isChunked = this.headers.find( - (h) => h.name === consts.http.headers.transferEncoding && h.value.includes('chunked'), - ); - if (!isChunked) { - return - } - - let text = this.bodyRows; - const buffer = []; - do { - const rows = text.match(consts.regexps.chunkRow); - const firstRow = rows ? rows[0] : ''; - const chunkLength = +('0x' + firstRow || '').trim(); - if (!chunkLength) { - throw HttpZError.get('Incorrect row, expected: NumberEOL', this.bodyRows) - } - text = text.slice(firstRow.length); - const chunk = text.slice(0, chunkLength); - buffer.push(chunk); - text = text.slice(chunkLength + consts.EOL.length); - } while (text) - - this.bodyRows = buffer.join(''); - } - - _parseFormDataBody() { - this.body.boundary = this._getBoundary(); - this.body.params = this.bodyRows - .split(`--${this.body.boundary}`) - // skip first and last items, which contains boundary - .filter((unused, index, params) => index > 0 && index < params.length - 1) - .map((paramGroup) => formDataParamParser.parse(paramGroup)); - } - - _parseUrlencodedBody() { - const params = new URLSearchParams(this.bodyRows); - this.body.params = []; - params.forEach((value, name) => { - this.body.params.push({ name, value }); - }); - } - - _parseTextBody() { - this.body.text = this.bodyRows; - } - - _calcSizes(headers, body) { - this.headersSize = (headers + consts.EOL2X).length; - this.bodySize = body.length; - } - - _getContentTypeValue() { - const contentTypeHeader = (this.headers ?? []).find((h) => h.name === consts.http.headers.contentType); - if (!contentTypeHeader) { - return - } - if (!contentTypeHeader.value) { - return - } - return contentTypeHeader.value - } - - _getBoundary() { - const contentTypeValue = this._getContentTypeValue(); - if (!contentTypeValue) { - throw HttpZError.get('Message with multipart/form-data body must have Content-Type header with boundary') - } - - const params = contentTypeValue.split(';')[1]; - if (!params) { - throw HttpZError.get('Message with multipart/form-data body must have Content-Type header with boundary') - } - - const boundary = params.match(consts.regexps.boundary); - if (!boundary) { - throw HttpZError.get('Incorrect boundary, expected: boundary=value', params) - } - return trim(boundary[0], '"') - } - } - - base$1 = HttpZBaseParser; - return base$1; - } - - var request$1; - var hasRequiredRequest$1; - - function requireRequest$1 () { - if (hasRequiredRequest$1) return request$1; - hasRequiredRequest$1 = 1; - const consts = requireConsts(); - const HttpZError = requireError(); - const { splitBy, parseUrl } = requireUtils(); - const { assertNotEmptyString } = requireAssertions(); - const Base = requireBase$1(); - - const SUPER_RANDOM_HOST = 'superrandomhost28476561927456.com'; - - class HttpZRequestParser extends Base { - static parse(...params) { - const instance = new HttpZRequestParser(...params); - return instance.parse() - } - - constructor(rawMessage, opts) { - super(rawMessage); - this.opts = opts; - } - - parse() { - this._parseMessageForRows(); - this._parseHostRow(); - this._parseStartRow(); - this._parseHeaderRows(); - this._parseCookiesRow(); - this._parseBodyRows(); - - return this._generateModel() - } - - _parseMessageForRows() { - const { startRow, headerRows, bodyRows } = super._parseMessageForRows(); - - this.startRow = startRow; - this.hostRow = headerRows.find((row) => row.toLowerCase().startsWith('host:')); - this.headerRows = headerRows; - this.cookiesRow = headerRows.find((row) => row.toLowerCase().startsWith('cookie:')); - this.bodyRows = bodyRows; - } - - _parseHostRow() { - if (this.opts.mandatoryHost) { - assertNotEmptyString(this.hostRow, 'host header'); - } - // eslint-disable-next-line no-unused-vars - const [unused, value] = splitBy(this.hostRow || '', ':'); - if (this.opts.mandatoryHost) { - assertNotEmptyString(value, 'host header value'); - } - - this.host = value; - } - - // eslint-disable-next-line max-statements - _parseStartRow() { - if (!consts.regexps.requestStartRow.test(this.startRow)) { - throw HttpZError.get('Incorrect startRow format, expected: Method request-target HTTP-Version', this.startRow) - } - - const rowElems = this.startRow.split(' '); - this.method = rowElems[0].toUpperCase(); - this.protocolVersion = rowElems[2].toUpperCase(); - this.target = rowElems[1]; - - let parsedUrl; - try { - parsedUrl = parseUrl(this.target, SUPER_RANDOM_HOST); - } catch (err) { - if (err.code === 'ERR_INVALID_URL') { - throw HttpZError.get('Invalid target', this.target) - } - throw err - } - - if (!this.host) { - this.host = parsedUrl.host !== SUPER_RANDOM_HOST ? parsedUrl.host : 'unspecified-host'; - } - this.path = parsedUrl.path; - this.queryParams = parsedUrl.params; - } - - _parseCookiesRow() { - if (!this.cookiesRow) { - return - } - - const [cookieHeaderName, values] = splitBy(this.cookiesRow, ':'); - if (!cookieHeaderName) { - throw HttpZError.get('Incorrect cookie row format, expected: Cookie: Name1=Value1;...', this.cookiesRow) - } - if (!values) { - this.cookies = []; - return - } - this.cookies = values.split(';').map((pair) => { - const [name, value] = splitBy(pair, '='); - const cookie = { - name, - }; - if (value) { - cookie.value = value; - } - if (!cookie.name) { - throw HttpZError.get('Incorrect cookie pair format, expected: Name1=Value1;...', values) - } - return cookie - }); - } - - _generateModel() { - const model = { - method: this.method, - protocolVersion: this.protocolVersion, - target: this.target, - host: this.host, - path: this.path, - headersSize: this.headersSize, - bodySize: this.bodySize, - }; - if (this.queryParams) { - model.queryParams = this.queryParams; - } - if (this.headers) { - model.headers = this.headers; - } - if (this.cookies) { - model.cookies = this.cookies; - } - if (this.body) { - model.body = this.body; - } - - return model - } - } - - request$1 = HttpZRequestParser; - return request$1; - } - - var response$1; - var hasRequiredResponse$1; - - function requireResponse$1 () { - if (hasRequiredResponse$1) return response$1; - hasRequiredResponse$1 = 1; - const consts = requireConsts(); - const HttpZError = requireError(); - const { splitBy, head, tail, isEmpty } = requireUtils(); - const Base = requireBase$1(); - - class HttpZResponseParser extends Base { - static parse(...params) { - const instance = new HttpZResponseParser(...params); - return instance.parse() - } - - parse() { - this._parseMessageForRows(); - this._parseStartRow(); - this._parseHeaderRows(); - this._parseCookieRows(); - this._parseBodyRows(); - - return this._generateModel() - } - - _parseMessageForRows() { - const { startRow, headerRows, bodyRows } = super._parseMessageForRows(); - - this.startRow = startRow; - this.headerRows = headerRows; - this.cookieRows = headerRows.filter((row) => row.toLowerCase().startsWith('set-cookie')); - this.bodyRows = bodyRows; - } - - _parseStartRow() { - if (!consts.regexps.responseStartRow.test(this.startRow)) { - throw HttpZError.get('Incorrect startRow format, expected: HTTP-Version status-code reason-phrase', this.startRow) - } - - const rowElems = this.startRow.split(' '); - this.protocolVersion = rowElems[0].toUpperCase(); - this.statusCode = +rowElems[1]; - this.statusMessage = rowElems.splice(2).join(' '); - } - - _parseCookieRows() { - if (isEmpty(this.cookieRows)) { - return - } - - // eslint-disable-next-line max-statements - this.cookies = this.cookieRows.map((cookiesRow) => { - // eslint-disable-next-line no-unused-vars - const [unused, values] = splitBy(cookiesRow, ':'); - if (!values) { - return {} - } - const params = values.split(';'); - const paramWithName = head(params); - const otherParams = tail(params); - - let [name, value] = paramWithName.split('='); - name = name.trim(); - value = value.trim(); - if (!name) { - throw HttpZError.get('Incorrect set-cookie pair format, expected: Name1=Value1;...', values) - } - - const cookie = { - name, - }; - if (value) { - cookie.value = value; - } - if (otherParams.length > 0) { - cookie.params = otherParams.map((param) => param.trim()); - } - - return cookie - }); - } - - _generateModel() { - const model = { - protocolVersion: this.protocolVersion, - statusCode: this.statusCode, - statusMessage: this.statusMessage, - headersSize: this.headersSize, - bodySize: this.bodySize, - }; - if (this.headers) { - model.headers = this.headers; - } - if (this.cookies) { - model.cookies = this.cookies; - } - if (this.body) { - model.body = this.body; - } - - return model - } - } - - response$1 = HttpZResponseParser; - return response$1; - } - - var parsers; - var hasRequiredParsers; - - function requireParsers () { - if (hasRequiredParsers) return parsers; - hasRequiredParsers = 1; - const consts = requireConsts(); - const { head, isNil, isString } = requireUtils(); - const HttpZError = requireError(); - const RequestParser = requireRequest$1(); - const ResponseParser = requireResponse$1(); - - parsers = (rawMessage, opts = {}) => { - if (isNil(rawMessage)) { - throw HttpZError.get('rawMessage is required') - } - if (!isString(rawMessage)) { - throw HttpZError.get('rawMessage must be a string') - } - - const firstRow = head(rawMessage.split(consts.EOL)); - if (consts.regexps.requestStartRow.test(firstRow)) { - return RequestParser.parse(rawMessage, opts) - } - if (consts.regexps.responseStartRow.test(firstRow)) { - return ResponseParser.parse(rawMessage) - } - throw HttpZError.get('rawMessage has incorrect format') - }; - return parsers; - } - - var base; - var hasRequiredBase; - - function requireBase () { - if (hasRequiredBase) return base; - hasRequiredBase = 1; - const { isEmpty } = requireUtils(); - const consts = requireConsts(); - const { prettifyHeaderName, getEmptyStringForUndefined, arrayToPairs } = requireUtils(); - const { assertArray, assertNotEmptyString, assertString } = requireAssertions(); - - class HttpZBaseBuilder { - constructor({ headers, body }) { - this.headers = headers; - this.body = body; - } - - _generateHeaderRows() { - assertArray(this.headers, 'headers'); - - if (isEmpty(this.headers)) { - return '' - } - - const headerRowsStr = this.headers - .map((header, index) => { - assertNotEmptyString(header.name, 'header name', `header index: ${index}`); - assertString(header.value, 'header.value', `header index: ${index}`); - - const headerName = prettifyHeaderName(header.name); - const headerValue = header.value; - - return headerName + ': ' + headerValue - }) - .join(consts.EOL); - - return headerRowsStr + consts.EOL - } - - _generateBodyRows() { - if (isEmpty(this.body)) { - return '' - } - - this._processTransferEncodingChunked(); - - switch (this.body.contentType) { - case consts.http.contentTypes.multipart.formData: - case consts.http.contentTypes.multipart.alternative: - case consts.http.contentTypes.multipart.mixed: - case consts.http.contentTypes.multipart.related: - return this._generateFormDataBody() - case consts.http.contentTypes.application.xWwwFormUrlencoded: - return this._generateUrlencodedBody() - default: - return this._generateTextBody() - } - } - - _processTransferEncodingChunked() { - const isChunked = this.headers.find( - (h) => h.name === consts.http.headers.transferEncoding && h.value.includes('chunked'), - ); - if (!isChunked) { - return - } - - const body = getEmptyStringForUndefined(this.body.text); - const defChunkLength = 25; - const buffer = []; - let index = 0; - while (index < body.length) { - const chunk = body.slice(index, index + defChunkLength); - buffer.push(chunk.length.toString(16).toUpperCase()); - buffer.push(chunk); - index += defChunkLength; - } - this.body.text = buffer.join(consts.EOL); - } - - _generateFormDataBody() { - assertArray(this.body.params, 'body.params'); - assertNotEmptyString(this.body.boundary, 'body.boundary'); - - if (isEmpty(this.body.params)) { - return '' - } - - const paramsStr = this.body.params - // eslint-disable-next-line max-statements - .map((param, index) => { - if (!param.type) { - assertNotEmptyString(param.name, 'body.params[index].name', `param index: ${index}`); - } - let paramGroupStr = '--' + this.body.boundary; - paramGroupStr += consts.EOL; - paramGroupStr += `Content-Disposition: ${param.type || 'form-data'}`; - if (param.name) { - paramGroupStr += `; name="${param.name}"`; - } - if (param.fileName) { - paramGroupStr += `; filename="${param.fileName}"`; - } - paramGroupStr += consts.EOL; - if (param.contentType) { - paramGroupStr += `Content-Type: ${param.contentType}`; - paramGroupStr += consts.EOL; - } - paramGroupStr += consts.EOL; - paramGroupStr += getEmptyStringForUndefined(param.value); - paramGroupStr += consts.EOL; - return paramGroupStr - }) - .join(''); - - return `${paramsStr}--${this.body.boundary}--` - } - - _generateUrlencodedBody() { - assertArray(this.body.params, 'body.params'); - const paramPairs = arrayToPairs(this.body.params); - - return new URLSearchParams(paramPairs).toString() - } - - _generateTextBody() { - return getEmptyStringForUndefined(this.body.text) - } - } - - base = HttpZBaseBuilder; - return base; - } - - var request; - var hasRequiredRequest; - - function requireRequest () { - if (hasRequiredRequest) return request; - hasRequiredRequest = 1; - const consts = requireConsts(); - const { assertArray, assertNotEmptyString } = requireAssertions(); - const { prettifyHeaderName } = requireUtils(); - const HttpZError = requireError(); - const Base = requireBase(); - - class HttpZRequestBuilder extends Base { - static build(...params) { - const instance = new HttpZRequestBuilder(...params); - return instance.build() - } - - constructor({ method, protocolVersion, target, headers, body }, opts) { - super({ headers, body }); - this.method = method; - this.protocolVersion = protocolVersion; - this.target = target; - this.opts = opts; - } - - build() { - return '' + this._generateStartRow() + this._generateHeaderRows() + consts.EOL + this._generateBodyRows() - } - - _generateStartRow() { - assertNotEmptyString(this.method, 'method'); - assertNotEmptyString(this.protocolVersion, 'protocolVersion'); - assertNotEmptyString(this.target, 'target'); - - return '' + this.method.toUpperCase() + ' ' + this.target + ' ' + this.protocolVersion.toUpperCase() + consts.EOL - } - - _generateHeaderRows() { - assertArray(this.headers, 'headers'); - if (this.opts.mandatoryHost) { - const hostHeader = this.headers.find((name) => prettifyHeaderName(name) === consts.http.headers.host); - if (!hostHeader) { - throw HttpZError.get('Host header is required') - } - } - - return super._generateHeaderRows() - } - } - - request = HttpZRequestBuilder; - return request; - } - - var response; - var hasRequiredResponse; - - function requireResponse () { - if (hasRequiredResponse) return response; - hasRequiredResponse = 1; - const consts = requireConsts(); - const { assertNotEmptyString, assertPositiveNumber } = requireAssertions(); - const Base = requireBase(); - - class HttpZResponseBuilder extends Base { - static build(...params) { - const instance = new HttpZResponseBuilder(...params); - return instance.build() - } - - constructor({ protocolVersion, statusCode, statusMessage, headers, body }) { - super({ headers, body }); - this.protocolVersion = protocolVersion; - this.statusCode = statusCode; - this.statusMessage = statusMessage; - } - - build() { - return '' + this._generateStartRow() + this._generateHeaderRows() + consts.EOL + this._generateBodyRows() - } - - _generateStartRow() { - assertNotEmptyString(this.protocolVersion, 'protocolVersion'); - assertPositiveNumber(this.statusCode, 'statusCode'); - assertNotEmptyString(this.statusMessage, 'statusMessage'); - - const protocolVersion = this.protocolVersion.toUpperCase(); - return `${protocolVersion} ${this.statusCode} ${this.statusMessage}` + consts.EOL - } - } - - response = HttpZResponseBuilder; - return response; - } - - var builders; - var hasRequiredBuilders; - - function requireBuilders () { - if (hasRequiredBuilders) return builders; - hasRequiredBuilders = 1; - const { isNil, isPlainObject } = requireUtils(); - const HttpZError = requireError(); - const RequestBuilder = requireRequest(); - const ResponseBuilder = requireResponse(); - - builders = (messageModel, opts = {}) => { - if (isNil(messageModel)) { - throw HttpZError.get('messageModel is required') - } - if (!isPlainObject(messageModel)) { - throw HttpZError.get('messageModel must be a plain object') - } - if (messageModel.method) { - return RequestBuilder.build(messageModel, opts) - } - if (messageModel.statusCode) { - return ResponseBuilder.build(messageModel) - } - throw HttpZError.get('messageModel has incorrect format') - }; - return builders; - } - - var httpZ; - var hasRequiredHttpZ; - - function requireHttpZ () { - if (hasRequiredHttpZ) return httpZ; - hasRequiredHttpZ = 1; - httpZ = { - consts: requireConsts(), - HttpZError: requireError(), - utils: requireUtils(), - parse: requireParsers(), - build: requireBuilders() - }; - return httpZ; - } - - var httpZExports = requireHttpZ(); - var index = /*@__PURE__*/getDefaultExportFromCjs(httpZExports); - - return index; - -})); diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..d321458 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,10 @@ +module.exports = { + testEnvironment: "node", + testMatch: [ + "**/test/**/*.ts" + ], + transform: { + "^.+.ts$": ["ts-jest", {}], + }, + modulePathIgnorePatterns: ['/demo'] +}; \ No newline at end of file diff --git a/package.json b/package.json index efde03d..f035d2f 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,15 @@ "index.d.ts" ], "scripts": { - "build": "rollup -c", - "prettify": "prettier './src/**/*.js' './test/**/*.js' --write", - "lint": "eslint --ext .js src/ test/", - "test": "NODE_ENV=test mocha", + "prepublish": "pnpm build", + "clean": "rm -rf ./build ./dist", + "build": "pnpm clean && pnpm build:tsc && pnpm build:dist", + "build:tsc": "pnpm tsc --project tsconfig.dist.json", + "build:dist": "pnpm rollup -c", + "prettify": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "lint": "eslint src/ test/ --ext .ts --fix", + "format": "pnpm lint && pnpm prettify", + "test": "NODE_ENV=test jest", "coverage": "nyc pnpm test", "coverage:codecov": "nyc --reporter=lcov pnpm test" }, @@ -42,17 +47,21 @@ "url": "https://github.com/AlexanderMac/http-z/issues" }, "homepage": "https://github.com/AlexanderMac/http-z", - "dependencies": {}, "devDependencies": { "@rollup/plugin-commonjs": "^28.0.2", "@rollup/plugin-node-resolve": "^16.0.0", - "eslint": "^8.57.1", - "mocha": "^11.0.1", - "n-assert": "^7.0.0", + "@trivago/prettier-plugin-sort-imports": "^5.2.0", + "@types/jest": "^29.5.14", + "@types/node": "^22.10.10", + "@typescript-eslint/eslint-plugin": "^8.19.1", + "@typescript-eslint/parser": "^8.21.0", + "eslint": "^9.18.0", + "jest": "^29.7.0", "nyc": "^17.1.0", "prettier": "^3.4.2", "rollup": "^4.31.0", - "should": "^13.2.3", - "sinon": "^19.0.2" + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4552c19..66fb2e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,15 +14,27 @@ importers: '@rollup/plugin-node-resolve': specifier: ^16.0.0 version: 16.0.0(rollup@4.32.0) + '@trivago/prettier-plugin-sort-imports': + specifier: ^5.2.0 + version: 5.2.1(prettier@3.4.2) + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 + '@types/node': + specifier: ^22.10.10 + version: 22.10.10 + '@typescript-eslint/eslint-plugin': + specifier: ^8.19.1 + version: 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/parser': + specifier: ^8.21.0 + version: 8.21.0(eslint@9.18.0)(typescript@5.7.3) eslint: - specifier: ^8.57.1 - version: 8.57.1 - mocha: - specifier: ^11.0.1 - version: 11.1.0 - n-assert: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^9.18.0 + version: 9.18.0 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) nyc: specifier: ^17.1.0 version: 17.1.0 @@ -32,12 +44,15 @@ importers: rollup: specifier: ^4.31.0 version: 4.32.0 - should: - specifier: ^13.2.3 - version: 13.2.3 - sinon: - specifier: ^19.0.2 - version: 19.0.2 + ts-jest: + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)))(typescript@5.7.3) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + typescript: + specifier: ^5.7.3 + version: 5.7.3 packages: @@ -75,6 +90,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -96,6 +115,97 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} @@ -108,6 +218,13 @@ packages: resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -118,30 +235,49 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.18.0': + resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -151,6 +287,72 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -169,6 +371,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -181,10 +386,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@rollup/plugin-commonjs@28.0.2': resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} engines: {node: '>=16.0.0 || 14 >= 14.17'} @@ -307,32 +508,147 @@ packages: cpu: [x64] os: [win32] + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - '@sinonjs/fake-timers@13.0.5': - resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@trivago/prettier-plugin-sort-imports@5.2.1': + resolution: {integrity: sha512-NDZndt0fmVThIx/8cExuJHLZagUVzfGCoVrwH9x6aZvwfBdkrDFTYujecek6X2WpG4uUFsVaPg5+aNQPSyjcmw==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - '@sinonjs/samsam@8.0.2': - resolution: {integrity: sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==} + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@sinonjs/text-encoding@0.7.3': - resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@22.10.10': + resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@8.21.0': + resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.21.0': + resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.21.0': + resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.21.0': + resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.21.0': + resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.21.0': + resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.21.0': + resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.21.0': + resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -345,25 +661,21 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -376,22 +688,46 @@ packages: archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -402,20 +738,20 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.24.4: resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bson@4.7.2: - resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} - engines: {node: '>=6.9.0'} + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} caching-transform@4.0.0: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} @@ -440,9 +776,16 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} @@ -455,6 +798,13 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -474,6 +824,14 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -491,9 +849,13 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -506,29 +868,35 @@ packages: resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} engines: {node: '>=8'} - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} - diff@7.0.0: - resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} - engines: {node: '>=0.3.1'} + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true electron-to-chromium@1.5.87: resolution: {integrity: sha512-mPFwmEWmRivw2F8x3w3l2m6htAUN97Gy0kwpO++2m9iT1Gt8RCFVUfv9U/sIbHJ6rY4P6/ooqFL/eL7ock+pPg==} + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -537,27 +905,39 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.18.0: + resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -583,9 +963,25 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -595,6 +991,9 @@ packages: fastq@1.18.0: resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} peerDependencies: @@ -603,9 +1002,12 @@ packages: picomatch: optional: true - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -623,13 +1025,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} @@ -668,6 +1066,10 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -676,10 +1078,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -688,9 +1086,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -710,15 +1108,12 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} @@ -728,6 +1123,11 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -743,9 +1143,8 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} @@ -759,6 +1158,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -770,14 +1173,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -788,10 +1183,6 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -807,6 +1198,10 @@ packages: resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} @@ -827,51 +1222,196 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - just-extend@6.2.0: - resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} locate-path@6.0.0: @@ -881,9 +1421,8 @@ packages: lodash.flattendeep@4.4.0: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -891,13 +1430,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -912,6 +1444,27 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -923,27 +1476,14 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mocha@11.1.0: - resolution: {integrity: sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - n-assert@7.0.0: - resolution: {integrity: sha512-YfW/5gDMAo+SCprpLKgFs2M9lk6jK92HmuX62VkVEj8UczrnoR1plfuf5X63/0v1RmQFpGBIuoOGVBaBBHyS6g==} - engines: {node: '>=12', npm: '>=7'} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - nise@6.1.1: - resolution: {integrity: sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==} + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-preload@0.2.1: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} @@ -956,6 +1496,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + nyc@17.1.0: resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} engines: {node: '>=18'} @@ -964,6 +1508,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -996,13 +1544,14 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1018,14 +1567,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1037,6 +1578,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -1050,23 +1595,30 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process-on-spawn@1.1.0: resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} engines: {node: '>=8'} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} release-zalgo@1.0.0: resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} @@ -1079,6 +1631,10 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1087,6 +1643,10 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -1109,9 +1669,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1121,9 +1678,6 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -1135,24 +1689,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - should-equal@2.0.0: - resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} - - should-format@3.0.3: - resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==} - - should-type-adaptors@1.1.0: - resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==} - - should-type@1.4.0: - resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==} - - should-util@1.0.1: - resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==} - - should@13.2.3: - resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -1160,8 +1696,15 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sinon@19.0.2: - resolution: {integrity: sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -1174,26 +1717,30 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1214,13 +1761,57 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1229,12 +1820,8 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} type-fest@0.8.1: @@ -1244,6 +1831,14 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + update-browserslist-db@1.1.2: resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true @@ -1257,6 +1852,16 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -1269,9 +1874,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerpool@6.5.1: - resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -1280,16 +1882,16 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -1308,10 +1910,6 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -1320,6 +1918,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -1352,7 +1954,7 @@ snapshots: '@babel/traverse': 7.26.5 '@babel/types': 7.26.5 convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1391,6 +1993,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.25.9': {} @@ -1406,6 +2010,91 @@ snapshots: dependencies: '@babel/types': 7.26.5 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 @@ -1419,7 +2108,7 @@ snapshots: '@babel/parser': 7.26.5 '@babel/template': 7.25.9 '@babel/types': 7.26.5 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1429,19 +2118,37 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + '@bcoe/v8-coverage@0.2.3': {} + + '@cspotcode/source-map-support@0.8.1': dependencies: - eslint: 8.57.1 + '@jridgewell/trace-mapping': 0.3.9 + + '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0)': + dependencies: + eslint: 9.18.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.4.0(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1450,28 +2157,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.18.0': {} + + '@eslint/object-schema@2.1.5': {} - '@humanwhocodes/config-array@0.13.0': + '@eslint/plugin-kit@0.2.5': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/core': 0.10.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@humanwhocodes/retry@0.4.1': {} '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -1483,6 +2189,168 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.10.10 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.10.10 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.10.10 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -1500,6 +2368,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1512,9 +2385,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 - '@pkgjs/parseargs@0.11.0': - optional: true - '@rollup/plugin-commonjs@28.0.2(rollup@4.32.0)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.32.0) @@ -1524,6 +2394,7 @@ snapshots: is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 + optionalDependencies: rollup: 4.32.0 '@rollup/plugin-node-resolve@16.0.0(rollup@4.32.0)': @@ -1533,6 +2404,7 @@ snapshots: deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 + optionalDependencies: rollup: 4.32.0 '@rollup/pluginutils@5.1.4(rollup@4.32.0)': @@ -1540,6 +2412,7 @@ snapshots: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 + optionalDependencies: rollup: 4.32.0 '@rollup/rollup-android-arm-eabi@4.32.0': @@ -1599,32 +2472,179 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.32.0': optional: true + '@sinclair/typebox@0.27.8': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 - '@sinonjs/fake-timers@13.0.5': + '@sinonjs/fake-timers@10.3.0': dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/samsam@8.0.2': + '@trivago/prettier-plugin-sort-imports@5.2.1(prettier@3.4.2)': dependencies: - '@sinonjs/commons': 3.0.1 - lodash.get: 4.4.2 - type-detect: 4.1.0 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.4.2 + transitivePeerDependencies: + - supports-color + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} - '@sinonjs/text-encoding@0.7.3': {} + '@tsconfig/node16@1.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.5 '@types/estree@1.0.6': {} + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.10.10 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/node@22.10.10': + dependencies: + undici-types: 6.20.0 + '@types/resolve@1.20.2': {} - '@ungap/structured-clone@1.3.0': {} + '@types/stack-utils@2.0.3': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + eslint: 9.18.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0 + eslint: 9.18.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + + '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.18.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.21.0': {} + + '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + eslint: 9.18.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + eslint-visitor-keys: 4.2.0 acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + acorn@8.14.0: {} aggregate-error@3.1.0: @@ -1639,17 +2659,17 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} + ansi-styles@5.2.0: {} anymatch@3.1.3: dependencies: @@ -1662,17 +2682,72 @@ snapshots: archy@1.0.0: {} + arg@4.1.3: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 argparse@2.0.1: {} - balanced-match@1.0.2: {} + async@3.2.6: {} - base64-js@1.5.1: {} + babel-jest@29.7.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color - binary-extensions@2.3.0: {} + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + + babel-preset-jest@29.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + + balanced-match@1.0.2: {} brace-expansion@1.1.11: dependencies: @@ -1687,8 +2762,6 @@ snapshots: dependencies: fill-range: 7.1.1 - browser-stdout@1.3.1: {} - browserslist@4.24.4: dependencies: caniuse-lite: 1.0.30001695 @@ -1696,14 +2769,15 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) - bson@4.7.2: + bs-logger@0.2.6: dependencies: - buffer: 5.7.1 + fast-json-stable-stringify: 2.1.0 - buffer@5.7.1: + bser@2.1.1: dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + node-int64: 0.4.0 + + buffer-from@1.1.2: {} caching-transform@4.0.0: dependencies: @@ -1725,17 +2799,11 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + char-regex@1.0.2: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} clean-stack@2.2.0: {} @@ -1751,6 +2819,10 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -1765,20 +2837,36 @@ snapshots: convert-source-map@2.0.0: {} + create-jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - debug@4.4.0(supports-color@8.1.1): + debug@4.4.0: dependencies: ms: 2.1.3 - supports-color: 8.1.1 decamelize@1.2.0: {} - decamelize@4.0.0: {} + dedent@1.5.3: {} deep-is@0.1.4: {} @@ -1788,83 +2876,87 @@ snapshots: dependencies: strip-bom: 4.0.0 - diff@5.2.0: {} + detect-newline@3.1.0: {} - diff@7.0.0: {} + diff-sequences@29.6.3: {} - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 + diff@4.0.2: {} - eastasianwidth@0.2.0: {} + ejs@3.1.10: + dependencies: + jake: 10.9.2 electron-to-chromium@1.5.87: {} + emittery@0.13.1: {} + emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 es6-error@4.1.1: {} escalade@3.2.0: {} + escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.0: {} + + eslint@9.18.0: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@8.1.1) - doctrine: 3.0.0 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.3.0: dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -1882,8 +2974,38 @@ snapshots: esutils@2.0.3: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + fast-deep-equal@3.1.3: {} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -1892,13 +3014,21 @@ snapshots: dependencies: reusify: 1.0.4 - fdir@6.4.3(picomatch@4.0.2): + fb-watchman@2.0.2: dependencies: + bser: 2.1.1 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: picomatch: 4.0.2 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 fill-range@7.1.1: dependencies: @@ -1920,13 +3050,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 - - flat@5.0.2: {} flatted@3.3.2: {} @@ -1955,22 +3082,15 @@ snapshots: get-package-type@0.1.0: {} + get-stream@6.0.1: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 glob-parent@6.0.2: dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 + is-glob: 4.0.3 glob@7.2.3: dependencies: @@ -1983,9 +3103,7 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} graceful-fs@4.2.11: {} @@ -2002,11 +3120,9 @@ snapshots: dependencies: function-bind: 1.1.2 - he@1.2.0: {} - html-escaper@2.0.2: {} - ieee754@1.2.1: {} + human-signals@2.1.0: {} ignore@5.3.2: {} @@ -2015,6 +3131,11 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -2026,9 +3147,7 @@ snapshots: inherits@2.0.4: {} - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 + is-arrayish@0.2.1: {} is-core-module@2.16.1: dependencies: @@ -2038,6 +3157,8 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-generator-fn@2.1.0: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -2046,10 +3167,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - - is-plain-obj@2.1.0: {} - is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 @@ -2058,8 +3175,6 @@ snapshots: is-typedarray@1.0.0: {} - is-unicode-supported@0.1.0: {} - is-windows@1.0.2: {} isexe@2.0.0: {} @@ -2070,6 +3185,16 @@ snapshots: dependencies: append-transform: 2.0.0 + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.26.0 @@ -2097,7 +3222,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -2108,11 +3233,323 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@3.4.3: + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + javascript-natural-sort@0.7.1: {} + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + dependencies: + '@babel/core': 7.26.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.10.10 + ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.10.10 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: dependencies: - '@isaacs/cliui': 8.0.2 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.5 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.10.10 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node js-tokens@4.0.0: {} @@ -2129,23 +3566,29 @@ snapshots: json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} - just-extend@6.2.0: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + + leven@3.1.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + lines-and-columns@1.2.4: {} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -2156,19 +3599,12 @@ snapshots: lodash.flattendeep@4.4.0: {} - lodash.get@4.4.2: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} lodash@4.17.21: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - lru-cache@10.4.3: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -2185,6 +3621,23 @@ snapshots: dependencies: semver: 7.6.3 + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -2197,48 +3650,11 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minipass@7.1.2: {} - - mocha@11.1.0: - dependencies: - ansi-colors: 4.1.3 - browser-stdout: 1.3.1 - chokidar: 3.6.0 - debug: 4.4.0(supports-color@8.1.1) - diff: 5.2.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 10.4.5 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.1.6 - ms: 2.1.3 - serialize-javascript: 6.0.2 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.5.1 - yargs: 17.7.2 - yargs-parser: 21.1.1 - yargs-unparser: 2.0.0 - ms@2.1.3: {} - n-assert@7.0.0: - dependencies: - bson: 4.7.2 - lodash: 4.17.21 - should: 13.2.3 - natural-compare@1.4.0: {} - nise@6.1.1: - dependencies: - '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers': 13.0.5 - '@sinonjs/text-encoding': 0.7.3 - just-extend: 6.2.0 - path-to-regexp: 8.2.0 + node-int64@0.4.0: {} node-preload@0.2.1: dependencies: @@ -2248,6 +3664,10 @@ snapshots: normalize-path@3.0.0: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + nyc@17.1.0: dependencies: '@istanbuljs/load-nyc-config': 1.1.0 @@ -2284,6 +3704,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -2322,12 +3746,17 @@ snapshots: lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 - package-json-from-dist@1.0.1: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -2336,19 +3765,14 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@8.2.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@4.0.2: {} + pirates@4.0.6: {} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -2357,21 +3781,28 @@ snapshots: prettier@3.4.2: {} + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + process-on-spawn@1.1.0: dependencies: fromentries: 1.3.2 + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + punycode@2.3.1: {} - queue-microtask@1.2.3: {} + pure-rand@6.1.0: {} - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 + queue-microtask@1.2.3: {} - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + react-is@18.3.1: {} release-zalgo@1.0.0: dependencies: @@ -2381,10 +3812,16 @@ snapshots: require-main-filename@2.0.0: {} + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + resolve-from@4.0.0: {} resolve-from@5.0.0: {} + resolve.exports@2.0.3: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -2426,16 +3863,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 - safe-buffer@5.2.1: {} - semver@6.3.1: {} semver@7.6.3: {} - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - set-blocking@2.0.0: {} shebang-command@2.0.0: @@ -2444,44 +3875,18 @@ snapshots: shebang-regex@3.0.0: {} - should-equal@2.0.0: - dependencies: - should-type: 1.4.0 - - should-format@3.0.3: - dependencies: - should-type: 1.4.0 - should-type-adaptors: 1.1.0 - - should-type-adaptors@1.1.0: - dependencies: - should-type: 1.4.0 - should-util: 1.0.1 - - should-type@1.4.0: {} - - should-util@1.0.1: {} - - should@13.2.3: - dependencies: - should-equal: 2.0.0 - should-format: 3.0.3 - should-type: 1.4.0 - should-type-adaptors: 1.1.0 - should-util: 1.0.1 - signal-exit@3.0.7: {} signal-exit@4.1.0: {} - sinon@19.0.2: + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + source-map-support@0.5.13: dependencies: - '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers': 13.0.5 - '@sinonjs/samsam': 8.0.2 - diff: 7.0.0 - nise: 6.1.1 - supports-color: 7.2.0 + buffer-from: 1.1.2 + source-map: 0.6.1 source-map@0.6.1: {} @@ -2496,28 +3901,29 @@ snapshots: sprintf-js@1.0.3: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - strip-bom@4.0.0: {} + strip-final-newline@2.0.0: {} + strip-json-comments@3.1.1: {} supports-color@7.2.0: @@ -2536,21 +3942,60 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} + tmpl@1.0.5: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + ts-api-utils@2.0.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)))(typescript@5.7.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.7.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + + ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.10.10 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 type-detect@4.0.8: {} - type-detect@4.1.0: {} - - type-fest@0.20.2: {} + type-fest@0.21.3: {} type-fest@0.8.1: {} @@ -2558,6 +4003,10 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typescript@5.7.3: {} + + undici-types@6.20.0: {} + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -2570,6 +4019,18 @@ snapshots: uuid@8.3.2: {} + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + which-module@2.0.1: {} which@2.0.2: @@ -2578,8 +4039,6 @@ snapshots: word-wrap@1.2.5: {} - workerpool@6.5.1: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -2592,12 +4051,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - wrappy@1.0.2: {} write-file-atomic@3.0.3: @@ -2607,6 +4060,11 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + y18n@4.0.3: {} y18n@5.0.8: {} @@ -2620,13 +4078,6 @@ snapshots: yargs-parser@21.1.1: {} - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -2651,4 +4102,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yn@3.1.1: {} + yocto-queue@0.1.0: {} diff --git a/src/assertions.js b/src/assertions.js deleted file mode 100644 index 1ec50aa..0000000 --- a/src/assertions.js +++ /dev/null @@ -1,43 +0,0 @@ -const { isNil, isString, isEmpty, isNumber, isArray } = require('./utils') -const HttpZError = require('./error') - -exports.assertRequired = (val, field, details) => { - if (isNil(val)) { - throw HttpZError.get(`${field} is required`, details) - } -} - -exports.assertString = (val, field, details) => { - exports.assertRequired(val, field, details) - if (!isString(val)) { - throw HttpZError.get(`${field} must be a string`, details) - } -} - -exports.assertNotEmptyString = (val, field, details) => { - exports.assertString(val, field, details) - if (isEmpty(val)) { - throw HttpZError.get(`${field} must be not empty string`, details) - } -} - -exports.assertNumber = (val, field, details) => { - exports.assertRequired(val, field, details) - if (!isNumber(val)) { - throw HttpZError.get(`${field} must be a number`, details) - } -} - -exports.assertPositiveNumber = (val, field, details) => { - exports.assertNumber(val, field, details) - if (val <= 0) { - throw HttpZError.get(`${field} must be a positive number`, details) - } -} - -exports.assertArray = (val, field, details) => { - exports.assertRequired(val, field, details) - if (!isArray(val)) { - throw HttpZError.get(`${field} must be an array`, details) - } -} diff --git a/src/assertions.ts b/src/assertions.ts new file mode 100644 index 0000000..40ebc36 --- /dev/null +++ b/src/assertions.ts @@ -0,0 +1,43 @@ +import { HttpZError } from './error' +import { isNil, isString, isEmpty, isNumber, isArray } from './utils' + +export const assertRequired = (val: unknown, field: string, details?: string): void | never => { + if (isNil(val)) { + throw HttpZError.get(`${field} is required`, details) + } +} + +export const assertString = (val: unknown, field: string, details?: string): void | never => { + assertRequired(val, field, details) + if (!isString(val)) { + throw HttpZError.get(`${field} must be a string`, details) + } +} + +export const assertNotEmptyString = (val: unknown, field: string, details?: string): void | never => { + assertString(val, field, details) + if (isEmpty(val)) { + throw HttpZError.get(`${field} must be not empty string`, details) + } +} + +export const assertNumber = (val: unknown, field: string, details?: string): void | never => { + assertRequired(val, field, details) + if (!isNumber(val)) { + throw HttpZError.get(`${field} must be a number`, details) + } +} + +export const assertPositiveNumber = (val: unknown, field: string, details?: string): void | never => { + assertNumber(val, field, details) + if (val <= 0) { + throw HttpZError.get(`${field} must be a positive number`, details) + } +} + +export const assertArray = (val: unknown, field: string, details?: string): void | never => { + assertRequired(val, field, details) + if (!isArray(val)) { + throw HttpZError.get(`${field} must be an array`, details) + } +} diff --git a/src/builders/base.js b/src/builders/base.js deleted file mode 100644 index 731bd72..0000000 --- a/src/builders/base.js +++ /dev/null @@ -1,125 +0,0 @@ -const { isEmpty } = require('../utils') -const consts = require('../consts') -const { prettifyHeaderName, getEmptyStringForUndefined, arrayToPairs } = require('../utils') -const { assertArray, assertNotEmptyString, assertString } = require('../assertions') - -class HttpZBaseBuilder { - constructor({ headers, body }) { - this.headers = headers - this.body = body - } - - _generateHeaderRows() { - assertArray(this.headers, 'headers') - - if (isEmpty(this.headers)) { - return '' - } - - const headerRowsStr = this.headers - .map((header, index) => { - assertNotEmptyString(header.name, 'header name', `header index: ${index}`) - assertString(header.value, 'header.value', `header index: ${index}`) - - const headerName = prettifyHeaderName(header.name) - const headerValue = header.value - - return headerName + ': ' + headerValue - }) - .join(consts.EOL) - - return headerRowsStr + consts.EOL - } - - _generateBodyRows() { - if (isEmpty(this.body)) { - return '' - } - - this._processTransferEncodingChunked() - - switch (this.body.contentType) { - case consts.http.contentTypes.multipart.formData: - case consts.http.contentTypes.multipart.alternative: - case consts.http.contentTypes.multipart.mixed: - case consts.http.contentTypes.multipart.related: - return this._generateFormDataBody() - case consts.http.contentTypes.application.xWwwFormUrlencoded: - return this._generateUrlencodedBody() - default: - return this._generateTextBody() - } - } - - _processTransferEncodingChunked() { - const isChunked = this.headers.find( - (h) => h.name === consts.http.headers.transferEncoding && h.value.includes('chunked'), - ) - if (!isChunked) { - return - } - - const body = getEmptyStringForUndefined(this.body.text) - const defChunkLength = 25 - const buffer = [] - let index = 0 - while (index < body.length) { - const chunk = body.slice(index, index + defChunkLength) - buffer.push(chunk.length.toString(16).toUpperCase()) - buffer.push(chunk) - index += defChunkLength - } - this.body.text = buffer.join(consts.EOL) - } - - _generateFormDataBody() { - assertArray(this.body.params, 'body.params') - assertNotEmptyString(this.body.boundary, 'body.boundary') - - if (isEmpty(this.body.params)) { - return '' - } - - const paramsStr = this.body.params - // eslint-disable-next-line max-statements - .map((param, index) => { - if (!param.type) { - assertNotEmptyString(param.name, 'body.params[index].name', `param index: ${index}`) - } - let paramGroupStr = '--' + this.body.boundary - paramGroupStr += consts.EOL - paramGroupStr += `Content-Disposition: ${param.type || 'form-data'}` - if (param.name) { - paramGroupStr += `; name="${param.name}"` - } - if (param.fileName) { - paramGroupStr += `; filename="${param.fileName}"` - } - paramGroupStr += consts.EOL - if (param.contentType) { - paramGroupStr += `Content-Type: ${param.contentType}` - paramGroupStr += consts.EOL - } - paramGroupStr += consts.EOL - paramGroupStr += getEmptyStringForUndefined(param.value) - paramGroupStr += consts.EOL - return paramGroupStr - }) - .join('') - - return `${paramsStr}--${this.body.boundary}--` - } - - _generateUrlencodedBody() { - assertArray(this.body.params, 'body.params') - const paramPairs = arrayToPairs(this.body.params) - - return new URLSearchParams(paramPairs).toString() - } - - _generateTextBody() { - return getEmptyStringForUndefined(this.body.text) - } -} - -module.exports = HttpZBaseBuilder diff --git a/src/builders/base.ts b/src/builders/base.ts new file mode 100644 index 0000000..fb8f264 --- /dev/null +++ b/src/builders/base.ts @@ -0,0 +1,125 @@ +import { assertArray, assertNotEmptyString, assertString } from '../assertions' +import { EOL, HttpContentApplicationType, HttpContentMultipartType, HttpHeader } from '../constants' +import { HttpZBody, HttpZHeader, HttpZParam } from '../types' +import { isEmpty, prettifyHeaderName, getEmptyStringForUndefined, arrayToPairs } from '../utils' + +export class HttpZBaseBuilder { + protected readonly headers: HttpZHeader[] + protected readonly body: HttpZBody | undefined + + constructor(headers: HttpZHeader[], body: HttpZBody | undefined) { + this.headers = headers + this.body = body + } + + protected _generateHeaderRows(): string { + assertArray(this.headers, 'headers') + + if (isEmpty(this.headers)) { + return '' + } + + const headerRowsStr = this.headers + .map((header, index) => { + assertNotEmptyString(header.name, 'header name', `header index: ${index}`) + assertString(header.value, 'header.value', `header index: ${index}`) + + const headerName = prettifyHeaderName(header.name) + const headerValue = header.value + + return headerName + ': ' + headerValue + }) + .join(EOL) + + return headerRowsStr + EOL + } + + protected _generateBodyRows(): string { + if (isEmpty(this.body)) { + return '' + } + + this._processTransferEncodingChunked() + + switch (this.body!.contentType) { + case HttpContentMultipartType.formData: + case HttpContentMultipartType.alternative: + case HttpContentMultipartType.mixed: + case HttpContentMultipartType.related: + return this._generateFormDataBody() + case HttpContentApplicationType.xWwwFormUrlencoded: + return this._generateUrlencodedBody() + default: + return this._generateTextBody() + } + } + + private _processTransferEncodingChunked(): void { + const isChunked = this.headers.find( + h => h.name === HttpHeader.transferEncoding.toString() && h.value.includes('chunked'), + ) + if (!isChunked) { + return + } + + const body = getEmptyStringForUndefined(this.body!.text) + const defChunkLength = 25 + const buffer: string[] = [] + let index = 0 + while (index < body.length) { + const chunk = body.slice(index, index + defChunkLength) + buffer.push(chunk.length.toString(16).toUpperCase()) + buffer.push(chunk) + index += defChunkLength + } + this.body!.text = buffer.join(EOL) + } + + private _generateFormDataBody(): string { + assertArray(this.body!.params, 'body.params') + assertNotEmptyString(this.body!.boundary, 'body.boundary') + + if (isEmpty(this.body!.params)) { + return '' + } + + const paramsStr = this.body!.params! // eslint-disable-next-line max-statements + .map((param, index) => { + if (!param.type) { + assertNotEmptyString(param.name, 'body.params[index].name', `param index: ${index}`) + } + let paramGroupStr = '--' + this.body!.boundary! + paramGroupStr += EOL + paramGroupStr += `Content-Disposition: ${param.type || 'form-data'}` + if (param.name) { + paramGroupStr += `; name="${param.name}"` + } + if (param.fileName) { + paramGroupStr += `; filename="${param.fileName}"` + } + paramGroupStr += EOL + if (param.contentType) { + paramGroupStr += `Content-Type: ${param.contentType}` + paramGroupStr += EOL + } + paramGroupStr += EOL + paramGroupStr += getEmptyStringForUndefined(param.value) + paramGroupStr += EOL + return paramGroupStr + }) + .join('') + + return `${paramsStr}--${this.body!.boundary}--` + } + + private _generateUrlencodedBody(): string { + assertArray(this.body!.params, 'body.params') + const paramPairs = arrayToPairs(this.body!.params!) + + return new URLSearchParams(paramPairs).toString() + } + + private _generateTextBody(): string { + return getEmptyStringForUndefined(this.body!.text) + } +} diff --git a/src/builders/index.js b/src/builders/index.js deleted file mode 100644 index 894ecb4..0000000 --- a/src/builders/index.js +++ /dev/null @@ -1,20 +0,0 @@ -const { isNil, isPlainObject } = require('../utils') -const HttpZError = require('../error') -const RequestBuilder = require('./request') -const ResponseBuilder = require('./response') - -module.exports = (messageModel, opts = {}) => { - if (isNil(messageModel)) { - throw HttpZError.get('messageModel is required') - } - if (!isPlainObject(messageModel)) { - throw HttpZError.get('messageModel must be a plain object') - } - if (messageModel.method) { - return RequestBuilder.build(messageModel, opts) - } - if (messageModel.statusCode) { - return ResponseBuilder.build(messageModel) - } - throw HttpZError.get('messageModel has incorrect format') -} diff --git a/src/builders/index.ts b/src/builders/index.ts new file mode 100644 index 0000000..807d862 --- /dev/null +++ b/src/builders/index.ts @@ -0,0 +1,21 @@ +import { HttpZError } from '../error' +import { isNil, isPlainObject } from '../utils' +import { HttpZRequestBuilder } from './request' +import { HttpZResponseBuilder } from './response' +import { HttpZBuilderModel, HttpZBuilderRequestModel, HttpZBuilderResponseModel, HttpZBuilderOptions } from './types' + +export default function (messageModel: HttpZBuilderModel, opts: HttpZBuilderOptions = {}): string | never { + if (isNil(messageModel)) { + throw HttpZError.get('messageModel is required') + } + if (!isPlainObject(messageModel)) { + throw HttpZError.get('messageModel must be a plain object') + } + if ('method' in messageModel) { + return HttpZRequestBuilder.build(messageModel, opts) + } + if ('statusCode' in messageModel) { + return HttpZResponseBuilder.build(messageModel) + } + throw HttpZError.get('messageModel has incorrect format') +} diff --git a/src/builders/request.js b/src/builders/request.js deleted file mode 100644 index 3849095..0000000 --- a/src/builders/request.js +++ /dev/null @@ -1,46 +0,0 @@ -const consts = require('../consts') -const { assertArray, assertNotEmptyString } = require('../assertions') -const { prettifyHeaderName } = require('../utils') -const HttpZError = require('../error') -const Base = require('./base') - -class HttpZRequestBuilder extends Base { - static build(...params) { - const instance = new HttpZRequestBuilder(...params) - return instance.build() - } - - constructor({ method, protocolVersion, target, headers, body }, opts) { - super({ headers, body }) - this.method = method - this.protocolVersion = protocolVersion - this.target = target - this.opts = opts - } - - build() { - return '' + this._generateStartRow() + this._generateHeaderRows() + consts.EOL + this._generateBodyRows() - } - - _generateStartRow() { - assertNotEmptyString(this.method, 'method') - assertNotEmptyString(this.protocolVersion, 'protocolVersion') - assertNotEmptyString(this.target, 'target') - - return '' + this.method.toUpperCase() + ' ' + this.target + ' ' + this.protocolVersion.toUpperCase() + consts.EOL - } - - _generateHeaderRows() { - assertArray(this.headers, 'headers') - if (this.opts.mandatoryHost) { - const hostHeader = this.headers.find((name) => prettifyHeaderName(name) === consts.http.headers.host) - if (!hostHeader) { - throw HttpZError.get('Host header is required') - } - } - - return super._generateHeaderRows() - } -} - -module.exports = HttpZRequestBuilder diff --git a/src/builders/request.ts b/src/builders/request.ts new file mode 100644 index 0000000..27bb581 --- /dev/null +++ b/src/builders/request.ts @@ -0,0 +1,55 @@ +import { assertArray, assertNotEmptyString } from '../assertions' +import { EOL, HttpHeader, HttpMethod, HttpProtocolVersion } from '../constants' +import { HttpZError } from '../error' +import { HttpZHeader } from '../types' +import { prettifyHeaderName } from '../utils' +import { HttpZBaseBuilder } from './base' +import { HttpZBuilderOptions, HttpZBuilderRequestModel } from './types' + +export class HttpZRequestBuilder extends HttpZBaseBuilder { + static build(...params: ConstructorParameters): string { + const instance = new HttpZRequestBuilder(...params) + return instance.build() + } + + private readonly method: HttpMethod + private readonly protocolVersion: HttpProtocolVersion + private readonly target: string + private readonly opts: HttpZBuilderOptions + + constructor(message: HttpZBuilderRequestModel, opts: HttpZBuilderOptions) { + super(message.headers, message.body) + this.method = message.method + this.protocolVersion = message.protocolVersion + this.target = message.target + this.opts = opts + } + + build(): string { + return '' + this._generateStartRow() + this._generateHeaderRows() + EOL + this._generateBodyRows() + } + + private _generateStartRow(): string { + assertNotEmptyString(this.method, 'method') + assertNotEmptyString(this.protocolVersion, 'protocolVersion') + assertNotEmptyString(this.target, 'target') + + return '' + this.method.toUpperCase() + ' ' + this.target + ' ' + this.protocolVersion.toUpperCase() + EOL + } + + protected override _generateHeaderRows(): string { + assertArray(this.headers, 'headers') + + if (this.opts.mandatoryHost) { + // TODO: ts-refactor name instead of h + const hostHeader = this.headers.find( + (h: HttpZHeader) => prettifyHeaderName(h.name) === HttpHeader.host.toString(), + ) + if (!hostHeader) { + throw HttpZError.get('Host header is required') + } + } + + return super._generateHeaderRows() + } +} diff --git a/src/builders/response.js b/src/builders/response.js deleted file mode 100644 index 7b1a3e1..0000000 --- a/src/builders/response.js +++ /dev/null @@ -1,32 +0,0 @@ -const consts = require('../consts') -const { assertNotEmptyString, assertPositiveNumber } = require('../assertions') -const Base = require('./base') - -class HttpZResponseBuilder extends Base { - static build(...params) { - const instance = new HttpZResponseBuilder(...params) - return instance.build() - } - - constructor({ protocolVersion, statusCode, statusMessage, headers, body }) { - super({ headers, body }) - this.protocolVersion = protocolVersion - this.statusCode = statusCode - this.statusMessage = statusMessage - } - - build() { - return '' + this._generateStartRow() + this._generateHeaderRows() + consts.EOL + this._generateBodyRows() - } - - _generateStartRow() { - assertNotEmptyString(this.protocolVersion, 'protocolVersion') - assertPositiveNumber(this.statusCode, 'statusCode') - assertNotEmptyString(this.statusMessage, 'statusMessage') - - const protocolVersion = this.protocolVersion.toUpperCase() - return `${protocolVersion} ${this.statusCode} ${this.statusMessage}` + consts.EOL - } -} - -module.exports = HttpZResponseBuilder diff --git a/src/builders/response.ts b/src/builders/response.ts new file mode 100644 index 0000000..aa7f266 --- /dev/null +++ b/src/builders/response.ts @@ -0,0 +1,35 @@ +import { assertNotEmptyString, assertPositiveNumber } from '../assertions' +import { EOL, HttpProtocolVersion } from '../constants' +import { HttpZBaseBuilder } from './base' +import { HttpZBuilderResponseModel } from './types' + +export class HttpZResponseBuilder extends HttpZBaseBuilder { + static build(...params: ConstructorParameters): string { + const instance = new HttpZResponseBuilder(...params) + return instance.build() + } + + private readonly protocolVersion: HttpProtocolVersion + private readonly statusCode: number + private readonly statusMessage: string + + constructor(message: HttpZBuilderResponseModel) { + super(message.headers, message.body) + this.protocolVersion = message.protocolVersion + this.statusCode = message.statusCode + this.statusMessage = message.statusMessage + } + + build(): string { + return '' + this._generateStartRow() + this._generateHeaderRows() + EOL + this._generateBodyRows() + } + + private _generateStartRow(): string { + assertNotEmptyString(this.protocolVersion, 'protocolVersion') + assertPositiveNumber(this.statusCode, 'statusCode') + assertNotEmptyString(this.statusMessage, 'statusMessage') + + const protocolVersion = this.protocolVersion.toUpperCase() + return `${protocolVersion} ${this.statusCode} ${this.statusMessage}` + EOL + } +} diff --git a/src/builders/types.ts b/src/builders/types.ts new file mode 100644 index 0000000..f709d98 --- /dev/null +++ b/src/builders/types.ts @@ -0,0 +1,25 @@ +import { HttpMethod, HttpProtocolVersion } from '../constants' +import { HttpZHeader, HttpZBody, HttpZParam } from '../types' + +export type HttpZBuilderOptions = { + mandatoryHost?: boolean +} + +export type HttpZBuilderModel = { + headers: HttpZHeader[] + body?: HttpZBody +} + +export type HttpZBuilderRequestModel = HttpZBuilderModel & { + method: HttpMethod + target: string + protocolVersion: HttpProtocolVersion + queryParams?: HttpZParam[] + cookies?: HttpZParam[] +} + +export type HttpZBuilderResponseModel = HttpZBuilderModel & { + protocolVersion: HttpProtocolVersion + statusCode: number + statusMessage: string +} diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..d5d61c8 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,111 @@ +export const EOL = '\r\n' +export const EOL2X = EOL + EOL + +const BASIC_LATIN = '[\\u0009\\u0020-\\u007E]' +const PARAM_NAME = '[A-Za-z0-9_.\\[\\]-]' // TODO: extend +const HTTP_METHODS = '(CONNECT|OPTIONS|TRACE|GET|HEAD|POST|PUT|PATCH|DELETE)' +const HTTP_PROTOCOL_VERSIONS = '(HTTP)\\/(1\\.0|1\\.1|2(\\.0){0,1})' + +export const regexps = { + quote: /"/g, + startNl: new RegExp(`^${EOL}`), + endNl: new RegExp(`${EOL}$`), + requestStartRow: new RegExp(`^${HTTP_METHODS} \\S* ${HTTP_PROTOCOL_VERSIONS}$`), + responseStartRow: new RegExp(`^${HTTP_PROTOCOL_VERSIONS} \\d{3} ${BASIC_LATIN}*$`), + // eslint-disable-next-line no-control-regex + quotedHeaderValue: new RegExp('^"[\\u0009\\u0020\\u0021\\u0023-\\u007E]+"$'), + boundary: /(?<=boundary=)"{0,1}[A-Za-z0-9'()+_,.:=?-]+"{0,1}/, + contentDisposition: new RegExp(`^Content-Disposition: *(form-data|inline|attachment)${BASIC_LATIN}*${EOL}`, 'i'), + contentType: new RegExp(`^Content-Type:[\\S ]*${EOL}`, 'i'), + contentDispositionType: /(?<=Content-Disposition:) *(form-data|inline|attachment)/, + dispositionName: new RegExp(`(?<=name=)"${PARAM_NAME}+"`, 'i'), + dispositionFileName: new RegExp(`(?<=filename=)"${PARAM_NAME}+"`, 'i'), + chunkRow: new RegExp(`^[0-9a-fA-F]+${EOL}`), +} + +export enum HttpProtocol { + http = 'HTTP', + https = 'HTTPS', +} + +export enum HttpProtocolVersion { + http10 = 'HTTP/1.0', + http11 = 'HTTP/1.1', + http20 = 'HTTP/2.0', +} + +export enum HttpMethod { + connect = 'CONNECT', + options = 'OPTIONS', + trace = 'TRACE', + head = 'HEAD', + get = 'GET', + post = 'POST', + put = 'PUT', + patch = 'PATCH', + delete = 'DELETE', +} + +export const HttpPostMethods = [HttpMethod.post, HttpMethod.put, HttpMethod.patch] + +export enum HttpHeader { + host = 'Host', + contentType = 'Content-Type', + contentLength = 'Content-Length', + userAgent = 'User-Agent', + setCookie = 'Set-Cookie', + transferEncoding = 'Transfer-Encoding', +} + +export enum HttpContentTextType { + any = 'text/', + css = 'text/css', + csv = 'text/csv', + html = 'text/html', + javascript = 'text/javascript', + plain = 'text/plain', + xml = 'text/xml', +} + +export enum HttpContentApplicationType { + any = 'application/', + javascript = 'application/javascript', + json = 'application/json', + octetStream = 'application/octet-stream', + ogg = 'application/ogg', + pdf = 'application/pdf', + xhtml = 'application/xhtml+xml', + xml = 'application/xml', + xShockwaveFlash = 'application/x-shockwave-flash', + xWwwFormUrlencoded = 'application/x-www-form-urlencoded', + zip = 'application/zip', +} + +export enum HttpContentMultipartType { + any = 'multipart/', + alternative = 'multipart/alternative', + formData = 'multipart/form-data', + mixed = 'multipart/mixed', + related = 'multipart/related', +} + +export enum HttpContentImageType { + any = 'image/', + gif = 'image/gif', + jpeg = 'image/jpeg', + png = 'image/png', + tiff = 'image/tiff', + icon = 'image/x-icon', +} + +export enum HttpContentAudioType { + any = 'audio/', +} + +export enum HttpContentVideoType { + any = 'video/', +} + +export enum HttpContentFonType { + any = 'font/', +} diff --git a/src/consts.js b/src/consts.js deleted file mode 100644 index 39923d4..0000000 --- a/src/consts.js +++ /dev/null @@ -1,117 +0,0 @@ -const EOL = '\r\n' -const EOL2X = EOL + EOL -const BASIC_LATIN = '[\\u0009\\u0020-\\u007E]' -const PARAM_NAME = '[A-Za-z0-9_.\\[\\]-]' // TODO: extend -const HTTP_METHODS = '(CONNECT|OPTIONS|TRACE|GET|HEAD|POST|PUT|PATCH|DELETE)' -const HTTP_PROTOCOL_VERSIONS = '(HTTP)\\/(1\\.0|1\\.1|2(\\.0){0,1})' - -const regexps = {} -regexps.quote = /"/g -regexps.startNl = new RegExp(`^${EOL}`) -regexps.endNl = new RegExp(`${EOL}$`) -regexps.requestStartRow = new RegExp(`^${HTTP_METHODS} \\S* ${HTTP_PROTOCOL_VERSIONS}$`) -regexps.responseStartRow = new RegExp(`^${HTTP_PROTOCOL_VERSIONS} \\d{3} ${BASIC_LATIN}*$`) -// eslint-disable-next-line no-control-regex -regexps.quoutedHeaderValue = new RegExp('^"[\\u0009\\u0020\\u0021\\u0023-\\u007E]+"$') -regexps.boundary = /(?<=boundary=)"{0,1}[A-Za-z0-9'()+_,.:=?-]+"{0,1}/ -regexps.contentDisposition = new RegExp( - `^Content-Disposition: *(form-data|inline|attachment)${BASIC_LATIN}*${EOL}`, - 'i', -) -regexps.contentType = new RegExp(`^Content-Type:[\\S ]*${EOL}`, 'i') -regexps.contentDispositionType = /(?<=Content-Disposition:) *(form-data|inline|attachment)/ -regexps.dispositionName = new RegExp(`(?<=name=)"${PARAM_NAME}+"`, 'i') -regexps.dispositionFileName = new RegExp(`(?<=filename=)"${PARAM_NAME}+"`, 'i') -regexps.chunkRow = new RegExp(`^[0-9a-fA-F]+${EOL}`) - -const http = {} - -http.protocols = { - http: 'HTTP', - https: 'HTTPS', -} - -http.protocolVersions = { - http10: 'HTTP/1.0', - http11: 'HTTP/1.1', - http20: 'HTTP/2.0', -} - -http.methods = { - connect: 'CONNECT', - options: 'OPTIONS', - trace: 'TRACE', - head: 'HEAD', - get: 'GET', - post: 'POST', - put: 'PUT', - patch: 'PATCH', - delete: 'DELETE', -} - -http.postMethods = [http.methods.post, http.methods.put, http.methods.patch] - -http.contentTypes = { - text: { - any: 'text/', - css: 'text/css', - csv: 'text/csv', - html: 'text/html', - javascript: 'text/javascript', - plain: 'text/plain', - xml: 'text/xml', - }, - application: { - any: 'application/', - javascript: 'application/javascript', - json: 'application/json', - octetStream: 'application/octet-stream', - ogg: 'application/ogg', - pdf: 'application/pdf', - xhtml: 'application/xhtml+xml', - xml: 'application/xml', - xShockwaveFlash: 'application/x-shockwave-flash', - xWwwFormUrlencoded: 'application/x-www-form-urlencoded', - zip: 'application/zip', - }, - multipart: { - any: 'multipart/', - alternative: 'multipart/alternative', - formData: 'multipart/form-data', - mixed: 'multipart/mixed', - related: 'multipart/related', - }, - image: { - any: 'image/', - gif: 'image/gif', - jpeg: 'image/jpeg', - png: 'image/png', - tiff: 'image/tiff', - icon: 'image/x-icon', - }, - audio: { - any: 'audio/', - }, - video: { - any: 'audio/', - }, - font: { - any: 'font/', - }, -} - -http.headers = { - host: 'Host', - contentType: 'Content-Type', - contentLength: 'Content-Length', - userAgent: 'User-Agent', - setCookie: 'Set-Cookie', - transferEncoding: 'Transfer-Encoding', -} - -module.exports = { - EOL, - EOL2X, - regexps, - http, -} diff --git a/src/error.js b/src/error.js deleted file mode 100644 index 5bdf4e0..0000000 --- a/src/error.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = class HttpZError extends Error { - static get(...params) { - return new HttpZError(...params) - } - - constructor(message, details) { - super(message) - - this.name = this.constructor.name - this.details = details - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor) - } - } -} diff --git a/src/error.ts b/src/error.ts new file mode 100644 index 0000000..2b81080 --- /dev/null +++ b/src/error.ts @@ -0,0 +1,16 @@ +export class HttpZError extends Error { + static get(...params: ConstructorParameters): HttpZError { + return new HttpZError(...params) + } + + details: string | undefined + + constructor(message: string, details?: string) { + super(message) + + this.name = this.constructor.name + this.details = details + + Error.captureStackTrace(this, this.constructor) + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..69ba2da --- /dev/null +++ b/src/index.ts @@ -0,0 +1,13 @@ +import build from './builders/index' +import * as constants from './constants' +import { HttpZError } from './error' +import parse from './parsers/index' +import * as utils from './utils' + +export default { + consts: constants, + HttpZError, + utils, + parse, + build, +} diff --git a/src/parsers/base.js b/src/parsers/base.ts similarity index 52% rename from src/parsers/base.js rename to src/parsers/base.ts index 5d110c0..836e5bc 100644 --- a/src/parsers/base.js +++ b/src/parsers/base.ts @@ -1,16 +1,23 @@ -const consts = require('../consts') -const HttpZError = require('../error') -const { isNil, trim } = require('../utils') -const { splitBy, prettifyHeaderName, head, tail } = require('../utils') -const formDataParamParser = require('./form-data-param-parser') - -class HttpZBaseParser { - constructor(rawMessage) { - this.rawMessage = rawMessage - } - - _parseMessageForRows() { - const [headers, body] = splitBy(this.rawMessage, consts.EOL2X) +import { EOL, EOL2X, HttpContentApplicationType, HttpContentMultipartType, HttpHeader, regexps } from '../constants' +import { HttpZError } from '../error' +import { HttpZBody, HttpZHeader } from '../types' +import { splitBy, prettifyHeaderName, head, tail, isNil, trim } from '../utils' +import { FormDataParamParser } from './form-data-param-parser' + +export class HttpZBaseParser { + protected startRow!: string + protected headerRows!: string[] + protected bodyRows!: string + + protected headers!: HttpZHeader[] + protected headersSize!: number + protected body: HttpZBody | undefined + protected bodySize!: number + + constructor(private readonly rawMessage: string) {} + + protected _parseMessageForRows(): void { + const [headers, body] = splitBy(this.rawMessage, EOL2X) if (isNil(headers) || isNil(body)) { throw HttpZError.get( 'Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]', @@ -18,17 +25,16 @@ class HttpZBaseParser { } this._calcSizes(headers, body) - const headerRows = headers.split(consts.EOL) + const headerRows = headers.split(EOL) - return { - startRow: head(headerRows), - headerRows: tail(headerRows), - bodyRows: body, - } + this.startRow = head(headerRows) + this.headerRows = tail(headerRows) + this.bodyRows = body } - _parseHeaderRows() { - this.headers = this.headerRows.map((hRow) => { + protected _parseHeaderRows(): void { + this.headers = this.headerRows.map(hRow => { + // eslint-disable-next-line prefer-const let [name, value] = splitBy(hRow, ':') if (!name) { throw HttpZError.get('Incorrect header row format, expected: Name: Value', hRow) @@ -37,7 +43,7 @@ class HttpZBaseParser { // quoted string must be parsed as a single value (https://tools.ietf.org/html/rfc7230#section-3.2.6) if (isNil(value)) { value = '' - } else if (consts.regexps.quoutedHeaderValue.test(value)) { + } else if (regexps.quotedHeaderValue.test(value)) { value = trim(value, '"') } @@ -48,26 +54,26 @@ class HttpZBaseParser { }) } - _parseBodyRows() { + protected _parseBodyRows(): void { if (!this.bodyRows) { return } this._processTransferEncodingChunked() - this.body = {} + this.body = {} const contentTypeHeader = this._getContentTypeValue() if (contentTypeHeader) { this.body.contentType = contentTypeHeader.toLowerCase().split(';')[0] } switch (this.body.contentType) { - case consts.http.contentTypes.multipart.formData: - case consts.http.contentTypes.multipart.alternative: - case consts.http.contentTypes.multipart.mixed: - case consts.http.contentTypes.multipart.related: + case HttpContentMultipartType.formData: + case HttpContentMultipartType.alternative: + case HttpContentMultipartType.mixed: + case HttpContentMultipartType.related: this._parseFormDataBody() break - case consts.http.contentTypes.application.xWwwFormUrlencoded: + case HttpContentApplicationType.xWwwFormUrlencoded: this._parseUrlencodedBody() break default: @@ -77,18 +83,18 @@ class HttpZBaseParser { } // eslint-disable-next-line max-statements - _processTransferEncodingChunked() { + protected _processTransferEncodingChunked(): void { const isChunked = this.headers.find( - (h) => h.name === consts.http.headers.transferEncoding && h.value.includes('chunked'), + h => h.name === HttpHeader.transferEncoding.toString() && h.value.includes('chunked'), ) if (!isChunked) { return } let text = this.bodyRows - const buffer = [] + const buffer: string[] = [] do { - const rows = text.match(consts.regexps.chunkRow) + const rows = text.match(regexps.chunkRow) const firstRow = rows ? rows[0] : '' const chunkLength = +('0x' + firstRow || '').trim() if (!chunkLength) { @@ -97,40 +103,40 @@ class HttpZBaseParser { text = text.slice(firstRow.length) const chunk = text.slice(0, chunkLength) buffer.push(chunk) - text = text.slice(chunkLength + consts.EOL.length) + text = text.slice(chunkLength + EOL.length) } while (text) this.bodyRows = buffer.join('') } - _parseFormDataBody() { - this.body.boundary = this._getBoundary() - this.body.params = this.bodyRows - .split(`--${this.body.boundary}`) + protected _parseFormDataBody(): void { + this.body!.boundary = this._getBoundary() + this.body!.params = this.bodyRows + .split(`--${this.body!.boundary}`) // skip first and last items, which contains boundary .filter((unused, index, params) => index > 0 && index < params.length - 1) - .map((paramGroup) => formDataParamParser.parse(paramGroup)) + .map(paramGroup => FormDataParamParser.parse(paramGroup)) } - _parseUrlencodedBody() { + protected _parseUrlencodedBody(): void { const params = new URLSearchParams(this.bodyRows) - this.body.params = [] + this.body!.params = [] params.forEach((value, name) => { - this.body.params.push({ name, value }) + this.body!.params!.push({ name, value }) }) } - _parseTextBody() { - this.body.text = this.bodyRows + protected _parseTextBody(): void { + this.body!.text = this.bodyRows } - _calcSizes(headers, body) { - this.headersSize = (headers + consts.EOL2X).length + protected _calcSizes(headers: string, body: string): void { + this.headersSize = (headers + EOL2X).length this.bodySize = body.length } - _getContentTypeValue() { - const contentTypeHeader = (this.headers ?? []).find((h) => h.name === consts.http.headers.contentType) + protected _getContentTypeValue(): string | undefined { + const contentTypeHeader = this.headers.find(h => h.name === HttpHeader.contentType.toString()) if (!contentTypeHeader) { return } @@ -140,7 +146,7 @@ class HttpZBaseParser { return contentTypeHeader.value } - _getBoundary() { + protected _getBoundary(): string | never { const contentTypeValue = this._getContentTypeValue() if (!contentTypeValue) { throw HttpZError.get('Message with multipart/form-data body must have Content-Type header with boundary') @@ -151,12 +157,10 @@ class HttpZBaseParser { throw HttpZError.get('Message with multipart/form-data body must have Content-Type header with boundary') } - const boundary = params.match(consts.regexps.boundary) + const boundary = params.match(regexps.boundary) if (!boundary) { throw HttpZError.get('Incorrect boundary, expected: boundary=value', params) } return trim(boundary[0], '"') } } - -module.exports = HttpZBaseParser diff --git a/src/parsers/form-data-param-parser.js b/src/parsers/form-data-param-parser.js deleted file mode 100644 index 19fa948..0000000 --- a/src/parsers/form-data-param-parser.js +++ /dev/null @@ -1,98 +0,0 @@ -const consts = require('../consts') -const { extendIfNotUndefined, trim, trimEnd } = require('../utils') -const HttpZError = require('../error') - -class FormDataParamParser { - // TODO: test it - static parse(...params) { - const instance = new FormDataParamParser(...params) - return instance.parse() - } - - constructor(paramGroup) { - this.paramGroup = paramGroup - } - - // TODO: test it - parse() { - this.paramGroup = this.paramGroup.replace(consts.regexps.startNl, '').replace(consts.regexps.endNl, '') - - const contentDispositionHeader = this._getContentDisposition() - const contentType = this._getContentType() - const dispositionType = this._getDispositionType(contentDispositionHeader) - const name = dispositionType === 'form-data' ? this._getParamName(contentDispositionHeader) : undefined - const fileName = this._getFileName(contentDispositionHeader) - const value = this._getParamValue() - - const param = { - value, - } - if (dispositionType !== 'form-data') { - param.type = dispositionType - } - extendIfNotUndefined(param, 'contentType', contentType) - extendIfNotUndefined(param, 'name', name) - extendIfNotUndefined(param, 'fileName', fileName) - - return param - } - - // TODO: test it - _getContentDisposition() { - const contentDisposition = this.paramGroup.match(consts.regexps.contentDisposition) - if (!contentDisposition) { - throw HttpZError.get('Incorrect Content-Disposition', this.paramGroup) - } - this.paramGroup = this.paramGroup.replace(contentDisposition[0], '') - return trimEnd(contentDisposition[0], consts.EOL) - } - - // TODO: test it - _getContentType() { - const contentType = this.paramGroup.match(consts.regexps.contentType) - if (contentType) { - this.paramGroup = this.paramGroup.replace(contentType[0], '') - return contentType - .toString() - .toLowerCase() - .replace(/^content-type: */, '') - .trimEnd(consts.EOL) - } - } - - // TODO: test it - _getDispositionType(contentDisposition) { - const dispositionType = contentDisposition.match(consts.regexps.contentDispositionType) - if (!dispositionType) { - throw HttpZError.get('Incorrect Content-Disposition type', contentDisposition) - } - return dispositionType[0].trim().toLowerCase() - } - - // TODO: test it - _getParamName(contentDisposition) { - const paramName = contentDisposition.match(consts.regexps.dispositionName) - if (!paramName) { - throw HttpZError.get('Incorrect Content-Disposition, expected param name', contentDisposition) - } - return trim(paramName, '"') - } - - // TODO: test it - _getFileName(contentDisposition) { - const fileName = contentDisposition.match(consts.regexps.dispositionFileName) - if (fileName) { - return trim(fileName, '"') - } - } - - // TODO: test it - _getParamValue() { - if (this.paramGroup.match(consts.regexps.startNl)) { - return this.paramGroup.replace(consts.regexps.startNl, '') - } - throw HttpZError.get('Incorrect form-data parameter', this.paramGroup) - } -} - -module.exports = FormDataParamParser diff --git a/src/parsers/form-data-param-parser.ts b/src/parsers/form-data-param-parser.ts new file mode 100644 index 0000000..c4a2e05 --- /dev/null +++ b/src/parsers/form-data-param-parser.ts @@ -0,0 +1,97 @@ +import { EOL, regexps } from '../constants' +import { HttpZError } from '../error' +import { HttpZBodyParam } from '../types' +import { extendIfNotUndefined, trim, trimEnd } from '../utils' + +export class FormDataParamParser { + // TODO: test it + static parse(...params: ConstructorParameters): HttpZBodyParam { + const instance = new FormDataParamParser(...params) + return instance.parse() + } + + constructor(private paramGroup: string) {} + + // TODO: test it + parse(): HttpZBodyParam { + this.paramGroup = this.paramGroup.replace(regexps.startNl, '').replace(regexps.endNl, '') + + const contentDispositionHeader = this._getContentDisposition() + const contentType = this._getContentType() + const dispositionType = this._getDispositionType(contentDispositionHeader) + const name = dispositionType === 'form-data' ? this._getParamName(contentDispositionHeader) : undefined + const fileName = this._getFileName(contentDispositionHeader) + const value = this._getParamValue() + + const param: HttpZBodyParam = { + value, + } + if (dispositionType !== 'form-data') { + param.type = dispositionType + } + extendIfNotUndefined(param, 'contentType', contentType) + extendIfNotUndefined(param, 'name', name) + extendIfNotUndefined(param, 'fileName', fileName) + + return param + } + + // TODO: test it + private _getContentDisposition(): string | never { + const contentDisposition = this.paramGroup.match(regexps.contentDisposition) + if (contentDisposition) { + this.paramGroup = this.paramGroup.replace(contentDisposition[0], '') + return trimEnd(contentDisposition[0], EOL) + } + throw HttpZError.get('Incorrect Content-Disposition', this.paramGroup) + } + + // TODO: test it + private _getContentType(): string | undefined { + const contentType = this.paramGroup.match(regexps.contentType) + if (contentType) { + this.paramGroup = this.paramGroup.replace(contentType[0], '') + return trimEnd( + contentType + .toString() + .toLowerCase() + .replace(/^content-type: */, ''), + EOL, + ) + } + } + + // TODO: test it + private _getDispositionType(contentDisposition: string): string | never { + const dispositionType = contentDisposition.match(regexps.contentDispositionType) + if (dispositionType) { + return dispositionType[0].trim().toLowerCase() + } + throw HttpZError.get('Incorrect Content-Disposition type', contentDisposition) + } + + // TODO: test it + private _getParamName(contentDisposition: string): string | never { + const paramName = contentDisposition.match(regexps.dispositionName) + if (paramName) { + return trim(paramName[0], '"') + } + throw HttpZError.get('Incorrect Content-Disposition, expected param name', contentDisposition) + } + + // TODO: test it + private _getFileName(contentDisposition: string): string | undefined { + const fileName = contentDisposition.match(regexps.dispositionFileName) + if (fileName) { + return trim(fileName[0], '"') + } + } + + // TODO: test it + private _getParamValue(): string | never { + if (this.paramGroup.match(regexps.startNl)) { + return this.paramGroup.replace(regexps.startNl, '') + } + throw HttpZError.get('Incorrect form-data parameter', this.paramGroup) + } +} diff --git a/src/parsers/index.js b/src/parsers/index.js deleted file mode 100644 index 3efb658..0000000 --- a/src/parsers/index.js +++ /dev/null @@ -1,23 +0,0 @@ -const consts = require('../consts') -const { head, isNil, isString } = require('../utils') -const HttpZError = require('../error') -const RequestParser = require('./request') -const ResponseParser = require('./response') - -module.exports = (rawMessage, opts = {}) => { - if (isNil(rawMessage)) { - throw HttpZError.get('rawMessage is required') - } - if (!isString(rawMessage)) { - throw HttpZError.get('rawMessage must be a string') - } - - const firstRow = head(rawMessage.split(consts.EOL)) - if (consts.regexps.requestStartRow.test(firstRow)) { - return RequestParser.parse(rawMessage, opts) - } - if (consts.regexps.responseStartRow.test(firstRow)) { - return ResponseParser.parse(rawMessage) - } - throw HttpZError.get('rawMessage has incorrect format') -} diff --git a/src/parsers/index.ts b/src/parsers/index.ts new file mode 100644 index 0000000..87a4f3c --- /dev/null +++ b/src/parsers/index.ts @@ -0,0 +1,24 @@ +import { EOL, regexps } from '../constants' +import { HttpZError } from '../error' +import { head, isNil, isString } from '../utils' +import { HttpZRequestParser } from './request' +import { HttpZResponseParser } from './response' +import { HttpZParserModel, HttpZParserOptions } from './types' + +export default function (rawMessage: string, opts: HttpZParserOptions = {}): HttpZParserModel | never { + if (isNil(rawMessage)) { + throw HttpZError.get('rawMessage is required') + } + if (!isString(rawMessage)) { + throw HttpZError.get('rawMessage must be a string') + } + + const firstRow = head(rawMessage.split(EOL)) + if (regexps.requestStartRow.test(firstRow)) { + return HttpZRequestParser.parse(rawMessage, opts) + } + if (regexps.responseStartRow.test(firstRow)) { + return HttpZResponseParser.parse(rawMessage) + } + throw HttpZError.get('rawMessage has incorrect format') +} diff --git a/src/parsers/request.js b/src/parsers/request.ts similarity index 52% rename from src/parsers/request.js rename to src/parsers/request.ts index e261b0c..43f7bff 100644 --- a/src/parsers/request.js +++ b/src/parsers/request.ts @@ -1,48 +1,60 @@ -const consts = require('../consts') -const HttpZError = require('../error') -const { splitBy, parseUrl } = require('../utils') -const { assertNotEmptyString } = require('../assertions') -const Base = require('./base') +import { assertNotEmptyString } from '../assertions' +import { HttpMethod, HttpProtocolVersion, regexps } from '../constants' +import { HttpZError } from '../error' +import { HttpZCookieParam, HttpZParam } from '../types' +import { splitBy, parseUrl } from '../utils' +import { HttpZBaseParser } from './base' +import { HttpZParserOptions, HttpZParserRequestModel } from './types' const SUPER_RANDOM_HOST = 'superrandomhost28476561927456.com' -class HttpZRequestParser extends Base { - static parse(...params) { +export class HttpZRequestParser extends HttpZBaseParser { + static parse(...params: ConstructorParameters): HttpZParserRequestModel { const instance = new HttpZRequestParser(...params) return instance.parse() } - constructor(rawMessage, opts) { + private method!: HttpMethod + private target!: string + private host!: string + private path!: string + private protocolVersion!: HttpProtocolVersion + private hostRow: string | undefined + private cookiesRow: string | undefined + + private queryParams: HttpZParam[] | undefined + private cookies: HttpZCookieParam[] | undefined + + constructor( + rawMessage: string, + private readonly opts: HttpZParserOptions, + ) { super(rawMessage) - this.opts = opts } - parse() { + parse(): HttpZParserRequestModel { this._parseMessageForRows() this._parseHostRow() this._parseStartRow() this._parseHeaderRows() - this._parseCookiesRow() + this._parseCookieRows() this._parseBodyRows() return this._generateModel() } - _parseMessageForRows() { - const { startRow, headerRows, bodyRows } = super._parseMessageForRows() + protected override _parseMessageForRows(): void { + super._parseMessageForRows() - this.startRow = startRow - this.hostRow = headerRows.find((row) => row.toLowerCase().startsWith('host:')) - this.headerRows = headerRows - this.cookiesRow = headerRows.find((row) => row.toLowerCase().startsWith('cookie:')) - this.bodyRows = bodyRows + this.hostRow = this.headerRows.find(row => row.toLowerCase().startsWith('host:')) + this.cookiesRow = this.headerRows.find(row => row.toLowerCase().startsWith('cookie:')) } - _parseHostRow() { + private _parseHostRow(): void { if (this.opts.mandatoryHost) { assertNotEmptyString(this.hostRow, 'host header') } - // eslint-disable-next-line no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars const [unused, value] = splitBy(this.hostRow || '', ':') if (this.opts.mandatoryHost) { assertNotEmptyString(value, 'host header value') @@ -52,21 +64,21 @@ class HttpZRequestParser extends Base { } // eslint-disable-next-line max-statements - _parseStartRow() { - if (!consts.regexps.requestStartRow.test(this.startRow)) { + private _parseStartRow(): void { + if (!regexps.requestStartRow.test(this.startRow)) { throw HttpZError.get('Incorrect startRow format, expected: Method request-target HTTP-Version', this.startRow) } - const rowElems = this.startRow.split(' ') - this.method = rowElems[0].toUpperCase() - this.protocolVersion = rowElems[2].toUpperCase() - this.target = rowElems[1] + const rowParts = this.startRow.split(' ') + this.method = rowParts[0].toUpperCase() as HttpMethod + this.protocolVersion = rowParts[2].toUpperCase() as HttpProtocolVersion + this.target = rowParts[1] let parsedUrl try { parsedUrl = parseUrl(this.target, SUPER_RANDOM_HOST) } catch (err) { - if (err.code === 'ERR_INVALID_URL') { + if ((err as { code: string }).code === 'ERR_INVALID_URL') { throw HttpZError.get('Invalid target', this.target) } throw err @@ -79,7 +91,7 @@ class HttpZRequestParser extends Base { this.queryParams = parsedUrl.params } - _parseCookiesRow() { + private _parseCookieRows(): void { if (!this.cookiesRow) { return } @@ -92,9 +104,10 @@ class HttpZRequestParser extends Base { this.cookies = [] return } - this.cookies = values.split(';').map((pair) => { + + this.cookies = values.split(';').map(pair => { const [name, value] = splitBy(pair, '=') - const cookie = { + const cookie: HttpZCookieParam = { name, } if (value) { @@ -107,22 +120,20 @@ class HttpZRequestParser extends Base { }) } - _generateModel() { - const model = { + private _generateModel(): HttpZParserRequestModel { + const model: HttpZParserRequestModel = { method: this.method, protocolVersion: this.protocolVersion, target: this.target, host: this.host, path: this.path, + headers: this.headers, headersSize: this.headersSize, bodySize: this.bodySize, } if (this.queryParams) { model.queryParams = this.queryParams } - if (this.headers) { - model.headers = this.headers - } if (this.cookies) { model.cookies = this.cookies } @@ -133,5 +144,3 @@ class HttpZRequestParser extends Base { return model } } - -module.exports = HttpZRequestParser diff --git a/src/parsers/response.js b/src/parsers/response.js deleted file mode 100644 index 978834a..0000000 --- a/src/parsers/response.js +++ /dev/null @@ -1,101 +0,0 @@ -const consts = require('../consts') -const HttpZError = require('../error') -const { splitBy, head, tail, isEmpty } = require('../utils') -const Base = require('./base') - -class HttpZResponseParser extends Base { - static parse(...params) { - const instance = new HttpZResponseParser(...params) - return instance.parse() - } - - parse() { - this._parseMessageForRows() - this._parseStartRow() - this._parseHeaderRows() - this._parseCookieRows() - this._parseBodyRows() - - return this._generateModel() - } - - _parseMessageForRows() { - const { startRow, headerRows, bodyRows } = super._parseMessageForRows() - - this.startRow = startRow - this.headerRows = headerRows - this.cookieRows = headerRows.filter((row) => row.toLowerCase().startsWith('set-cookie')) - this.bodyRows = bodyRows - } - - _parseStartRow() { - if (!consts.regexps.responseStartRow.test(this.startRow)) { - throw HttpZError.get('Incorrect startRow format, expected: HTTP-Version status-code reason-phrase', this.startRow) - } - - const rowElems = this.startRow.split(' ') - this.protocolVersion = rowElems[0].toUpperCase() - this.statusCode = +rowElems[1] - this.statusMessage = rowElems.splice(2).join(' ') - } - - _parseCookieRows() { - if (isEmpty(this.cookieRows)) { - return - } - - // eslint-disable-next-line max-statements - this.cookies = this.cookieRows.map((cookiesRow) => { - // eslint-disable-next-line no-unused-vars - const [unused, values] = splitBy(cookiesRow, ':') - if (!values) { - return {} - } - const params = values.split(';') - const paramWithName = head(params) - const otherParams = tail(params) - - let [name, value] = paramWithName.split('=') - name = name.trim() - value = value.trim() - if (!name) { - throw HttpZError.get('Incorrect set-cookie pair format, expected: Name1=Value1;...', values) - } - - const cookie = { - name, - } - if (value) { - cookie.value = value - } - if (otherParams.length > 0) { - cookie.params = otherParams.map((param) => param.trim()) - } - - return cookie - }) - } - - _generateModel() { - const model = { - protocolVersion: this.protocolVersion, - statusCode: this.statusCode, - statusMessage: this.statusMessage, - headersSize: this.headersSize, - bodySize: this.bodySize, - } - if (this.headers) { - model.headers = this.headers - } - if (this.cookies) { - model.cookies = this.cookies - } - if (this.body) { - model.body = this.body - } - - return model - } -} - -module.exports = HttpZResponseParser diff --git a/src/parsers/response.ts b/src/parsers/response.ts new file mode 100644 index 0000000..ca4ebef --- /dev/null +++ b/src/parsers/response.ts @@ -0,0 +1,103 @@ +import { HttpProtocolVersion, regexps } from '../constants' +import { HttpZError } from '../error' +import { HttpZCookieParam } from '../types' +import { splitBy, head, tail, isEmpty } from '../utils' +import { HttpZBaseParser } from './base' +import { HttpZParserResponseModel } from './types' + +export class HttpZResponseParser extends HttpZBaseParser { + static parse(...params: ConstructorParameters): HttpZParserResponseModel { + const instance = new HttpZResponseParser(...params) + return instance.parse() + } + + private protocolVersion!: HttpProtocolVersion + private statusCode!: number + private statusMessage!: string + private cookieRows!: string[] + + private cookies: HttpZCookieParam[] | undefined + + parse(): HttpZParserResponseModel { + this._parseMessageForRows() + this._parseStartRow() + this._parseHeaderRows() + this._parseCookieRows() + this._parseBodyRows() + + return this._generateModel() + } + + protected override _parseMessageForRows(): void { + super._parseMessageForRows() + + this.cookieRows = this.headerRows.filter(row => row.toLowerCase().startsWith('set-cookie')) + } + + private _parseStartRow(): void { + if (!regexps.responseStartRow.test(this.startRow)) { + throw HttpZError.get('Incorrect startRow format, expected: HTTP-Version status-code reason-phrase', this.startRow) + } + + const rowParts = this.startRow.split(' ') + this.protocolVersion = rowParts[0].toUpperCase() + this.statusCode = +rowParts[1] + this.statusMessage = rowParts.splice(2).join(' ') + } + + private _parseCookieRows(): void { + if (isEmpty(this.cookieRows)) { + return + } + + // eslint-disable-next-line max-statements + this.cookies = this.cookieRows.map(cookiesRow => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [unused, values] = splitBy(cookiesRow, ':') + if (!values) { + return {} // TODO: ts-refactor, do we really need to return empty object? + } + + const params = values.split(';') + const paramWithName = head(params) + const otherParams = tail(params) + let [name, value] = paramWithName.split('=') + name = name.trim() + value = value.trim() + if (!name) { + throw HttpZError.get('Incorrect set-cookie pair format, expected: Name1=Value1;...', values) + } + + const cookie: HttpZCookieParam = { + name, + } + if (value) { + cookie.value = value + } + if (otherParams.length > 0) { + cookie.params = otherParams.map(param => param.trim()) + } + + return cookie + }) + } + + private _generateModel(): HttpZParserResponseModel { + const model: HttpZParserResponseModel = { + protocolVersion: this.protocolVersion, + statusCode: this.statusCode, + statusMessage: this.statusMessage, + headers: this.headers, + headersSize: this.headersSize, + bodySize: this.bodySize, + } + if (this.cookies) { + model.cookies = this.cookies + } + if (this.body) { + model.body = this.body + } + + return model + } +} diff --git a/src/parsers/types.ts b/src/parsers/types.ts new file mode 100644 index 0000000..59ac93a --- /dev/null +++ b/src/parsers/types.ts @@ -0,0 +1,30 @@ +import { HttpMethod, HttpProtocolVersion } from '../constants' +import { HttpZHeader, HttpZBody, HttpZParam, HttpZCookieParam } from '../types' + +export type HttpZParserOptions = { + mandatoryHost?: boolean +} + +export type HttpZParserModel = { + headers: HttpZHeader[] + body?: HttpZBody + headersSize?: number + bodySize?: number +} + +export type HttpZParserRequestModel = HttpZParserModel & { + method: HttpMethod + target: string + host: string + path: string + protocolVersion: HttpProtocolVersion + queryParams?: HttpZParam[] + cookies?: HttpZParam[] +} + +export type HttpZParserResponseModel = HttpZParserModel & { + protocolVersion: HttpProtocolVersion + statusCode: number + statusMessage: string + cookies?: HttpZCookieParam[] +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..91bf2e9 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,30 @@ +export type HttpZHeader = { + name: string + value: string +} + +export type HttpZParam = { + name: string + value?: string +} + +export type HttpZBody = { + text?: string + params?: HttpZBodyParam[] + contentType?: string + boundary?: string +} + +export type HttpZBodyParam = { + name?: string + value?: string + type?: string + fileName?: string + contentType?: string +} + +export type HttpZCookieParam = { + name: string + value?: string + params?: string[] +} diff --git a/src/utils.js b/src/utils.js deleted file mode 100644 index cbbf693..0000000 --- a/src/utils.js +++ /dev/null @@ -1,174 +0,0 @@ -exports.getLibVersion = () => { - return '8.0.0-dev' -} - -exports.splitBy = (str, delimiter) => { - if (exports.isEmpty(str)) { - return [] - } - - const delimiterIndex = str.indexOf(delimiter) - if (delimiterIndex === -1) { - return [] - } - - const result = [str.slice(0, delimiterIndex), str.slice(delimiterIndex + delimiter.length)] - result[0] = result[0].trim(' ') - result[1] = result[1].trim(' ') - - return result -} - -exports.isAbsoluteUrl = (url) => { - // Don't match Windows paths `c:\` - if (/^[a-zA-Z]:\\/.test(url)) { - return false - } - - // Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - // Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 - return /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url) -} - -exports.parseUrl = (url, host) => { - if (!host) { - host = url - url = null - } - const supportedProtocols = ['http', 'https'] - if (!supportedProtocols.some((known) => host.startsWith(known + '://'))) { - host = 'http://' + host - } - - const parsedUrl = url ? new URL(url, host) : new URL(host) - const protocol = parsedUrl.protocol.replace(':', '').toUpperCase() - const params = [] - parsedUrl.searchParams.forEach((value, name) => params.push({ name, value })) - - return { - protocol, - host: parsedUrl.host, - path: parsedUrl.pathname, - params, - } -} - -exports.arrayToPairs = (params) => { - return params.map(({ name, value }) => [name, exports.getEmptyStringForUndefined(value)]) -} - -exports.prettifyHeaderName = (name) => { - return (name ?? '').toString().split('-').map(exports.capitalize).join('-') -} - -exports.getEmptyStringForUndefined = (val) => { - if (exports.isUndefined(val)) { - return '' - } - return val -} - -exports.extendIfNotUndefined = (obj, fieldName, fieldValue) => { - if (!exports.isUndefined(fieldValue)) { - obj[fieldName] = fieldValue - } -} - -// ********************** -// Lodash native replaces -exports.isUndefined = (value) => { - return value === undefined -} - -exports.isNil = (value) => { - return value == null -} - -exports.isEmpty = (value) => { - if (value?.length || value?.size) { - return false - } - if (typeof value !== 'object') { - return true - } - for (const key in value) { - if (Object.hasOwn(value, key)) { - return false - } - } - return true -} - -exports.isString = (value) => { - return typeof value === 'string' -} - -exports.isNumber = (value) => { - return typeof value === 'number' -} - -exports.isArray = (value) => { - return Array.isArray(value) -} - -exports.isError = (value) => { - return value instanceof Error -} - -exports.isPlainObject = (value) => { - if (typeof value !== 'object' || value === null) { - return false - } - if (Object.prototype.toString.call(value) !== '[object Object]') { - return false - } - const proto = Object.getPrototypeOf(value) - if (proto === null) { - return true - } - - const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor - return ( - typeof Ctor === 'function' && - Ctor instanceof Ctor && - Function.prototype.call(Ctor) === Function.prototype.call(value) - ) -} - -exports.capitalize = (value) => { - return value ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase() : '' -} - -exports.head = (value) => { - // eslint-disable-next-line no-unused-vars - const [head, ...tail] = value - return head -} - -exports.tail = (value) => { - // eslint-disable-next-line no-unused-vars - const [head, ...tail] = value - return tail -} - -exports.trim = (value, chars = undefined) => { - if (exports.isNil(value)) { - return value - } - value = value.toString() - if (chars === undefined || chars === '\\s') { - return value.trim() - } - return value.replace(new RegExp(`^([${chars}]*)(.*?)([${chars}]*)$`), '$2') -} - -exports.trimEnd = (value, chars = undefined) => { - if (exports.isNil(value)) { - return value - } - value = value.toString() - if (chars === undefined || chars === '\\s') { - return value.trimEnd() - } - return value.replace(new RegExp(`^(.*?)([${chars}]*)$`), '$1') -} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..80f4fec --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,184 @@ +import { HttpZParam } from './types' + +export type ParsedUrl = { + protocol: string + host: string + path: string + params: HttpZParam[] +} + +export const getLibVersion = (): string => { + return '8.0.0-dev' +} + +export const splitBy = (str: string, delimiter: string): string[] => { + if (isEmpty(str)) { + return [] + } + + const delimiterIndex = str.indexOf(delimiter) + if (delimiterIndex === -1) { + return [] + } + + const result = [str.slice(0, delimiterIndex), str.slice(delimiterIndex + delimiter.length)] + result[0] = result[0].trim() + result[1] = result[1].trim() + + return result +} + +export const isAbsoluteUrl = (url: string): boolean => { + // Don't match Windows paths `c:\` + if (/^[a-zA-Z]:\\/.test(url)) { + return false + } + + // Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + // Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + return /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url) +} + +export const parseUrl = (url: string, host: string): ParsedUrl => { + const supportedProtocols = ['http', 'https'] + if (!supportedProtocols.some(known => host.startsWith(known + '://'))) { + host = 'http://' + host + } + + const parsedUrl = url ? new URL(url, host) : new URL(host) + const protocol = parsedUrl.protocol.replace(':', '').toUpperCase() + const params: HttpZParam[] = [] + parsedUrl.searchParams.forEach((value, name) => params.push({ name, value })) + + return { + protocol, + host: parsedUrl.host, + path: parsedUrl.pathname, + params, + } +} + +export const arrayToPairs = (params: HttpZParam[]): string[][] => { + return params.map(({ name, value }) => [name, getEmptyStringForUndefined(value)]) +} + +export const prettifyHeaderName = (name: string | null | undefined): string => { + return (name ?? '').toString().split('-').map(capitalize).join('-') +} + +export const getEmptyStringForUndefined = (value: string | null | undefined): string => { + if (isUndefined(value)) { + return '' + } + return value! +} + +export const extendIfNotUndefined = (obj: object, fieldName: string, fieldValue: string | undefined): void => { + if (!isUndefined(fieldValue)) { + ;(obj as Record)[fieldName] = fieldValue! + } +} + +// ********************** +// Lodash native replaces +export const isUndefined = (value: unknown): boolean => { + return value === undefined +} + +export const isNil = (value: unknown): boolean => { + return value == null +} + +export const isEmpty = (value: unknown): boolean => { + if (isNil(value)) { + return true + } + if ((>value).length || (>value).size) { + return false + } + if (typeof value !== 'object') { + return true + } + for (const key in value) { + if (Object.hasOwn(value, key)) { + return false + } + } + return true +} + +export const isString = (value: unknown): boolean => { + return typeof value === 'string' +} + +export const isNumber = (value: unknown): boolean => { + return typeof value === 'number' +} + +export const isArray = (value: unknown): boolean => { + return Array.isArray(value) +} + +export const isError = (value: unknown): boolean => { + return value instanceof Error +} + +export const isPlainObject = (value: unknown): boolean => { + if (typeof value !== 'object' || value === null) { + return false + } + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false + } + const proto = Object.getPrototypeOf(value) as object | null + if (proto === null) { + return true + } + + const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor + return ( + typeof Ctor === 'function' && + Ctor instanceof Ctor && + Function.prototype.call(Ctor) === Function.prototype.call(value) + ) +} + +export const capitalize = (value: string): string => { + return value ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase() : '' +} + +export const head = (value: T[]): T => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_head, ..._tail] = value + return _head +} + +export const tail = (value: T[]): T[] => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_head, ..._tail] = value + return _tail +} + +export const trim = (value: string, chars: string | undefined = undefined): string => { + if (isNil(value)) { + return value + } + value = value.toString() + + if (chars === undefined || chars === '\\s') { + return value.trim() + } + return value.replace(new RegExp(`^([${chars}]*)(.*?)([${chars}]*)$`), '$2') +} + +export const trimEnd = (value: string, chars: string | undefined = undefined): string => { + if (isNil(value)) { + return value + } + value = value.toString() + + if (chars === undefined || chars === '\\s') { + return value.trimEnd() + } + return value.replace(new RegExp(`^(.*?)([${chars}]*)$`), '$1') +} diff --git a/test/.eslintrc.json b/test/.eslintrc.json deleted file mode 100644 index 4ffa93c..0000000 --- a/test/.eslintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "globals": { - "describe": true, - "it": true, - "before": true, - "beforeEach": true, - "after": true, - "afterEach": true, - "inject": true, - "expect": true - }, - "rules": { - "max-len": 0, - "max-nested-callbacks": 0, - "max-params": 0, - "max-statements": 0, - "no-use-before-define": [0, "nofunc"] - } -} \ No newline at end of file diff --git a/test/assertions-spec.js b/test/assertions-spec.js deleted file mode 100644 index ded696e..0000000 --- a/test/assertions-spec.js +++ /dev/null @@ -1,125 +0,0 @@ -const should = require('should') -const HttpZError = require('../src/error') -const assertions = require('../src/assertions') - -describe('assertions', () => { - function assertRequired(fn, name) { - it('should throw error when val is nil (undefined, null)', () => { - const ERR = { - message: `${name} is required`, - } - should(fn.bind(null, undefined, name)).throw(HttpZError, ERR) - should(fn.bind(null, null, name)).throw(HttpZError, ERR) - }) - } - - function assertString(fn, name) { - it('should throw error when val is not a string (number, date, object, array)', () => { - const ERR = { - message: 'username must be a string', - } - should(fn.bind(null, 10, name)).throw(HttpZError, ERR) - should(fn.bind(null, new Date(), name)).throw(HttpZError, ERR) - should(fn.bind(null, { val: 10 }, name)).throw(HttpZError, ERR) - should(fn.bind(null, [10, 20], name)).throw(HttpZError, ERR) - }) - } - - function assertNumber(fn, name) { - it('should throw error when val is not a number (string, date, object, array)', () => { - const ERR = { - message: 'age must be a number', - } - should(fn.bind(null, '10', name)).throw(HttpZError, ERR) - should(fn.bind(null, new Date(), name)).throw(HttpZError, ERR) - should(fn.bind(null, { val: 10 }, name)).throw(HttpZError, ERR) - should(fn.bind(null, [10, 20], name)).throw(HttpZError, ERR) - }) - } - - describe('assertRequired', () => { - const name = 'username' - - assertRequired(assertions.assertRequired, name) - - it('should not throw error when val is not nil', () => { - should(assertions.assertRequired.bind(null, 'smith', name)).not.throw(HttpZError) - }) - }) - - describe('assertString', () => { - const name = 'username' - - assertRequired(assertions.assertString, name) - assertString(assertions.assertString, name) - }) - - describe('assertNotEmptyString', () => { - const name = 'username' - - assertRequired(assertions.assertNotEmptyString, name) - assertString(assertions.assertNotEmptyString, name) - - it('should throw error when val is an empty string', () => { - should(assertions.assertNotEmptyString.bind(null, '', name)).throw(HttpZError, { - message: 'username must be not empty string', - }) - }) - - it('should not throw error when val is not empty string', () => { - should(assertions.assertNotEmptyString.bind(null, 'smith', name)).not.throw(HttpZError) - }) - }) - - describe('assertNumber', () => { - const name = 'age' - - assertRequired(assertions.assertNumber, name) - assertNumber(assertions.assertNumber, name) - - it('should not throw error when val is a number', () => { - should(assertions.assertNumber.bind(null, -10, name)).not.throw(HttpZError) - should(assertions.assertNumber.bind(null, 25, name)).not.throw(HttpZError) - }) - }) - - describe('assertPositiveNumber', () => { - const name = 'age' - - assertRequired(assertions.assertPositiveNumber, name) - assertNumber(assertions.assertPositiveNumber, name) - - it('should throw error when val is less or equal to zero', () => { - should(assertions.assertPositiveNumber.bind(null, -5, name)).throw(HttpZError, { - message: 'age must be a positive number', - }) - should(assertions.assertPositiveNumber.bind(null, 0, name)).throw(HttpZError, { - message: 'age must be a positive number', - }) - }) - - it('should not throw error when val is a positive number', () => { - should(assertions.assertPositiveNumber.bind(null, 25, name)).not.throw(HttpZError) - }) - }) - - describe('assertArray', () => { - const name = 'cookies' - - assertRequired(assertions.assertArray, name) - - it('should throw error when val is not an array (string, number, date, object)', () => { - const ERR = { - message: 'cookies must be an array', - } - should(assertions.assertArray.bind(null, '10', name)).throw(HttpZError, ERR) - should(assertions.assertArray.bind(null, 10, name)).throw(HttpZError, ERR) - should(assertions.assertArray.bind(null, new Date(), name)).throw(HttpZError, ERR) - should(assertions.assertArray.bind(null, { val: 10 }, name)).throw(HttpZError, ERR) - }) - - it('should not throw error when val is an array', () => { - should(assertions.assertArray.bind(null, ['c1', 'c2'], name)).not.throw(HttpZError) - }) - }) -}) diff --git a/test/assertions-spec.ts b/test/assertions-spec.ts new file mode 100644 index 0000000..2c352ad --- /dev/null +++ b/test/assertions-spec.ts @@ -0,0 +1,122 @@ +import * as assertions from '../src/assertions' +import { HttpZError } from '../src/error' + +describe('assertions', () => { + type AssertFn = (...params: any[]) => void + + function assertRequired(fn: AssertFn, name: string): void { + it('should throw error when val is nil (undefined, null)', () => { + const err = new HttpZError(`${name} is required`) + + expect(fn.bind(null, undefined, name)).toThrow(err) + expect(fn.bind(null, null, name)).toThrow(err) + }) + } + + function assertString(fn: AssertFn, name: string): void { + it('should throw error when val is not a string (number, date, object, array)', () => { + const err = new HttpZError('username must be a string') + + expect(fn.bind(null, 10, name)).toThrow(err) + expect(fn.bind(null, new Date(), name)).toThrow(err) + expect(fn.bind(null, { val: 10 }, name)).toThrow(err) + expect(fn.bind(null, [10, 20], name)).toThrow(err) + }) + } + + function assertNumber(fn: AssertFn, name: string): void { + it('should throw error when val is not a number (string, date, object, array)', () => { + const err = new HttpZError('age must be a number') + + expect(fn.bind(null, '10', name)).toThrow(err) + expect(fn.bind(null, new Date(), name)).toThrow(err) + expect(fn.bind(null, { val: 10 }, name)).toThrow(err) + expect(fn.bind(null, [10, 20], name)).toThrow(err) + }) + } + + describe('assertRequired', () => { + const name = 'username' + + assertRequired(assertions.assertRequired, name) + + it('should not throw error when val is not nil', () => { + expect(assertions.assertRequired.bind(null, 'smith', name)).not.toThrow() + }) + }) + + describe('assertString', () => { + const name = 'username' + + assertRequired(assertions.assertString, name) + assertString(assertions.assertString, name) + }) + + describe('assertNotEmptyString', () => { + const name = 'username' + + assertRequired(assertions.assertNotEmptyString, name) + assertString(assertions.assertNotEmptyString, name) + + it('should throw error when val is an empty string', () => { + const err = new HttpZError('username must be not empty string') + + expect(assertions.assertNotEmptyString.bind(null, '', name)).toThrow(err) + }) + + it('should not throw error when val is not empty string', () => { + expect(assertions.assertNotEmptyString.bind(null, 'smith', name)).not.toThrow() + }) + }) + + describe('assertNumber', () => { + const name = 'age' + + assertRequired(assertions.assertNumber, name) + assertNumber(assertions.assertNumber, name) + + it('should not throw error when val is a number', () => { + expect(assertions.assertNumber.bind(null, -10, name)).not.toThrow() + expect(assertions.assertNumber.bind(null, 25, name)).not.toThrow() + }) + }) + + describe('assertPositiveNumber', () => { + const name = 'age' + + assertRequired(assertions.assertPositiveNumber, name) + assertNumber(assertions.assertPositiveNumber, name) + + it('should throw error when val is less or equal to zero', () => { + expect(assertions.assertPositiveNumber.bind(null, -5, name)).toThrow( + new HttpZError('age must be a positive number'), + ) + expect(assertions.assertPositiveNumber.bind(null, 0, name)).toThrow( + new HttpZError('age must be a positive number'), + ) + }) + + it('should not throw error when val is a positive number', () => { + expect(assertions.assertPositiveNumber.bind(null, 25, name)).not.toThrow() + }) + }) + + describe('assertArray', () => { + const name = 'cookies' + + assertRequired(assertions.assertArray, name) + + it('should throw error when val is not an array (string, number, date, object)', () => { + const err = new HttpZError('cookies must be an array') + + expect(assertions.assertArray.bind(null, '10', name)).toThrow(err) + expect(assertions.assertArray.bind(null, 10, name)).toThrow(err) + expect(assertions.assertArray.bind(null, new Date(), name)).toThrow(err) + expect(assertions.assertArray.bind(null, { val: 10 }, name)).toThrow(err) + }) + + it('should not throw error when val is an array', () => { + expect(assertions.assertArray.bind(null, ['c1', 'c2'], name)).not.toThrow() + }) + }) +}) diff --git a/test/builders/base-spec.js b/test/builders/base-spec.ts similarity index 50% rename from test/builders/base-spec.js rename to test/builders/base-spec.ts index 3bbc8ba..78172a3 100644 --- a/test/builders/base-spec.js +++ b/test/builders/base-spec.ts @@ -1,18 +1,17 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const { isError } = require('../../src/utils') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const BaseBuilder = require('../../src/builders/base') +import { HttpZBaseBuilder } from '../../src/builders/base' +import { EOL } from '../../src/constants' +import { HttpZError } from '../../src/error' +import { HttpZBody, HttpZBodyParam, HttpZHeader } from '../../src/types' +import { isError } from '../../src/utils' +import { ExpectedSpiedFnArgs, testSpiedFn } from '../test-utils' describe('builders / base', () => { - function getBuilderInstance(...params) { - return new BaseBuilder(...params) + function getBuilderInstance(headers?: any, body?: any): HttpZBaseBuilder { + return new HttpZBaseBuilder(headers, body) } describe('_generateHeaderRows', () => { - function getDefaultHeaders() { + function getDefaultHeaders(): HttpZHeader[] { return [ { name: 'Connection', @@ -36,60 +35,60 @@ describe('builders / base', () => { it('should throw error when instance.headers is undefined', () => { const expected = HttpZError.get('headers is required') - const builder = getBuilderInstance({}) - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance() + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(expected) }) it('should throw error when instance.headers is not array', () => { const expected = HttpZError.get('headers must be an array') - const builder = getBuilderInstance({ headers: 'headers' }) - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance('headers') + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(expected) }) it('should throw error when instance.headers contains header without name', () => { const headers = getDefaultHeaders() - headers[1].name = undefined + headers[1].name = undefined as any const expected = HttpZError.get('header name is required', 'header index: 1') - const builder = getBuilderInstance({ headers }) - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance(headers) + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(expected) }) it('should throw error when instance.headers contains header with empty name', () => { const headers = getDefaultHeaders() - headers[1].name = undefined - const expected = HttpZError.get('header name is required', 'header index: 1') + headers[1].name = '' + const expected = HttpZError.get('header name must be not empty string', 'header index: 1') - const builder = getBuilderInstance({ headers }) - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance(headers) + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(expected) }) it('should throw error when instance.headers contains header without value', () => { const headers = getDefaultHeaders() - headers[2].value = undefined + headers[2].value = undefined as any const expected = HttpZError.get('header.value is required', 'header index: 2') - const builder = getBuilderInstance({ headers }) - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance(headers) + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(expected) }) it('should throw error when instance.headers contains header with value that is not a string', () => { const headers = getDefaultHeaders() - headers[2].value = 25 + headers[2].value = 25 as any const expected = HttpZError.get('header.value must be a string', 'header index: 2') - const builder = getBuilderInstance({ headers }) - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance(headers) + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(expected) }) it('should return empty string when instance.headers is empty array', () => { - const headers = [] + const headers: HttpZHeader[] = [] const expected = '' - const builder = getBuilderInstance({ headers }) - const actual = builder._generateHeaderRows() - should(actual).eql(expected) + const builder = getBuilderInstance(headers) + const actual = builder['_generateHeaderRows']() + expect(actual).toEqual(expected) }) it('should return headerRows when instance.headers is valid', () => { @@ -100,137 +99,135 @@ describe('builders / base', () => { 'Accept-Encoding: gzip, deflate', 'Accept-Language: en-US;q=0.6, en;q=0.4', '', - ].join(HttpZConsts.EOL) + ].join(EOL) - const builder = getBuilderInstance({ headers }) - const actual = builder._generateHeaderRows() - should(actual).eql(expected) + const builder = getBuilderInstance(headers) + const actual = builder['_generateHeaderRows']() + expect(actual).toEqual(expected) }) }) describe('_generateBodyRows', () => { - // eslint-disable-next-line object-curly-spacing - function test({ body, expected, expectedFnArgs = {} }) { - const builder = getBuilderInstance({ body }) - sinon.stub(builder, '_processTransferEncodingChunked') - sinon.stub(builder, '_generateFormDataBody').returns('FormDataBody') - sinon.stub(builder, '_generateUrlencodedBody').returns('UrlencodedBody') - sinon.stub(builder, '_generateTextBody').returns('TextBody') + type SpiedFn = + | '_processTransferEncodingChunked' + | '_generateFormDataBody' + | '_generateUrlencodedBody' + | '_generateTextBody' + + function test(body: HttpZBody | null, expected: unknown, expectedFnArgs?: ExpectedSpiedFnArgs): void { + const builder = getBuilderInstance([], body) + builder['_processTransferEncodingChunked'] = jest.fn(() => {}) + builder['_generateFormDataBody'] = jest.fn(() => 'FormDataBody') + builder['_generateUrlencodedBody'] = jest.fn(() => 'UrlencodedBody') + builder['_generateTextBody'] = jest.fn(() => 'TextBody') if (!isError(expected)) { - const actual = builder._generateBodyRows() - should(actual).eql(expected) + const actual = builder['_generateBodyRows']() + expect(actual).toEqual(expected) } else { - should(builder._generateBodyRows.bind(builder)).throw(HttpZError, expected) + expect(builder['_generateBodyRows'].bind(builder)).toThrow(expected) } - nassert.assertFn({ - inst: builder, - fnName: '_generateFormDataBody', - expectedArgs: expectedFnArgs.genFormDataBody, - }) - nassert.assertFn({ - inst: builder, - fnName: '_generateUrlencodedBody', - expectedArgs: expectedFnArgs.genUrlencodedBody, - }) - nassert.assertFn({ inst: builder, fnName: '_generateTextBody', expectedArgs: expectedFnArgs.genTextBody }) + testSpiedFn(builder['_processTransferEncodingChunked'], '_processTransferEncodingChunked', expectedFnArgs) + testSpiedFn(builder['_processTransferEncodingChunked'], '_generateFormDataBody', expectedFnArgs) + testSpiedFn(builder['_processTransferEncodingChunked'], '_generateUrlencodedBody', expectedFnArgs) + testSpiedFn(builder['_processTransferEncodingChunked'], '_generateTextBody', expectedFnArgs) } - it('should return empty string when instance.body is nil', () => { + it('should return empty string when instance.body is null', () => { const body = null const expected = '' - test({ body, expected }) + test(body, expected) }) - it('should return FormDataBody when instance.body is not nil and contentType is multipart/form-data', () => { + it('should return FormDataBody when instance.body is defined and contentType is multipart/form-data', () => { const body = { contentType: 'multipart/form-data', } const expected = 'FormDataBody' - const expectedFnArgs = { genFormDataBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateFormDataBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) - it('should return FormDataBody when instance.body is not nil and contentType is multipart/alternative', () => { + it('should return FormDataBody when instance.body is defined and contentType is multipart/alternative', () => { const body = { contentType: 'multipart/alternative', } const expected = 'FormDataBody' - const expectedFnArgs = { genFormDataBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateFormDataBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) - it('should return FormDataBody when instance.body is not nil and contentType is multipart/mixed', () => { + it('should return FormDataBody when instance.body is defined and contentType is multipart/mixed', () => { const body = { contentType: 'multipart/mixed', } const expected = 'FormDataBody' - const expectedFnArgs = { genFormDataBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateFormDataBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) - it('should return FormDataBody when instance.body is not nil and contentType is multipart/related', () => { + it('should return FormDataBody when instance.body is defined and contentType is multipart/related', () => { const body = { contentType: 'multipart/related', } const expected = 'FormDataBody' - const expectedFnArgs = { genFormDataBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateFormDataBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) - it('should return UrlencodedBody when instance.body is not nil and contentType is application/x-www-form-urlencoded', () => { + it('should return UrlencodedBody when instance.body is defined and contentType is application/x-www-form-urlencoded', () => { const body = { contentType: 'application/x-www-form-urlencoded', } const expected = 'UrlencodedBody' - const expectedFnArgs = { genUrlencodedBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateUrlencodedBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) - it('should return TextBody when instance.body is not nil and contentType is text/plain', () => { + it('should return TextBody when instance.body is defined and contentType is text/plain', () => { const body = { contentType: 'text/plain', } const expected = 'TextBody' - const expectedFnArgs = { genTextBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateTextBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) - it('should return TextBody when instance.body is not nil and contentType is unknown', () => { + it('should return TextBody when instance.body is defined and contentType is unknown', () => { const body = { contentType: 'unknown', } const expected = 'TextBody' - const expectedFnArgs = { genTextBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_generateTextBody', calledTimes: 1 } - test({ body, expected, expectedFnArgs }) + test(body, expected, expectedFnArgs) }) }) describe('_processTransferEncodingChunked', () => { - function getDefaultBody() { + function getDefaultBody(): HttpZBody { return { text: 'This is a long string\r\n11\r\n with new lines and numbers', } } it("should don't body when transfer-encoding is not chunked", () => { - const headers = [] + const headers: HttpZHeader[] = [] const body = getDefaultBody() - const builder = getBuilderInstance({ headers, body }) - builder._processTransferEncodingChunked() + const builder = getBuilderInstance(headers, body) + builder['_processTransferEncodingChunked']() const expected = body.text - should(builder.body.text).equal(expected) + expect(builder['body']!.text).toEqual(expected) }) it('should change body when transfer-encoding is chunked', () => { @@ -242,18 +239,16 @@ describe('builders / base', () => { ] const body = getDefaultBody() - const builder = getBuilderInstance({ headers, body }) - builder._processTransferEncodingChunked() + const builder = getBuilderInstance(headers, body) + builder['_processTransferEncodingChunked']() - const expected = ['19', 'This is a long string', '11', '19', '', ' with new lines and num', '4', 'bers'].join( - HttpZConsts.EOL, - ) - should(builder.body.text).equal(expected) + const expected = ['19', 'This is a long string', '11', '19', '', ' with new lines and num', '4', 'bers'].join(EOL) + expect(builder['body']!.text).toEqual(expected) }) }) describe('_generateFormDataBody', () => { - function getDefaultBody() { + function getDefaultBody(): HttpZBody { return { params: [ { name: 'firstName', value: 'John' }, @@ -269,17 +264,17 @@ describe('builders / base', () => { body.params = undefined const expected = HttpZError.get('body.params is required') - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).toThrow(expected) }) it('should throw error when instance.body.params is not array', () => { const body = getDefaultBody() - body.params = 'params' + body.params = 'params' as any const expected = HttpZError.get('body.params must be an array') - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).toThrow(expected) }) it('should throw error when instance.body.boundary is nil', () => { @@ -287,17 +282,17 @@ describe('builders / base', () => { body.boundary = undefined const expected = HttpZError.get('body.boundary is required') - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).toThrow(expected) }) it('should throw error when instance.body.boundary is not a string', () => { const body = getDefaultBody() - body.boundary = 12345 + body.boundary = 12345 as any const expected = HttpZError.get('body.boundary must be a string') - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).toThrow(expected) }) it('should throw error when instance.body.boundary is empty string', () => { @@ -305,26 +300,26 @@ describe('builders / base', () => { body.boundary = '' const expected = HttpZError.get('body.boundary must be not empty string') - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).toThrow(expected) }) it('should throw error when instance.body.params contains param with empty name', () => { const body = getDefaultBody() - body.params[0].name = '' + body.params![0].name = '' const expected = HttpZError.get('body.params[index].name must be not empty string', 'param index: 0') - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).toThrow(expected) }) it('should not throw error when instance.body.params contains param with empty name and type is not form-data', () => { const body = getDefaultBody() - body.params[0].type = 'inline' - body.params[0].name = '' + body.params![0].type = 'inline' + body.params![0].name = '' - const builder = getBuilderInstance({ body }) - should(builder._generateFormDataBody.bind(builder)).not.throw(HttpZError) + const builder = getBuilderInstance([], body) + expect(builder['_generateFormDataBody'].bind(builder)).not.toThrow(HttpZError) }) it('should return empty string when instance.body.params is empty array', () => { @@ -332,9 +327,9 @@ describe('builders / base', () => { body.params = [] const expected = '' - const builder = getBuilderInstance({ body }) - const actual = builder._generateFormDataBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateFormDataBody']() + expect(actual).toEqual(expected) }) it('should return BodyRows with params when instance.body.params is not empty array', () => { @@ -353,16 +348,16 @@ describe('builders / base', () => { '', '', '--11136253119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) - const builder = getBuilderInstance({ body }) - const actual = builder._generateFormDataBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateFormDataBody']() + expect(actual).toEqual(expected) }) }) describe('_generateUrlencodedBody', () => { - function getDefaultBody(params) { + function getDefaultBody(params?: HttpZBodyParam[]): HttpZBody { return { params, } @@ -372,25 +367,25 @@ describe('builders / base', () => { const body = getDefaultBody() const expected = HttpZError.get('body.params is required') - const builder = getBuilderInstance({ body }) - should(builder._generateUrlencodedBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateUrlencodedBody'].bind(builder)).toThrow(expected) }) it('should throw error when instance.body.params is not array', () => { - const body = getDefaultBody('params') + const body = getDefaultBody('params' as any) const expected = HttpZError.get('body.params must be an array') - const builder = getBuilderInstance({ body }) - should(builder._generateUrlencodedBody.bind(builder)).throw(HttpZError, expected) + const builder = getBuilderInstance([], body) + expect(builder['_generateUrlencodedBody'].bind(builder)).toThrow(expected) }) it('should return empty string when instance.body.params is empty', () => { const body = getDefaultBody([]) const expected = '' - const builder = getBuilderInstance({ body }) - const actual = builder._generateUrlencodedBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateUrlencodedBody']() + expect(actual).toEqual(expected) }) it('should return BodyRows when instance.body.params has two simple parameters', () => { @@ -400,9 +395,9 @@ describe('builders / base', () => { ]) const expected = 'p1=v1&p2%3E=v2%3B' - const builder = getBuilderInstance({ body }) - const actual = builder._generateUrlencodedBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateUrlencodedBody']() + expect(actual).toEqual(expected) }) it('should return BodyRows when instance.body.params has object parameters', () => { @@ -413,9 +408,9 @@ describe('builders / base', () => { ]) const expected = 'p1%5Bx%5D=v1&p1%5By%5D=v2&p2%3E=v2%3B' - const builder = getBuilderInstance({ body }) - const actual = builder._generateUrlencodedBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateUrlencodedBody']() + expect(actual).toEqual(expected) }) it('should return BodyRows when instance.body.params has array parameters', () => { @@ -426,14 +421,14 @@ describe('builders / base', () => { ]) const expected = 'p1%5B%5D=v1&p1%5B%5D=v2&p2%3E=v2%3B' - const builder = getBuilderInstance({ body }) - const actual = builder._generateUrlencodedBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateUrlencodedBody']() + expect(actual).toEqual(expected) }) }) describe('_generateTextBody', () => { - function getDefaultBody() { + function getDefaultBody(): HttpZBody { return { text: 'text data', } @@ -444,18 +439,18 @@ describe('builders / base', () => { body.text = '' const expected = '' - const builder = getBuilderInstance({ body }) - const actual = builder._generateTextBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateTextBody']() + expect(actual).toEqual(expected) }) it('should return Body when instance.body.text is not empty', () => { const body = getDefaultBody() const expected = 'text data' - const builder = getBuilderInstance({ body }) - const actual = builder._generateTextBody() - should(actual).eql(expected) + const builder = getBuilderInstance([], body) + const actual = builder['_generateTextBody']() + expect(actual).toEqual(expected) }) }) }) diff --git a/test/builders/builders-spec.js b/test/builders/builders-spec.js deleted file mode 100644 index b906673..0000000 --- a/test/builders/builders-spec.js +++ /dev/null @@ -1,79 +0,0 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZError = require('../../src/error') -const builder = require('../../src/builders') -const RequestBuilder = require('../../src/builders/request') -const ResponseBuilder = require('../../src/builders/response') - -describe('builders / index', () => { - beforeEach(() => { - sinon.stub(RequestBuilder, 'build') - sinon.stub(ResponseBuilder, 'build') - }) - - afterEach(() => { - RequestBuilder.build.restore() - ResponseBuilder.build.restore() - }) - - it('should throw error when messageModel is nil', () => { - const ERR = { - message: 'messageModel is required', - } - should(builder.bind(null, undefined)).throw(HttpZError, ERR) - should(builder.bind(null, null)).throw(HttpZError, ERR) - }) - - it('should throw error when messageModel is not a plain object', () => { - const ERR = { - message: 'messageModel must be a plain object', - } - should(builder.bind(null, 123)).throw(HttpZError, ERR) - should(builder.bind(null, true)).throw(HttpZError, ERR) - should(builder.bind(null, 'message')).throw(HttpZError, ERR) - should(builder.bind(null, ['message'])).throw(HttpZError, ERR) - }) - - it('should throw error when model has incorrect format', () => { - const messageModel = { - data: 'some data', - } - - should(builder.bind(null, messageModel)).throw(HttpZError, { - message: 'messageModel has incorrect format', - }) - }) - - it('should call RequestBuilder.build when messageModel is request', () => { - const messageModel = { - method: 'GET', - } - const expected = 'built-request' - const expectedMultipleArgs = [messageModel, {}] - - RequestBuilder.build.returns('built-request') - - const actual = builder(messageModel) - should(actual).eql(expected) - - nassert.assertFn({ inst: RequestBuilder, fnName: 'build', expectedMultipleArgs }) - nassert.assertFn({ inst: ResponseBuilder, fnName: 'build' }) - }) - - it('should call ResponseBuilder.build when messageModel is response', () => { - const messageModel = { - statusCode: 200, - } - const expected = 'built-response' - const expectedArgs = messageModel - - ResponseBuilder.build.returns('built-response') - - const actual = builder(messageModel) - should(actual).eql(expected) - - nassert.assertFn({ inst: RequestBuilder, fnName: 'build' }) - nassert.assertFn({ inst: ResponseBuilder, fnName: 'build', expectedArgs }) - }) -}) diff --git a/test/builders/builders-spec.ts b/test/builders/builders-spec.ts new file mode 100644 index 0000000..685ad0d --- /dev/null +++ b/test/builders/builders-spec.ts @@ -0,0 +1,80 @@ +import builder from '../../src/builders/index' +import { HttpZRequestBuilder } from '../../src/builders/request' +import { HttpZResponseBuilder } from '../../src/builders/response' +import { HttpZError } from '../../src/error' + +describe('builders / index', () => { + let _buildRequestSpy: jest.SpyInstance + let _buildResponseSpy: jest.SpyInstance + + beforeAll(() => { + _buildRequestSpy = jest.spyOn(HttpZRequestBuilder, 'build') + _buildResponseSpy = jest.spyOn(HttpZResponseBuilder, 'build') + }) + + afterEach(() => { + _buildRequestSpy.mockReset() + _buildResponseSpy.mockReset() + }) + + afterAll(() => { + _buildRequestSpy.mockRestore() + _buildResponseSpy.mockRestore() + }) + + it('should throw error when messageModel is nil', () => { + const err = new HttpZError('messageModel is required') + + expect(builder.bind(null, undefined as any)).toThrow(err) + expect(builder.bind(null, null as any)).toThrow(err) + }) + + it('should throw error when messageModel is not a plain object', () => { + const err = new HttpZError('messageModel must be a plain object') + expect(builder.bind(null, 123 as any)).toThrow(err) + expect(builder.bind(null, true as any)).toThrow(err) + expect(builder.bind(null, 'message' as any)).toThrow(err) + expect(builder.bind(null, ['message'] as any)).toThrow(err) + }) + + it('should throw error when model has incorrect format', () => { + const messageModel = { + data: 'some data', + } + const err = new HttpZError('messageModel has incorrect format') + + expect(builder.bind(null, messageModel as any)).toThrow(err) + }) + + it('should call HttpZRequestBuilder.build when messageModel is request', () => { + const messageModel = { + method: 'GET', + } + const expected = 'built-request' + const expectedArgs = [messageModel, {}] + + _buildRequestSpy.mockReturnValue('built-request') + + const actual = builder(messageModel as any) + expect(actual).toEqual(expected) + + expect(_buildRequestSpy).toHaveBeenCalledTimes(1) + expect(_buildRequestSpy).toHaveBeenCalledWith(...expectedArgs) + }) + + it('should call HttpZResponseBuilder.build when messageModel is response', () => { + const messageModel = { + statusCode: 200, + } + const expected = 'built-response' + const expectedArgs = messageModel + + _buildResponseSpy.mockReturnValue('built-response') + + const actual = builder(messageModel as any) + expect(actual).toEqual(expected) + + expect(_buildResponseSpy).toHaveBeenCalledTimes(1) + expect(_buildResponseSpy).toHaveBeenCalledWith(expectedArgs) + }) +}) diff --git a/test/builders/request-spec.js b/test/builders/request-spec.ts similarity index 76% rename from test/builders/request-spec.js rename to test/builders/request-spec.ts index 4a2fb02..e001b18 100644 --- a/test/builders/request-spec.js +++ b/test/builders/request-spec.ts @@ -1,118 +1,126 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const RequestBuilder = require('../../src/builders/request') +import { HttpZRequestBuilder } from '../../src/builders/request' +import { HttpZBuilderRequestModel } from '../../src/builders/types' +import { EOL, HttpMethod, HttpProtocolVersion } from '../../src/constants' +import { HttpZError } from '../../src/error' describe('builders / request', () => { - function getBuilderInstance(exRequestModel, opts = {}) { - const requestModel = { - method: 'get', - protocolVersion: 'http/1.1', + function getBuilderInstance(ex: Partial = {}, opts = {}): HttpZRequestBuilder { + const requestModel: HttpZBuilderRequestModel = { + protocolVersion: HttpProtocolVersion.http11, + method: HttpMethod.get, target: '/', - ...exRequestModel, + headers: [], + ...ex, } - return new RequestBuilder(requestModel, opts) + return new HttpZRequestBuilder(requestModel, opts) } describe('static build', () => { - beforeEach(() => { - sinon.stub(RequestBuilder.prototype, 'build') + let _buildRequestSpy: jest.SpyInstance + + beforeAll(() => { + _buildRequestSpy = jest.spyOn(HttpZRequestBuilder, 'build') }) afterEach(() => { - RequestBuilder.prototype.build.restore() + _buildRequestSpy.mockReset() + }) + + afterAll(() => { + _buildRequestSpy.mockRestore() }) - it('should create instance of RequestBuilder and call instance.build', () => { - const model = {} + it('should create instance of HttpZRequestBuilder and call instance.build', () => { + const requestModel = {} as HttpZBuilderRequestModel const expected = 'ok' + const expectedArgs = [requestModel, {}] - RequestBuilder.prototype.build.returns('ok') + _buildRequestSpy.mockReturnValue('ok') - const actual = RequestBuilder.build(model) - nassert.assert(actual, expected) + const actual = HttpZRequestBuilder.build(requestModel, {}) + expect(actual).toEqual(expected) - nassert.assertFn({ inst: RequestBuilder.prototype, fnName: 'build', expectedArgs: '_without-args_' }) + expect(_buildRequestSpy).toHaveBeenCalledTimes(1) + expect(_buildRequestSpy).toHaveBeenCalledWith(...expectedArgs) }) }) describe('build', () => { it('should call related methods and return request message', () => { const builder = getBuilderInstance() - sinon.stub(builder, '_generateStartRow').returns('startRow' + HttpZConsts.EOL) - sinon.stub(builder, '_generateHeaderRows').returns('headerRows' + HttpZConsts.EOL) - sinon.stub(builder, '_generateBodyRows').returns('bodyRows') + builder['_generateStartRow'] = jest.fn(() => 'startRow' + EOL) + builder['_generateHeaderRows'] = jest.fn(() => 'headerRows' + EOL) + builder['_generateBodyRows'] = jest.fn(() => 'bodyRows') - const expected = ['startRow', 'headerRows', '', 'bodyRows'].join(HttpZConsts.EOL) + const expected = ['startRow', 'headerRows', '', 'bodyRows'].join(EOL) const actual = builder.build() - should(actual).eql(expected) - - nassert.assertFn({ inst: builder, fnName: '_generateStartRow', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: builder, fnName: '_generateHeaderRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: builder, fnName: '_generateBodyRows', expectedArgs: '_without-args_' }) + expect(actual).toEqual(expected) + + expect(builder['_generateStartRow']).toHaveBeenCalledTimes(1) + expect(builder['_generateStartRow']).toHaveBeenCalledWith() + expect(builder['_generateHeaderRows']).toHaveBeenCalledTimes(1) + expect(builder['_generateHeaderRows']).toHaveBeenCalledWith() + expect(builder['_generateBodyRows']).toHaveBeenCalledTimes(1) + expect(builder['_generateBodyRows']).toHaveBeenCalledWith() }) }) describe('_generateStartRow', () => { it('should throw error when method is undefined', () => { - const builder = getBuilderInstance({ method: undefined }) + const err = new HttpZError('method is required') - should(builder._generateStartRow.bind(builder)).throw(HttpZError, { - message: 'method is required', - }) + const builder = getBuilderInstance({ method: undefined }) + expect(builder['_generateStartRow'].bind(builder)).toThrow(err) }) it('should throw error when protocolVersion is undefined', () => { - const builder = getBuilderInstance({ protocolVersion: undefined }) + const err = new HttpZError('protocolVersion is required') - should(builder._generateStartRow.bind(builder)).throw(HttpZError, { - message: 'protocolVersion is required', - }) + const builder = getBuilderInstance({ protocolVersion: undefined }) + expect(builder['_generateStartRow'].bind(builder)).toThrow(err) }) it('should throw error when target is undefined', () => { - const builder = getBuilderInstance({ target: undefined }) + const err = new HttpZError('target is required') - should(builder._generateStartRow.bind(builder)).throw(HttpZError, { - message: 'target is required', - }) + const builder = getBuilderInstance({ target: undefined }) + expect(builder['_generateStartRow'].bind(builder)).toThrow(err) }) it('should build startRow when all params are valid', () => { - const builder = getBuilderInstance() + const expected = 'GET / HTTP/1.1' + EOL - const expected = 'GET / HTTP/1.1' + HttpZConsts.EOL - const actual = builder._generateStartRow() - should(actual).eql(expected) + const builder = getBuilderInstance() + const actual = builder['_generateStartRow']() + expect(actual).toEqual(expected) }) }) describe('_generateHeaderRows', () => { it('should throw error when opts.mandatoryHost is true and host header is missing', () => { + const err = new HttpZError('Host header is required') + const builder = getBuilderInstance( { headers: [{ name: 'Some-Header', value: 'SomeValue' }] }, { mandatoryHost: true }, ) - - should(builder._generateHeaderRows.bind(builder)).throw(HttpZError, { - message: 'Host header is required', - }) + expect(builder['_generateHeaderRows'].bind(builder)).toThrow(err) }) it('should build headerRows when opts.mandatoryHost is false and host header is missing', () => { + const expected = 'Some-Header: SomeValue' + EOL + const builder = getBuilderInstance( { headers: [{ name: 'Some-Header', value: 'SomeValue' }] }, { mandatoryHost: false }, ) - - const expected = 'Some-Header: SomeValue' + HttpZConsts.EOL - const actual = builder._generateHeaderRows() - should(actual).eql(expected) + const actual = builder['_generateHeaderRows']() + expect(actual).toEqual(expected) }) it('should build headerRows when opts.mandatoryHost is true and host header is present', () => { + const expected = 'Host: SomeHost' + EOL + 'Some-Header: SomeValue' + EOL + const builder = getBuilderInstance( { headers: [ @@ -122,33 +130,31 @@ describe('builders / request', () => { }, { mandatoryHost: false }, ) - - const expected = 'Host: SomeHost' + HttpZConsts.EOL + 'Some-Header: SomeValue' + HttpZConsts.EOL - const actual = builder._generateHeaderRows() - should(actual).eql(expected) + const actual = builder['_generateHeaderRows']() + expect(actual).toEqual(expected) }) }) describe('functional tests', () => { it('should build request without headers and body', () => { - const requestModel = { - method: 'GET', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.get, + protocolVersion: HttpProtocolVersion.http11, target: '/features?p1=v1%3B&p2=', headers: [{ name: 'Host', value: 'example.com' }], } - const rawRequest = ['GET /features?p1=v1%3B&p2= HTTP/1.1', 'Host: example.com', '', ''].join(HttpZConsts.EOL) + const rawRequest = ['GET /features?p1=v1%3B&p2= HTTP/1.1', 'Host: example.com', '', ''].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request without body (header names in lower case)', () => { - const requestModel = { - method: 'get', - protocolVersion: 'http/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.get, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -183,17 +189,17 @@ describe('builders / request', () => { 'Content-Encoding: gzip, deflate', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with cookies, but without body', () => { - const requestModel = { - method: 'GET', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.get, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -233,17 +239,17 @@ describe('builders / request', () => { 'Cookie: csrftoken=123abc; sessionid=456def%3B; username=', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with body of contentType=text/plain', () => { - const requestModel = { - method: 'POST', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.post, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -297,17 +303,17 @@ describe('builders / request', () => { 'Content-Length: 301', '', 'Text data', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with body of contentType=application/x-www-form-urlencoded', () => { - const requestModel = { - method: 'POST', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.post, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -361,17 +367,17 @@ describe('builders / request', () => { 'Content-Length: 301', '', 'firstName=John&lastName=&age=25%3B', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with body of contentType=multipart/form-data', () => { - const requestModel = { - method: 'POST', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.post, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -455,17 +461,17 @@ describe('builders / request', () => { 'more info', '', '--111362:53119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with body of contentType=multipart/alternative (inline)', () => { - const requestModel = { - method: 'POST', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.post, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -503,8 +509,6 @@ describe('builders / request', () => { }, ], }, - headersSize: 243, - bodySize: 84, } const rawRequest = [ 'POST /features HTTP/1.1', @@ -520,17 +524,17 @@ describe('builders / request', () => { '', '', '--111362-53119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with body of contentType=multipart/mixed (attachment)', () => { - const requestModel = { - method: 'POST', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.post, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -570,8 +574,6 @@ describe('builders / request', () => { }, ], }, - headersSize: 236, - bodySize: 149, } const rawRequest = [ 'POST /features HTTP/1.1', @@ -588,17 +590,17 @@ describe('builders / request', () => { '', '', '--11136253119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) it('should build request with body of contentType=text/plain and transfer-encoding=chunked', () => { - const requestModel = { - method: 'POST', - protocolVersion: 'HTTP/1.1', + const requestModel: HttpZBuilderRequestModel = { + method: HttpMethod.post, + protocolVersion: HttpProtocolVersion.http11, target: '/features', headers: [ { @@ -661,11 +663,11 @@ describe('builders / request', () => { 'transfer the payload body', 'C', ' to the user', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(requestModel) const actual = builder.build() - should(actual).eql(rawRequest) + expect(actual).toEqual(rawRequest) }) }) }) diff --git a/test/builders/response-spec.js b/test/builders/response-spec.ts similarity index 65% rename from test/builders/response-spec.js rename to test/builders/response-spec.ts index 488fa86..cfce88e 100644 --- a/test/builders/response-spec.js +++ b/test/builders/response-spec.ts @@ -1,98 +1,104 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const ResponseBuilder = require('../../src/builders/response') +import { HttpZResponseBuilder } from '../../src/builders/response' +import { HttpZBuilderResponseModel } from '../../src/builders/types' +import { EOL, HttpProtocolVersion } from '../../src/constants' +import { HttpZError } from '../../src/error' describe('builders / response', () => { - function getBuilderInstance(exResponseModel) { - const responseModel = { - protocolVersion: 'HTTP/1.1', + function getBuilderInstance(ex: Partial = {}): HttpZResponseBuilder { + const responseModel: HttpZBuilderResponseModel = { + protocolVersion: HttpProtocolVersion.http11, statusCode: 200, statusMessage: 'Ok', - ...exResponseModel, + headers: [], + ...ex, } - return new ResponseBuilder(responseModel) + return new HttpZResponseBuilder(responseModel) } describe('static build', () => { - beforeEach(() => { - sinon.stub(ResponseBuilder.prototype, 'build') + let _buildResponseSpy: jest.SpyInstance + + beforeAll(() => { + _buildResponseSpy = jest.spyOn(HttpZResponseBuilder, 'build') }) afterEach(() => { - ResponseBuilder.prototype.build.restore() + _buildResponseSpy.mockReset() + }) + + afterAll(() => { + _buildResponseSpy.mockRestore() }) - it('should create instance of ResponseBuilder and call instance.build', () => { - const model = {} + it('should create instance of HttpZResponseBuilder and call instance.build', () => { + const responseModel = {} as HttpZBuilderResponseModel const expected = 'ok' - ResponseBuilder.prototype.build.returns('ok') + _buildResponseSpy.mockReturnValue('ok') - const actual = ResponseBuilder.build(model) - nassert.assert(actual, expected) + const actual = HttpZResponseBuilder.build(responseModel) + expect(actual).toEqual(expected) - nassert.assertFn({ inst: ResponseBuilder.prototype, fnName: 'build', expectedArgs: '_without-args_' }) + expect(_buildResponseSpy).toHaveBeenCalledTimes(1) + expect(_buildResponseSpy).toHaveBeenCalledWith({}) }) }) describe('build', () => { it('should call related methods and return response message', () => { const builder = getBuilderInstance() - sinon.stub(builder, '_generateStartRow').returns('startRow' + HttpZConsts.EOL) - sinon.stub(builder, '_generateHeaderRows').returns('headerRows' + HttpZConsts.EOL) - sinon.stub(builder, '_generateBodyRows').returns('bodyRows') + builder['_generateStartRow'] = jest.fn(() => 'startRow' + EOL) + builder['_generateHeaderRows'] = jest.fn(() => 'headerRows' + EOL) + builder['_generateBodyRows'] = jest.fn(() => 'bodyRows') - const expected = ['startRow', 'headerRows', '', 'bodyRows'].join(HttpZConsts.EOL) + const expected = ['startRow', 'headerRows', '', 'bodyRows'].join(EOL) const actual = builder.build() - should(actual).eql(expected) + expect(actual).toEqual(expected) - nassert.assertFn({ inst: builder, fnName: '_generateStartRow', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: builder, fnName: '_generateHeaderRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: builder, fnName: '_generateBodyRows', expectedArgs: '_without-args_' }) + expect(builder['_generateStartRow']).toHaveBeenCalledTimes(1) + expect(builder['_generateStartRow']).toHaveBeenCalledWith() + expect(builder['_generateHeaderRows']).toHaveBeenCalledTimes(1) + expect(builder['_generateHeaderRows']).toHaveBeenCalledWith() + expect(builder['_generateBodyRows']).toHaveBeenCalledTimes(1) + expect(builder['_generateBodyRows']).toHaveBeenCalledWith() }) }) describe('_generateStartRow', () => { it('should throw error when protocolVersion is undefined', () => { - const builder = getBuilderInstance({ protocolVersion: undefined }) + const err = new HttpZError('protocolVersion is required') - should(builder._generateStartRow.bind(builder)).throw(HttpZError, { - message: 'protocolVersion is required', - }) + const builder = getBuilderInstance({ protocolVersion: undefined }) + expect(builder['_generateStartRow'].bind(builder)).toThrow(err) }) it('should throw error when statusCode is undefined', () => { - const builder = getBuilderInstance({ statusCode: undefined }) + const err = new HttpZError('statusCode is required') - should(builder._generateStartRow.bind(builder)).throw(HttpZError, { - message: 'statusCode is required', - }) + const builder = getBuilderInstance({ statusCode: undefined }) + expect(builder['_generateStartRow'].bind(builder)).toThrow(err) }) it('should throw error when statusMessage is undefined', () => { - const builder = getBuilderInstance({ statusMessage: undefined }) + const err = new HttpZError('statusMessage is required') - should(builder._generateStartRow.bind(builder)).throw(HttpZError, { - message: 'statusMessage is required', - }) + const builder = getBuilderInstance({ statusMessage: undefined }) + expect(builder['_generateStartRow'].bind(builder)).toThrow(err) }) it('should build startRow when all params are valid', () => { - const builder = getBuilderInstance() + const expected = 'HTTP/1.1 200 Ok' + EOL - const expected = 'HTTP/1.1 200 Ok' + HttpZConsts.EOL - const actual = builder._generateStartRow() - should(actual).eql(expected) + const builder = getBuilderInstance() + const actual = builder['_generateStartRow']() + expect(actual).toEqual(expected) }) }) describe('functional tests', () => { it('should build response without body (header names in lower case)', () => { - const responseModel = { - protocolVersion: 'HTTP/1.1', + const responseModel: HttpZBuilderResponseModel = { + protocolVersion: HttpProtocolVersion.http11, statusCode: 201, statusMessage: 'Created', headers: [ @@ -123,16 +129,16 @@ describe('builders / response', () => { 'Content-Encoding: gzip, deflate', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(responseModel) const actual = builder.build() - should(actual).eql(rawResponse) + expect(actual).toEqual(rawResponse) }) it('should build response with cookies, but without body', () => { - const responseModel = { - protocolVersion: 'HTTP/1.1', + const responseModel: HttpZBuilderResponseModel = { + protocolVersion: HttpProtocolVersion.http11, statusCode: 201, statusMessage: 'Created', headers: [ @@ -173,16 +179,16 @@ describe('builders / response', () => { 'Set-Cookie: sessionid=456def; Domain=example.com; Path=/', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(responseModel) const actual = builder.build() - should(actual).eql(rawResponse) + expect(actual).toEqual(rawResponse) }) it('should build response with body of contentType=text/plain', () => { - const responseModel = { - protocolVersion: 'HTTP/1.1', + const responseModel: HttpZBuilderResponseModel = { + protocolVersion: HttpProtocolVersion.http11, statusCode: 200, statusMessage: 'Ok', headers: [ @@ -222,16 +228,16 @@ describe('builders / response', () => { 'Content-Length: 301', '', 'Text data', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(responseModel) const actual = builder.build() - should(actual).eql(rawResponse) + expect(actual).toEqual(rawResponse) }) it('should build response with body of contentType=text/plain and transfer-encoding=chunked', () => { - const responseModel = { - protocolVersion: 'HTTP/1.1', + const responseModel: HttpZBuilderResponseModel = { + protocolVersion: HttpProtocolVersion.http11, statusCode: 200, statusMessage: 'Ok', headers: [ @@ -280,11 +286,11 @@ describe('builders / response', () => { 'transfer the payload body', 'C', ' to the user', - ].join(HttpZConsts.EOL) + ].join(EOL) const builder = getBuilderInstance(responseModel) const actual = builder.build() - should(actual).eql(rawResponse) + expect(actual).toEqual(rawResponse) }) }) }) diff --git a/test/httpz-spec.js b/test/httpz-spec.js deleted file mode 100644 index 6bf3955..0000000 --- a/test/httpz-spec.js +++ /dev/null @@ -1,20 +0,0 @@ -const should = require('should') -const httpZ = require('../') - -describe('httpz', () => { - it('should httpz.consts be an object', () => { - should(httpZ.consts).is.Object() - }) - - it('should httpz.HttpZError be a function', () => { - should(httpZ.HttpZError).is.Function() - }) - - it('should httpz.parse be a function', () => { - should(httpZ.parse).is.Function() - }) - - it('should httpz.build be a function', () => { - should(httpZ.build).is.Function() - }) -}) diff --git a/test/httpz-spec.ts b/test/httpz-spec.ts new file mode 100644 index 0000000..88d065f --- /dev/null +++ b/test/httpz-spec.ts @@ -0,0 +1,26 @@ +import build from '../src/builders/index' +import { HttpZError } from '../src/error' +import httpZ from '../src/index' +import parse from '../src/parsers/index' + +describe('httpz', () => { + it('should httpz.consts be defined', () => { + expect(httpZ.consts).toBeDefined() + }) + + it('should httpz.utils be defined', () => { + expect(httpZ.utils).toBeDefined() + }) + + it('should httpz.HttpZError be a class', () => { + expect(httpZ.HttpZError).toBe(HttpZError) + }) + + it('should httpz.parse be a function', () => { + expect(httpZ.parse).toBe(parse) + }) + + it('should httpz.build be a function', () => { + expect(httpZ.build).toBe(build) + }) +}) diff --git a/test/index.js b/test/index.js deleted file mode 100644 index 6290364..0000000 --- a/test/index.js +++ /dev/null @@ -1,4 +0,0 @@ -const sinon = require('sinon') -const nassert = require('n-assert') - -nassert.initSinon(sinon) diff --git a/test/parsers/base-spec.js b/test/parsers/base-spec.ts similarity index 52% rename from test/parsers/base-spec.js rename to test/parsers/base-spec.ts index 062f4a6..c5f9eab 100644 --- a/test/parsers/base-spec.js +++ b/test/parsers/base-spec.ts @@ -1,83 +1,78 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const BaseParser = require('../../src/parsers/base') +import { EOL, EOL2X } from '../../src/constants' +import { HttpZError } from '../../src/error' +import { HttpZBaseParser } from '../../src/parsers/base' +import { HttpZHeader } from '../../src/types' +import { ExpectedSpiedFnArgs, testSpiedFn } from '../test-utils' describe('parsers / base', () => { - function getParserInstance(...params) { - return new BaseParser(...params) + function getParserInstance(rawMessage: string = ''): HttpZBaseParser { + return new HttpZBaseParser(rawMessage) } describe('_parseMessageForRows', () => { it('should throw error when message does not have start-line', () => { - const rawRequest = ['', 'Body'].join(HttpZConsts.EOL) + const rawRequest = ['', 'Body'].join(EOL) const parser = getParserInstance(rawRequest) + const err = new HttpZError( + 'Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]', + ) - should(parser._parseMessageForRows.bind(parser)).throw(Error, { - message: 'Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]', - }) + expect(parser['_parseMessageForRows'].bind(parser)).toThrow(err) }) it('should throw error when message does not have empty line between headers and body', () => { - const rawRequest = ['start-line', 'host-line', 'Header1'].join(HttpZConsts.EOL) + const rawRequest = ['start-line', 'host-line', 'Header1'].join(EOL) const parser = getParserInstance(rawRequest) + const err = new HttpZError( + 'Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]', + ) - should(parser._parseMessageForRows.bind(parser)).throw(HttpZError, { - message: 'Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]', - }) + expect(parser['_parseMessageForRows'].bind(parser)).toThrow(err) }) it('should parse message for rows without body', () => { - const rawRequest = ['start-line', 'host-line', 'Header1', 'Header2', 'Header3', 'Cookie', '', ''].join( - HttpZConsts.EOL, - ) + const rawRequest = ['start-line', 'host-line', 'Header1', 'Header2', 'Header3', 'Cookie', '', ''].join(EOL) const parser = getParserInstance(rawRequest) - const actual = parser._parseMessageForRows() - should(actual.startRow).eql('start-line') - should(actual.headerRows).eql(['host-line', 'Header1', 'Header2', 'Header3', 'Cookie']) - should(actual.bodyRows).eql('') - should(parser.headersSize).equal(60) - should(parser.bodySize).equal(0) + parser['_parseMessageForRows']() + expect(parser['startRow']).toEqual('start-line') + expect(parser['headerRows']).toEqual(['host-line', 'Header1', 'Header2', 'Header3', 'Cookie']) + expect(parser['bodyRows']).toEqual('') + expect(parser['headersSize']).toEqual(60) + expect(parser['bodySize']).toEqual(0) }) it('should parse message for rows with body', () => { - const rawRequest = ['start-line', 'host-line', 'Header1', 'Header2', 'Header3', 'Cookie', '', 'Body'].join( - HttpZConsts.EOL, - ) + const rawRequest = ['start-line', 'host-line', 'Header1', 'Header2', 'Header3', 'Cookie', '', 'Body'].join(EOL) const parser = getParserInstance(rawRequest) - const actual = parser._parseMessageForRows() - should(actual.startRow).eql('start-line') - should(actual.headerRows).eql(['host-line', 'Header1', 'Header2', 'Header3', 'Cookie']) - should(actual.bodyRows).eql('Body') - should(parser.headersSize).equal(60) - should(parser.bodySize).equal(4) + parser['_parseMessageForRows']() + expect(parser['startRow']).toEqual('start-line') + expect(parser['headerRows']).toEqual(['host-line', 'Header1', 'Header2', 'Header3', 'Cookie']) + expect(parser['bodyRows']).toEqual('Body') + expect(parser['headersSize']).toEqual(60) + expect(parser['bodySize']).toEqual(4) }) }) describe('_parseHeaderRows', () => { it('should throw error when headerRows has invalid format', () => { const parser = getParserInstance() - parser.headerRows = ['Header1: value', 'Header2 - value', 'Header3: value '] + parser['headerRows'] = ['Header1: value', 'Header2 - value', 'Header3: value '] + const err = new HttpZError('Incorrect header row format, expected: Name: Value', 'Header2 - value') - should(parser._parseHeaderRows.bind(parser)).throw(HttpZError, { - message: 'Incorrect header row format, expected: Name: Value', - details: 'Header2 - value', - }) + expect(parser['_parseHeaderRows'].bind(parser)).toThrow(err) }) it('should set instance.headers when headerRows is valid', () => { const parser = getParserInstance() - parser.headerRows = [ + parser['headerRows'] = [ 'Connection:', 'Accept: */*, text/plain', 'accept-Encoding: gzip, deflate ', 'Accept-language: ru-RU, ru; q=0.8,en-US;q=0.6,en; q=0.4', ] - parser._parseHeaderRows() + parser['_parseHeaderRows']() const expected = [ { @@ -97,44 +92,49 @@ describe('parsers / base', () => { value: 'ru-RU, ru; q=0.8,en-US;q=0.6,en; q=0.4', }, ] - should(parser.headers).eql(expected) + expect(parser['headers']).toEqual(expected) }) }) describe('_parseBodyRows', () => { - // eslint-disable-next-line object-curly-spacing - function test({ headers, bodyRows, expected, expectedFnArgs = {} }) { + type SpiedFn = '_processTransferEncodingChunked' | '_parseFormDataBody' | '_parseUrlencodedBody' | '_parseTextBody' + + function test( + headers: HttpZHeader[], + bodyRows: string, + expected: unknown, + expectedFnArgs?: ExpectedSpiedFnArgs, + ): void { const parser = getParserInstance() - sinon.stub(parser, '_processTransferEncodingChunked') - sinon.stub(parser, '_parseFormDataBody').callsFake(() => { - parser.body.params = 'body' + parser['_processTransferEncodingChunked'] = jest.fn(() => {}) + parser['_parseFormDataBody'] = jest.fn(() => { + parser['body']!.boundary = 'FormDataBoundary' + parser['body']!.params = 'FormDataBody' as any }) - sinon.stub(parser, '_parseUrlencodedBody').callsFake(() => { - parser.body.params = 'body' + parser['_parseUrlencodedBody'] = jest.fn(() => { + parser['body']!.params = 'BodyParams' as any }) - sinon.stub(parser, '_parseTextBody').callsFake(() => { - parser.body.text = 'body' + parser['_parseTextBody'] = jest.fn(() => { + parser['body']!.text = 'TextBody' }) - parser.headers = headers - parser.bodyRows = bodyRows + parser['headers'] = headers + parser['bodyRows'] = bodyRows - parser._parseBodyRows() - should(parser.body).eql(expected) + parser['_parseBodyRows']() + expect(parser['body']).toEqual(expected) - nassert.assertFn({ inst: parser, fnName: '_parseFormDataBody', expectedArgs: expectedFnArgs.parseFormDataBody }) - nassert.assertFn({ - inst: parser, - fnName: '_parseUrlencodedBody', - expectedArgs: expectedFnArgs.parseUrlencodedBody, - }) - nassert.assertFn({ inst: parser, fnName: '_parseTextBody', expectedArgs: expectedFnArgs.parseTextBody }) + testSpiedFn(parser['_processTransferEncodingChunked'], '_processTransferEncodingChunked', expectedFnArgs) + testSpiedFn(parser['_parseFormDataBody'], '_parseFormDataBody', expectedFnArgs) + testSpiedFn(parser['_parseUrlencodedBody'], '_parseUrlencodedBody', expectedFnArgs) + testSpiedFn(parser['_parseTextBody'], '_parseTextBody', expectedFnArgs) } it('should set instance.body to undefined when bodyRows is empty', () => { - const bodyRows = undefined + const headers = [] as HttpZHeader[] + const bodyRows = '' const expected = undefined - test({ bodyRows, expected }) + test(headers, bodyRows, expected) }) it('should set instance.body.params when bodyRows is defined and contentType header is multipart/form-data', () => { @@ -142,11 +142,12 @@ describe('parsers / base', () => { const bodyRows = 'body' const expected = { contentType: 'multipart/form-data', - params: 'body', + boundary: 'FormDataBoundary', + params: 'FormDataBody', } - const expectedFnArgs = { parseFormDataBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_parseFormDataBody', calledTimes: 1 } - test({ headers, bodyRows, expected, expectedFnArgs }) + test(headers, bodyRows, expected, expectedFnArgs) }) it('should set instance.body.params when bodyRows is defined and contentType header is application/x-www-form-urlencoded', () => { @@ -154,11 +155,11 @@ describe('parsers / base', () => { const bodyRows = 'body' const expected = { contentType: 'application/x-www-form-urlencoded', - params: 'body', + params: 'BodyParams', } - const expectedFnArgs = { parseUrlencodedBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_parseUrlencodedBody', calledTimes: 1 } - test({ headers, bodyRows, expected, expectedFnArgs }) + test(headers, bodyRows, expected, expectedFnArgs) }) it('should set instance.body.text when bodyRows is defined and contentType header is text/plain', () => { @@ -166,86 +167,83 @@ describe('parsers / base', () => { const bodyRows = 'body' const expected = { contentType: 'text/plain', - text: 'body', + text: 'TextBody', } - const expectedFnArgs = { parseTextBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_parseTextBody', calledTimes: 1 } - test({ headers, bodyRows, expected, expectedFnArgs }) + test(headers, bodyRows, expected, expectedFnArgs) }) it('should set instance.body.text when bodyRows is defined and contentType header is missing', () => { + const headers = [] as HttpZHeader[] const bodyRows = 'body' const expected = { - text: 'body', + text: 'TextBody', } - const expectedFnArgs = { parseTextBody: '_without-args_' } + const expectedFnArgs: ExpectedSpiedFnArgs = { calledFnName: '_parseTextBody', calledTimes: 1 } - test({ bodyRows, expected, expectedFnArgs }) + test(headers, bodyRows, expected, expectedFnArgs) }) }) describe('_processTransferEncodingChunked', () => { - function getDefaultBodyRows() { - return ['19', 'This is a long string', '11', '19', '', ' with new lines and num', '4', 'bers'].join( - HttpZConsts.EOL, - ) + function getDefaultBodyRows(): string { + return ['19', 'This is a long string', '11', '19', '', ' with new lines and num', '4', 'bers'].join(EOL) } it("should don't change bodyRows when transfer-encoding is not chunked", () => { const parser = getParserInstance() - parser.headers = [] - parser.bodyRows = getDefaultBodyRows() + parser['headers'] = [] + parser['bodyRows'] = getDefaultBodyRows() - parser._processTransferEncodingChunked() + parser['_processTransferEncodingChunked']() - const expected = parser.bodyRows - should(parser.bodyRows).eql(expected) + const expected = parser['bodyRows'] + expect(parser['bodyRows']).toEqual(expected) }) it('should change bodyRows when transfer-encoding is chunked', () => { const parser = getParserInstance() - parser.headers = [ + parser['headers'] = [ { name: 'Transfer-Encoding', value: 'chunked', }, ] - parser.bodyRows = getDefaultBodyRows() + parser['bodyRows'] = getDefaultBodyRows() - parser._processTransferEncodingChunked() + parser['_processTransferEncodingChunked']() const expected = 'This is a long string\r\n11\r\n with new lines and numbers' - should(parser.bodyRows).eql(expected) + expect(parser['bodyRows']).toEqual(expected) }) it('should throw error when transfer-encoding is chunked but body has incorrect format', () => { const parser = getParserInstance() - parser.headers = [ + parser['headers'] = [ { name: 'Transfer-Encoding', value: 'chunked', }, ] - parser.bodyRows = '5\r\nStart\r\n2\r\nEnd\r\n' + parser['bodyRows'] = '5\r\nStart\r\n2\r\nEnd\r\n' + const err = new HttpZError('Incorrect row, expected: NumberEOL', parser['bodyRows']) - should(parser._processTransferEncodingChunked.bind(parser)).throw(HttpZError, { - message: 'Incorrect row, expected: NumberEOL', - details: parser.bodyRows, - }) + expect(parser['_processTransferEncodingChunked'].bind(parser)).toThrow(err) }) }) describe('_parseFormDataBody', () => { it('should throw error when bodyRows contains param with incorrect format', () => { const parser = getParserInstance() - parser.body = {} - parser.headers = [ + parser['body'] = {} + parser['headers'] = [ { name: 'Content-Type', value: 'multipart/form-data;boundary=11136253119209', }, ] - parser.bodyRows = [ + parser['bodyRows'] = [ '--11136253119209', 'Content-Disposition: form-data; name="firstName"', '', @@ -254,44 +252,42 @@ describe('parsers / base', () => { 'Content-Disposition: form-data; name="age"', '25', '--11136253119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) + const err = new HttpZError('Incorrect form-data parameter', ['25'].join('')) - should(parser._parseFormDataBody.bind(parser)).throw(HttpZError, { - message: 'Incorrect form-data parameter', - details: ['25'].join(''), - }) + expect(parser['_parseFormDataBody'].bind(parser)).toThrow(err) }) it('should set instance.body when bodyRows is empty', () => { const parser = getParserInstance() - parser.body = {} - parser.headers = [ + parser['body'] = {} + parser['headers'] = [ { name: 'Content-Type', value: 'multipart/form-data;boundary=11136253119209', }, ] - parser.bodyRows = '' + parser['bodyRows'] = '' - parser._parseFormDataBody() + parser['_parseFormDataBody']() const expected = { boundary: '11136253119209', params: [], } - should(parser.body).eql(expected) + expect(parser['body']).toEqual(expected) }) it('should set instance.body when bodyRows contains all valid params', () => { const parser = getParserInstance() - parser.body = {} - parser.headers = [ + parser['body'] = {} + parser['headers'] = [ { name: 'Content-Type', value: 'multipart/form-data;boundary=11136253119209', }, ] - parser.bodyRows = [ + parser['bodyRows'] = [ '--11136253119209', 'Content-Disposition: form-data; name="firstName"', '', @@ -301,9 +297,9 @@ describe('parsers / base', () => { '', '', '--11136253119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) - parser._parseFormDataBody() + parser['_parseFormDataBody']() const expected = { boundary: '11136253119209', @@ -312,25 +308,25 @@ describe('parsers / base', () => { { name: 'age', value: '' }, ], } - should(parser.body).eql(expected) + expect(parser['body']).toEqual(expected) }) }) describe('_parseUrlencodedBody', () => { - function test({ bodyRows, expected }) { + function test(bodyRows: string, expected: HttpZHeader[]): void { const parser = getParserInstance() - parser.body = {} - parser.bodyRows = bodyRows + parser['body'] = {} + parser['bodyRows'] = bodyRows - parser._parseUrlencodedBody() - should(parser.body.params).eql(expected) + parser['_parseUrlencodedBody']() + expect(parser['body'].params).toEqual(expected) } it('should set instance.body when bodyRows is empty', () => { const bodyRows = '' - const expected = [] + const expected: HttpZHeader[] = [] - test({ bodyRows, expected }) + test(bodyRows, expected) }) it('should set instance.body when bodyRows has two simple parameters', () => { @@ -340,7 +336,7 @@ describe('parsers / base', () => { { name: 'p2>', value: 'v2;' }, ] - test({ bodyRows, expected }) + test(bodyRows, expected) }) it('should set instance.body when bodyRows has object parameters', () => { @@ -351,7 +347,7 @@ describe('parsers / base', () => { { name: 'p2>', value: 'v2;' }, ] - test({ bodyRows, expected }) + test(bodyRows, expected) }) it('should set instance.body when bodyRows has array parameters', () => { @@ -362,41 +358,41 @@ describe('parsers / base', () => { { name: 'p2>', value: 'v2;' }, ] - test({ bodyRows, expected }) + test(bodyRows, expected) }) }) describe('_parseTextBody', () => { it('should set instance.body', () => { const parser = getParserInstance() - parser.body = {} - parser.bodyRows = 'body' + parser['body'] = {} + parser['bodyRows'] = 'body' - parser._parseTextBody() + parser['_parseTextBody']() const expected = { text: 'body', } - should(parser.body).eql(expected) + expect(parser['body']).toEqual(expected) }) }) describe('_calcSizes', () => { it('should calc instance.sizes using instance.headers and instance.body', () => { - const parser = getParserInstance(`headers${HttpZConsts.EOL2X}body`) - parser._calcSizes('headers', 'body') + const parser = getParserInstance(`headers${EOL2X}body`) + parser['_calcSizes']('headers', 'body') const expected = { headersSize: 11, bodySize: 4, } - should(parser.headersSize).eql(expected.headersSize) - should(parser.bodySize).eql(expected.bodySize) + expect(parser['headersSize']).toEqual(expected.headersSize) + expect(parser['bodySize']).toEqual(expected.bodySize) }) }) describe('_getContentTypeValue', () => { - function getDefaultHeaders() { + function getDefaultHeaders(): HttpZHeader[] { return [ { name: 'Connection', @@ -415,39 +411,39 @@ describe('parsers / base', () => { it('should return undefined when instance.headers does not include contentType header', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() - parser.headers.splice(2, 1) + parser['headers'] = getDefaultHeaders() + parser['headers'].splice(2, 1) const expected = undefined - const actual = parser._getContentTypeValue() + const actual = parser['_getContentTypeValue']() - should(actual).eql(expected) + expect(actual).toEqual(expected) }) it('should return undefined when contentType header value is undefined', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() - parser.headers[2].value = '' + parser['headers'] = getDefaultHeaders() + parser['headers'][2].value = '' const expected = undefined - const actual = parser._getContentTypeValue() + const actual = parser['_getContentTypeValue']() - should(actual).eql(expected) + expect(actual).toEqual(expected) }) it('should return contentType value in lower case when instance.headers contains it', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() + parser['headers'] = getDefaultHeaders() const expected = 'application/json' - const actual = parser._getContentTypeValue() + const actual = parser['_getContentTypeValue']() - should(actual).eql(expected) + expect(actual).toEqual(expected) }) }) describe('_getBoundary', () => { - function getDefaultHeaders() { + function getDefaultHeaders(): HttpZHeader[] { return [ { name: 'Connection', @@ -466,43 +462,39 @@ describe('parsers / base', () => { it('should throw error when instance.headers does not include contentType header', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() - parser.headers.splice(2, 1) + parser['headers'] = getDefaultHeaders() + parser['headers'].splice(2, 1) + const err = new HttpZError('Message with multipart/form-data body must have Content-Type header with boundary') - should(parser._getBoundary.bind(parser)).throw(HttpZError, { - message: 'Message with multipart/form-data body must have Content-Type header with boundary', - }) + expect(parser['_getBoundary'].bind(parser)).toThrow(err) }) it('should throw error when contentType header params is undefined', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() - parser.headers[2].value = 'multipart/form-data' + parser['headers'] = getDefaultHeaders() + parser['headers'][2].value = 'multipart/form-data' + const err = new HttpZError('Message with multipart/form-data body must have Content-Type header with boundary') - should(parser._getBoundary.bind(parser)).throw(HttpZError, { - message: 'Message with multipart/form-data body must have Content-Type header with boundary', - }) + expect(parser['_getBoundary'].bind(parser)).toThrow(err) }) it('should throw error when contentType header params does not contain boundary', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() - parser.headers[2].value = 'multipart/form-data;some params' + parser['headers'] = getDefaultHeaders() + parser['headers'][2].value = 'multipart/form-data;some params' + const err = new HttpZError('Incorrect boundary, expected: boundary=value', 'some params') - should(parser._getBoundary.bind(parser)).throw(HttpZError, { - message: 'Incorrect boundary, expected: boundary=value', - details: 'some params', - }) + expect(parser['_getBoundary'].bind(parser)).toThrow(err) }) it('should return boundary without quotes when contentType header is exists and valid', () => { const parser = getParserInstance() - parser.headers = getDefaultHeaders() + parser['headers'] = getDefaultHeaders() const expected = '1232:1312312' - const actual = parser._getBoundary() + const actual = parser['_getBoundary']() - should(actual).eql(expected) + expect(actual).toEqual(expected) }) }) }) diff --git a/test/parsers/parsers-spec.js b/test/parsers/parsers-spec.js deleted file mode 100644 index 8dce52e..0000000 --- a/test/parsers/parsers-spec.js +++ /dev/null @@ -1,74 +0,0 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const parser = require('../../src/parsers') -const RequestParser = require('../../src/parsers/request') -const ResponseParser = require('../../src/parsers/response') - -describe('parsers / index', () => { - beforeEach(() => { - sinon.stub(RequestParser, 'parse') - sinon.stub(ResponseParser, 'parse') - }) - - afterEach(() => { - RequestParser.parse.restore() - ResponseParser.parse.restore() - }) - - it('should throw error when rawMessage is nil', () => { - const ERR = { - message: 'rawMessage is required', - } - should(parser.bind(null, undefined)).throw(HttpZError, ERR) - should(parser.bind(null, null)).throw(HttpZError, ERR) - }) - - it('should throw error when rawMessage is not a string', () => { - const ERR = { - message: 'rawMessage must be a string', - } - should(parser.bind(null, 123)).throw(HttpZError, ERR) - should(parser.bind(null, true)).throw(HttpZError, ERR) - should(parser.bind(null, {})).throw(HttpZError, ERR) - should(parser.bind(null, [])).throw(HttpZError, ERR) - }) - - it('should throw error when rawMessage has incorrect format', () => { - const params = ['invalid'] - - should(parser.bind(null, ...params)).throw(HttpZError, { - message: 'rawMessage has incorrect format', - }) - }) - - it('should call RequestParser.parse when rawMessage is request', () => { - const rawMessage = ['GET /features HTTP/1.1', 'host: example.com', ''].join(HttpZConsts.EOL) - const expected = 'parsed-request' - const expectedMultipleArgs = [rawMessage, {}] - - RequestParser.parse.returns('parsed-request') - - const actual = parser(rawMessage) - should(actual).eql(expected) - - nassert.assertFn({ inst: RequestParser, fnName: 'parse', expectedMultipleArgs }) - nassert.assertFn({ inst: ResponseParser, fnName: 'parse' }) - }) - - it('should call ResponseParser.parse when rawMessage is response', () => { - const rawMessage = ['HTTP/1.1 200 Ok', 'host: example.com', ''].join(HttpZConsts.EOL) - const expected = 'parsed-response' - const expectedArgs = rawMessage - - ResponseParser.parse.returns('parsed-response') - - const actual = parser(rawMessage) - should(actual).eql(expected) - - nassert.assertFn({ inst: RequestParser, fnName: 'parse' }) - nassert.assertFn({ inst: ResponseParser, fnName: 'parse', expectedArgs }) - }) -}) diff --git a/test/parsers/parsers-spec.ts b/test/parsers/parsers-spec.ts new file mode 100644 index 0000000..8ac3fbb --- /dev/null +++ b/test/parsers/parsers-spec.ts @@ -0,0 +1,76 @@ +import { EOL } from '../../src/constants' +import { HttpZError } from '../../src/error' +import parser from '../../src/parsers/index' +import { HttpZRequestParser } from '../../src/parsers/request' +import { HttpZResponseParser } from '../../src/parsers/response' + +describe('parsers / index', () => { + let _parseRequestSpy: jest.SpyInstance + let _parseResponseSpy: jest.SpyInstance + + beforeAll(() => { + _parseRequestSpy = jest.spyOn(HttpZRequestParser, 'parse') + _parseResponseSpy = jest.spyOn(HttpZResponseParser, 'parse') + }) + + afterEach(() => { + _parseRequestSpy.mockReset() + _parseResponseSpy.mockReset() + }) + + afterAll(() => { + _parseRequestSpy.mockRestore() + _parseResponseSpy.mockRestore() + }) + + it('should throw error when rawMessage is nil', () => { + const err = new HttpZError('rawMessage is required') + + expect(parser.bind(null, undefined as any)).toThrow(err) + expect(parser.bind(null, null as any)).toThrow(err) + }) + + it('should throw error when rawMessage is not a string', () => { + const err = new HttpZError('rawMessage must be a string') + + expect(parser.bind(null, 123 as any)).toThrow(err) + expect(parser.bind(null, true as any)).toThrow(err) + expect(parser.bind(null, {} as any)).toThrow(err) + expect(parser.bind(null, [] as any)).toThrow(err) + }) + + it('should throw error when rawMessage has incorrect format', () => { + const params = ['invalid'] + const err = new HttpZError('rawMessage has incorrect format') + + expect(parser.bind(null, ...params)).toThrow(err) + }) + + it('should call HttpZRequestParser.parse when rawMessage is request', () => { + const rawMessage = ['GET /features HTTP/1.1', 'host: example.com', ''].join(EOL) + const expected = 'parsed-request' + const expectedArgs = [rawMessage, {}] + + _parseRequestSpy.mockReturnValue('parsed-request') + + const actual = parser(rawMessage) + expect(actual).toEqual(expected) + + expect(_parseRequestSpy).toHaveBeenCalledTimes(1) + expect(_parseRequestSpy).toHaveBeenCalledWith(...expectedArgs) + }) + + it('should call HttpZResponseParser.parse when rawMessage is response', () => { + const rawMessage = ['HTTP/1.1 200 Ok', 'host: example.com', ''].join(EOL) + const expected = 'parsed-response' + const expectedArgs = rawMessage + + _parseResponseSpy.mockReturnValue('parsed-response') + + const actual = parser(rawMessage) + expect(actual).toEqual(expected) + + expect(_parseResponseSpy).toHaveBeenCalledTimes(1) + expect(_parseResponseSpy).toHaveBeenCalledWith(expectedArgs) + }) +}) diff --git a/test/parsers/request-spec.js b/test/parsers/request-spec.ts similarity index 72% rename from test/parsers/request-spec.js rename to test/parsers/request-spec.ts index c82d4b8..fcfdb80 100644 --- a/test/parsers/request-spec.js +++ b/test/parsers/request-spec.ts @@ -1,74 +1,81 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const RequestParser = require('../../src/parsers/request') +import { EOL, HttpMethod, HttpProtocolVersion } from '../../src/constants' +import { HttpZError } from '../../src/error' +import { HttpZRequestParser } from '../../src/parsers/request' +import { HttpZParserRequestModel } from '../../src/parsers/types' +import { HttpZBody, HttpZCookieParam, HttpZHeader, HttpZParam } from '../../src/types' describe('parsers / request', () => { - function getParserInstance(rawMessage, opts = {}) { - return new RequestParser(rawMessage, opts) + function getParserInstance(rawMessage = '', opts = {}): HttpZRequestParser { + return new HttpZRequestParser(rawMessage, opts) } describe('static parse', () => { - beforeEach(() => { - sinon.stub(RequestParser.prototype, 'parse') + let _parseRequestSpy: jest.SpyInstance + + beforeAll(() => { + _parseRequestSpy = jest.spyOn(HttpZRequestParser, 'parse') }) afterEach(() => { - RequestParser.prototype.parse.restore() + _parseRequestSpy.mockReset() + }) + + afterAll(() => { + _parseRequestSpy.mockRestore() }) - it('should create instance of RequestParser and call instance.parse', () => { - const params = 'raw' + it('should create instance of HttpZRequestParser and call instance.parse', () => { + const message = 'raw' const expected = 'ok' + const expectedArgs = [message, {}] - RequestParser.prototype.parse.returns('ok') + _parseRequestSpy.mockReturnValue('ok') - const actual = RequestParser.parse(params) - nassert.assert(actual, expected) + const actual = HttpZRequestParser.parse(message, {}) + expect(actual).toEqual(expected) - nassert.assertFn({ inst: RequestParser.prototype, fnName: 'parse', expectedArgs: '_without-args_' }) + expect(_parseRequestSpy).toHaveBeenCalledTimes(1) + expect(_parseRequestSpy).toHaveBeenCalledWith(...expectedArgs) }) }) describe('parse', () => { - it('should call related methods and return request model', () => { + it('should call related methods and return request message', () => { const parser = getParserInstance('rawRequest') - sinon.stub(parser, '_parseMessageForRows') - sinon.stub(parser, '_parseHostRow') - sinon.stub(parser, '_parseStartRow') - sinon.stub(parser, '_parseHeaderRows') - sinon.stub(parser, '_parseCookiesRow') - sinon.stub(parser, '_parseBodyRows') - sinon.stub(parser, '_generateModel').returns('requestModel') + parser['_parseMessageForRows'] = jest.fn(() => null) + parser['_parseHostRow'] = jest.fn(() => null) + parser['_parseStartRow'] = jest.fn(() => null) + parser['_parseHeaderRows'] = jest.fn(() => null) + parser['_parseCookieRows'] = jest.fn(() => null) + parser['_parseBodyRows'] = jest.fn(() => null) + parser['_generateModel'] = jest.fn(() => 'requestModel' as any as HttpZParserRequestModel) const expected = 'requestModel' const actual = parser.parse() - should(actual).eql(expected) - - nassert.assertFn({ inst: parser, fnName: '_parseMessageForRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseHostRow', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseStartRow', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseHeaderRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseCookiesRow', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseBodyRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_generateModel', expectedArgs: '_without-args_' }) + expect(actual).toEqual(expected) + + expect(parser['_parseMessageForRows']).toHaveBeenCalledTimes(1) + expect(parser['_parseHostRow']).toHaveBeenCalledTimes(1) + expect(parser['_parseStartRow']).toHaveBeenCalledTimes(1) + expect(parser['_parseHeaderRows']).toHaveBeenCalledTimes(1) + expect(parser['_parseCookieRows']).toHaveBeenCalledTimes(1) + expect(parser['_parseBodyRows']).toHaveBeenCalledTimes(1) + expect(parser['_generateModel']).toHaveBeenCalledTimes(1) }) }) describe('_parseMessageForRows', () => { it('should parse message for rows when message is without Cookie and Body rows', () => { - const rawRequest = ['start-line', 'host: somehost', 'header1', 'header2', 'header3', '', ''].join(HttpZConsts.EOL) + const rawRequest = ['start-line', 'host: somehost', 'header1', 'header2', 'header3', '', ''].join(EOL) const parser = getParserInstance(rawRequest) - parser._parseMessageForRows() + parser['_parseMessageForRows']() - should(parser.startRow).eql('start-line') - should(parser.hostRow).eql('host: somehost') - should(parser.headerRows).eql(['host: somehost', 'header1', 'header2', 'header3']) - should(parser.cookiesRow).eql(undefined) - should(parser.bodyRows).eql('') + expect(parser['startRow']).toEqual('start-line') + expect(parser['hostRow']).toEqual('host: somehost') + expect(parser['headerRows']).toEqual(['host: somehost', 'header1', 'header2', 'header3']) + expect(parser['cookiesRow']).toEqual(undefined) + expect(parser['bodyRows']).toEqual('') }) it('should parse message for rows when message contains Cookies row', () => { @@ -81,100 +88,98 @@ describe('parsers / request', () => { 'cookie: somecookies', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const parser = getParserInstance(rawRequest) - parser._parseMessageForRows() + parser['_parseMessageForRows']() - should(parser.startRow).eql('start-line') - should(parser.hostRow).eql('host: somehost') - should(parser.headerRows).eql(['host: somehost', 'header1', 'header2', 'header3', 'cookie: somecookies']) - should(parser.cookiesRow).eql('cookie: somecookies') - should(parser.bodyRows).eql('') + expect(parser['startRow']).toEqual('start-line') + expect(parser['hostRow']).toEqual('host: somehost') + expect(parser['headerRows']).toEqual(['host: somehost', 'header1', 'header2', 'header3', 'cookie: somecookies']) + expect(parser['cookiesRow']).toEqual('cookie: somecookies') + expect(parser['bodyRows']).toEqual('') }) it('should parse message for rows when message contains Body rows', () => { - const rawRequest = ['start-line', 'host: somehost', 'header1', 'header2', 'header3', '', 'body'].join( - HttpZConsts.EOL, - ) + const rawRequest = ['start-line', 'host: somehost', 'header1', 'header2', 'header3', '', 'body'].join(EOL) const parser = getParserInstance(rawRequest) - parser._parseMessageForRows() + parser['_parseMessageForRows']() - should(parser.startRow).eql('start-line') - should(parser.hostRow).eql('host: somehost') - should(parser.headerRows).eql(['host: somehost', 'header1', 'header2', 'header3']) - should(parser.cookiesRow).eql(undefined) - should(parser.bodyRows).eql('body') + expect(parser['startRow']).toEqual('start-line') + expect(parser['hostRow']).toEqual('host: somehost') + expect(parser['headerRows']).toEqual(['host: somehost', 'header1', 'header2', 'header3']) + expect(parser['cookiesRow']).toEqual(undefined) + expect(parser['bodyRows']).toEqual('body') }) }) describe('_parseHostRow', () => { it('should throw error when opts.mandatoryHost is true and hostRow is nil or empty', () => { - const ERR = { - message: 'host header is required', - } const parser = getParserInstance('HTTP Request Message', { mandatoryHost: true }) - parser.hostRow = undefined - should(parser._parseHostRow.bind(parser)).throw(HttpZError, ERR) - parser.hostRow = null - should(parser._parseHostRow.bind(parser)).throw(HttpZError, ERR) - parser.hostRow = '' - should(parser._parseHostRow.bind(parser)).throw(HttpZError, { - message: 'host header must be not empty string', - }) - parser.hostRow = 'Host: ' - should(parser._parseHostRow.bind(parser)).throw(HttpZError, { - message: 'host header value must be not empty string', - }) + parser['hostRow'] = undefined + let err = new HttpZError('host header is required') + expect(parser['_parseHostRow'].bind(parser)).toThrow(err) + + parser['hostRow'] = null as any + expect(parser['_parseHostRow'].bind(parser)).toThrow(err) + + parser['hostRow'] = '' + err = new HttpZError('host header must be not empty string') + expect(parser['_parseHostRow'].bind(parser)).toThrow(err) + + parser['hostRow'] = 'Host: ' + err = new HttpZError('host header value must be not empty string') + expect(parser['_parseHostRow'].bind(parser)).toThrow(err) }) it('should not throw error when opts.mandatoryHost is false and hostRow is nil or empty', () => { const parser = getParserInstance('HTTP Request Message', { mandatoryHost: false }) - parser.hostRow = undefined - parser._parseHostRow() - parser.hostRow = null - parser._parseHostRow() - parser.hostRow = '' - parser._parseHostRow() - parser.hostRow = 'Host: ' - parser._parseHostRow() + parser['hostRow'] = undefined + parser['_parseHostRow']() + parser['hostRow'] = null as any + parser['_parseHostRow']() + parser['hostRow'] = '' + parser['_parseHostRow']() + parser['hostRow'] = 'Host: ' + parser['_parseHostRow']() }) it('should set instance.host when host header value is present', () => { const parser = getParserInstance() - parser.hostRow = 'Host: www.example.com:2345' + parser['hostRow'] = 'Host: www.example.com:2345' const expected = 'www.example.com:2345' - parser._parseHostRow() - should(parser.host).eql(expected) + parser['_parseHostRow']() + expect(parser['host']).toEqual(expected) }) }) describe('_parseStartRow', () => { - function test({ startRow, expected }) { + function test(startRow: string, expected: HttpZParserRequestModel): void { const parser = getParserInstance() - parser.startRow = startRow - parser.host = 'example.com' - - parser._parseStartRow() - should(parser.method).eql(expected.method) - should(parser.protocolVersion).eql(expected.protocolVersion) - should(parser.target).eql(expected.target) - should(parser.host).eql(expected.host) - should(parser.path).eql(expected.path) - should(parser.params).eql(expected.params) + parser['startRow'] = startRow + parser['host'] = 'example.com' + + parser['_parseStartRow']() + expect(parser['method']).toEqual(expected.method) + expect(parser['protocolVersion']).toEqual(expected.protocolVersion) + expect(parser['target']).toEqual(expected.target) + expect(parser['host']).toEqual(expected.host) + expect(parser['path']).toEqual(expected.path) + expect(parser['queryParams']).toEqual(expected.queryParams) } - function getDefaultExpected(ex) { + function getExpected(ex: Partial = {}): HttpZParserRequestModel { return { - method: 'GET', - protocolVersion: 'HTTP/1.1', + method: HttpMethod.get, + protocolVersion: HttpProtocolVersion.http11, target: '/features', host: 'example.com', path: '/features', + headers: [], queryParams: [], ...ex, } @@ -182,63 +187,64 @@ describe('parsers / request', () => { it('should throw error when startRow has invalid format', () => { const parser = getParserInstance() - parser.startRow = 'Invalid request startRow' + parser['startRow'] = 'Invalid request startRow' - should(parser._parseStartRow.bind(parser)).throw(HttpZError, { - message: 'Incorrect startRow format, expected: Method request-target HTTP-Version', - details: 'Invalid request startRow', - }) + const err = new HttpZError( + 'Incorrect startRow format, expected: Method request-target HTTP-Version', + 'Invalid request startRow', + ) + expect(parser['_parseStartRow'].bind(parser)).toThrow(err) }) it('should parse valid startRow when method is GET', () => { const startRow = 'GET /features HTTP/1.1' - const expected = getDefaultExpected() + const expected = getExpected() - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when method is DELETE', () => { const startRow = 'DELETE /features HTTP/1.1' - const expected = getDefaultExpected({ - method: 'DELETE', + const expected = getExpected({ + method: HttpMethod.delete, }) - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when HTTP protocol is v2.0', () => { const startRow = 'GET /features HTTP/2.0' - const expected = getDefaultExpected({ - protocolVersion: 'HTTP/2.0', + const expected = getExpected({ + protocolVersion: HttpProtocolVersion.http20, }) - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when target is a root path', () => { const startRow = 'GET / HTTP/1.1' - const expected = getDefaultExpected({ + const expected = getExpected({ target: '/', path: '/', }) - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when target is in absolute-form', () => { const startRow = 'GET https://foo.com/users HTTP/1.1' - const expected = getDefaultExpected({ + const expected = getExpected({ target: 'https://foo.com/users', host: 'example.com', path: '/users', }) - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when query params with two simple parameters', () => { const startRow = 'GET /features?p1=v1&p2%3E=v2%3B HTTP/1.1' - const expected = getDefaultExpected({ + const expected = getExpected({ target: '/features?p1=v1&p2%3E=v2%3B', queryParams: [ { name: 'p1', value: 'v1' }, @@ -246,13 +252,13 @@ describe('parsers / request', () => { ], }) - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when query params with object parameters', () => { - const startRow = 'GET /features?p1[x]=v1&p1[y]=v2&p23E=v3%3B HTTP/1.1' - const expected = getDefaultExpected({ - target: '/features?p1[x]=v1&p1[y]=v2&p23E=v3%3B', + const startRow = 'GET /features?p1[x]=v1&p1[y]=v2&p2%3E=v3%3B HTTP/1.1' + const expected = getExpected({ + target: '/features?p1[x]=v1&p1[y]=v2&p2%3E=v3%3B', queryParams: [ { name: 'p1[x]', value: 'v1' }, { name: 'p1[y]', value: 'v2' }, @@ -260,87 +266,83 @@ describe('parsers / request', () => { ], }) - test({ startRow, expected }) + test(startRow, expected) }) it('should parse valid startRow when query params with array parameters', () => { const startRow = 'GET /features?p1[]=v1&p1[]=v2&p2%3E=v3%3B HTTP/1.1' - const expected = getDefaultExpected({ + const expected = getExpected({ target: '/features?p1[]=v1&p1[]=v2&p2%3E=v3%3B', queryParams: [ - { name: 'p1[x]', value: 'v1' }, - { name: 'p1[y]', value: 'v2' }, + { name: 'p1[]', value: 'v1' }, + { name: 'p1[]', value: 'v2' }, { name: 'p2>', value: 'v3;' }, ], }) - test({ startRow, expected }) + test(startRow, expected) }) }) - describe('_parseCookiesRow', () => { + describe('_parseCookieRows', () => { it('should throw error when cookiesRow has invalid format', () => { const parser = getParserInstance() - parser.cookiesRow = 'Cookie values' + parser['cookiesRow'] = 'Cookie values' - should(parser._parseCookiesRow.bind(parser)).throw(HttpZError, { - message: 'Incorrect cookie row format, expected: Cookie: Name1=Value1;...', - details: 'Cookie values', - }) + const err = new HttpZError('Incorrect cookie row format, expected: Cookie: Name1=Value1;...', 'Cookie values') + expect(parser['_parseCookieRows'].bind(parser)).toThrow(err) }) it('should throw error when cookiesRow has values with invalid format', () => { const parser = getParserInstance() - parser.cookiesRow = 'Cookie: csrftoken=123abc;=val' + parser['cookiesRow'] = 'Cookie: csrftoken=123abc;=val' - should(parser._parseCookiesRow.bind(parser)).throw(HttpZError, { - message: 'Incorrect cookie pair format, expected: Name1=Value1;...', - details: 'csrftoken=123abc;=val', - }) + const err = new HttpZError('Incorrect cookie pair format, expected: Name1=Value1;...', 'csrftoken=123abc;=val') + expect(parser['_parseCookieRows'].bind(parser)).toThrow(err) }) it('should set instance.cookies to undefined when cookiesRow is undefined', () => { const parser = getParserInstance() - parser.cookiesRow = undefined + parser['cookiesRow'] = undefined const expected = undefined - parser._parseCookiesRow() - should(parser.cookies).eql(expected) + parser['_parseCookieRows']() + expect(parser['cookies']).toEqual(expected) }) it('should set instance.cookies to [] when cookiesRow does not contain values', () => { const parser = getParserInstance() - parser.cookiesRow = 'Cookie:' - const expected = [] + parser['cookiesRow'] = 'Cookie:' + const expected: HttpZCookieParam[] = [] - parser._parseCookiesRow() - should(parser.cookies).eql(expected) + parser['_parseCookieRows']() + expect(parser['cookies']).toEqual(expected) }) it('should set instance.cookies when cookiesRow is valid and not empty', () => { const parser = getParserInstance() - parser.cookiesRow = 'Cookie: csrftoken=123abc;sessionid=456def;username=' + parser['cookiesRow'] = 'Cookie: csrftoken=123abc;sessionid=456def;username=' const expected = [ { name: 'csrftoken', value: '123abc' }, { name: 'sessionid', value: '456def' }, { name: 'username' }, ] - parser._parseCookiesRow() - should(parser.cookies).eql(expected) + parser['_parseCookieRows']() + expect(parser['cookies']).toEqual(expected) }) }) describe('_generateModel', () => { it('should generate request model using instance fields when some fields are undefined', () => { const parser = getParserInstance() - parser.headersSize = 25 - parser.bodySize = 0 - parser.method = 'method' - parser.protocolVersion = 'protocolVersion' - parser.target = 'target' - parser.path = 'path' - parser.host = 'host' + parser['headersSize'] = 25 + parser['bodySize'] = 0 + parser['method'] = 'method' as HttpMethod + parser['protocolVersion'] = 'protocolVersion' as HttpProtocolVersion + parser['target'] = 'target' + parser['path'] = 'path' + parser['host'] = 'host' const expected = { method: 'method', @@ -351,23 +353,23 @@ describe('parsers / request', () => { headersSize: 25, bodySize: 0, } - const actual = parser._generateModel() - should(actual).eql(expected) + const actual = parser['_generateModel']() + expect(actual).toEqual(expected) }) it('should generate request model using instance fields', () => { const parser = getParserInstance() - parser.headersSize = 55 - parser.bodySize = 4 - parser.method = 'method' - parser.protocolVersion = 'protocolVersion' - parser.target = 'target' - parser.path = 'path' - parser.host = 'host' - parser.queryParams = 'queryParams' - parser.headers = 'headers' - parser.cookies = 'cookies' - parser.body = 'body' + parser['headersSize'] = 55 + parser['bodySize'] = 4 + parser['method'] = 'method' as HttpMethod + parser['protocolVersion'] = 'protocolVersion' as HttpProtocolVersion + parser['target'] = 'target' + parser['path'] = 'path' + parser['host'] = 'host' + parser['queryParams'] = 'queryParams' as any as HttpZParam[] + parser['headers'] = 'headers' as any as HttpZHeader[] + parser['cookies'] = 'cookies' as any as HttpZCookieParam[] + parser['body'] = 'body' as any as HttpZBody const expected = { method: 'method', @@ -382,14 +384,14 @@ describe('parsers / request', () => { headersSize: 55, bodySize: 4, } - const actual = parser._generateModel() - should(actual).eql(expected) + const actual = parser['_generateModel']() + expect(actual).toEqual(expected) }) }) describe('functional tests', () => { it('should parse request without headers and body', () => { - const rawRequest = ['GET /features?p1=v1%3B&p2= HTTP/1.1', 'host: www.example.com', '', ''].join(HttpZConsts.EOL) + const rawRequest = ['GET /features?p1=v1%3B&p2= HTTP/1.1', 'host: www.example.com', '', ''].join(EOL) const requestModel = { method: 'GET', @@ -408,7 +410,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request without body (header names in lower case)', () => { @@ -425,7 +427,7 @@ describe('parsers / request', () => { 'Authorization: AWS4-HMAC-SHA256 Credential=CRED/20210118/eu-west-1/s3/aws4_request, SignedHeaders=host;x-amz-acl;x-amz-user-agent, Signature=fb1e6017a1d', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'GET', @@ -479,7 +481,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with cookies and without body', () => { @@ -493,7 +495,7 @@ describe('parsers / request', () => { 'Cookie: csrftoken=123abc;sessionid=sd=456def%3B;userid=', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'GET', @@ -539,7 +541,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with body of contentType=text/plain', () => { @@ -555,7 +557,7 @@ describe('parsers / request', () => { 'Content-Length: 301', '', 'Text data', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'POST', @@ -608,7 +610,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with body of contentType=application/x-www-form-urlencoded', () => { @@ -624,7 +626,7 @@ describe('parsers / request', () => { 'Content-Length: 301', '', 'firstName=John&lastName=&age=25%3B', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'POST', @@ -681,7 +683,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with body of contentType=multipart/form-data', () => { @@ -713,7 +715,7 @@ describe('parsers / request', () => { 'more info', '', '--111362:53119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'POST', @@ -780,7 +782,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with body of contentType=multipart/alternative (inline)', () => { @@ -800,7 +802,7 @@ describe('parsers / request', () => { '', '', '--111362-53119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'POST', @@ -859,7 +861,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with body of contentType=multipart/mixed (attachment)', () => { @@ -880,7 +882,7 @@ describe('parsers / request', () => { '', '', '--11136253119209--', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'POST', @@ -941,7 +943,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) it('should parse request with body of contentType=text/plain and transfer-encoding=chunked', () => { @@ -966,7 +968,7 @@ describe('parsers / request', () => { 'transfer the payload body', 'C', ' to the user', - ].join(HttpZConsts.EOL) + ].join(EOL) const requestModel = { method: 'POST', @@ -1019,7 +1021,7 @@ describe('parsers / request', () => { const parser = getParserInstance(rawRequest) const actual = parser.parse() - should(actual).eql(requestModel) + expect(actual).toEqual(requestModel) }) }) }) diff --git a/test/parsers/response-spec.js b/test/parsers/response-spec.ts similarity index 63% rename from test/parsers/response-spec.js rename to test/parsers/response-spec.ts index 694fb36..20732d8 100644 --- a/test/parsers/response-spec.js +++ b/test/parsers/response-spec.ts @@ -1,134 +1,140 @@ -const sinon = require('sinon') -const should = require('should') -const nassert = require('n-assert') -const HttpZConsts = require('../../src/consts') -const HttpZError = require('../../src/error') -const ResponseParser = require('../../src/parsers/response') +import { EOL, HttpProtocolVersion } from '../../src/constants' +import { HttpZError } from '../../src/error' +import { HttpZResponseParser } from '../../src/parsers/response' +import { HttpZParserResponseModel } from '../../src/parsers/types' +import { HttpZBody, HttpZCookieParam, HttpZHeader } from '../../src/types' describe('parsers / response', () => { - function getParserInstance(...params) { - return new ResponseParser(...params) + function getParserInstance(rawMessage = ''): HttpZResponseParser { + return new HttpZResponseParser(rawMessage) } describe('static parse', () => { - beforeEach(() => { - sinon.stub(ResponseParser.prototype, 'parse') + let _parseRequestSpy: jest.SpyInstance + + beforeAll(() => { + _parseRequestSpy = jest.spyOn(HttpZResponseParser, 'parse') }) afterEach(() => { - ResponseParser.prototype.parse.restore() + _parseRequestSpy.mockReset() + }) + + afterAll(() => { + _parseRequestSpy.mockRestore() }) - it('should create instance of ResponseParser and call instance.parse', () => { - const params = 'raw' + it('should create instance of HttpZResponseParser and call instance.parse', () => { + const message = 'raw' const expected = 'ok' + const expectedArgs = [message] - ResponseParser.prototype.parse.returns('ok') + _parseRequestSpy.mockReturnValue('ok') - const actual = ResponseParser.parse(params) - nassert.assert(actual, expected) + const actual = HttpZResponseParser.parse(message) + expect(actual).toEqual(expected) - nassert.assertFn({ inst: ResponseParser.prototype, fnName: 'parse', expectedArgs: '_without-args_' }) + expect(_parseRequestSpy).toHaveBeenCalledTimes(1) + expect(_parseRequestSpy).toHaveBeenCalledWith(...expectedArgs) }) }) describe('parse', () => { - it('should call related methods and return response model', () => { - const parser = getParserInstance('rawResponse') - sinon.stub(parser, '_parseMessageForRows') - sinon.stub(parser, '_parseStartRow') - sinon.stub(parser, '_parseHeaderRows') - sinon.stub(parser, '_parseCookieRows') - sinon.stub(parser, '_parseBodyRows') - sinon.stub(parser, '_generateModel').returns('responseModel') + it('should call related methods and return response message', () => { + const parser = getParserInstance('rawRequest') + parser['_parseMessageForRows'] = jest.fn(() => null) + parser['_parseStartRow'] = jest.fn(() => null) + parser['_parseHeaderRows'] = jest.fn(() => null) + parser['_parseCookieRows'] = jest.fn(() => null) + parser['_parseBodyRows'] = jest.fn(() => null) + parser['_generateModel'] = jest.fn(() => 'responseModel' as any as HttpZParserResponseModel) const expected = 'responseModel' const actual = parser.parse() - should(actual).eql(expected) - - nassert.assertFn({ inst: parser, fnName: '_parseMessageForRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseStartRow', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseHeaderRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseCookieRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_parseBodyRows', expectedArgs: '_without-args_' }) - nassert.assertFn({ inst: parser, fnName: '_generateModel', expectedArgs: '_without-args_' }) + expect(actual).toEqual(expected) + + expect(parser['_parseMessageForRows']).toHaveBeenCalledTimes(1) + expect(parser['_parseStartRow']).toHaveBeenCalledTimes(1) + expect(parser['_parseHeaderRows']).toHaveBeenCalledTimes(1) + expect(parser['_parseCookieRows']).toHaveBeenCalledTimes(1) + expect(parser['_parseBodyRows']).toHaveBeenCalledTimes(1) + expect(parser['_generateModel']).toHaveBeenCalledTimes(1) }) }) describe('_parseMessageForRows', () => { it('should parse message for rows when message is without Set-Cookie and Body rows', () => { - const rawResponse = ['start-line', 'header1', 'header2', 'header3', '', ''].join(HttpZConsts.EOL) + const rawResponse = ['start-line', 'header1', 'header2', 'header3', '', ''].join(EOL) const parser = getParserInstance(rawResponse) - parser._parseMessageForRows() + parser['_parseMessageForRows']() - should(parser.startRow).eql('start-line') - should(parser.headerRows).eql(['header1', 'header2', 'header3']) - should(parser.cookieRows).eql([]) - should(parser.bodyRows).eql('') + expect(parser['startRow']).toEqual('start-line') + expect(parser['headerRows']).toEqual(['header1', 'header2', 'header3']) + expect(parser['cookieRows']).toEqual([]) + expect(parser['bodyRows']).toEqual('') }) it('should parse message for rows when message contains Set-Cookie rows', () => { - const rawResponse = ['start-line', 'header1', 'header2', 'header3', 'set-cookie', 'set-cookie', '', ''].join( - HttpZConsts.EOL, - ) + const rawResponse = ['start-line', 'header1', 'header2', 'header3', 'set-cookie', 'set-cookie', '', ''].join(EOL) const parser = getParserInstance(rawResponse) - parser._parseMessageForRows() + parser['_parseMessageForRows']() - should(parser.startRow).eql('start-line') - should(parser.headerRows).eql(['header1', 'header2', 'header3', 'set-cookie', 'set-cookie']) - should(parser.cookieRows).eql(['set-cookie', 'set-cookie']) - should(parser.bodyRows).eql('') + expect(parser['startRow']).toEqual('start-line') + expect(parser['headerRows']).toEqual(['header1', 'header2', 'header3', 'set-cookie', 'set-cookie']) + expect(parser['cookieRows']).toEqual(['set-cookie', 'set-cookie']) + expect(parser['bodyRows']).toEqual('') }) it('should parse message for rows when message contains Body rows', () => { - const rawResponse = ['start-line', 'header1', 'header2', 'header3', '', 'body'].join(HttpZConsts.EOL) + const rawResponse = ['start-line', 'header1', 'header2', 'header3', '', 'body'].join(EOL) const parser = getParserInstance(rawResponse) - parser._parseMessageForRows() + parser['_parseMessageForRows']() - should(parser.startRow).eql('start-line') - should(parser.headerRows).eql(['header1', 'header2', 'header3']) - should(parser.cookieRows).eql([]) - should(parser.bodyRows).eql('body') + expect(parser['startRow']).toEqual('start-line') + expect(parser['headerRows']).toEqual(['header1', 'header2', 'header3']) + expect(parser['cookieRows']).toEqual([]) + expect(parser['bodyRows']).toEqual('body') }) }) describe('_parseStartRow', () => { it('should throw error when startRow has invalid format', () => { const parser = getParserInstance() - parser.startRow = 'Invalid response startRow' + parser['startRow'] = 'Invalid response startRow' + const err = new HttpZError( + 'Incorrect startRow format, expected: HTTP-Version status-code reason-phrase', + 'Invalid response startRow', + ) - should(parser._parseStartRow.bind(parser)).throw(HttpZError, { - message: 'Incorrect startRow format, expected: HTTP-Version status-code reason-phrase', - details: 'Invalid response startRow', - }) + expect(parser['_parseStartRow'].bind(parser)).toThrow(err) }) it('should set instance fields when startRow has valid format (reason is empty)', () => { const parser = getParserInstance() - parser.startRow = 'HTTP/2 204 ' + parser['startRow'] = 'HTTP/2 204 ' - parser._parseStartRow() - should(parser.protocolVersion).eql('HTTP/2') - should(parser.statusCode).eql(204) - should(parser.statusMessage).eql('') + parser['_parseStartRow']() + expect(parser['protocolVersion']).toEqual('HTTP/2') + expect(parser['statusCode']).toEqual(204) + expect(parser['statusMessage']).toEqual('') }) it('should set instance fields when startRow has valid format (reason is not empty)', () => { const parser = getParserInstance() - parser.startRow = 'HTTP/1.1 201 Created' + parser['startRow'] = 'HTTP/1.1 201 Created' - parser._parseStartRow() - should(parser.protocolVersion).eql('HTTP/1.1') - should(parser.statusCode).eql(201) - should(parser.statusMessage).eql('Created') + parser['_parseStartRow']() + expect(parser['protocolVersion']).toEqual('HTTP/1.1') + expect(parser['statusCode']).toEqual(201) + expect(parser['statusMessage']).toEqual('Created') }) }) describe('_parseCookieRows', () => { - function getDefaultCookies() { + function getDefaultCookies(): string[] { return [ 'Set-Cookie: csrftoken=123abc', 'Set-Cookie: ', @@ -139,27 +145,28 @@ describe('parsers / response', () => { it('should throw error when some of cookieRows has invalid format (empty cookie name)', () => { const parser = getParserInstance() - parser.cookieRows = getDefaultCookies() - parser.cookieRows[1] = 'Set-cookie: =456def; Domain=example.com;' + parser['cookieRows'] = getDefaultCookies() + parser['cookieRows'][1] = 'Set-cookie: =456def; Domain=example.com;' + const err = new HttpZError( + 'Incorrect set-cookie pair format, expected: Name1=Value1;...', + '=456def; Domain=example.com;', + ) - should(parser._parseCookieRows.bind(parser)).throw(HttpZError, { - message: 'Incorrect set-cookie pair format, expected: Name1=Value1;...', - details: '=456def; Domain=example.com;', - }) + expect(parser['_parseCookieRows'].bind(parser)).toThrow(err) }) it('should set instance.cookies to undefined when cookieRows is an empty array', () => { const parser = getParserInstance() - parser.cookieRows = [] + parser['cookieRows'] = [] const expected = undefined - parser._parseCookieRows() - should(parser.cookies).eql(expected) + parser['_parseCookieRows']() + expect(parser['cookies']).toEqual(expected) }) it('should set instance.cookies when cookieRows is valid and not an empty array', () => { const parser = getParserInstance() - parser.cookieRows = getDefaultCookies() + parser['cookieRows'] = getDefaultCookies() const expected = [ { name: 'csrftoken', value: '123abc' }, {}, @@ -167,19 +174,19 @@ describe('parsers / response', () => { { name: 'username', value: 'smith', params: ['Expires=Wed, 21 Oct 2015 07:28:00 GMT', 'Secure', 'HttpOnly'] }, ] - parser._parseCookieRows() - should(parser.cookies).eql(expected) + parser['_parseCookieRows']() + expect(parser['cookies']).toEqual(expected) }) }) describe('_generateModel', () => { it('should generate response model using instance fields when some fields are undefined', () => { const parser = getParserInstance() - parser.headersSize = 25 - parser.bodySize = 0 - parser.protocolVersion = 'protocolVersion' - parser.statusCode = 'statusCode' - parser.statusMessage = 'statusMessage' + parser['headersSize'] = 25 + parser['bodySize'] = 0 + parser['protocolVersion'] = 'protocolVersion' as HttpProtocolVersion + parser['statusCode'] = 'statusCode' as any as number + parser['statusMessage'] = 'statusMessage' const expected = { protocolVersion: 'protocolVersion', @@ -188,20 +195,20 @@ describe('parsers / response', () => { headersSize: 25, bodySize: 0, } - const actual = parser._generateModel() - should(actual).eql(expected) + const actual = parser['_generateModel']() + expect(actual).toEqual(expected) }) it('should generate response model using instance fields', () => { const parser = getParserInstance() - parser.headersSize = 55 - parser.bodySize = 4 - parser.protocolVersion = 'protocolVersion' - parser.statusCode = 'statusCode' - parser.statusMessage = 'statusMessage' - parser.headers = 'headers' - parser.cookies = 'cookies' - parser.body = 'body' + parser['headersSize'] = 55 + parser['bodySize'] = 4 + parser['protocolVersion'] = 'protocolVersion' as HttpProtocolVersion + parser['statusCode'] = 'statusCode' as any as number + parser['statusMessage'] = 'statusMessage' + parser['headers'] = 'headers' as any as HttpZHeader[] + parser['cookies'] = 'cookies' as any as HttpZCookieParam[] + parser['body'] = 'body' as any as HttpZBody const expected = { protocolVersion: 'protocolVersion', @@ -213,14 +220,14 @@ describe('parsers / response', () => { headersSize: 55, bodySize: 4, } - const actual = parser._generateModel() - should(actual).eql(expected) + const actual = parser['_generateModel']() + expect(actual).toEqual(expected) }) }) describe('functional tests', () => { it('should parse response without headers and body', () => { - const rawResponse = ['HTTP/1.1 204 No content', '', ''].join(HttpZConsts.EOL) + const rawResponse = ['HTTP/1.1 204 No content', '', ''].join(EOL) const responseModel = { protocolVersion: 'HTTP/1.1', @@ -233,7 +240,7 @@ describe('parsers / response', () => { const parser = getParserInstance(rawResponse) const actual = parser.parse() - should(actual).eql(responseModel) + expect(actual).toEqual(responseModel) }) it('should parse response without body (header names in lower case)', () => { @@ -245,7 +252,7 @@ describe('parsers / response', () => { 'content-encoding: gzip,deflate', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const responseModel = { protocolVersion: 'HTTP/1.1', @@ -275,7 +282,7 @@ describe('parsers / response', () => { const parser = getParserInstance(rawResponse) const actual = parser.parse() - should(actual).eql(responseModel) + expect(actual).toEqual(responseModel) }) it('should parse response without cookies and body', () => { @@ -290,7 +297,7 @@ describe('parsers / response', () => { 'Set-Cookie: username=smith; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly', '', '', - ].join(HttpZConsts.EOL) + ].join(EOL) const responseModel = { protocolVersion: 'HTTP/1.1', @@ -337,7 +344,7 @@ describe('parsers / response', () => { const parser = getParserInstance(rawResponse) const actual = parser.parse() - should(actual).eql(responseModel) + expect(actual).toEqual(responseModel) }) it('should parse response with body of contentType=text/plain', () => { @@ -350,7 +357,7 @@ describe('parsers / response', () => { 'Content-Length: 301', '', 'Text data', - ].join(HttpZConsts.EOL) + ].join(EOL) const responseModel = { protocolVersion: 'HTTP/1.1', @@ -388,7 +395,7 @@ describe('parsers / response', () => { const parser = getParserInstance(rawResponse) const actual = parser.parse() - should(actual).eql(responseModel) + expect(actual).toEqual(responseModel) }) it('should parse response with body of contentType=text/plain and transfer-encoding=chunked', () => { @@ -410,7 +417,7 @@ describe('parsers / response', () => { 'transfer the payload body', 'C', ' to the user', - ].join(HttpZConsts.EOL) + ].join(EOL) const responseModel = { protocolVersion: 'HTTP/1.1', @@ -448,7 +455,7 @@ describe('parsers / response', () => { const parser = getParserInstance(rawResponse) const actual = parser.parse() - should(actual).eql(responseModel) + expect(actual).toEqual(responseModel) }) }) }) diff --git a/test/test-utils.ts b/test/test-utils.ts new file mode 100644 index 0000000..cb83106 --- /dev/null +++ b/test/test-utils.ts @@ -0,0 +1,21 @@ +export type ExpectedSpiedFnArgs = { + calledFnName: TFnName + calledWith?: unknown + calledTimes: number +} + +// TODO: ts-refactor => improve +export function testSpiedFn( + spyFn: () => void, + spyFnName: TFnName, + expectedFnArgs: ExpectedSpiedFnArgs | undefined = undefined, +): void { + if (spyFnName === expectedFnArgs?.calledFnName) { + expect(spyFn).toHaveBeenCalledTimes(expectedFnArgs.calledTimes) + if ('calledWith' in expectedFnArgs) { + expect(spyFn).toHaveBeenCalledWith(expectedFnArgs.calledWith) + } else { + expect(spyFn).toHaveBeenCalledWith() + } + } +} diff --git a/test/utils-spec.js b/test/utils-spec.ts similarity index 54% rename from test/utils-spec.js rename to test/utils-spec.ts index 8c52e2a..6cc8961 100644 --- a/test/utils-spec.js +++ b/test/utils-spec.ts @@ -1,53 +1,53 @@ -const should = require('should') -const utils = require('../src/utils') +import { HttpZParam } from '../src/types' +import * as utils from '../src/utils' describe('utils', () => { describe('splitBy', () => { const delimiter = ';' it('should return empty array when str is nil or empty', () => { - let actual = utils.splitBy(undefined, delimiter) - should(actual).eql([]) + let actual = utils.splitBy(undefined as any, delimiter) + expect(actual).toEqual([]) - actual = utils.splitBy(null, delimiter) - should(actual).eql([]) + actual = utils.splitBy(null as any, delimiter) + expect(actual).toEqual([]) actual = utils.splitBy('', delimiter) - should(actual).eql([]) + expect(actual).toEqual([]) }) it('should return empty array when str does not contain delimiter', () => { let actual = utils.splitBy('somestring', delimiter) - should(actual).eql([]) + expect(actual).toEqual([]) actual = utils.splitBy('1234567890', delimiter) - should(actual).eql([]) + expect(actual).toEqual([]) }) it('should return empty array with one empty element when str does not contain two parts', () => { let actual = utils.splitBy('somestring ; ', delimiter) - should(actual).eql(['somestring', '']) + expect(actual).toEqual(['somestring', '']) actual = utils.splitBy(' ; somestring', delimiter) - should(actual).eql(['', 'somestring']) + expect(actual).toEqual(['', 'somestring']) }) it('should return array of two elements when str contains two parts', () => { let actual = utils.splitBy('partOne; partTwo', delimiter) - should(actual).eql(['partOne', 'partTwo']) + expect(actual).toEqual(['partOne', 'partTwo']) actual = utils.splitBy('partOne ; partTwo ', delimiter) - should(actual).eql(['partOne', 'partTwo']) + expect(actual).toEqual(['partOne', 'partTwo']) actual = utils.splitBy('partOne; partTwo partThree', delimiter) - should(actual).eql(['partOne', 'partTwo partThree']) + expect(actual).toEqual(['partOne', 'partTwo partThree']) }) }) describe('isAbsoluteUrl', () => { - function test(url, expected) { + function test(url: string, expected: unknown): void { const actual = utils.isAbsoluteUrl(url) - should(actual).eql(expected) + expect(actual).toEqual(expected) } it('should return false when url is in origin-form', () => { @@ -64,7 +64,7 @@ describe('utils', () => { }) describe('parseUrl', () => { - function getDefParsedUrl(ex) { + function getDefParsedUrl(ex = {}): object { return { protocol: 'HTTP', host: 'example.com', @@ -74,76 +74,48 @@ describe('utils', () => { } } - function test(url, host, expected) { + function test(url: string, host: string, expected: unknown): void { const actual = utils.parseUrl(url, host) - should(actual).eql(expected) + expect(actual).toEqual(expected) } - describe('call with one parameter', () => { - it('should parse url started with http', () => { - test('http://example.com', undefined, getDefParsedUrl()) - }) - - it('should parse url started with https', () => { - test('https://example.com', undefined, getDefParsedUrl({ protocol: 'HTTPS' })) - }) - - it('should add `http` when url is without protocol', () => { - test('example.com', undefined, getDefParsedUrl({ protocol: 'HTTP' })) - }) - - it('should parse url with path', () => { - test('http://example.com/home', undefined, getDefParsedUrl({ path: '/home' })) - }) - - it('should parse url with path and params', () => { - test( - 'http://example.com/home?p1=v1', - undefined, - getDefParsedUrl({ path: '/home', params: [{ name: 'p1', value: 'v1' }] }), - ) - }) - }) - - describe('call with two parameters', () => { - it('should parse url started with http', () => { - test('/', 'http://example.com', getDefParsedUrl()) - }) - - it('should parse url started with https', () => { - test('/', 'https://example.com', getDefParsedUrl({ protocol: 'HTTPS' })) - }) - - it('should add `http` when url is without protocol', () => { - test('/', 'example.com', getDefParsedUrl({ protocol: 'HTTP' })) - }) - - it('should parse url with path', () => { - test('/home', 'http://example.com', getDefParsedUrl({ path: '/home' })) - }) - - it('should parse url with path and params', () => { - test( - '/home?p1=v1', - 'http://example.com', - getDefParsedUrl({ path: '/home', params: [{ name: 'p1', value: 'v1' }] }), - ) - }) + it('should parse url started with http', () => { + test('/', 'http://example.com', getDefParsedUrl()) + }) + + it('should parse url started with https', () => { + test('/', 'https://example.com', getDefParsedUrl({ protocol: 'HTTPS' })) + }) + + it('should add `http` when url is without protocol', () => { + test('/', 'example.com', getDefParsedUrl({ protocol: 'HTTP' })) + }) + + it('should parse url with path', () => { + test('/home', 'http://example.com', getDefParsedUrl({ path: '/home' })) + }) + + it('should parse url with path and params', () => { + test( + '/home?p1=v1', + 'http://example.com', + getDefParsedUrl({ path: '/home', params: [{ name: 'p1', value: 'v1' }] }), + ) }) }) describe('arrayToPairs', () => { - function test(params, expected) { + function test(params: HttpZParam[], expected: unknown): void { const actual = utils.arrayToPairs(params) - should(actual).eql(expected) + expect(actual).toEqual(expected) } it('should return param pairs', () => { test( - [{ name: 'p1', value: 'v1' }, { name: 'p2', value: null }, { name: 'p3' }], + [{ name: 'p1', value: 'v1' }, { name: 'p2', value: undefined }, { name: 'p3' }], [ ['p1', 'v1'], - ['p2', null], + ['p2', ''], ['p3', ''], ], ) @@ -151,9 +123,9 @@ describe('utils', () => { }) describe('prettifyHeaderName', () => { - function test(name, expected) { + function test(name: string | null | undefined, expected: unknown): void { const actual = utils.prettifyHeaderName(name) - should(actual).eql(expected) + expect(actual).toEqual(expected) } it('should return empty string when name is nil', () => { @@ -179,9 +151,9 @@ describe('utils', () => { }) describe('getEmptyStringForUndefined', () => { - function test(val, expected) { + function test(val: string | undefined, expected: unknown): void { const actual = utils.getEmptyStringForUndefined(val) - should(actual).eql(expected) + expect(actual).toEqual(expected) } it('should return empty string when val is undefined', () => { @@ -194,17 +166,17 @@ describe('utils', () => { }) describe('extendIfNotUndefined', () => { - function getDefObject(ex) { + function getDefObject(ex = {}): object { return { name: 'John', ...ex, } } - function test(fieldName, fieldValue, expected) { + function test(fieldName: string, fieldValue: string | undefined, expected: unknown): void { const obj = getDefObject() utils.extendIfNotUndefined(obj, fieldName, fieldValue) - should(obj).eql(expected) + expect(obj).toEqual(expected) } it('should not extend object by new field when fieldValue is undefined', () => { diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1a338fb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "ES2020", + "noImplicitAny": true, + "removeComments": true, + "target": "ES2023", + "outDir": "./dist/", + "sourceMap": true, + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*.ts", + "test/**/*.ts" + ], + "exclude": [ + "demo" + ] +} \ No newline at end of file From 8b33055c35e440ff3897c5d5d25f811a7dfebcaf Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Thu, 6 Feb 2025 19:50:14 +0300 Subject: [PATCH 02/13] update configs --- .lintstagedrc.json | 2 +- .mocharc.json | 6 - .nvmrc | 2 +- .prettierrc.json | 14 +- eslint.config.mjs | 165 ++++---- index.d.ts | 105 ------ jest.config.js | 2 +- package.json | 60 ++- pnpm-lock.yaml | 919 +++++++++++++++------------------------------ rollup.config.js | 31 +- 10 files changed, 436 insertions(+), 870 deletions(-) delete mode 100644 .mocharc.json delete mode 100644 index.d.ts diff --git a/.lintstagedrc.json b/.lintstagedrc.json index 73b024e..ff09e48 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,5 +1,5 @@ { - "(src)/**/*.js": [ + "src/**/*.js": [ "prettier --write", "eslint --fix" ] diff --git a/.mocharc.json b/.mocharc.json deleted file mode 100644 index c231f0f..0000000 --- a/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": "test/index.js", - "ui": "bdd", - "reporter": "dot", - "recursive": true -} \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 92f279e..8fdd954 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22 \ No newline at end of file +22 \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json index 3304b1d..4a0324d 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -4,5 +4,15 @@ "useTabs": false, "semi": false, "singleQuote": true, - "trailingComma": "all" -} \ No newline at end of file + "quoteProps": "as-needed", + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "avoid", + "endOfLine": "auto", + + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrderParserPlugins" : ["typescript", "decorators-legacy"], + "importOrder": ["^[./]"], + "importOrderCaseInsensitive": true, + "importOrderSeparation": true +} diff --git a/eslint.config.mjs b/eslint.config.mjs index 73d7826..c0b9531 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,95 +1,86 @@ import globals from "globals"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; +import pluginJs from "@eslint/js"; +import tseslint from "typescript-eslint"; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all -}); - -export default [...compat.extends("eslint:recommended"), { - languageOptions: { - globals: { - ...globals.node, - }, - ecmaVersion: 5, - sourceType: "module", - parserOptions: { - ecmaFeatures: { - impliedStrict: true, +export default [ + { + files: ["src/**/*.ts", "test/**/*.ts"], + }, + { + ignores: [ + 'coverage/**', + 'build/**', + 'dist/**', + 'demo/**', + 'docs/**', + 'tmp/**', + "**/*.mjs", + "jest.config.js", + "rollup.config.js", + ], + }, + { + languageOptions: { globals: globals.node } + }, + pluginJs.configs.recommended, + ...tseslint.configs.strictTypeChecked, + ...tseslint.configs.recommendedTypeChecked, + { + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, }, }, }, + { + rules: { + "block-scoped-var": "error", + "camelcase": "error", + "complexity": ["error", 12], + "eol-last": "error", + "max-depth": ["warn", 3], + "max-nested-callbacks": ["warn", 3], + "max-params": ["warn", 3], + "max-statements": ["warn", 15], + "no-console": "error", + "no-duplicate-imports": "error", + "no-else-return": "error", + "no-extend-native": "error", + "no-invalid-this": "error", + "no-lone-blocks": "error", + "no-return-await": "error", + "no-shadow": "error", + "no-trailing-spaces": "error", + "no-throw-literal": "error", + "no-unused-expressions": "error", + "no-use-before-define": "off", + "no-useless-call": "error", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "require-await": "error", + "strict": "error", - rules: { - "array-bracket-spacing": ["error", "never"], - "block-scoped-var": "error", - "brace-style": ["error", "1tbs"], - camelcase: "error", - - "comma-spacing": ["error", { - before: false, - after: true, - }], - - "computed-property-spacing": ["error", "never"], - complexity: ["error", 12], - curly: "error", - "eol-last": "error", - - indent: ["error", 2, { - SwitchCase: 1, - MemberExpression: 1, - }], - - eqeqeq: ["error", "smart"], - - "keyword-spacing": ["error", { - before: true, - after: true, - }], - - "max-depth": ["warn", 3], - "max-len": ["warn", 130], - "max-nested-callbacks": ["warn", 3], - "max-params": ["warn", 3], - "max-statements": ["warn", 15], - "new-cap": "off", - "no-console": "error", - "no-duplicate-imports": "error", - "no-else-return": "error", - "no-extend-native": "error", - "no-extra-parens": "warn", - "no-invalid-this": "error", - "no-lone-blocks": "warn", - "no-mixed-spaces-and-tabs": "error", - "no-multi-spaces": "error", - "no-return-await": "warn", - "no-shadow": "error", - "no-trailing-spaces": "error", - "no-throw-literal": "error", - "no-unused-expressions": "error", - "no-unused-vars": "error", - "no-use-before-define": "off", - "no-useless-call": "warn", - - "object-curly-spacing": ["error", "always", { - objectsInObjects: false, - }], + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/explicit-function-return-type": "error", + "@typescript-eslint/explicit-module-boundary-types": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/no-non-null-assertion": "off", + }, + }, - "prefer-const": "off", - "prefer-rest-params": "error", - "prefer-spread": "error", - "require-await": "warn", - semi: ["warn", "never"], - "space-infix-ops": "error", - "space-unary-ops": "error", - strict: "error", - quotes: ["error", "single", "avoid-escape"], + { + files: ["test/**/*.ts"], + rules: { + "max-params": "off", + "max-statements": "off", + "max-nested-callbacks": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-non-null-assertion": "off", + }, }, -}]; +]; diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 49c8813..0000000 --- a/index.d.ts +++ /dev/null @@ -1,105 +0,0 @@ -type HttpZParam = { - name: string; - value: string; -} - -type HttpZHeader = { - name: string; - value: string; -} - -type HttpZBodyParam = { - type?: 'inline' | 'attachment'; - contentType?: string; - name: string; - fileName?: string; -} - -type HttpZBody = { - contentType: string; - boundary: string; - params: HttpZParam[] | HttpZBodyParam[]; - text: string; -} - -type HttpZRequestModel = { - method: string; - protocolVersion: string; - target: string; - host: string; - path: string; - queryParams: HttpZParam[]; - headers: HttpZHeader[]; - cookies: HttpZParam[]; - body: HttpZBody; - headersSize: number; - bodySize: number; -} - -type HttpZResponseModel = { - protocolVersion: string; - statusCode: number; - statusMessage: string; - headers: HttpZHeader[]; - cookies: HttpZParam[]; - body: HttpZBody; - headersSize: number; - bodySize: number; -} - -type HttpZRequestBuilderModel = { - method: string; - protocolVersion: string; - target: string; - headers: HttpZHeader[]; - body: HttpZBody; -} - -type HttpZResponseBuilderModel = { - protocolVersion: string; - statusCode: number; - statusMessage: string; - headers: HttpZHeader[]; - body: HttpZBody; -} - -type HttpZOptions = { - mandatoryHost: boolean; -} - -declare const EOL: string; -declare const EOL2X: string; -declare const regexps: object; -declare const http: { - protocols: string; - protocolVersions: string; - methods: string; - postMethods: string; - contentTypes: string; - headers: string; -}; - -export declare namespace consts { - export { - EOL, - EOL2X, - regexps, - http - }; -} - -export class HttpZError extends Error { } - -export declare namespace utils { - function splitBy(str: string, delimiter: string): any; - function isAbsoluteUrl(url: string): boolean; - function parseUrl(path?: string, origin?: string): any; - function arrayToPairs(params: HttpZParam[]): any[]; - function prettifyHeaderName(name: string): string; - function getEmptyStringForUndefined(val?: string): string; - function extendIfNotUndefined(obj: any, fieldName: string, fieldValue?: any): any; -} - -export function parse(rawMessage: string, opts?: HttpZOptions): HttpZRequestModel | HttpZResponseModel; - -export function build(messageModel: HttpZRequestBuilderModel | HttpZResponseBuilderModel, opts?: HttpZOptions): string; diff --git a/jest.config.js b/jest.config.js index d321458..9d81bbf 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ module.exports = { testEnvironment: "node", testMatch: [ - "**/test/**/*.ts" + "**/test/**/*-spec.ts" ], transform: { "^.+.ts$": ["ts-jest", {}], diff --git a/package.json b/package.json index f035d2f..b99e348 100644 --- a/package.json +++ b/package.json @@ -2,35 +2,24 @@ "name": "http-z", "version": "8.0.0-dev", "description": "HTTP message parser and builder", - "engines": { - "node": ">=18", - "pnpm": ">=9" - }, - "main": "index.js", - "browser": "index.umd.js", - "typings": "index.d.ts", + "main": "dist/index.js", + "browser": "dist/index.js", + "typings": "dist/index.d.ts", "files": [ - "src", - "index.js", - "index.umd.js", - "index.d.ts" + "dist/**" ], + "engines": { + "node": ">=18" + }, "scripts": { "prepublish": "pnpm build", - "clean": "rm -rf ./build ./dist", - "build": "pnpm clean && pnpm build:tsc && pnpm build:dist", - "build:tsc": "pnpm tsc --project tsconfig.dist.json", - "build:dist": "pnpm rollup -c", + "build": "pnpm rollup -c", "prettify": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "lint": "eslint src/ test/ --ext .ts --fix", "format": "pnpm lint && pnpm prettify", + "lint": "eslint", "test": "NODE_ENV=test jest", - "coverage": "nyc pnpm test", - "coverage:codecov": "nyc --reporter=lcov pnpm test" - }, - "repository": { - "type": "git", - "url": "https://github.com/AlexanderMac/http-z" + "coverage": "NODE_ENV=test jest --coverage", + "coverage:codecov": "pnpm coverage" }, "keywords": [ "http", @@ -43,25 +32,30 @@ ], "author": "Alexander Mac", "license": "MIT", + "homepage": "https://github.com/AlexanderMac/http-z", + "repository": { + "type": "git", + "url": "https://github.com/AlexanderMac/http-z" + }, "bugs": { "url": "https://github.com/AlexanderMac/http-z/issues" }, - "homepage": "https://github.com/AlexanderMac/http-z", "devDependencies": { - "@rollup/plugin-commonjs": "^28.0.2", - "@rollup/plugin-node-resolve": "^16.0.0", - "@trivago/prettier-plugin-sort-imports": "^5.2.0", + "@eslint/js": "^9.19.0", + "@rollup/plugin-typescript": "^12.1.2", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/jest": "^29.5.14", - "@types/node": "^22.10.10", - "@typescript-eslint/eslint-plugin": "^8.19.1", - "@typescript-eslint/parser": "^8.21.0", - "eslint": "^9.18.0", + "@types/node": "^22.12.0", + "eslint": "^9.19.0", + "globals": "^15.14.0", "jest": "^29.7.0", - "nyc": "^17.1.0", "prettier": "^3.4.2", - "rollup": "^4.31.0", + "rollup": "^4.32.1", + "rollup-plugin-dts": "^6.1.1", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "tslib": "^2.8.1", + "typescript": "^5.7.3", + "typescript-eslint": "^8.22.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66fb2e0..54f3fa5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,51 +8,54 @@ importers: .: devDependencies: - '@rollup/plugin-commonjs': - specifier: ^28.0.2 - version: 28.0.2(rollup@4.32.0) - '@rollup/plugin-node-resolve': - specifier: ^16.0.0 - version: 16.0.0(rollup@4.32.0) + '@eslint/js': + specifier: ^9.19.0 + version: 9.19.0 + '@rollup/plugin-typescript': + specifier: ^12.1.2 + version: 12.1.2(rollup@4.32.1)(tslib@2.8.1)(typescript@5.7.3) '@trivago/prettier-plugin-sort-imports': - specifier: ^5.2.0 - version: 5.2.1(prettier@3.4.2) + specifier: ^5.2.2 + version: 5.2.2(prettier@3.4.2) '@types/jest': specifier: ^29.5.14 version: 29.5.14 '@types/node': - specifier: ^22.10.10 - version: 22.10.10 - '@typescript-eslint/eslint-plugin': - specifier: ^8.19.1 - version: 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3) - '@typescript-eslint/parser': - specifier: ^8.21.0 - version: 8.21.0(eslint@9.18.0)(typescript@5.7.3) + specifier: ^22.12.0 + version: 22.12.0 eslint: - specifier: ^9.18.0 - version: 9.18.0 + specifier: ^9.19.0 + version: 9.19.0 + globals: + specifier: ^15.14.0 + version: 15.14.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) - nyc: - specifier: ^17.1.0 - version: 17.1.0 + version: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) prettier: specifier: ^3.4.2 version: 3.4.2 rollup: - specifier: ^4.31.0 - version: 4.32.0 + specifier: ^4.32.1 + version: 4.32.1 + rollup-plugin-dts: + specifier: ^6.1.1 + version: 6.1.1(rollup@4.32.1)(typescript@5.7.3) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + version: 10.9.2(@types/node@22.12.0)(typescript@5.7.3) + tslib: + specifier: ^2.8.1 + version: 2.8.1 typescript: specifier: ^5.7.3 version: 5.7.3 + typescript-eslint: + specifier: ^8.22.0 + version: 8.22.0(eslint@9.19.0)(typescript@5.7.3) packages: @@ -115,6 +118,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -214,10 +222,18 @@ packages: resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.7': + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.5': resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -247,8 +263,8 @@ packages: resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.18.0': - resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} + '@eslint/js@9.19.0': + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.5': @@ -386,23 +402,18 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@rollup/plugin-commonjs@28.0.2': - resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} + '@rollup/plugin-typescript@12.1.2': + resolution: {integrity: sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' peerDependenciesMeta: rollup: optional: true + tslib: + optional: true '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} @@ -413,98 +424,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.32.0': - resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==} + '@rollup/rollup-android-arm-eabi@4.32.1': + resolution: {integrity: sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.32.0': - resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} + '@rollup/rollup-android-arm64@4.32.1': + resolution: {integrity: sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.32.0': - resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} + '@rollup/rollup-darwin-arm64@4.32.1': + resolution: {integrity: sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.32.0': - resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} + '@rollup/rollup-darwin-x64@4.32.1': + resolution: {integrity: sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.32.0': - resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} + '@rollup/rollup-freebsd-arm64@4.32.1': + resolution: {integrity: sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.32.0': - resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} + '@rollup/rollup-freebsd-x64@4.32.1': + resolution: {integrity: sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': - resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} + '@rollup/rollup-linux-arm-gnueabihf@4.32.1': + resolution: {integrity: sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.32.0': - resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} + '@rollup/rollup-linux-arm-musleabihf@4.32.1': + resolution: {integrity: sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.32.0': - resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} + '@rollup/rollup-linux-arm64-gnu@4.32.1': + resolution: {integrity: sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.32.0': - resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} + '@rollup/rollup-linux-arm64-musl@4.32.1': + resolution: {integrity: sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': - resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} + '@rollup/rollup-linux-loongarch64-gnu@4.32.1': + resolution: {integrity: sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': - resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': + resolution: {integrity: sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.32.0': - resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} + '@rollup/rollup-linux-riscv64-gnu@4.32.1': + resolution: {integrity: sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.32.0': - resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} + '@rollup/rollup-linux-s390x-gnu@4.32.1': + resolution: {integrity: sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.32.0': - resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} + '@rollup/rollup-linux-x64-gnu@4.32.1': + resolution: {integrity: sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.32.0': - resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} + '@rollup/rollup-linux-x64-musl@4.32.1': + resolution: {integrity: sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.32.0': - resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} + '@rollup/rollup-win32-arm64-msvc@4.32.1': + resolution: {integrity: sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.32.0': - resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} + '@rollup/rollup-win32-ia32-msvc@4.32.1': + resolution: {integrity: sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.32.0': - resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} + '@rollup/rollup-win32-x64-msvc@4.32.1': + resolution: {integrity: sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==} cpu: [x64] os: [win32] @@ -517,8 +528,8 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@trivago/prettier-plugin-sort-imports@5.2.1': - resolution: {integrity: sha512-NDZndt0fmVThIx/8cExuJHLZagUVzfGCoVrwH9x6aZvwfBdkrDFTYujecek6X2WpG4uUFsVaPg5+aNQPSyjcmw==} + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} engines: {node: '>18.12'} peerDependencies: '@vue/compiler-sfc': 3.x @@ -578,11 +589,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@22.10.10': - resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} - - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/node@22.12.0': + resolution: {integrity: sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -593,51 +601,51 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.21.0': - resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} + '@typescript-eslint/eslint-plugin@8.22.0': + resolution: {integrity: sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.21.0': - resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} + '@typescript-eslint/parser@8.22.0': + resolution: {integrity: sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.21.0': - resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + '@typescript-eslint/scope-manager@8.22.0': + resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.21.0': - resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} + '@typescript-eslint/type-utils@8.22.0': + resolution: {integrity: sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.21.0': - resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + '@typescript-eslint/types@8.22.0': + resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.21.0': - resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + '@typescript-eslint/typescript-estree@8.22.0': + resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.21.0': - resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + '@typescript-eslint/utils@8.22.0': + resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.21.0': - resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + '@typescript-eslint/visitor-keys@8.22.0': + resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -654,10 +662,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -681,13 +685,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - append-transform@2.0.0: - resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} - engines: {node: '>=8'} - - archy@1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -753,10 +750,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - caching-transform@4.0.0: - resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} - engines: {node: '>=8'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -787,13 +780,6 @@ packages: cjs-module-lexer@1.4.1: resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -812,15 +798,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -845,10 +825,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dedent@1.5.3: resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: @@ -864,10 +840,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-require-extensions@3.0.1: - resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} - engines: {node: '>=8'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -898,9 +870,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -925,8 +894,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.18.0: - resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} + eslint@9.19.0: + resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -994,14 +963,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1013,10 +974,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1032,17 +989,6 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1090,6 +1036,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1100,10 +1050,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasha@5.2.2: - resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} - engines: {node: '>=8'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1132,10 +1078,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1166,27 +1108,14 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1194,10 +1123,6 @@ packages: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - istanbul-lib-hook@3.0.0: - resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} - engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} @@ -1206,10 +1131,6 @@ packages: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} - istanbul-lib-processinfo@2.0.3: - resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} - engines: {node: '>=8'} - istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -1418,9 +1339,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.flattendeep@4.4.0: - resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -1436,10 +1354,6 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -1485,10 +1399,6 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-preload@0.2.1: - resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} - engines: {node: '>=8'} - node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -1500,11 +1410,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nyc@17.1.0: - resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} - engines: {node: '>=18'} - hasBin: true - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -1532,18 +1437,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-hash@4.0.0: - resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} - engines: {node: '>=8'} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1599,10 +1496,6 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - process-on-spawn@1.1.0: - resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} - engines: {node: '>=8'} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -1620,17 +1513,10 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - release-zalgo@1.0.0: - resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} - engines: {node: '>=4'} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -1656,13 +1542,15 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rollup-plugin-dts@6.1.1: + resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 - rollup@4.32.0: - resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==} + rollup@4.32.1: + resolution: {integrity: sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1678,9 +1566,6 @@ packages: engines: {node: '>=10'} hasBin: true - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1692,10 +1577,6 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -1710,10 +1591,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - spawn-wrap@2.0.0: - resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} - engines: {node: '>=8'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -1812,6 +1689,9 @@ packages: '@swc/wasm': optional: true + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1824,12 +1704,12 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.22.0: + resolution: {integrity: sha512-Y2rj210FW1Wb6TWXzQc5+P+EWI9/zdS57hLEc0gnyuvdzWo8+Y8brKlbj0muejonhMI/xAZCnZZwjbIfv1CkOw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} @@ -1848,10 +1728,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -1862,9 +1738,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1874,10 +1747,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1885,16 +1754,10 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -1902,18 +1765,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -2010,6 +1865,10 @@ snapshots: dependencies: '@babel/types': 7.26.5 + '@babel/parser@7.26.7': + dependencies: + '@babel/types': 7.26.7 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -2113,20 +1972,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.26.7': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.5': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.7': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0)': dependencies: - eslint: 9.18.0 + eslint: 9.19.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -2157,7 +2033,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.18.0': {} + '@eslint/js@9.19.0': {} '@eslint/object-schema@2.1.5': {} @@ -2192,27 +2068,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -2237,7 +2113,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -2255,7 +2131,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.10 + '@types/node': 22.12.0 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -2277,7 +2153,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.10.10 + '@types/node': 22.12.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2347,7 +2223,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.10.10 + '@types/node': 22.12.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -2385,91 +2261,78 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 - '@rollup/plugin-commonjs@28.0.2(rollup@4.32.0)': + '@rollup/plugin-typescript@12.1.2(rollup@4.32.1)(tslib@2.8.1)(typescript@5.7.3)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.32.0) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.4.3(picomatch@4.0.2) - is-reference: 1.2.1 - magic-string: 0.30.17 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.32.0 - - '@rollup/plugin-node-resolve@16.0.0(rollup@4.32.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.32.0) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 + '@rollup/pluginutils': 5.1.4(rollup@4.32.1) resolve: 1.22.10 + typescript: 5.7.3 optionalDependencies: - rollup: 4.32.0 + rollup: 4.32.1 + tslib: 2.8.1 - '@rollup/pluginutils@5.1.4(rollup@4.32.0)': + '@rollup/pluginutils@5.1.4(rollup@4.32.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.32.0 + rollup: 4.32.1 - '@rollup/rollup-android-arm-eabi@4.32.0': + '@rollup/rollup-android-arm-eabi@4.32.1': optional: true - '@rollup/rollup-android-arm64@4.32.0': + '@rollup/rollup-android-arm64@4.32.1': optional: true - '@rollup/rollup-darwin-arm64@4.32.0': + '@rollup/rollup-darwin-arm64@4.32.1': optional: true - '@rollup/rollup-darwin-x64@4.32.0': + '@rollup/rollup-darwin-x64@4.32.1': optional: true - '@rollup/rollup-freebsd-arm64@4.32.0': + '@rollup/rollup-freebsd-arm64@4.32.1': optional: true - '@rollup/rollup-freebsd-x64@4.32.0': + '@rollup/rollup-freebsd-x64@4.32.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': + '@rollup/rollup-linux-arm-gnueabihf@4.32.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.32.0': + '@rollup/rollup-linux-arm-musleabihf@4.32.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.32.0': + '@rollup/rollup-linux-arm64-gnu@4.32.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.32.0': + '@rollup/rollup-linux-arm64-musl@4.32.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': + '@rollup/rollup-linux-loongarch64-gnu@4.32.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.32.0': + '@rollup/rollup-linux-riscv64-gnu@4.32.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.32.0': + '@rollup/rollup-linux-s390x-gnu@4.32.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.32.0': + '@rollup/rollup-linux-x64-gnu@4.32.1': optional: true - '@rollup/rollup-linux-x64-musl@4.32.0': + '@rollup/rollup-linux-x64-musl@4.32.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.32.0': + '@rollup/rollup-win32-arm64-msvc@4.32.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.32.0': + '@rollup/rollup-win32-ia32-msvc@4.32.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.32.0': + '@rollup/rollup-win32-x64-msvc@4.32.1': optional: true '@sinclair/typebox@0.27.8': {} @@ -2482,12 +2345,12 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@trivago/prettier-plugin-sort-imports@5.2.1(prettier@3.4.2)': + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.4.2)': dependencies: '@babel/generator': 7.26.5 - '@babel/parser': 7.26.5 - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 javascript-natural-sort: 0.7.1 lodash: 4.17.21 prettier: 3.4.2 @@ -2527,7 +2390,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.10.10 + '@types/node': 22.12.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -2546,12 +2409,10 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@22.10.10': + '@types/node@22.12.0': dependencies: undici-types: 6.20.0 - '@types/resolve@1.20.2': {} - '@types/stack-utils@2.0.3': {} '@types/yargs-parser@21.0.3': {} @@ -2560,15 +2421,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.21.0(eslint@9.18.0)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.21.0 - eslint: 9.18.0 + '@typescript-eslint/parser': 8.22.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/type-utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.22.0 + eslint: 9.19.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -2577,40 +2438,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + '@typescript-eslint/parser@8.22.0(eslint@9.19.0)(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.22.0 debug: 4.4.0 - eslint: 9.18.0 + eslint: 9.19.0 typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.21.0': + '@typescript-eslint/scope-manager@8.22.0': dependencies: - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/visitor-keys': 8.22.0 - '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.22.0(eslint@9.19.0)(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.21.0(eslint@9.18.0)(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) debug: 4.4.0 - eslint: 9.18.0 + eslint: 9.19.0 ts-api-utils: 2.0.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.21.0': {} + '@typescript-eslint/types@8.22.0': {} - '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.22.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/visitor-keys': 8.22.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -2621,20 +2482,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.21.0(eslint@9.18.0)(typescript@5.7.3)': + '@typescript-eslint/utils@8.22.0(eslint@9.19.0)(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) - eslint: 9.18.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) + eslint: 9.19.0 typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.21.0': + '@typescript-eslint/visitor-keys@8.22.0': dependencies: - '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/types': 8.22.0 eslint-visitor-keys: 4.2.0 acorn-jsx@5.3.2(acorn@8.14.0): @@ -2647,11 +2508,6 @@ snapshots: acorn@8.14.0: {} - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -2676,12 +2532,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - append-transform@2.0.0: - dependencies: - default-require-extensions: 3.0.1 - - archy@1.0.0: {} - arg@4.1.3: {} argparse@1.0.10: @@ -2779,13 +2629,6 @@ snapshots: buffer-from@1.1.2: {} - caching-transform@4.0.0: - dependencies: - hasha: 5.2.2 - make-dir: 3.1.0 - package-hash: 4.0.0 - write-file-atomic: 3.0.3 - callsites@3.1.0: {} camelcase@5.3.1: {} @@ -2805,14 +2648,6 @@ snapshots: cjs-module-lexer@1.4.1: {} - clean-stack@2.2.0: {} - - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -2829,21 +2664,17 @@ snapshots: color-name@1.1.4: {} - commondir@1.0.1: {} - concat-map@0.0.1: {} - convert-source-map@1.9.0: {} - convert-source-map@2.0.0: {} - create-jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + create-jest@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -2864,18 +2695,12 @@ snapshots: dependencies: ms: 2.1.3 - decamelize@1.2.0: {} - dedent@1.5.3: {} deep-is@0.1.4: {} deepmerge@4.3.1: {} - default-require-extensions@3.0.1: - dependencies: - strip-bom: 4.0.0 - detect-newline@3.1.0: {} diff-sequences@29.6.3: {} @@ -2896,8 +2721,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es6-error@4.1.1: {} - escalade@3.2.0: {} escape-string-regexp@2.0.0: {} @@ -2913,14 +2736,14 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.18.0: + eslint@9.19.0: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 '@eslint/core': 0.10.0 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.18.0 + '@eslint/js': 9.19.0 '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -3018,10 +2841,6 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.4.3(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -3034,12 +2853,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-cache-dir@3.3.2: - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -3057,18 +2870,6 @@ snapshots: flatted@3.3.2: {} - foreground-child@2.0.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 3.0.7 - - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - fromentries@1.3.2: {} - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -3105,17 +2906,14 @@ snapshots: globals@14.0.0: {} + globals@15.14.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} has-flag@4.0.0: {} - hasha@5.2.2: - dependencies: - is-stream: 2.0.1 - type-fest: 0.8.1 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -3138,8 +2936,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -3163,28 +2959,14 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-module@1.0.0: {} - is-number@7.0.0: {} - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.6 - is-stream@2.0.1: {} - is-typedarray@1.0.0: {} - - is-windows@1.0.2: {} - isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} - istanbul-lib-hook@3.0.0: - dependencies: - append-transform: 2.0.0 - istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.26.0 @@ -3205,15 +2987,6 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-lib-processinfo@2.0.3: - dependencies: - archy: 1.0.0 - cross-spawn: 7.0.6 - istanbul-lib-coverage: 3.2.2 - p-map: 3.0.0 - rimraf: 3.0.2 - uuid: 8.3.2 - istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -3254,7 +3027,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -3274,16 +3047,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + jest-cli@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + create-jest: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -3293,7 +3066,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + jest-config@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -3318,8 +3091,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.10 - ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + '@types/node': 22.12.0 + ts-node: 10.9.2(@types/node@22.12.0)(typescript@5.7.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -3348,7 +3121,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3358,7 +3131,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.10 + '@types/node': 22.12.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -3397,7 +3170,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -3432,7 +3205,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -3460,7 +3233,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -3506,7 +3279,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -3525,7 +3298,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.10 + '@types/node': 22.12.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -3534,17 +3307,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.10.10 + '@types/node': 22.12.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): + jest@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest-cli: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -3597,8 +3370,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.flattendeep@4.4.0: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -3613,10 +3384,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - make-dir@4.0.0: dependencies: semver: 7.6.3 @@ -3656,10 +3423,6 @@ snapshots: node-int64@0.4.0: {} - node-preload@0.2.1: - dependencies: - process-on-spawn: 1.1.0 - node-releases@2.0.19: {} normalize-path@3.0.0: {} @@ -3668,38 +3431,6 @@ snapshots: dependencies: path-key: 3.1.1 - nyc@17.1.0: - dependencies: - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - caching-transform: 4.0.0 - convert-source-map: 1.9.0 - decamelize: 1.2.0 - find-cache-dir: 3.3.2 - find-up: 4.1.0 - foreground-child: 3.3.0 - get-package-type: 0.1.0 - glob: 7.2.3 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-hook: 3.0.0 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-processinfo: 2.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - make-dir: 3.1.0 - node-preload: 0.2.1 - p-map: 3.0.0 - process-on-spawn: 1.1.0 - resolve-from: 5.0.0 - rimraf: 3.0.2 - signal-exit: 3.0.7 - spawn-wrap: 2.0.0 - test-exclude: 6.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - supports-color - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -3733,19 +3464,8 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@3.0.0: - dependencies: - aggregate-error: 3.1.0 - p-try@2.2.0: {} - package-hash@4.0.0: - dependencies: - graceful-fs: 4.2.11 - hasha: 5.2.2 - lodash.flattendeep: 4.4.0 - release-zalgo: 1.0.0 - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -3787,10 +3507,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - process-on-spawn@1.1.0: - dependencies: - fromentries: 1.3.2 - prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -3804,14 +3520,8 @@ snapshots: react-is@18.3.1: {} - release-zalgo@1.0.0: - dependencies: - es6-error: 4.1.1 - require-directory@2.1.1: {} - require-main-filename@2.0.0: {} - resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -3830,33 +3540,37 @@ snapshots: reusify@1.0.4: {} - rimraf@3.0.2: + rollup-plugin-dts@6.1.1(rollup@4.32.1)(typescript@5.7.3): dependencies: - glob: 7.2.3 + magic-string: 0.30.17 + rollup: 4.32.1 + typescript: 5.7.3 + optionalDependencies: + '@babel/code-frame': 7.26.2 - rollup@4.32.0: + rollup@4.32.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.32.0 - '@rollup/rollup-android-arm64': 4.32.0 - '@rollup/rollup-darwin-arm64': 4.32.0 - '@rollup/rollup-darwin-x64': 4.32.0 - '@rollup/rollup-freebsd-arm64': 4.32.0 - '@rollup/rollup-freebsd-x64': 4.32.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 - '@rollup/rollup-linux-arm-musleabihf': 4.32.0 - '@rollup/rollup-linux-arm64-gnu': 4.32.0 - '@rollup/rollup-linux-arm64-musl': 4.32.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 - '@rollup/rollup-linux-riscv64-gnu': 4.32.0 - '@rollup/rollup-linux-s390x-gnu': 4.32.0 - '@rollup/rollup-linux-x64-gnu': 4.32.0 - '@rollup/rollup-linux-x64-musl': 4.32.0 - '@rollup/rollup-win32-arm64-msvc': 4.32.0 - '@rollup/rollup-win32-ia32-msvc': 4.32.0 - '@rollup/rollup-win32-x64-msvc': 4.32.0 + '@rollup/rollup-android-arm-eabi': 4.32.1 + '@rollup/rollup-android-arm64': 4.32.1 + '@rollup/rollup-darwin-arm64': 4.32.1 + '@rollup/rollup-darwin-x64': 4.32.1 + '@rollup/rollup-freebsd-arm64': 4.32.1 + '@rollup/rollup-freebsd-x64': 4.32.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.32.1 + '@rollup/rollup-linux-arm-musleabihf': 4.32.1 + '@rollup/rollup-linux-arm64-gnu': 4.32.1 + '@rollup/rollup-linux-arm64-musl': 4.32.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.32.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.32.1 + '@rollup/rollup-linux-riscv64-gnu': 4.32.1 + '@rollup/rollup-linux-s390x-gnu': 4.32.1 + '@rollup/rollup-linux-x64-gnu': 4.32.1 + '@rollup/rollup-linux-x64-musl': 4.32.1 + '@rollup/rollup-win32-arm64-msvc': 4.32.1 + '@rollup/rollup-win32-ia32-msvc': 4.32.1 + '@rollup/rollup-win32-x64-msvc': 4.32.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -3867,8 +3581,6 @@ snapshots: semver@7.6.3: {} - set-blocking@2.0.0: {} - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -3877,8 +3589,6 @@ snapshots: signal-exit@3.0.7: {} - signal-exit@4.1.0: {} - sisteransi@1.0.5: {} slash@3.0.0: {} @@ -3890,15 +3600,6 @@ snapshots: source-map@0.6.1: {} - spawn-wrap@2.0.0: - dependencies: - foreground-child: 2.0.0 - is-windows: 1.0.2 - make-dir: 3.1.0 - rimraf: 3.0.2 - signal-exit: 3.0.7 - which: 2.0.2 - sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -3952,12 +3653,12 @@ snapshots: dependencies: typescript: 5.7.3 - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.10.10)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) + jest: 29.7.0(@types/node@22.12.0)(ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -3971,14 +3672,14 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.0) - ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3): + ts-node@10.9.2(@types/node@22.12.0)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.10.10 + '@types/node': 22.12.0 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -3989,6 +3690,8 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + tslib@2.8.1: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -3997,11 +3700,15 @@ snapshots: type-fest@0.21.3: {} - type-fest@0.8.1: {} - - typedarray-to-buffer@3.1.5: + typescript-eslint@8.22.0(eslint@9.19.0)(typescript@5.7.3): dependencies: - is-typedarray: 1.0.0 + '@typescript-eslint/eslint-plugin': 8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.22.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) + eslint: 9.19.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color typescript@5.7.3: {} @@ -4017,8 +3724,6 @@ snapshots: dependencies: punycode: 2.3.1 - uuid@8.3.2: {} - v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -4031,20 +3736,12 @@ snapshots: dependencies: makeerror: 1.0.12 - which-module@2.0.1: {} - which@2.0.2: dependencies: isexe: 2.0.0 word-wrap@1.2.5: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -4053,45 +3750,17 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@3.0.3: - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@21.1.1: {} - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@17.7.2: dependencies: cliui: 8.0.1 diff --git a/rollup.config.js b/rollup.config.js index 119c7b4..99d2850 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,18 +1,31 @@ -const resolve = require('@rollup/plugin-node-resolve') -const commonjs = require('@rollup/plugin-commonjs') -const pkg = require('./package.json') +const typescript = require('@rollup/plugin-typescript') +const dts = require('rollup-plugin-dts') module.exports = [ { - input: 'index.js', + input: 'src/index.ts', output: { + dir: "dist", name: 'httpZ', - file: pkg.browser, - format: 'umd' + format: 'umd', + globals: { + 'lodash': '_', + }, }, plugins: [ - resolve(), - commonjs() - ] + typescript(), + ], + external: [ + 'lodash', + ], + }, + { + input: 'src/index.ts', + output: { + dir: "dist", + }, + plugins: [ + dts.dts(), + ], } ] From 9cd4a040450008a212a4681322cfe1e71f168b08 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Thu, 6 Feb 2025 19:53:51 +0300 Subject: [PATCH 03/13] delete lodash from rollup config --- rollup.config.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index 99d2850..9b2e23f 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -8,16 +8,10 @@ module.exports = [ dir: "dist", name: 'httpZ', format: 'umd', - globals: { - 'lodash': '_', - }, }, plugins: [ typescript(), ], - external: [ - 'lodash', - ], }, { input: 'src/index.ts', From ff68660e2fc1e8df4a9b334e69bae0119f56eaf7 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 07:46:46 +0300 Subject: [PATCH 04/13] improve tests --- src/builders/request.ts | 1 - src/parsers/response.ts | 2 +- test/builders/base-spec.ts | 21 +++++++++++++++++---- test/builders/request-spec.ts | 2 +- test/parsers/base-spec.ts | 21 +++++++++++++++++---- test/test-utils.ts | 21 ++++++++++----------- 6 files changed, 46 insertions(+), 22 deletions(-) diff --git a/src/builders/request.ts b/src/builders/request.ts index 27bb581..7def987 100644 --- a/src/builders/request.ts +++ b/src/builders/request.ts @@ -41,7 +41,6 @@ export class HttpZRequestBuilder extends HttpZBaseBuilder { assertArray(this.headers, 'headers') if (this.opts.mandatoryHost) { - // TODO: ts-refactor name instead of h const hostHeader = this.headers.find( (h: HttpZHeader) => prettifyHeaderName(h.name) === HttpHeader.host.toString(), ) diff --git a/src/parsers/response.ts b/src/parsers/response.ts index ca4ebef..9bd7610 100644 --- a/src/parsers/response.ts +++ b/src/parsers/response.ts @@ -55,7 +55,7 @@ export class HttpZResponseParser extends HttpZBaseParser { // eslint-disable-next-line @typescript-eslint/no-unused-vars const [unused, values] = splitBy(cookiesRow, ':') if (!values) { - return {} // TODO: ts-refactor, do we really need to return empty object? + return {} } const params = values.split(';') diff --git a/test/builders/base-spec.ts b/test/builders/base-spec.ts index 78172a3..bfee457 100644 --- a/test/builders/base-spec.ts +++ b/test/builders/base-spec.ts @@ -128,10 +128,23 @@ describe('builders / base', () => { expect(builder['_generateBodyRows'].bind(builder)).toThrow(expected) } - testSpiedFn(builder['_processTransferEncodingChunked'], '_processTransferEncodingChunked', expectedFnArgs) - testSpiedFn(builder['_processTransferEncodingChunked'], '_generateFormDataBody', expectedFnArgs) - testSpiedFn(builder['_processTransferEncodingChunked'], '_generateUrlencodedBody', expectedFnArgs) - testSpiedFn(builder['_processTransferEncodingChunked'], '_generateTextBody', expectedFnArgs) + const spiedFnNames: SpiedFn[] = [ + '_processTransferEncodingChunked', + '_generateFormDataBody', + '_generateUrlencodedBody', + '_generateTextBody', + ]; + spiedFnNames.forEach(fnName => { + if (!expectedFnArgs) { + expect(builder[fnName]).toHaveBeenCalledTimes(0) + } else if (fnName === '_processTransferEncodingChunked') { + expect(builder[fnName]).toHaveBeenCalledTimes(1) + } else if (fnName === expectedFnArgs.calledFnName) { + testSpiedFn(builder[expectedFnArgs.calledFnName], expectedFnArgs.calledTimes, expectedFnArgs.calledWith) + } else { + expect(builder[fnName]).toHaveBeenCalledTimes(0) + } + }) } it('should return empty string when instance.body is null', () => { diff --git a/test/builders/request-spec.ts b/test/builders/request-spec.ts index e001b18..03885bc 100644 --- a/test/builders/request-spec.ts +++ b/test/builders/request-spec.ts @@ -128,7 +128,7 @@ describe('builders / request', () => { { name: 'Some-Header', value: 'SomeValue' }, ], }, - { mandatoryHost: false }, + { mandatoryHost: true }, ) const actual = builder['_generateHeaderRows']() expect(actual).toEqual(expected) diff --git a/test/parsers/base-spec.ts b/test/parsers/base-spec.ts index c5f9eab..2bb2056 100644 --- a/test/parsers/base-spec.ts +++ b/test/parsers/base-spec.ts @@ -123,10 +123,23 @@ describe('parsers / base', () => { parser['_parseBodyRows']() expect(parser['body']).toEqual(expected) - testSpiedFn(parser['_processTransferEncodingChunked'], '_processTransferEncodingChunked', expectedFnArgs) - testSpiedFn(parser['_parseFormDataBody'], '_parseFormDataBody', expectedFnArgs) - testSpiedFn(parser['_parseUrlencodedBody'], '_parseUrlencodedBody', expectedFnArgs) - testSpiedFn(parser['_parseTextBody'], '_parseTextBody', expectedFnArgs) + const spiedFnNames: SpiedFn[] = [ + '_processTransferEncodingChunked', + '_parseFormDataBody', + '_parseUrlencodedBody', + '_parseTextBody', + ]; + spiedFnNames.forEach(fnName => { + if (!expectedFnArgs) { + expect(parser[fnName]).toHaveBeenCalledTimes(0) + } else if (fnName === '_processTransferEncodingChunked') { + expect(parser[fnName]).toHaveBeenCalledTimes(1) + } else if (fnName === expectedFnArgs.calledFnName) { + testSpiedFn(parser[expectedFnArgs.calledFnName], expectedFnArgs.calledTimes, expectedFnArgs.calledWith) + } else { + expect(parser[fnName]).toHaveBeenCalledTimes(0) + } + }) } it('should set instance.body to undefined when bodyRows is empty', () => { diff --git a/test/test-utils.ts b/test/test-utils.ts index cb83106..a453651 100644 --- a/test/test-utils.ts +++ b/test/test-utils.ts @@ -1,21 +1,20 @@ +import { isUndefined } from "../src/utils" + export type ExpectedSpiedFnArgs = { calledFnName: TFnName calledWith?: unknown calledTimes: number } -// TODO: ts-refactor => improve -export function testSpiedFn( +export function testSpiedFn( spyFn: () => void, - spyFnName: TFnName, - expectedFnArgs: ExpectedSpiedFnArgs | undefined = undefined, + calledTimes: number, + calledWith: unknown ): void { - if (spyFnName === expectedFnArgs?.calledFnName) { - expect(spyFn).toHaveBeenCalledTimes(expectedFnArgs.calledTimes) - if ('calledWith' in expectedFnArgs) { - expect(spyFn).toHaveBeenCalledWith(expectedFnArgs.calledWith) - } else { - expect(spyFn).toHaveBeenCalledWith() - } + expect(spyFn).toHaveBeenCalledTimes(calledTimes) + if (!isUndefined(calledWith)) { + expect(spyFn).toHaveBeenCalledWith(calledWith) + } else { + expect(spyFn).toHaveBeenCalledWith() } } From 1df10de91c1e74ab500e7078efac79978b68b85a Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 09:50:21 +0300 Subject: [PATCH 05/13] build library --- .gitignore | 1 - dist/index.d.ts | 236 ++++++++++++ dist/index.js | 959 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1195 insertions(+), 1 deletion(-) create mode 100644 dist/index.d.ts create mode 100644 dist/index.js diff --git a/.gitignore b/.gitignore index 3067892..43314e6 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,6 @@ coverage # Compiled build/Release -dist # Dependency directory node_modules diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..82da27a --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,236 @@ +declare const EOL = "\r\n"; +declare const EOL2X: string; +declare const regexps: { + quote: RegExp; + startNl: RegExp; + endNl: RegExp; + requestStartRow: RegExp; + responseStartRow: RegExp; + quotedHeaderValue: RegExp; + boundary: RegExp; + contentDisposition: RegExp; + contentType: RegExp; + contentDispositionType: RegExp; + dispositionName: RegExp; + dispositionFileName: RegExp; + chunkRow: RegExp; +}; +declare enum HttpProtocol { + http = "HTTP", + https = "HTTPS" +} +declare enum HttpProtocolVersion { + http10 = "HTTP/1.0", + http11 = "HTTP/1.1", + http20 = "HTTP/2.0" +} +declare enum HttpMethod { + connect = "CONNECT", + options = "OPTIONS", + trace = "TRACE", + head = "HEAD", + get = "GET", + post = "POST", + put = "PUT", + patch = "PATCH", + delete = "DELETE" +} +declare const HttpPostMethods: HttpMethod[]; +declare enum HttpHeader { + host = "Host", + contentType = "Content-Type", + contentLength = "Content-Length", + userAgent = "User-Agent", + setCookie = "Set-Cookie", + transferEncoding = "Transfer-Encoding" +} +declare enum HttpContentTextType { + any = "text/", + css = "text/css", + csv = "text/csv", + html = "text/html", + javascript = "text/javascript", + plain = "text/plain", + xml = "text/xml" +} +declare enum HttpContentApplicationType { + any = "application/", + javascript = "application/javascript", + json = "application/json", + octetStream = "application/octet-stream", + ogg = "application/ogg", + pdf = "application/pdf", + xhtml = "application/xhtml+xml", + xml = "application/xml", + xShockwaveFlash = "application/x-shockwave-flash", + xWwwFormUrlencoded = "application/x-www-form-urlencoded", + zip = "application/zip" +} +declare enum HttpContentMultipartType { + any = "multipart/", + alternative = "multipart/alternative", + formData = "multipart/form-data", + mixed = "multipart/mixed", + related = "multipart/related" +} +declare enum HttpContentImageType { + any = "image/", + gif = "image/gif", + jpeg = "image/jpeg", + png = "image/png", + tiff = "image/tiff", + icon = "image/x-icon" +} +declare enum HttpContentAudioType { + any = "audio/" +} +declare enum HttpContentVideoType { + any = "video/" +} +declare enum HttpContentFonType { + any = "font/" +} + +declare const constants_EOL: typeof EOL; +declare const constants_EOL2X: typeof EOL2X; +type constants_HttpContentApplicationType = HttpContentApplicationType; +declare const constants_HttpContentApplicationType: typeof HttpContentApplicationType; +type constants_HttpContentAudioType = HttpContentAudioType; +declare const constants_HttpContentAudioType: typeof HttpContentAudioType; +type constants_HttpContentFonType = HttpContentFonType; +declare const constants_HttpContentFonType: typeof HttpContentFonType; +type constants_HttpContentImageType = HttpContentImageType; +declare const constants_HttpContentImageType: typeof HttpContentImageType; +type constants_HttpContentMultipartType = HttpContentMultipartType; +declare const constants_HttpContentMultipartType: typeof HttpContentMultipartType; +type constants_HttpContentTextType = HttpContentTextType; +declare const constants_HttpContentTextType: typeof HttpContentTextType; +type constants_HttpContentVideoType = HttpContentVideoType; +declare const constants_HttpContentVideoType: typeof HttpContentVideoType; +type constants_HttpHeader = HttpHeader; +declare const constants_HttpHeader: typeof HttpHeader; +type constants_HttpMethod = HttpMethod; +declare const constants_HttpMethod: typeof HttpMethod; +declare const constants_HttpPostMethods: typeof HttpPostMethods; +type constants_HttpProtocol = HttpProtocol; +declare const constants_HttpProtocol: typeof HttpProtocol; +type constants_HttpProtocolVersion = HttpProtocolVersion; +declare const constants_HttpProtocolVersion: typeof HttpProtocolVersion; +declare const constants_regexps: typeof regexps; +declare namespace constants { + export { constants_EOL as EOL, constants_EOL2X as EOL2X, constants_HttpContentApplicationType as HttpContentApplicationType, constants_HttpContentAudioType as HttpContentAudioType, constants_HttpContentFonType as HttpContentFonType, constants_HttpContentImageType as HttpContentImageType, constants_HttpContentMultipartType as HttpContentMultipartType, constants_HttpContentTextType as HttpContentTextType, constants_HttpContentVideoType as HttpContentVideoType, constants_HttpHeader as HttpHeader, constants_HttpMethod as HttpMethod, constants_HttpPostMethods as HttpPostMethods, constants_HttpProtocol as HttpProtocol, constants_HttpProtocolVersion as HttpProtocolVersion, constants_regexps as regexps }; +} + +type HttpZHeader = { + name: string; + value: string; +}; +type HttpZParam = { + name: string; + value?: string; +}; +type HttpZBody = { + text?: string; + params?: HttpZBodyParam[]; + contentType?: string; + boundary?: string; +}; +type HttpZBodyParam = { + name?: string; + value?: string; + type?: string; + fileName?: string; + contentType?: string; +}; + +type HttpZBuilderOptions = { + mandatoryHost?: boolean; +}; +type HttpZBuilderModel = { + headers: HttpZHeader[]; + body?: HttpZBody; +}; + +declare function export_default$1(messageModel: HttpZBuilderModel, opts?: HttpZBuilderOptions): string | never; + +declare class HttpZError extends Error { + static get(...params: ConstructorParameters): HttpZError; + details: string | undefined; + constructor(message: string, details?: string); +} + +type HttpZParserOptions = { + mandatoryHost?: boolean; +}; +type HttpZParserModel = { + headers: HttpZHeader[]; + body?: HttpZBody; + headersSize?: number; + bodySize?: number; +}; + +declare function export_default(rawMessage: string, opts?: HttpZParserOptions): HttpZParserModel | never; + +type ParsedUrl = { + protocol: string; + host: string; + path: string; + params: HttpZParam[]; +}; +declare const getLibVersion: () => string; +declare const splitBy: (str: string, delimiter: string) => string[]; +declare const isAbsoluteUrl: (url: string) => boolean; +declare const parseUrl: (url: string, host: string) => ParsedUrl; +declare const arrayToPairs: (params: HttpZParam[]) => string[][]; +declare const prettifyHeaderName: (name: string | null | undefined) => string; +declare const getEmptyStringForUndefined: (value: string | null | undefined) => string; +declare const extendIfNotUndefined: (obj: object, fieldName: string, fieldValue: string | undefined) => void; +declare const isUndefined: (value: unknown) => boolean; +declare const isNil: (value: unknown) => boolean; +declare const isEmpty: (value: unknown) => boolean; +declare const isString: (value: unknown) => boolean; +declare const isNumber: (value: unknown) => boolean; +declare const isArray: (value: unknown) => boolean; +declare const isError: (value: unknown) => boolean; +declare const isPlainObject: (value: unknown) => boolean; +declare const capitalize: (value: string) => string; +declare const head: (value: T[]) => T; +declare const tail: (value: T[]) => T[]; +declare const trim: (value: string, chars?: string | undefined) => string; +declare const trimEnd: (value: string, chars?: string | undefined) => string; + +type utils_ParsedUrl = ParsedUrl; +declare const utils_arrayToPairs: typeof arrayToPairs; +declare const utils_capitalize: typeof capitalize; +declare const utils_extendIfNotUndefined: typeof extendIfNotUndefined; +declare const utils_getEmptyStringForUndefined: typeof getEmptyStringForUndefined; +declare const utils_getLibVersion: typeof getLibVersion; +declare const utils_head: typeof head; +declare const utils_isAbsoluteUrl: typeof isAbsoluteUrl; +declare const utils_isArray: typeof isArray; +declare const utils_isEmpty: typeof isEmpty; +declare const utils_isError: typeof isError; +declare const utils_isNil: typeof isNil; +declare const utils_isNumber: typeof isNumber; +declare const utils_isPlainObject: typeof isPlainObject; +declare const utils_isString: typeof isString; +declare const utils_isUndefined: typeof isUndefined; +declare const utils_parseUrl: typeof parseUrl; +declare const utils_prettifyHeaderName: typeof prettifyHeaderName; +declare const utils_splitBy: typeof splitBy; +declare const utils_tail: typeof tail; +declare const utils_trim: typeof trim; +declare const utils_trimEnd: typeof trimEnd; +declare namespace utils { + export { type utils_ParsedUrl as ParsedUrl, utils_arrayToPairs as arrayToPairs, utils_capitalize as capitalize, utils_extendIfNotUndefined as extendIfNotUndefined, utils_getEmptyStringForUndefined as getEmptyStringForUndefined, utils_getLibVersion as getLibVersion, utils_head as head, utils_isAbsoluteUrl as isAbsoluteUrl, utils_isArray as isArray, utils_isEmpty as isEmpty, utils_isError as isError, utils_isNil as isNil, utils_isNumber as isNumber, utils_isPlainObject as isPlainObject, utils_isString as isString, utils_isUndefined as isUndefined, utils_parseUrl as parseUrl, utils_prettifyHeaderName as prettifyHeaderName, utils_splitBy as splitBy, utils_tail as tail, utils_trim as trim, utils_trimEnd as trimEnd }; +} + +declare const _default: { + consts: typeof constants; + HttpZError: typeof HttpZError; + utils: typeof utils; + parse: typeof export_default; + build: typeof export_default$1; +}; + +export { _default as default }; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..62392f9 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,959 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.httpZ = factory()); +})(this, (function () { 'use strict'; + + class HttpZError extends Error { + static get(...params) { + return new HttpZError(...params); + } + details; + constructor(message, details) { + super(message); + this.name = this.constructor.name; + this.details = details; + Error.captureStackTrace(this, this.constructor); + } + } + + const getLibVersion = () => { + return '8.0.0-dev'; + }; + const splitBy = (str, delimiter) => { + if (isEmpty(str)) { + return []; + } + const delimiterIndex = str.indexOf(delimiter); + if (delimiterIndex === -1) { + return []; + } + const result = [str.slice(0, delimiterIndex), str.slice(delimiterIndex + delimiter.length)]; + result[0] = result[0].trim(); + result[1] = result[1].trim(); + return result; + }; + const isAbsoluteUrl = (url) => { + if (/^[a-zA-Z]:\\/.test(url)) { + return false; + } + return /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url); + }; + const parseUrl = (url, host) => { + const supportedProtocols = ['http', 'https']; + if (!supportedProtocols.some(known => host.startsWith(known + '://'))) { + host = 'http://' + host; + } + const parsedUrl = url ? new URL(url, host) : new URL(host); + const protocol = parsedUrl.protocol.replace(':', '').toUpperCase(); + const params = []; + parsedUrl.searchParams.forEach((value, name) => params.push({ name, value })); + return { + protocol, + host: parsedUrl.host, + path: parsedUrl.pathname, + params, + }; + }; + const arrayToPairs = (params) => { + return params.map(({ name, value }) => [name, getEmptyStringForUndefined(value)]); + }; + const prettifyHeaderName = (name) => { + return (name ?? '').toString().split('-').map(capitalize).join('-'); + }; + const getEmptyStringForUndefined = (value) => { + if (isUndefined(value)) { + return ''; + } + return value; + }; + const extendIfNotUndefined = (obj, fieldName, fieldValue) => { + if (!isUndefined(fieldValue)) { + obj[fieldName] = fieldValue; + } + }; + const isUndefined = (value) => { + return value === undefined; + }; + const isNil = (value) => { + return value == null; + }; + const isEmpty = (value) => { + if (isNil(value)) { + return true; + } + if (value.length || value.size) { + return false; + } + if (typeof value !== 'object') { + return true; + } + for (const key in value) { + if (Object.hasOwn(value, key)) { + return false; + } + } + return true; + }; + const isString = (value) => { + return typeof value === 'string'; + }; + const isNumber = (value) => { + return typeof value === 'number'; + }; + const isArray = (value) => { + return Array.isArray(value); + }; + const isError = (value) => { + return value instanceof Error; + }; + const isPlainObject = (value) => { + if (typeof value !== 'object' || value === null) { + return false; + } + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false; + } + const proto = Object.getPrototypeOf(value); + if (proto === null) { + return true; + } + const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return (typeof Ctor === 'function' && + Ctor instanceof Ctor && + Function.prototype.call(Ctor) === Function.prototype.call(value)); + }; + const capitalize = (value) => { + return value ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase() : ''; + }; + const head = (value) => { + const [_head, ..._tail] = value; + return _head; + }; + const tail = (value) => { + const [_head, ..._tail] = value; + return _tail; + }; + const trim = (value, chars = undefined) => { + if (isNil(value)) { + return value; + } + value = value.toString(); + if (chars === undefined || chars === '\\s') { + return value.trim(); + } + return value.replace(new RegExp(`^([${chars}]*)(.*?)([${chars}]*)$`), '$2'); + }; + const trimEnd = (value, chars = undefined) => { + if (isNil(value)) { + return value; + } + value = value.toString(); + if (chars === undefined || chars === '\\s') { + return value.trimEnd(); + } + return value.replace(new RegExp(`^(.*?)([${chars}]*)$`), '$1'); + }; + + var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + arrayToPairs: arrayToPairs, + capitalize: capitalize, + extendIfNotUndefined: extendIfNotUndefined, + getEmptyStringForUndefined: getEmptyStringForUndefined, + getLibVersion: getLibVersion, + head: head, + isAbsoluteUrl: isAbsoluteUrl, + isArray: isArray, + isEmpty: isEmpty, + isError: isError, + isNil: isNil, + isNumber: isNumber, + isPlainObject: isPlainObject, + isString: isString, + isUndefined: isUndefined, + parseUrl: parseUrl, + prettifyHeaderName: prettifyHeaderName, + splitBy: splitBy, + tail: tail, + trim: trim, + trimEnd: trimEnd + }); + + const assertRequired = (val, field, details) => { + if (isNil(val)) { + throw HttpZError.get(`${field} is required`, details); + } + }; + const assertString = (val, field, details) => { + assertRequired(val, field, details); + if (!isString(val)) { + throw HttpZError.get(`${field} must be a string`, details); + } + }; + const assertNotEmptyString = (val, field, details) => { + assertString(val, field, details); + if (isEmpty(val)) { + throw HttpZError.get(`${field} must be not empty string`, details); + } + }; + const assertNumber = (val, field, details) => { + assertRequired(val, field, details); + if (!isNumber(val)) { + throw HttpZError.get(`${field} must be a number`, details); + } + }; + const assertPositiveNumber = (val, field, details) => { + assertNumber(val, field, details); + if (val <= 0) { + throw HttpZError.get(`${field} must be a positive number`, details); + } + }; + const assertArray = (val, field, details) => { + assertRequired(val, field, details); + if (!isArray(val)) { + throw HttpZError.get(`${field} must be an array`, details); + } + }; + + const EOL = '\r\n'; + const EOL2X = EOL + EOL; + const BASIC_LATIN = '[\\u0009\\u0020-\\u007E]'; + const PARAM_NAME = '[A-Za-z0-9_.\\[\\]-]'; + const HTTP_METHODS = '(CONNECT|OPTIONS|TRACE|GET|HEAD|POST|PUT|PATCH|DELETE)'; + const HTTP_PROTOCOL_VERSIONS = '(HTTP)\\/(1\\.0|1\\.1|2(\\.0){0,1})'; + const regexps = { + quote: /"/g, + startNl: new RegExp(`^${EOL}`), + endNl: new RegExp(`${EOL}$`), + requestStartRow: new RegExp(`^${HTTP_METHODS} \\S* ${HTTP_PROTOCOL_VERSIONS}$`), + responseStartRow: new RegExp(`^${HTTP_PROTOCOL_VERSIONS} \\d{3} ${BASIC_LATIN}*$`), + quotedHeaderValue: new RegExp('^"[\\u0009\\u0020\\u0021\\u0023-\\u007E]+"$'), + boundary: /(?<=boundary=)"{0,1}[A-Za-z0-9'()+_,.:=?-]+"{0,1}/, + contentDisposition: new RegExp(`^Content-Disposition: *(form-data|inline|attachment)${BASIC_LATIN}*${EOL}`, 'i'), + contentType: new RegExp(`^Content-Type:[\\S ]*${EOL}`, 'i'), + contentDispositionType: /(?<=Content-Disposition:) *(form-data|inline|attachment)/, + dispositionName: new RegExp(`(?<=name=)"${PARAM_NAME}+"`, 'i'), + dispositionFileName: new RegExp(`(?<=filename=)"${PARAM_NAME}+"`, 'i'), + chunkRow: new RegExp(`^[0-9a-fA-F]+${EOL}`), + }; + var HttpProtocol; + (function (HttpProtocol) { + HttpProtocol["http"] = "HTTP"; + HttpProtocol["https"] = "HTTPS"; + })(HttpProtocol || (HttpProtocol = {})); + var HttpProtocolVersion; + (function (HttpProtocolVersion) { + HttpProtocolVersion["http10"] = "HTTP/1.0"; + HttpProtocolVersion["http11"] = "HTTP/1.1"; + HttpProtocolVersion["http20"] = "HTTP/2.0"; + })(HttpProtocolVersion || (HttpProtocolVersion = {})); + var HttpMethod; + (function (HttpMethod) { + HttpMethod["connect"] = "CONNECT"; + HttpMethod["options"] = "OPTIONS"; + HttpMethod["trace"] = "TRACE"; + HttpMethod["head"] = "HEAD"; + HttpMethod["get"] = "GET"; + HttpMethod["post"] = "POST"; + HttpMethod["put"] = "PUT"; + HttpMethod["patch"] = "PATCH"; + HttpMethod["delete"] = "DELETE"; + })(HttpMethod || (HttpMethod = {})); + const HttpPostMethods = [HttpMethod.post, HttpMethod.put, HttpMethod.patch]; + var HttpHeader; + (function (HttpHeader) { + HttpHeader["host"] = "Host"; + HttpHeader["contentType"] = "Content-Type"; + HttpHeader["contentLength"] = "Content-Length"; + HttpHeader["userAgent"] = "User-Agent"; + HttpHeader["setCookie"] = "Set-Cookie"; + HttpHeader["transferEncoding"] = "Transfer-Encoding"; + })(HttpHeader || (HttpHeader = {})); + var HttpContentTextType; + (function (HttpContentTextType) { + HttpContentTextType["any"] = "text/"; + HttpContentTextType["css"] = "text/css"; + HttpContentTextType["csv"] = "text/csv"; + HttpContentTextType["html"] = "text/html"; + HttpContentTextType["javascript"] = "text/javascript"; + HttpContentTextType["plain"] = "text/plain"; + HttpContentTextType["xml"] = "text/xml"; + })(HttpContentTextType || (HttpContentTextType = {})); + var HttpContentApplicationType; + (function (HttpContentApplicationType) { + HttpContentApplicationType["any"] = "application/"; + HttpContentApplicationType["javascript"] = "application/javascript"; + HttpContentApplicationType["json"] = "application/json"; + HttpContentApplicationType["octetStream"] = "application/octet-stream"; + HttpContentApplicationType["ogg"] = "application/ogg"; + HttpContentApplicationType["pdf"] = "application/pdf"; + HttpContentApplicationType["xhtml"] = "application/xhtml+xml"; + HttpContentApplicationType["xml"] = "application/xml"; + HttpContentApplicationType["xShockwaveFlash"] = "application/x-shockwave-flash"; + HttpContentApplicationType["xWwwFormUrlencoded"] = "application/x-www-form-urlencoded"; + HttpContentApplicationType["zip"] = "application/zip"; + })(HttpContentApplicationType || (HttpContentApplicationType = {})); + var HttpContentMultipartType; + (function (HttpContentMultipartType) { + HttpContentMultipartType["any"] = "multipart/"; + HttpContentMultipartType["alternative"] = "multipart/alternative"; + HttpContentMultipartType["formData"] = "multipart/form-data"; + HttpContentMultipartType["mixed"] = "multipart/mixed"; + HttpContentMultipartType["related"] = "multipart/related"; + })(HttpContentMultipartType || (HttpContentMultipartType = {})); + var HttpContentImageType; + (function (HttpContentImageType) { + HttpContentImageType["any"] = "image/"; + HttpContentImageType["gif"] = "image/gif"; + HttpContentImageType["jpeg"] = "image/jpeg"; + HttpContentImageType["png"] = "image/png"; + HttpContentImageType["tiff"] = "image/tiff"; + HttpContentImageType["icon"] = "image/x-icon"; + })(HttpContentImageType || (HttpContentImageType = {})); + var HttpContentAudioType; + (function (HttpContentAudioType) { + HttpContentAudioType["any"] = "audio/"; + })(HttpContentAudioType || (HttpContentAudioType = {})); + var HttpContentVideoType; + (function (HttpContentVideoType) { + HttpContentVideoType["any"] = "video/"; + })(HttpContentVideoType || (HttpContentVideoType = {})); + var HttpContentFonType; + (function (HttpContentFonType) { + HttpContentFonType["any"] = "font/"; + })(HttpContentFonType || (HttpContentFonType = {})); + + var constants = /*#__PURE__*/Object.freeze({ + __proto__: null, + EOL: EOL, + EOL2X: EOL2X, + get HttpContentApplicationType () { return HttpContentApplicationType; }, + get HttpContentAudioType () { return HttpContentAudioType; }, + get HttpContentFonType () { return HttpContentFonType; }, + get HttpContentImageType () { return HttpContentImageType; }, + get HttpContentMultipartType () { return HttpContentMultipartType; }, + get HttpContentTextType () { return HttpContentTextType; }, + get HttpContentVideoType () { return HttpContentVideoType; }, + get HttpHeader () { return HttpHeader; }, + get HttpMethod () { return HttpMethod; }, + HttpPostMethods: HttpPostMethods, + get HttpProtocol () { return HttpProtocol; }, + get HttpProtocolVersion () { return HttpProtocolVersion; }, + regexps: regexps + }); + + class HttpZBaseBuilder { + headers; + body; + constructor(headers, body) { + this.headers = headers; + this.body = body; + } + _generateHeaderRows() { + assertArray(this.headers, 'headers'); + if (isEmpty(this.headers)) { + return ''; + } + const headerRowsStr = this.headers + .map((header, index) => { + assertNotEmptyString(header.name, 'header name', `header index: ${index}`); + assertString(header.value, 'header.value', `header index: ${index}`); + const headerName = prettifyHeaderName(header.name); + const headerValue = header.value; + return headerName + ': ' + headerValue; + }) + .join(EOL); + return headerRowsStr + EOL; + } + _generateBodyRows() { + if (isEmpty(this.body)) { + return ''; + } + this._processTransferEncodingChunked(); + switch (this.body.contentType) { + case HttpContentMultipartType.formData: + case HttpContentMultipartType.alternative: + case HttpContentMultipartType.mixed: + case HttpContentMultipartType.related: + return this._generateFormDataBody(); + case HttpContentApplicationType.xWwwFormUrlencoded: + return this._generateUrlencodedBody(); + default: + return this._generateTextBody(); + } + } + _processTransferEncodingChunked() { + const isChunked = this.headers.find(h => h.name === HttpHeader.transferEncoding.toString() && h.value.includes('chunked')); + if (!isChunked) { + return; + } + const body = getEmptyStringForUndefined(this.body.text); + const defChunkLength = 25; + const buffer = []; + let index = 0; + while (index < body.length) { + const chunk = body.slice(index, index + defChunkLength); + buffer.push(chunk.length.toString(16).toUpperCase()); + buffer.push(chunk); + index += defChunkLength; + } + this.body.text = buffer.join(EOL); + } + _generateFormDataBody() { + assertArray(this.body.params, 'body.params'); + assertNotEmptyString(this.body.boundary, 'body.boundary'); + if (isEmpty(this.body.params)) { + return ''; + } + const paramsStr = this.body.params + .map((param, index) => { + if (!param.type) { + assertNotEmptyString(param.name, 'body.params[index].name', `param index: ${index}`); + } + let paramGroupStr = '--' + this.body.boundary; + paramGroupStr += EOL; + paramGroupStr += `Content-Disposition: ${param.type || 'form-data'}`; + if (param.name) { + paramGroupStr += `; name="${param.name}"`; + } + if (param.fileName) { + paramGroupStr += `; filename="${param.fileName}"`; + } + paramGroupStr += EOL; + if (param.contentType) { + paramGroupStr += `Content-Type: ${param.contentType}`; + paramGroupStr += EOL; + } + paramGroupStr += EOL; + paramGroupStr += getEmptyStringForUndefined(param.value); + paramGroupStr += EOL; + return paramGroupStr; + }) + .join(''); + return `${paramsStr}--${this.body.boundary}--`; + } + _generateUrlencodedBody() { + assertArray(this.body.params, 'body.params'); + const paramPairs = arrayToPairs(this.body.params); + return new URLSearchParams(paramPairs).toString(); + } + _generateTextBody() { + return getEmptyStringForUndefined(this.body.text); + } + } + + class HttpZRequestBuilder extends HttpZBaseBuilder { + static build(...params) { + const instance = new HttpZRequestBuilder(...params); + return instance.build(); + } + method; + protocolVersion; + target; + opts; + constructor(message, opts) { + super(message.headers, message.body); + this.method = message.method; + this.protocolVersion = message.protocolVersion; + this.target = message.target; + this.opts = opts; + } + build() { + return '' + this._generateStartRow() + this._generateHeaderRows() + EOL + this._generateBodyRows(); + } + _generateStartRow() { + assertNotEmptyString(this.method, 'method'); + assertNotEmptyString(this.protocolVersion, 'protocolVersion'); + assertNotEmptyString(this.target, 'target'); + return '' + this.method.toUpperCase() + ' ' + this.target + ' ' + this.protocolVersion.toUpperCase() + EOL; + } + _generateHeaderRows() { + assertArray(this.headers, 'headers'); + if (this.opts.mandatoryHost) { + const hostHeader = this.headers.find((h) => prettifyHeaderName(h.name) === HttpHeader.host.toString()); + if (!hostHeader) { + throw HttpZError.get('Host header is required'); + } + } + return super._generateHeaderRows(); + } + } + + class HttpZResponseBuilder extends HttpZBaseBuilder { + static build(...params) { + const instance = new HttpZResponseBuilder(...params); + return instance.build(); + } + protocolVersion; + statusCode; + statusMessage; + constructor(message) { + super(message.headers, message.body); + this.protocolVersion = message.protocolVersion; + this.statusCode = message.statusCode; + this.statusMessage = message.statusMessage; + } + build() { + return '' + this._generateStartRow() + this._generateHeaderRows() + EOL + this._generateBodyRows(); + } + _generateStartRow() { + assertNotEmptyString(this.protocolVersion, 'protocolVersion'); + assertPositiveNumber(this.statusCode, 'statusCode'); + assertNotEmptyString(this.statusMessage, 'statusMessage'); + const protocolVersion = this.protocolVersion.toUpperCase(); + return `${protocolVersion} ${this.statusCode} ${this.statusMessage}` + EOL; + } + } + + function build (messageModel, opts = {}) { + if (isNil(messageModel)) { + throw HttpZError.get('messageModel is required'); + } + if (!isPlainObject(messageModel)) { + throw HttpZError.get('messageModel must be a plain object'); + } + if ('method' in messageModel) { + return HttpZRequestBuilder.build(messageModel, opts); + } + if ('statusCode' in messageModel) { + return HttpZResponseBuilder.build(messageModel); + } + throw HttpZError.get('messageModel has incorrect format'); + } + + class FormDataParamParser { + paramGroup; + static parse(...params) { + const instance = new FormDataParamParser(...params); + return instance.parse(); + } + constructor(paramGroup) { + this.paramGroup = paramGroup; + } + parse() { + this.paramGroup = this.paramGroup.replace(regexps.startNl, '').replace(regexps.endNl, ''); + const contentDispositionHeader = this._getContentDisposition(); + const contentType = this._getContentType(); + const dispositionType = this._getDispositionType(contentDispositionHeader); + const name = dispositionType === 'form-data' ? this._getParamName(contentDispositionHeader) : undefined; + const fileName = this._getFileName(contentDispositionHeader); + const value = this._getParamValue(); + const param = { + value, + }; + if (dispositionType !== 'form-data') { + param.type = dispositionType; + } + extendIfNotUndefined(param, 'contentType', contentType); + extendIfNotUndefined(param, 'name', name); + extendIfNotUndefined(param, 'fileName', fileName); + return param; + } + _getContentDisposition() { + const contentDisposition = this.paramGroup.match(regexps.contentDisposition); + if (contentDisposition) { + this.paramGroup = this.paramGroup.replace(contentDisposition[0], ''); + return trimEnd(contentDisposition[0], EOL); + } + throw HttpZError.get('Incorrect Content-Disposition', this.paramGroup); + } + _getContentType() { + const contentType = this.paramGroup.match(regexps.contentType); + if (contentType) { + this.paramGroup = this.paramGroup.replace(contentType[0], ''); + return trimEnd(contentType + .toString() + .toLowerCase() + .replace(/^content-type: */, ''), EOL); + } + } + _getDispositionType(contentDisposition) { + const dispositionType = contentDisposition.match(regexps.contentDispositionType); + if (dispositionType) { + return dispositionType[0].trim().toLowerCase(); + } + throw HttpZError.get('Incorrect Content-Disposition type', contentDisposition); + } + _getParamName(contentDisposition) { + const paramName = contentDisposition.match(regexps.dispositionName); + if (paramName) { + return trim(paramName[0], '"'); + } + throw HttpZError.get('Incorrect Content-Disposition, expected param name', contentDisposition); + } + _getFileName(contentDisposition) { + const fileName = contentDisposition.match(regexps.dispositionFileName); + if (fileName) { + return trim(fileName[0], '"'); + } + } + _getParamValue() { + if (this.paramGroup.match(regexps.startNl)) { + return this.paramGroup.replace(regexps.startNl, ''); + } + throw HttpZError.get('Incorrect form-data parameter', this.paramGroup); + } + } + + class HttpZBaseParser { + rawMessage; + startRow; + headerRows; + bodyRows; + headers; + headersSize; + body; + bodySize; + constructor(rawMessage) { + this.rawMessage = rawMessage; + } + _parseMessageForRows() { + const [headers, body] = splitBy(this.rawMessage, EOL2X); + if (isNil(headers) || isNil(body)) { + throw HttpZError.get('Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]'); + } + this._calcSizes(headers, body); + const headerRows = headers.split(EOL); + this.startRow = head(headerRows); + this.headerRows = tail(headerRows); + this.bodyRows = body; + } + _parseHeaderRows() { + this.headers = this.headerRows.map(hRow => { + let [name, value] = splitBy(hRow, ':'); + if (!name) { + throw HttpZError.get('Incorrect header row format, expected: Name: Value', hRow); + } + if (isNil(value)) { + value = ''; + } + else if (regexps.quotedHeaderValue.test(value)) { + value = trim(value, '"'); + } + return { + name: prettifyHeaderName(name), + value, + }; + }); + } + _parseBodyRows() { + if (!this.bodyRows) { + return; + } + this._processTransferEncodingChunked(); + this.body = {}; + const contentTypeHeader = this._getContentTypeValue(); + if (contentTypeHeader) { + this.body.contentType = contentTypeHeader.toLowerCase().split(';')[0]; + } + switch (this.body.contentType) { + case HttpContentMultipartType.formData: + case HttpContentMultipartType.alternative: + case HttpContentMultipartType.mixed: + case HttpContentMultipartType.related: + this._parseFormDataBody(); + break; + case HttpContentApplicationType.xWwwFormUrlencoded: + this._parseUrlencodedBody(); + break; + default: + this._parseTextBody(); + break; + } + } + _processTransferEncodingChunked() { + const isChunked = this.headers.find(h => h.name === HttpHeader.transferEncoding.toString() && h.value.includes('chunked')); + if (!isChunked) { + return; + } + let text = this.bodyRows; + const buffer = []; + do { + const rows = text.match(regexps.chunkRow); + const firstRow = rows ? rows[0] : ''; + const chunkLength = +('0x' + firstRow || '').trim(); + if (!chunkLength) { + throw HttpZError.get('Incorrect row, expected: NumberEOL', this.bodyRows); + } + text = text.slice(firstRow.length); + const chunk = text.slice(0, chunkLength); + buffer.push(chunk); + text = text.slice(chunkLength + EOL.length); + } while (text); + this.bodyRows = buffer.join(''); + } + _parseFormDataBody() { + this.body.boundary = this._getBoundary(); + this.body.params = this.bodyRows + .split(`--${this.body.boundary}`) + .filter((unused, index, params) => index > 0 && index < params.length - 1) + .map(paramGroup => FormDataParamParser.parse(paramGroup)); + } + _parseUrlencodedBody() { + const params = new URLSearchParams(this.bodyRows); + this.body.params = []; + params.forEach((value, name) => { + this.body.params.push({ name, value }); + }); + } + _parseTextBody() { + this.body.text = this.bodyRows; + } + _calcSizes(headers, body) { + this.headersSize = (headers + EOL2X).length; + this.bodySize = body.length; + } + _getContentTypeValue() { + const contentTypeHeader = this.headers.find(h => h.name === HttpHeader.contentType.toString()); + if (!contentTypeHeader) { + return; + } + if (!contentTypeHeader.value) { + return; + } + return contentTypeHeader.value; + } + _getBoundary() { + const contentTypeValue = this._getContentTypeValue(); + if (!contentTypeValue) { + throw HttpZError.get('Message with multipart/form-data body must have Content-Type header with boundary'); + } + const params = contentTypeValue.split(';')[1]; + if (!params) { + throw HttpZError.get('Message with multipart/form-data body must have Content-Type header with boundary'); + } + const boundary = params.match(regexps.boundary); + if (!boundary) { + throw HttpZError.get('Incorrect boundary, expected: boundary=value', params); + } + return trim(boundary[0], '"'); + } + } + + const SUPER_RANDOM_HOST = 'superrandomhost28476561927456.com'; + class HttpZRequestParser extends HttpZBaseParser { + opts; + static parse(...params) { + const instance = new HttpZRequestParser(...params); + return instance.parse(); + } + method; + target; + host; + path; + protocolVersion; + hostRow; + cookiesRow; + queryParams; + cookies; + constructor(rawMessage, opts) { + super(rawMessage); + this.opts = opts; + } + parse() { + this._parseMessageForRows(); + this._parseHostRow(); + this._parseStartRow(); + this._parseHeaderRows(); + this._parseCookieRows(); + this._parseBodyRows(); + return this._generateModel(); + } + _parseMessageForRows() { + super._parseMessageForRows(); + this.hostRow = this.headerRows.find(row => row.toLowerCase().startsWith('host:')); + this.cookiesRow = this.headerRows.find(row => row.toLowerCase().startsWith('cookie:')); + } + _parseHostRow() { + if (this.opts.mandatoryHost) { + assertNotEmptyString(this.hostRow, 'host header'); + } + const [unused, value] = splitBy(this.hostRow || '', ':'); + if (this.opts.mandatoryHost) { + assertNotEmptyString(value, 'host header value'); + } + this.host = value; + } + _parseStartRow() { + if (!regexps.requestStartRow.test(this.startRow)) { + throw HttpZError.get('Incorrect startRow format, expected: Method request-target HTTP-Version', this.startRow); + } + const rowParts = this.startRow.split(' '); + this.method = rowParts[0].toUpperCase(); + this.protocolVersion = rowParts[2].toUpperCase(); + this.target = rowParts[1]; + let parsedUrl; + try { + parsedUrl = parseUrl(this.target, SUPER_RANDOM_HOST); + } + catch (err) { + if (err.code === 'ERR_INVALID_URL') { + throw HttpZError.get('Invalid target', this.target); + } + throw err; + } + if (!this.host) { + this.host = parsedUrl.host !== SUPER_RANDOM_HOST ? parsedUrl.host : 'unspecified-host'; + } + this.path = parsedUrl.path; + this.queryParams = parsedUrl.params; + } + _parseCookieRows() { + if (!this.cookiesRow) { + return; + } + const [cookieHeaderName, values] = splitBy(this.cookiesRow, ':'); + if (!cookieHeaderName) { + throw HttpZError.get('Incorrect cookie row format, expected: Cookie: Name1=Value1;...', this.cookiesRow); + } + if (!values) { + this.cookies = []; + return; + } + this.cookies = values.split(';').map(pair => { + const [name, value] = splitBy(pair, '='); + const cookie = { + name, + }; + if (value) { + cookie.value = value; + } + if (!cookie.name) { + throw HttpZError.get('Incorrect cookie pair format, expected: Name1=Value1;...', values); + } + return cookie; + }); + } + _generateModel() { + const model = { + method: this.method, + protocolVersion: this.protocolVersion, + target: this.target, + host: this.host, + path: this.path, + headers: this.headers, + headersSize: this.headersSize, + bodySize: this.bodySize, + }; + if (this.queryParams) { + model.queryParams = this.queryParams; + } + if (this.cookies) { + model.cookies = this.cookies; + } + if (this.body) { + model.body = this.body; + } + return model; + } + } + + class HttpZResponseParser extends HttpZBaseParser { + static parse(...params) { + const instance = new HttpZResponseParser(...params); + return instance.parse(); + } + protocolVersion; + statusCode; + statusMessage; + cookieRows; + cookies; + parse() { + this._parseMessageForRows(); + this._parseStartRow(); + this._parseHeaderRows(); + this._parseCookieRows(); + this._parseBodyRows(); + return this._generateModel(); + } + _parseMessageForRows() { + super._parseMessageForRows(); + this.cookieRows = this.headerRows.filter(row => row.toLowerCase().startsWith('set-cookie')); + } + _parseStartRow() { + if (!regexps.responseStartRow.test(this.startRow)) { + throw HttpZError.get('Incorrect startRow format, expected: HTTP-Version status-code reason-phrase', this.startRow); + } + const rowParts = this.startRow.split(' '); + this.protocolVersion = rowParts[0].toUpperCase(); + this.statusCode = +rowParts[1]; + this.statusMessage = rowParts.splice(2).join(' '); + } + _parseCookieRows() { + if (isEmpty(this.cookieRows)) { + return; + } + this.cookies = this.cookieRows.map(cookiesRow => { + const [unused, values] = splitBy(cookiesRow, ':'); + if (!values) { + return {}; + } + const params = values.split(';'); + const paramWithName = head(params); + const otherParams = tail(params); + let [name, value] = paramWithName.split('='); + name = name.trim(); + value = value.trim(); + if (!name) { + throw HttpZError.get('Incorrect set-cookie pair format, expected: Name1=Value1;...', values); + } + const cookie = { + name, + }; + if (value) { + cookie.value = value; + } + if (otherParams.length > 0) { + cookie.params = otherParams.map(param => param.trim()); + } + return cookie; + }); + } + _generateModel() { + const model = { + protocolVersion: this.protocolVersion, + statusCode: this.statusCode, + statusMessage: this.statusMessage, + headers: this.headers, + headersSize: this.headersSize, + bodySize: this.bodySize, + }; + if (this.cookies) { + model.cookies = this.cookies; + } + if (this.body) { + model.body = this.body; + } + return model; + } + } + + function parse (rawMessage, opts = {}) { + if (isNil(rawMessage)) { + throw HttpZError.get('rawMessage is required'); + } + if (!isString(rawMessage)) { + throw HttpZError.get('rawMessage must be a string'); + } + const firstRow = head(rawMessage.split(EOL)); + if (regexps.requestStartRow.test(firstRow)) { + return HttpZRequestParser.parse(rawMessage, opts); + } + if (regexps.responseStartRow.test(firstRow)) { + return HttpZResponseParser.parse(rawMessage); + } + throw HttpZError.get('rawMessage has incorrect format'); + } + + var index = { + consts: constants, + HttpZError, + utils, + parse, + build, + }; + + return index; + +})); From e32a1e9ecf6fee45a40c179e48bab5c6107d8fc2 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 10:14:16 +0300 Subject: [PATCH 06/13] change exports --- dist/index.d.ts | 14 +++----------- dist/index.js | 26 +++++++++++--------------- src/builders/index.ts | 2 +- src/index.ts | 18 +++++------------- src/parsers/index.ts | 2 +- test/builders/builders-spec.ts | 20 ++++++++++---------- test/httpz-spec.ts | 6 +++--- test/parsers/parsers-spec.ts | 20 ++++++++++---------- 8 files changed, 44 insertions(+), 64 deletions(-) diff --git a/dist/index.d.ts b/dist/index.d.ts index 82da27a..bfa4f9f 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -151,7 +151,7 @@ type HttpZBuilderModel = { body?: HttpZBody; }; -declare function export_default$1(messageModel: HttpZBuilderModel, opts?: HttpZBuilderOptions): string | never; +declare function build(messageModel: HttpZBuilderModel, opts?: HttpZBuilderOptions): string | never; declare class HttpZError extends Error { static get(...params: ConstructorParameters): HttpZError; @@ -169,7 +169,7 @@ type HttpZParserModel = { bodySize?: number; }; -declare function export_default(rawMessage: string, opts?: HttpZParserOptions): HttpZParserModel | never; +declare function parse(rawMessage: string, opts?: HttpZParserOptions): HttpZParserModel | never; type ParsedUrl = { protocol: string; @@ -225,12 +225,4 @@ declare namespace utils { export { type utils_ParsedUrl as ParsedUrl, utils_arrayToPairs as arrayToPairs, utils_capitalize as capitalize, utils_extendIfNotUndefined as extendIfNotUndefined, utils_getEmptyStringForUndefined as getEmptyStringForUndefined, utils_getLibVersion as getLibVersion, utils_head as head, utils_isAbsoluteUrl as isAbsoluteUrl, utils_isArray as isArray, utils_isEmpty as isEmpty, utils_isError as isError, utils_isNil as isNil, utils_isNumber as isNumber, utils_isPlainObject as isPlainObject, utils_isString as isString, utils_isUndefined as isUndefined, utils_parseUrl as parseUrl, utils_prettifyHeaderName as prettifyHeaderName, utils_splitBy as splitBy, utils_tail as tail, utils_trim as trim, utils_trimEnd as trimEnd }; } -declare const _default: { - consts: typeof constants; - HttpZError: typeof HttpZError; - utils: typeof utils; - parse: typeof export_default; - build: typeof export_default$1; -}; - -export { _default as default }; +export { HttpZError, build, constants as consts, parse, utils }; diff --git a/dist/index.js b/dist/index.js index 62392f9..a3312f0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,8 +1,8 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.httpZ = factory()); -})(this, (function () { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.httpZ = {})); +})(this, (function (exports) { 'use strict'; class HttpZError extends Error { static get(...params) { @@ -506,7 +506,7 @@ } } - function build (messageModel, opts = {}) { + function build(messageModel, opts = {}) { if (isNil(messageModel)) { throw HttpZError.get('messageModel is required'); } @@ -929,7 +929,7 @@ } } - function parse (rawMessage, opts = {}) { + function parse(rawMessage, opts = {}) { if (isNil(rawMessage)) { throw HttpZError.get('rawMessage is required'); } @@ -946,14 +946,10 @@ throw HttpZError.get('rawMessage has incorrect format'); } - var index = { - consts: constants, - HttpZError, - utils, - parse, - build, - }; - - return index; + exports.HttpZError = HttpZError; + exports.build = build; + exports.consts = constants; + exports.parse = parse; + exports.utils = utils; })); diff --git a/src/builders/index.ts b/src/builders/index.ts index 807d862..3670450 100644 --- a/src/builders/index.ts +++ b/src/builders/index.ts @@ -4,7 +4,7 @@ import { HttpZRequestBuilder } from './request' import { HttpZResponseBuilder } from './response' import { HttpZBuilderModel, HttpZBuilderRequestModel, HttpZBuilderResponseModel, HttpZBuilderOptions } from './types' -export default function (messageModel: HttpZBuilderModel, opts: HttpZBuilderOptions = {}): string | never { +export function build(messageModel: HttpZBuilderModel, opts: HttpZBuilderOptions = {}): string | never { if (isNil(messageModel)) { throw HttpZError.get('messageModel is required') } diff --git a/src/index.ts b/src/index.ts index 69ba2da..f983cce 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,13 +1,5 @@ -import build from './builders/index' -import * as constants from './constants' -import { HttpZError } from './error' -import parse from './parsers/index' -import * as utils from './utils' - -export default { - consts: constants, - HttpZError, - utils, - parse, - build, -} +export * from './builders/index' +export * as consts from './constants' +export * from './error' +export * from './parsers/index' +export * as utils from './utils' diff --git a/src/parsers/index.ts b/src/parsers/index.ts index 87a4f3c..7d6b5d6 100644 --- a/src/parsers/index.ts +++ b/src/parsers/index.ts @@ -5,7 +5,7 @@ import { HttpZRequestParser } from './request' import { HttpZResponseParser } from './response' import { HttpZParserModel, HttpZParserOptions } from './types' -export default function (rawMessage: string, opts: HttpZParserOptions = {}): HttpZParserModel | never { +export function parse(rawMessage: string, opts: HttpZParserOptions = {}): HttpZParserModel | never { if (isNil(rawMessage)) { throw HttpZError.get('rawMessage is required') } diff --git a/test/builders/builders-spec.ts b/test/builders/builders-spec.ts index 685ad0d..7022e5c 100644 --- a/test/builders/builders-spec.ts +++ b/test/builders/builders-spec.ts @@ -1,4 +1,4 @@ -import builder from '../../src/builders/index' +import { build } from '../../src/builders/index' import { HttpZRequestBuilder } from '../../src/builders/request' import { HttpZResponseBuilder } from '../../src/builders/response' import { HttpZError } from '../../src/error' @@ -25,16 +25,16 @@ describe('builders / index', () => { it('should throw error when messageModel is nil', () => { const err = new HttpZError('messageModel is required') - expect(builder.bind(null, undefined as any)).toThrow(err) - expect(builder.bind(null, null as any)).toThrow(err) + expect(build.bind(null, undefined as any)).toThrow(err) + expect(build.bind(null, null as any)).toThrow(err) }) it('should throw error when messageModel is not a plain object', () => { const err = new HttpZError('messageModel must be a plain object') - expect(builder.bind(null, 123 as any)).toThrow(err) - expect(builder.bind(null, true as any)).toThrow(err) - expect(builder.bind(null, 'message' as any)).toThrow(err) - expect(builder.bind(null, ['message'] as any)).toThrow(err) + expect(build.bind(null, 123 as any)).toThrow(err) + expect(build.bind(null, true as any)).toThrow(err) + expect(build.bind(null, 'message' as any)).toThrow(err) + expect(build.bind(null, ['message'] as any)).toThrow(err) }) it('should throw error when model has incorrect format', () => { @@ -43,7 +43,7 @@ describe('builders / index', () => { } const err = new HttpZError('messageModel has incorrect format') - expect(builder.bind(null, messageModel as any)).toThrow(err) + expect(build.bind(null, messageModel as any)).toThrow(err) }) it('should call HttpZRequestBuilder.build when messageModel is request', () => { @@ -55,7 +55,7 @@ describe('builders / index', () => { _buildRequestSpy.mockReturnValue('built-request') - const actual = builder(messageModel as any) + const actual = build(messageModel as any) expect(actual).toEqual(expected) expect(_buildRequestSpy).toHaveBeenCalledTimes(1) @@ -71,7 +71,7 @@ describe('builders / index', () => { _buildResponseSpy.mockReturnValue('built-response') - const actual = builder(messageModel as any) + const actual = build(messageModel as any) expect(actual).toEqual(expected) expect(_buildResponseSpy).toHaveBeenCalledTimes(1) diff --git a/test/httpz-spec.ts b/test/httpz-spec.ts index 88d065f..c553e99 100644 --- a/test/httpz-spec.ts +++ b/test/httpz-spec.ts @@ -1,7 +1,7 @@ -import build from '../src/builders/index' +import { build } from '../src/builders/index' import { HttpZError } from '../src/error' -import httpZ from '../src/index' -import parse from '../src/parsers/index' +import * as httpZ from '../src/index' +import { parse } from '../src/parsers/index' describe('httpz', () => { it('should httpz.consts be defined', () => { diff --git a/test/parsers/parsers-spec.ts b/test/parsers/parsers-spec.ts index 8ac3fbb..8b648c1 100644 --- a/test/parsers/parsers-spec.ts +++ b/test/parsers/parsers-spec.ts @@ -1,6 +1,6 @@ import { EOL } from '../../src/constants' import { HttpZError } from '../../src/error' -import parser from '../../src/parsers/index' +import { parse } from '../../src/parsers/index' import { HttpZRequestParser } from '../../src/parsers/request' import { HttpZResponseParser } from '../../src/parsers/response' @@ -26,24 +26,24 @@ describe('parsers / index', () => { it('should throw error when rawMessage is nil', () => { const err = new HttpZError('rawMessage is required') - expect(parser.bind(null, undefined as any)).toThrow(err) - expect(parser.bind(null, null as any)).toThrow(err) + expect(parse.bind(null, undefined as any)).toThrow(err) + expect(parse.bind(null, null as any)).toThrow(err) }) it('should throw error when rawMessage is not a string', () => { const err = new HttpZError('rawMessage must be a string') - expect(parser.bind(null, 123 as any)).toThrow(err) - expect(parser.bind(null, true as any)).toThrow(err) - expect(parser.bind(null, {} as any)).toThrow(err) - expect(parser.bind(null, [] as any)).toThrow(err) + expect(parse.bind(null, 123 as any)).toThrow(err) + expect(parse.bind(null, true as any)).toThrow(err) + expect(parse.bind(null, {} as any)).toThrow(err) + expect(parse.bind(null, [] as any)).toThrow(err) }) it('should throw error when rawMessage has incorrect format', () => { const params = ['invalid'] const err = new HttpZError('rawMessage has incorrect format') - expect(parser.bind(null, ...params)).toThrow(err) + expect(parse.bind(null, ...params)).toThrow(err) }) it('should call HttpZRequestParser.parse when rawMessage is request', () => { @@ -53,7 +53,7 @@ describe('parsers / index', () => { _parseRequestSpy.mockReturnValue('parsed-request') - const actual = parser(rawMessage) + const actual = parse(rawMessage) expect(actual).toEqual(expected) expect(_parseRequestSpy).toHaveBeenCalledTimes(1) @@ -67,7 +67,7 @@ describe('parsers / index', () => { _parseResponseSpy.mockReturnValue('parsed-response') - const actual = parser(rawMessage) + const actual = parse(rawMessage) expect(actual).toEqual(expected) expect(_parseResponseSpy).toHaveBeenCalledTimes(1) From b74145b63c307a2424b6ad4b2592eb2b8c60d39e Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 10:46:09 +0300 Subject: [PATCH 07/13] move demo to main branch --- demo/.gitignore | 42 + demo/.lintstagedrc.json | 6 + demo/.nvmrc | 1 + demo/.prettierrc.json | 18 + demo/angular.json | 126 + demo/eslint.config.mjs | 173 + demo/package.json | 62 + demo/pnpm-lock.yaml | 8795 +++++++++++++++++ demo/src/app/app.component.html | 43 + demo/src/app/app.component.ts | 164 + demo/src/app/app.config.ts | 5 + demo/src/app/samples.ts | 909 ++ .../environments/environment.development.ts | 3 + demo/src/environments/environment.ts | 3 + demo/src/index.html | 14 + demo/src/main.ts | 8 + demo/src/styles.sass | 5 + demo/tsconfig.app.json | 15 + demo/tsconfig.json | 32 + 19 files changed, 10424 insertions(+) create mode 100644 demo/.gitignore create mode 100644 demo/.lintstagedrc.json create mode 100755 demo/.nvmrc create mode 100644 demo/.prettierrc.json create mode 100644 demo/angular.json create mode 100644 demo/eslint.config.mjs create mode 100644 demo/package.json create mode 100644 demo/pnpm-lock.yaml create mode 100644 demo/src/app/app.component.html create mode 100644 demo/src/app/app.component.ts create mode 100644 demo/src/app/app.config.ts create mode 100644 demo/src/app/samples.ts create mode 100644 demo/src/environments/environment.development.ts create mode 100644 demo/src/environments/environment.ts create mode 100644 demo/src/index.html create mode 100644 demo/src/main.ts create mode 100644 demo/src/styles.sass create mode 100644 demo/tsconfig.app.json create mode 100644 demo/tsconfig.json diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..cc7b141 --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,42 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/demo/.lintstagedrc.json b/demo/.lintstagedrc.json new file mode 100644 index 0000000..2f97a1a --- /dev/null +++ b/demo/.lintstagedrc.json @@ -0,0 +1,6 @@ +{ + "(src)/**/*.ts": [ + "prettier --write", + "eslint --fix" + ] +} diff --git a/demo/.nvmrc b/demo/.nvmrc new file mode 100755 index 0000000..8fdd954 --- /dev/null +++ b/demo/.nvmrc @@ -0,0 +1 @@ +22 \ No newline at end of file diff --git a/demo/.prettierrc.json b/demo/.prettierrc.json new file mode 100644 index 0000000..f021431 --- /dev/null +++ b/demo/.prettierrc.json @@ -0,0 +1,18 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "quoteProps": "as-needed", + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "avoid", + "endOfLine": "auto", + + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrderParserPlugins" : ["typescript", "decorators-legacy"], + "importOrder": ["^@app/(.*)$", "^[./]"], + "importOrderCaseInsensitive": true, + "importOrderSeparation": true +} diff --git a/demo/angular.json b/demo/angular.json new file mode 100644 index 0000000..e08f7b9 --- /dev/null +++ b/demo/angular.json @@ -0,0 +1,126 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "pnpm", + "analytics": false + }, + "newProjectRoot": "projects", + "projects": { + "httpz-demo": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "inlineTemplate": true, + "inlineStyle": true, + "style": "sass", + "skipTests": true + }, + "@schematics/angular:class": { + "skipTests": true + }, + "@schematics/angular:directive": { + "skipTests": true + }, + "@schematics/angular:guard": { + "skipTests": true + }, + "@schematics/angular:interceptor": { + "skipTests": true + }, + "@schematics/angular:pipe": { + "skipTests": true + }, + "@schematics/angular:resolver": { + "skipTests": true + }, + "@schematics/angular:service": { + "skipTests": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "browser": "src/main.ts", + "baseHref": "/http-z/", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "allowedCommonJsDependencies": [ + "lodash" + ], + "inlineStyleLanguage": "sass", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "bootstrap/dist/css/bootstrap.css", + "src/styles.sass" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "2Mb", + "maximumError": "5MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "10kB", + "maximumError": "50kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "port": 3001 + }, + "configurations": { + "production": { + "buildTarget": "httpz-demo:build:production" + }, + "development": { + "buildTarget": "httpz-demo:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n" + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + } + } + } + } +} diff --git a/demo/eslint.config.mjs b/demo/eslint.config.mjs new file mode 100644 index 0000000..bfc699e --- /dev/null +++ b/demo/eslint.config.mjs @@ -0,0 +1,173 @@ +import typescriptEslintEslintPlugin from "@typescript-eslint/eslint-plugin"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: ["projects/**/*"], +}, ...compat.extends( + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates", +).map(config => ({ + ...config, + files: ["**/*.ts"], +})), { + files: ["**/*.ts"], + + plugins: { + "@typescript-eslint": typescriptEslintEslintPlugin, + }, + + languageOptions: { + ecmaVersion: 5, + sourceType: "script", + + parserOptions: { + project: "tsconfig.json", + }, + }, + + rules: { + "@angular-eslint/directive-selector": ["error", { + type: "attribute", + prefix: "app", + style: "camelCase", + }], + + "@angular-eslint/component-selector": ["error", { + type: "element", + prefix: "app", + style: "kebab-case", + }], + + "brace-style": "error", + curly: "error", + "global-require": "error", + "handle-callback-err": "error", + + "key-spacing": ["error", { + beforeColon: false, + }], + + "linebreak-style": "off", + "max-params": ["error", 6], + "no-console": "error", + "no-case-declarations": "off", + "no-lonely-if": "error", + "no-multiple-empty-lines": "error", + "no-new-require": "error", + "no-path-concat": "error", + "no-constant-condition": "off", + "no-duplicate-imports": "error", + + "no-unused-vars": ["error", { + vars: "all", + args: "after-used", + ignoreRestSiblings: false, + }], + + "object-curly-spacing": ["error", "always"], + semi: "off", + quotes: "off", + "@typescript-eslint/member-ordering": "off", + "@typescript-eslint/no-angle-bracket-type-assertion": "off", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-unnecessary-condition": "off", + "@typescript-eslint/no-confusing-non-null-assertion": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/ban-tslint-comment": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/consistent-type-imports": "off", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-use-before-declare": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + + "@typescript-eslint/naming-convention": ["error", { + selector: "variableLike", + format: ["camelCase"], + leadingUnderscore: "forbid", + + filter: { + regex: "^npm_", + match: false, + }, + }, { + selector: "variable", + format: ["PascalCase"], + types: ["boolean"], + prefix: ["is", "has", "should"], + leadingUnderscore: "forbid", + }, { + selector: "variable", + modifiers: ["const"], + format: ["camelCase", "PascalCase", "UPPER_CASE"], + leadingUnderscore: "forbid", + filter: { + regex: "^npm_", + match: false, + }, + }, { + selector: "typeLike", + format: ["PascalCase"], + }, { + selector: "interface", + format: ["PascalCase"], + custom: { + regex: "^I[A-Z]", + match: false, + }, + }, { + selector: "enumMember", + format: ["UPPER_CASE"], + }, { + selector: "parameter", + format: null, + custom: { + regex: "(^_$|^[A-Za-z1-9$]+$)", + match: true + } + } + ], + }, +}, ...compat.extends( + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility", +).map(config => ({ + ...config, + files: ["**/*.html"], +})), { + files: ["**/*.html"], + rules: {}, +}]; \ No newline at end of file diff --git a/demo/package.json b/demo/package.json new file mode 100644 index 0000000..e0cdf88 --- /dev/null +++ b/demo/package.json @@ -0,0 +1,62 @@ +{ + "name": "http-z", + "version": "0.0.1", + "description": "http-z demo", + "private": true, + "engines": { + "node": ">=22" + }, + "scripts": { + "start": "ng serve", + "build": "ng build --configuration development", + "build:prod": "ng build --base-href /http-z/", + "make-docs": " pnpm build:prod && rm -rf ../docs && mv dist/browser ../docs", + "lint": "ng lint --fix", + "prettify": "prettier --write \"src/**/*.ts\"", + "format": "pnpm lint && pnpm prettify" + }, + "dependencies": { + "@angular/common": "^19.1.4", + "@angular/compiler": "^19.1.4", + "@angular/core": "^19.1.4", + "@angular/forms": "^19.1.4", + "@angular/platform-browser": "^19.1.4", + "@angular/platform-browser-dynamic": "^19.1.4", + "@angular/router": "^19.1.4", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/language": "^6.10.8", + "@codemirror/legacy-modes": "^6.4.2", + "@codemirror/state": "^6.5.1", + "bootstrap": "^5.3.3", + "codemirror": "^6.0.1", + "http-z": "github:AlexanderMac/http-z", + "lodash": "^4.17.21", + "rxjs": "~7.8.1", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^19.1.5", + "@angular-eslint/builder": "^19.0.2", + "@angular-eslint/eslint-plugin": "^19.0.2", + "@angular-eslint/eslint-plugin-template": "^19.0.2", + "@angular-eslint/template-parser": "^19.0.2", + "@angular/cli": "^19.1.5", + "@angular/compiler-cli": "^19.1.4", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", + "@types/lodash": "^4.17.15", + "eslint": "^9.19.0", + "prettier": "^3.4.2", + "tslib": "^2.8.1", + "typescript": "~5.6.3" + }, + "repository": { + "type": "git", + "url": "https://github.com/AlexanderMac/http-z" + }, + "author": "Alexander Mac", + "license": "MIT", + "bugs": { + "url": "https://github.com/AlexanderMac/http-z/issues" + }, + "homepage": "https://github.com/AlexanderMac/http-z" +} diff --git a/demo/pnpm-lock.yaml b/demo/pnpm-lock.yaml new file mode 100644 index 0000000..7ac901b --- /dev/null +++ b/demo/pnpm-lock.yaml @@ -0,0 +1,8795 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@angular/common': + specifier: ^19.1.4 + version: 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/compiler': + specifier: ^19.1.4 + version: 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/core': + specifier: ^19.1.4 + version: 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/forms': + specifier: ^19.1.4 + version: 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) + '@angular/platform-browser': + specifier: ^19.1.4 + version: 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/platform-browser-dynamic': + specifier: ^19.1.4 + version: 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))) + '@angular/router': + specifier: ^19.1.4 + version: 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) + '@codemirror/lang-json': + specifier: ^6.0.1 + version: 6.0.1 + '@codemirror/language': + specifier: ^6.10.8 + version: 6.10.8 + '@codemirror/legacy-modes': + specifier: ^6.4.2 + version: 6.4.2 + '@codemirror/state': + specifier: ^6.5.1 + version: 6.5.2 + bootstrap: + specifier: ^5.3.3 + version: 5.3.3(@popperjs/core@2.11.8) + codemirror: + specifier: ^6.0.1 + version: 6.0.1 + http-z: + specifier: github:AlexanderMac/http-z + version: https://codeload.github.com/AlexanderMac/http-z/tar.gz/778eff2d1d52b7ce85e6f4115b955a882fa39a92 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + rxjs: + specifier: ~7.8.1 + version: 7.8.1 + zone.js: + specifier: ~0.15.0 + version: 0.15.0 + devDependencies: + '@angular-devkit/build-angular': + specifier: ^19.1.5 + version: 19.1.6(@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3))(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.13.1)(chokidar@4.0.3)(jiti@1.21.7)(typescript@5.6.3)(vite@6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0)) + '@angular-eslint/builder': + specifier: ^19.0.2 + version: 19.0.2(chokidar@4.0.3)(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@angular-eslint/eslint-plugin': + specifier: ^19.0.2 + version: 19.0.2(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@angular-eslint/eslint-plugin-template': + specifier: ^19.0.2 + version: 19.0.2(@typescript-eslint/types@8.23.0)(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@angular-eslint/template-parser': + specifier: ^19.0.2 + version: 19.0.2(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@angular/cli': + specifier: ^19.1.5 + version: 19.1.6(@types/node@22.13.1)(chokidar@4.0.3) + '@angular/compiler-cli': + specifier: ^19.1.4 + version: 19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3) + '@trivago/prettier-plugin-sort-imports': + specifier: ^5.2.2 + version: 5.2.2(prettier@3.4.2) + '@types/lodash': + specifier: ^4.17.15 + version: 4.17.15 + eslint: + specifier: ^9.19.0 + version: 9.20.0(jiti@1.21.7) + prettier: + specifier: ^3.4.2 + version: 3.4.2 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + typescript: + specifier: ~5.6.3 + version: 5.6.3 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@angular-devkit/architect@0.1901.6': + resolution: {integrity: sha512-JiMrs3T1A7RyF5bh0PLGKDjTR8sa/kh8w63+dW0azcNok30tKjLjwJRPTpePokWefjmRgfKaf/iZ8yfFBnpGpA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular-devkit/build-angular@19.1.6': + resolution: {integrity: sha512-QZtzkD0PQnBMpIwXyFTa9ZqN2wIEssh8V2VBRXzp0GXOZYvU18ICdZwJCXbRU2Bixwk8mrDALfMfryDWovJkGQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler-cli': ^19.0.0 + '@angular/localize': ^19.0.0 + '@angular/platform-server': ^19.0.0 + '@angular/service-worker': ^19.0.0 + '@angular/ssr': ^19.1.6 + '@web/test-runner': ^0.19.0 + browser-sync: ^3.0.2 + jest: ^29.5.0 + jest-environment-jsdom: ^29.5.0 + karma: ^6.3.0 + ng-packagr: ^19.0.0 + protractor: ^7.0.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + typescript: '>=5.5 <5.8' + peerDependenciesMeta: + '@angular/localize': + optional: true + '@angular/platform-server': + optional: true + '@angular/service-worker': + optional: true + '@angular/ssr': + optional: true + '@web/test-runner': + optional: true + browser-sync: + optional: true + jest: + optional: true + jest-environment-jsdom: + optional: true + karma: + optional: true + ng-packagr: + optional: true + protractor: + optional: true + tailwindcss: + optional: true + + '@angular-devkit/build-webpack@0.1901.6': + resolution: {integrity: sha512-QNcc1XrmkyPuUBn0OGZjUAZZiKstaEHWkk1lSXN2YqRasGcoQjZdKZC3/Xl6ng/A4WjNSFFpImSIiSRI8xd0Og==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + webpack: ^5.30.0 + webpack-dev-server: ^5.0.2 + + '@angular-devkit/core@19.1.6': + resolution: {integrity: sha512-4s1RpYFGb/yP6OZ1dnYmU7maFYdhZS9pnUHKKiL9rSDhUHkX+VZlf9WFFrHv2RMWg+evrrwPtiFOTMBLShUi8g==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics@19.1.6': + resolution: {integrity: sha512-6ljZSVTFqnk0utnXLLd82wM6nj68984n5gfrpT1PlOff6MHHNH2YCfwNSlwg6Q5UfDxhEDIT9/MTLnXd6znIRQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular-eslint/builder@19.0.2': + resolution: {integrity: sha512-BdmMSndQt2fSBiTVniskUcUpQaeweUapbsL0IDfQ7a13vL0NVXpc3K89YXuVE/xsb08uHtqphuwxPAAj6kX3OA==} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + + '@angular-eslint/bundled-angular-compiler@19.0.2': + resolution: {integrity: sha512-HPmp92r70SNO/0NdIaIhxrgVSpomqryuUk7jszvNRtu+OzYCJGcbLhQD38T3dbBWT/AV0QXzyzExn6/2ai9fEw==} + + '@angular-eslint/eslint-plugin-template@19.0.2': + resolution: {integrity: sha512-f/OCF9ThnxQ8m0eNYPwnCrySQPhYfCOF6STL7F9LnS8Bs3ZeW3/oT1yLaMIZ1Eg0ogIkgxksMAJZjrJPUPBD1Q==} + peerDependencies: + '@typescript-eslint/types': ^7.11.0 || ^8.0.0 + '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + + '@angular-eslint/eslint-plugin@19.0.2': + resolution: {integrity: sha512-DLuNVVGGFicSThOcMSJyNje+FZSPdG0B3lCBRiqcgKH/16kfM4pV8MobPM7RGK2NhaOmmZ4zzJNwpwWPSgi+Lw==} + peerDependencies: + '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + + '@angular-eslint/template-parser@19.0.2': + resolution: {integrity: sha512-z3rZd2sBfuYcFf9rGDsB2zz2fbGX8kkF+0ftg9eocyQmzWrlZHFmuw9ha7oP/Mz8gpblyCS/aa1U/Srs6gz0UQ==} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + + '@angular-eslint/utils@19.0.2': + resolution: {integrity: sha512-HotBT8OKr7zCaX1S9k27JuhRiTVIbbYVl6whlb3uwdMIPIWY8iOcEh1tjI4qDPUafpLfR72Dhwi5bO1E17F3/Q==} + peerDependencies: + '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + + '@angular/build@19.1.6': + resolution: {integrity: sha512-6zGdMxMITBj5oVRDKcOL+ufrCSsPLPd5AeRcGkaCYQDshaOmn0UXL4HQylU3nswhVT0dtCd4eDA7fh2dlyVF6A==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler': ^19.0.0 + '@angular/compiler-cli': ^19.0.0 + '@angular/localize': ^19.0.0 + '@angular/platform-server': ^19.0.0 + '@angular/service-worker': ^19.0.0 + '@angular/ssr': ^19.1.6 + less: ^4.2.0 + ng-packagr: ^19.0.0 + postcss: ^8.4.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + typescript: '>=5.5 <5.8' + peerDependenciesMeta: + '@angular/localize': + optional: true + '@angular/platform-server': + optional: true + '@angular/service-worker': + optional: true + '@angular/ssr': + optional: true + less: + optional: true + ng-packagr: + optional: true + postcss: + optional: true + tailwindcss: + optional: true + + '@angular/cli@19.1.6': + resolution: {integrity: sha512-5H9Ri+YNPBnac/h1wTPQ+9mLSXfT1n99FwCtMVy6YnG+akRqOKFmPWB29hkFQAgfXi/MYIj+rQKv+d/9yWJibQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular/common@19.1.5': + resolution: {integrity: sha512-8jR3c5IBMlfiiHvrO8Y2z8y9n4Moy4mI7bS0eu3hmI3m5Vvrgd2Z4GCaQ/Dt4wCtFxcgSsVXiF+/H0QbVdwulA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/core': 19.1.5 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/compiler-cli@19.1.5': + resolution: {integrity: sha512-7IHfGklqiTsDYjk2SgOi5sG63gZ60LguT7dhMGtUdy+fUyK0KGofE1w74LwPHQ3huCdu3rBp7HZvC0/IsmiYtA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + hasBin: true + peerDependencies: + '@angular/compiler': 19.1.5 + typescript: '>=5.5 <5.8' + + '@angular/compiler@19.1.5': + resolution: {integrity: sha512-8dhticSq98qZanbPBqLACykR08eHbh9WyXG4VJB7Ru9465DjOd6sRM3gmGDNvNlohh30S4xJzPhVrzYXmIyqiA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/core': 19.1.5 + peerDependenciesMeta: + '@angular/core': + optional: true + + '@angular/core@19.1.5': + resolution: {integrity: sha512-N4Uh/jRV2Ksj1iBnhIHkB5hzeiF7J9rhUTiztDPaRT7YpFVt2MKiBXrn52HDcKXPaPFrsZBotbZ6oOMdP4rd5g==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.15.0 + + '@angular/forms@19.1.5': + resolution: {integrity: sha512-MUebiFrIhwB1m9rp8v/tgftsCmcI5OjUjnbsiuDsPp/291qxbsJ3P/wmvmCHYEJOoFxVLEgOjJvFcmYN/VbxLw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.1.5 + '@angular/core': 19.1.5 + '@angular/platform-browser': 19.1.5 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/platform-browser-dynamic@19.1.5': + resolution: {integrity: sha512-mW9Ru5C0/Jg+b2/pWfzfkWmFZ6Exn2J2k+6Unv1Vprh6whF4ch7v5AdBaCuLiK5kUPpQQMHhRz7VY+3mb/dgqQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.1.5 + '@angular/compiler': 19.1.5 + '@angular/core': 19.1.5 + '@angular/platform-browser': 19.1.5 + + '@angular/platform-browser@19.1.5': + resolution: {integrity: sha512-wqM4OlGncXNmROTS0mpUpnzzG5DsIZi1U0gzQp5bDOknaFFmg2C2ExCi29CwFZfaOeDw135AyXtu4qItfDOW9A==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/animations': 19.1.5 + '@angular/common': 19.1.5 + '@angular/core': 19.1.5 + peerDependenciesMeta: + '@angular/animations': + optional: true + + '@angular/router@19.1.5': + resolution: {integrity: sha512-g5JLymyi+/PTIqKcImSUB9ac1g7szMG/jGax3nTXqwMOzWmxZJJIEKlXWmHJYjUyYEhKBdqLPUMa4JbkD+/jnA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.1.5 + '@angular/core': 19.1.5 + '@angular/platform-browser': 19.1.5 + rxjs: ^6.5.3 || ^7.4.0 + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.7': + resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-runtime@7.25.9': + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.26.7': + resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.7': + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} + engines: {node: '>=6.9.0'} + + '@codemirror/autocomplete@6.18.4': + resolution: {integrity: sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA==} + + '@codemirror/commands@6.8.0': + resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==} + + '@codemirror/lang-json@6.0.1': + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + + '@codemirror/language@6.10.8': + resolution: {integrity: sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==} + + '@codemirror/legacy-modes@6.4.2': + resolution: {integrity: sha512-HsvWu08gOIIk303eZQCal4H4t65O/qp1V4ul4zVa3MHK5FJ0gz3qz3O55FIkm+aQUcshUOjBx38t2hPiJwW5/g==} + + '@codemirror/lint@6.8.4': + resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==} + + '@codemirror/search@6.5.8': + resolution: {integrity: sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig==} + + '@codemirror/state@6.5.2': + resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} + + '@codemirror/view@6.36.2': + resolution: {integrity: sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==} + + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.11.0': + resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.20.0': + resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@inquirer/checkbox@4.1.1': + resolution: {integrity: sha512-os5kFd/52gZTl/W6xqMfhaKVJHQM8V/U1P8jcSaQJ/C4Qhdrf2jEXdA/HaxfQs9iiUA/0yzYhk5d3oRHTxGDDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.1': + resolution: {integrity: sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/confirm@5.1.5': + resolution: {integrity: sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.6': + resolution: {integrity: sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.6': + resolution: {integrity: sha512-l0smvr8g/KAVdXx4I92sFxZiaTG4kFc06cFZw+qqwTirwdUHMFLnouXBB9OafWhpO3cfEkEz2CdPoCmor3059A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.8': + resolution: {integrity: sha512-k0ouAC6L+0Yoj/j0ys2bat0fYcyFVtItDB7h+pDFKaDDSFJey/C/YY1rmIOqkmFVZ5rZySeAQuS8zLcKkKRLmg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@inquirer/input@4.1.5': + resolution: {integrity: sha512-bB6wR5wBCz5zbIVBPnhp94BHv/G4eKbUEjlpCw676pI2chcvzTx1MuwZSCZ/fgNOdqDlAxkhQ4wagL8BI1D3Zg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.8': + resolution: {integrity: sha512-CTKs+dT1gw8dILVWATn8Ugik1OHLkkfY82J+Musb57KpmF6EKyskv8zmMiEJPzOnLTZLo05X/QdMd8VH9oulXw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.8': + resolution: {integrity: sha512-MgA+Z7o3K1df2lGY649fyOBowHGfrKRz64dx3+b6c1w+h2W7AwBoOkHhhF/vfhbs5S4vsKNCuDzS3s9r5DpK1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.2.1': + resolution: {integrity: sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/rawlist@4.0.8': + resolution: {integrity: sha512-hl7rvYW7Xl4un8uohQRUgO6uc2hpn7PKqfcGkCOWC0AA4waBxAv6MpGOFCEDrUaBCP+pXPVqp4LmnpWmn1E1+g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.0.8': + resolution: {integrity: sha512-ihSE9D3xQAupNg/aGDZaukqoUSXG2KfstWosVmFCG7jbMQPaj2ivxWtsB+CnYY/T4D6LX1GHKixwJLunNCffww==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.0.8': + resolution: {integrity: sha512-Io2prxFyN2jOCcu4qJbVoilo19caiD3kqkD3WR0q3yDA5HUCo83v4LrRtg55ZwniYACW64z36eV7gyVbOfORjA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.4': + resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.1.1': + resolution: {integrity: sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.5.0': + resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + + '@lezer/highlight@1.2.1': + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} + + '@lezer/json@1.0.3': + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} + + '@lezer/lr@1.4.2': + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + + '@listr2/prompt-adapter-inquirer@2.0.18': + resolution: {integrity: sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@inquirer/prompts': '>= 3 < 8' + + '@lmdb/lmdb-darwin-arm64@3.2.2': + resolution: {integrity: sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==} + cpu: [arm64] + os: [darwin] + + '@lmdb/lmdb-darwin-x64@3.2.2': + resolution: {integrity: sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==} + cpu: [x64] + os: [darwin] + + '@lmdb/lmdb-linux-arm64@3.2.2': + resolution: {integrity: sha512-4hdgZtWI1idQlWRp+eleWXD9KLvObgboRaVoBj2POdPEYvsKANllvMW0El8tEQwtw74yB9NT6P8ENBB5UJf5+g==} + cpu: [arm64] + os: [linux] + + '@lmdb/lmdb-linux-arm@3.2.2': + resolution: {integrity: sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==} + cpu: [arm] + os: [linux] + + '@lmdb/lmdb-linux-x64@3.2.2': + resolution: {integrity: sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==} + cpu: [x64] + os: [linux] + + '@lmdb/lmdb-win32-x64@3.2.2': + resolution: {integrity: sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==} + cpu: [x64] + os: [win32] + + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@napi-rs/nice-android-arm-eabi@1.0.1': + resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/nice-android-arm64@1.0.1': + resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/nice-darwin-arm64@1.0.1': + resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/nice-darwin-x64@1.0.1': + resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/nice-freebsd-x64@1.0.1': + resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/nice-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/nice-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/nice-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/nice-linux-riscv64-gnu@1.0.1': + resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/nice-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/nice-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/nice-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/nice-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/nice-win32-ia32-msvc@1.0.1': + resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/nice-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/nice@1.0.1': + resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==} + engines: {node: '>= 10'} + + '@ngtools/webpack@19.1.6': + resolution: {integrity: sha512-36I/y4KIRWyE35OgZXzYnDCNQ2G3VB/2awj8L3VowDyTP9enJj6V044UGpCNiKOgYerubgMN3gcPIsOzg0pLpg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler-cli': ^19.0.0 + typescript: '>=5.5 <5.8' + webpack: ^5.54.0 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/agent@3.0.0': + resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/fs@4.0.0': + resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/git@6.0.1': + resolution: {integrity: sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/installed-package-contents@3.0.0': + resolution: {integrity: sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + '@npmcli/node-gyp@4.0.0': + resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/package-json@6.1.1': + resolution: {integrity: sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/promise-spawn@8.0.2': + resolution: {integrity: sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/redact@3.1.1': + resolution: {integrity: sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/run-script@9.0.2': + resolution: {integrity: sha512-cJXiUlycdizQwvqE1iaAb4VRUM3RX09/8q46zjvy+ct9GhfZRWd7jXYVc1tn/CfRlGPVkX/u4sstRlepsm7hfw==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/rollup-android-arm-eabi@4.30.1': + resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.30.1': + resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.30.1': + resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.30.1': + resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.30.1': + resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.30.1': + resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.30.1': + resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.30.1': + resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.30.1': + resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.30.1': + resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.30.1': + resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.30.1': + resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.30.1': + resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.30.1': + resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.30.1': + resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.30.1': + resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} + cpu: [x64] + os: [win32] + + '@schematics/angular@19.1.6': + resolution: {integrity: sha512-TxFp6iHBqXcuyZIW84HA4z3XkAMz3wTw46K3GNhzyfhFTFD0YD+DtaR3MfQ+vcj3YUYu9j44zrB9nchzugR9Ew==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@sigstore/bundle@3.1.0': + resolution: {integrity: sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/core@2.0.0': + resolution: {integrity: sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/protobuf-specs@0.4.0': + resolution: {integrity: sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/sign@3.1.0': + resolution: {integrity: sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/tuf@3.1.0': + resolution: {integrity: sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/verify@2.1.0': + resolution: {integrity: sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + + '@tufjs/canonical-json@2.0.0': + resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@tufjs/models@3.0.1': + resolution: {integrity: sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/bonjour@3.5.13': + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + + '@types/connect-history-api-fallback@1.5.4': + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@22.13.1': + resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-index@1.9.4': + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + + '@types/ws@8.5.14': + resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} + + '@typescript-eslint/scope-manager@8.23.0': + resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.23.0': + resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.23.0': + resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.23.0': + resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.23.0': + resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-basic-ssl@1.2.0': + resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==} + engines: {node: '>=14.21.3'} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + + abbrev@3.0.0: + resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} + engines: {node: ^18.17.0 || >=20.5.0} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-loader@9.2.1: + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + beasties@0.2.0: + resolution: {integrity: sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow==} + engines: {node: '>=14.0.0'} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.3.0: + resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bootstrap@5.3.3: + resolution: {integrity: sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==} + peerDependencies: + '@popperjs/core': ^2.11.8 + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacache@19.0.1: + resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001698: + resolution: {integrity: sha512-xJ3km2oiG/MbNU8G6zIq6XRZ6HtAOVXsbOrP/blGazi52kc5Yy7b6sDA5O+FbROzRrV7BSTllLHuNvmawYUJjw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + codemirror@6.0.1: + resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-webpack-plugin@12.0.2: + resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.1.0 + + core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.96: + resolution: {integrity: sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + esbuild-wasm@0.24.2: + resolution: {integrity: sha512-03/7Z1gD+ohDnScFztvI4XddTAbKVmMEzCvvkBpQdWKEXJ+73dTyeNrmdxP1Q0zpDMFjzUJwtK4rLjqwiHbzkw==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.20.0: + resolution: {integrity: sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hosted-git-info@8.0.2: + resolution: {integrity: sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==} + engines: {node: ^18.17.0 || >=20.5.0} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.9: + resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-middleware@2.0.7: + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy-middleware@3.0.3: + resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-z@https://codeload.github.com/AlexanderMac/http-z/tar.gz/778eff2d1d52b7ce85e6f4115b955a882fa39a92: + resolution: {tarball: https://codeload.github.com/AlexanderMac/http-z/tar.gz/778eff2d1d52b7ce85e6f4115b955a882fa39a92} + version: 8.0.0-dev + engines: {node: '>=18', pnpm: '>=9'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@7.0.0: + resolution: {integrity: sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@5.0.0: + resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} + engines: {node: ^18.17.0 || >=20.5.0} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@4.0.0: + resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + karma-source-map-support@1.4.0: + resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + + less-loader@12.2.0: + resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + less@4.2.1: + resolution: {integrity: sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==} + engines: {node: '>=6'} + hasBin: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + license-webpack-plugin@4.0.2: + resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} + peerDependencies: + webpack: '*' + peerDependenciesMeta: + webpack: + optional: true + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + lmdb@3.2.2: + resolution: {integrity: sha512-LriG93la4PbmPMwI7Hbv8W+0ncLK7549w4sbZSi4QGDjnnxnmNMgxUkaQTEMzH8TpwsfFvgEjpLX7V8B/I9e3g==} + hasBin: true + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-fetch-happen@14.0.3: + resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@4.17.0: + resolution: {integrity: sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mini-css-extract-plugin@2.9.2: + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-collect@2.0.1: + resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-fetch@4.0.0: + resolution: {integrity: sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w==} + engines: {node: ^18.17.0 || >=20.5.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.2: + resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + + node-gyp@11.0.0: + resolution: {integrity: sha512-zQS+9MTTeCMgY0F3cWPyJyRFAkVltQ1uXm+xXu/ES6KFgC6Czo1Seb9vQW2wNxSX2OrDTiqL0ojtkFxBQ0ypIw==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-bundled@4.0.0: + resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-install-checks@7.1.1: + resolution: {integrity: sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-normalize-package-bin@4.0.0: + resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-package-arg@12.0.1: + resolution: {integrity: sha512-aDxjFfPV3Liw0WOBWlyZLMBqtbgbg03rmGvHDJa2Ttv7tIz+1oB5qWec4psCDFZcZi9b5XdGkPdQiJxOPzvQRQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-packlist@9.0.0: + resolution: {integrity: sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-pick-manifest@10.0.0: + resolution: {integrity: sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-registry-fetch@18.0.2: + resolution: {integrity: sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ordered-binary@1.5.3: + resolution: {integrity: sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + pacote@20.0.0: + resolution: {integrity: sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + parse5-html-rewriting-stream@7.0.0: + resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} + + parse5-sax-parser@7.0.0: + resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + piscina@4.8.0: + resolution: {integrity: sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + postcss-loader@8.1.1: + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + + proc-log@5.0.0: + resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.1: + resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + engines: {node: '>= 14.18.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regex-parser@2.3.0: + resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rollup@4.30.1: + resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-loader@16.0.4: + resolution: {integrity: sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + + sass@1.83.1: + resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sigstore@3.1.0: + resolution: {integrity: sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-loader@5.0.0: + resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.72.1 + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + ssri@12.0.0: + resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + engines: {node: '>=10'} + hasBin: true + + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tree-dump@1.0.2: + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tuf-js@3.0.1: + resolution: {integrity: sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==} + engines: {node: ^18.17.0 || >=20.5.0} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-assert@1.0.9: + resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unique-filename@4.0.0: + resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + unique-slug@5.0.0: + resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} + engines: {node: ^18.17.0 || >=20.5.0} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@6.0.0: + resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} + engines: {node: ^18.17.0 || >=20.5.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@6.0.11: + resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + + webpack-dev-middleware@7.4.2: + resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@5.2.0: + resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-subresource-integrity@5.1.0: + resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} + engines: {node: '>= 12'} + peerDependencies: + html-webpack-plugin: '>= 5.0.0-beta.1 < 6' + webpack: ^5.12.0 + peerDependenciesMeta: + html-webpack-plugin: + optional: true + + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zone.js@0.15.0: + resolution: {integrity: sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular-devkit/architect@0.1901.6(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/build-angular@19.1.6(@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3))(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.13.1)(chokidar@4.0.3)(jiti@1.21.7)(typescript@5.6.3)(vite@6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.1901.6(chokidar@4.0.3) + '@angular-devkit/build-webpack': 0.1901.6(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.97.1))(webpack@5.97.1(esbuild@0.24.2)) + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + '@angular/build': 19.1.6(@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3))(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.13.1)(chokidar@4.0.3)(jiti@1.21.7)(less@4.2.1)(postcss@8.4.49)(terser@5.37.0)(typescript@5.6.3) + '@angular/compiler-cli': 19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3) + '@babel/core': 7.26.0 + '@babel/generator': 7.26.3 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/runtime': 7.26.0 + '@discoveryjs/json-ext': 0.6.3 + '@ngtools/webpack': 19.1.6(@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3))(typescript@5.6.3)(webpack@5.97.1(esbuild@0.24.2)) + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0)) + ansi-colors: 4.1.3 + autoprefixer: 10.4.20(postcss@8.4.49) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.24.2)) + browserslist: 4.24.4 + copy-webpack-plugin: 12.0.2(webpack@5.97.1(esbuild@0.24.2)) + css-loader: 7.1.2(webpack@5.97.1(esbuild@0.24.2)) + esbuild-wasm: 0.24.2 + fast-glob: 3.3.3 + http-proxy-middleware: 3.0.3 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + karma-source-map-support: 1.4.0 + less: 4.2.1 + less-loader: 12.2.0(less@4.2.1)(webpack@5.97.1(esbuild@0.24.2)) + license-webpack-plugin: 4.0.2(webpack@5.97.1(esbuild@0.24.2)) + loader-utils: 3.3.1 + mini-css-extract-plugin: 2.9.2(webpack@5.97.1(esbuild@0.24.2)) + open: 10.1.0 + ora: 5.4.1 + picomatch: 4.0.2 + piscina: 4.8.0 + postcss: 8.4.49 + postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.1(esbuild@0.24.2)) + resolve-url-loader: 5.0.0 + rxjs: 7.8.1 + sass: 1.83.1 + sass-loader: 16.0.4(sass@1.83.1)(webpack@5.97.1(esbuild@0.24.2)) + semver: 7.6.3 + source-map-loader: 5.0.0(webpack@5.97.1(esbuild@0.24.2)) + source-map-support: 0.5.21 + terser: 5.37.0 + tree-kill: 1.2.2 + tslib: 2.8.1 + typescript: 5.6.3 + webpack: 5.97.1(esbuild@0.24.2) + webpack-dev-middleware: 7.4.2(webpack@5.97.1) + webpack-dev-server: 5.2.0(webpack@5.97.1) + webpack-merge: 6.0.1 + webpack-subresource-integrity: 5.1.0(webpack@5.97.1(esbuild@0.24.2)) + optionalDependencies: + esbuild: 0.24.2 + transitivePeerDependencies: + - '@angular/compiler' + - '@rspack/core' + - '@swc/core' + - '@types/node' + - bufferutil + - chokidar + - debug + - html-webpack-plugin + - jiti + - lightningcss + - node-sass + - sass-embedded + - stylus + - sugarss + - supports-color + - tsx + - uglify-js + - utf-8-validate + - vite + - webpack-cli + - yaml + + '@angular-devkit/build-webpack@0.1901.6(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.97.1))(webpack@5.97.1(esbuild@0.24.2))': + dependencies: + '@angular-devkit/architect': 0.1901.6(chokidar@4.0.3) + rxjs: 7.8.1 + webpack: 5.97.1(esbuild@0.24.2) + webpack-dev-server: 5.2.0(webpack@5.97.1) + transitivePeerDependencies: + - chokidar + + '@angular-devkit/core@19.1.6(chokidar@4.0.3)': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + jsonc-parser: 3.3.1 + picomatch: 4.0.2 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular-devkit/schematics@19.1.6(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular-eslint/builder@19.0.2(chokidar@4.0.3)(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@angular-devkit/architect': 0.1901.6(chokidar@4.0.3) + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + eslint: 9.20.0(jiti@1.21.7) + typescript: 5.6.3 + transitivePeerDependencies: + - chokidar + + '@angular-eslint/bundled-angular-compiler@19.0.2': {} + + '@angular-eslint/eslint-plugin-template@19.0.2(@typescript-eslint/types@8.23.0)(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 19.0.2 + '@angular-eslint/utils': 19.0.2(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + aria-query: 5.3.2 + axobject-query: 4.1.0 + eslint: 9.20.0(jiti@1.21.7) + typescript: 5.6.3 + + '@angular-eslint/eslint-plugin@19.0.2(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 19.0.2 + '@angular-eslint/utils': 19.0.2(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + eslint: 9.20.0(jiti@1.21.7) + typescript: 5.6.3 + + '@angular-eslint/template-parser@19.0.2(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 19.0.2 + eslint: 9.20.0(jiti@1.21.7) + eslint-scope: 8.2.0 + typescript: 5.6.3 + + '@angular-eslint/utils@19.0.2(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 19.0.2 + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + eslint: 9.20.0(jiti@1.21.7) + typescript: 5.6.3 + + '@angular/build@19.1.6(@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3))(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.13.1)(chokidar@4.0.3)(jiti@1.21.7)(less@4.2.1)(postcss@8.4.49)(terser@5.37.0)(typescript@5.6.3)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.1901.6(chokidar@4.0.3) + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + '@angular/compiler': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/compiler-cli': 19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3) + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@inquirer/confirm': 5.1.1(@types/node@22.13.1) + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0)) + beasties: 0.2.0 + browserslist: 4.24.4 + esbuild: 0.24.2 + fast-glob: 3.3.3 + https-proxy-agent: 7.0.6 + istanbul-lib-instrument: 6.0.3 + listr2: 8.2.5 + magic-string: 0.30.17 + mrmime: 2.0.0 + parse5-html-rewriting-stream: 7.0.0 + picomatch: 4.0.2 + piscina: 4.8.0 + rollup: 4.30.1 + sass: 1.83.1 + semver: 7.6.3 + typescript: 5.6.3 + vite: 6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0) + watchpack: 2.4.2 + optionalDependencies: + less: 4.2.1 + lmdb: 3.2.2 + postcss: 8.4.49 + transitivePeerDependencies: + - '@types/node' + - chokidar + - jiti + - lightningcss + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@angular/cli@19.1.6(@types/node@22.13.1)(chokidar@4.0.3)': + dependencies: + '@angular-devkit/architect': 0.1901.6(chokidar@4.0.3) + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + '@angular-devkit/schematics': 19.1.6(chokidar@4.0.3) + '@inquirer/prompts': 7.2.1(@types/node@22.13.1) + '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.2.1(@types/node@22.13.1)) + '@schematics/angular': 19.1.6(chokidar@4.0.3) + '@yarnpkg/lockfile': 1.1.0 + ini: 5.0.0 + jsonc-parser: 3.3.1 + listr2: 8.2.5 + npm-package-arg: 12.0.1 + npm-pick-manifest: 10.0.0 + pacote: 20.0.0 + resolve: 1.22.10 + semver: 7.6.3 + symbol-observable: 4.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - bluebird + - chokidar + - supports-color + + '@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1)': + dependencies: + '@angular/core': 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + rxjs: 7.8.1 + tslib: 2.8.1 + + '@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3)': + dependencies: + '@angular/compiler': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + '@babel/core': 7.26.0 + '@jridgewell/sourcemap-codec': 1.5.0 + chokidar: 4.0.3 + convert-source-map: 1.9.0 + reflect-metadata: 0.2.2 + semver: 7.7.1 + tslib: 2.8.1 + typescript: 5.6.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))': + dependencies: + tslib: 2.8.1 + optionalDependencies: + '@angular/core': 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + + '@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)': + dependencies: + rxjs: 7.8.1 + tslib: 2.8.1 + zone.js: 0.15.0 + + '@angular/forms@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1)': + dependencies: + '@angular/common': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + rxjs: 7.8.1 + tslib: 2.8.1 + + '@angular/platform-browser-dynamic@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))': + dependencies: + '@angular/common': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/compiler': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/core': 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + tslib: 2.8.1 + + '@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))': + dependencies: + '@angular/common': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + tslib: 2.8.1 + + '@angular/router@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1)': + dependencies: + '@angular/common': 19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.1.5(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.1.5(@angular/common@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)) + rxjs: 7.8.1 + tslib: 2.8.1 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.7 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.7 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.26.7 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + + '@babel/parser@7.26.7': + dependencies: + '@babel/types': 7.26.7 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/traverse': 7.26.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.25.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + core-js-compat: 3.40.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.7 + esutils: 2.0.3 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + '@babel/traverse@7.26.7': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.7': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@codemirror/autocomplete@6.18.4': + dependencies: + '@codemirror/language': 6.10.8 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.2 + '@lezer/common': 1.2.3 + + '@codemirror/commands@6.8.0': + dependencies: + '@codemirror/language': 6.10.8 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.2 + '@lezer/common': 1.2.3 + + '@codemirror/lang-json@6.0.1': + dependencies: + '@codemirror/language': 6.10.8 + '@lezer/json': 1.0.3 + + '@codemirror/language@6.10.8': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.2 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + style-mod: 4.1.2 + + '@codemirror/legacy-modes@6.4.2': + dependencies: + '@codemirror/language': 6.10.8 + + '@codemirror/lint@6.8.4': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.2 + crelt: 1.0.6 + + '@codemirror/search@6.5.8': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.2 + crelt: 1.0.6 + + '@codemirror/state@6.5.2': + dependencies: + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/view@6.36.2': + dependencies: + '@codemirror/state': 6.5.2 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + + '@discoveryjs/json-ext@0.6.3': {} + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.20.0(jiti@1.21.7))': + dependencies: + eslint: 9.20.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.11.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.20.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@inquirer/checkbox@4.1.1(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.1) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/confirm@5.1.1(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + '@types/node': 22.13.1 + + '@inquirer/confirm@5.1.5(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/core@10.1.6(@types/node@22.13.1)': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.1) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/editor@4.2.6(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/expand@4.0.8(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/input@4.1.5(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/number@3.0.8(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/password@4.0.8(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/prompts@7.2.1(@types/node@22.13.1)': + dependencies: + '@inquirer/checkbox': 4.1.1(@types/node@22.13.1) + '@inquirer/confirm': 5.1.5(@types/node@22.13.1) + '@inquirer/editor': 4.2.6(@types/node@22.13.1) + '@inquirer/expand': 4.0.8(@types/node@22.13.1) + '@inquirer/input': 4.1.5(@types/node@22.13.1) + '@inquirer/number': 3.0.8(@types/node@22.13.1) + '@inquirer/password': 4.0.8(@types/node@22.13.1) + '@inquirer/rawlist': 4.0.8(@types/node@22.13.1) + '@inquirer/search': 3.0.8(@types/node@22.13.1) + '@inquirer/select': 4.0.8(@types/node@22.13.1) + '@types/node': 22.13.1 + + '@inquirer/rawlist@4.0.8(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/type': 3.0.4(@types/node@22.13.1) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/search@3.0.8(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.1) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/select@4.0.8(@types/node@22.13.1)': + dependencies: + '@inquirer/core': 10.1.6(@types/node@22.13.1) + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.1) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.1 + + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@3.0.4(@types/node@22.13.1)': + optionalDependencies: + '@types/node': 22.13.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@1.1.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@leichtgewicht/ip-codec@2.0.5': {} + + '@lezer/common@1.2.3': {} + + '@lezer/highlight@1.2.1': + dependencies: + '@lezer/common': 1.2.3 + + '@lezer/json@1.0.3': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/lr@1.4.2': + dependencies: + '@lezer/common': 1.2.3 + + '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.2.1(@types/node@22.13.1))': + dependencies: + '@inquirer/prompts': 7.2.1(@types/node@22.13.1) + '@inquirer/type': 1.5.5 + + '@lmdb/lmdb-darwin-arm64@3.2.2': + optional: true + + '@lmdb/lmdb-darwin-x64@3.2.2': + optional: true + + '@lmdb/lmdb-linux-arm64@3.2.2': + optional: true + + '@lmdb/lmdb-linux-arm@3.2.2': + optional: true + + '@lmdb/lmdb-linux-x64@3.2.2': + optional: true + + '@lmdb/lmdb-win32-x64@3.2.2': + optional: true + + '@marijn/find-cluster-break@1.0.2': {} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + + '@napi-rs/nice-android-arm-eabi@1.0.1': + optional: true + + '@napi-rs/nice-android-arm64@1.0.1': + optional: true + + '@napi-rs/nice-darwin-arm64@1.0.1': + optional: true + + '@napi-rs/nice-darwin-x64@1.0.1': + optional: true + + '@napi-rs/nice-freebsd-x64@1.0.1': + optional: true + + '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': + optional: true + + '@napi-rs/nice-linux-arm64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-arm64-musl@1.0.1': + optional: true + + '@napi-rs/nice-linux-ppc64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-riscv64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-s390x-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-x64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-x64-musl@1.0.1': + optional: true + + '@napi-rs/nice-win32-arm64-msvc@1.0.1': + optional: true + + '@napi-rs/nice-win32-ia32-msvc@1.0.1': + optional: true + + '@napi-rs/nice-win32-x64-msvc@1.0.1': + optional: true + + '@napi-rs/nice@1.0.1': + optionalDependencies: + '@napi-rs/nice-android-arm-eabi': 1.0.1 + '@napi-rs/nice-android-arm64': 1.0.1 + '@napi-rs/nice-darwin-arm64': 1.0.1 + '@napi-rs/nice-darwin-x64': 1.0.1 + '@napi-rs/nice-freebsd-x64': 1.0.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.0.1 + '@napi-rs/nice-linux-arm64-gnu': 1.0.1 + '@napi-rs/nice-linux-arm64-musl': 1.0.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.0.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.0.1 + '@napi-rs/nice-linux-s390x-gnu': 1.0.1 + '@napi-rs/nice-linux-x64-gnu': 1.0.1 + '@napi-rs/nice-linux-x64-musl': 1.0.1 + '@napi-rs/nice-win32-arm64-msvc': 1.0.1 + '@napi-rs/nice-win32-ia32-msvc': 1.0.1 + '@napi-rs/nice-win32-x64-msvc': 1.0.1 + optional: true + + '@ngtools/webpack@19.1.6(@angular/compiler-cli@19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3))(typescript@5.6.3)(webpack@5.97.1(esbuild@0.24.2))': + dependencies: + '@angular/compiler-cli': 19.1.5(@angular/compiler@19.1.5(@angular/core@19.1.5(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.6.3) + typescript: 5.6.3 + webpack: 5.97.1(esbuild@0.24.2) + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + + '@npmcli/agent@3.0.0': + dependencies: + agent-base: 7.1.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 10.4.3 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + '@npmcli/fs@4.0.0': + dependencies: + semver: 7.6.3 + + '@npmcli/git@6.0.1': + dependencies: + '@npmcli/promise-spawn': 8.0.2 + ini: 5.0.0 + lru-cache: 10.4.3 + npm-pick-manifest: 10.0.0 + proc-log: 5.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 5.0.0 + transitivePeerDependencies: + - bluebird + + '@npmcli/installed-package-contents@3.0.0': + dependencies: + npm-bundled: 4.0.0 + npm-normalize-package-bin: 4.0.0 + + '@npmcli/node-gyp@4.0.0': {} + + '@npmcli/package-json@6.1.1': + dependencies: + '@npmcli/git': 6.0.1 + glob: 10.4.5 + hosted-git-info: 8.0.2 + json-parse-even-better-errors: 4.0.0 + proc-log: 5.0.0 + semver: 7.6.3 + validate-npm-package-license: 3.0.4 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@8.0.2': + dependencies: + which: 5.0.0 + + '@npmcli/redact@3.1.1': {} + + '@npmcli/run-script@9.0.2': + dependencies: + '@npmcli/node-gyp': 4.0.0 + '@npmcli/package-json': 6.1.1 + '@npmcli/promise-spawn': 8.0.2 + node-gyp: 11.0.0 + proc-log: 5.0.0 + which: 5.0.0 + transitivePeerDependencies: + - bluebird + - supports-color + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@popperjs/core@2.11.8': {} + + '@rollup/rollup-android-arm-eabi@4.30.1': + optional: true + + '@rollup/rollup-android-arm64@4.30.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.30.1': + optional: true + + '@rollup/rollup-darwin-x64@4.30.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.30.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.30.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.30.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.30.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.30.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.30.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.30.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.30.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.30.1': + optional: true + + '@schematics/angular@19.1.6(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.1.6(chokidar@4.0.3) + '@angular-devkit/schematics': 19.1.6(chokidar@4.0.3) + jsonc-parser: 3.3.1 + transitivePeerDependencies: + - chokidar + + '@sigstore/bundle@3.1.0': + dependencies: + '@sigstore/protobuf-specs': 0.4.0 + + '@sigstore/core@2.0.0': {} + + '@sigstore/protobuf-specs@0.4.0': {} + + '@sigstore/sign@3.1.0': + dependencies: + '@sigstore/bundle': 3.1.0 + '@sigstore/core': 2.0.0 + '@sigstore/protobuf-specs': 0.4.0 + make-fetch-happen: 14.0.3 + proc-log: 5.0.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@sigstore/tuf@3.1.0': + dependencies: + '@sigstore/protobuf-specs': 0.4.0 + tuf-js: 3.0.1 + transitivePeerDependencies: + - supports-color + + '@sigstore/verify@2.1.0': + dependencies: + '@sigstore/bundle': 3.1.0 + '@sigstore/core': 2.0.0 + '@sigstore/protobuf-specs': 0.4.0 + + '@sindresorhus/merge-streams@2.3.0': {} + + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.4.2)': + dependencies: + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.4.2 + transitivePeerDependencies: + - supports-color + + '@tufjs/canonical-json@2.0.0': {} + + '@tufjs/models@3.0.1': + dependencies: + '@tufjs/canonical-json': 2.0.0 + minimatch: 9.0.5 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.13.1 + + '@types/bonjour@3.5.13': + dependencies: + '@types/node': 22.13.1 + + '@types/connect-history-api-fallback@1.5.4': + dependencies: + '@types/express-serve-static-core': 5.0.6 + '@types/node': 22.13.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.13.1 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.6': {} + + '@types/express-serve-static-core@4.19.6': + dependencies: + '@types/node': 22.13.1 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express-serve-static-core@5.0.6': + dependencies: + '@types/node': 22.13.1 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@4.17.21': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.18 + '@types/serve-static': 1.15.7 + + '@types/http-errors@2.0.4': {} + + '@types/http-proxy@1.17.16': + dependencies: + '@types/node': 22.13.1 + + '@types/json-schema@7.0.15': {} + + '@types/lodash@4.17.15': {} + + '@types/mime@1.3.5': {} + + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 22.13.1 + + '@types/node@22.13.1': + dependencies: + undici-types: 6.20.0 + + '@types/qs@6.9.18': {} + + '@types/range-parser@1.2.7': {} + + '@types/retry@0.12.2': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.13.1 + + '@types/serve-index@1.9.4': + dependencies: + '@types/express': 4.17.21 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 22.13.1 + '@types/send': 0.17.4 + + '@types/sockjs@0.3.36': + dependencies: + '@types/node': 22.13.1 + + '@types/ws@8.5.14': + dependencies: + '@types/node': 22.13.1 + + '@typescript-eslint/scope-manager@8.23.0': + dependencies: + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + + '@typescript-eslint/types@8.23.0': {} + + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.6.3) + eslint: 9.20.0(jiti@1.21.7) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.23.0': + dependencies: + '@typescript-eslint/types': 8.23.0 + eslint-visitor-keys: 4.2.0 + + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0))': + dependencies: + vite: 6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0) + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + '@yarnpkg/lockfile@1.1.0': {} + + abbrev@3.0.0: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + adjust-sourcemap-loader@4.0.0: + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.3.0 + + agent-base@7.1.3: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-html-community@0.0.8: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-flatten@1.1.1: {} + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001698 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + axobject-query@4.1.0: {} + + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + '@babel/core': 7.26.0 + find-cache-dir: 4.0.0 + schema-utils: 4.3.0 + webpack: 5.97.1(esbuild@0.24.2) + + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + core-js-compat: 3.40.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + batch@0.6.1: {} + + beasties@0.2.0: + dependencies: + css-select: 5.1.0 + css-what: 6.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + htmlparser2: 9.1.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-media-query-parser: 0.2.3 + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bonjour-service@1.3.0: + dependencies: + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + + boolbase@1.0.0: {} + + bootstrap@5.3.3(@popperjs/core@2.11.8): + dependencies: + '@popperjs/core': 2.11.8 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001698 + electron-to-chromium: 1.5.96 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + bytes@3.1.2: {} + + cacache@19.0.1: + dependencies: + '@npmcli/fs': 4.0.0 + fs-minipass: 3.0.3 + glob: 10.4.5 + lru-cache: 10.4.3 + minipass: 7.1.2 + minipass-collect: 2.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 7.0.3 + ssri: 12.0.0 + tar: 7.4.3 + unique-filename: 4.0.0 + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001698: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.1 + + chownr@2.0.0: {} + + chownr@3.0.0: {} + + chrome-trace-event@1.0.4: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone@1.0.4: {} + + codemirror@6.0.1: + dependencies: + '@codemirror/autocomplete': 6.18.4 + '@codemirror/commands': 6.8.0 + '@codemirror/language': 6.10.8 + '@codemirror/lint': 6.8.4 + '@codemirror/search': 6.5.8 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.2 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + commander@2.20.3: {} + + common-path-prefix@3.0.0: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.53.0 + + compression@1.7.5: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + connect-history-api-fallback@2.0.0: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + copy-webpack-plugin@12.0.2(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + fast-glob: 3.3.3 + glob-parent: 6.0.2 + globby: 14.0.2 + normalize-path: 3.0.0 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + webpack: 5.97.1(esbuild@0.24.2) + + core-js-compat@3.40.0: + dependencies: + browserslist: 4.24.4 + + core-util-is@1.0.3: {} + + cosmiconfig@9.0.0(typescript@5.6.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.3 + + crelt@1.0.6: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-loader@7.1.2(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) + postcss-modules-scope: 3.2.1(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) + postcss-value-parser: 4.2.0 + semver: 7.6.3 + optionalDependencies: + webpack: 5.97.1(esbuild@0.24.2) + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-lazy-prop@3.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-libc@1.0.3: + optional: true + + detect-libc@2.0.3: + optional: true + + detect-node@2.1.0: {} + + dns-packet@5.6.1: + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.96: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojis-list@3.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + err-code@2.0.3: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + esbuild-wasm@0.24.2: {} + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.20.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.11.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.20.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + exponential-backoff@3.1.2: {} + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} + + fastq@1.19.0: + dependencies: + reusify: 1.0.4 + + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-cache-dir@4.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flat@5.0.2: {} + + flatted@3.3.2: {} + + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forwarded@0.2.0: {} + + fraction.js@4.3.7: {} + + fresh@0.5.2: {} + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 5.3.2 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + handle-thing@2.0.1: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hosted-git-info@8.0.2: + dependencies: + lru-cache: 10.4.3 + + hpack.js@2.1.6: + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-cache-semantics@4.1.1: {} + + http-deceiver@1.2.7: {} + + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-parser-js@0.5.9: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + http-proxy-middleware@2.0.7(@types/express@4.17.21): + dependencies: + '@types/http-proxy': 1.17.16 + http-proxy: 1.18.1(debug@4.4.0) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + optionalDependencies: + '@types/express': 4.17.21 + transitivePeerDependencies: + - debug + + http-proxy-middleware@3.0.3: + dependencies: + '@types/http-proxy': 1.17.16 + debug: 4.4.0 + http-proxy: 1.18.1(debug@4.4.0) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.4.0): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9(debug@4.4.0) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-z@https://codeload.github.com/AlexanderMac/http-z/tar.gz/778eff2d1d52b7ce85e6f4115b955a882fa39a92: {} + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + hyperdyperid@1.2.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + icss-utils@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + ieee754@1.2.1: {} + + ignore-walk@7.0.0: + dependencies: + minimatch: 9.0.5 + + ignore@5.3.2: {} + + image-size@0.5.5: + optional: true + + immutable@5.0.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + ini@5.0.0: {} + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + ipaddr.js@1.9.1: {} + + ipaddr.js@2.2.0: {} + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@1.0.0: {} + + is-network-error@1.1.0: {} + + is-number@7.0.0: {} + + is-plain-obj@3.0.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-plain-object@5.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-what@3.14.1: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isexe@3.1.1: {} + + isobject@3.0.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + javascript-natural-sort@0.7.1: {} + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.13.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-parse-even-better-errors@4.0.0: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonparse@1.3.1: {} + + karma-source-map-support@1.4.0: + dependencies: + source-map-support: 0.5.21 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + launch-editor@2.9.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.2 + + less-loader@12.2.0(less@4.2.1)(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + less: 4.2.1 + optionalDependencies: + webpack: 5.97.1(esbuild@0.24.2) + + less@4.2.1: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.8.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + license-webpack-plugin@4.0.2(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + webpack-sources: 3.2.3 + optionalDependencies: + webpack: 5.97.1(esbuild@0.24.2) + + lines-and-columns@1.2.4: {} + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + lmdb@3.2.2: + dependencies: + msgpackr: 1.11.2 + node-addon-api: 6.1.0 + node-gyp-build-optional-packages: 5.2.2 + ordered-binary: 1.5.3 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 3.2.2 + '@lmdb/lmdb-darwin-x64': 3.2.2 + '@lmdb/lmdb-linux-arm': 3.2.2 + '@lmdb/lmdb-linux-arm64': 3.2.2 + '@lmdb/lmdb-linux-x64': 3.2.2 + '@lmdb/lmdb-win32-x64': 3.2.2 + optional: true + + loader-runner@4.3.0: {} + + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + + loader-utils@3.3.1: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.debounce@4.0.8: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + make-fetch-happen@14.0.3: + dependencies: + '@npmcli/agent': 3.0.0 + cacache: 19.0.1 + http-cache-semantics: 4.1.1 + minipass: 7.1.2 + minipass-fetch: 4.0.0 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 1.0.0 + proc-log: 5.0.0 + promise-retry: 2.0.1 + ssri: 12.0.0 + transitivePeerDependencies: + - supports-color + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + memfs@4.17.0: + dependencies: + '@jsonjoy.com/json-pack': 1.1.1(tslib@2.8.1) + '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) + tree-dump: 1.0.2(tslib@2.8.1) + tslib: 2.8.1 + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.53.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-function@5.0.1: {} + + mini-css-extract-plugin@2.9.2(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + schema-utils: 4.3.0 + tapable: 2.2.1 + webpack: 5.97.1(esbuild@0.24.2) + + minimalistic-assert@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass-collect@2.0.1: + dependencies: + minipass: 7.1.2 + + minipass-fetch@4.0.0: + dependencies: + minipass: 7.1.2 + minipass-sized: 1.0.3 + minizlib: 3.0.1 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + minizlib@3.0.1: + dependencies: + minipass: 7.1.2 + rimraf: 5.0.10 + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + mrmime@2.0.0: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.2: + optionalDependencies: + msgpackr-extract: 3.0.3 + optional: true + + multicast-dns@7.2.5: + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + + mute-stream@1.0.0: {} + + mute-stream@2.0.0: {} + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + optional: true + + negotiator@0.6.3: {} + + negotiator@0.6.4: {} + + negotiator@1.0.0: {} + + neo-async@2.6.2: {} + + node-addon-api@6.1.0: + optional: true + + node-addon-api@7.1.1: + optional: true + + node-forge@1.3.1: {} + + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.0.3 + optional: true + + node-gyp@11.0.0: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + make-fetch-happen: 14.0.3 + nopt: 8.1.0 + proc-log: 5.0.0 + semver: 7.6.3 + tar: 7.4.3 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + + node-releases@2.0.19: {} + + nopt@8.1.0: + dependencies: + abbrev: 3.0.0 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + npm-bundled@4.0.0: + dependencies: + npm-normalize-package-bin: 4.0.0 + + npm-install-checks@7.1.1: + dependencies: + semver: 7.6.3 + + npm-normalize-package-bin@4.0.0: {} + + npm-package-arg@12.0.1: + dependencies: + hosted-git-info: 8.0.2 + proc-log: 5.0.0 + semver: 7.6.3 + validate-npm-package-name: 6.0.0 + + npm-packlist@9.0.0: + dependencies: + ignore-walk: 7.0.0 + + npm-pick-manifest@10.0.0: + dependencies: + npm-install-checks: 7.1.1 + npm-normalize-package-bin: 4.0.0 + npm-package-arg: 12.0.1 + semver: 7.6.3 + + npm-registry-fetch@18.0.2: + dependencies: + '@npmcli/redact': 3.1.1 + jsonparse: 1.3.1 + make-fetch-happen: 14.0.3 + minipass: 7.1.2 + minipass-fetch: 4.0.0 + minizlib: 3.0.1 + npm-package-arg: 12.0.1 + proc-log: 5.0.0 + transitivePeerDependencies: + - supports-color + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-inspect@1.13.4: {} + + obuf@1.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.0.2: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ordered-binary@1.5.3: + optional: true + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@7.0.3: {} + + p-retry@6.2.1: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.1.0 + retry: 0.13.1 + + package-json-from-dist@1.0.1: {} + + pacote@20.0.0: + dependencies: + '@npmcli/git': 6.0.1 + '@npmcli/installed-package-contents': 3.0.0 + '@npmcli/package-json': 6.1.1 + '@npmcli/promise-spawn': 8.0.2 + '@npmcli/run-script': 9.0.2 + cacache: 19.0.1 + fs-minipass: 3.0.3 + minipass: 7.1.2 + npm-package-arg: 12.0.1 + npm-packlist: 9.0.0 + npm-pick-manifest: 10.0.0 + npm-registry-fetch: 18.0.2 + proc-log: 5.0.0 + promise-retry: 2.0.1 + sigstore: 3.1.0 + ssri: 12.0.0 + tar: 6.2.1 + transitivePeerDependencies: + - bluebird + - supports-color + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-node-version@1.0.1: {} + + parse5-html-rewriting-stream@7.0.0: + dependencies: + entities: 4.5.0 + parse5: 7.2.1 + parse5-sax-parser: 7.0.0 + + parse5-sax-parser@7.0.0: + dependencies: + parse5: 7.2.1 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} + + path-type@5.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@4.0.1: + optional: true + + piscina@4.8.0: + optionalDependencies: + '@napi-rs/nice': 1.0.1 + + pkg-dir@7.0.0: + dependencies: + find-up: 6.3.0 + + postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + cosmiconfig: 9.0.0(typescript@5.6.3) + jiti: 1.21.7 + postcss: 8.4.49 + semver: 7.6.3 + optionalDependencies: + webpack: 5.97.1(esbuild@0.24.2) + transitivePeerDependencies: + - typescript + + postcss-media-query-parser@0.2.3: {} + + postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-modules-local-by-default@4.2.0(postcss@8.4.49): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 7.1.0 + + postcss-modules-values@4.0.0(postcss@8.4.49): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.4.2: {} + + proc-log@5.0.0: {} + + process-nextick-args@2.0.1: {} + + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + prr@1.0.1: + optional: true + + punycode@2.3.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.1: {} + + reflect-metadata@0.2.2: {} + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.26.0 + + regex-parser@2.3.0: {} + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + requires-port@1.0.0: {} + + resolve-from@4.0.0: {} + + resolve-url-loader@5.0.0: + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 8.4.49 + source-map: 0.6.1 + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + retry@0.12.0: {} + + retry@0.13.1: {} + + reusify@1.0.4: {} + + rfdc@1.4.1: {} + + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + + rollup@4.30.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.30.1 + '@rollup/rollup-android-arm64': 4.30.1 + '@rollup/rollup-darwin-arm64': 4.30.1 + '@rollup/rollup-darwin-x64': 4.30.1 + '@rollup/rollup-freebsd-arm64': 4.30.1 + '@rollup/rollup-freebsd-x64': 4.30.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 + '@rollup/rollup-linux-arm-musleabihf': 4.30.1 + '@rollup/rollup-linux-arm64-gnu': 4.30.1 + '@rollup/rollup-linux-arm64-musl': 4.30.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 + '@rollup/rollup-linux-riscv64-gnu': 4.30.1 + '@rollup/rollup-linux-s390x-gnu': 4.30.1 + '@rollup/rollup-linux-x64-gnu': 4.30.1 + '@rollup/rollup-linux-x64-musl': 4.30.1 + '@rollup/rollup-win32-arm64-msvc': 4.30.1 + '@rollup/rollup-win32-ia32-msvc': 4.30.1 + '@rollup/rollup-win32-x64-msvc': 4.30.1 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sass-loader@16.0.4(sass@1.83.1)(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + sass: 1.83.1 + webpack: 5.97.1(esbuild@0.24.2) + + sass@1.83.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + sax@1.4.1: + optional: true + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + select-hose@2.0.0: {} + + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + + semver@5.7.2: + optional: true + + semver@6.3.1: {} + + semver@7.6.3: {} + + semver@7.7.1: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-index@1.9.1: + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.1.0: {} + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.2: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sigstore@3.1.0: + dependencies: + '@sigstore/bundle': 3.1.0 + '@sigstore/core': 2.0.0 + '@sigstore/protobuf-specs': 0.4.0 + '@sigstore/sign': 3.1.0 + '@sigstore/tuf': 3.1.0 + '@sigstore/verify': 2.1.0 + transitivePeerDependencies: + - supports-color + + slash@5.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + smart-buffer@4.2.0: {} + + sockjs@0.3.24: + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map-loader@5.0.0(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + iconv-lite: 0.6.3 + source-map-js: 1.2.1 + webpack: 5.97.1(esbuild@0.24.2) + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + spdy-transport@3.0.0: + dependencies: + debug: 4.4.0 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + + spdy@4.0.2: + dependencies: + debug: 4.4.0 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + + sprintf-js@1.1.3: {} + + ssri@12.0.0: + dependencies: + minipass: 7.1.2 + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-json-comments@3.1.1: {} + + style-mod@4.1.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-observable@4.0.0: {} + + tapable@2.2.1: {} + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.1 + mkdirp: 3.0.1 + yallist: 5.0.0 + + terser-webpack-plugin@5.3.11(esbuild@0.24.2)(webpack@5.97.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.97.1(esbuild@0.24.2) + optionalDependencies: + esbuild: 0.24.2 + + terser@5.37.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thingies@1.21.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + thunky@1.1.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tree-dump@1.0.2(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + tree-kill@1.2.2: {} + + ts-api-utils@2.0.1(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + + tslib@2.8.1: {} + + tuf-js@3.0.1: + dependencies: + '@tufjs/models': 3.0.1 + debug: 4.4.0 + make-fetch-happen: 14.0.3 + transitivePeerDependencies: + - supports-color + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.21.3: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typed-assert@1.0.9: {} + + typescript@5.6.3: {} + + undici-types@6.20.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unicorn-magic@0.1.0: {} + + unique-filename@4.0.0: + dependencies: + unique-slug: 5.0.0 + + unique-slug@5.0.0: + dependencies: + imurmurhash: 0.1.4 + + unpipe@1.0.0: {} + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@8.3.2: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@6.0.0: {} + + vary@1.1.2: {} + + vite@6.0.11(@types/node@22.13.1)(jiti@1.21.7)(less@4.2.1)(sass@1.83.1)(terser@5.37.0): + dependencies: + esbuild: 0.24.2 + postcss: 8.4.49 + rollup: 4.30.1 + optionalDependencies: + '@types/node': 22.13.1 + fsevents: 2.3.3 + jiti: 1.21.7 + less: 4.2.1 + sass: 1.83.1 + terser: 5.37.0 + + w3c-keyname@2.2.8: {} + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wbuf@1.7.3: + dependencies: + minimalistic-assert: 1.0.1 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + weak-lru-cache@1.2.2: + optional: true + + webpack-dev-middleware@7.4.2(webpack@5.97.1): + dependencies: + colorette: 2.0.20 + memfs: 4.17.0 + mime-types: 2.1.35 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.0 + optionalDependencies: + webpack: 5.97.1(esbuild@0.24.2) + + webpack-dev-server@5.2.0(webpack@5.97.1): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.7 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.14 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.7.5 + connect-history-api-fallback: 2.0.0 + express: 4.21.2 + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.7(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.9.1 + open: 10.1.0 + p-retry: 6.2.1 + schema-utils: 4.3.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 7.4.2(webpack@5.97.1) + ws: 8.18.0 + optionalDependencies: + webpack: 5.97.1(esbuild@0.24.2) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-sources@3.2.3: {} + + webpack-subresource-integrity@5.1.0(webpack@5.97.1(esbuild@0.24.2)): + dependencies: + typed-assert: 1.0.9 + webpack: 5.97.1(esbuild@0.24.2) + + webpack@5.97.1(esbuild@0.24.2): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.11(esbuild@0.24.2)(webpack@5.97.1) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.9 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@5.0.0: + dependencies: + isexe: 3.1.1 + + wildcard@2.0.1: {} + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + ws@8.18.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yallist@5.0.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + yocto-queue@1.1.1: {} + + yoctocolors-cjs@2.1.2: {} + + zone.js@0.15.0: {} diff --git a/demo/src/app/app.component.html b/demo/src/app/app.component.html new file mode 100644 index 0000000..2828fa1 --- /dev/null +++ b/demo/src/app/app.component.html @@ -0,0 +1,43 @@ +

HttpZ demo

+
GitHub Repo +
v{{libVersion}}
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+

Input({{ selectedOperation === 'parse' ? 'Plain HTTP Message' : 'Model' }})

+
+
+
+

Output({{ selectedOperation === 'parse' ? 'Model' : 'Plain HTTP Message' }})

+
+
+
+
+
Status:{{ inputSuccess }}{{ inputError }}
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/demo/src/app/app.component.ts b/demo/src/app/app.component.ts new file mode 100644 index 0000000..23546b4 --- /dev/null +++ b/demo/src/app/app.component.ts @@ -0,0 +1,164 @@ +import { CommonModule } from '@angular/common' +import { AfterViewInit, Component, ViewChild } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { json } from '@codemirror/lang-json' +import { StreamLanguage } from '@codemirror/language' +import { http } from '@codemirror/legacy-modes/mode/http' +import { Compartment, EditorState, Extension } from '@codemirror/state' +import { basicSetup, EditorView } from 'codemirror' +import * as httpZ from 'http-z' +import { attempt, isError } from 'lodash' + +import { ModelSamples, PlainSamples, Sample } from '@app/samples' + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + imports: [CommonModule, FormsModule], +}) +export class AppComponent implements AfterViewInit { + selectedOperation: 'parse' | 'build' = 'parse' + selectedSample!: Sample + samples: Sample[] = [] + cmInputEditor!: EditorView + cmOutputEditor!: EditorView + inputSuccess = '' + inputError = '' + libVersion = (httpZ.utils as any).getLibVersion() + + @ViewChild('input', { static: false }) input: any + @ViewChild('output', { static: false }) output: any + + ngAfterViewInit(): void { + this.cmInputEditor = this._createCmEditor(this.input.nativeElement) + this.cmOutputEditor = this._createCmEditor(this.output.nativeElement) + this._setOperation() + } + + selectOperation(): void { + this._setOperation() + } + + selectSample(): void { + this._setCmEditorText(this.cmInputEditor, this.selectedSample.message) + this.exec() + } + + exec(): void { + this._clearMessages() + const success = this.selectedOperation === 'parse' ? this._parse() : this._build() + if (success) { + this.inputSuccess = 'Success' + } + } + + private _parse(): boolean { + const input = this.cmInputEditor.state.doc.toString() + const plain = this._getPlainFromInput(input) + + const model = attempt(httpZ.parse.bind(httpZ, plain)) + if (isError(model)) { + this.inputError = model.message + return false + } + + const output = JSON.stringify(model, null, ' ') + this._setCmEditorText(this.cmOutputEditor, output) + + return true + } + + private _build(): boolean { + const input = this.cmInputEditor.state.doc.toString() + const model = attempt(JSON.parse.bind(JSON, input)) + if (isError(model)) { + this.inputError = model.message + return false + } + + const plain = attempt(httpZ.build.bind(httpZ, model)) + if (isError(plain)) { + this.inputError = plain.message + return false + } + this._setCmEditorText(this.cmOutputEditor, plain) + + return true + } + + private _setOperation(): void { + let samples: Sample[] + if (this.selectedOperation === 'parse') { + this.cmInputEditor.setState(this._createCmHttpState()) + this.cmOutputEditor.setState(this._createCmJsonState(true)) + samples = PlainSamples + } else { + this.cmInputEditor.setState(this._createCmJsonState()) + this.cmOutputEditor.setState(this._createCmHttpState(true)) + samples = ModelSamples + } + + this.samples.splice(0, this.samples.length) + this.samples.push(...samples) + + setTimeout(() => { + this.selectedSample = samples[0] + this.selectSample() + }) + } + + private _createCmEditor(nativeElement: any): EditorView { + return new EditorView({ + parent: nativeElement, + state: EditorState.create({ + extensions: [basicSetup], + }), + }) + } + + private _createCmHttpState(isReadonly = false): EditorState { + const extensions = [basicSetup, StreamLanguage.define(http)] + if (isReadonly) { + extensions.push(this._createCmStateReadonly()) + } + return EditorState.create({ + doc: '', + extensions, + }) + } + + private _createCmJsonState(isReadonly = false): EditorState { + const extensions = [basicSetup, json()] + if (isReadonly) { + extensions.push(this._createCmStateReadonly()) + } + return EditorState.create({ + doc: '', + extensions, + }) + } + + private _createCmStateReadonly(): Extension { + const readonly = new Compartment() + return readonly.of(EditorState.readOnly.of(true)) + } + + private _setCmEditorText(cmEditor: EditorView, text: string): void { + cmEditor.dispatch({ + changes: { + from: 0, + to: cmEditor.state.doc.length, + insert: text, + }, + }) + } + + private _getPlainFromInput(input: string): string { + return input.replace(/\r\n/g, '\n').replace(/\n/g, '\r\n') + } + + private _clearMessages(): void { + this.inputSuccess = '' + this.inputError = '' + } +} diff --git a/demo/src/app/app.config.ts b/demo/src/app/app.config.ts new file mode 100644 index 0000000..9dc0e3a --- /dev/null +++ b/demo/src/app/app.config.ts @@ -0,0 +1,5 @@ +import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core' + +export const appConfig: ApplicationConfig = { + providers: [provideZoneChangeDetection({ eventCoalescing: true })], +} diff --git a/demo/src/app/samples.ts b/demo/src/app/samples.ts new file mode 100644 index 0000000..37f028f --- /dev/null +++ b/demo/src/app/samples.ts @@ -0,0 +1,909 @@ +import * as httpZ from 'http-z' + +export type Sample = { + name: string + message: string + isSeparator?: boolean +} +export const PlainSamples: Sample[] = [ + { + name: 'Request without headers and body', + message: ['GET /features?p1=v1%3B&p2= HTTP/1.1', 'host: www.example.com', '', ''].join(httpZ.consts.EOL), + }, + { + name: 'Request without body', + message: [ + 'GET https://foo.com/bar HTTP/1.1', + 'host: example.com', + 'connection: ', + 'accept: */*', + 'accept-Encoding: gzip,deflate', + 'accept-language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0', + 'generated-by: "modern-framework 2020"', + 'Sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"', + 'Authorization: AWS4-HMAC-SHA256 Credential=CRED/20210118/eu-west-1/s3/aws4_request, \ +SignedHeaders=host;x-amz-acl;x-amz-user-agent, Signature=fb1e6017a1d', + '', + '', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with cookies and without body', + message: [ + 'GET /features HTTP/1.1', + 'Host: example.com:8080', + 'Connection: ', + 'Accept: */*', + 'Accept-Encoding: gzip,deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Cookie: csrftoken=123abc;sessionid=sd=456def%3B;userid=', + '', + '', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with body of contentType=text/plain', + message: [ + 'POST /features HTTP/1.1', + 'Host: example.com', + 'Connection: keep-alive', + 'Accept: */*', + 'Accept-Encoding: gzip,deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Content-Type: text/plain; charset=UTF-8', + 'Content-Encoding: gzip,deflate', + 'Content-Length: 301', + '', + 'Text data', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with body of contentType=application/x-www-form-urlencoded', + message: [ + 'POST /features HTTP/1.1', + 'Host: example.com', + 'Connection: keep-alive', + 'Accept: */*', + 'Accept-Encoding: gzip,deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', + 'Content-Encoding: gzip,deflate', + 'Content-Length: 301', + '', + 'firstName=John&lastName=&age=25%3B', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with body of contentType=multipart/form-data', + message: [ + 'POST /features HTTP/1.1', + 'Host: example.com', + 'Connection: keep-alive', + 'Accept: */*', + 'Accept-Encoding: gzip,deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Content-Type: multipart/form-data; boundary="111362:53119209"', + 'Content-Encoding: gzip,deflate', + 'Content-Length: 301', + '', + '--111362:53119209', + 'Content-Disposition: form-data; name="user.data[firstName]"', + '', + 'John', + '--111362:53119209', + 'Content-Disposition: form-data; name="photo"; filename="photo1.jpg"', + 'Content-Type: application/octet-stream', + '', + '', + '--111362:53119209', + 'Content-Disposition: form-data; name="bio"', + 'Content-Type: text/plain', + '', + 'some info', + 'more info', + '', + '--111362:53119209--', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with body of contentType=multipart/alternative (inline)', + message: [ + 'POST /features HTTP/1.1', + 'Host: example.com', + 'Connection: keep-alive', + 'Accept: */*', + 'Accept-Encoding: gzip,deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Content-Type: multipart/alternative; boundary="111362-53119209"', + 'Content-Encoding: gzip,deflate', + 'Content-Length: 301', + '', + '--111362-53119209', + 'Content-Disposition: inline', + '', + '', + '--111362-53119209--', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with body of contentType=multipart/mixed (attachment)', + message: [ + 'POST /features HTTP/1.1', + 'Host: example.com', + 'Connection: keep-alive', + 'Accept: */*', + 'Accept-Encoding: gzip,deflate', + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Content-Type: multipart/mixed; boundary="11136253119209"', + 'Content-Encoding: gzip,deflate', + 'Content-Length: 301', + '', + '--11136253119209', + 'Content-Disposition: attachment; filename="photo1.jpg"', + 'Content-Type: application/octet-stream', + '', + '', + '--11136253119209--', + ].join(httpZ.consts.EOL), + }, + { + name: 'Request with transferEncoding=chunked', + message: [ + 'POST /features HTTP/1.1', + 'Host: example.com', + 'Connection: keep-alive', + 'Accept: */*', + 'Accept-Encoding: gzip, deflate', + 'Accept-Language: ru-RU, ru;q=0.8, en-US;q=0.6, en;q=0.4', + 'Content-Type: text/plain;charset=UTF-8', + 'Content-Encoding: gzip, deflate', + 'Transfer-Encoding: chunked', + '', + '19', + 'The Transfer-Encoding hea', + '19', + 'der specifies the form of', + '19', + ' encoding used to safely ', + '19', + 'transfer the payload body', + 'C', + ' to the user', + ].join(httpZ.consts.EOL), + }, + { + name: '──────────', + message: '', + isSeparator: true, + }, + { + name: 'Response without headers and body', + message: ['HTTP/1.1 204 No content', '', ''].join(httpZ.consts.EOL), + }, + { + name: 'Response without body (header names in lower case)', + message: [ + 'HTTP/1.1 201 Created', + 'connection: ', + 'cache-Control: no-cache', + 'Content-type: text/plain; charset=UTF-8', + 'content-encoding: gzip,deflate', + '', + '', + ].join(httpZ.consts.EOL), + }, + { + name: 'Response without cookies and body', + message: [ + 'HTTP/1.1 201 Created', + 'Connection: ', + 'Cache-Control: no-cache', + 'Content-Type: text/plain; charset=UTF-8', + 'Content-Encoding: gzip,deflate', + 'Set-Cookie: csrftoken=123abc', + 'Set-Cookie: sessionid=456def; Domain=example.com; Path=/', + 'Set-Cookie: username=smith; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly', + '', + '', + ].join(httpZ.consts.EOL), + }, + { + name: 'Response with body of contentType=text/plain', + message: [ + 'HTTP/1.1 200 Ok', + 'Connection: keep-alive', + 'Cache-Control: no-cache', + 'Content-Type: text/plain; charset=UTF-8', + 'Content-Encoding: gzip,deflate', + 'Content-Length: 301', + '', + 'Text data', + ].join(httpZ.consts.EOL), + }, + { + name: 'Response with transferEncoding=chunked', + message: [ + 'HTTP/1.1 200 Ok', + 'Connection: keep-alive', + 'Cache-Control: no-cache', + 'Content-Encoding: gzip, deflate', + 'Content-Type: text/plain;charset=UTF-8', + 'Transfer-Encoding: chunked', + '', + '19', + 'The Transfer-Encoding hea', + '19', + 'der specifies the form of', + '19', + ' encoding used to safely ', + '19', + 'transfer the payload body', + 'C', + ' to the user', + ].join(httpZ.consts.EOL), + }, +] + +export const ModelSamples: Sample[] = [ + { + name: 'Request without headers and body', + message: `{ + "method": "GET", + "protocolVersion": "HTTP/1.1", + "target": "/features?p1=v1%3B&p2=", + "host": "www.example.com", + "path": "/features", + "headersSize": 62, + "bodySize": 0, + "queryParams": [ + { + "name": "p1", + "value": "v1;" + }, + { + "name": "p2", + "value": "" + } + ], + "headers": [ + { + "name": "Host", + "value": "www.example.com" + } + ] +}`, + }, + { + name: 'Request without body', + message: `{ + "method": "GET", + "protocolVersion": "HTTP/1.1", + "target": "https://foo.com/bar", + "host": "example.com", + "path": "/bar", + "headersSize": 529, + "bodySize": 0, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" + }, + { + "name": "Generated-By", + "value": "modern-framework 2020" + }, + { + "name": "Sec-Ch-Ua", + "value": "\\"Google Chrome\\";v=\\"87\\", \\" Not;A Brand\\";v=\\"99\\", \\"Chromium\\";v=\\"87\\"" + }, + { + "name": "Authorization", + "value": "AWS4-HMAC-SHA256 Credential=CRED/20210118/eu-west-1/s3/aws4_request, SignedHeaders=host;x-amz-acl;x-amz-user-agent, Signature=fb1e6017a1d" + } + ] +}`, + }, + { + name: 'Request with cookies and without body', + message: `{ + "method": "GET", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com:8080", + "path": "/features", + "headersSize": 219, + "bodySize": 0, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com:8080" + }, + { + "name": "Connection", + "value": "" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Cookie", + "value": "csrftoken=123abc;sessionid=sd=456def%3B;userid=" + } + ], + "cookies": [ + { + "name": "csrftoken", + "value": "123abc" + }, + { + "name": "sessionid", + "value": "sd=456def%3B" + }, + { + "name": "userid" + } + ] +}`, + }, + { + name: 'Request with body of contentType=text/plain', + message: `{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 262, + "bodySize": 9, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "text/plain", + "text": "Text data" + } +}`, + }, + { + name: 'Request with body of contentType=application/x-www-form-urlencoded', + message: `{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 285, + "bodySize": 34, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "application/x-www-form-urlencoded; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "application/x-www-form-urlencoded", + "params": [ + { + "name": "firstName", + "value": "John" + }, + { + "name": "lastName", + "value": "" + }, + { + "name": "age", + "value": "25;" + } + ] + } +}`, + }, + { + name: 'Request with body of contentType=multipart/form-data', + message: `{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 284, + "bodySize": 367, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=\\"111362:53119209\\"" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "multipart/form-data", + "boundary": "111362:53119209", + "params": [ + { + "value": "John", + "name": "user.data[firstName]" + }, + { + "value": "", + "contentType": "application/octet-stream", + "name": "photo", + "fileName": "photo1.jpg" + }, + { + "value": "some info\\r\\nmore info\\r\\n", + "contentType": "text/plain", + "name": "bio" + } + ] + } +}`, + }, + { + name: 'Request with body of contentType=multipart/alternative (inline)', + message: `{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 286, + "bodySize": 84, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\\"111362-53119209\\"" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "multipart/alternative", + "boundary": "111362-53119209", + "params": [ + { + "value": "", + "type": "inline" + } + ] + } +}`, + }, + { + name: 'Request with body of contentType=multipart/mixed (attachment)', + message: `{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 279, + "bodySize": 149, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "multipart/mixed; boundary=\\"11136253119209\\"" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "multipart/mixed", + "boundary": "11136253119209", + "params": [ + { + "value": "", + "type": "attachment", + "contentType": "application/octet-stream", + "fileName": "photo1.jpg" + } + ] + } +}`, + }, + { + name: 'Request with transferEncoding=chunked', + message: `{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 269, + "bodySize": 140, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + } + ], + "body": { + "contentType": "text/plain", + "text": "The Transfer-Encoding header specifies the form of encoding used to safely transfer the payload body to the user" + } +}`, + }, + { + name: '──────────', + message: '', + isSeparator: true, + }, + { + name: 'Response without headers and body', + message: `{ + "protocolVersion": "HTTP/1.1", + "statusCode": 204, + "statusMessage": "No content", + "headersSize": 27, + "bodySize": 0, + "headers": [] +}`, + }, + { + name: 'Response without body (header names in lower case)', + message: `{ + "protocolVersion": "HTTP/1.1", + "statusCode": 201, + "statusMessage": "Created", + "headersSize": 136, + "bodySize": 0, + "headers": [ + { + "name": "Connection", + "value": "" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + } + ] +}`, + }, + { + name: 'Response without cookies and body', + message: `{ + "protocolVersion": "HTTP/1.1", + "statusCode": 201, + "statusMessage": "Created", + "headersSize": 309, + "bodySize": 0, + "headers": [ + { + "name": "Connection", + "value": "" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Set-Cookie", + "value": "csrftoken=123abc" + }, + { + "name": "Set-Cookie", + "value": "sessionid=456def; Domain=example.com; Path=/" + }, + { + "name": "Set-Cookie", + "value": "username=smith; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly" + } + ], + "cookies": [ + { + "name": "csrftoken", + "value": "123abc" + }, + { + "name": "sessionid", + "value": "456def", + "params": [ + "Domain=example.com", + "Path=/" + ] + }, + { + "name": "username", + "value": "smith", + "params": [ + "Expires=Wed, 21 Oct 2015 07:28:00 GMT", + "Secure", + "HttpOnly" + ] + } + ] +}`, + }, + { + name: 'Response with body of contentType=text/plain', + message: `{ + "protocolVersion": "HTTP/1.1", + "statusCode": 200, + "statusMessage": "Ok", + "headersSize": 162, + "bodySize": 9, + "headers": [ + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "text/plain", + "text": "Text data" + } +}`, + }, + { + name: 'Response with transferEncoding=chunked', + message: `{ + "protocolVersion": "HTTP/1.1", + "statusCode": 200, + "statusMessage": "Ok", + "headersSize": 169, + "bodySize": 140, + "headers": [ + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + } + ], + "body": { + "contentType": "text/plain", + "text": "The Transfer-Encoding header specifies the form of encoding used to safely transfer the payload body to the user" + } +}`, + }, +] diff --git a/demo/src/environments/environment.development.ts b/demo/src/environments/environment.development.ts new file mode 100644 index 0000000..a868a1f --- /dev/null +++ b/demo/src/environments/environment.development.ts @@ -0,0 +1,3 @@ +export const environment = { + production: false, +} diff --git a/demo/src/environments/environment.ts b/demo/src/environments/environment.ts new file mode 100644 index 0000000..970e25b --- /dev/null +++ b/demo/src/environments/environment.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true, +} diff --git a/demo/src/index.html b/demo/src/index.html new file mode 100644 index 0000000..e355a19 --- /dev/null +++ b/demo/src/index.html @@ -0,0 +1,14 @@ + + + + + + + HttpZ Demo + + + + + + + diff --git a/demo/src/main.ts b/demo/src/main.ts new file mode 100644 index 0000000..43c971b --- /dev/null +++ b/demo/src/main.ts @@ -0,0 +1,8 @@ +import { bootstrapApplication } from '@angular/platform-browser' + +import { AppComponent } from '@app/app.component' +import { appConfig } from '@app/app.config' + +bootstrapApplication(AppComponent, appConfig) + // eslint-disable-next-line no-console + .catch(err => console.error(err)) diff --git a/demo/src/styles.sass b/demo/src/styles.sass new file mode 100644 index 0000000..a54939a --- /dev/null +++ b/demo/src/styles.sass @@ -0,0 +1,5 @@ +.cm-editor + height: calc(100vh - 21rem) + border: 1px solid #ccc + .cm-scroller + max-height: calc(100vh - 21rem) diff --git a/demo/tsconfig.app.json b/demo/tsconfig.app.json new file mode 100644 index 0000000..3775b37 --- /dev/null +++ b/demo/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/demo/tsconfig.json b/demo/tsconfig.json new file mode 100644 index 0000000..224eff0 --- /dev/null +++ b/demo/tsconfig.json @@ -0,0 +1,32 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "paths": { + "@app/*": ["src/app/*"], + }, + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true, + "strictStandalone": true + } +} \ No newline at end of file From 4e46b811f22a9459a4fdc45563ed268285639511 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 10:47:16 +0300 Subject: [PATCH 08/13] change lib version --- dist/index.js | 2 +- src/utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index a3312f0..826f0ee 100644 --- a/dist/index.js +++ b/dist/index.js @@ -18,7 +18,7 @@ } const getLibVersion = () => { - return '8.0.0-dev'; + return '8.0.0-alpha'; }; const splitBy = (str, delimiter) => { if (isEmpty(str)) { diff --git a/src/utils.ts b/src/utils.ts index 80f4fec..9dc5e57 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -8,7 +8,7 @@ export type ParsedUrl = { } export const getLibVersion = (): string => { - return '8.0.0-dev' + return '8.0.0-alpha' } export const splitBy = (str: string, delimiter: string): string[] => { From 932608a17b3bf73eb3296c44d9d2fa768616c719 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 10:51:18 +0300 Subject: [PATCH 09/13] build demo --- docs/index.html | 14 + docs/main-J346X6FH.js | 641 +++++++++++++++++++++++++++++++++++++ docs/polyfills-SC4UBBZS.js | 2 + docs/styles-PMBODT4Z.css | 1 + 4 files changed, 658 insertions(+) create mode 100644 docs/index.html create mode 100644 docs/main-J346X6FH.js create mode 100644 docs/polyfills-SC4UBBZS.js create mode 100644 docs/styles-PMBODT4Z.css diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..fdedaf0 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,14 @@ + + + + + + + HttpZ Demo + + + + + + + diff --git a/docs/main-J346X6FH.js b/docs/main-J346X6FH.js new file mode 100644 index 0000000..856b49f --- /dev/null +++ b/docs/main-J346X6FH.js @@ -0,0 +1,641 @@ +var r2=Object.create;var Up=Object.defineProperty,i2=Object.defineProperties,o2=Object.getOwnPropertyDescriptor,s2=Object.getOwnPropertyDescriptors,a2=Object.getOwnPropertyNames,$D=Object.getOwnPropertySymbols,l2=Object.getPrototypeOf,WD=Object.prototype.hasOwnProperty,u2=Object.prototype.propertyIsEnumerable;var zD=(n,e,t)=>e in n?Up(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,tt=(n,e)=>{for(var t in e||={})WD.call(e,t)&&zD(n,t,e[t]);if($D)for(var t of $D(e))u2.call(e,t)&&zD(n,t,e[t]);return n},ft=(n,e)=>i2(n,s2(e));var qD=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var c2=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of a2(e))!WD.call(n,i)&&i!==t&&Up(n,i,{get:()=>e[i],enumerable:!(r=o2(e,i))||r.enumerable});return n};var $p=(n,e,t)=>(t=n!=null?r2(l2(n)):{},c2(e||!n||!n.__esModule?Up(t,"default",{value:n,enumerable:!0}):t,n));var hw=qD((_h,wA)=>{"use strict";(function(n,e){typeof _h=="object"&&typeof wA<"u"?e(_h):typeof define=="function"&&define.amd?define(["exports"],e):(n=typeof globalThis<"u"?globalThis:n||self,e(n.httpZ={}))})(_h,function(n){"use strict";class e extends Error{static get(...A){return new e(...A)}details;constructor(A,N){super(A),this.name=this.constructor.name,this.details=N,Error.captureStackTrace(this,this.constructor)}}let t=()=>"8.0.0-dev",r=(T,A)=>{if(m(T))return[];let N=T.indexOf(A);if(N===-1)return[];let X=[T.slice(0,N),T.slice(N+A.length)];return X[0]=X[0].trim(),X[1]=X[1].trim(),X},i=T=>/^[a-zA-Z]:\\/.test(T)?!1:/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(T),o=(T,A)=>{["http","https"].some(Ke=>A.startsWith(Ke+"://"))||(A="http://"+A);let X=T?new URL(T,A):new URL(A),xe=X.protocol.replace(":","").toUpperCase(),rt=[];return X.searchParams.forEach((Ke,Ct)=>rt.push({name:Ct,value:Ke})),{protocol:xe,host:X.host,path:X.pathname,params:rt}},s=T=>T.map(({name:A,value:N})=>[A,u(N)]),l=T=>(T??"").toString().split("-").map(P).join("-"),u=T=>d(T)?"":T,f=(T,A,N)=>{d(N)||(T[A]=N)},d=T=>T===void 0,p=T=>T==null,m=T=>{if(p(T))return!0;if(T.length||T.size)return!1;if(typeof T!="object")return!0;for(let A in T)if(Object.hasOwn(T,A))return!1;return!0},y=T=>typeof T=="string",w=T=>typeof T=="number",C=T=>Array.isArray(T),S=T=>T instanceof Error,_=T=>{if(typeof T!="object"||T===null||Object.prototype.toString.call(T)!=="[object Object]")return!1;let A=Object.getPrototypeOf(T);if(A===null)return!0;let N=Object.prototype.hasOwnProperty.call(A,"constructor")&&A.constructor;return typeof N=="function"&&N instanceof N&&Function.prototype.call(N)===Function.prototype.call(T)},P=T=>T?T.charAt(0).toUpperCase()+T.slice(1).toLowerCase():"",B=T=>{let[A,...N]=T;return A},j=T=>{let[A,...N]=T;return N},R=(T,A=void 0)=>p(T)?T:(T=T.toString(),A===void 0||A==="\\s"?T.trim():T.replace(new RegExp(`^([${A}]*)(.*?)([${A}]*)$`),"$2")),U=(T,A=void 0)=>p(T)?T:(T=T.toString(),A===void 0||A==="\\s"?T.trimEnd():T.replace(new RegExp(`^(.*?)([${A}]*)$`),"$1"));var z=Object.freeze({__proto__:null,arrayToPairs:s,capitalize:P,extendIfNotUndefined:f,getEmptyStringForUndefined:u,getLibVersion:t,head:B,isAbsoluteUrl:i,isArray:C,isEmpty:m,isError:S,isNil:p,isNumber:w,isPlainObject:_,isString:y,isUndefined:d,parseUrl:o,prettifyHeaderName:l,splitBy:r,tail:j,trim:R,trimEnd:U});let ie=(T,A,N)=>{if(p(T))throw e.get(`${A} is required`,N)},he=(T,A,N)=>{if(ie(T,A,N),!y(T))throw e.get(`${A} must be a string`,N)},pe=(T,A,N)=>{if(he(T,A,N),m(T))throw e.get(`${A} must be not empty string`,N)},ce=(T,A,N)=>{if(ie(T,A,N),!w(T))throw e.get(`${A} must be a number`,N)},ee=(T,A,N)=>{if(ce(T,A,N),T<=0)throw e.get(`${A} must be a positive number`,N)},Ce=(T,A,N)=>{if(ie(T,A,N),!C(T))throw e.get(`${A} must be an array`,N)},Q=`\r +`,ye=Q+Q,$e="[\\u0009\\u0020-\\u007E]",Dt="[A-Za-z0-9_.\\[\\]-]",Tt="(CONNECT|OPTIONS|TRACE|GET|HEAD|POST|PUT|PATCH|DELETE)",ke="(HTTP)\\/(1\\.0|1\\.1|2(\\.0){0,1})",Ae={quote:/"/g,startNl:new RegExp(`^${Q}`),endNl:new RegExp(`${Q}$`),requestStartRow:new RegExp(`^${Tt} \\S* ${ke}$`),responseStartRow:new RegExp(`^${ke} \\d{3} ${$e}*$`),quotedHeaderValue:new RegExp('^"[\\u0009\\u0020\\u0021\\u0023-\\u007E]+"$'),boundary:/(?<=boundary=)"{0,1}[A-Za-z0-9'()+_,.:=?-]+"{0,1}/,contentDisposition:new RegExp(`^Content-Disposition: *(form-data|inline|attachment)${$e}*${Q}`,"i"),contentType:new RegExp(`^Content-Type:[\\S ]*${Q}`,"i"),contentDispositionType:/(?<=Content-Disposition:) *(form-data|inline|attachment)/,dispositionName:new RegExp(`(?<=name=)"${Dt}+"`,"i"),dispositionFileName:new RegExp(`(?<=filename=)"${Dt}+"`,"i"),chunkRow:new RegExp(`^[0-9a-fA-F]+${Q}`)};var tn=function(T){return T.http="HTTP",T.https="HTTPS",T}(tn||{}),At=function(T){return T.http10="HTTP/1.0",T.http11="HTTP/1.1",T.http20="HTTP/2.0",T}(At||{}),nt=function(T){return T.connect="CONNECT",T.options="OPTIONS",T.trace="TRACE",T.head="HEAD",T.get="GET",T.post="POST",T.put="PUT",T.patch="PATCH",T.delete="DELETE",T}(nt||{});let nn=[nt.post,nt.put,nt.patch];var Wt=function(T){return T.host="Host",T.contentType="Content-Type",T.contentLength="Content-Length",T.userAgent="User-Agent",T.setCookie="Set-Cookie",T.transferEncoding="Transfer-Encoding",T}(Wt||{}),pn=function(T){return T.any="text/",T.css="text/css",T.csv="text/csv",T.html="text/html",T.javascript="text/javascript",T.plain="text/plain",T.xml="text/xml",T}(pn||{}),gn=function(T){return T.any="application/",T.javascript="application/javascript",T.json="application/json",T.octetStream="application/octet-stream",T.ogg="application/ogg",T.pdf="application/pdf",T.xhtml="application/xhtml+xml",T.xml="application/xml",T.xShockwaveFlash="application/x-shockwave-flash",T.xWwwFormUrlencoded="application/x-www-form-urlencoded",T.zip="application/zip",T}(gn||{}),Ln=function(T){return T.any="multipart/",T.alternative="multipart/alternative",T.formData="multipart/form-data",T.mixed="multipart/mixed",T.related="multipart/related",T}(Ln||{}),eo=function(T){return T.any="image/",T.gif="image/gif",T.jpeg="image/jpeg",T.png="image/png",T.tiff="image/tiff",T.icon="image/x-icon",T}(eo||{}),to=function(T){return T.any="audio/",T}(to||{}),ma=function(T){return T.any="video/",T}(ma||{}),rn=function(T){return T.any="font/",T}(rn||{}),no=Object.freeze({__proto__:null,EOL:Q,EOL2X:ye,get HttpContentApplicationType(){return gn},get HttpContentAudioType(){return to},get HttpContentFonType(){return rn},get HttpContentImageType(){return eo},get HttpContentMultipartType(){return Ln},get HttpContentTextType(){return pn},get HttpContentVideoType(){return ma},get HttpHeader(){return Wt},get HttpMethod(){return nt},HttpPostMethods:nn,get HttpProtocol(){return tn},get HttpProtocolVersion(){return At},regexps:Ae});class mu{headers;body;constructor(A,N){this.headers=A,this.body=N}_generateHeaderRows(){return Ce(this.headers,"headers"),m(this.headers)?"":this.headers.map((N,X)=>{pe(N.name,"header name",`header index: ${X}`),he(N.value,"header.value",`header index: ${X}`);let xe=l(N.name),rt=N.value;return xe+": "+rt}).join(Q)+Q}_generateBodyRows(){if(m(this.body))return"";switch(this._processTransferEncodingChunked(),this.body.contentType){case Ln.formData:case Ln.alternative:case Ln.mixed:case Ln.related:return this._generateFormDataBody();case gn.xWwwFormUrlencoded:return this._generateUrlencodedBody();default:return this._generateTextBody()}}_processTransferEncodingChunked(){if(!this.headers.find(Ke=>Ke.name===Wt.transferEncoding.toString()&&Ke.value.includes("chunked")))return;let N=u(this.body.text),X=25,xe=[],rt=0;for(;rt{N.type||pe(N.name,"body.params[index].name",`param index: ${X}`);let xe="--"+this.body.boundary;return xe+=Q,xe+=`Content-Disposition: ${N.type||"form-data"}`,N.name&&(xe+=`; name="${N.name}"`),N.fileName&&(xe+=`; filename="${N.fileName}"`),xe+=Q,N.contentType&&(xe+=`Content-Type: ${N.contentType}`,xe+=Q),xe+=Q,xe+=u(N.value),xe+=Q,xe}).join("")}--${this.body.boundary}--`}_generateUrlencodedBody(){Ce(this.body.params,"body.params");let A=s(this.body.params);return new URLSearchParams(A).toString()}_generateTextBody(){return u(this.body.text)}}class mn extends mu{static build(...A){return new mn(...A).build()}method;protocolVersion;target;opts;constructor(A,N){super(A.headers,A.body),this.method=A.method,this.protocolVersion=A.protocolVersion,this.target=A.target,this.opts=N}build(){return""+this._generateStartRow()+this._generateHeaderRows()+Q+this._generateBodyRows()}_generateStartRow(){return pe(this.method,"method"),pe(this.protocolVersion,"protocolVersion"),pe(this.target,"target"),""+this.method.toUpperCase()+" "+this.target+" "+this.protocolVersion.toUpperCase()+Q}_generateHeaderRows(){if(Ce(this.headers,"headers"),this.opts.mandatoryHost&&!this.headers.find(N=>l(N.name)===Wt.host.toString()))throw e.get("Host header is required");return super._generateHeaderRows()}}class Yo extends mu{static build(...A){return new Yo(...A).build()}protocolVersion;statusCode;statusMessage;constructor(A){super(A.headers,A.body),this.protocolVersion=A.protocolVersion,this.statusCode=A.statusCode,this.statusMessage=A.statusMessage}build(){return""+this._generateStartRow()+this._generateHeaderRows()+Q+this._generateBodyRows()}_generateStartRow(){return pe(this.protocolVersion,"protocolVersion"),ee(this.statusCode,"statusCode"),pe(this.statusMessage,"statusMessage"),`${this.protocolVersion.toUpperCase()} ${this.statusCode} ${this.statusMessage}`+Q}}function Ih(T,A={}){if(p(T))throw e.get("messageModel is required");if(!_(T))throw e.get("messageModel must be a plain object");if("method"in T)return mn.build(T,A);if("statusCode"in T)return Yo.build(T);throw e.get("messageModel has incorrect format")}class zr{paramGroup;static parse(...A){return new zr(...A).parse()}constructor(A){this.paramGroup=A}parse(){this.paramGroup=this.paramGroup.replace(Ae.startNl,"").replace(Ae.endNl,"");let A=this._getContentDisposition(),N=this._getContentType(),X=this._getDispositionType(A),xe=X==="form-data"?this._getParamName(A):void 0,rt=this._getFileName(A),Ct={value:this._getParamValue()};return X!=="form-data"&&(Ct.type=X),f(Ct,"contentType",N),f(Ct,"name",xe),f(Ct,"fileName",rt),Ct}_getContentDisposition(){let A=this.paramGroup.match(Ae.contentDisposition);if(A)return this.paramGroup=this.paramGroup.replace(A[0],""),U(A[0],Q);throw e.get("Incorrect Content-Disposition",this.paramGroup)}_getContentType(){let A=this.paramGroup.match(Ae.contentType);if(A)return this.paramGroup=this.paramGroup.replace(A[0],""),U(A.toString().toLowerCase().replace(/^content-type: */,""),Q)}_getDispositionType(A){let N=A.match(Ae.contentDispositionType);if(N)return N[0].trim().toLowerCase();throw e.get("Incorrect Content-Disposition type",A)}_getParamName(A){let N=A.match(Ae.dispositionName);if(N)return R(N[0],'"');throw e.get("Incorrect Content-Disposition, expected param name",A)}_getFileName(A){let N=A.match(Ae.dispositionFileName);if(N)return R(N[0],'"')}_getParamValue(){if(this.paramGroup.match(Ae.startNl))return this.paramGroup.replace(Ae.startNl,"");throw e.get("Incorrect form-data parameter",this.paramGroup)}}class on{rawMessage;startRow;headerRows;bodyRows;headers;headersSize;body;bodySize;constructor(A){this.rawMessage=A}_parseMessageForRows(){let[A,N]=r(this.rawMessage,ye);if(p(A)||p(N))throw e.get("Incorrect message format, expected: start-line CRLF *(header-field CRLF) CRLF [message-body]");this._calcSizes(A,N);let X=A.split(Q);this.startRow=B(X),this.headerRows=j(X),this.bodyRows=N}_parseHeaderRows(){this.headers=this.headerRows.map(A=>{let[N,X]=r(A,":");if(!N)throw e.get("Incorrect header row format, expected: Name: Value",A);return p(X)?X="":Ae.quotedHeaderValue.test(X)&&(X=R(X,'"')),{name:l(N),value:X}})}_parseBodyRows(){if(!this.bodyRows)return;this._processTransferEncodingChunked(),this.body={};let A=this._getContentTypeValue();switch(A&&(this.body.contentType=A.toLowerCase().split(";")[0]),this.body.contentType){case Ln.formData:case Ln.alternative:case Ln.mixed:case Ln.related:this._parseFormDataBody();break;case gn.xWwwFormUrlencoded:this._parseUrlencodedBody();break;default:this._parseTextBody();break}}_processTransferEncodingChunked(){if(!this.headers.find(xe=>xe.name===Wt.transferEncoding.toString()&&xe.value.includes("chunked")))return;let N=this.bodyRows,X=[];do{let xe=N.match(Ae.chunkRow),rt=xe?xe[0]:"",Ke=+("0x"+rt||"").trim();if(!Ke)throw e.get("Incorrect row, expected: NumberEOL",this.bodyRows);N=N.slice(rt.length);let Ct=N.slice(0,Ke);X.push(Ct),N=N.slice(Ke+Q.length)}while(N);this.bodyRows=X.join("")}_parseFormDataBody(){this.body.boundary=this._getBoundary(),this.body.params=this.bodyRows.split(`--${this.body.boundary}`).filter((A,N,X)=>N>0&&Nzr.parse(A))}_parseUrlencodedBody(){let A=new URLSearchParams(this.bodyRows);this.body.params=[],A.forEach((N,X)=>{this.body.params.push({name:X,value:N})})}_parseTextBody(){this.body.text=this.bodyRows}_calcSizes(A,N){this.headersSize=(A+ye).length,this.bodySize=N.length}_getContentTypeValue(){let A=this.headers.find(N=>N.name===Wt.contentType.toString());if(A&&A.value)return A.value}_getBoundary(){let A=this._getContentTypeValue();if(!A)throw e.get("Message with multipart/form-data body must have Content-Type header with boundary");let N=A.split(";")[1];if(!N)throw e.get("Message with multipart/form-data body must have Content-Type header with boundary");let X=N.match(Ae.boundary);if(!X)throw e.get("Incorrect boundary, expected: boundary=value",N);return R(X[0],'"')}}let pi="superrandomhost28476561927456.com";class gi extends on{opts;static parse(...A){return new gi(...A).parse()}method;target;host;path;protocolVersion;hostRow;cookiesRow;queryParams;cookies;constructor(A,N){super(A),this.opts=N}parse(){return this._parseMessageForRows(),this._parseHostRow(),this._parseStartRow(),this._parseHeaderRows(),this._parseCookieRows(),this._parseBodyRows(),this._generateModel()}_parseMessageForRows(){super._parseMessageForRows(),this.hostRow=this.headerRows.find(A=>A.toLowerCase().startsWith("host:")),this.cookiesRow=this.headerRows.find(A=>A.toLowerCase().startsWith("cookie:"))}_parseHostRow(){this.opts.mandatoryHost&&pe(this.hostRow,"host header");let[A,N]=r(this.hostRow||"",":");this.opts.mandatoryHost&&pe(N,"host header value"),this.host=N}_parseStartRow(){if(!Ae.requestStartRow.test(this.startRow))throw e.get("Incorrect startRow format, expected: Method request-target HTTP-Version",this.startRow);let A=this.startRow.split(" ");this.method=A[0].toUpperCase(),this.protocolVersion=A[2].toUpperCase(),this.target=A[1];let N;try{N=o(this.target,pi)}catch(X){throw X.code==="ERR_INVALID_URL"?e.get("Invalid target",this.target):X}this.host||(this.host=N.host!==pi?N.host:"unspecified-host"),this.path=N.path,this.queryParams=N.params}_parseCookieRows(){if(!this.cookiesRow)return;let[A,N]=r(this.cookiesRow,":");if(!A)throw e.get("Incorrect cookie row format, expected: Cookie: Name1=Value1;...",this.cookiesRow);if(!N){this.cookies=[];return}this.cookies=N.split(";").map(X=>{let[xe,rt]=r(X,"="),Ke={name:xe};if(rt&&(Ke.value=rt),!Ke.name)throw e.get("Incorrect cookie pair format, expected: Name1=Value1;...",N);return Ke})}_generateModel(){let A={method:this.method,protocolVersion:this.protocolVersion,target:this.target,host:this.host,path:this.path,headers:this.headers,headersSize:this.headersSize,bodySize:this.bodySize};return this.queryParams&&(A.queryParams=this.queryParams),this.cookies&&(A.cookies=this.cookies),this.body&&(A.body=this.body),A}}class ya extends on{static parse(...A){return new ya(...A).parse()}protocolVersion;statusCode;statusMessage;cookieRows;cookies;parse(){return this._parseMessageForRows(),this._parseStartRow(),this._parseHeaderRows(),this._parseCookieRows(),this._parseBodyRows(),this._generateModel()}_parseMessageForRows(){super._parseMessageForRows(),this.cookieRows=this.headerRows.filter(A=>A.toLowerCase().startsWith("set-cookie"))}_parseStartRow(){if(!Ae.responseStartRow.test(this.startRow))throw e.get("Incorrect startRow format, expected: HTTP-Version status-code reason-phrase",this.startRow);let A=this.startRow.split(" ");this.protocolVersion=A[0].toUpperCase(),this.statusCode=+A[1],this.statusMessage=A.splice(2).join(" ")}_parseCookieRows(){m(this.cookieRows)||(this.cookies=this.cookieRows.map(A=>{let[N,X]=r(A,":");if(!X)return{};let xe=X.split(";"),rt=B(xe),Ke=j(xe),[Ct,mi]=rt.split("=");if(Ct=Ct.trim(),mi=mi.trim(),!Ct)throw e.get("Incorrect set-cookie pair format, expected: Name1=Value1;...",X);let io={name:Ct};return mi&&(io.value=mi),Ke.length>0&&(io.params=Ke.map(va=>va.trim())),io}))}_generateModel(){let A={protocolVersion:this.protocolVersion,statusCode:this.statusCode,statusMessage:this.statusMessage,headers:this.headers,headersSize:this.headersSize,bodySize:this.bodySize};return this.cookies&&(A.cookies=this.cookies),this.body&&(A.body=this.body),A}}function ro(T,A={}){if(p(T))throw e.get("rawMessage is required");if(!y(T))throw e.get("rawMessage must be a string");let N=B(T.split(Q));if(Ae.requestStartRow.test(N))return gi.parse(T,A);if(Ae.responseStartRow.test(N))return ya.parse(T);throw e.get("rawMessage has incorrect format")}n.HttpZError=e,n.build=Ih,n.consts=no,n.parse=ro,n.utils=z})});var bA=qD((ga,gu)=>{"use strict";(function(){var n,e="4.17.21",t=200,r="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",o="Invalid `variable` option passed into `_.template`",s="__lodash_hash_undefined__",l=500,u="__lodash_placeholder__",f=1,d=2,p=4,m=1,y=2,w=1,C=2,S=4,_=8,P=16,B=32,j=64,R=128,U=256,z=512,ie=30,he="...",pe=800,ce=16,ee=1,Ce=2,Q=3,ye=1/0,$e=9007199254740991,Dt=17976931348623157e292,Tt=NaN,ke=4294967295,Ae=ke-1,tn=ke>>>1,At=[["ary",R],["bind",w],["bindKey",C],["curry",_],["curryRight",P],["flip",z],["partial",B],["partialRight",j],["rearg",U]],nt="[object Arguments]",nn="[object Array]",Wt="[object AsyncFunction]",pn="[object Boolean]",gn="[object Date]",Ln="[object DOMException]",eo="[object Error]",to="[object Function]",ma="[object GeneratorFunction]",rn="[object Map]",no="[object Number]",mu="[object Null]",mn="[object Object]",Yo="[object Promise]",Ih="[object Proxy]",zr="[object RegExp]",on="[object Set]",pi="[object String]",gi="[object Symbol]",ya="[object Undefined]",ro="[object WeakMap]",T="[object WeakSet]",A="[object ArrayBuffer]",N="[object DataView]",X="[object Float32Array]",xe="[object Float64Array]",rt="[object Int8Array]",Ke="[object Int16Array]",Ct="[object Int32Array]",mi="[object Uint8Array]",io="[object Uint8ClampedArray]",va="[object Uint16Array]",Th="[object Uint32Array]",SA=/\b__p \+= '';/g,EA=/\b(__p \+=) '' \+/g,_A=/(__e\(.*?\)|\b__t\)) \+\n'';/g,pw=/&(?:amp|lt|gt|quot|#39);/g,gw=/[&<>"']/g,MA=RegExp(pw.source),IA=RegExp(gw.source),TA=/<%-([\s\S]+?)%>/g,AA=/<%([\s\S]+?)%>/g,mw=/<%=([\s\S]+?)%>/g,kA=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,NA=/^\w*$/,OA=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ah=/[\\^$.*+?()[\]{}|]/g,RA=RegExp(Ah.source),kh=/^\s+/,PA=/\s/,FA=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,LA=/\{\n\/\* \[wrapped with (.+)\] \*/,VA=/,? & /,BA=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,HA=/[()=,{}\[\]\/\s]/,jA=/\\(\\)?/g,UA=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,yw=/\w*$/,$A=/^[-+]0x[0-9a-f]+$/i,zA=/^0b[01]+$/i,WA=/^\[object .+?Constructor\]$/,qA=/^0o[0-7]+$/i,GA=/^(?:0|[1-9]\d*)$/,ZA=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,yu=/($^)/,KA=/['\n\r\u2028\u2029\\]/g,vu="\\ud800-\\udfff",YA="\\u0300-\\u036f",QA="\\ufe20-\\ufe2f",JA="\\u20d0-\\u20ff",vw=YA+QA+JA,ww="\\u2700-\\u27bf",bw="a-z\\xdf-\\xf6\\xf8-\\xff",XA="\\xac\\xb1\\xd7\\xf7",ek="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",tk="\\u2000-\\u206f",nk=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Dw="A-Z\\xc0-\\xd6\\xd8-\\xde",Cw="\\ufe0e\\ufe0f",xw=XA+ek+tk+nk,Nh="['\u2019]",rk="["+vu+"]",Sw="["+xw+"]",wu="["+vw+"]",Ew="\\d+",ik="["+ww+"]",_w="["+bw+"]",Mw="[^"+vu+xw+Ew+ww+bw+Dw+"]",Oh="\\ud83c[\\udffb-\\udfff]",ok="(?:"+wu+"|"+Oh+")",Iw="[^"+vu+"]",Rh="(?:\\ud83c[\\udde6-\\uddff]){2}",Ph="[\\ud800-\\udbff][\\udc00-\\udfff]",Qo="["+Dw+"]",Tw="\\u200d",Aw="(?:"+_w+"|"+Mw+")",sk="(?:"+Qo+"|"+Mw+")",kw="(?:"+Nh+"(?:d|ll|m|re|s|t|ve))?",Nw="(?:"+Nh+"(?:D|LL|M|RE|S|T|VE))?",Ow=ok+"?",Rw="["+Cw+"]?",ak="(?:"+Tw+"(?:"+[Iw,Rh,Ph].join("|")+")"+Rw+Ow+")*",lk="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",uk="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Pw=Rw+Ow+ak,ck="(?:"+[ik,Rh,Ph].join("|")+")"+Pw,fk="(?:"+[Iw+wu+"?",wu,Rh,Ph,rk].join("|")+")",dk=RegExp(Nh,"g"),hk=RegExp(wu,"g"),Fh=RegExp(Oh+"(?="+Oh+")|"+fk+Pw,"g"),pk=RegExp([Qo+"?"+_w+"+"+kw+"(?="+[Sw,Qo,"$"].join("|")+")",sk+"+"+Nw+"(?="+[Sw,Qo+Aw,"$"].join("|")+")",Qo+"?"+Aw+"+"+kw,Qo+"+"+Nw,uk,lk,Ew,ck].join("|"),"g"),gk=RegExp("["+Tw+vu+vw+Cw+"]"),mk=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,yk=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],vk=-1,Ye={};Ye[X]=Ye[xe]=Ye[rt]=Ye[Ke]=Ye[Ct]=Ye[mi]=Ye[io]=Ye[va]=Ye[Th]=!0,Ye[nt]=Ye[nn]=Ye[A]=Ye[pn]=Ye[N]=Ye[gn]=Ye[eo]=Ye[to]=Ye[rn]=Ye[no]=Ye[mn]=Ye[zr]=Ye[on]=Ye[pi]=Ye[ro]=!1;var qe={};qe[nt]=qe[nn]=qe[A]=qe[N]=qe[pn]=qe[gn]=qe[X]=qe[xe]=qe[rt]=qe[Ke]=qe[Ct]=qe[rn]=qe[no]=qe[mn]=qe[zr]=qe[on]=qe[pi]=qe[gi]=qe[mi]=qe[io]=qe[va]=qe[Th]=!0,qe[eo]=qe[to]=qe[ro]=!1;var wk={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},bk={"&":"&","<":"<",">":">",'"':""","'":"'"},Dk={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ck={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},xk=parseFloat,Sk=parseInt,Fw=typeof global=="object"&&global&&global.Object===Object&&global,Ek=typeof self=="object"&&self&&self.Object===Object&&self,xt=Fw||Ek||Function("return this")(),Lh=typeof ga=="object"&&ga&&!ga.nodeType&&ga,oo=Lh&&typeof gu=="object"&&gu&&!gu.nodeType&&gu,Lw=oo&&oo.exports===Lh,Vh=Lw&&Fw.process,Vn=function(){try{var M=oo&&oo.require&&oo.require("util").types;return M||Vh&&Vh.binding&&Vh.binding("util")}catch{}}(),Vw=Vn&&Vn.isArrayBuffer,Bw=Vn&&Vn.isDate,Hw=Vn&&Vn.isMap,jw=Vn&&Vn.isRegExp,Uw=Vn&&Vn.isSet,$w=Vn&&Vn.isTypedArray;function yn(M,O,k){switch(k.length){case 0:return M.call(O);case 1:return M.call(O,k[0]);case 2:return M.call(O,k[0],k[1]);case 3:return M.call(O,k[0],k[1],k[2])}return M.apply(O,k)}function _k(M,O,k,K){for(var ae=-1,Ne=M==null?0:M.length;++ae-1}function Bh(M,O,k){for(var K=-1,ae=M==null?0:M.length;++K-1;);return k}function Qw(M,O){for(var k=M.length;k--&&Jo(O,M[k],0)>-1;);return k}function Pk(M,O){for(var k=M.length,K=0;k--;)M[k]===O&&++K;return K}var Fk=$h(wk),Lk=$h(bk);function Vk(M){return"\\"+Ck[M]}function Bk(M,O){return M==null?n:M[O]}function Xo(M){return gk.test(M)}function Hk(M){return mk.test(M)}function jk(M){for(var O,k=[];!(O=M.next()).done;)k.push(O.value);return k}function Gh(M){var O=-1,k=Array(M.size);return M.forEach(function(K,ae){k[++O]=[ae,K]}),k}function Jw(M,O){return function(k){return M(O(k))}}function wi(M,O){for(var k=-1,K=M.length,ae=0,Ne=[];++k-1}function IN(a,c){var h=this.__data__,g=Lu(h,a);return g<0?(++this.size,h.push([a,c])):h[g][1]=c,this}Wr.prototype.clear=SN,Wr.prototype.delete=EN,Wr.prototype.get=_N,Wr.prototype.has=MN,Wr.prototype.set=IN;function qr(a){var c=-1,h=a==null?0:a.length;for(this.clear();++c=c?a:c)),a}function Un(a,c,h,g,v,D){var x,E=c&f,I=c&d,F=c&p;if(h&&(x=v?h(a,g,v,D):h(a)),x!==n)return x;if(!it(a))return a;var L=ue(a);if(L){if(x=NO(a),!E)return sn(a,x)}else{var H=Bt(a),q=H==to||H==ma;if(_i(a))return Rb(a,E);if(H==mn||H==nt||q&&!v){if(x=I||q?{}:Xb(a),!E)return I?DO(a,zN(x,a)):bO(a,cb(x,a))}else{if(!qe[H])return v?a:{};x=OO(a,H,E)}}D||(D=new sr);var Y=D.get(a);if(Y)return Y;D.set(a,x),ID(a)?a.forEach(function(re){x.add(Un(re,c,h,re,a,D))}):_D(a)&&a.forEach(function(re,ve){x.set(ve,Un(re,c,h,ve,a,D))});var ne=F?I?wp:vp:I?ln:St,ge=L?n:ne(a);return Bn(ge||a,function(re,ve){ge&&(ve=re,re=a[ve]),Ea(x,ve,Un(re,c,h,ve,a,D))}),x}function WN(a){var c=St(a);return function(h){return fb(h,a,c)}}function fb(a,c,h){var g=h.length;if(a==null)return!g;for(a=ze(a);g--;){var v=h[g],D=c[v],x=a[v];if(x===n&&!(v in a)||!D(x))return!1}return!0}function db(a,c,h){if(typeof a!="function")throw new Hn(i);return Na(function(){a.apply(n,h)},c)}function _a(a,c,h,g){var v=-1,D=bu,x=!0,E=a.length,I=[],F=c.length;if(!E)return I;h&&(c=et(c,vn(h))),g?(D=Bh,x=!1):c.length>=t&&(D=wa,x=!1,c=new lo(c));e:for(;++vv?0:v+h),g=g===n||g>v?v:fe(g),g<0&&(g+=v),g=h>g?0:AD(g);h0&&h(E)?c>1?kt(E,c-1,h,g,v):vi(v,E):g||(v[v.length]=E)}return v}var ep=Hb(),gb=Hb(!0);function Cr(a,c){return a&&ep(a,c,St)}function tp(a,c){return a&&gb(a,c,St)}function Bu(a,c){return yi(c,function(h){return Qr(a[h])})}function co(a,c){c=Si(c,a);for(var h=0,g=c.length;a!=null&&hc}function ZN(a,c){return a!=null&&Fe.call(a,c)}function KN(a,c){return a!=null&&c in ze(a)}function YN(a,c,h){return a>=Vt(c,h)&&a=120&&L.length>=120)?new lo(x&&L):n}L=a[0];var H=-1,q=E[0];e:for(;++H-1;)E!==a&&Au.call(E,I,1),Au.call(a,I,1);return a}function _b(a,c){for(var h=a?c.length:0,g=h-1;h--;){var v=c[h];if(h==g||v!==D){var D=v;Yr(v)?Au.call(a,v,1):fp(a,v)}}return a}function lp(a,c){return a+Ou(sb()*(c-a+1))}function uO(a,c,h,g){for(var v=-1,D=vt(Nu((c-a)/(h||1)),0),x=k(D);D--;)x[g?D:++v]=a,a+=h;return x}function up(a,c){var h="";if(!a||c<1||c>$e)return h;do c%2&&(h+=a),c=Ou(c/2),c&&(a+=a);while(c);return h}function me(a,c){return _p(nD(a,c,un),a+"")}function cO(a){return ub(us(a))}function fO(a,c){var h=us(a);return Yu(h,uo(c,0,h.length))}function Ta(a,c,h,g){if(!it(a))return a;c=Si(c,a);for(var v=-1,D=c.length,x=D-1,E=a;E!=null&&++vv?0:v+c),h=h>v?v:h,h<0&&(h+=v),v=c>h?0:h-c>>>0,c>>>=0;for(var D=k(v);++g>>1,x=a[D];x!==null&&!bn(x)&&(h?x<=c:x=t){var F=c?null:EO(a);if(F)return Cu(F);x=!1,v=wa,I=new lo}else I=c?[]:E;e:for(;++g=g?a:$n(a,c,h)}var Ob=nN||function(a){return xt.clearTimeout(a)};function Rb(a,c){if(c)return a.slice();var h=a.length,g=tb?tb(h):new a.constructor(h);return a.copy(g),g}function gp(a){var c=new a.constructor(a.byteLength);return new Iu(c).set(new Iu(a)),c}function mO(a,c){var h=c?gp(a.buffer):a.buffer;return new a.constructor(h,a.byteOffset,a.byteLength)}function yO(a){var c=new a.constructor(a.source,yw.exec(a));return c.lastIndex=a.lastIndex,c}function vO(a){return Sa?ze(Sa.call(a)):{}}function Pb(a,c){var h=c?gp(a.buffer):a.buffer;return new a.constructor(h,a.byteOffset,a.length)}function Fb(a,c){if(a!==c){var h=a!==n,g=a===null,v=a===a,D=bn(a),x=c!==n,E=c===null,I=c===c,F=bn(c);if(!E&&!F&&!D&&a>c||D&&x&&I&&!E&&!F||g&&x&&I||!h&&I||!v)return 1;if(!g&&!D&&!F&&a=E)return I;var F=h[g];return I*(F=="desc"?-1:1)}}return a.index-c.index}function Lb(a,c,h,g){for(var v=-1,D=a.length,x=h.length,E=-1,I=c.length,F=vt(D-x,0),L=k(I+F),H=!g;++E1?h[v-1]:n,x=v>2?h[2]:n;for(D=a.length>3&&typeof D=="function"?(v--,D):n,x&&Gt(h[0],h[1],x)&&(D=v<3?n:D,v=1),c=ze(c);++g-1?v[D?c[x]:x]:n}}function $b(a){return Kr(function(c){var h=c.length,g=h,v=jn.prototype.thru;for(a&&c.reverse();g--;){var D=c[g];if(typeof D!="function")throw new Hn(i);if(v&&!x&&Zu(D)=="wrapper")var x=new jn([],!0)}for(g=x?g:h;++g1&&Me.reverse(),L&&IE))return!1;var F=D.get(a),L=D.get(c);if(F&&L)return F==c&&L==a;var H=-1,q=!0,Y=h&y?new lo:n;for(D.set(a,c),D.set(c,a);++H1?"& ":"")+c[g],c=c.join(h>2?", ":" "),a.replace(FA,`{ +/* [wrapped with `+c+`] */ +`)}function PO(a){return ue(a)||po(a)||!!(ib&&a&&a[ib])}function Yr(a,c){var h=typeof a;return c=c??$e,!!c&&(h=="number"||h!="symbol"&&GA.test(a))&&a>-1&&a%1==0&&a0){if(++c>=pe)return arguments[0]}else c=0;return a.apply(n,arguments)}}function Yu(a,c){var h=-1,g=a.length,v=g-1;for(c=c===n?g:c;++h1?a[c-1]:n;return h=typeof h=="function"?(a.pop(),h):n,pD(a,h)});function gD(a){var c=b(a);return c.__chain__=!0,c}function qR(a,c){return c(a),a}function Qu(a,c){return c(a)}var GR=Kr(function(a){var c=a.length,h=c?a[0]:0,g=this.__wrapped__,v=function(D){return Xh(D,a)};return c>1||this.__actions__.length||!(g instanceof Se)||!Yr(h)?this.thru(v):(g=g.slice(h,+h+(c?1:0)),g.__actions__.push({func:Qu,args:[v],thisArg:n}),new jn(g,this.__chain__).thru(function(D){return c&&!D.length&&D.push(n),D}))});function ZR(){return gD(this)}function KR(){return new jn(this.value(),this.__chain__)}function YR(){this.__values__===n&&(this.__values__=TD(this.value()));var a=this.__index__>=this.__values__.length,c=a?n:this.__values__[this.__index__++];return{done:a,value:c}}function QR(){return this}function JR(a){for(var c,h=this;h instanceof Fu;){var g=lD(h);g.__index__=0,g.__values__=n,c?v.__wrapped__=g:c=g;var v=g;h=h.__wrapped__}return v.__wrapped__=a,c}function XR(){var a=this.__wrapped__;if(a instanceof Se){var c=a;return this.__actions__.length&&(c=new Se(this)),c=c.reverse(),c.__actions__.push({func:Qu,args:[Mp],thisArg:n}),new jn(c,this.__chain__)}return this.thru(Mp)}function eP(){return kb(this.__wrapped__,this.__actions__)}var tP=$u(function(a,c,h){Fe.call(a,h)?++a[h]:Gr(a,h,1)});function nP(a,c,h){var g=ue(a)?zw:qN;return h&&Gt(a,c,h)&&(c=n),g(a,te(c,3))}function rP(a,c){var h=ue(a)?yi:pb;return h(a,te(c,3))}var iP=Ub(uD),oP=Ub(cD);function sP(a,c){return kt(Ju(a,c),1)}function aP(a,c){return kt(Ju(a,c),ye)}function lP(a,c,h){return h=h===n?1:fe(h),kt(Ju(a,c),h)}function mD(a,c){var h=ue(a)?Bn:Ci;return h(a,te(c,3))}function yD(a,c){var h=ue(a)?Mk:hb;return h(a,te(c,3))}var uP=$u(function(a,c,h){Fe.call(a,h)?a[h].push(c):Gr(a,h,[c])});function cP(a,c,h,g){a=an(a)?a:us(a),h=h&&!g?fe(h):0;var v=a.length;return h<0&&(h=vt(v+h,0)),rc(a)?h<=v&&a.indexOf(c,h)>-1:!!v&&Jo(a,c,h)>-1}var fP=me(function(a,c,h){var g=-1,v=typeof c=="function",D=an(a)?k(a.length):[];return Ci(a,function(x){D[++g]=v?yn(c,x,h):Ma(x,c,h)}),D}),dP=$u(function(a,c,h){Gr(a,h,c)});function Ju(a,c){var h=ue(a)?et:bb;return h(a,te(c,3))}function hP(a,c,h,g){return a==null?[]:(ue(c)||(c=c==null?[]:[c]),h=g?n:h,ue(h)||(h=h==null?[]:[h]),Sb(a,c,h))}var pP=$u(function(a,c,h){a[h?0:1].push(c)},function(){return[[],[]]});function gP(a,c,h){var g=ue(a)?Hh:Zw,v=arguments.length<3;return g(a,te(c,4),h,v,Ci)}function mP(a,c,h){var g=ue(a)?Ik:Zw,v=arguments.length<3;return g(a,te(c,4),h,v,hb)}function yP(a,c){var h=ue(a)?yi:pb;return h(a,tc(te(c,3)))}function vP(a){var c=ue(a)?ub:cO;return c(a)}function wP(a,c,h){(h?Gt(a,c,h):c===n)?c=1:c=fe(c);var g=ue(a)?jN:fO;return g(a,c)}function bP(a){var c=ue(a)?UN:hO;return c(a)}function DP(a){if(a==null)return 0;if(an(a))return rc(a)?es(a):a.length;var c=Bt(a);return c==rn||c==on?a.size:op(a).length}function CP(a,c,h){var g=ue(a)?jh:pO;return h&&Gt(a,c,h)&&(c=n),g(a,te(c,3))}var xP=me(function(a,c){if(a==null)return[];var h=c.length;return h>1&&Gt(a,c[0],c[1])?c=[]:h>2&&Gt(c[0],c[1],c[2])&&(c=[c[0]]),Sb(a,kt(c,1),[])}),Xu=rN||function(){return xt.Date.now()};function SP(a,c){if(typeof c!="function")throw new Hn(i);return a=fe(a),function(){if(--a<1)return c.apply(this,arguments)}}function vD(a,c,h){return c=h?n:c,c=a&&c==null?a.length:c,Zr(a,R,n,n,n,n,c)}function wD(a,c){var h;if(typeof c!="function")throw new Hn(i);return a=fe(a),function(){return--a>0&&(h=c.apply(this,arguments)),a<=1&&(c=n),h}}var Tp=me(function(a,c,h){var g=w;if(h.length){var v=wi(h,as(Tp));g|=B}return Zr(a,g,c,h,v)}),bD=me(function(a,c,h){var g=w|C;if(h.length){var v=wi(h,as(bD));g|=B}return Zr(c,g,a,h,v)});function DD(a,c,h){c=h?n:c;var g=Zr(a,_,n,n,n,n,n,c);return g.placeholder=DD.placeholder,g}function CD(a,c,h){c=h?n:c;var g=Zr(a,P,n,n,n,n,n,c);return g.placeholder=CD.placeholder,g}function xD(a,c,h){var g,v,D,x,E,I,F=0,L=!1,H=!1,q=!0;if(typeof a!="function")throw new Hn(i);c=Wn(c)||0,it(h)&&(L=!!h.leading,H="maxWait"in h,D=H?vt(Wn(h.maxWait)||0,c):D,q="trailing"in h?!!h.trailing:q);function Y(ct){var lr=g,Xr=v;return g=v=n,F=ct,x=a.apply(Xr,lr),x}function ne(ct){return F=ct,E=Na(ve,c),L?Y(ct):x}function ge(ct){var lr=ct-I,Xr=ct-F,UD=c-lr;return H?Vt(UD,D-Xr):UD}function re(ct){var lr=ct-I,Xr=ct-F;return I===n||lr>=c||lr<0||H&&Xr>=D}function ve(){var ct=Xu();if(re(ct))return Me(ct);E=Na(ve,ge(ct))}function Me(ct){return E=n,q&&g?Y(ct):(g=v=n,x)}function Dn(){E!==n&&Ob(E),F=0,g=I=v=E=n}function Zt(){return E===n?x:Me(Xu())}function Cn(){var ct=Xu(),lr=re(ct);if(g=arguments,v=this,I=ct,lr){if(E===n)return ne(I);if(H)return Ob(E),E=Na(ve,c),Y(I)}return E===n&&(E=Na(ve,c)),x}return Cn.cancel=Dn,Cn.flush=Zt,Cn}var EP=me(function(a,c){return db(a,1,c)}),_P=me(function(a,c,h){return db(a,Wn(c)||0,h)});function MP(a){return Zr(a,z)}function ec(a,c){if(typeof a!="function"||c!=null&&typeof c!="function")throw new Hn(i);var h=function(){var g=arguments,v=c?c.apply(this,g):g[0],D=h.cache;if(D.has(v))return D.get(v);var x=a.apply(this,g);return h.cache=D.set(v,x)||D,x};return h.cache=new(ec.Cache||qr),h}ec.Cache=qr;function tc(a){if(typeof a!="function")throw new Hn(i);return function(){var c=arguments;switch(c.length){case 0:return!a.call(this);case 1:return!a.call(this,c[0]);case 2:return!a.call(this,c[0],c[1]);case 3:return!a.call(this,c[0],c[1],c[2])}return!a.apply(this,c)}}function IP(a){return wD(2,a)}var TP=gO(function(a,c){c=c.length==1&&ue(c[0])?et(c[0],vn(te())):et(kt(c,1),vn(te()));var h=c.length;return me(function(g){for(var v=-1,D=Vt(g.length,h);++v=c}),po=yb(function(){return arguments}())?yb:function(a){return lt(a)&&Fe.call(a,"callee")&&!rb.call(a,"callee")},ue=k.isArray,zP=Vw?vn(Vw):JN;function an(a){return a!=null&&nc(a.length)&&!Qr(a)}function ut(a){return lt(a)&&an(a)}function WP(a){return a===!0||a===!1||lt(a)&&qt(a)==pn}var _i=oN||jp,qP=Bw?vn(Bw):XN;function GP(a){return lt(a)&&a.nodeType===1&&!Oa(a)}function ZP(a){if(a==null)return!0;if(an(a)&&(ue(a)||typeof a=="string"||typeof a.splice=="function"||_i(a)||ls(a)||po(a)))return!a.length;var c=Bt(a);if(c==rn||c==on)return!a.size;if(ka(a))return!op(a).length;for(var h in a)if(Fe.call(a,h))return!1;return!0}function KP(a,c){return Ia(a,c)}function YP(a,c,h){h=typeof h=="function"?h:n;var g=h?h(a,c):n;return g===n?Ia(a,c,n,h):!!g}function kp(a){if(!lt(a))return!1;var c=qt(a);return c==eo||c==Ln||typeof a.message=="string"&&typeof a.name=="string"&&!Oa(a)}function QP(a){return typeof a=="number"&&ob(a)}function Qr(a){if(!it(a))return!1;var c=qt(a);return c==to||c==ma||c==Wt||c==Ih}function ED(a){return typeof a=="number"&&a==fe(a)}function nc(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=$e}function it(a){var c=typeof a;return a!=null&&(c=="object"||c=="function")}function lt(a){return a!=null&&typeof a=="object"}var _D=Hw?vn(Hw):tO;function JP(a,c){return a===c||ip(a,c,Dp(c))}function XP(a,c,h){return h=typeof h=="function"?h:n,ip(a,c,Dp(c),h)}function eF(a){return MD(a)&&a!=+a}function tF(a){if(VO(a))throw new ae(r);return vb(a)}function nF(a){return a===null}function rF(a){return a==null}function MD(a){return typeof a=="number"||lt(a)&&qt(a)==no}function Oa(a){if(!lt(a)||qt(a)!=mn)return!1;var c=Tu(a);if(c===null)return!0;var h=Fe.call(c,"constructor")&&c.constructor;return typeof h=="function"&&h instanceof h&&Eu.call(h)==Xk}var Np=jw?vn(jw):nO;function iF(a){return ED(a)&&a>=-$e&&a<=$e}var ID=Uw?vn(Uw):rO;function rc(a){return typeof a=="string"||!ue(a)&<(a)&&qt(a)==pi}function bn(a){return typeof a=="symbol"||lt(a)&&qt(a)==gi}var ls=$w?vn($w):iO;function oF(a){return a===n}function sF(a){return lt(a)&&Bt(a)==ro}function aF(a){return lt(a)&&qt(a)==T}var lF=Gu(sp),uF=Gu(function(a,c){return a<=c});function TD(a){if(!a)return[];if(an(a))return rc(a)?or(a):sn(a);if(ba&&a[ba])return jk(a[ba]());var c=Bt(a),h=c==rn?Gh:c==on?Cu:us;return h(a)}function Jr(a){if(!a)return a===0?a:0;if(a=Wn(a),a===ye||a===-ye){var c=a<0?-1:1;return c*Dt}return a===a?a:0}function fe(a){var c=Jr(a),h=c%1;return c===c?h?c-h:c:0}function AD(a){return a?uo(fe(a),0,ke):0}function Wn(a){if(typeof a=="number")return a;if(bn(a))return Tt;if(it(a)){var c=typeof a.valueOf=="function"?a.valueOf():a;a=it(c)?c+"":c}if(typeof a!="string")return a===0?a:+a;a=Kw(a);var h=zA.test(a);return h||qA.test(a)?Sk(a.slice(2),h?2:8):$A.test(a)?Tt:+a}function kD(a){return xr(a,ln(a))}function cF(a){return a?uo(fe(a),-$e,$e):a===0?a:0}function Re(a){return a==null?"":wn(a)}var fF=os(function(a,c){if(ka(c)||an(c)){xr(c,St(c),a);return}for(var h in c)Fe.call(c,h)&&Ea(a,h,c[h])}),ND=os(function(a,c){xr(c,ln(c),a)}),ic=os(function(a,c,h,g){xr(c,ln(c),a,g)}),dF=os(function(a,c,h,g){xr(c,St(c),a,g)}),hF=Kr(Xh);function pF(a,c){var h=is(a);return c==null?h:cb(h,c)}var gF=me(function(a,c){a=ze(a);var h=-1,g=c.length,v=g>2?c[2]:n;for(v&&Gt(c[0],c[1],v)&&(g=1);++h1),D}),xr(a,wp(a),h),g&&(h=Un(h,f|d|p,_O));for(var v=c.length;v--;)fp(h,c[v]);return h});function OF(a,c){return RD(a,tc(te(c)))}var RF=Kr(function(a,c){return a==null?{}:aO(a,c)});function RD(a,c){if(a==null)return{};var h=et(wp(a),function(g){return[g]});return c=te(c),Eb(a,h,function(g,v){return c(g,v[0])})}function PF(a,c,h){c=Si(c,a);var g=-1,v=c.length;for(v||(v=1,a=n);++gc){var g=a;a=c,c=g}if(h||a%1||c%1){var v=sb();return Vt(a+v*(c-a+xk("1e-"+((v+"").length-1))),c)}return lp(a,c)}var qF=ss(function(a,c,h){return c=c.toLowerCase(),a+(h?LD(c):c)});function LD(a){return Pp(Re(a).toLowerCase())}function VD(a){return a=Re(a),a&&a.replace(ZA,Fk).replace(hk,"")}function GF(a,c,h){a=Re(a),c=wn(c);var g=a.length;h=h===n?g:uo(fe(h),0,g);var v=h;return h-=c.length,h>=0&&a.slice(h,v)==c}function ZF(a){return a=Re(a),a&&IA.test(a)?a.replace(gw,Lk):a}function KF(a){return a=Re(a),a&&RA.test(a)?a.replace(Ah,"\\$&"):a}var YF=ss(function(a,c,h){return a+(h?"-":"")+c.toLowerCase()}),QF=ss(function(a,c,h){return a+(h?" ":"")+c.toLowerCase()}),JF=jb("toLowerCase");function XF(a,c,h){a=Re(a),c=fe(c);var g=c?es(a):0;if(!c||g>=c)return a;var v=(c-g)/2;return qu(Ou(v),h)+a+qu(Nu(v),h)}function eL(a,c,h){a=Re(a),c=fe(c);var g=c?es(a):0;return c&&g>>0,h?(a=Re(a),a&&(typeof c=="string"||c!=null&&!Np(c))&&(c=wn(c),!c&&Xo(a))?Ei(or(a),0,h):a.split(c,h)):[]}var aL=ss(function(a,c,h){return a+(h?" ":"")+Pp(c)});function lL(a,c,h){return a=Re(a),h=h==null?0:uo(fe(h),0,a.length),c=wn(c),a.slice(h,h+c.length)==c}function uL(a,c,h){var g=b.templateSettings;h&&Gt(a,c,h)&&(c=n),a=Re(a),c=ic({},c,g,Zb);var v=ic({},c.imports,g.imports,Zb),D=St(v),x=qh(v,D),E,I,F=0,L=c.interpolate||yu,H="__p += '",q=Zh((c.escape||yu).source+"|"+L.source+"|"+(L===mw?UA:yu).source+"|"+(c.evaluate||yu).source+"|$","g"),Y="//# sourceURL="+(Fe.call(c,"sourceURL")?(c.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++vk+"]")+` +`;a.replace(q,function(re,ve,Me,Dn,Zt,Cn){return Me||(Me=Dn),H+=a.slice(F,Cn).replace(KA,Vk),ve&&(E=!0,H+=`' + +__e(`+ve+`) + +'`),Zt&&(I=!0,H+=`'; +`+Zt+`; +__p += '`),Me&&(H+=`' + +((__t = (`+Me+`)) == null ? '' : __t) + +'`),F=Cn+re.length,re}),H+=`'; +`;var ne=Fe.call(c,"variable")&&c.variable;if(!ne)H=`with (obj) { +`+H+` +} +`;else if(HA.test(ne))throw new ae(o);H=(I?H.replace(SA,""):H).replace(EA,"$1").replace(_A,"$1;"),H="function("+(ne||"obj")+`) { +`+(ne?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(E?", __e = _.escape":"")+(I?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+H+`return __p +}`;var ge=HD(function(){return Ne(D,Y+"return "+H).apply(n,x)});if(ge.source=H,kp(ge))throw ge;return ge}function cL(a){return Re(a).toLowerCase()}function fL(a){return Re(a).toUpperCase()}function dL(a,c,h){if(a=Re(a),a&&(h||c===n))return Kw(a);if(!a||!(c=wn(c)))return a;var g=or(a),v=or(c),D=Yw(g,v),x=Qw(g,v)+1;return Ei(g,D,x).join("")}function hL(a,c,h){if(a=Re(a),a&&(h||c===n))return a.slice(0,Xw(a)+1);if(!a||!(c=wn(c)))return a;var g=or(a),v=Qw(g,or(c))+1;return Ei(g,0,v).join("")}function pL(a,c,h){if(a=Re(a),a&&(h||c===n))return a.replace(kh,"");if(!a||!(c=wn(c)))return a;var g=or(a),v=Yw(g,or(c));return Ei(g,v).join("")}function gL(a,c){var h=ie,g=he;if(it(c)){var v="separator"in c?c.separator:v;h="length"in c?fe(c.length):h,g="omission"in c?wn(c.omission):g}a=Re(a);var D=a.length;if(Xo(a)){var x=or(a);D=x.length}if(h>=D)return a;var E=h-es(g);if(E<1)return g;var I=x?Ei(x,0,E).join(""):a.slice(0,E);if(v===n)return I+g;if(x&&(E+=I.length-E),Np(v)){if(a.slice(E).search(v)){var F,L=I;for(v.global||(v=Zh(v.source,Re(yw.exec(v))+"g")),v.lastIndex=0;F=v.exec(L);)var H=F.index;I=I.slice(0,H===n?E:H)}}else if(a.indexOf(wn(v),E)!=E){var q=I.lastIndexOf(v);q>-1&&(I=I.slice(0,q))}return I+g}function mL(a){return a=Re(a),a&&MA.test(a)?a.replace(pw,Wk):a}var yL=ss(function(a,c,h){return a+(h?" ":"")+c.toUpperCase()}),Pp=jb("toUpperCase");function BD(a,c,h){return a=Re(a),c=h?n:c,c===n?Hk(a)?Zk(a):kk(a):a.match(c)||[]}var HD=me(function(a,c){try{return yn(a,n,c)}catch(h){return kp(h)?h:new ae(h)}}),vL=Kr(function(a,c){return Bn(c,function(h){h=Sr(h),Gr(a,h,Tp(a[h],a))}),a});function wL(a){var c=a==null?0:a.length,h=te();return a=c?et(a,function(g){if(typeof g[1]!="function")throw new Hn(i);return[h(g[0]),g[1]]}):[],me(function(g){for(var v=-1;++v$e)return[];var h=ke,g=Vt(a,ke);c=te(c),a-=ke;for(var v=Wh(g,c);++h0||c<0)?new Se(h):(a<0?h=h.takeRight(-a):a&&(h=h.drop(a)),c!==n&&(c=fe(c),h=c<0?h.dropRight(-c):h.take(c-a)),h)},Se.prototype.takeRightWhile=function(a){return this.reverse().takeWhile(a).reverse()},Se.prototype.toArray=function(){return this.take(ke)},Cr(Se.prototype,function(a,c){var h=/^(?:filter|find|map|reject)|While$/.test(c),g=/^(?:head|last)$/.test(c),v=b[g?"take"+(c=="last"?"Right":""):c],D=g||/^find/.test(c);v&&(b.prototype[c]=function(){var x=this.__wrapped__,E=g?[1]:arguments,I=x instanceof Se,F=E[0],L=I||ue(x),H=function(ve){var Me=v.apply(b,vi([ve],E));return g&&q?Me[0]:Me};L&&h&&typeof F=="function"&&F.length!=1&&(I=L=!1);var q=this.__chain__,Y=!!this.__actions__.length,ne=D&&!q,ge=I&&!Y;if(!D&&L){x=ge?x:new Se(this);var re=a.apply(x,E);return re.__actions__.push({func:Qu,args:[H],thisArg:n}),new jn(re,q)}return ne&&ge?a.apply(this,E):(re=this.thru(H),ne?g?re.value()[0]:re.value():re)})}),Bn(["pop","push","shift","sort","splice","unshift"],function(a){var c=xu[a],h=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",g=/^(?:pop|shift)$/.test(a);b.prototype[a]=function(){var v=arguments;if(g&&!this.__chain__){var D=this.value();return c.apply(ue(D)?D:[],v)}return this[h](function(x){return c.apply(ue(x)?x:[],v)})}}),Cr(Se.prototype,function(a,c){var h=b[c];if(h){var g=h.name+"";Fe.call(rs,g)||(rs[g]=[]),rs[g].push({name:c,func:h})}}),rs[zu(n,C).name]=[{name:"wrapper",func:n}],Se.prototype.clone=mN,Se.prototype.reverse=yN,Se.prototype.value=vN,b.prototype.at=GR,b.prototype.chain=ZR,b.prototype.commit=KR,b.prototype.next=YR,b.prototype.plant=JR,b.prototype.reverse=XR,b.prototype.toJSON=b.prototype.valueOf=b.prototype.value=eP,b.prototype.first=b.prototype.head,ba&&(b.prototype[ba]=QR),b},bi=Kk();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(xt._=bi,define(function(){return bi})):oo?((oo.exports=bi)._=bi,Lh._=bi):xt._=bi}).call(ga)});function ZD(n,e){return Object.is(n,e)}var wt=null,oc=!1,qp=1,qn=Symbol("SIGNAL");function Te(n){let e=wt;return wt=n,e}function KD(){return wt}var Pa={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Gp(n){if(oc)throw new Error("");if(wt===null)return;wt.consumerOnSignalRead(n);let e=wt.nextProducerIndex++;if(uc(wt),en.nextProducerIndex;)n.producerNode.pop(),n.producerLastReadVersion.pop(),n.producerIndexOfThis.pop()}}function Kp(n){uc(n);for(let e=0;e0}function uc(n){n.producerNode??=[],n.producerIndexOfThis??=[],n.producerLastReadVersion??=[]}function eC(n){n.liveConsumerNode??=[],n.liveConsumerIndexOfThis??=[]}function tC(n){return n.producerNode!==void 0}function nC(n){let e=Object.create(h2);e.computation=n;let t=()=>{if(YD(e),Gp(e),e.value===sc)throw e.error;return e.value};return t[qn]=e,t}var zp=Symbol("UNSET"),Wp=Symbol("COMPUTING"),sc=Symbol("ERRORED"),h2=ft(tt({},Pa),{value:zp,dirty:!0,error:null,equal:ZD,kind:"computed",producerMustRecompute(n){return n.value===zp||n.value===Wp},producerRecomputeValue(n){if(n.value===Wp)throw new Error("Detected cycle in computations.");let e=n.value;n.value=Wp;let t=ac(n),r,i=!1;try{r=n.computation(),Te(null),i=e!==zp&&e!==sc&&r!==sc&&n.equal(e,r)}catch(o){r=sc,n.error=o}finally{Zp(n,t)}if(i){n.value=e;return}n.value=r,n.version++}});function p2(){throw new Error}var rC=p2;function iC(){rC()}function oC(n){rC=n}var g2=null;function sC(n){let e=Object.create(lC);e.value=n;let t=()=>(Gp(e),e.value);return t[qn]=e,t}function Qp(n,e){JD()||iC(),n.equal(n.value,e)||(n.value=e,m2(n))}function aC(n,e){JD()||iC(),Qp(n,e(n.value))}var lC=ft(tt({},Pa),{equal:ZD,value:void 0,kind:"signal"});function m2(n){n.version++,f2(),QD(n),g2?.()}function Pe(n){return typeof n=="function"}function cc(n){let t=n(r=>{Error.call(r),r.stack=new Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var fc=cc(n=>function(t){n(this),this.message=t?`${t.length} errors occurred during unsubscription: +${t.map((r,i)=>`${i+1}) ${r.toString()}`).join(` + `)}`:"",this.name="UnsubscriptionError",this.errors=t});function Fa(n,e){if(n){let t=n.indexOf(e);0<=t&&n.splice(t,1)}}var Kt=class n{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;let{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(let o of t)o.remove(this);else t.remove(this);let{initialTeardown:r}=this;if(Pe(r))try{r()}catch(o){e=o instanceof fc?o.errors:[o]}let{_finalizers:i}=this;if(i){this._finalizers=null;for(let o of i)try{uC(o)}catch(s){e=e??[],s instanceof fc?e=[...e,...s.errors]:e.push(s)}}if(e)throw new fc(e)}}add(e){var t;if(e&&e!==this)if(this.closed)uC(e);else{if(e instanceof n){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(e)}}_hasParent(e){let{_parentage:t}=this;return t===e||Array.isArray(t)&&t.includes(e)}_addParent(e){let{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e}_removeParent(e){let{_parentage:t}=this;t===e?this._parentage=null:Array.isArray(t)&&Fa(t,e)}remove(e){let{_finalizers:t}=this;t&&Fa(t,e),e instanceof n&&e._removeParent(this)}};Kt.EMPTY=(()=>{let n=new Kt;return n.closed=!0,n})();var Jp=Kt.EMPTY;function dc(n){return n instanceof Kt||n&&"closed"in n&&Pe(n.remove)&&Pe(n.add)&&Pe(n.unsubscribe)}function uC(n){Pe(n)?n():n.unsubscribe()}var ur={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var cs={setTimeout(n,e,...t){let{delegate:r}=cs;return r?.setTimeout?r.setTimeout(n,e,...t):setTimeout(n,e,...t)},clearTimeout(n){let{delegate:e}=cs;return(e?.clearTimeout||clearTimeout)(n)},delegate:void 0};function hc(n){cs.setTimeout(()=>{let{onUnhandledError:e}=ur;if(e)e(n);else throw n})}function Xp(){}var cC=eg("C",void 0,void 0);function fC(n){return eg("E",void 0,n)}function dC(n){return eg("N",n,void 0)}function eg(n,e,t){return{kind:n,value:e,error:t}}var go=null;function fs(n){if(ur.useDeprecatedSynchronousErrorHandling){let e=!go;if(e&&(go={errorThrown:!1,error:null}),n(),e){let{errorThrown:t,error:r}=go;if(go=null,t)throw r}}else n()}function hC(n){ur.useDeprecatedSynchronousErrorHandling&&go&&(go.errorThrown=!0,go.error=n)}var mo=class extends Kt{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,dc(e)&&e.add(this)):this.destination=w2}static create(e,t,r){return new ds(e,t,r)}next(e){this.isStopped?ng(dC(e),this):this._next(e)}error(e){this.isStopped?ng(fC(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?ng(cC,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},y2=Function.prototype.bind;function tg(n,e){return y2.call(n,e)}var rg=class{constructor(e){this.partialObserver=e}next(e){let{partialObserver:t}=this;if(t.next)try{t.next(e)}catch(r){pc(r)}}error(e){let{partialObserver:t}=this;if(t.error)try{t.error(e)}catch(r){pc(r)}else pc(e)}complete(){let{partialObserver:e}=this;if(e.complete)try{e.complete()}catch(t){pc(t)}}},ds=class extends mo{constructor(e,t,r){super();let i;if(Pe(e)||!e)i={next:e??void 0,error:t??void 0,complete:r??void 0};else{let o;this&&ur.useDeprecatedNextContext?(o=Object.create(e),o.unsubscribe=()=>this.unsubscribe(),i={next:e.next&&tg(e.next,o),error:e.error&&tg(e.error,o),complete:e.complete&&tg(e.complete,o)}):i=e}this.destination=new rg(i)}};function pc(n){ur.useDeprecatedSynchronousErrorHandling?hC(n):hc(n)}function v2(n){throw n}function ng(n,e){let{onStoppedNotification:t}=ur;t&&cs.setTimeout(()=>t(n,e))}var w2={closed:!0,next:Xp,error:v2,complete:Xp};var hs=typeof Symbol=="function"&&Symbol.observable||"@@observable";function pC(n){return n}function gC(n){return n.length===0?pC:n.length===1?n[0]:function(t){return n.reduce((r,i)=>i(r),t)}}var Et=(()=>{class n{constructor(t){t&&(this._subscribe=t)}lift(t){let r=new n;return r.source=this,r.operator=t,r}subscribe(t,r,i){let o=D2(t)?t:new ds(t,r,i);return fs(()=>{let{operator:s,source:l}=this;o.add(s?s.call(o,l):l?this._subscribe(o):this._trySubscribe(o))}),o}_trySubscribe(t){try{return this._subscribe(t)}catch(r){t.error(r)}}forEach(t,r){return r=mC(r),new r((i,o)=>{let s=new ds({next:l=>{try{t(l)}catch(u){o(u),s.unsubscribe()}},error:o,complete:i});this.subscribe(s)})}_subscribe(t){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(t)}[hs](){return this}pipe(...t){return gC(t)(this)}toPromise(t){return t=mC(t),new t((r,i)=>{let o;this.subscribe(s=>o=s,s=>i(s),()=>r(o))})}}return n.create=e=>new n(e),n})();function mC(n){var e;return(e=n??ur.Promise)!==null&&e!==void 0?e:Promise}function b2(n){return n&&Pe(n.next)&&Pe(n.error)&&Pe(n.complete)}function D2(n){return n&&n instanceof mo||b2(n)&&dc(n)}function C2(n){return Pe(n?.lift)}function ps(n){return e=>{if(C2(e))return e.lift(function(t){try{return n(t,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function gs(n,e,t,r,i){return new ig(n,e,t,r,i)}var ig=class extends mo{constructor(e,t,r,i,o,s){super(e),this.onFinalize=o,this.shouldUnsubscribe=s,this._next=t?function(l){try{t(l)}catch(u){e.error(u)}}:super._next,this._error=i?function(l){try{i(l)}catch(u){e.error(u)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(l){e.error(l)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var e;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:t}=this;super.unsubscribe(),!t&&((e=this.onFinalize)===null||e===void 0||e.call(this))}}};var yC=cc(n=>function(){n(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var Er=(()=>{class n extends Et{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){let r=new gc(this,this);return r.operator=t,r}_throwIfClosed(){if(this.closed)throw new yC}next(t){fs(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(t)}})}error(t){fs(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;let{observers:r}=this;for(;r.length;)r.shift().error(t)}})}complete(){fs(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return((t=this.observers)===null||t===void 0?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){let{hasError:r,isStopped:i,observers:o}=this;return r||i?Jp:(this.currentObservers=null,o.push(t),new Kt(()=>{this.currentObservers=null,Fa(o,t)}))}_checkFinalizedStatuses(t){let{hasError:r,thrownError:i,isStopped:o}=this;r?t.error(i):o&&t.complete()}asObservable(){let t=new Et;return t.source=this,t}}return n.create=(e,t)=>new gc(e,t),n})(),gc=class extends Er{constructor(e,t){super(),this.destination=e,this.source=t}next(e){var t,r;(r=(t=this.destination)===null||t===void 0?void 0:t.next)===null||r===void 0||r.call(t,e)}error(e){var t,r;(r=(t=this.destination)===null||t===void 0?void 0:t.error)===null||r===void 0||r.call(t,e)}complete(){var e,t;(t=(e=this.destination)===null||e===void 0?void 0:e.complete)===null||t===void 0||t.call(e)}_subscribe(e){var t,r;return(r=(t=this.source)===null||t===void 0?void 0:t.subscribe(e))!==null&&r!==void 0?r:Jp}};var La=class extends Er{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){let t=super._subscribe(e);return!t.closed&&e.next(this._value),t}getValue(){let{hasError:e,thrownError:t,_value:r}=this;if(e)throw t;return this._throwIfClosed(),r}next(e){super.next(this._value=e)}};function x2(n){return n[n.length-1]}function vC(n){return Pe(x2(n))?n.pop():void 0}function bC(n,e,t,r){function i(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function l(d){try{f(r.next(d))}catch(p){s(p)}}function u(d){try{f(r.throw(d))}catch(p){s(p)}}function f(d){d.done?o(d.value):i(d.value).then(l,u)}f((r=r.apply(n,e||[])).next())})}function wC(n){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&n[e],r=0;if(t)return t.call(n);if(n&&typeof n.length=="number")return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function yo(n){return this instanceof yo?(this.v=n,this):new yo(n)}function DC(n,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=t.apply(n,e||[]),i,o=[];return i=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),l("next"),l("throw"),l("return",s),i[Symbol.asyncIterator]=function(){return this},i;function s(y){return function(w){return Promise.resolve(w).then(y,p)}}function l(y,w){r[y]&&(i[y]=function(C){return new Promise(function(S,_){o.push([y,C,S,_])>1||u(y,C)})},w&&(i[y]=w(i[y])))}function u(y,w){try{f(r[y](w))}catch(C){m(o[0][3],C)}}function f(y){y.value instanceof yo?Promise.resolve(y.value.v).then(d,p):m(o[0][2],y)}function d(y){u("next",y)}function p(y){u("throw",y)}function m(y,w){y(w),o.shift(),o.length&&u(o[0][0],o[0][1])}}function CC(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=n[Symbol.asyncIterator],t;return e?e.call(n):(n=typeof wC=="function"?wC(n):n[Symbol.iterator](),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(o){t[o]=n[o]&&function(s){return new Promise(function(l,u){s=n[o](s),i(l,u,s.done,s.value)})}}function i(o,s,l,u){Promise.resolve(u).then(function(f){o({value:f,done:l})},s)}}var mc=n=>n&&typeof n.length=="number"&&typeof n!="function";function yc(n){return Pe(n?.then)}function vc(n){return Pe(n[hs])}function wc(n){return Symbol.asyncIterator&&Pe(n?.[Symbol.asyncIterator])}function bc(n){return new TypeError(`You provided ${n!==null&&typeof n=="object"?"an invalid object":`'${n}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function S2(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Dc=S2();function Cc(n){return Pe(n?.[Dc])}function xc(n){return DC(this,arguments,function*(){let t=n.getReader();try{for(;;){let{value:r,done:i}=yield yo(t.read());if(i)return yield yo(void 0);yield yield yo(r)}}finally{t.releaseLock()}})}function Sc(n){return Pe(n?.getReader)}function Mi(n){if(n instanceof Et)return n;if(n!=null){if(vc(n))return E2(n);if(mc(n))return _2(n);if(yc(n))return M2(n);if(wc(n))return xC(n);if(Cc(n))return I2(n);if(Sc(n))return T2(n)}throw bc(n)}function E2(n){return new Et(e=>{let t=n[hs]();if(Pe(t.subscribe))return t.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function _2(n){return new Et(e=>{for(let t=0;t{n.then(t=>{e.closed||(e.next(t),e.complete())},t=>e.error(t)).then(null,hc)})}function I2(n){return new Et(e=>{for(let t of n)if(e.next(t),e.closed)return;e.complete()})}function xC(n){return new Et(e=>{A2(n,e).catch(t=>e.error(t))})}function T2(n){return xC(xc(n))}function A2(n,e){var t,r,i,o;return bC(this,void 0,void 0,function*(){try{for(t=CC(n);r=yield t.next(),!r.done;){let s=r.value;if(e.next(s),e.closed)return}}catch(s){i={error:s}}finally{try{r&&!r.done&&(o=t.return)&&(yield o.call(t))}finally{if(i)throw i.error}}e.complete()})}function _r(n,e,t,r=0,i=!1){let o=e.schedule(function(){t(),i?n.add(this.schedule(null,r)):this.unsubscribe()},r);if(n.add(o),!i)return o}function Ec(n,e=0){return ps((t,r)=>{t.subscribe(gs(r,i=>_r(r,n,()=>r.next(i),e),()=>_r(r,n,()=>r.complete(),e),i=>_r(r,n,()=>r.error(i),e)))})}function _c(n,e=0){return ps((t,r)=>{r.add(n.schedule(()=>t.subscribe(r),e))})}function SC(n,e){return Mi(n).pipe(_c(e),Ec(e))}function EC(n,e){return Mi(n).pipe(_c(e),Ec(e))}function _C(n,e){return new Et(t=>{let r=0;return e.schedule(function(){r===n.length?t.complete():(t.next(n[r++]),t.closed||this.schedule())})})}function MC(n,e){return new Et(t=>{let r;return _r(t,e,()=>{r=n[Dc](),_r(t,e,()=>{let i,o;try{({value:i,done:o}=r.next())}catch(s){t.error(s);return}o?t.complete():t.next(i)},0,!0)}),()=>Pe(r?.return)&&r.return()})}function Mc(n,e){if(!n)throw new Error("Iterable cannot be null");return new Et(t=>{_r(t,e,()=>{let r=n[Symbol.asyncIterator]();_r(t,e,()=>{r.next().then(i=>{i.done?t.complete():t.next(i.value)})},0,!0)})})}function IC(n,e){return Mc(xc(n),e)}function TC(n,e){if(n!=null){if(vc(n))return SC(n,e);if(mc(n))return _C(n,e);if(yc(n))return EC(n,e);if(wc(n))return Mc(n,e);if(Cc(n))return MC(n,e);if(Sc(n))return IC(n,e)}throw bc(n)}function og(n,e){return e?TC(n,e):Mi(n)}function vo(n,e){return ps((t,r)=>{let i=0;t.subscribe(gs(r,o=>{r.next(n.call(e,o,i++))}))})}var{isArray:k2}=Array;function N2(n,e){return k2(e)?n(...e):n(e)}function AC(n){return vo(e=>N2(n,e))}var{isArray:O2}=Array,{getPrototypeOf:R2,prototype:P2,keys:F2}=Object;function kC(n){if(n.length===1){let e=n[0];if(O2(e))return{args:e,keys:null};if(L2(e)){let t=F2(e);return{args:t.map(r=>e[r]),keys:t}}}return{args:n,keys:null}}function L2(n){return n&&typeof n=="object"&&R2(n)===P2}function NC(n,e){return n.reduce((t,r,i)=>(t[r]=e[i],t),{})}function sg(...n){let e=vC(n),{args:t,keys:r}=kC(n),i=new Et(o=>{let{length:s}=t;if(!s){o.complete();return}let l=new Array(s),u=s,f=s;for(let d=0;d{p||(p=!0,f--),l[d]=m},()=>u--,void 0,()=>{(!u||!p)&&(f||o.next(r?NC(r,l):l),o.complete())}))}});return e?i.pipe(AC(e)):i}var B2="https://g.co/ng/security#xss",Ie=class extends Error{code;constructor(e,t){super(fm(e,t)),this.code=e}};function fm(n,e){return`${`NG0${Math.abs(n)}`}${e?": "+e:""}`}function Ja(n){return{toString:n}.toString()}var Ic="__parameters__";function H2(n){return function(...t){if(n){let r=n(...t);for(let i in r)this[i]=r[i]}}}function wx(n,e,t){return Ja(()=>{let r=H2(e);function i(...o){if(this instanceof i)return r.apply(this,o),this;let s=new i(...o);return l.annotation=s,l;function l(u,f,d){let p=u.hasOwnProperty(Ic)?u[Ic]:Object.defineProperty(u,Ic,{value:[]})[Ic];for(;p.length<=d;)p.push(null);return(p[d]=p[d]||[]).push(s),u}}return t&&(i.prototype=Object.create(t.prototype)),i.prototype.ngMetadataName=n,i.annotationCls=i,i})}function Qe(n){for(let e in n)if(n[e]===Qe)return e;throw Error("Could not find renamed property on target object.")}function j2(n,e){for(let t in e)e.hasOwnProperty(t)&&!n.hasOwnProperty(t)&&(n[t]=e[t])}function xn(n){if(typeof n=="string")return n;if(Array.isArray(n))return"["+n.map(xn).join(", ")+"]";if(n==null)return""+n;if(n.overriddenName)return`${n.overriddenName}`;if(n.name)return`${n.name}`;let e=n.toString();if(e==null)return""+e;let t=e.indexOf(` +`);return t===-1?e:e.substring(0,t)}function OC(n,e){return n==null||n===""?e===null?"":e:e==null||e===""?n:n+" "+e}var U2=Qe({__forward_ref__:Qe});function Io(n){return n.__forward_ref__=Io,n.toString=function(){return xn(this())},n}function Yt(n){return bx(n)?n():n}function bx(n){return typeof n=="function"&&n.hasOwnProperty(U2)&&n.__forward_ref__===Io}function ot(n){return{token:n.token,providedIn:n.providedIn||null,factory:n.factory,value:void 0}}function As(n){return{providers:n.providers||[],imports:n.imports||[]}}function dm(n){return RC(n,Dx)||RC(n,Cx)}function RC(n,e){return n.hasOwnProperty(e)?n[e]:null}function $2(n){let e=n&&(n[Dx]||n[Cx]);return e||null}function PC(n){return n&&(n.hasOwnProperty(FC)||n.hasOwnProperty(z2))?n[FC]:null}var Dx=Qe({\u0275prov:Qe}),FC=Qe({\u0275inj:Qe}),Cx=Qe({ngInjectableDef:Qe}),z2=Qe({ngInjectorDef:Qe}),be=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(e,t){this._desc=e,this.\u0275prov=void 0,typeof t=="number"?this.__NG_ELEMENT_ID__=t:t!==void 0&&(this.\u0275prov=ot({token:this,providedIn:t.providedIn||"root",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function xx(n){return n&&!!n.\u0275providers}var W2=Qe({\u0275cmp:Qe}),q2=Qe({\u0275dir:Qe}),G2=Qe({\u0275pipe:Qe});var Lc=Qe({\u0275fac:Qe}),ja=Qe({__NG_ELEMENT_ID__:Qe}),LC=Qe({__NG_ENV_ID__:Qe});function Sx(n){return typeof n=="string"?n:n==null?"":String(n)}function Z2(n){return typeof n=="function"?n.name||n.toString():typeof n=="object"&&n!=null&&typeof n.type=="function"?n.type.name||n.type.toString():Sx(n)}function K2(n,e){let t=e?`. Dependency path: ${e.join(" > ")} > ${n}`:"";throw new Ie(-200,n)}function hm(n,e){throw new Ie(-201,!1)}var Ee=function(n){return n[n.Default=0]="Default",n[n.Host=1]="Host",n[n.Self=2]="Self",n[n.SkipSelf=4]="SkipSelf",n[n.Optional=8]="Optional",n}(Ee||{}),wg;function Ex(){return wg}function Gn(n){let e=wg;return wg=n,e}function _x(n,e,t){let r=dm(n);if(r&&r.providedIn=="root")return r.value===void 0?r.value=r.factory():r.value;if(t&Ee.Optional)return null;if(e!==void 0)return e;hm(n,"Injector")}var Y2={},Ua=Y2,bg="__NG_DI_FLAG__",Vc="ngTempTokenPath",Q2="ngTokenPath",J2=/\n/gm,X2="\u0275",VC="__source",ws;function eV(){return ws}function Ii(n){let e=ws;return ws=n,e}function tV(n,e=Ee.Default){if(ws===void 0)throw new Ie(-203,!1);return ws===null?_x(n,void 0,e):ws.get(n,e&Ee.Optional?null:void 0,e)}function Ve(n,e=Ee.Default){return(Ex()||tV)(Yt(n),e)}function Oe(n,e=Ee.Default){return Ve(n,af(e))}function af(n){return typeof n>"u"||typeof n=="number"?n:0|(n.optional&&8)|(n.host&&1)|(n.self&&2)|(n.skipSelf&&4)}function Dg(n){let e=[];for(let t=0;t ");else if(typeof e=="object"){let o=[];for(let s in e)if(e.hasOwnProperty(s)){let l=e[s];o.push(s+":"+(typeof l=="string"?JSON.stringify(l):xn(l)))}i=`{${o.join(", ")}}`}return`${t}${r?"("+r+")":""}[${i}]: ${n.replace(J2,` + `)}`}var Ix=Mx(wx("Optional"),8);var oV=Mx(wx("SkipSelf"),4);function Ds(n,e){let t=n.hasOwnProperty(Lc);return t?n[Lc]:null}function sV(n,e,t){if(n.length!==e.length)return!1;for(let r=0;rArray.isArray(t)?pm(t,e):e(t))}function Tx(n,e,t){e>=n.length?n.push(t):n.splice(e,0,t)}function Bc(n,e){return e>=n.length-1?n.pop():n.splice(e,1)[0]}function lV(n,e,t,r){let i=n.length;if(i==e)n.push(t,r);else if(i===1)n.push(r,n[0]),n[0]=t;else{for(i--,n.push(n[i-1],n[i]);i>e;){let o=i-2;n[i]=n[o],i--}n[e]=t,n[e+1]=r}}function uV(n,e,t){let r=Xa(n,e);return r>=0?n[r|1]=t:(r=~r,lV(n,r,e,t)),r}function ag(n,e){let t=Xa(n,e);if(t>=0)return n[t|1]}function Xa(n,e){return cV(n,e,1)}function cV(n,e,t){let r=0,i=n.length>>t;for(;i!==r;){let o=r+(i-r>>1),s=n[o<e?i=o:r=o+1}return~(i<{t.push(s)};return pm(e,s=>{let l=s;Cg(l,o,[],r)&&(i||=[],i.push(l))}),i!==void 0&&Fx(i,o),t}function Fx(n,e){for(let t=0;t{e(o,r)})}}function Cg(n,e,t,r){if(n=Yt(n),!n)return!1;let i=null,o=PC(n),s=!o&&xs(n);if(!o&&!s){let u=n.ngModule;if(o=PC(u),o)i=u;else return!1}else{if(s&&!s.standalone)return!1;i=n}let l=r.has(i);if(s){if(l)return!1;if(r.add(i),s.dependencies){let u=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let f of u)Cg(f,e,t,r)}}else if(o){if(o.imports!=null&&!l){r.add(i);let f;try{pm(o.imports,d=>{Cg(d,e,t,r)&&(f||=[],f.push(d))})}finally{}f!==void 0&&Fx(f,e)}if(!l){let f=Ds(i)||(()=>new i);e({provide:i,useFactory:f,deps:Zn},i),e({provide:kx,useValue:i,multi:!0},i),e({provide:$a,useValue:()=>Ve(i),multi:!0},i)}let u=o.providers;if(u!=null&&!l){let f=n;gm(u,d=>{e(d,f)})}}else return!1;return i!==n&&n.providers!==void 0}function gm(n,e){for(let t of n)xx(t)&&(t=t.\u0275providers),Array.isArray(t)?gm(t,e):e(t)}var hV=Qe({provide:String,useValue:Qe});function Lx(n){return n!==null&&typeof n=="object"&&hV in n}function pV(n){return!!(n&&n.useExisting)}function gV(n){return!!(n&&n.useFactory)}function Ss(n){return typeof n=="function"}function mV(n){return!!n.useClass}var lf=new be(""),kc={},yV={},lg;function mm(){return lg===void 0&&(lg=new Hc),lg}var ki=class{},za=class extends ki{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(e,t,r,i){super(),this.parent=t,this.source=r,this.scopes=i,Sg(e,s=>this.processProvider(s)),this.records.set(Ax,ms(void 0,this)),i.has("environment")&&this.records.set(ki,ms(void 0,this));let o=this.records.get(lf);o!=null&&typeof o.value=="string"&&this.scopes.add(o.value),this.injectorDefTypes=new Set(this.get(kx,Zn,Ee.Self))}destroy(){Ba(this),this._destroyed=!0;let e=Te(null);try{for(let r of this._ngOnDestroyHooks)r.ngOnDestroy();let t=this._onDestroyHooks;this._onDestroyHooks=[];for(let r of t)r()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),Te(e)}}onDestroy(e){return Ba(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){Ba(this);let t=Ii(this),r=Gn(void 0),i;try{return e()}finally{Ii(t),Gn(r)}}get(e,t=Ua,r=Ee.Default){if(Ba(this),e.hasOwnProperty(LC))return e[LC](this);r=af(r);let i,o=Ii(this),s=Gn(void 0);try{if(!(r&Ee.SkipSelf)){let u=this.records.get(e);if(u===void 0){let f=CV(e)&&dm(e);f&&this.injectableDefInScope(f)?u=ms(xg(e),kc):u=null,this.records.set(e,u)}if(u!=null)return this.hydrate(e,u)}let l=r&Ee.Self?mm():this.parent;return t=r&Ee.Optional&&t===Ua?null:t,l.get(e,t)}catch(l){if(l.name==="NullInjectorError"){if((l[Vc]=l[Vc]||[]).unshift(xn(e)),o)throw l;return rV(l,e,"R3InjectorError",this.source)}else throw l}finally{Gn(s),Ii(o)}}resolveInjectorInitializers(){let e=Te(null),t=Ii(this),r=Gn(void 0),i;try{let o=this.get($a,Zn,Ee.Self);for(let s of o)s()}finally{Ii(t),Gn(r),Te(e)}}toString(){let e=[],t=this.records;for(let r of t.keys())e.push(xn(r));return`R3Injector[${e.join(", ")}]`}processProvider(e){e=Yt(e);let t=Ss(e)?e:Yt(e&&e.provide),r=wV(e);if(!Ss(e)&&e.multi===!0){let i=this.records.get(t);i||(i=ms(void 0,kc,!0),i.factory=()=>Dg(i.multi),this.records.set(t,i)),t=e,i.multi.push(e)}this.records.set(t,r)}hydrate(e,t){let r=Te(null);try{return t.value===kc&&(t.value=yV,t.value=t.factory()),typeof t.value=="object"&&t.value&&DV(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{Te(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=Yt(e.providedIn);return typeof t=="string"?t==="any"||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(e){let t=this._onDestroyHooks.indexOf(e);t!==-1&&this._onDestroyHooks.splice(t,1)}};function xg(n){let e=dm(n),t=e!==null?e.factory:Ds(n);if(t!==null)return t;if(n instanceof be)throw new Ie(204,!1);if(n instanceof Function)return vV(n);throw new Ie(204,!1)}function vV(n){if(n.length>0)throw new Ie(204,!1);let t=$2(n);return t!==null?()=>t.factory(n):()=>new n}function wV(n){if(Lx(n))return ms(void 0,n.useValue);{let e=Vx(n);return ms(e,kc)}}function Vx(n,e,t){let r;if(Ss(n)){let i=Yt(n);return Ds(i)||xg(i)}else if(Lx(n))r=()=>Yt(n.useValue);else if(gV(n))r=()=>n.useFactory(...Dg(n.deps||[]));else if(pV(n))r=()=>Ve(Yt(n.useExisting));else{let i=Yt(n&&(n.useClass||n.provide));if(bV(n))r=()=>new i(...Dg(n.deps));else return Ds(i)||xg(i)}return r}function Ba(n){if(n.destroyed)throw new Ie(205,!1)}function ms(n,e,t=!1){return{factory:n,value:e,multi:t?[]:void 0}}function bV(n){return!!n.deps}function DV(n){return n!==null&&typeof n=="object"&&typeof n.ngOnDestroy=="function"}function CV(n){return typeof n=="function"||typeof n=="object"&&n instanceof be}function Sg(n,e){for(let t of n)Array.isArray(t)?Sg(t,e):t&&xx(t)?Sg(t.\u0275providers,e):e(t)}function Bx(n,e){n instanceof za&&Ba(n);let t,r=Ii(n),i=Gn(void 0);try{return e()}finally{Ii(r),Gn(i)}}function xV(){return Ex()!==void 0||eV()!=null}function SV(n){return typeof n=="function"}var oi=0,we=1,le=2,jt=3,fr=4,dr=5,jc=6,Uc=7,Qn=8,Wa=9,Ni=10,_t=11,qa=12,BC=13,ks=14,Ir=15,bo=16,ys=17,ei=18,uf=19,Hx=20,Ti=21,ug=22,$c=23,Sn=24,ti=25,jx=1;var Do=7,zc=8,Es=9,En=10;function Ai(n){return Array.isArray(n)&&typeof n[jx]=="object"}function si(n){return Array.isArray(n)&&n[jx]===!0}function Ux(n){return(n.flags&4)!==0}function To(n){return n.componentOffset>-1}function ym(n){return(n.flags&1)===1}function ni(n){return!!n.template}function Wc(n){return(n[le]&512)!==0}function el(n){return(n[le]&256)===256}var Eg=class{previousValue;currentValue;firstChange;constructor(e,t,r){this.previousValue=e,this.currentValue=t,this.firstChange=r}isFirstChange(){return this.firstChange}};function $x(n,e,t,r){e!==null?e.applyValueToInputSignal(e,r):n[t]=r}var vm=(()=>{let n=()=>zx;return n.ngInherit=!0,n})();function zx(n){return n.type.prototype.ngOnChanges&&(n.setInput=_V),EV}function EV(){let n=qx(this),e=n?.current;if(e){let t=n.previous;if(t===Cs)n.previous=e;else for(let r in e)t[r]=e[r];n.current=null,this.ngOnChanges(e)}}function _V(n,e,t,r,i){let o=this.declaredInputs[r],s=qx(n)||MV(n,{previous:Cs,current:null}),l=s.current||(s.current={}),u=s.previous,f=u[o];l[o]=new Eg(f&&f.currentValue,t,u===Cs),$x(n,e,i,t)}var Wx="__ngSimpleChanges__";function qx(n){return n[Wx]||null}function MV(n,e){return n[Wx]=e}var HC=null;var Kn=function(n,e,t){HC?.(n,e,t)},IV="svg",TV="math";function Tr(n){for(;Array.isArray(n);)n=n[oi];return n}function Gx(n,e){return Tr(e[n])}function Nr(n,e){return Tr(e[n.index])}function Zx(n,e){return n.data[e]}function Ar(n,e){let t=e[n];return Ai(t)?t:t[oi]}function AV(n){return(n[le]&4)===4}function wm(n){return(n[le]&128)===128}function kV(n){return si(n[jt])}function qc(n,e){return e==null?null:n[e]}function Kx(n){n[ys]=0}function bm(n){n[le]&1024||(n[le]|=1024,wm(n)&&ff(n))}function NV(n,e){for(;n>0;)e=e[ks],n--;return e}function cf(n){return!!(n[le]&9216||n[Sn]?.dirty)}function _g(n){n[Ni].changeDetectionScheduler?.notify(9),n[le]&64&&(n[le]|=1024),cf(n)&&ff(n)}function ff(n){n[Ni].changeDetectionScheduler?.notify(0);let e=Co(n);for(;e!==null&&!(e[le]&8192||(e[le]|=8192,!wm(e)));)e=Co(e)}function Yx(n,e){if(el(n))throw new Ie(911,!1);n[Ti]===null&&(n[Ti]=[]),n[Ti].push(e)}function OV(n,e){if(n[Ti]===null)return;let t=n[Ti].indexOf(e);t!==-1&&n[Ti].splice(t,1)}function Co(n){let e=n[jt];return si(e)?e[jt]:e}function Qx(n){return n[Uc]??=[]}function Jx(n){return n.cleanup??=[]}function RV(n,e,t,r){let i=Qx(e);i.push(t),n.firstCreatePass&&Jx(n).push(r,i.length-1)}var De={lFrame:oS(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var Mg=!1;function PV(){return De.lFrame.elementDepthCount}function FV(){De.lFrame.elementDepthCount++}function LV(){De.lFrame.elementDepthCount--}function Dm(){return De.bindingsEnabled}function VV(){return De.skipHydrationRootTNode!==null}function BV(n){return De.skipHydrationRootTNode===n}function HV(){De.skipHydrationRootTNode=null}function Je(){return De.lFrame.lView}function cn(){return De.lFrame.tView}function Ns(n){return De.lFrame.contextLView=n,n[Qn]}function Os(n){return De.lFrame.contextLView=null,n}function Jn(){let n=Xx();for(;n!==null&&n.type===64;)n=n.parent;return n}function Xx(){return De.lFrame.currentTNode}function jV(){let n=De.lFrame,e=n.currentTNode;return n.isParent?e:e.parent}function tl(n,e){let t=De.lFrame;t.currentTNode=n,t.isParent=e}function eS(){return De.lFrame.isParent}function UV(){De.lFrame.isParent=!1}function tS(){return Mg}function jC(n){let e=Mg;return Mg=n,e}function $V(n){return De.lFrame.bindingIndex=n}function Cm(){return De.lFrame.bindingIndex++}function zV(n){let e=De.lFrame,t=e.bindingIndex;return e.bindingIndex=e.bindingIndex+n,t}function WV(){return De.lFrame.inI18n}function qV(n,e){let t=De.lFrame;t.bindingIndex=t.bindingRootIndex=n,Ig(e)}function GV(){return De.lFrame.currentDirectiveIndex}function Ig(n){De.lFrame.currentDirectiveIndex=n}function ZV(n){let e=De.lFrame.currentDirectiveIndex;return e===-1?null:n[e]}function nS(){return De.lFrame.currentQueryIndex}function xm(n){De.lFrame.currentQueryIndex=n}function KV(n){let e=n[we];return e.type===2?e.declTNode:e.type===1?n[dr]:null}function rS(n,e,t){if(t&Ee.SkipSelf){let i=e,o=n;for(;i=i.parent,i===null&&!(t&Ee.Host);)if(i=KV(o),i===null||(o=o[ks],i.type&10))break;if(i===null)return!1;e=i,n=o}let r=De.lFrame=iS();return r.currentTNode=e,r.lView=n,!0}function Sm(n){let e=iS(),t=n[we];De.lFrame=e,e.currentTNode=t.firstChild,e.lView=n,e.tView=t,e.contextLView=n,e.bindingIndex=t.bindingStartIndex,e.inI18n=!1}function iS(){let n=De.lFrame,e=n===null?null:n.child;return e===null?oS(n):e}function oS(n){let e={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:n,child:null,inI18n:!1};return n!==null&&(n.child=e),e}function sS(){let n=De.lFrame;return De.lFrame=n.parent,n.currentTNode=null,n.lView=null,n}var aS=sS;function Em(){let n=sS();n.isParent=!0,n.tView=null,n.selectedIndex=-1,n.contextLView=null,n.elementDepthCount=0,n.currentDirectiveIndex=-1,n.currentNamespace=null,n.bindingRootIndex=-1,n.bindingIndex=-1,n.currentQueryIndex=0}function YV(n){return(De.lFrame.contextLView=NV(n,De.lFrame.contextLView))[Qn]}function Rs(){return De.lFrame.selectedIndex}function xo(n){De.lFrame.selectedIndex=n}function lS(){let n=De.lFrame;return Zx(n.tView,n.selectedIndex)}function QV(){return De.lFrame.currentNamespace}var uS=!0;function _m(){return uS}function Mm(n){uS=n}function JV(n,e,t){let{ngOnChanges:r,ngOnInit:i,ngDoCheck:o}=e.type.prototype;if(r){let s=zx(e);(t.preOrderHooks??=[]).push(n,s),(t.preOrderCheckHooks??=[]).push(n,s)}i&&(t.preOrderHooks??=[]).push(0-n,i),o&&((t.preOrderHooks??=[]).push(n,o),(t.preOrderCheckHooks??=[]).push(n,o))}function cS(n,e){for(let t=e.directiveStart,r=e.directiveEnd;t=r)break}else e[u]<0&&(n[ys]+=65536),(l>14>16&&(n[le]&3)===e&&(n[le]+=16384,UC(l,o)):UC(l,o)}var bs=-1,So=class{factory;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(e,t,r){this.factory=e,this.canSeeViewProviders=t,this.injectImpl=r}};function eB(n){return n instanceof So}function tB(n){return(n.flags&8)!==0}function nB(n){return(n.flags&16)!==0}function rB(n,e,t){let r=0;for(;re){s=o-1;break}}}for(;o>16}function Zc(n,e){let t=sB(n),r=e;for(;t>0;)r=r[ks],t--;return r}var Ag=!0;function zC(n){let e=Ag;return Ag=n,e}var aB=256,hS=aB-1,pS=5,lB=0,Mr={};function uB(n,e,t){let r;typeof t=="string"?r=t.charCodeAt(0)||0:t.hasOwnProperty(ja)&&(r=t[ja]),r==null&&(r=t[ja]=lB++);let i=r&hS,o=1<>pS)]|=o}function Kc(n,e){let t=gS(n,e);if(t!==-1)return t;let r=e[we];r.firstCreatePass&&(n.injectorIndex=e.length,dg(r.data,n),dg(e,null),dg(r.blueprint,null));let i=Im(n,e),o=n.injectorIndex;if(dS(i)){let s=Gc(i),l=Zc(i,e),u=l[we].data;for(let f=0;f<8;f++)e[o+f]=l[s+f]|u[s+f]}return e[o+8]=i,o}function dg(n,e){n.push(0,0,0,0,0,0,0,0,e)}function gS(n,e){return n.injectorIndex===-1||n.parent&&n.parent.injectorIndex===n.injectorIndex||e[n.injectorIndex+8]===null?-1:n.injectorIndex}function Im(n,e){if(n.parent&&n.parent.injectorIndex!==-1)return n.parent.injectorIndex;let t=0,r=null,i=e;for(;i!==null;){if(r=bS(i),r===null)return bs;if(t++,i=i[ks],r.injectorIndex!==-1)return r.injectorIndex|t<<16}return bs}function kg(n,e,t){uB(n,e,t)}function mS(n,e,t){if(t&Ee.Optional||n!==void 0)return n;hm(e,"NodeInjector")}function yS(n,e,t,r){if(t&Ee.Optional&&r===void 0&&(r=null),!(t&(Ee.Self|Ee.Host))){let i=n[Wa],o=Gn(void 0);try{return i?i.get(e,r,t&Ee.Optional):_x(e,r,t&Ee.Optional)}finally{Gn(o)}}return mS(r,e,t)}function vS(n,e,t,r=Ee.Default,i){if(n!==null){if(e[le]&2048&&!(r&Ee.Self)){let s=hB(n,e,t,r,Mr);if(s!==Mr)return s}let o=wS(n,e,t,r,Mr);if(o!==Mr)return o}return yS(e,t,r,i)}function wS(n,e,t,r,i){let o=fB(t);if(typeof o=="function"){if(!rS(e,n,r))return r&Ee.Host?mS(i,t,r):yS(e,t,r,i);try{let s;if(s=o(r),s==null&&!(r&Ee.Optional))hm(t);else return s}finally{aS()}}else if(typeof o=="number"){let s=null,l=gS(n,e),u=bs,f=r&Ee.Host?e[Ir][dr]:null;for((l===-1||r&Ee.SkipSelf)&&(u=l===-1?Im(n,e):e[l+8],u===bs||!qC(r,!1)?l=-1:(s=e[we],l=Gc(u),e=Zc(u,e)));l!==-1;){let d=e[we];if(WC(o,l,d.data)){let p=cB(l,e,t,s,r,f);if(p!==Mr)return p}u=e[l+8],u!==bs&&qC(r,e[we].data[l+8]===f)&&WC(o,l,e)?(s=d,l=Gc(u),e=Zc(u,e)):l=-1}}return i}function cB(n,e,t,r,i,o){let s=e[we],l=s.data[n+8],u=r==null?To(l)&&Ag:r!=s&&(l.type&3)!==0,f=i&Ee.Host&&o===l,d=Rc(l,s,t,u,f);return d!==null?Za(e,s,d,l):Mr}function Rc(n,e,t,r,i){let o=n.providerIndexes,s=e.data,l=o&1048575,u=n.directiveStart,f=n.directiveEnd,d=o>>20,p=r?l:l+d,m=i?l+d:f;for(let y=p;y=u&&w.type===t)return y}if(i){let y=s[u];if(y&&ni(y)&&y.type===t)return u}return null}function Za(n,e,t,r){let i=n[t],o=e.data;if(eB(i)){let s=i;s.resolving&&K2(Z2(o[t]));let l=zC(s.canSeeViewProviders);s.resolving=!0;let u,f=s.injectImpl?Gn(s.injectImpl):null,d=rS(n,r,Ee.Default);try{i=n[t]=s.factory(void 0,o,n,r),e.firstCreatePass&&t>=r.directiveStart&&JV(t,o[t],e)}finally{f!==null&&Gn(f),zC(l),s.resolving=!1,aS()}}return i}function fB(n){if(typeof n=="string")return n.charCodeAt(0)||0;let e=n.hasOwnProperty(ja)?n[ja]:void 0;return typeof e=="number"?e>=0?e&hS:dB:e}function WC(n,e,t){let r=1<>pS)]&r)}function qC(n,e){return!(n&Ee.Self)&&!(n&Ee.Host&&e)}var wo=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,r){return vS(this._tNode,this._lView,e,af(r),t)}};function dB(){return new wo(Jn(),Je())}function df(n){return Ja(()=>{let e=n.prototype.constructor,t=e[Lc]||Ng(e),r=Object.prototype,i=Object.getPrototypeOf(n.prototype).constructor;for(;i&&i!==r;){let o=i[Lc]||Ng(i);if(o&&o!==t)return o;i=Object.getPrototypeOf(i)}return o=>new o})}function Ng(n){return bx(n)?()=>{let e=Ng(Yt(n));return e&&e()}:Ds(n)}function hB(n,e,t,r,i){let o=n,s=e;for(;o!==null&&s!==null&&s[le]&2048&&!Wc(s);){let l=wS(o,s,t,r|Ee.Self,Mr);if(l!==Mr)return l;let u=o.parent;if(!u){let f=s[Hx];if(f){let d=f.get(t,Mr,r);if(d!==Mr)return d}u=bS(s),s=s[ks]}o=u}return i}function bS(n){let e=n[we],t=e.type;return t===2?e.declTNode:t===1?n[dr]:null}function GC(n,e=null,t=null,r){let i=pB(n,e,t,r);return i.resolveInjectorInitializers(),i}function pB(n,e=null,t=null,r,i=new Set){let o=[t||Zn,dV(n)];return r=r||(typeof n=="object"?void 0:xn(n)),new za(o,e||mm(),r||null,i)}var ri=class n{static THROW_IF_NOT_FOUND=Ua;static NULL=new Hc;static create(e,t){if(Array.isArray(e))return GC({name:""},t,e,"");{let r=e.name??"";return GC({name:r},e.parent,e.providers,r)}}static \u0275prov=ot({token:n,providedIn:"any",factory:()=>Ve(Ax)});static __NG_ELEMENT_ID__=-1};var gB=new be("");gB.__NG_ELEMENT_ID__=n=>{let e=Jn();if(e===null)throw new Ie(204,!1);if(e.type&2)return e.value;if(n&Ee.Optional)return null;throw new Ie(204,!1)};var DS=!1,CS=(()=>{class n{static __NG_ELEMENT_ID__=mB;static __NG_ENV_ID__=t=>t}return n})(),Og=class extends CS{_lView;constructor(e){super(),this._lView=e}onDestroy(e){return Yx(this._lView,e),()=>OV(this._lView,e)}};function mB(){return new Og(Je())}var Ka=class{},hf=new be("",{providedIn:"root",factory:()=>!1});var xS=new be(""),SS=new be(""),pf=(()=>{class n{taskId=0;pendingTasks=new Set;get _hasPendingTasks(){return this.hasPendingTasks.value}hasPendingTasks=new La(!1);add(){this._hasPendingTasks||this.hasPendingTasks.next(!0);let t=this.taskId++;return this.pendingTasks.add(t),t}has(t){return this.pendingTasks.has(t)}remove(t){this.pendingTasks.delete(t),this.pendingTasks.size===0&&this._hasPendingTasks&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this._hasPendingTasks&&this.hasPendingTasks.next(!1)}static \u0275prov=ot({token:n,providedIn:"root",factory:()=>new n})}return n})();var Rg=class extends Er{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,xV()&&(this.destroyRef=Oe(CS,{optional:!0})??void 0,this.pendingTasks=Oe(pf,{optional:!0})??void 0)}emit(e){let t=Te(null);try{super.next(e)}finally{Te(t)}}subscribe(e,t,r){let i=e,o=t||(()=>null),s=r;if(e&&typeof e=="object"){let u=e;i=u.next?.bind(u),o=u.error?.bind(u),s=u.complete?.bind(u)}this.__isAsync&&(o=this.wrapInTimeout(o),i&&(i=this.wrapInTimeout(i)),s&&(s=this.wrapInTimeout(s)));let l=super.subscribe({next:i,error:o,complete:s});return e instanceof Kt&&e.add(l),l}wrapInTimeout(e){return t=>{let r=this.pendingTasks?.add();setTimeout(()=>{e(t),r!==void 0&&this.pendingTasks?.remove(r)})}}},Yn=Rg;function Yc(...n){}function ES(n){let e,t;function r(){n=Yc;try{t!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(t),e!==void 0&&clearTimeout(e)}catch{}}return e=setTimeout(()=>{n(),r()}),typeof requestAnimationFrame=="function"&&(t=requestAnimationFrame(()=>{n(),r()})),()=>r()}function ZC(n){return queueMicrotask(()=>n()),()=>{n=Yc}}var Tm="isAngularZone",Qc=Tm+"_ID",yB=0,Ht=class n{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Yn(!1);onMicrotaskEmpty=new Yn(!1);onStable=new Yn(!1);onError=new Yn(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:r=!1,shouldCoalesceRunChangeDetection:i=!1,scheduleInRootZone:o=DS}=e;if(typeof Zone>"u")throw new Ie(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!i&&r,s.shouldCoalesceRunChangeDetection=i,s.callbackScheduled=!1,s.scheduleInRootZone=o,bB(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(Tm)===!0}static assertInAngularZone(){if(!n.isInAngularZone())throw new Ie(909,!1)}static assertNotInAngularZone(){if(n.isInAngularZone())throw new Ie(909,!1)}run(e,t,r){return this._inner.run(e,t,r)}runTask(e,t,r,i){let o=this._inner,s=o.scheduleEventTask("NgZoneEvent: "+i,e,vB,Yc,Yc);try{return o.runTask(s,t,r)}finally{o.cancelTask(s)}}runGuarded(e,t,r){return this._inner.runGuarded(e,t,r)}runOutsideAngular(e){return this._outer.run(e)}},vB={};function Am(n){if(n._nesting==0&&!n.hasPendingMicrotasks&&!n.isStable)try{n._nesting++,n.onMicrotaskEmpty.emit(null)}finally{if(n._nesting--,!n.hasPendingMicrotasks)try{n.runOutsideAngular(()=>n.onStable.emit(null))}finally{n.isStable=!0}}}function wB(n){if(n.isCheckStableRunning||n.callbackScheduled)return;n.callbackScheduled=!0;function e(){ES(()=>{n.callbackScheduled=!1,Pg(n),n.isCheckStableRunning=!0,Am(n),n.isCheckStableRunning=!1})}n.scheduleInRootZone?Zone.root.run(()=>{e()}):n._outer.run(()=>{e()}),Pg(n)}function bB(n){let e=()=>{wB(n)},t=yB++;n._inner=n._inner.fork({name:"angular",properties:{[Tm]:!0,[Qc]:t,[Qc+t]:!0},onInvokeTask:(r,i,o,s,l,u)=>{if(DB(u))return r.invokeTask(o,s,l,u);try{return KC(n),r.invokeTask(o,s,l,u)}finally{(n.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||n.shouldCoalesceRunChangeDetection)&&e(),YC(n)}},onInvoke:(r,i,o,s,l,u,f)=>{try{return KC(n),r.invoke(o,s,l,u,f)}finally{n.shouldCoalesceRunChangeDetection&&!n.callbackScheduled&&!CB(u)&&e(),YC(n)}},onHasTask:(r,i,o,s)=>{r.hasTask(o,s),i===o&&(s.change=="microTask"?(n._hasPendingMicrotasks=s.microTask,Pg(n),Am(n)):s.change=="macroTask"&&(n.hasPendingMacrotasks=s.macroTask))},onHandleError:(r,i,o,s)=>(r.handleError(o,s),n.runOutsideAngular(()=>n.onError.emit(s)),!1)})}function Pg(n){n._hasPendingMicrotasks||(n.shouldCoalesceEventChangeDetection||n.shouldCoalesceRunChangeDetection)&&n.callbackScheduled===!0?n.hasPendingMicrotasks=!0:n.hasPendingMicrotasks=!1}function KC(n){n._nesting++,n.isStable&&(n.isStable=!1,n.onUnstable.emit(null))}function YC(n){n._nesting--,Am(n)}var Fg=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Yn;onMicrotaskEmpty=new Yn;onStable=new Yn;onError=new Yn;run(e,t,r){return e.apply(t,r)}runGuarded(e,t,r){return e.apply(t,r)}runOutsideAngular(e){return e()}runTask(e,t,r,i){return e.apply(t,r)}};function DB(n){return _S(n,"__ignore_ng_zone__")}function CB(n){return _S(n,"__scheduler_tick__")}function _S(n,e){return!Array.isArray(n)||n.length!==1?!1:n[0]?.data?.[e]===!0}var Oi=class{_console=console;handleError(e){this._console.error("ERROR",e)}},xB=new be("",{providedIn:"root",factory:()=>{let n=Oe(Ht),e=Oe(Oi);return t=>n.runOutsideAngular(()=>e.handleError(t))}});function SB(){return Ps(Jn(),Je())}function Ps(n,e){return new hr(Nr(n,e))}var hr=(()=>{class n{nativeElement;constructor(t){this.nativeElement=t}static __NG_ELEMENT_ID__=SB}return n})();function EB(n){return n instanceof hr?n.nativeElement:n}var QC=new Set;function nl(n){QC.has(n)||(QC.add(n),performance?.mark?.("mark_feature_usage",{detail:{feature:n}}))}function _B(n){return typeof n=="function"&&n[qn]!==void 0}function gf(n,e){nl("NgSignals");let t=sC(n),r=t[qn];return e?.equal&&(r.equal=e.equal),t.set=i=>Qp(r,i),t.update=i=>aC(r,i),t.asReadonly=MB.bind(t),t}function MB(){let n=this[qn];if(n.readonlyFn===void 0){let e=()=>this();e[qn]=n,n.readonlyFn=e}return n.readonlyFn}function MS(n){return _B(n)&&typeof n.set=="function"}function IB(){return this._results[Symbol.iterator]()}var Lg=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new Er}constructor(e=!1){this._emitDistinctChangesOnly=e}get(e){return this._results[e]}map(e){return this._results.map(e)}filter(e){return this._results.filter(e)}find(e){return this._results.find(e)}reduce(e,t){return this._results.reduce(e,t)}forEach(e){this._results.forEach(e)}some(e){return this._results.some(e)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(e,t){this.dirty=!1;let r=aV(e);(this._changesDetected=!sV(this._results,r,t))&&(this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=IB};function IS(n){return(n.flags&128)===128}var TS=function(n){return n[n.OnPush=0]="OnPush",n[n.Default=1]="Default",n}(TS||{}),AS=new Map,TB=0;function AB(){return TB++}function kB(n){AS.set(n[uf],n)}function Vg(n){AS.delete(n[uf])}var JC="__ngContext__";function Fs(n,e){Ai(e)?(n[JC]=e[uf],kB(e)):n[JC]=e}function kS(n){return OS(n[qa])}function NS(n){return OS(n[fr])}function OS(n){for(;n!==null&&!si(n);)n=n[fr];return n}var Bg;function RS(n){Bg=n}function NB(){if(Bg!==void 0)return Bg;if(typeof document<"u")return document;throw new Ie(210,!1)}var km=new be("",{providedIn:"root",factory:()=>OB}),OB="ng",Nm=new be(""),rl=new be("",{providedIn:"platform",factory:()=>"unknown"});var Om=new be("",{providedIn:"root",factory:()=>NB().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var RB="h",PB="b";var PS=!1,FB=new be("",{providedIn:"root",factory:()=>PS});var FS=function(n){return n[n.CHANGE_DETECTION=0]="CHANGE_DETECTION",n[n.AFTER_NEXT_RENDER=1]="AFTER_NEXT_RENDER",n}(FS||{}),mf=new be("");var LB=(()=>{class n{impl=null;execute(){this.impl?.execute()}static \u0275prov=ot({token:n,providedIn:"root",factory:()=>new n})}return n})();var VB=()=>null;function LS(n,e,t=!1){return VB(n,e,t)}function VS(n,e){let t=n.contentQueries;if(t!==null){let r=Te(null);try{for(let i=0;i-1){let o;for(;++io?p="":p=i[d+1].toLowerCase(),r&2&&f!==p){if(cr(r))return!1;s=!0}}}}return cr(r)||s}function cr(n){return(n&1)===0}function $B(n,e,t,r){if(e===null)return-1;let i=0;if(r||!t){let o=!1;for(;i-1)for(t++;t0?'="'+l+'"':"")+"]"}else r&8?i+="."+s:r&4&&(i+=" "+s);else i!==""&&!cr(s)&&(e+=XC(o,i),i=""),r=s,o=o||!cr(r);t++}return i!==""&&(e+=XC(o,i)),e}function ZB(n){return n.map(GB).join(",")}function KB(n){let e=[],t=[],r=1,i=2;for(;rti&&zS(n,e,ti,!1),Kn(s?2:0,i),t(r,i)}finally{xo(o),Kn(s?3:1,i)}}function GS(n,e,t){Dm()&&(Fs(Nr(t,e),e),ZS(n,e,t))}function ZS(n,e,t){lH(n,e,t),(t.flags&64)===64&&uH(n,e,t)}function KS(n,e,t=Nr){let r=e.localNames;if(r!==null){let i=e.index+1;for(let o=0;onull;function sH(n){return n==="class"?"className":n==="for"?"htmlFor":n==="formaction"?"formAction":n==="innerHtml"?"innerHTML":n==="readonly"?"readOnly":n==="tabindex"?"tabIndex":n}function YS(n,e,t,r,i,o,s,l){let u=Nr(e,t),f=e.inputs,d;!l&&f!=null&&(d=f[r])?(Bm(n,t,d,r,i),To(e)&&aH(t,e.index)):e.type&3?(r=sH(r),i=s!=null?s(i,e.value||"",r):i,o.setProperty(u,r,i)):e.type&12}function aH(n,e){let t=Ar(e,n);t[le]&16||(t[le]|=64)}function lH(n,e,t){let r=t.directiveStart,i=t.directiveEnd;To(t)&&fH(e,t,n.data[r+t.componentOffset]),n.firstCreatePass||Kc(t,e);let o=t.initialInputs;for(let s=r;s0&&(t[i-1][fr]=e),r0&&(n[t-1][fr]=r[fr]);let o=Bc(n,En+e);yH(r[we],r);let s=o[ei];s!==null&&s.detachView(o[we]),r[jt]=null,r[fr]=null,r[le]&=-129}return r}function iE(n,e){if(el(e))return;let t=e[_t];t.destroyNode&&yf(n,e,t,3,null,null),wH(e)}function hg(n,e){if(el(e))return;let t=Te(null);try{e[le]&=-129,e[le]|=256,e[Sn]&&Yp(e[Sn]),CH(n,e),DH(n,e),e[we].type===1&&e[_t].destroy();let r=e[bo];if(r!==null&&si(e[jt])){r!==e[jt]&&Um(r,e);let i=e[ei];i!==null&&i.detachView(n)}Vg(e)}finally{Te(t)}}function DH(n,e){let t=n.cleanup,r=e[Uc];if(t!==null)for(let s=0;s=0?r[l]():r[-l].unsubscribe(),s+=2}else{let l=r[t[s+1]];t[s].call(l)}r!==null&&(e[Uc]=null);let i=e[Ti];if(i!==null){e[Ti]=null;for(let s=0;s{ff(n.lView)},consumerOnSignalRead(){this.lView[Sn]=this}});function VH(n){let e=n[Sn]??Object.create(BH);return e.lView=n,e}var BH=ft(tt({},Pa),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:n=>{let e=Co(n.lView);for(;e&&!aE(e[we]);)e=Co(e);e&&bm(e)},consumerOnSignalRead(){this.lView[Sn]=this}});function aE(n){return n.type!==2}function lE(n){if(n[$c]===null)return;let e=!0;for(;e;){let t=!1;for(let r of n[$c])r.dirty&&(t=!0,r.zone===null||Zone.current===r.zone?r.run():r.zone.run(()=>r.run()));e=t&&!!(n[le]&8192)}}var HH=100;function uE(n,e=!0,t=0){let i=n[Ni].rendererFactory,o=!1;o||i.begin?.();try{jH(n,t)}catch(s){throw e&&eE(n,s),s}finally{o||i.end?.()}}function jH(n,e){let t=tS();try{jC(!0),zg(n,e);let r=0;for(;cf(n);){if(r===HH)throw new Ie(103,!1);r++,zg(n,1)}}finally{jC(t)}}function UH(n,e,t,r){if(el(e))return;let i=e[le],o=!1,s=!1;Sm(e);let l=!0,u=null,f=null;o||(aE(n)?(f=RH(e),u=ac(f)):KD()===null?(l=!1,f=VH(e),u=ac(f)):e[Sn]&&(Yp(e[Sn]),e[Sn]=null));try{Kx(e),$V(n.bindingStartIndex),t!==null&&qS(n,e,t,2,r);let d=(i&3)===3;if(!o)if(d){let y=n.preOrderCheckHooks;y!==null&&Nc(e,y,null)}else{let y=n.preOrderHooks;y!==null&&Oc(e,y,0,null),cg(e,0)}if(s||$H(e),lE(e),cE(e,0),n.contentQueries!==null&&VS(n,e),!o)if(d){let y=n.contentCheckHooks;y!==null&&Nc(e,y)}else{let y=n.contentHooks;y!==null&&Oc(e,y,1),cg(e,1)}WH(n,e);let p=n.components;p!==null&&dE(e,p,0);let m=n.viewQuery;if(m!==null&&Hg(2,m,r),!o)if(d){let y=n.viewCheckHooks;y!==null&&Nc(e,y)}else{let y=n.viewHooks;y!==null&&Oc(e,y,2),cg(e,2)}if(n.firstUpdatePass===!0&&(n.firstUpdatePass=!1),e[ug]){for(let y of e[ug])y();e[ug]=null}o||(e[le]&=-73)}catch(d){throw o||ff(e),d}finally{f!==null&&(Zp(f,u),l&&FH(f)),Em()}}function cE(n,e){for(let t=kS(n);t!==null;t=NS(t))for(let r=En;r-1&&(Ug(e,r),Bc(t,r))}this._attachedToViewContainer=!1}iE(this._lView[we],this._lView)}onDestroy(e){Yx(this._lView,e)}markForCheck(){Wm(this._cdRefInjectingView||this._lView,4)}markForRefresh(){bm(this._cdRefInjectingView||this._lView)}detach(){this._lView[le]&=-129}reattach(){_g(this._lView),this._lView[le]|=128}detectChanges(){this._lView[le]|=1024,uE(this._lView,this.notifyErrorHandler)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new Ie(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=Wc(this._lView),t=this._lView[bo];t!==null&&!e&&Um(t,this._lView),nE(this._lView[we],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new Ie(902,!1);this._appRef=e;let t=Wc(this._lView),r=this._lView[bo];r!==null&&!t&&rE(r,this._lView),_g(this._lView)}},_o=(()=>{class n{static __NG_ELEMENT_ID__=ZH}return n})(),qH=_o,GH=class extends qH{_declarationLView;_declarationTContainer;elementRef;constructor(e,t,r){super(),this._declarationLView=e,this._declarationTContainer=t,this.elementRef=r}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(e,t){return this.createEmbeddedViewImpl(e,t)}createEmbeddedViewImpl(e,t,r){let i=kH(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:r});return new Eo(i)}};function ZH(){return qm(Jn(),Je())}function qm(n,e){return n.type&4?new GH(e,n,Ps(n,e)):null}function Gm(n,e,t,r,i){let o=n.data[e];if(o===null)o=KH(n,e,t,r,i),WV()&&(o.flags|=32);else if(o.type&64){o.type=t,o.value=r,o.attrs=i;let s=jV();o.injectorIndex=s===null?-1:s.injectorIndex}return tl(o,!0),o}function KH(n,e,t,r,i){let o=Xx(),s=eS(),l=s?o:o&&o.parent,u=n.data[e]=QH(n,l,t,e,r,i);return YH(n,u,o,s),u}function YH(n,e,t,r){n.firstChild===null&&(n.firstChild=e),t!==null&&(r?t.child==null&&e.parent!==null&&(t.child=e):t.next===null&&(t.next=e,e.prev=t))}function QH(n,e,t,r,i,o){let s=e?e.injectorIndex:-1,l=0;return VV()&&(l|=128),{type:t,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:l,providerIndexes:0,value:i,attrs:o,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:e,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}var zG=new RegExp(`^(\\d+)*(${PB}|${RB})*(.*)`);var JH=()=>null;function rx(n,e){return JH(n,e)}var Wg=class{},ef=class{},qg=class{resolveComponentFactory(e){throw Error(`No component factory found for ${xn(e)}.`)}},Ya=class{static NULL=new qg},_s=class{},Ao=(()=>{class n{destroyNode=null;static __NG_ELEMENT_ID__=()=>XH()}return n})();function XH(){let n=Je(),e=Jn(),t=Ar(e.index,n);return(Ai(t)?t:n)[_t]}var ej=(()=>{class n{static \u0275prov=ot({token:n,providedIn:"root",factory:()=>null})}return n})();function ix(n,e,t){let r=t?n.styles:null,i=t?n.classes:null,o=0;if(e!==null)for(let s=0;s0;){let t=n[--e];if(typeof t=="number"&&t<0)return t}return 0}function cj(n,e,t){if(t){if(e.exportAs)for(let r=0;r[this.componentDef],!0,0);m&&($S(p,m,C),Fs(m,y)),ZS(u,y,C),BS(u,C,y),mE(u,C),t!==void 0&&gj(C,this.ngContentSelectors,t),w=Ar(C.index,y),y[Qn]=w[Qn],Hm(u,y,null)}catch(C){throw w!==null&&Vg(w),Vg(y),C}finally{Em()}return new Zg(this.componentType,y)}finally{Te(o)}}},Zg=class extends Wg{_rootLView;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t){super(),this._rootLView=t,this._tNode=Zx(t[we],ti),this.location=Ps(this._tNode,t),this.instance=Ar(this._tNode.index,t)[Qn],this.hostView=this.changeDetectorRef=new Eo(t,void 0,!1),this.componentType=e}setInput(e,t){let r=this._tNode.inputs,i;if(r!==null&&(i=r[e])){if(this.previousInputValues??=new Map,this.previousInputValues.has(e)&&Object.is(this.previousInputValues.get(e),t))return;let o=this._rootLView;Bm(o[we],o,i,e,t),this.previousInputValues.set(e,t);let s=Ar(this._tNode.index,o);Wm(s,1)}}get injector(){return new wo(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function gj(n,e,t){let r=n.projection=[];for(let i=0;i{class n{static __NG_ELEMENT_ID__=mj}return n})();function mj(){let n=Jn();return vE(n,Je())}var yj=Vs,yE=class extends yj{_lContainer;_hostTNode;_hostLView;constructor(e,t,r){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=r}get element(){return Ps(this._hostTNode,this._hostLView)}get injector(){return new wo(this._hostTNode,this._hostLView)}get parentInjector(){let e=Im(this._hostTNode,this._hostLView);if(dS(e)){let t=Zc(e,this._hostLView),r=Gc(e),i=t[we].data[r+8];return new wo(i,t)}else return new wo(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=lx(this._lContainer);return t!==null&&t[e]||null}get length(){return this._lContainer.length-En}createEmbeddedView(e,t,r){let i,o;typeof r=="number"?i=r:r!=null&&(i=r.index,o=r.injector);let s=rx(this._lContainer,e.ssrId),l=e.createEmbeddedViewImpl(t||{},o,s);return this.insertImpl(l,i,nx(this._hostTNode,s)),l}createComponent(e,t,r,i,o){let s=e&&!SV(e),l;if(s)l=t;else{let w=t||{};l=w.index,r=w.injector,i=w.projectableNodes,o=w.environmentInjector||w.ngModuleRef}let u=s?e:new tf(xs(e)),f=r||this.parentInjector;if(!o&&u.ngModule==null){let C=(s?f:this.parentInjector).get(ki,null);C&&(o=C)}let d=xs(u.componentType??{}),p=rx(this._lContainer,d?.id??null),m=p?.firstChild??null,y=u.create(f,i,m,o);return this.insertImpl(y.hostView,l,nx(this._hostTNode,p)),y}insert(e,t){return this.insertImpl(e,t,!0)}insertImpl(e,t,r){let i=e._lView;if(kV(i)){let l=this.indexOf(e);if(l!==-1)this.detach(l);else{let u=i[jt],f=new yE(u,u[dr],u[jt]);f.detach(f.indexOf(e))}}let o=this._adjustIndex(t),s=this._lContainer;return NH(s,i,o,r),e.attachToViewContainerRef(),Tx(pg(s),o,e),e}move(e,t){return this.insert(e,t)}indexOf(e){let t=lx(this._lContainer);return t!==null?t.indexOf(e):-1}remove(e){let t=this._adjustIndex(e,-1),r=Ug(this._lContainer,t);r&&(Bc(pg(this._lContainer),t),iE(r[we],r))}detach(e){let t=this._adjustIndex(e,-1),r=Ug(this._lContainer,t);return r&&Bc(pg(this._lContainer),t)!=null?new Eo(r):null}_adjustIndex(e,t=0){return e??this.length+t}};function lx(n){return n[zc]}function pg(n){return n[zc]||(n[zc]=[])}function vE(n,e){let t,r=e[n.index];return si(r)?t=r:(t=XS(r,e,null,n),e[n.index]=t,Vm(e,t)),wj(t,e,n,r),new yE(t,n,e)}function vj(n,e){let t=n[_t],r=t.createComment(""),i=Nr(e,n),o=t.parentNode(i);return Jc(t,o,r,t.nextSibling(i),!1),r}var wj=Cj,bj=()=>!1;function Dj(n,e,t){return bj(n,e,t)}function Cj(n,e,t,r){if(n[Do])return;let i;t.type&8?i=Tr(r):i=vj(e,t),n[Do]=i}var Kg=class n{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new n(this.queryList)}setDirty(){this.queryList.setDirty()}},Yg=class n{queries;constructor(e=[]){this.queries=e}createEmbeddedView(e){let t=e.queries;if(t!==null){let r=e.contentQueries!==null?e.contentQueries[0]:t.length,i=[];for(let o=0;o0)r.push(s[l/2]);else{let f=o[l+1],d=e[-u];for(let p=En;pe.trim())}function kj(n,e,t){n.queries===null&&(n.queries=new Jg),n.queries.track(new Xg(e,t))}function Zm(n,e){return n.queries.getByIndex(e)}function Nj(n,e){let t=n[we],r=Zm(t,e);return r.crossesNgTemplate?em(t,n,e,[]):wE(t,n,r,e)}var Ms=class{};var nf=class extends Ms{injector;componentFactoryResolver=new Gg(this);instance=null;constructor(e){super();let t=new za([...e.providers,{provide:Ms,useValue:this},{provide:Ya,useValue:this.componentFactoryResolver}],e.parent||mm(),e.debugName,new Set(["environment"]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function Oj(n,e,t=null){return new nf({providers:n,parent:e,debugName:t,runEnvironmentInitializers:!0}).injector}var Rj=(()=>{class n{_injector;cachedInjectors=new Map;constructor(t){this._injector=t}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t)){let r=Px(!1,t.type),i=r.length>0?Oj([r],this._injector,`Standalone[${t.type.name}]`):null;this.cachedInjectors.set(t,i)}return this.cachedInjectors.get(t)}ngOnDestroy(){try{for(let t of this.cachedInjectors.values())t!==null&&t.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=ot({token:n,providedIn:"environment",factory:()=>new n(Ve(ki))})}return n})();function bE(n){return Ja(()=>{let e=DE(n),t=ft(tt({},e),{decls:n.decls,vars:n.vars,template:n.template,consts:n.consts||null,ngContentSelectors:n.ngContentSelectors,onPush:n.changeDetection===TS.OnPush,directiveDefs:null,pipeDefs:null,dependencies:e.standalone&&n.dependencies||null,getStandaloneInjector:e.standalone?i=>i.get(Rj).getOrCreateStandaloneInjector(t):null,getExternalStyles:null,signals:n.signals??!1,data:n.data||{},encapsulation:n.encapsulation||kr.Emulated,styles:n.styles||Zn,_:null,schemas:n.schemas||null,tView:null,id:""});e.standalone&&nl("NgStandalone"),CE(t);let r=n.dependencies;return t.directiveDefs=cx(r,!1),t.pipeDefs=cx(r,!0),t.id=Lj(t),t})}function Pj(n){return xs(n)||Nx(n)}function Fj(n){return n!==null}function Bs(n){return Ja(()=>({type:n.type,bootstrap:n.bootstrap||Zn,declarations:n.declarations||Zn,imports:n.imports||Zn,exports:n.exports||Zn,transitiveCompileScopes:null,schemas:n.schemas||null,id:n.id||null}))}function ux(n,e){if(n==null)return Cs;let t={};for(let r in n)if(n.hasOwnProperty(r)){let i=n[r],o,s,l=Ri.None;Array.isArray(i)?(l=i[0],o=i[1],s=i[2]??o):(o=i,s=i),e?(t[o]=l!==Ri.None?[r,l]:r,e[o]=s):t[o]=r}return t}function _n(n){return Ja(()=>{let e=DE(n);return CE(e),e})}function DE(n){let e={};return{type:n.type,providersResolver:null,factory:null,hostBindings:n.hostBindings||null,hostVars:n.hostVars||0,hostAttrs:n.hostAttrs||null,contentQueries:n.contentQueries||null,declaredInputs:e,inputTransforms:null,inputConfig:n.inputs||Cs,exportAs:n.exportAs||null,standalone:n.standalone??!0,signals:n.signals===!0,selectors:n.selectors||Zn,viewQuery:n.viewQuery||null,features:n.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:ux(n.inputs,e),outputs:ux(n.outputs),debugInfo:null}}function CE(n){n.features?.forEach(e=>e(n))}function cx(n,e){if(!n)return null;let t=e?Ox:Pj;return()=>(typeof n=="function"?n():n).map(r=>t(r)).filter(Fj)}function Lj(n){let e=0,t=typeof n.consts=="function"?"":n.consts,r=[n.selectors,n.ngContentSelectors,n.hostVars,n.hostAttrs,t,n.vars,n.decls,n.encapsulation,n.standalone,n.signals,n.exportAs,JSON.stringify(n.inputs),JSON.stringify(n.outputs),Object.getOwnPropertyNames(n.type.prototype),!!n.contentQueries,!!n.viewQuery];for(let o of r.join("|"))e=Math.imul(31,e)+o.charCodeAt(0)<<0;return e+=2147483648,"c"+e}function Vj(n){return Object.getPrototypeOf(n.prototype).constructor}function Pi(n){let e=Vj(n.type),t=!0,r=[n];for(;e;){let i;if(ni(n))i=e.\u0275cmp||e.\u0275dir;else{if(e.\u0275cmp)throw new Ie(903,!1);i=e.\u0275dir}if(i){if(t){r.push(i);let s=n;s.inputs=Tc(n.inputs),s.inputTransforms=Tc(n.inputTransforms),s.declaredInputs=Tc(n.declaredInputs),s.outputs=Tc(n.outputs);let l=i.hostBindings;l&&$j(n,l);let u=i.viewQuery,f=i.contentQueries;if(u&&jj(n,u),f&&Uj(n,f),Bj(n,i),j2(n.outputs,i.outputs),ni(i)&&i.data.animation){let d=n.data;d.animation=(d.animation||[]).concat(i.data.animation)}}let o=i.features;if(o)for(let s=0;s=0;r--){let i=n[r];i.hostVars=e+=i.hostVars,i.hostAttrs=Ga(i.hostAttrs,t=Ga(t,i.hostAttrs))}}function Tc(n){return n===Cs?{}:n===Zn?[]:n}function jj(n,e){let t=n.viewQuery;t?n.viewQuery=(r,i)=>{e(r,i),t(r,i)}:n.viewQuery=e}function Uj(n,e){let t=n.contentQueries;t?n.contentQueries=(r,i,o)=>{e(r,i,o),t(r,i,o)}:n.contentQueries=e}function $j(n,e){let t=n.hostBindings;t?n.hostBindings=(r,i)=>{e(r,i),t(r,i)}:n.hostBindings=e}function xE(n){return Wj(n)?Array.isArray(n)||!(n instanceof Map)&&Symbol.iterator in n:!1}function zj(n,e){if(Array.isArray(n))for(let t=0;t{class n{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((t,r)=>{this.resolve=t,this.reject=r});appInits=Oe(Yj,{optional:!0})??[];injector=Oe(ri);constructor(){}runInitializers(){if(this.initialized)return;let t=[];for(let i of this.appInits){let o=Bx(this.injector,i);if(il(o))t.push(o);else if(EE(o)){let s=new Promise((l,u)=>{o.subscribe({complete:l,error:u})});t.push(s)}}let r=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{r()}).catch(i=>{this.reject(i)}),t.length===0&&r(),this.initialized=!0}static \u0275fac=function(r){return new(r||n)};static \u0275prov=ot({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),Qj=(()=>{class n{static \u0275prov=ot({token:n,providedIn:"root",factory:()=>new tm})}return n})(),tm=class{queuedEffectCount=0;queues=new Map;schedule(e){this.enqueue(e)}remove(e){let t=e.zone,r=this.queues.get(t);r.has(e)&&(r.delete(e),this.queuedEffectCount--)}enqueue(e){let t=e.zone;this.queues.has(t)||this.queues.set(t,new Set);let r=this.queues.get(t);r.has(e)||(this.queuedEffectCount++,r.add(e))}flush(){for(;this.queuedEffectCount>0;)for(let[e,t]of this.queues)e===null?this.flushQueue(t):e.run(()=>this.flushQueue(t))}flushQueue(e){for(let t of e)e.delete(t),this.queuedEffectCount--,t.run()}},Jj=new be("");function Xj(){oC(()=>{throw new Ie(600,!1)})}function e3(n){return n.isBoundToModule}var t3=10;var Is=(()=>{class n{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=Oe(xB);afterRenderManager=Oe(LB);zonelessEnabled=Oe(hf);rootEffectScheduler=Oe(Qj);dirtyFlags=0;deferredDirtyFlags=0;tracingSnapshot=null;externalTestViews=new Set;afterTick=new Er;get allViews(){return[...this.externalTestViews.keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];isStable=Oe(pf).hasPendingTasks.pipe(vo(t=>!t));constructor(){Oe(mf,{optional:!0})}whenStable(){let t;return new Promise(r=>{t=this.isStable.subscribe({next:i=>{i&&r()}})}).finally(()=>{t.unsubscribe()})}_injector=Oe(ki);_rendererFactory=null;get injector(){return this._injector}bootstrap(t,r){let i=t instanceof ef;if(!this._injector.get(_E).done){let m=!i&&fV(t),y=!1;throw new Ie(405,y)}let s;i?s=t:s=this._injector.get(Ya).resolveComponentFactory(t),this.componentTypes.push(s.componentType);let l=e3(s)?void 0:this._injector.get(Ms),u=r||s.selector,f=s.create(ri.NULL,[],u,l),d=f.location.nativeElement,p=f.injector.get(SE,null);return p?.registerApplication(d),f.onDestroy(()=>{this.detachView(f.hostView),Pc(this.components,f),p?.unregisterApplication(d)}),this._loadComponent(f),f}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick=()=>{if(this.tracingSnapshot!==null){let r=this.tracingSnapshot;this.tracingSnapshot=null,r.run(FS.CHANGE_DETECTION,this._tick),r.dispose();return}if(this._runningTick)throw new Ie(101,!1);let t=Te(null);try{this._runningTick=!0,this.synchronize()}catch(r){this.internalErrorHandler(r)}finally{this._runningTick=!1,Te(t),this.afterTick.next()}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(_s,null,{optional:!0})),this.dirtyFlags|=this.deferredDirtyFlags,this.deferredDirtyFlags=0;let t=0;for(;this.dirtyFlags!==0&&t++cf(t))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(t){let r=t;this._views.push(r),r.attachToAppRef(this)}detachView(t){let r=t;Pc(this._views,r),r.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t),this._injector.get(Jj,[]).forEach(i=>i(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>Pc(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new Ie(406,!1);let t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(r){return new(r||n)};static \u0275prov=ot({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function Pc(n,e){let t=n.indexOf(e);t>-1&&n.splice(t,1)}function n3(n,e,t,r){if(!t&&!cf(n))return;uE(n,e,t&&!r?0:1)}function r3(n,e,t,r){return vf(n,Cm(),t)?e+Sx(t)+r:Ls}function Ac(n,e){return n<<17|e<<2}function Mo(n){return n>>17&32767}function i3(n){return(n&2)==2}function o3(n,e){return n&131071|e<<17}function nm(n){return n|2}function Ts(n){return(n&131068)>>2}function gg(n,e){return n&-131069|e<<2}function s3(n){return(n&1)===1}function rm(n){return n|1}function a3(n,e,t,r,i,o){let s=o?e.classBindings:e.styleBindings,l=Mo(s),u=Ts(s);n[r]=t;let f=!1,d;if(Array.isArray(t)){let p=t;d=p[1],(d===null||Xa(p,d)>0)&&(f=!0)}else d=t;if(i)if(u!==0){let m=Mo(n[l+1]);n[r+1]=Ac(m,l),m!==0&&(n[m+1]=gg(n[m+1],r)),n[l+1]=o3(n[l+1],r)}else n[r+1]=Ac(l,0),l!==0&&(n[l+1]=gg(n[l+1],r)),l=r;else n[r+1]=Ac(u,0),l===0?l=r:n[u+1]=gg(n[u+1],r),u=r;f&&(n[r+1]=nm(n[r+1])),fx(n,d,r,!0),fx(n,d,r,!1),l3(e,d,n,r,o),s=Ac(l,u),o?e.classBindings=s:e.styleBindings=s}function l3(n,e,t,r,i){let o=i?n.residualClasses:n.residualStyles;o!=null&&typeof e=="string"&&Xa(o,e)>=0&&(t[r+1]=rm(t[r+1]))}function fx(n,e,t,r){let i=n[t+1],o=e===null,s=r?Mo(i):Ts(i),l=!1;for(;s!==0&&(l===!1||o);){let u=n[s],f=n[s+1];u3(u,e)&&(l=!0,n[s+1]=r?rm(f):nm(f)),s=r?Mo(f):Ts(f)}l&&(n[t+1]=r?nm(i):rm(i))}function u3(n,e){return n===null||e==null||(Array.isArray(n)?n[1]:n)===e?!0:Array.isArray(n)&&typeof e=="string"?Xa(n,e)>=0:!1}function Hs(n,e,t){let r=Je(),i=Cm();if(vf(r,i,e)){let o=cn(),s=lS();YS(o,s,r,n,e,r[_t],t,!1)}return Hs}function dx(n,e,t,r,i){let o=e.inputs,s=i?"class":"style";Bm(n,t,o[s],s,r)}function Km(n,e){return c3(n,e,null,!0),Km}function c3(n,e,t,r){let i=Je(),o=cn(),s=zV(2);if(o.firstUpdatePass&&d3(o,n,s,r),e!==Ls&&vf(i,s,e)){let l=o.data[Rs()];y3(o,l,i,i[_t],n,i[s+1]=v3(e,t),r,s)}}function f3(n,e){return e>=n.expandoStartIndex}function d3(n,e,t,r){let i=n.data;if(i[t+1]===null){let o=i[Rs()],s=f3(n,t);w3(o,r)&&e===null&&!s&&(e=!1),e=h3(i,o,e,r),a3(i,o,e,t,s,r)}}function h3(n,e,t,r){let i=ZV(n),o=r?e.residualClasses:e.residualStyles;if(i===null)(r?e.classBindings:e.styleBindings)===0&&(t=mg(null,n,e,t,r),t=Qa(t,e.attrs,r),o=null);else{let s=e.directiveStylingLast;if(s===-1||n[s]!==i)if(t=mg(i,n,e,t,r),o===null){let u=p3(n,e,r);u!==void 0&&Array.isArray(u)&&(u=mg(null,n,e,u[1],r),u=Qa(u,e.attrs,r),g3(n,e,r,u))}else o=m3(n,e,r)}return o!==void 0&&(r?e.residualClasses=o:e.residualStyles=o),t}function p3(n,e,t){let r=t?e.classBindings:e.styleBindings;if(Ts(r)!==0)return n[Mo(r)]}function g3(n,e,t,r){let i=t?e.classBindings:e.styleBindings;n[Mo(i)]=r}function m3(n,e,t){let r,i=e.directiveEnd;for(let o=1+e.directiveStylingLast;o0;){let u=n[i],f=Array.isArray(u),d=f?u[1]:u,p=d===null,m=t[i+1];m===Ls&&(m=p?Zn:void 0);let y=p?ag(m,r):d===r?m:void 0;if(f&&!rf(y)&&(y=ag(u,r)),rf(y)&&(l=y,s))return l;let w=n[i+1];i=s?Mo(w):Ts(w)}if(e!==null){let u=o?e.residualClasses:e.residualStyles;u!=null&&(l=ag(u,r))}return l}function rf(n){return n!==void 0}function v3(n,e){return n==null||n===""||(typeof e=="string"?n=n+e:typeof n=="object"&&(n=xn(Rm(n)))),n}function w3(n,e){return(n.flags&(e?8:16))!==0}function dt(n,e,t,r){let i=Je(),o=cn(),s=ti+n,l=i[_t],u=o.firstCreatePass?gE(s,o,i,e,QS,Dm(),t,r):o.data[s],f=b3(o,i,u,l,e,n);i[s]=f;let d=ym(u);return tl(u,!0),$S(l,f,u),!tE(u)&&_m()&&$m(o,i,f,u),PV()===0&&Fs(f,i),FV(),d&&(GS(o,i,u),BS(o,u,i)),r!==null&&KS(i,u),dt}function ht(){let n=Jn();eS()?UV():(n=n.parent,tl(n,!1));let e=n;BV(e)&&HV(),LV();let t=cn();return t.firstCreatePass&&mE(t,e),e.classesWithoutHost!=null&&tB(e)&&dx(t,e,Je(),e.classesWithoutHost,!0),e.stylesWithoutHost!=null&&nB(e)&&dx(t,e,Je(),e.stylesWithoutHost,!1),ht}function ol(n,e,t,r){return dt(n,e,t,r),ht(),ol}var b3=(n,e,t,r,i,o)=>(Mm(!0),jS(r,i,QV()));function ME(){return Je()}var of="en-US";var D3=of;function C3(n){typeof n=="string"&&(D3=n.toLowerCase().replace(/_/g,"-"))}var x3=(n,e,t)=>{};function ai(n,e,t,r){let i=Je(),o=cn(),s=Jn();return IE(o,i,i[_t],s,n,e,r),ai}function S3(n,e,t,r){let i=n.cleanup;if(i!=null)for(let o=0;ou?l[u]:null}typeof s=="string"&&(o+=2)}return null}function IE(n,e,t,r,i,o,s){let l=ym(r),f=n.firstCreatePass&&Jx(n),d=e[Qn],p=Qx(e),m=!0;if(r.type&3||s){let C=Nr(r,e),S=s?s(C):C,_=p.length,P=s?j=>s(Tr(j[r.index])):r.index,B=null;if(!s&&l&&(B=S3(n,e,i,r.index)),B!==null){let j=B.__ngLastListenerFn__||B;j.__ngNextListenerFn__=o,B.__ngLastListenerFn__=o,m=!1}else{o=gx(r,e,d,o),x3(C,i,o);let j=t.listen(S,i,o);p.push(o,j),f&&f.push(i,P,_,_+1)}}else o=gx(r,e,d,o);let y=r.outputs,w;if(m&&y!==null&&(w=y[i])){let C=w.length;if(C)for(let S=0;S(Mm(!0),YB(e[_t],r));function sl(n){return js("",n,""),sl}function js(n,e,t){let r=Je(),i=r3(r,n,e,t);return i!==Ls&&_3(r,Rs(),i),js}function _3(n,e,t){let r=Gx(e,n);QB(n[_t],r,t)}function bf(n,e,t){MS(e)&&(e=e());let r=Je(),i=Cm();if(vf(r,i,e)){let o=cn(),s=lS();YS(o,s,r,n,e,r[_t],t,!1)}return bf}function ey(n,e){let t=MS(n);return t&&n.set(e),t}function Df(n,e){let t=Je(),r=cn(),i=Jn();return IE(r,t,t[_t],i,n,e),Df}function M3(n,e,t){let r=cn();if(r.firstCreatePass){let i=ni(n);im(t,r.data,r.blueprint,i,!0),im(e,r.data,r.blueprint,i,!1)}}function im(n,e,t,r,i){if(n=Yt(n),Array.isArray(n))for(let o=0;o>20;if(Ss(n)||!n.multi){let y=new So(f,i,Be),w=vg(u,e,i?d:d+m,p);w===-1?(kg(Kc(l,s),o,u),yg(o,n,e.length),e.push(u),l.directiveStart++,l.directiveEnd++,i&&(l.providerIndexes+=1048576),t.push(y),s.push(y)):(t[w]=y,s[w]=y)}else{let y=vg(u,e,d+m,p),w=vg(u,e,d,d+m),C=y>=0&&t[y],S=w>=0&&t[w];if(i&&!S||!i&&!C){kg(Kc(l,s),o,u);let _=A3(i?T3:I3,t.length,i,r,f);!i&&S&&(t[w].providerFactory=_),yg(o,n,e.length,0),e.push(u),l.directiveStart++,l.directiveEnd++,i&&(l.providerIndexes+=1048576),t.push(_),s.push(_)}else{let _=TE(t[i?w:y],f,!i&&r);yg(o,n,y>-1?y:w,_)}!i&&r&&S&&t[w].componentProviders++}}}function yg(n,e,t,r){let i=Ss(e),o=mV(e);if(i||o){let u=(o?Yt(e.useClass):e).prototype.ngOnDestroy;if(u){let f=n.destroyHooks||(n.destroyHooks=[]);if(!i&&e.multi){let d=f.indexOf(t);d===-1?f.push(t,[r,u]):f[d+1].push(r,u)}else f.push(t,u)}}}function TE(n,e,t){return t&&n.componentProviders++,n.multi.push(e)-1}function vg(n,e,t,r){for(let i=t;i{t.providersResolver=(r,i)=>M3(r,i?i(n):n,e)}}var k3=(()=>{class n{zone=Oe(Ht);changeDetectionScheduler=Oe(Ka);applicationRef=Oe(Is);_onMicrotaskEmptySubscription;initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.changeDetectionScheduler.runningTick||this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static \u0275fac=function(r){return new(r||n)};static \u0275prov=ot({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),N3=new be("",{factory:()=>!1});function AE({ngZoneFactory:n,ignoreChangesOutsideZone:e,scheduleInRootZone:t}){return n??=()=>new Ht(ft(tt({},NE()),{scheduleInRootZone:t})),[{provide:Ht,useFactory:n},{provide:$a,multi:!0,useFactory:()=>{let r=Oe(k3,{optional:!0});return()=>r.initialize()}},{provide:$a,multi:!0,useFactory:()=>{let r=Oe(O3);return()=>{r.initialize()}}},e===!0?{provide:xS,useValue:!0}:[],{provide:SS,useValue:t??DS}]}function kE(n){let e=n?.ignoreChangesOutsideZone,t=n?.scheduleInRootZone,r=AE({ngZoneFactory:()=>{let i=NE(n);return i.scheduleInRootZone=t,i.shouldCoalesceEventChangeDetection&&nl("NgZone_CoalesceEvent"),new Ht(i)},ignoreChangesOutsideZone:e,scheduleInRootZone:t});return Rx([{provide:N3,useValue:!0},{provide:hf,useValue:!1},r])}function NE(n){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:n?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:n?.runCoalescing??!1}}var O3=(()=>{class n{subscription=new Kt;initialized=!1;zone=Oe(Ht);pendingTasks=Oe(pf);initialize(){if(this.initialized)return;this.initialized=!0;let t=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(t=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{Ht.assertNotInAngularZone(),queueMicrotask(()=>{t!==null&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(t),t=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{Ht.assertInAngularZone(),t??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}static \u0275fac=function(r){return new(r||n)};static \u0275prov=ot({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var R3=(()=>{class n{appRef=Oe(Is);taskService=Oe(pf);ngZone=Oe(Ht);zonelessEnabled=Oe(hf);tracing=Oe(mf,{optional:!0});disableScheduling=Oe(xS,{optional:!0})??!1;zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new Kt;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Qc):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(Oe(SS,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{this.runningTick||this.cleanup()})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()})),this.disableScheduling||=!this.zonelessEnabled&&(this.ngZone instanceof Fg||!this.zoneIsDefined)}notify(t){if(!this.zonelessEnabled&&t===5)return;let r=!1;switch(t){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 8:{this.appRef.deferredDirtyFlags|=8;break}case 6:{this.appRef.dirtyFlags|=2,r=!0;break}case 13:{this.appRef.dirtyFlags|=16,r=!0;break}case 14:{this.appRef.dirtyFlags|=2,r=!0;break}case 12:{r=!0;break}case 10:case 9:case 7:case 11:default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick(r))return;let i=this.useMicrotaskScheduler?ZC:ES;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>i(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>i(()=>this.tick()))}shouldScheduleTick(t){return!(this.disableScheduling&&!t||this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(Qc+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let t=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(r){throw this.taskService.remove(t),r}finally{this.cleanup()}this.useMicrotaskScheduler=!0,ZC(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(t)})}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let t=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(t)}}static \u0275fac=function(r){return new(r||n)};static \u0275prov=ot({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function P3(){return typeof $localize<"u"&&$localize.locale||of}var ty=new be("",{providedIn:"root",factory:()=>Oe(ty,Ee.Optional|Ee.SkipSelf)||P3()});var sm=new be(""),F3=new be("");function Va(n){return!n.moduleRef}function L3(n){let e=Va(n)?n.r3Injector:n.moduleRef.injector,t=e.get(Ht);return t.run(()=>{Va(n)?n.r3Injector.resolveInjectorInitializers():n.moduleRef.resolveInjectorInitializers();let r=e.get(Oi,null),i;if(t.runOutsideAngular(()=>{i=t.onError.subscribe({next:o=>{r.handleError(o)}})}),Va(n)){let o=()=>e.destroy(),s=n.platformInjector.get(sm);s.add(o),e.onDestroy(()=>{i.unsubscribe(),s.delete(o)})}else{let o=()=>n.moduleRef.destroy(),s=n.platformInjector.get(sm);s.add(o),n.moduleRef.onDestroy(()=>{Pc(n.allPlatformModules,n.moduleRef),i.unsubscribe(),s.delete(o)})}return B3(r,t,()=>{let o=e.get(_E);return o.runInitializers(),o.donePromise.then(()=>{let s=e.get(ty,of);if(C3(s||of),!e.get(F3,!0))return Va(n)?e.get(Is):(n.allPlatformModules.push(n.moduleRef),n.moduleRef);if(Va(n)){let u=e.get(Is);return n.rootComponent!==void 0&&u.bootstrap(n.rootComponent),u}else return V3(n.moduleRef,n.allPlatformModules),n.moduleRef})})})}function V3(n,e){let t=n.injector.get(Is);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(r=>t.bootstrap(r));else if(n.instance.ngDoBootstrap)n.instance.ngDoBootstrap(t);else throw new Ie(-403,!1);e.push(n)}function B3(n,e,t){try{let r=t();return il(r)?r.catch(i=>{throw e.runOutsideAngular(()=>n.handleError(i)),i}):r}catch(r){throw e.runOutsideAngular(()=>n.handleError(r)),r}}var Fc=null;function H3(n=[],e){return ri.create({name:e,providers:[{provide:lf,useValue:"platform"},{provide:sm,useValue:new Set([()=>Fc=null])},...n]})}function j3(n=[]){if(Fc)return Fc;let e=H3(n);return Fc=e,Xj(),U3(e),e}function U3(n){let e=n.get(Nm,null);Bx(n,()=>{e?.forEach(t=>t())})}var Cf=(()=>{class n{static __NG_ELEMENT_ID__=$3}return n})();function $3(n){return z3(Jn(),Je(),(n&16)===16)}function z3(n,e,t){if(To(n)&&!t){let r=Ar(n.index,e);return new Eo(r,r)}else if(n.type&175){let r=e[Ir];return new Eo(r,e)}return null}var am=class{constructor(){}supports(e){return xE(e)}create(e){return new lm(e)}},W3=(n,e)=>e,lm=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(e){this._trackByFn=e||W3}forEachItem(e){let t;for(t=this._itHead;t!==null;t=t._next)e(t)}forEachOperation(e){let t=this._itHead,r=this._removalsHead,i=0,o=null;for(;t||r;){let s=!r||t&&t.currentIndex{s=this._trackByFn(i,l),t===null||!Object.is(t.trackById,s)?(t=this._mismatch(t,l,s,i),r=!0):(r&&(t=this._verifyReinsertion(t,l,s,i)),Object.is(t.item,l)||this._addIdentityChange(t,l)),t=t._next,i++}),this.length=i;return this._truncate(t),this.collection=e,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let e;for(e=this._previousItHead=this._itHead;e!==null;e=e._next)e._nextPrevious=e._next;for(e=this._additionsHead;e!==null;e=e._nextAdded)e.previousIndex=e.currentIndex;for(this._additionsHead=this._additionsTail=null,e=this._movesHead;e!==null;e=e._nextMoved)e.previousIndex=e.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(e,t,r,i){let o;return e===null?o=this._itTail:(o=e._prev,this._remove(e)),e=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null),e!==null?(Object.is(e.item,t)||this._addIdentityChange(e,t),this._reinsertAfter(e,o,i)):(e=this._linkedRecords===null?null:this._linkedRecords.get(r,i),e!==null?(Object.is(e.item,t)||this._addIdentityChange(e,t),this._moveAfter(e,o,i)):e=this._addAfter(new um(t,r),o,i)),e}_verifyReinsertion(e,t,r,i){let o=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null);return o!==null?e=this._reinsertAfter(o,e._prev,i):e.currentIndex!=i&&(e.currentIndex=i,this._addToMoves(e,i)),e}_truncate(e){for(;e!==null;){let t=e._next;this._addToRemovals(this._unlink(e)),e=t}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(e,t,r){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(e);let i=e._prevRemoved,o=e._nextRemoved;return i===null?this._removalsHead=o:i._nextRemoved=o,o===null?this._removalsTail=i:o._prevRemoved=i,this._insertAfter(e,t,r),this._addToMoves(e,r),e}_moveAfter(e,t,r){return this._unlink(e),this._insertAfter(e,t,r),this._addToMoves(e,r),e}_addAfter(e,t,r){return this._insertAfter(e,t,r),this._additionsTail===null?this._additionsTail=this._additionsHead=e:this._additionsTail=this._additionsTail._nextAdded=e,e}_insertAfter(e,t,r){let i=t===null?this._itHead:t._next;return e._next=i,e._prev=t,i===null?this._itTail=e:i._prev=e,t===null?this._itHead=e:t._next=e,this._linkedRecords===null&&(this._linkedRecords=new sf),this._linkedRecords.put(e),e.currentIndex=r,e}_remove(e){return this._addToRemovals(this._unlink(e))}_unlink(e){this._linkedRecords!==null&&this._linkedRecords.remove(e);let t=e._prev,r=e._next;return t===null?this._itHead=r:t._next=r,r===null?this._itTail=t:r._prev=t,e}_addToMoves(e,t){return e.previousIndex===t||(this._movesTail===null?this._movesTail=this._movesHead=e:this._movesTail=this._movesTail._nextMoved=e),e}_addToRemovals(e){return this._unlinkedRecords===null&&(this._unlinkedRecords=new sf),this._unlinkedRecords.put(e),e.currentIndex=null,e._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=e,e._prevRemoved=null):(e._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=e),e}_addIdentityChange(e,t){return e.item=t,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=e:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=e,e}},um=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(e,t){this.item=e,this.trackById=t}},cm=class{_head=null;_tail=null;add(e){this._head===null?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):(this._tail._nextDup=e,e._prevDup=this._tail,e._nextDup=null,this._tail=e)}get(e,t){let r;for(r=this._head;r!==null;r=r._nextDup)if((t===null||t<=r.currentIndex)&&Object.is(r.trackById,e))return r;return null}remove(e){let t=e._prevDup,r=e._nextDup;return t===null?this._head=r:t._nextDup=r,r===null?this._tail=t:r._prevDup=t,this._head===null}},sf=class{map=new Map;put(e){let t=e.trackById,r=this.map.get(t);r||(r=new cm,this.map.set(t,r)),r.add(e)}get(e,t){let r=e,i=this.map.get(r);return i?i.get(e,t):null}remove(e){let t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function mx(n,e,t){let r=n.previousIndex;if(r===null)return r;let i=0;return t&&r{class n{factories;static \u0275prov=ot({token:n,providedIn:"root",factory:yx});constructor(t){this.factories=t}static create(t,r){if(r!=null){let i=r.factories.slice();t=t.concat(i)}return new n(t)}static extend(t){return{provide:n,useFactory:r=>n.create(t,r||yx()),deps:[[n,new oV,new Ix]]}}find(t){let r=this.factories.find(i=>i.supports(t));if(r!=null)return r;throw new Ie(901,!1)}}return n})();function OE(n){try{let{rootComponent:e,appProviders:t,platformProviders:r}=n,i=j3(r),o=[AE({}),{provide:Ka,useExisting:R3},...t||[]],s=new nf({providers:o,parent:i,debugName:"",runEnvironmentInitializers:!1});return L3({r3Injector:s.injector,platformInjector:i,rootComponent:e})}catch(e){return Promise.reject(e)}}function ry(n){return typeof n=="boolean"?n:n!=null&&n!=="false"}function xf(n,e){nl("NgSignals");let t=nC(n);return e?.equal&&(t[qn].equal=e.equal),t}function Fi(n){let e=Te(null);try{return n()}finally{Te(e)}}var vx=class{[qn];constructor(e){this[qn]=e}destroy(){this[qn].destroy()}};var LE=null;function Us(){return LE}function VE(n){LE??=n}var Ef=class{};var Li=new be("");function BE(n,e){e=encodeURIComponent(e);for(let t of n.split(";")){let r=t.indexOf("="),[i,o]=r==-1?[t,""]:[t.slice(0,r),t.slice(r+1)];if(i.trim()===e)return decodeURIComponent(o)}return null}var iy=class{$implicit;ngForOf;index;count;constructor(e,t,r,i){this.$implicit=e,this.ngForOf=t,this.index=r,this.count=i}get first(){return this.index===0}get last(){return this.index===this.count-1}get even(){return this.index%2===0}get odd(){return!this.even}},HE=(()=>{class n{_viewContainer;_template;_differs;set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}_ngForOf=null;_ngForOfDirty=!0;_differ=null;_trackByFn;constructor(t,r,i){this._viewContainer=t,this._template=r,this._differs=i}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;let t=this._ngForOf;!this._differ&&t&&(this._differ=this._differs.find(t).create(this.ngForTrackBy))}if(this._differ){let t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){let r=this._viewContainer;t.forEachOperation((i,o,s)=>{if(i.previousIndex==null)r.createEmbeddedView(this._template,new iy(i.item,this._ngForOf,-1,-1),s===null?void 0:s);else if(s==null)r.remove(o===null?void 0:o);else if(o!==null){let l=r.get(o);r.move(l,s),RE(l,i)}});for(let i=0,o=r.length;i{let o=r.get(i.currentIndex);RE(o,i)})}static ngTemplateContextGuard(t,r){return!0}static \u0275fac=function(r){return new(r||n)(Be(Vs),Be(_o),Be(ny))};static \u0275dir=_n({type:n,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}})}return n})();function RE(n,e){n.context.$implicit=e.item}var jE=(()=>{class n{_viewContainer;_context=new oy;_thenTemplateRef=null;_elseTemplateRef=null;_thenViewRef=null;_elseViewRef=null;constructor(t,r){this._viewContainer=t,this._thenTemplateRef=r}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){PE("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){PE("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngIfUseIfTypeGuard;static ngTemplateGuard_ngIf;static ngTemplateContextGuard(t,r){return!0}static \u0275fac=function(r){return new(r||n)(Be(Vs),Be(_o))};static \u0275dir=_n({type:n,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}})}return n})(),oy=class{$implicit=null;ngIf=null};function PE(n,e){if(!!!(!e||e.createEmbeddedView))throw new Error(`${n} must be a TemplateRef, but received '${xn(e)}'.`)}var sy=(()=>{class n{static \u0275fac=function(r){return new(r||n)};static \u0275mod=Bs({type:n});static \u0275inj=As({})}return n})(),UE="browser",q3="server";function ay(n){return n===q3}var _f=class{};var uy=class extends Ef{supportsDOMEvents=!0},cy=class n extends uy{static makeCurrent(){VE(new n)}onAndCancel(e,t,r,i){return e.addEventListener(t,r,i),()=>{e.removeEventListener(t,r,i)}}dispatchEvent(e,t){e.dispatchEvent(t)}remove(e){e.remove()}createElement(e,t){return t=t||this.getDefaultDocument(),t.createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,t){return t==="window"?window:t==="document"?e:t==="body"?e.body:null}getBaseHref(e){let t=Z3();return t==null?null:K3(t)}resetBaseElement(){ll=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return BE(document.cookie,e)}},ll=null;function Z3(){return ll=ll||document.querySelector("base"),ll?ll.getAttribute("href"):null}function K3(n){return new URL(n,document.baseURI).pathname}var Y3=(()=>{class n{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||n)};static \u0275prov=ot({token:n,factory:n.\u0275fac})}return n})(),fy=new be(""),ZE=(()=>{class n{_zone;_plugins;_eventNameToPlugin=new Map;constructor(t,r){this._zone=r,t.forEach(i=>{i.manager=this}),this._plugins=t.slice().reverse()}addEventListener(t,r,i,o){return this._findPluginFor(r).addEventListener(t,r,i,o)}getZone(){return this._zone}_findPluginFor(t){let r=this._eventNameToPlugin.get(t);if(r)return r;if(r=this._plugins.find(o=>o.supports(t)),!r)throw new Ie(5101,!1);return this._eventNameToPlugin.set(t,r),r}static \u0275fac=function(r){return new(r||n)(Ve(fy),Ve(Ht))};static \u0275prov=ot({token:n,factory:n.\u0275fac})}return n})(),If=class{_doc;constructor(e){this._doc=e}manager},Mf="ng-app-id";function $E(n){for(let e of n)e.remove()}function zE(n,e){let t=e.createElement("style");return t.textContent=n,t}function Q3(n,e,t,r){let i=n.head?.querySelectorAll(`style[${Mf}="${e}"],link[${Mf}="${e}"]`);if(i)for(let o of i)o.removeAttribute(Mf),o instanceof HTMLLinkElement?r.set(o.href.slice(o.href.lastIndexOf("/")+1),{usage:0,elements:[o]}):o.textContent&&t.set(o.textContent,{usage:0,elements:[o]})}function dy(n,e){let t=e.createElement("link");return t.setAttribute("rel","stylesheet"),t.setAttribute("href",n),t}var KE=(()=>{class n{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;isServer;constructor(t,r,i,o={}){this.doc=t,this.appId=r,this.nonce=i,this.isServer=ay(o),Q3(t,r,this.inline,this.external),this.hosts.add(t.head)}addStyles(t,r){for(let i of t)this.addUsage(i,this.inline,zE);r?.forEach(i=>this.addUsage(i,this.external,dy))}removeStyles(t,r){for(let i of t)this.removeUsage(i,this.inline);r?.forEach(i=>this.removeUsage(i,this.external))}addUsage(t,r,i){let o=r.get(t);o?o.usage++:r.set(t,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,i(t,this.doc)))})}removeUsage(t,r){let i=r.get(t);i&&(i.usage--,i.usage<=0&&($E(i.elements),r.delete(t)))}ngOnDestroy(){for(let[,{elements:t}]of[...this.inline,...this.external])$E(t);this.hosts.clear()}addHost(t){this.hosts.add(t);for(let[r,{elements:i}]of this.inline)i.push(this.addElement(t,zE(r,this.doc)));for(let[r,{elements:i}]of this.external)i.push(this.addElement(t,dy(r,this.doc)))}removeHost(t){this.hosts.delete(t)}addElement(t,r){return this.nonce&&r.setAttribute("nonce",this.nonce),this.isServer&&r.setAttribute(Mf,this.appId),t.appendChild(r)}static \u0275fac=function(r){return new(r||n)(Ve(Li),Ve(km),Ve(Om,8),Ve(rl))};static \u0275prov=ot({token:n,factory:n.\u0275fac})}return n})(),ly={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},py=/%COMP%/g;var YE="%COMP%",J3=`_nghost-${YE}`,X3=`_ngcontent-${YE}`,eU=!0,tU=new be("",{providedIn:"root",factory:()=>eU});function nU(n){return X3.replace(py,n)}function rU(n){return J3.replace(py,n)}function QE(n,e){return e.map(t=>t.replace(py,n))}var WE=(()=>{class n{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;platformId;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;platformIsServer;constructor(t,r,i,o,s,l,u,f=null,d=null){this.eventManager=t,this.sharedStylesHost=r,this.appId=i,this.removeStylesOnCompDestroy=o,this.doc=s,this.platformId=l,this.ngZone=u,this.nonce=f,this.tracingService=d,this.platformIsServer=ay(l),this.defaultRenderer=new ul(t,s,u,this.platformIsServer,this.tracingService)}createRenderer(t,r){if(!t||!r)return this.defaultRenderer;this.platformIsServer&&r.encapsulation===kr.ShadowDom&&(r=ft(tt({},r),{encapsulation:kr.Emulated}));let i=this.getOrCreateRenderer(t,r);return i instanceof Tf?i.applyToHost(t):i instanceof cl&&i.applyStyles(),i}getOrCreateRenderer(t,r){let i=this.rendererByCompId,o=i.get(r.id);if(!o){let s=this.doc,l=this.ngZone,u=this.eventManager,f=this.sharedStylesHost,d=this.removeStylesOnCompDestroy,p=this.platformIsServer,m=this.tracingService;switch(r.encapsulation){case kr.Emulated:o=new Tf(u,f,r,this.appId,d,s,l,p,m);break;case kr.ShadowDom:return new hy(u,f,t,r,s,l,this.nonce,p,m);default:o=new cl(u,f,r,d,s,l,p,m);break}i.set(r.id,o)}return o}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(t){this.rendererByCompId.delete(t)}static \u0275fac=function(r){return new(r||n)(Ve(ZE),Ve(KE),Ve(km),Ve(tU),Ve(Li),Ve(rl),Ve(Ht),Ve(Om),Ve(mf,8))};static \u0275prov=ot({token:n,factory:n.\u0275fac})}return n})(),ul=class{eventManager;doc;ngZone;platformIsServer;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(e,t,r,i,o){this.eventManager=e,this.doc=t,this.ngZone=r,this.platformIsServer=i,this.tracingService=o}destroy(){}destroyNode=null;createElement(e,t){return t?this.doc.createElementNS(ly[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(qE(e)?e.content:e).appendChild(t)}insertBefore(e,t,r){e&&(qE(e)?e.content:e).insertBefore(t,r)}removeChild(e,t){t.remove()}selectRootElement(e,t){let r=typeof e=="string"?this.doc.querySelector(e):e;if(!r)throw new Ie(-5104,!1);return t||(r.textContent=""),r}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,t,r,i){if(i){t=i+":"+t;let o=ly[i];o?e.setAttributeNS(o,t,r):e.setAttribute(t,r)}else e.setAttribute(t,r)}removeAttribute(e,t,r){if(r){let i=ly[r];i?e.removeAttributeNS(i,t):e.removeAttribute(`${r}:${t}`)}else e.removeAttribute(t)}addClass(e,t){e.classList.add(t)}removeClass(e,t){e.classList.remove(t)}setStyle(e,t,r,i){i&(ii.DashCase|ii.Important)?e.style.setProperty(t,r,i&ii.Important?"important":""):e.style[t]=r}removeStyle(e,t,r){r&ii.DashCase?e.style.removeProperty(t):e.style[t]=""}setProperty(e,t,r){e!=null&&(e[t]=r)}setValue(e,t){e.nodeValue=t}listen(e,t,r,i){if(typeof e=="string"&&(e=Us().getGlobalEventTarget(this.doc,e),!e))throw new Error(`Unsupported event target ${e} for event ${t}`);let o=this.decoratePreventDefault(r);return this.tracingService!==null&&this.tracingService.wrapEventListener&&(o=this.tracingService.wrapEventListener(e,t,o)),this.eventManager.addEventListener(e,t,o,i)}decoratePreventDefault(e){return t=>{if(t==="__ngUnwrap__")return e;(this.platformIsServer?this.ngZone.runGuarded(()=>e(t)):e(t))===!1&&t.preventDefault()}}};function qE(n){return n.tagName==="TEMPLATE"&&n.content!==void 0}var hy=class extends ul{sharedStylesHost;hostEl;shadowRoot;constructor(e,t,r,i,o,s,l,u,f){super(e,o,s,u,f),this.sharedStylesHost=t,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);let d=i.styles;d=QE(i.id,d);for(let m of d){let y=document.createElement("style");l&&y.setAttribute("nonce",l),y.textContent=m,this.shadowRoot.appendChild(y)}let p=i.getExternalStyles?.();if(p)for(let m of p){let y=dy(m,o);l&&y.setAttribute("nonce",l),this.shadowRoot.appendChild(y)}}nodeOrShadowRoot(e){return e===this.hostEl?this.shadowRoot:e}appendChild(e,t){return super.appendChild(this.nodeOrShadowRoot(e),t)}insertBefore(e,t,r){return super.insertBefore(this.nodeOrShadowRoot(e),t,r)}removeChild(e,t){return super.removeChild(null,t)}parentNode(e){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(e)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}},cl=class extends ul{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(e,t,r,i,o,s,l,u,f){super(e,o,s,l,u),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=i;let d=r.styles;this.styles=f?QE(f,d):d,this.styleUrls=r.getExternalStyles?.(f)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},Tf=class extends cl{contentAttr;hostAttr;constructor(e,t,r,i,o,s,l,u,f){let d=i+"-"+r.id;super(e,t,r,o,s,l,u,f,d),this.contentAttr=nU(d),this.hostAttr=rU(d)}applyToHost(e){this.applyStyles(),this.setAttribute(e,this.hostAttr,"")}createElement(e,t){let r=super.createElement(e,t);return super.setAttribute(r,this.contentAttr,""),r}},iU=(()=>{class n extends If{constructor(t){super(t)}supports(t){return!0}addEventListener(t,r,i,o){return t.addEventListener(r,i,o),()=>this.removeEventListener(t,r,i,o)}removeEventListener(t,r,i,o){return t.removeEventListener(r,i,o)}static \u0275fac=function(r){return new(r||n)(Ve(Li))};static \u0275prov=ot({token:n,factory:n.\u0275fac})}return n})(),GE=["alt","control","meta","shift"],oU={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},sU={alt:n=>n.altKey,control:n=>n.ctrlKey,meta:n=>n.metaKey,shift:n=>n.shiftKey},aU=(()=>{class n extends If{constructor(t){super(t)}supports(t){return n.parseEventName(t)!=null}addEventListener(t,r,i,o){let s=n.parseEventName(r),l=n.eventCallback(s.fullKey,i,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Us().onAndCancel(t,s.domEventName,l,o))}static parseEventName(t){let r=t.toLowerCase().split("."),i=r.shift();if(r.length===0||!(i==="keydown"||i==="keyup"))return null;let o=n._normalizeKey(r.pop()),s="",l=r.indexOf("code");if(l>-1&&(r.splice(l,1),s="code."),GE.forEach(f=>{let d=r.indexOf(f);d>-1&&(r.splice(d,1),s+=f+".")}),s+=o,r.length!=0||o.length===0)return null;let u={};return u.domEventName=i,u.fullKey=s,u}static matchEventFullKeyCode(t,r){let i=oU[t.key]||t.key,o="";return r.indexOf("code.")>-1&&(i=t.code,o="code."),i==null||!i?!1:(i=i.toLowerCase(),i===" "?i="space":i==="."&&(i="dot"),GE.forEach(s=>{if(s!==i){let l=sU[s];l(t)&&(o+=s+".")}}),o+=i,o===r)}static eventCallback(t,r,i){return o=>{n.matchEventFullKeyCode(o,t)&&i.runGuarded(()=>r(o))}}static _normalizeKey(t){return t==="esc"?"escape":t}static \u0275fac=function(r){return new(r||n)(Ve(Li))};static \u0275prov=ot({token:n,factory:n.\u0275fac})}return n})();function JE(n,e){return OE(tt({rootComponent:n},lU(e)))}function lU(n){return{appProviders:[...hU,...n?.providers??[]],platformProviders:dU}}function uU(){cy.makeCurrent()}function cU(){return new Oi}function fU(){return RS(document),document}var dU=[{provide:rl,useValue:UE},{provide:Nm,useValue:uU,multi:!0},{provide:Li,useFactory:fU,deps:[]}];var hU=[{provide:lf,useValue:"root"},{provide:Oi,useFactory:cU,deps:[]},{provide:fy,useClass:iU,multi:!0,deps:[Li]},{provide:fy,useClass:aU,multi:!0,deps:[Li]},WE,KE,ZE,{provide:_s,useExisting:WE},{provide:_f,useClass:Y3,deps:[]},[]];var a1=(()=>{class n{_renderer;_elementRef;onChange=t=>{};onTouched=()=>{};constructor(t,r){this._renderer=t,this._elementRef=r}setProperty(t,r){this._renderer.setProperty(this._elementRef.nativeElement,t,r)}registerOnTouched(t){this.onTouched=t}registerOnChange(t){this.onChange=t}setDisabledState(t){this.setProperty("disabled",t)}static \u0275fac=function(r){return new(r||n)(Be(Ao),Be(hr))};static \u0275dir=_n({type:n})}return n})(),wy=(()=>{class n extends a1{static \u0275fac=(()=>{let t;return function(i){return(t||(t=df(n)))(i||n)}})();static \u0275dir=_n({type:n,features:[Pi]})}return n})(),Rf=new be("");var pU={provide:Rf,useExisting:Io(()=>l1),multi:!0};function gU(){let n=Us()?Us().getUserAgent():"";return/android (\d+)/.test(n.toLowerCase())}var mU=new be(""),l1=(()=>{class n extends a1{_compositionMode;_composing=!1;constructor(t,r,i){super(t,r),this._compositionMode=i,this._compositionMode==null&&(this._compositionMode=!gU())}writeValue(t){let r=t??"";this.setProperty("value",r)}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}static \u0275fac=function(r){return new(r||n)(Be(Ao),Be(hr),Be(mU,8))};static \u0275dir=_n({type:n,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(r,i){r&1&&ai("input",function(s){return i._handleInput(s.target.value)})("blur",function(){return i.onTouched()})("compositionstart",function(){return i._compositionStart()})("compositionend",function(s){return i._compositionEnd(s.target.value)})},standalone:!1,features:[al([pU]),Pi]})}return n})();var yU=new be(""),vU=new be("");function u1(n){return n!=null}function c1(n){return il(n)?og(n):n}function f1(n){let e={};return n.forEach(t=>{e=t!=null?tt(tt({},e),t):e}),Object.keys(e).length===0?null:e}function d1(n,e){return e.map(t=>t(n))}function wU(n){return!n.validate}function h1(n){return n.map(e=>wU(e)?e:t=>e.validate(t))}function bU(n){if(!n)return null;let e=n.filter(u1);return e.length==0?null:function(t){return f1(d1(t,e))}}function p1(n){return n!=null?bU(h1(n)):null}function DU(n){if(!n)return null;let e=n.filter(u1);return e.length==0?null:function(t){let r=d1(t,e).map(c1);return sg(r).pipe(vo(f1))}}function g1(n){return n!=null?DU(h1(n)):null}function XE(n,e){return n===null?[e]:Array.isArray(n)?[...n,e]:[n,e]}function CU(n){return n._rawValidators}function xU(n){return n._rawAsyncValidators}function gy(n){return n?Array.isArray(n)?n:[n]:[]}function kf(n,e){return Array.isArray(n)?n.includes(e):n===e}function e1(n,e){let t=gy(e);return gy(n).forEach(i=>{kf(t,i)||t.push(i)}),t}function t1(n,e){return gy(e).filter(t=>!kf(n,t))}var Nf=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(e){this._rawValidators=e||[],this._composedValidatorFn=p1(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=g1(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e=void 0){this.control&&this.control.reset(e)}hasError(e,t){return this.control?this.control.hasError(e,t):!1}getError(e,t){return this.control?this.control.getError(e,t):null}},my=class extends Nf{name;get formDirective(){return null}get path(){return null}},gl=class extends Nf{_parent=null;name=null;valueAccessor=null},yy=class{_cd;constructor(e){this._cd=e}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}},SU={"[class.ng-untouched]":"isUntouched","[class.ng-touched]":"isTouched","[class.ng-pristine]":"isPristine","[class.ng-dirty]":"isDirty","[class.ng-valid]":"isValid","[class.ng-invalid]":"isInvalid","[class.ng-pending]":"isPending"},p7=ft(tt({},SU),{"[class.ng-submitted]":"isSubmitted"}),m1=(()=>{class n extends yy{constructor(t){super(t)}static \u0275fac=function(r){return new(r||n)(Be(gl,2))};static \u0275dir=_n({type:n,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(r,i){r&2&&Km("ng-untouched",i.isUntouched)("ng-touched",i.isTouched)("ng-pristine",i.isPristine)("ng-dirty",i.isDirty)("ng-valid",i.isValid)("ng-invalid",i.isInvalid)("ng-pending",i.isPending)},standalone:!1,features:[Pi]})}return n})();var fl="VALID",Af="INVALID",$s="PENDING",dl="DISABLED",Ws=class{},Of=class extends Ws{value;source;constructor(e,t){super(),this.value=e,this.source=t}},hl=class extends Ws{pristine;source;constructor(e,t){super(),this.pristine=e,this.source=t}},pl=class extends Ws{touched;source;constructor(e,t){super(),this.touched=e,this.source=t}},zs=class extends Ws{status;source;constructor(e,t){super(),this.status=e,this.source=t}};function EU(n){return(Pf(n)?n.validators:n)||null}function _U(n){return Array.isArray(n)?p1(n):n||null}function MU(n,e){return(Pf(e)?e.asyncValidators:n)||null}function IU(n){return Array.isArray(n)?g1(n):n||null}function Pf(n){return n!=null&&!Array.isArray(n)&&typeof n=="object"}var vy=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(e,t){this._assignValidators(e),this._assignAsyncValidators(t)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get status(){return Fi(this.statusReactive)}set status(e){Fi(()=>this.statusReactive.set(e))}_status=xf(()=>this.statusReactive());statusReactive=gf(void 0);get valid(){return this.status===fl}get invalid(){return this.status===Af}get pending(){return this.status==$s}get disabled(){return this.status===dl}get enabled(){return this.status!==dl}errors;get pristine(){return Fi(this.pristineReactive)}set pristine(e){Fi(()=>this.pristineReactive.set(e))}_pristine=xf(()=>this.pristineReactive());pristineReactive=gf(!0);get dirty(){return!this.pristine}get touched(){return Fi(this.touchedReactive)}set touched(e){Fi(()=>this.touchedReactive.set(e))}_touched=xf(()=>this.touchedReactive());touchedReactive=gf(!1);get untouched(){return!this.touched}_events=new Er;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(e1(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(e1(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(t1(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(t1(e,this._rawAsyncValidators))}hasValidator(e){return kf(this._rawValidators,e)}hasAsyncValidator(e){return kf(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){let t=this.touched===!1;this.touched=!0;let r=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsTouched(ft(tt({},e),{sourceControl:r})),t&&e.emitEvent!==!1&&this._events.next(new pl(!0,r))}markAllAsTouched(e={}){this.markAsTouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(t=>t.markAllAsTouched(e))}markAsUntouched(e={}){let t=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let r=e.sourceControl??this;this._forEachChild(i=>{i.markAsUntouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:r})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,r),t&&e.emitEvent!==!1&&this._events.next(new pl(!1,r))}markAsDirty(e={}){let t=this.pristine===!0;this.pristine=!1;let r=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsDirty(ft(tt({},e),{sourceControl:r})),t&&e.emitEvent!==!1&&this._events.next(new hl(!1,r))}markAsPristine(e={}){let t=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let r=e.sourceControl??this;this._forEachChild(i=>{i.markAsPristine({onlySelf:!0,emitEvent:e.emitEvent})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e,r),t&&e.emitEvent!==!1&&this._events.next(new hl(!0,r))}markAsPending(e={}){this.status=$s;let t=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new zs(this.status,t)),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.markAsPending(ft(tt({},e),{sourceControl:t}))}disable(e={}){let t=this._parentMarkedDirty(e.onlySelf);this.status=dl,this.errors=null,this._forEachChild(i=>{i.disable(ft(tt({},e),{onlySelf:!0}))}),this._updateValue();let r=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Of(this.value,r)),this._events.next(new zs(this.status,r)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(ft(tt({},e),{skipPristineCheck:t}),this),this._onDisabledChange.forEach(i=>i(!0))}enable(e={}){let t=this._parentMarkedDirty(e.onlySelf);this.status=fl,this._forEachChild(r=>{r.enable(ft(tt({},e),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(ft(tt({},e),{skipPristineCheck:t}),this),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(e,t){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine({},t),this._parent._updateTouched({},t))}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let r=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===fl||this.status===$s)&&this._runAsyncValidator(r,e.emitEvent)}let t=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Of(this.value,t)),this._events.next(new zs(this.status,t)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(ft(tt({},e),{sourceControl:t}))}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(t=>t._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?dl:fl}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e,t){if(this.asyncValidator){this.status=$s,this._hasOwnPendingAsyncValidator={emitEvent:t!==!1};let r=c1(this.asyncValidator(this));this._asyncValidationSubscription=r.subscribe(i=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(i,{emitEvent:t,shouldHaveEmitted:e})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let e=this._hasOwnPendingAsyncValidator?.emitEvent??!1;return this._hasOwnPendingAsyncValidator=null,e}return!1}setErrors(e,t={}){this.errors=e,this._updateControlsErrors(t.emitEvent!==!1,this,t.shouldHaveEmitted)}get(e){let t=e;return t==null||(Array.isArray(t)||(t=t.split(".")),t.length===0)?null:t.reduce((r,i)=>r&&r._find(i),this)}getError(e,t){let r=t?this.get(t):this;return r&&r.errors?r.errors[e]:null}hasError(e,t){return!!this.getError(e,t)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e,t,r){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),(e||r)&&this._events.next(new zs(this.status,t)),this._parent&&this._parent._updateControlsErrors(e,t,r)}_initObservables(){this.valueChanges=new Yn,this.statusChanges=new Yn}_calculateStatus(){return this._allControlsDisabled()?dl:this.errors?Af:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus($s)?$s:this._anyControlsHaveStatus(Af)?Af:fl}_anyControlsHaveStatus(e){return this._anyControls(t=>t.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e,t){let r=!this._anyControlsDirty(),i=this.pristine!==r;this.pristine=r,this._parent&&!e.onlySelf&&this._parent._updatePristine(e,t),i&&this._events.next(new hl(this.pristine,t))}_updateTouched(e={},t){this.touched=this._anyControlsTouched(),this._events.next(new pl(this.touched,t)),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,t)}_onDisabledChange=[];_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){Pf(e)&&e.updateOn!=null&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){let t=this._parent&&this._parent.dirty;return!e&&!!t&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=_U(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=IU(this._rawAsyncValidators)}};var y1=new be("",{providedIn:"root",factory:()=>by}),by="always";function TU(n,e){return[...e.path,n]}function AU(n,e,t=by){NU(n,e),e.valueAccessor.writeValue(n.value),(n.disabled||t==="always")&&e.valueAccessor.setDisabledState?.(n.disabled),OU(n,e),PU(n,e),RU(n,e),kU(n,e)}function n1(n,e){n.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(e)})}function kU(n,e){if(e.valueAccessor.setDisabledState){let t=r=>{e.valueAccessor.setDisabledState(r)};n.registerOnDisabledChange(t),e._registerOnDestroy(()=>{n._unregisterOnDisabledChange(t)})}}function NU(n,e){let t=CU(n);e.validator!==null?n.setValidators(XE(t,e.validator)):typeof t=="function"&&n.setValidators([t]);let r=xU(n);e.asyncValidator!==null?n.setAsyncValidators(XE(r,e.asyncValidator)):typeof r=="function"&&n.setAsyncValidators([r]);let i=()=>n.updateValueAndValidity();n1(e._rawValidators,i),n1(e._rawAsyncValidators,i)}function OU(n,e){e.valueAccessor.registerOnChange(t=>{n._pendingValue=t,n._pendingChange=!0,n._pendingDirty=!0,n.updateOn==="change"&&v1(n,e)})}function RU(n,e){e.valueAccessor.registerOnTouched(()=>{n._pendingTouched=!0,n.updateOn==="blur"&&n._pendingChange&&v1(n,e),n.updateOn!=="submit"&&n.markAsTouched()})}function v1(n,e){n._pendingDirty&&n.markAsDirty(),n.setValue(n._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(n._pendingValue),n._pendingChange=!1}function PU(n,e){let t=(r,i)=>{e.valueAccessor.writeValue(r),i&&e.viewToModelUpdate(r)};n.registerOnChange(t),e._registerOnDestroy(()=>{n._unregisterOnChange(t)})}function FU(n,e){if(!n.hasOwnProperty("model"))return!1;let t=n.model;return t.isFirstChange()?!0:!Object.is(e,t.currentValue)}function LU(n){return Object.getPrototypeOf(n.constructor)===wy}function VU(n,e){if(!e)return null;Array.isArray(e);let t,r,i;return e.forEach(o=>{o.constructor===l1?t=o:LU(o)?r=o:i=o}),i||r||t||null}function r1(n,e){let t=n.indexOf(e);t>-1&&n.splice(t,1)}function i1(n){return typeof n=="object"&&n!==null&&Object.keys(n).length===2&&"value"in n&&"disabled"in n}var BU=class extends vy{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(e=null,t,r){super(EU(t),MU(r,t)),this._applyFormState(e),this._setUpdateStrategy(t),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),Pf(t)&&(t.nonNullable||t.initialValueIsDefault)&&(i1(e)?this.defaultValue=e.value:this.defaultValue=e)}setValue(e,t={}){this.value=this._pendingValue=e,this._onChange.length&&t.emitModelToViewChange!==!1&&this._onChange.forEach(r=>r(this.value,t.emitViewToModelChange!==!1)),this.updateValueAndValidity(t)}patchValue(e,t={}){this.setValue(e,t)}reset(e=this.defaultValue,t={}){this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){r1(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){r1(this._onDisabledChange,e)}_forEachChild(e){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(e){i1(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}};var HU={provide:gl,useExisting:Io(()=>Dy)},o1=Promise.resolve(),Dy=(()=>{class n extends gl{_changeDetectorRef;callSetDisabledState;control=new BU;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new Yn;constructor(t,r,i,o,s,l){super(),this._changeDetectorRef=s,this.callSetDisabledState=l,this._parent=t,this._setValidators(r),this._setAsyncValidators(i),this.valueAccessor=VU(this,o)}ngOnChanges(t){if(this._checkForErrors(),!this._registered||"name"in t){if(this._registered&&(this._checkName(),this.formDirective)){let r=t.name.previousValue;this.formDirective.removeControl({name:r,path:this._getPath(r)})}this._setUpControl()}"isDisabled"in t&&this._updateDisabled(t),FU(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){AU(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(t){o1.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(t){let r=t.isDisabled.currentValue,i=r!==0&&ry(r);o1.then(()=>{i&&!this.control.disabled?this.control.disable():!i&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(t){return this._parent?TU(t,this._parent):[t]}static \u0275fac=function(r){return new(r||n)(Be(my,9),Be(yU,10),Be(vU,10),Be(Rf,10),Be(Cf,8),Be(y1,8))};static \u0275dir=_n({type:n,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"],options:[0,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],standalone:!1,features:[al([HU]),Pi,vm]})}return n})();var jU={provide:Rf,useExisting:Io(()=>Ff),multi:!0};function w1(n,e){return n==null?`${e}`:(e&&typeof e=="object"&&(e="Object"),`${n}: ${e}`.slice(0,50))}function UU(n){return n.split(":")[0]}var Ff=(()=>{class n extends wy{value;_optionMap=new Map;_idCounter=0;set compareWith(t){this._compareWith=t}_compareWith=Object.is;writeValue(t){this.value=t;let r=this._getOptionId(t),i=w1(r,t);this.setProperty("value",i)}registerOnChange(t){this.onChange=r=>{this.value=this._getOptionValue(r),t(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(t){for(let r of this._optionMap.keys())if(this._compareWith(this._optionMap.get(r),t))return r;return null}_getOptionValue(t){let r=UU(t);return this._optionMap.has(r)?this._optionMap.get(r):t}static \u0275fac=(()=>{let t;return function(i){return(t||(t=df(n)))(i||n)}})();static \u0275dir=_n({type:n,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(r,i){r&1&&ai("change",function(s){return i.onChange(s.target.value)})("blur",function(){return i.onTouched()})},inputs:{compareWith:"compareWith"},standalone:!1,features:[al([jU]),Pi]})}return n})(),b1=(()=>{class n{_element;_renderer;_select;id;constructor(t,r,i){this._element=t,this._renderer=r,this._select=i,this._select&&(this.id=this._select._registerOption())}set ngValue(t){this._select!=null&&(this._select._optionMap.set(this.id,t),this._setElementValue(w1(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._setElementValue(t),this._select&&this._select.writeValue(this._select.value)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}static \u0275fac=function(r){return new(r||n)(Be(hr),Be(Ao),Be(Ff,9))};static \u0275dir=_n({type:n,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"},standalone:!1})}return n})(),$U={provide:Rf,useExisting:Io(()=>D1),multi:!0};function s1(n,e){return n==null?`${e}`:(typeof e=="string"&&(e=`'${e}'`),e&&typeof e=="object"&&(e="Object"),`${n}: ${e}`.slice(0,50))}function zU(n){return n.split(":")[0]}var D1=(()=>{class n extends wy{value;_optionMap=new Map;_idCounter=0;set compareWith(t){this._compareWith=t}_compareWith=Object.is;writeValue(t){this.value=t;let r;if(Array.isArray(t)){let i=t.map(o=>this._getOptionId(o));r=(o,s)=>{o._setSelected(i.indexOf(s.toString())>-1)}}else r=(i,o)=>{i._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(t){this.onChange=r=>{let i=[],o=r.selectedOptions;if(o!==void 0){let s=o;for(let l=0;l{let t;return function(i){return(t||(t=df(n)))(i||n)}})();static \u0275dir=_n({type:n,selectors:[["select","multiple","","formControlName",""],["select","multiple","","formControl",""],["select","multiple","","ngModel",""]],hostBindings:function(r,i){r&1&&ai("change",function(s){return i.onChange(s.target)})("blur",function(){return i.onTouched()})},inputs:{compareWith:"compareWith"},standalone:!1,features:[al([$U]),Pi]})}return n})(),C1=(()=>{class n{_element;_renderer;_select;id;_value;constructor(t,r,i){this._element=t,this._renderer=r,this._select=i,this._select&&(this.id=this._select._registerOption(this))}set ngValue(t){this._select!=null&&(this._value=t,this._setElementValue(s1(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._select?(this._value=t,this._setElementValue(s1(this.id,t)),this._select.writeValue(this._select.value)):this._setElementValue(t)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}_setSelected(t){this._renderer.setProperty(this._element.nativeElement,"selected",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}static \u0275fac=function(r){return new(r||n)(Be(hr),Be(Ao),Be(D1,9))};static \u0275dir=_n({type:n,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"},standalone:!1})}return n})();var WU=(()=>{class n{static \u0275fac=function(r){return new(r||n)};static \u0275mod=Bs({type:n});static \u0275inj=As({})}return n})();var x1=(()=>{class n{static withConfig(t){return{ngModule:n,providers:[{provide:y1,useValue:t.callSetDisabledState??by}]}}static \u0275fac=function(r){return new(r||n)};static \u0275mod=Bs({type:n});static \u0275inj=As({imports:[WU]})}return n})();var GU=0,ml=class{constructor(e,t){this.from=e,this.to=t}},se=class{constructor(e={}){this.id=GU++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Ot.match(e)),t=>{let r=e(t);return r===void 0?null:[this,r]}}};se.closedBy=new se({deserialize:n=>n.split(" ")});se.openedBy=new se({deserialize:n=>n.split(" ")});se.group=new se({deserialize:n=>n.split(" ")});se.isolate=new se({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});se.contextHash=new se({perNode:!0});se.lookAhead=new se({perNode:!0});se.mounted=new se({perNode:!0});var qs=class{constructor(e,t,r){this.tree=e,this.overlay=t,this.parser=r}static get(e){return e&&e.props&&e.props[se.mounted.id]}},ZU=Object.create(null),Ot=class n{constructor(e,t,r,i=0){this.name=e,this.props=t,this.id=r,this.flags=i}static define(e){let t=e.props&&e.props.length?Object.create(null):ZU,r=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),i=new n(e.name||"",t,e.id,r);if(e.props){for(let o of e.props)if(Array.isArray(o)||(o=o(i)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[o[0].id]=o[1]}}return i}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(se.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let r in e)for(let i of r.split(" "))t[i]=e[r];return r=>{for(let i=r.prop(se.group),o=-1;o<(i?i.length:0);o++){let s=t[o<0?r.name:i[o]];if(s)return s}}}};Ot.none=new Ot("",Object.create(null),0,8);var Gs=class n{constructor(e){this.types=e;for(let t=0;t0;for(let u=this.cursor(s|bt.IncludeAnonymous);;){let f=!1;if(u.from<=o&&u.to>=i&&(!l&&u.type.isAnonymous||t(u)!==!1)){if(u.firstChild())continue;f=!0}for(;f&&r&&(l||!u.type.isAnonymous)&&r(u),!u.nextSibling();){if(!u.parent())return;f=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Iy(Ot.none,this.children,this.positions,0,this.children.length,0,this.length,(t,r,i)=>new n(this.type,t,r,i,this.propValues),e.makeTree||((t,r,i)=>new n(Ot.none,t,r,i)))}static build(e){return YU(e)}};He.empty=new He(Ot.none,[],[],0);var Cy=class n{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},Vi=class n{constructor(e,t,r){this.buffer=e,this.length=t,this.set=r}get type(){return Ot.none}toString(){let e=[];for(let t=0;t0));u=s[u+3]);return l}slice(e,t,r){let i=this.buffer,o=new Uint16Array(t-e),s=0;for(let l=e,u=0;l=e&&te;case 1:return t<=e&&r>e;case 2:return r>e;case 4:return!0}}function yl(n,e,t,r){for(var i;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=f;e+=t){let d=l[e],p=u[e]+s.from;if(M1(i,r,p,p+d.length)){if(d instanceof Vi){if(o&bt.ExcludeBuffers)continue;let m=d.findChild(0,d.buffer.length,t,r-p,i);if(m>-1)return new vl(new Sy(s,d,e,p),null,m)}else if(o&bt.IncludeAnonymous||!d.type.isAnonymous||My(d)){let m;if(!(o&bt.IgnoreMounts)&&(m=qs.get(d))&&!m.overlay)return new n(m.tree,p,e,s);let y=new n(d,p,e,s);return o&bt.IncludeAnonymous||!y.type.isAnonymous?y:y.nextChild(t<0?d.children.length-1:0,t,r,i)}}}if(o&bt.IncludeAnonymous||!s.type.isAnonymous||(s.index>=0?e=s.index+t:e=t<0?-1:s._parent._tree.children.length,s=s._parent,!s))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,r=0){let i;if(!(r&bt.IgnoreOverlays)&&(i=qs.get(this._tree))&&i.overlay){let o=e-this.from;for(let{from:s,to:l}of i.overlay)if((t>0?s<=o:s=o:l>o))return new n(i.tree,i.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,r)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function E1(n,e,t,r){let i=n.cursor(),o=[];if(!i.firstChild())return o;if(t!=null){for(let s=!1;!s;)if(s=i.type.is(t),!i.nextSibling())return o}for(;;){if(r!=null&&i.type.is(r))return o;if(i.type.is(e)&&o.push(i.node),!i.nextSibling())return r==null?o:[]}}function xy(n,e,t=e.length-1){for(let r=n;t>=0;r=r.parent){if(!r)return!1;if(!r.type.isAnonymous){if(e[t]&&e[t]!=r.name)return!1;t--}}return!0}var Sy=class{constructor(e,t,r,i){this.parent=e,this.buffer=t,this.index=r,this.start=i}},vl=class n extends Bf{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,r){super(),this.context=e,this._parent=t,this.index=r,this.type=e.buffer.set.types[e.buffer.buffer[r]]}child(e,t,r){let{buffer:i}=this.context,o=i.findChild(this.index+4,i.buffer[this.index+3],e,t-this.context.start,r);return o<0?null:new n(this.context,this,o)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,r=0){if(r&bt.ExcludeBuffers)return null;let{buffer:i}=this.context,o=i.findChild(this.index+4,i.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return o<0?null:new n(this.context,this,o)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new n(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new n(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:r}=this.context,i=this.index+4,o=r.buffer[this.index+3];if(o>i){let s=r.buffer[this.index+1];e.push(r.slice(i,o,s)),t.push(0)}return new He(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function I1(n){if(!n.length)return null;let e=0,t=n[0];for(let o=1;ot.from||s.to=e){let l=new Or(s.tree,s.overlay[0].from+o.from,-1,o);(i||(i=[r])).push(yl(l,e,t,!1))}}return i?I1(i):r}var wl=class{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof Or)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let r=e._parent;r;r=r._parent)this.stack.unshift(r.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:r,buffer:i}=this.buffer;return this.type=t||i.set.types[i.buffer[e]],this.from=r+i.buffer[e+1],this.to=r+i.buffer[e+2],!0}yield(e){return e?e instanceof Or?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,r){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,r,this.mode));let{buffer:i}=this.buffer,o=i.findChild(this.index+4,i.buffer[this.index+3],e,t-this.buffer.start,r);return o<0?!1:(this.stack.push(this.index),this.yieldBuf(o))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,r=this.mode){return this.buffer?r&bt.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,r))}parent(){if(!this.buffer)return this.yieldNode(this.mode&bt.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&bt.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,r=this.stack.length-1;if(e<0){let i=r<0?0:this.stack[r]+4;if(this.index!=i)return this.yieldBuf(t.findChild(i,this.index,-1,0,4))}else{let i=t.buffer[this.index+3];if(i<(r<0?t.buffer.length:t.buffer[this.stack[r]+3]))return this.yieldBuf(i)}return r<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,r,{buffer:i}=this;if(i){if(e>0){if(this.index-1)for(let o=t+e,s=e<0?-1:r._tree.children.length;o!=s;o+=e){let l=r._tree.children[o];if(this.mode&bt.IncludeAnonymous||l instanceof Vi||!l.type.isAnonymous||My(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let s=e;s;s=s._parent)if(s.index==i){if(i==this.index)return s;t=s,r=o+1;break e}i=this.stack[--o]}for(let i=r;i=0;o--){if(o<0)return xy(this._tree,e,i);let s=r[t.buffer[this.stack[o]]];if(!s.isAnonymous){if(e[i]&&e[i]!=s.name)return!1;i--}}return!0}};function My(n){return n.children.some(e=>e instanceof Vi||!e.type.isAnonymous||My(e))}function YU(n){var e;let{buffer:t,nodeSet:r,maxBufferLength:i=1024,reused:o=[],minRepeatType:s=r.types.length}=n,l=Array.isArray(t)?new Cy(t,t.length):t,u=r.types,f=0,d=0;function p(R,U,z,ie,he,pe){let{id:ce,start:ee,end:Ce,size:Q}=l,ye=d,$e=f;for(;Q<0;)if(l.next(),Q==-1){let tn=o[ce];z.push(tn),ie.push(ee-R);return}else if(Q==-3){f=ce;return}else if(Q==-4){d=ce;return}else throw new RangeError(`Unrecognized record size: ${Q}`);let Dt=u[ce],Tt,ke,Ae=ee-R;if(Ce-ee<=i&&(ke=S(l.pos-U,he))){let tn=new Uint16Array(ke.size-ke.skip),At=l.pos-ke.size,nt=tn.length;for(;l.pos>At;)nt=_(ke.start,tn,nt);Tt=new Vi(tn,Ce-ke.start,r),Ae=ke.start-R}else{let tn=l.pos-Q;l.next();let At=[],nt=[],nn=ce>=s?ce:-1,Wt=0,pn=Ce;for(;l.pos>tn;)nn>=0&&l.id==nn&&l.size>=0?(l.end<=pn-i&&(w(At,nt,ee,Wt,l.end,pn,nn,ye,$e),Wt=At.length,pn=l.end),l.next()):pe>2500?m(ee,tn,At,nt):p(ee,tn,At,nt,nn,pe+1);if(nn>=0&&Wt>0&&Wt-1&&Wt>0){let gn=y(Dt,$e);Tt=Iy(Dt,At,nt,0,At.length,0,Ce-ee,gn,gn)}else Tt=C(Dt,At,nt,Ce-ee,ye-Ce,$e)}z.push(Tt),ie.push(Ae)}function m(R,U,z,ie){let he=[],pe=0,ce=-1;for(;l.pos>U;){let{id:ee,start:Ce,end:Q,size:ye}=l;if(ye>4)l.next();else{if(ce>-1&&Ce=0;Q-=3)ee[ye++]=he[Q],ee[ye++]=he[Q+1]-Ce,ee[ye++]=he[Q+2]-Ce,ee[ye++]=ye;z.push(new Vi(ee,he[2]-Ce,r)),ie.push(Ce-R)}}function y(R,U){return(z,ie,he)=>{let pe=0,ce=z.length-1,ee,Ce;if(ce>=0&&(ee=z[ce])instanceof He){if(!ce&&ee.type==R&&ee.length==he)return ee;(Ce=ee.prop(se.lookAhead))&&(pe=ie[ce]+ee.length+Ce)}return C(R,z,ie,he,pe,U)}}function w(R,U,z,ie,he,pe,ce,ee,Ce){let Q=[],ye=[];for(;R.length>ie;)Q.push(R.pop()),ye.push(U.pop()+z-he);R.push(C(r.types[ce],Q,ye,pe-he,ee-pe,Ce)),U.push(he-z)}function C(R,U,z,ie,he,pe,ce){if(pe){let ee=[se.contextHash,pe];ce=ce?[ee].concat(ce):[ee]}if(he>25){let ee=[se.lookAhead,he];ce=ce?[ee].concat(ce):[ee]}return new He(R,U,z,ie,ce)}function S(R,U){let z=l.fork(),ie=0,he=0,pe=0,ce=z.end-i,ee={size:0,start:0,skip:0};e:for(let Ce=z.pos-R;z.pos>Ce;){let Q=z.size;if(z.id==U&&Q>=0){ee.size=ie,ee.start=he,ee.skip=pe,pe+=4,ie+=4,z.next();continue}let ye=z.pos-Q;if(Q<0||ye=s?4:0,Dt=z.start;for(z.next();z.pos>ye;){if(z.size<0)if(z.size==-3)$e+=4;else break e;else z.id>=s&&($e+=4);z.next()}he=Dt,ie+=Q,pe+=$e}return(U<0||ie==R)&&(ee.size=ie,ee.start=he,ee.skip=pe),ee.size>4?ee:void 0}function _(R,U,z){let{id:ie,start:he,end:pe,size:ce}=l;if(l.next(),ce>=0&&ie4){let Ce=l.pos-(ce-4);for(;l.pos>Ce;)z=_(R,U,z)}U[--z]=ee,U[--z]=pe-R,U[--z]=he-R,U[--z]=ie}else ce==-3?f=ie:ce==-4&&(d=ie);return z}let P=[],B=[];for(;l.pos>0;)p(n.start||0,n.bufferStart||0,P,B,-1,0);let j=(e=n.length)!==null&&e!==void 0?e:P.length?B[0]+P[0].length:0;return new He(u[n.topID],P.reverse(),B.reverse(),j)}var _1=new WeakMap;function Vf(n,e){if(!n.isAnonymous||e instanceof Vi||e.type!=n)return 1;let t=_1.get(e);if(t==null){t=1;for(let r of e.children){if(r.type!=n||!(r instanceof He)){t=1;break}t+=Vf(n,r)}_1.set(e,t)}return t}function Iy(n,e,t,r,i,o,s,l,u){let f=0;for(let w=r;w=d)break;U+=z}if(B==j+1){if(U>d){let z=w[j];y(z.children,z.positions,0,z.children.length,C[j]+P);continue}p.push(w[j])}else{let z=C[B-1]+w[B-1].length-R;p.push(Iy(n,w,C,j,B,R,z,null,u))}m.push(R+P-o)}}return y(e,t,r,i,0),(l||u)(p,m,s)}var ko=class n{constructor(e,t,r,i,o=!1,s=!1){this.from=e,this.to=t,this.tree=r,this.offset=i,this.open=(o?1:0)|(s?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],r=!1){let i=[new n(0,e.length,e,0,!1,r)];for(let o of t)o.to>e.length&&i.push(o);return i}static applyChanges(e,t,r=128){if(!t.length)return e;let i=[],o=1,s=e.length?e[0]:null;for(let l=0,u=0,f=0;;l++){let d=l=r)for(;s&&s.from=m.from||p<=m.to||f){let y=Math.max(m.from,u)-f,w=Math.min(m.to,p)-f;m=y>=w?null:new n(y,w,m.tree,m.offset+f,l>0,!!d)}if(m&&i.push(m),s.to>p)break;s=onew ml(i.from,i.to)):[new ml(0,0)]:[new ml(0,e.length)],this.createParse(e,t||[],r)}parse(e,t,r){let i=this.startParse(e,t,r);for(;;){let o=i.advance();if(o)return o}}},_y=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var y7=new se({perNode:!0});var Ay=class n{constructor(e,t,r,i,o,s,l,u,f,d=0,p){this.p=e,this.stack=t,this.state=r,this.reducePos=i,this.pos=o,this.score=s,this.buffer=l,this.bufferBase=u,this.curContext=f,this.lookAhead=d,this.parent=p}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,r=0){let i=e.parser.context;return new n(e,[],t,r,r,0,[],0,i?new Hf(i,i.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let r=e>>19,i=e&65535,{parser:o}=this.p,s=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[i])===null||t===void 0)&&t.isAnonymous)&&(f==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=d):this.p.lastBigReductionSizeu;)this.stack.pop();this.reduceContext(i,f)}storeNode(e,t,r,i=4,o=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&s.buffer[l-4]==0&&s.buffer[l-1]>-1){if(t==r)return;if(s.buffer[l-2]>=t){s.buffer[l-2]=r;return}}}if(!o||this.pos==r)this.buffer.push(e,t,r,i);else{let s=this.buffer.length;if(s>0&&this.buffer[s-4]!=0){let l=!1;for(let u=s;u>0&&this.buffer[u-2]>r;u-=4)if(this.buffer[u-1]>=0){l=!0;break}if(l)for(;s>0&&this.buffer[s-2]>r;)this.buffer[s]=this.buffer[s-4],this.buffer[s+1]=this.buffer[s-3],this.buffer[s+2]=this.buffer[s-2],this.buffer[s+3]=this.buffer[s-1],s-=4,i>4&&(i-=4)}this.buffer[s]=e,this.buffer[s+1]=t,this.buffer[s+2]=r,this.buffer[s+3]=i}}shift(e,t,r,i){if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=i,this.shiftContext(t,r),t<=this.p.parser.maxNode&&this.buffer.push(t,r,i,4);else{let o=e,{parser:s}=this.p;(i>this.pos||t<=s.maxNode)&&(this.pos=i,s.stateFlag(o,1)||(this.reducePos=i)),this.pushState(o,r),this.shiftContext(t,r),t<=s.maxNode&&this.buffer.push(t,r,i,4)}}apply(e,t,r,i){e&65536?this.reduce(e):this.shift(e,t,r,i)}useNode(e,t){let r=this.p.reused.length-1;(r<0||this.p.reused[r]!=e)&&(this.p.reused.push(e),r++);let i=this.pos;this.reducePos=this.pos=i+e.length,this.pushState(t,i),this.buffer.push(r,i,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let r=e.buffer.slice(t),i=e.bufferBase+t;for(;e&&i==e.bufferBase;)e=e.parent;return new n(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,r,i,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let r=e<=this.p.parser.maxNode;r&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,r?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new ky(this);;){let r=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(r==0)return!1;if(!(r&65536))return!0;t.reduce(r)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let i=[];for(let o=0,s;ou&1&&l==s)||i.push(t[o],s)}t=i}let r=[];for(let i=0;i>19,i=t&65535,o=this.stack.length-r*3;if(o<0||e.getGoto(this.stack[o],i,!1)<0){let s=this.findForcedReduction();if(s==null)return!1;t=s}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],r=(i,o)=>{if(!t.includes(i))return t.push(i),e.allActions(i,s=>{if(!(s&393216))if(s&65536){let l=(s>>19)-o;if(l>1){let u=s&65535,f=this.stack.length-l*3;if(f>=0&&e.getGoto(this.stack[f],u,!1)>=0)return l<<19|65536|u}}else{let l=r(s,o+1);if(l!=null)return l}})};return r(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},Hf=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},ky=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,r=e>>19;r==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(r-1)*3;let i=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=i}},Ny=class n{constructor(e,t,r){this.stack=e,this.pos=t,this.index=r,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new n(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new n(this.stack,this.pos,this.index)}};function bl(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let r=0,i=0;r=92&&s--,s>=34&&s--;let u=s-32;if(u>=46&&(u-=46,l=!0),o+=u,l)break;o*=46}t?t[i++]=o:t=new e(o)}return t}var Zs=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},T1=new Zs,Oy=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=T1,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let r=this.range,i=this.rangeIndex,o=this.pos+e;for(;or.to:o>=r.to;){if(i==this.ranges.length-1)return null;let s=this.ranges[++i];o+=s.from-r.to,r=s}return o}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,r,i;if(t>=0&&t=this.chunk2Pos&&rl.to&&(this.chunk2=this.chunk2.slice(0,l.to-r)),i=this.chunk2.charCodeAt(0)}}return r>=this.token.lookAhead&&(this.token.lookAhead=r+1),i}acceptToken(e,t=0){let r=t?this.resolveOffset(t,-1):this.pos;if(r==null||r=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=T1,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let r="";for(let i of this.ranges){if(i.from>=t)break;i.to>e&&(r+=this.input.read(Math.max(i.from,e),Math.min(i.to,t)))}return r}},Bi=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:r}=t.p;R1(this.data,e,t,this.id,r.data,r.tokenPrecTable)}};Bi.prototype.contextual=Bi.prototype.fallback=Bi.prototype.extend=!1;var Ry=class{constructor(e,t,r){this.precTable=t,this.elseToken=r,this.data=typeof e=="string"?bl(e):e}token(e,t){let r=e.pos,i=0;for(;;){let o=e.next<0,s=e.resolveOffset(1,1);if(R1(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(o||i++,s==null)break;e.reset(s,e.token)}i&&(e.reset(r,e.token),e.acceptToken(this.elseToken,i))}};Ry.prototype.contextual=Bi.prototype.fallback=Bi.prototype.extend=!1;function R1(n,e,t,r,i,o){let s=0,l=1<0){let w=n[y];if(u.allows(w)&&(e.token.value==-1||e.token.value==w||JU(w,e.token.value,i,o))){e.acceptToken(w);break}}let d=e.next,p=0,m=n[s+2];if(e.next<0&&m>p&&n[f+m*3-3]==65535){s=n[f+m*3-1];continue e}for(;p>1,w=f+y+(y<<1),C=n[w],S=n[w+1]||65536;if(d=S)p=y+1;else{s=n[w+2],e.advance();continue e}}break}}function A1(n,e,t){for(let r=e,i;(i=n[r])!=65535;r++)if(i==t)return r-e;return-1}function JU(n,e,t,r){let i=A1(t,r,e);return i<0||A1(t,r,n)e)&&!r.type.isError)return t<0?Math.max(0,Math.min(r.to-1,e-25)):Math.min(n.length,Math.max(r.from+1,e+25));if(t<0?r.prevSibling():r.nextSibling())break;if(!r.parent())return t<0?0:n.length}}var Py=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?k1(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?k1(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=s,null;if(o instanceof He){if(s==e){if(s=Math.max(this.safeFrom,e)&&(this.trees.push(o),this.start.push(s),this.index.push(0))}else this.index[t]++,this.nextStart=s+o.length}}},Fy=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(r=>new Zs)}getActions(e){let t=0,r=null,{parser:i}=e.p,{tokenizers:o}=i,s=i.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,u=0;for(let f=0;fp.end+25&&(u=Math.max(p.lookAhead,u)),p.value!=0)){let m=t;if(p.extended>-1&&(t=this.addActions(e,p.extended,p.end,t)),t=this.addActions(e,p.value,p.end,t),!d.extend&&(r=p,t>m))break}}for(;this.actions.length>t;)this.actions.pop();return u&&e.setLookAhead(u),!r&&e.pos==this.stream.end&&(r=new Zs,r.value=e.p.parser.eofTerm,r.start=r.end=e.pos,t=this.addActions(e,r.value,r.end,t)),this.mainToken=r,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Zs,{pos:r,p:i}=e;return t.start=r,t.end=Math.min(r+1,i.stream.end),t.value=r==i.stream.end?i.parser.eofTerm:0,t}updateCachedToken(e,t,r){let i=this.stream.clipPos(r.pos);if(t.token(this.stream.reset(i,e),r),e.value>-1){let{parser:o}=r.p;for(let s=0;s=0&&r.p.parser.dialect.allows(l>>1)){l&1?e.extended=l>>1:e.value=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(i+1)}putAction(e,t,r,i){for(let o=0;oe.bufferLength*4?new Py(r,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,r=this.stacks=[],i,o;if(this.bigReductionCount>300&&e.length==1){let[s]=e;for(;s.forceReduce()&&s.stack.length&&s.stack[s.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let s=0;st)r.push(l);else{if(this.advanceStack(l,r,e))continue;{i||(i=[],o=[]),i.push(l);let u=this.tokens.getMainToken(l);o.push(u.value,u.end)}}break}}if(!r.length){let s=i&&XU(i);if(s)return Mn&&console.log("Finish with "+this.stackID(s)),this.stackToTree(s);if(this.parser.strict)throw Mn&&i&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&i){let s=this.stoppedAt!=null&&i[0].pos>this.stoppedAt?i[0]:this.runRecovery(i,o,r);if(s)return Mn&&console.log("Force-finish "+this.stackID(s)),this.stackToTree(s.forceAll())}if(this.recovering){let s=this.recovering==1?1:this.recovering*3;if(r.length>s)for(r.sort((l,u)=>u.score-l.score);r.length>s;)r.pop();r.some(l=>l.reducePos>t)&&this.recovering--}else if(r.length>1){e:for(let s=0;s500&&f.buffer.length>500)if((l.score-f.score||l.buffer.length-f.buffer.length)>0)r.splice(u--,1);else{r.splice(s--,1);continue e}}}r.length>12&&r.splice(12,r.length-12)}this.minStackPos=r[0].pos;for(let s=1;s ":"";if(this.stoppedAt!=null&&i>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let f=e.curContext&&e.curContext.tracker.strict,d=f?e.curContext.hash:0;for(let p=this.fragments.nodeAt(i);p;){let m=this.parser.nodeSet.types[p.type.id]==p.type?o.getGoto(e.state,p.type.id):-1;if(m>-1&&p.length&&(!f||(p.prop(se.contextHash)||0)==d))return e.useNode(p,m),Mn&&console.log(s+this.stackID(e)+` (via reuse of ${o.getName(p.type.id)})`),!0;if(!(p instanceof He)||p.children.length==0||p.positions[0]>0)break;let y=p.children[0];if(y instanceof He&&p.positions[0]==0)p=y;else break}}let l=o.stateSlot(e.state,4);if(l>0)return e.reduce(l),Mn&&console.log(s+this.stackID(e)+` (via always-reduce ${o.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let u=this.tokens.getActions(e);for(let f=0;fi?t.push(w):r.push(w)}return!1}advanceFully(e,t){let r=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>r)return N1(e,t),!0}}runRecovery(e,t,r){let i=null,o=!1;for(let s=0;s ":"";if(l.deadEnd&&(o||(o=!0,l.restart(),Mn&&console.log(d+this.stackID(l)+" (restarted)"),this.advanceFully(l,r))))continue;let p=l.split(),m=d;for(let y=0;p.forceReduce()&&y<10&&(Mn&&console.log(m+this.stackID(p)+" (via force-reduce)"),!this.advanceFully(p,r));y++)Mn&&(m=this.stackID(p)+" -> ");for(let y of l.recoverByInsert(u))Mn&&console.log(d+this.stackID(y)+" (via recover-insert)"),this.advanceFully(y,r);this.stream.end>l.pos?(f==l.pos&&(f++,u=0),l.recoverByDelete(u,f),Mn&&console.log(d+this.stackID(l)+` (via recover-delete ${this.parser.getName(u)})`),N1(l,r)):(!i||i.scoree.topRules[l][1]),i=[];for(let l=0;l=0)o(d,u,l[f++]);else{let p=l[f+-d];for(let m=-d;m>0;m--)o(l[f++],u,p);f++}}}this.nodeSet=new Gs(t.map((l,u)=>Ot.define({name:u>=this.minRepeatTerm?void 0:l,id:u,props:i[u],top:r.indexOf(u)>-1,error:u==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(u)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let s=bl(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new Bi(s,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,r){let i=new Ly(this,e,t,r);for(let o of this.wrappers)i=o(i,e,t,r);return i}getGoto(e,t,r=!1){let i=this.goto;if(t>=i[0])return-1;for(let o=i[t+1];;){let s=i[o++],l=s&1,u=i[o++];if(l&&r)return u;for(let f=o+(s>>1);o0}validAction(e,t){return!!this.allActions(e,r=>r==t?!0:null)}allActions(e,t){let r=this.stateSlot(e,4),i=r?t(r):void 0;for(let o=this.stateSlot(e,1);i==null;o+=3){if(this.data[o]==65535)if(this.data[o+1]==1)o=li(this.data,o+2);else break;i=t(li(this.data,o+1))}return i}nextStates(e){let t=[];for(let r=this.stateSlot(e,1);;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=li(this.data,r+2);else break;if(!(this.data[r+2]&1)){let i=this.data[r+1];t.some((o,s)=>s&1&&o==i)||t.push(this.data[r],i)}}return t}configure(e){let t=Object.assign(Object.create(n.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let r=this.topRules[e.top];if(!r)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=r}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(r=>{let i=e.tokenizers.find(o=>o.from==r);return i?i.to:r})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((r,i)=>{let o=e.specializers.find(l=>l.from==r.external);if(!o)return r;let s=Object.assign(Object.assign({},r),{external:o.to});return t.specializers[i]=O1(s),s})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),r=t.map(()=>!1);if(e)for(let o of e.split(" ")){let s=t.indexOf(o);s>=0&&(r[s]=!0)}let i=null;for(let o=0;or)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,r)<<1|e}return n.get}var e$=0,pr=class n{constructor(e,t,r,i){this.name=e,this.set=t,this.base=r,this.modified=i,this.id=e$++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let r=typeof e=="string"?e:"?";if(e instanceof n&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let i=new n(r,[],null,[]);if(i.set.push(i),t)for(let o of t.set)i.set.push(o);return i}static defineModifier(e){let t=new Wf(e);return r=>r.modified.indexOf(t)>-1?r:Wf.get(r.base||r,r.modified.concat(t).sort((i,o)=>i.id-o.id))}},t$=0,Wf=class n{constructor(e){this.name=e,this.instances=[],this.id=t$++}static get(e,t){if(!t.length)return e;let r=t[0].instances.find(l=>l.base==e&&n$(t,l.modified));if(r)return r;let i=[],o=new pr(e.name,i,e,t);for(let l of t)l.instances.push(o);let s=r$(t);for(let l of e.set)if(!l.modified.length)for(let u of s)i.push(n.get(l,u));return o}};function n$(n,e){return n.length==e.length&&n.every((t,r)=>t==e[r])}function r$(n){let e=[[]];for(let t=0;tr.length-t.length)}function qf(n){let e=Object.create(null);for(let t in n){let r=n[t];Array.isArray(r)||(r=[r]);for(let i of t.split(" "))if(i){let o=[],s=2,l=i;for(let p=0;;){if(l=="..."&&p>0&&p+3==i.length){s=1;break}let m=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!m)throw new RangeError("Invalid path: "+i);if(o.push(m[0]=="*"?"":m[0][0]=='"'?JSON.parse(m[0]):m[0]),p+=m[0].length,p==i.length)break;let y=i[p++];if(p==i.length&&y=="!"){s=0;break}if(y!="/")throw new RangeError("Invalid path: "+i);l=i.slice(p)}let u=o.length-1,f=o[u];if(!f)throw new RangeError("Invalid path: "+i);let d=new Ks(r,s,u>0?o.slice(0,u):null);e[f]=d.sort(e[f])}}return L1.add(e)}var L1=new se,Ks=class{constructor(e,t,r,i){this.tags=e,this.mode=t,this.context=r,this.next=i}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let s=i;for(let l of o)for(let u of l.set){let f=t[u.id];if(f){s=s?s+" "+f:f;break}}return s},scope:r}}function i$(n,e){let t=null;for(let r of n){let i=r.style(e);i&&(t=t?t+" "+i:i)}return t}function V1(n,e,t,r=0,i=n.length){let o=new Hy(r,Array.isArray(e)?e:[e],t);o.highlightRange(n.cursor(),r,i,"",o.highlighters),o.flush(i)}var Hy=class{constructor(e,t,r){this.at=e,this.highlighters=t,this.span=r,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,r,i,o){let{type:s,from:l,to:u}=e;if(l>=r||u<=t)return;s.isTop&&(o=this.highlighters.filter(y=>!y.scope||y.scope(s)));let f=i,d=o$(e)||Ks.empty,p=i$(o,d.tags);if(p&&(f&&(f+=" "),f+=p,d.mode==1&&(i+=(i?" ":"")+p)),this.startSpan(Math.max(t,l),f),d.opaque)return;let m=e.tree&&e.tree.prop(se.mounted);if(m&&m.overlay){let y=e.node.enter(m.overlay[0].from+l,1),w=this.highlighters.filter(S=>!S.scope||S.scope(m.tree.type)),C=e.firstChild();for(let S=0,_=l;;S++){let P=S=B||!e.nextSibling())););if(!P||B>r)break;_=P.to+l,_>t&&(this.highlightRange(y.cursor(),Math.max(t,P.from+l),Math.min(r,_),"",w),this.startSpan(Math.min(r,_),f))}C&&e.parent()}else if(e.firstChild()){m&&(i="");do if(!(e.to<=t)){if(e.from>=r)break;this.highlightRange(e,t,r,i,o),this.startSpan(Math.min(r,e.to),f)}while(e.nextSibling());e.parent()}}};function o$(n){let e=n.type.prop(L1);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var W=pr.define,Uf=W(),Hi=W(),P1=W(Hi),F1=W(Hi),ji=W(),$f=W(ji),By=W(ji),Fr=W(),Oo=W(Fr),Rr=W(),Pr=W(),jy=W(),Dl=W(jy),zf=W(),$={comment:Uf,lineComment:W(Uf),blockComment:W(Uf),docComment:W(Uf),name:Hi,variableName:W(Hi),typeName:P1,tagName:W(P1),propertyName:F1,attributeName:W(F1),className:W(Hi),labelName:W(Hi),namespace:W(Hi),macroName:W(Hi),literal:ji,string:$f,docString:W($f),character:W($f),attributeValue:W($f),number:By,integer:W(By),float:W(By),bool:W(ji),regexp:W(ji),escape:W(ji),color:W(ji),url:W(ji),keyword:Rr,self:W(Rr),null:W(Rr),atom:W(Rr),unit:W(Rr),modifier:W(Rr),operatorKeyword:W(Rr),controlKeyword:W(Rr),definitionKeyword:W(Rr),moduleKeyword:W(Rr),operator:Pr,derefOperator:W(Pr),arithmeticOperator:W(Pr),logicOperator:W(Pr),bitwiseOperator:W(Pr),compareOperator:W(Pr),updateOperator:W(Pr),definitionOperator:W(Pr),typeOperator:W(Pr),controlOperator:W(Pr),punctuation:jy,separator:W(jy),bracket:Dl,angleBracket:W(Dl),squareBracket:W(Dl),paren:W(Dl),brace:W(Dl),content:Fr,heading:Oo,heading1:W(Oo),heading2:W(Oo),heading3:W(Oo),heading4:W(Oo),heading5:W(Oo),heading6:W(Oo),contentSeparator:W(Fr),list:W(Fr),quote:W(Fr),emphasis:W(Fr),strong:W(Fr),link:W(Fr),monospace:W(Fr),strikethrough:W(Fr),inserted:W(),deleted:W(),changed:W(),invalid:W(),meta:zf,documentMeta:W(zf),annotation:W(zf),processingInstruction:W(zf),definition:pr.defineModifier("definition"),constant:pr.defineModifier("constant"),function:pr.defineModifier("function"),standard:pr.defineModifier("standard"),local:pr.defineModifier("local"),special:pr.defineModifier("special")};for(let n in $){let e=$[n];e instanceof pr&&(e.name=n)}var C7=Uy([{tag:$.link,class:"tok-link"},{tag:$.heading,class:"tok-heading"},{tag:$.emphasis,class:"tok-emphasis"},{tag:$.strong,class:"tok-strong"},{tag:$.keyword,class:"tok-keyword"},{tag:$.atom,class:"tok-atom"},{tag:$.bool,class:"tok-bool"},{tag:$.url,class:"tok-url"},{tag:$.labelName,class:"tok-labelName"},{tag:$.inserted,class:"tok-inserted"},{tag:$.deleted,class:"tok-deleted"},{tag:$.literal,class:"tok-literal"},{tag:$.string,class:"tok-string"},{tag:$.number,class:"tok-number"},{tag:[$.regexp,$.escape,$.special($.string)],class:"tok-string2"},{tag:$.variableName,class:"tok-variableName"},{tag:$.local($.variableName),class:"tok-variableName tok-local"},{tag:$.definition($.variableName),class:"tok-variableName tok-definition"},{tag:$.special($.variableName),class:"tok-variableName2"},{tag:$.definition($.propertyName),class:"tok-propertyName tok-definition"},{tag:$.typeName,class:"tok-typeName"},{tag:$.namespace,class:"tok-namespace"},{tag:$.className,class:"tok-className"},{tag:$.macroName,class:"tok-macroName"},{tag:$.propertyName,class:"tok-propertyName"},{tag:$.operator,class:"tok-operator"},{tag:$.comment,class:"tok-comment"},{tag:$.meta,class:"tok-meta"},{tag:$.invalid,class:"tok-invalid"},{tag:$.punctuation,class:"tok-punctuation"}]);var s$=qf({String:$.string,Number:$.number,"True False":$.bool,PropertyName:$.propertyName,Null:$.null,", :":$.separator,"[ ]":$.squareBracket,"{ }":$.brace}),B1=jf.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[s$],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var zy=[],$1=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=$1[r])e=r+1;else return!0;if(e==t)return!1}}function H1(n){return n>=127462&&n<=127487}var j1=8205;function z1(n,e,t=!0,r=!0){return(t?W1:l$)(n,e,r)}function W1(n,e,t){if(e==n.length)return e;e&&q1(n.charCodeAt(e))&&G1(n.charCodeAt(e-1))&&e--;let r=$y(n,e);for(e+=U1(r);e=0&&H1($y(n,s));)o++,s-=2;if(o%2==0)break;e+=2}else break}return e}function l$(n,e,t){for(;e>0;){let r=W1(n,e-2,t);if(r=56320&&n<57344}function G1(n){return n>=55296&&n<56320}function U1(n){return n<65536?1:2}var _e=class n{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,r){[e,t]=ea(this,e,t);let i=[];return this.decompose(0,e,i,2),r.length&&r.decompose(0,r.length,i,3),this.decompose(t,this.length,i,1),Qs.from(i,this.length-(t-e)+r.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ea(this,e,t);let r=[];return this.decompose(e,t,r,0),Qs.from(r,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),r=this.length-this.scanIdentical(e,-1),i=new Fo(this),o=new Fo(e);for(let s=t,l=t;;){if(i.next(s),o.next(s),s=0,i.lineBreak!=o.lineBreak||i.done!=o.done||i.value!=o.value)return!1;if(l+=i.value.length,i.done||l>=r)return!0}}iter(e=1){return new Fo(this,e)}iterRange(e,t=this.length){return new Qf(this,e,t)}iterLines(e,t){let r;if(e==null)r=this.iter();else{t==null&&(t=this.lines+1);let i=this.line(e).from;r=this.iterRange(i,Math.max(i,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Jf(r)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?n.empty:e.length<=32?new In(e):Qs.from(In.split(e,[]))}},In=class n extends _e{constructor(e,t=u$(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,r,i){for(let o=0;;o++){let s=this.text[o],l=i+s.length;if((t?r:l)>=e)return new Gy(i,l,r,s);i=l+1,r++}}decompose(e,t,r,i){let o=e<=0&&t>=this.length?this:new n(Z1(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(i&1){let s=r.pop(),l=Yf(o.text,s.text.slice(),0,o.length);if(l.length<=32)r.push(new n(l,s.length+o.length));else{let u=l.length>>1;r.push(new n(l.slice(0,u)),new n(l.slice(u)))}}else r.push(o)}replace(e,t,r){if(!(r instanceof n))return super.replace(e,t,r);[e,t]=ea(this,e,t);let i=Yf(this.text,Yf(r.text,Z1(this.text,0,e)),t),o=this.length+r.length-(t-e);return i.length<=32?new n(i,o):Qs.from(n.split(i,[]),o)}sliceString(e,t=this.length,r=` +`){[e,t]=ea(this,e,t);let i="";for(let o=0,s=0;o<=t&&se&&s&&(i+=r),eo&&(i+=l.slice(Math.max(0,e-o),t-o)),o=u+1}return i}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let r=[],i=-1;for(let o of e)r.push(o),i+=o.length+1,r.length==32&&(t.push(new n(r,i)),r=[],i=-1);return i>-1&&t.push(new n(r,i)),t}},Qs=class n extends _e{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let r of e)this.lines+=r.lines}lineInner(e,t,r,i){for(let o=0;;o++){let s=this.children[o],l=i+s.length,u=r+s.lines-1;if((t?u:l)>=e)return s.lineInner(e,t,r,i);i=l+1,r=u+1}}decompose(e,t,r,i){for(let o=0,s=0;s<=t&&o=s){let f=i&((s<=e?1:0)|(u>=t?2:0));s>=e&&u<=t&&!f?r.push(l):l.decompose(e-s,t-s,r,f)}s=u+1}}replace(e,t,r){if([e,t]=ea(this,e,t),r.lines=o&&t<=l){let u=s.replace(e-o,t-o,r),f=this.lines-s.lines+u.lines;if(u.lines>4&&u.lines>f>>6){let d=this.children.slice();return d[i]=u,new n(d,this.length-(t-e)+r.length)}return super.replace(o,l,u)}o=l+1}return super.replace(e,t,r)}sliceString(e,t=this.length,r=` +`){[e,t]=ea(this,e,t);let i="";for(let o=0,s=0;oe&&o&&(i+=r),es&&(i+=l.sliceString(e-s,t-s,r)),s=u+1}return i}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof n))return 0;let r=0,[i,o,s,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;i+=t,o+=t){if(i==s||o==l)return r;let u=this.children[i],f=e.children[o];if(u!=f)return r+u.scanIdentical(f,t);r+=u.length+1}}static from(e,t=e.reduce((r,i)=>r+i.length+1,-1)){let r=0;for(let y of e)r+=y.lines;if(r<32){let y=[];for(let w of e)w.flatten(y);return new In(y,t)}let i=Math.max(32,r>>5),o=i<<1,s=i>>1,l=[],u=0,f=-1,d=[];function p(y){let w;if(y.lines>o&&y instanceof n)for(let C of y.children)p(C);else y.lines>s&&(u>s||!u)?(m(),l.push(y)):y instanceof In&&u&&(w=d[d.length-1])instanceof In&&y.lines+w.lines<=32?(u+=y.lines,f+=y.length+1,d[d.length-1]=new In(w.text.concat(y.text),w.length+1+y.length)):(u+y.lines>i&&m(),u+=y.lines,f+=y.length+1,d.push(y))}function m(){u!=0&&(l.push(d.length==1?d[0]:n.from(d,f)),f=-1,u=d.length=0)}for(let y of e)p(y);return m(),l.length==1?l[0]:new n(l,t)}};_e.empty=new In([""],0);function u$(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Yf(n,e,t=0,r=1e9){for(let i=0,o=0,s=!0;o=t&&(u>r&&(l=l.slice(0,r-i)),i0?1:(e instanceof In?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let r=this.nodes.length-1,i=this.nodes[r],o=this.offsets[r],s=o>>1,l=i instanceof In?i.text.length:i.children.length;if(s==(t>0?l:0)){if(r==0)return this.done=!0,this.value="",this;t>0&&this.offsets[r-1]++,this.nodes.pop(),this.offsets.pop()}else if((o&1)==(t>0?0:1)){if(this.offsets[r]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(i instanceof In){let u=i.text[s+(t<0?-1:0)];if(this.offsets[r]+=t,u.length>Math.max(0,e))return this.value=e==0?u:t>0?u.slice(e):u.slice(0,u.length-e),this;e-=u.length}else{let u=i.children[s+(t<0?-1:0)];e>u.length?(e-=u.length,this.offsets[r]+=t):(t<0&&this.offsets[r]--,this.nodes.push(u),this.offsets.push(t>0?1:(u instanceof In?u.text.length:u.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},Qf=class{constructor(e,t,r){this.value="",this.done=!1,this.cursor=new Fo(e,t>r?-1:1),this.pos=t>r?e.length:0,this.from=Math.min(t,r),this.to=Math.max(t,r)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let r=t<0?this.pos-this.from:this.to-this.pos;e>r&&(e=r),r-=e;let{value:i}=this.cursor.next(e);return this.pos+=(i.length+e)*t,this.value=i.length<=r?i:t<0?i.slice(i.length-r):i.slice(0,r),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},Jf=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:r,value:i}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):r?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=i,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(_e.prototype[Symbol.iterator]=function(){return this.iter()},Fo.prototype[Symbol.iterator]=Qf.prototype[Symbol.iterator]=Jf.prototype[Symbol.iterator]=function(){return this});var Gy=class{constructor(e,t,r,i){this.from=e,this.to=t,this.number=r,this.text=i}get length(){return this.to-this.from}};function ea(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function gt(n,e,t=!0,r=!0){return z1(n,e,t,r)}function c$(n){return n>=56320&&n<57344}function f$(n){return n>=55296&&n<56320}function Pt(n,e){let t=n.charCodeAt(e);if(!f$(t)||e+1==n.length)return t;let r=n.charCodeAt(e+1);return c$(r)?(t-55296<<10)+(r-56320)+65536:t}function Ml(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function kn(n){return n<65536?1:2}var Zy=/\r\n?|\n/,Rt=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(Rt||(Rt={})),ui=class n{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return o+(e-i);o+=l}else{if(r!=Rt.Simple&&f>=e&&(r==Rt.TrackDel&&ie||r==Rt.TrackBefore&&ie))return null;if(f>e||f==e&&t<0&&!l)return e==i||t<0?o:o+u;o+=u}i=f}if(e>i)throw new RangeError(`Position ${e} is out of range for changeset of length ${i}`);return o}touchesRange(e,t=e){for(let r=0,i=0;r=0&&i<=t&&l>=e)return it?"cover":!0;i=l}return!1}toString(){let e="";for(let t=0;t=0?":"+i:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new n(e)}static create(e){return new n(e)}},Qt=class n extends ui{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Ky(this,(t,r,i,o,s)=>e=e.replace(i,i+(r-t),s),!1),e}mapDesc(e,t=!1){return Yy(this,e,t,!0)}invert(e){let t=this.sections.slice(),r=[];for(let i=0,o=0;i=0){t[i]=l,t[i+1]=s;let u=i>>1;for(;r.length0&&Ui(r,t,o.text),o.forward(d),l+=d}let f=e[s++];for(;l>1].toJSON()))}return e}static of(e,t,r){let i=[],o=[],s=0,l=null;function u(d=!1){if(!d&&!i.length)return;sm||p<0||m>t)throw new RangeError(`Invalid change range ${p} to ${m} (in doc of length ${t})`);let w=y?typeof y=="string"?_e.of(y.split(r||Zy)):y:_e.empty,C=w.length;if(p==m&&C==0)return;ps&&Ut(i,p-s,-1),Ut(i,m-p,C),Ui(o,i,w),s=m}}return f(e),u(!l),l}static empty(e){return new n(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],r=[];for(let i=0;il&&typeof s!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(o.length==1)t.push(o[0],0);else{for(;r.length=0&&t<=0&&t==n[i+1]?n[i]+=e:i>=0&&e==0&&n[i]==0?n[i+1]+=t:r?(n[i]+=e,n[i+1]+=t):n.push(e,t)}function Ui(n,e,t){if(t.length==0)return;let r=e.length-2>>1;if(r>1])),!(t||s==n.sections.length||n.sections[s+1]<0);)l=n.sections[s++],u=n.sections[s++];e(i,f,o,d,p),i=f,o=d}}}function Yy(n,e,t,r=!1){let i=[],o=r?[]:null,s=new Lo(n),l=new Lo(e);for(let u=-1;;){if(s.done&&l.len||l.done&&s.len)throw new Error("Mismatched change set lengths");if(s.ins==-1&&l.ins==-1){let f=Math.min(s.len,l.len);Ut(i,f,-1),s.forward(f),l.forward(f)}else if(l.ins>=0&&(s.ins<0||u==s.i||s.off==0&&(l.len=0&&u=0){let f=0,d=s.len;for(;d;)if(l.ins==-1){let p=Math.min(d,l.len);f+=p,d-=p,l.forward(p)}else if(l.ins==0&&l.lenu||s.ins>=0&&s.len>u)&&(l||r.length>f),o.forward2(u),s.forward(u)}}}}var Lo=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?_e.empty:e[t]}textBit(e){let{inserted:t}=this.set,r=this.i-2>>1;return r>=t.length&&!e?_e.empty:t[r].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},Ys=class n{constructor(e,t,r){this.from=e,this.to=t,this.flags=r}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let r,i;return this.empty?r=i=e.mapPos(this.from,t):(r=e.mapPos(this.from,1),i=e.mapPos(this.to,-1)),r==this.from&&i==this.to?this:new n(r,i,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return V.range(e,t);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return V.range(this.anchor,r)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return V.range(e.anchor,e.head)}static create(e,t,r){return new n(e,t,r)}},V=class n{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:n.create(this.ranges.map(r=>r.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let r=0;re.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new n(e.ranges.map(t=>Ys.fromJSON(t)),e.main)}static single(e,t=e){return new n([n.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let r=0,i=0;ie?8:0)|o)}static normalized(e,t=0){let r=e[t];e.sort((i,o)=>i.from-o.from),t=e.indexOf(r);for(let i=1;io.head?n.range(u,l):n.range(l,u))}}return new n(e,t)}};function n_(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var o0=0,G=class n{constructor(e,t,r,i,o){this.combine=e,this.compareInput=t,this.compare=r,this.isStatic=i,this.id=o0++,this.default=e([]),this.extensions=typeof o=="function"?o(this):o}get reader(){return this}static define(e={}){return new n(e.combine||(t=>t),e.compareInput||((t,r)=>t===r),e.compare||(e.combine?(t,r)=>t===r:s0),!!e.static,e.enables)}of(e){return new Js([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Js(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Js(e,this,2,t)}from(e,t){return t||(t=r=>r),this.compute([e],r=>t(r.field(e)))}};function s0(n,e){return n==e||n.length==e.length&&n.every((t,r)=>t===e[r])}var Js=class{constructor(e,t,r,i){this.dependencies=e,this.facet=t,this.type=r,this.value=i,this.id=o0++}dynamicSlot(e){var t;let r=this.value,i=this.facet.compareInput,o=this.id,s=e[o]>>1,l=this.type==2,u=!1,f=!1,d=[];for(let p of this.dependencies)p=="doc"?u=!0:p=="selection"?f=!0:((t=e[p.id])!==null&&t!==void 0?t:1)&1||d.push(e[p.id]);return{create(p){return p.values[s]=r(p),1},update(p,m){if(u&&m.docChanged||f&&(m.docChanged||m.selection)||Qy(p,d)){let y=r(p);if(l?!K1(y,p.values[s],i):!i(y,p.values[s]))return p.values[s]=y,1}return 0},reconfigure:(p,m)=>{let y,w=m.config.address[o];if(w!=null){let C=td(m,w);if(this.dependencies.every(S=>S instanceof G?m.facet(S)===p.facet(S):S instanceof st?m.field(S,!1)==p.field(S,!1):!0)||(l?K1(y=r(p),C,i):i(y=r(p),C)))return p.values[s]=C,0}else y=r(p);return p.values[s]=y,1}}}};function K1(n,e,t){if(n.length!=e.length)return!1;for(let r=0;rn[u.id]),i=t.map(u=>u.type),o=r.filter(u=>!(u&1)),s=n[e.id]>>1;function l(u){let f=[];for(let d=0;dr===i),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Gf).find(r=>r.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:r=>(r.values[t]=this.create(r),1),update:(r,i)=>{let o=r.values[t],s=this.updateF(o,i);return this.compareF(o,s)?0:(r.values[t]=s,1)},reconfigure:(r,i)=>{let o=r.facet(Gf),s=i.facet(Gf),l;return(l=o.find(u=>u.field==this))&&l!=s.find(u=>u.field==this)?(r.values[t]=l.create(r),1):i.config.address[this.id]!=null?(r.values[t]=i.field(this),0):(r.values[t]=this.create(r),1)}}}init(e){return[this,Gf.of({field:this,create:e})]}get extension(){return this}},Ro={lowest:4,low:3,default:2,high:1,highest:0};function Cl(n){return e=>new Xf(e,n)}var mr={highest:Cl(Ro.highest),high:Cl(Ro.high),default:Cl(Ro.default),low:Cl(Ro.low),lowest:Cl(Ro.lowest)},Xf=class{constructor(e,t){this.inner=e,this.prec=t}},ta=class n{of(e){return new Sl(this,e)}reconfigure(e){return n.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},Sl=class{constructor(e,t){this.compartment=e,this.inner=t}},ed=class n{constructor(e,t,r,i,o,s){for(this.base=e,this.compartments=t,this.dynamicSlots=r,this.address=i,this.staticValues=o,this.facets=s,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,r){let i=[],o=Object.create(null),s=new Map;for(let m of h$(e,t,s))m instanceof st?i.push(m):(o[m.facet.id]||(o[m.facet.id]=[])).push(m);let l=Object.create(null),u=[],f=[];for(let m of i)l[m.id]=f.length<<1,f.push(y=>m.slot(y));let d=r?.config.facets;for(let m in o){let y=o[m],w=y[0].facet,C=d&&d[m]||[];if(y.every(S=>S.type==0))if(l[w.id]=u.length<<1|1,s0(C,y))u.push(r.facet(w));else{let S=w.combine(y.map(_=>_.value));u.push(r&&w.compare(S,r.facet(w))?r.facet(w):S)}else{for(let S of y)S.type==0?(l[S.id]=u.length<<1|1,u.push(S.value)):(l[S.id]=f.length<<1,f.push(_=>S.dynamicSlot(_)));l[w.id]=f.length<<1,f.push(S=>d$(S,w,y))}}let p=f.map(m=>m(l));return new n(e,s,p,l,u,o)}};function h$(n,e,t){let r=[[],[],[],[],[]],i=new Map;function o(s,l){let u=i.get(s);if(u!=null){if(u<=l)return;let f=r[u].indexOf(s);f>-1&&r[u].splice(f,1),s instanceof Sl&&t.delete(s.compartment)}if(i.set(s,l),Array.isArray(s))for(let f of s)o(f,l);else if(s instanceof Sl){if(t.has(s.compartment))throw new RangeError("Duplicate use of compartment in extensions");let f=e.get(s.compartment)||s.inner;t.set(s.compartment,f),o(f,l)}else if(s instanceof Xf)o(s.inner,s.prec);else if(s instanceof st)r[l].push(s),s.provides&&o(s.provides,l);else if(s instanceof Js)r[l].push(s),s.facet.extensions&&o(s.facet.extensions,Ro.default);else{let f=s.extension;if(!f)throw new Error(`Unrecognized extension value in extension set (${s}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);o(f,l)}}return o(n,Ro.default),r.reduce((s,l)=>s.concat(l))}function xl(n,e){if(e&1)return 2;let t=e>>1,r=n.status[t];if(r==4)throw new Error("Cyclic dependency between fields and/or facets");if(r&2)return r;n.status[t]=4;let i=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|i}function td(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}var Y1=G.define(),Wy=G.define({combine:n=>n.some(e=>e),static:!0}),r_=G.define({combine:n=>n.length?n[0]:void 0,static:!0}),i_=G.define(),o_=G.define(),s_=G.define(),Q1=G.define({combine:n=>n.length?n[0]:!1}),fn=class{constructor(e,t){this.type=e,this.value=t}static define(){return new Jy}},Jy=class{of(e){return new fn(this,e)}},Xy=class{constructor(e){this.map=e}of(e){return new de(this,e)}},de=(()=>{class n{constructor(t,r){this.type=t,this.value=r}map(t){let r=this.type.map(this.value,t);return r===void 0?void 0:r==this.value?this:new n(this.type,r)}is(t){return this.type==t}static define(t={}){return new Xy(t.map||(r=>r))}static mapEffects(t,r){if(!t.length)return t;let i=[];for(let o of t){let s=o.map(r);s&&i.push(s)}return i}}return n.reconfigure=n.define(),n.appendConfig=n.define(),n})(),Tn=(()=>{class n{constructor(t,r,i,o,s,l){this.startState=t,this.changes=r,this.selection=i,this.effects=o,this.annotations=s,this.scrollIntoView=l,this._doc=null,this._state=null,i&&n_(i,r.newLength),s.some(u=>u.type==n.time)||(this.annotations=s.concat(n.time.of(Date.now())))}static create(t,r,i,o,s,l){return new n(t,r,i,o,s,l)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(t){for(let r of this.annotations)if(r.type==t)return r.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let r=this.annotation(n.userEvent);return!!(r&&(r==t||r.length>t.length&&r.slice(0,t.length)==t&&r[t.length]=="."))}}return n.time=fn.define(),n.userEvent=fn.define(),n.addToHistory=fn.define(),n.remote=fn.define(),n})();function p$(n,e){let t=[];for(let r=0,i=0;;){let o,s;if(r=n[r]))o=n[r++],s=n[r++];else if(i=0;i--){let o=r[i](n);o instanceof Tn?n=o:Array.isArray(o)&&o.length==1&&o[0]instanceof Tn?n=o[0]:n=l_(e,Xs(o),!1)}return n}function m$(n){let e=n.startState,t=e.facet(s_),r=n;for(let i=t.length-1;i>=0;i--){let o=t[i](n);o&&Object.keys(o).length&&(r=a_(r,e0(e,o,n.changes.newLength),!0))}return r==n?n:Tn.create(e,n.changes,n.selection,r.effects,r.annotations,r.scrollIntoView)}var y$=[];function Xs(n){return n==null?y$:Array.isArray(n)?n:[n]}var je=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(je||(je={})),v$=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,t0;try{t0=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function w$(n){if(t0)return t0.test(n);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||v$.test(t)))return!0}return!1}function b$(n){return e=>{if(!/\S/.test(e))return je.Space;if(w$(e))return je.Word;for(let t=0;t-1)return je.Word;return je.Other}}var pt=(()=>{class n{constructor(t,r,i,o,s,l){this.config=t,this.doc=r,this.selection=i,this.values=o,this.status=t.statusTemplate.slice(),this.computeSlot=s,l&&(l._state=this);for(let u=0;uo.set(d,f)),r=null),o.set(u.value.compartment,u.value.extension)):u.is(de.reconfigure)?(r=null,i=u.value):u.is(de.appendConfig)&&(r=null,i=Xs(i).concat(u.value));let s;r?s=t.startState.values.slice():(r=ed.resolve(i,o,this),s=new n(r,this.doc,this.selection,r.dynamicSlots.map(()=>null),(f,d)=>d.reconfigure(f,this),null).values);let l=t.startState.facet(Wy)?t.newSelection:t.newSelection.asSingle();new n(r,t.newDoc,l,s,(u,f)=>f.update(u,t),t)}replaceSelection(t){return typeof t=="string"&&(t=this.toText(t)),this.changeByRange(r=>({changes:{from:r.from,to:r.to,insert:t},range:V.cursor(r.from+t.length)}))}changeByRange(t){let r=this.selection,i=t(r.ranges[0]),o=this.changes(i.changes),s=[i.range],l=Xs(i.effects);for(let u=1;ul.spec.fromJSON(u,f)))}}return n.create({doc:t.doc,selection:V.fromJSON(t.selection),extensions:r.extensions?o.concat([r.extensions]):o})}static create(t={}){let r=ed.resolve(t.extensions||[],new Map),i=t.doc instanceof _e?t.doc:_e.of((t.doc||"").split(r.staticFacet(n.lineSeparator)||Zy)),o=t.selection?t.selection instanceof V?t.selection:V.single(t.selection.anchor,t.selection.head):V.single(0);return n_(o,i.length),r.staticFacet(Wy)||(o=o.asSingle()),new n(r,i,o,r.dynamicSlots.map(()=>null),(s,l)=>l.create(s),null)}get tabSize(){return this.facet(n.tabSize)}get lineBreak(){return this.facet(n.lineSeparator)||` +`}get readOnly(){return this.facet(Q1)}phrase(t,...r){for(let i of this.facet(n.phrases))if(Object.prototype.hasOwnProperty.call(i,t)){t=i[t];break}return r.length&&(t=t.replace(/\$(\$|\d*)/g,(i,o)=>{if(o=="$")return"$";let s=+(o||1);return!s||s>r.length?i:r[s-1]})),t}languageDataAt(t,r,i=-1){let o=[];for(let s of this.facet(Y1))for(let l of s(this,r,i))Object.prototype.hasOwnProperty.call(l,t)&&o.push(l[t]);return o}charCategorizer(t){return b$(this.languageDataAt("wordChars",t).join(""))}wordAt(t){let{text:r,from:i,length:o}=this.doc.lineAt(t),s=this.charCategorizer(t),l=t-i,u=t-i;for(;l>0;){let f=gt(r,l,!1);if(s(r.slice(f,l))!=je.Word)break;l=f}for(;ue.length?e[0]:4}),n.lineSeparator=r_,n.readOnly=Q1,n.phrases=G.define({compare(e,t){let r=Object.keys(e),i=Object.keys(t);return r.length==i.length&&r.every(o=>e[o]==t[o])}}),n.languageData=Y1,n.changeFilter=i_,n.transactionFilter=o_,n.transactionExtender=s_,n})();ta.reconfigure=de.define();function $t(n,e,t={}){let r={};for(let i of n)for(let o of Object.keys(i)){let s=i[o],l=r[o];if(l===void 0)r[o]=s;else if(!(l===s||s===void 0))if(Object.hasOwnProperty.call(t,o))r[o]=t[o](l,s);else throw new Error("Config merge conflict for field "+o)}for(let i in e)r[i]===void 0&&(r[i]=e[i]);return r}var gr=class{eq(e){return this==e}range(e,t=e){return El.create(e,t,this)}};gr.prototype.startSide=gr.prototype.endSide=0;gr.prototype.point=!1;gr.prototype.mapMode=Rt.TrackDel;var El=class n{constructor(e,t,r){this.from=e,this.to=t,this.value=r}static create(e,t,r){return new n(e,t,r)}};function n0(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}var r0=class n{constructor(e,t,r,i){this.from=e,this.to=t,this.value=r,this.maxPoint=i}get length(){return this.to[this.to.length-1]}findIndex(e,t,r,i=0){let o=r?this.to:this.from;for(let s=i,l=o.length;;){if(s==l)return s;let u=s+l>>1,f=o[u]-e||(r?this.value[u].endSide:this.value[u].startSide)-t;if(u==s)return f>=0?s:l;f>=0?l=u:s=u+1}}between(e,t,r,i){for(let o=this.findIndex(t,-1e9,!0),s=this.findIndex(r,1e9,!1,o);oy||m==y&&f.startSide>0&&f.endSide<=0)continue;(y-m||f.endSide-f.startSide)<0||(s<0&&(s=m),f.point&&(l=Math.max(l,y-m)),r.push(f),i.push(m-s),o.push(y-s))}return{mapped:r.length?new n(i,o,r,l):null,pos:s}}},Ge=(()=>{class n{constructor(t,r,i,o){this.chunkPos=t,this.chunk=r,this.nextLayer=i,this.maxPoint=o}static create(t,r,i,o){return new n(t,r,i,o)}get length(){let t=this.chunk.length-1;return t<0?0:Math.max(this.chunkEnd(t),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let t=this.nextLayer.size;for(let r of this.chunk)t+=r.value.length;return t}chunkEnd(t){return this.chunkPos[t]+this.chunk[t].length}update(t){let{add:r=[],sort:i=!1,filterFrom:o=0,filterTo:s=this.length}=t,l=t.filter;if(r.length==0&&!l)return this;if(i&&(r=r.slice().sort(n0)),this.isEmpty)return r.length?n.of(r):this;let u=new nd(this,null,-1).goto(0),f=0,d=[],p=new An;for(;u.value||f=0){let m=r[f++];p.addInner(m.from,m.to,m.value)||d.push(m)}else u.rangeIndex==1&&u.chunkIndexthis.chunkEnd(u.chunkIndex)||su.to||s=s&&t<=s+l.length&&l.between(s,t-s,r-s,i)===!1)return}this.nextLayer.between(t,r,i)}}iter(t=0){return _l.from([this]).goto(t)}get isEmpty(){return this.nextLayer==this}static iter(t,r=0){return _l.from(t).goto(r)}static compare(t,r,i,o,s=-1){let l=t.filter(m=>m.maxPoint>0||!m.isEmpty&&m.maxPoint>=s),u=r.filter(m=>m.maxPoint>0||!m.isEmpty&&m.maxPoint>=s),f=J1(l,u,i),d=new Po(l,f,s),p=new Po(u,f,s);i.iterGaps((m,y,w)=>X1(d,m,p,y,w,o)),i.empty&&i.length==0&&X1(d,0,p,0,0,o)}static eq(t,r,i=0,o){o==null&&(o=999999999);let s=t.filter(p=>!p.isEmpty&&r.indexOf(p)<0),l=r.filter(p=>!p.isEmpty&&t.indexOf(p)<0);if(s.length!=l.length)return!1;if(!s.length)return!0;let u=J1(s,l),f=new Po(s,u,0).goto(i),d=new Po(l,u,0).goto(i);for(;;){if(f.to!=d.to||!i0(f.active,d.active)||f.point&&(!d.point||!f.point.eq(d.point)))return!1;if(f.to>o)return!0;f.next(),d.next()}}static spans(t,r,i,o,s=-1){let l=new Po(t,null,s).goto(r),u=r,f=l.openStart;for(;;){let d=Math.min(l.to,i);if(l.point){let p=l.activeForPoint(l.to),m=l.pointFromu&&(o.span(u,d,l.active,f),f=l.openEnd(d));if(l.to>i)return f+(l.point&&l.to>i?1:0);u=l.to,l.next()}}static of(t,r=!1){let i=new An;for(let o of t instanceof El?[t]:r?D$(t):t)i.add(o.from,o.to,o.value);return i.finish()}static join(t){if(!t.length)return n.empty;let r=t[t.length-1];for(let i=t.length-2;i>=0;i--)for(let o=t[i];o!=n.empty;o=o.nextLayer)r=new n(o.chunkPos,o.chunk,r,Math.max(o.maxPoint,r.maxPoint));return r}}return n.empty=new n([],[],null,-1),n})();function D$(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(n0);e=r}return n}Ge.empty.nextLayer=Ge.empty;var An=class n{finishChunk(e){this.chunks.push(new r0(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,r){this.addInner(e,t,r)||(this.nextLayer||(this.nextLayer=new n)).add(e,t,r)}addInner(e,t,r){let i=e-this.lastTo||r.startSide-this.last.endSide;if(i<=0&&(e-this.lastFrom||r.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return i<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=r,this.lastFrom=e,this.lastTo=t,this.value.push(r),r.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let r=t.value.length-1;return this.last=t.value[r],this.lastFrom=t.from[r]+e,this.lastTo=t.to[r]+e,!0}finish(){return this.finishInner(Ge.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=Ge.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function J1(n,e,t){let r=new Map;for(let o of n)for(let s=0;s=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=r&&i.push(new nd(s,t,r,o));return i.length==1?i[0]:new n(i)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let r of this.heap)r.goto(e,t);for(let r=this.heap.length>>1;r>=0;r--)qy(this.heap,r);return this.next(),this}forward(e,t){for(let r of this.heap)r.forward(e,t);for(let r=this.heap.length>>1;r>=0;r--)qy(this.heap,r);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),qy(this.heap,0)}}};function qy(n,e){for(let t=n[e];;){let r=(e<<1)+1;if(r>=n.length)break;let i=n[r];if(r+1=0&&(i=n[r+1],r++),t.compare(i)<0)break;n[r]=t,n[e]=i,e=r}}var Po=class{constructor(e,t,r){this.minPoint=r,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=_l.from(e,t,r)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Zf(this.active,e),Zf(this.activeTo,e),Zf(this.activeRank,e),this.minActive=e_(this.active,this.activeTo)}addActive(e){let t=0,{value:r,to:i,rank:o}=this.cursor;for(;t0;)t++;Kf(this.active,t,r),Kf(this.activeTo,t,i),Kf(this.activeRank,t,o),e&&Kf(e,t,this.cursor.from),this.minActive=e_(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let r=this.openStart<0?[]:null;for(;;){let i=this.minActive;if(i>-1&&(this.activeTo[i]-this.cursor.from||this.active[i].endSide-this.cursor.startSide)<0){if(this.activeTo[i]>e){this.to=this.activeTo[i],this.endSide=this.active[i].endSide;break}this.removeActive(i),r&&Zf(r,i)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let o=this.cursor.value;if(!o.point)this.addActive(r),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&r[i]=0&&!(this.activeRank[r]e||this.activeTo[r]==e&&this.active[r].endSide>=this.point.endSide)&&t.push(this.active[r]);return t.reverse()}openEnd(e){let t=0;for(let r=this.activeTo.length-1;r>=0&&this.activeTo[r]>e;r--)t++;return t}};function X1(n,e,t,r,i,o){n.goto(e),t.goto(r);let s=r+i,l=r,u=r-e;for(;;){let f=n.to+u-t.to,d=f||n.endSide-t.endSide,p=d<0?n.to+u:t.to,m=Math.min(p,s);if(n.point||t.point?n.point&&t.point&&(n.point==t.point||n.point.eq(t.point))&&i0(n.activeForPoint(n.to),t.activeForPoint(t.to))||o.comparePoint(l,m,n.point,t.point):m>l&&!i0(n.active,t.active)&&o.compareRange(l,m,n.active,t.active),p>s)break;(f||n.openEnd!=t.openEnd)&&o.boundChange&&o.boundChange(p),l=p,d<=0&&n.next(),d>=0&&t.next()}}function i0(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;r--)n[r+1]=n[r];n[e]=t}function e_(n,e){let t=-1,r=1e9;for(let i=0;i=e)return i;if(i==n.length)break;o+=n.charCodeAt(i)==9?t-o%t:1,i=gt(n,i)}return r===!0?-1:n.length}var a0="\u037C",u_=typeof Symbol>"u"?"__"+a0:Symbol.for(a0),l0=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),c_=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},er=class{constructor(e,t){this.rules=[];let{finish:r}=t||{};function i(s){return/^@/.test(s)?[s]:s.split(/,\s*/)}function o(s,l,u,f){let d=[],p=/^@(\w+)\b/.exec(s[0]),m=p&&p[1]=="keyframes";if(p&&l==null)return u.push(s[0]+";");for(let y in l){let w=l[y];if(/&/.test(y))o(y.split(/,\s*/).map(C=>s.map(S=>C.replace(/&/,S))).reduce((C,S)=>C.concat(S)),w,u);else if(w&&typeof w=="object"){if(!p)throw new RangeError("The value of a property ("+y+") should be a primitive value.");o(i(y),w,d,m)}else w!=null&&d.push(y.replace(/_.*/,"").replace(/[A-Z]/g,C=>"-"+C.toLowerCase())+": "+w+";")}(d.length||m)&&u.push((r&&!p&&!f?s.map(r):s).join(", ")+" {"+d.join(" ")+"}")}for(let s in e)o(i(s),e[s],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=c_[u_]||1;return c_[u_]=e+1,a0+e.toString(36)}static mount(e,t,r){let i=e[l0],o=r&&r.nonce;i?o&&i.setNonce(o):i=new u0(e,o),i.mount(Array.isArray(t)?t:[t],e)}},f_=new Map,u0=class{constructor(e,t){let r=e.ownerDocument||e,i=r.defaultView;if(!e.head&&e.adoptedStyleSheets&&i.CSSStyleSheet){let o=f_.get(r);if(o)return e[l0]=o;this.sheet=new i.CSSStyleSheet,f_.set(r,this)}else this.styleTag=r.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[l0]=this}mount(e,t){let r=this.sheet,i=0,o=0;for(let s=0;s-1&&(this.modules.splice(u,1),o--,u=-1),u==-1){if(this.modules.splice(o++,0,l),r)for(let f=0;f",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},C$=typeof navigator<"u"&&/Mac/.test(navigator.platform),x$=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(mt=0;mt<10;mt++)fi[48+mt]=fi[96+mt]=String(mt);var mt;for(mt=1;mt<=24;mt++)fi[mt+111]="F"+mt;var mt;for(mt=65;mt<=90;mt++)fi[mt]=String.fromCharCode(mt+32),na[mt]=String.fromCharCode(mt);var mt;for(id in fi)na.hasOwnProperty(id)||(na[id]=fi[id]);var id;function d_(n){var e=C$&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||x$&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?na:fi)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function jl(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function w0(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function pd(n,e){if(!e.anchorNode)return!1;try{return w0(n,e.anchorNode)}catch{return!1}}function Ul(n){return n.nodeType==3?Ho(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Rl(n,e,t,r){return t?h_(n,e,t,r,-1)||h_(n,e,t,r,1):!1}function Bo(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function Dd(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function h_(n,e,t,r,i){for(;;){if(n==t&&e==r)return!0;if(e==(i<0?0:jr(n))){if(n.nodeName=="DIV")return!1;let o=n.parentNode;if(!o||o.nodeType!=1)return!1;e=Bo(n)+(i<0?0:1),n=o}else if(n.nodeType==1){if(n=n.childNodes[e+(i<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=i<0?jr(n):0}else return!1}}function jr(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Fd(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function S$(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function iM(n,e){let t=e.width/n.offsetWidth,r=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(r>.995&&r<1.005||!isFinite(r)||Math.abs(e.height-n.offsetHeight)<1)&&(r=1),{scaleX:t,scaleY:r}}function E$(n,e,t,r,i,o,s,l){let u=n.ownerDocument,f=u.defaultView||window;for(let d=n,p=!1;d&&!p;)if(d.nodeType==1){let m,y=d==u.body,w=1,C=1;if(y)m=S$(f);else{if(/^(fixed|sticky)$/.test(getComputedStyle(d).position)&&(p=!0),d.scrollHeight<=d.clientHeight&&d.scrollWidth<=d.clientWidth){d=d.assignedSlot||d.parentNode;continue}let P=d.getBoundingClientRect();({scaleX:w,scaleY:C}=iM(d,P)),m={left:P.left,right:P.left+d.clientWidth*w,top:P.top,bottom:P.top+d.clientHeight*C}}let S=0,_=0;if(i=="nearest")e.top0&&e.bottom>m.bottom+_&&(_=e.bottom-m.bottom+_+s)):e.bottom>m.bottom&&(_=e.bottom-m.bottom+s,t<0&&e.top-_0&&e.right>m.right+S&&(S=e.right-m.right+S+o)):e.right>m.right&&(S=e.right-m.right+o,t<0&&e.lefti.clientHeight&&(r=i),!t&&i.scrollWidth>i.clientWidth&&(t=i),i=i.assignedSlot||i.parentNode;else if(i.nodeType==11)i=i.host;else break;return{x:t,y:r}}var b0=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:r}=e;this.set(t,Math.min(e.anchorOffset,t?jr(t):0),r,Math.min(e.focusOffset,r?jr(r):0))}set(e,t,r,i){this.anchorNode=e,this.anchorOffset=t,this.focusNode=r,this.focusOffset=i}},ra=null;function oM(n){if(n.setActive)return n.setActive();if(ra)return n.focus(ra);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(ra==null?{get preventScroll(){return ra={preventScroll:!0},!0}}:void 0),!ra){ra=!1;for(let t=0;tMath.max(1,n.scrollHeight-n.clientHeight-4)}function lM(n,e){for(let t=n,r=e;;){if(t.nodeType==3&&r>0)return{node:t,offset:r};if(t.nodeType==1&&r>0){if(t.contentEditable=="false")return null;t=t.childNodes[r-1],r=jr(t)}else if(t.parentNode&&!Dd(t))r=Bo(t),t=t.parentNode;else return null}}function uM(n,e){for(let t=n,r=e;;){if(t.nodeType==3&&rt)return p.domBoundsAround(e,t,f);if(m>=e&&i==-1&&(i=u,o=f),f>t&&p.dom.parentNode==this.dom){s=u,l=d;break}d=m,f=m+p.breakAfter}return{from:o,to:l<0?r+this.length:l,startDOM:(i?this.children[i-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:s=0?this.children[s].dom:null}}markDirty(e=!1){this.flags|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.flags|=2),t.flags&1)return;t.flags|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.flags&7&&this.markParentsDirty(!0))}setDOM(e){this.dom!=e&&(this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this)}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,r=sv){this.markDirty();for(let i=e;ithis.pos||e==this.pos&&(t>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let r=this.children[--this.i];this.pos-=r.length+r.breakAfter}}};function cM(n,e,t,r,i,o,s,l,u){let{children:f}=n,d=f.length?f[e]:null,p=o.length?o[o.length-1]:null,m=p?p.breakAfter:s;if(!(e==r&&d&&!s&&!m&&o.length<2&&d.merge(t,i,o.length?p:null,t==0,l,u))){if(r0&&(!s&&o.length&&d.merge(t,d.length,o[0],!1,l,0)?d.breakAfter=o.shift().breakAfter:(t2),Z={mac:v_||/Mac/.test(dn.platform),windows:/Win/.test(dn.platform),linux:/Linux|X11/.test(dn.platform),ie:Ld,ie_version:dM?D0.documentMode||6:x0?+x0[1]:C0?+C0[1]:0,gecko:m_,gecko_version:m_?+(/Firefox\/(\d+)/.exec(dn.userAgent)||[0,0])[1]:0,chrome:!!c0,chrome_version:c0?+c0[1]:0,ios:v_,android:/Android\b/.test(dn.userAgent),webkit:y_,safari:hM,webkit_version:y_?+(/\bAppleWebKit\/(\d+)/.exec(dn.userAgent)||[0,0])[1]:0,tabSize:D0.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"},T$=256,Ur=class n extends Ze{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,t,r){return this.flags&8||r&&(!(r instanceof n)||this.length-(t-e)+r.length>T$||r.flags&8)?!1:(this.text=this.text.slice(0,e)+(r?r.text:"")+this.text.slice(t),this.markDirty(),!0)}split(e){let t=new n(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t.flags|=this.flags&8,t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new Jt(this.dom,e)}domBoundsAround(e,t,r){return{from:r,to:r+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return A$(this.dom,e,t)}},Wi=class n extends Ze{constructor(e,t=[],r=0){super(),this.mark=e,this.children=t,this.length=r;for(let i of t)i.setParent(this)}setAttrs(e){if(sM(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}canReuseDOM(e){return super.canReuseDOM(e)&&!((this.flags|e.flags)&8)}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.flags|=6)}sync(e,t){this.dom?this.flags&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,r,i,o,s){return r&&(!(r instanceof n&&r.mark.eq(this.mark))||e&&o<=0||te&&t.push(r=e&&(i=o),r=u,o++}let s=this.length-e;return this.length=e,i>-1&&(this.children.length=i,this.markDirty()),new n(this.mark,t,s)}domAtPos(e){return pM(this,e)}coordsAt(e,t){return mM(this,e,t)}};function A$(n,e,t){let r=n.nodeValue.length;e>r&&(e=r);let i=e,o=e,s=0;e==0&&t<0||e==r&&t>=0?Z.chrome||Z.gecko||(e?(i--,s=1):o=0)?0:l.length-1];return Z.safari&&!s&&u.width==0&&(u=Array.prototype.find.call(l,f=>f.width)||u),s?Fd(u,s<0):u||null}var $l=class n extends Ze{static create(e,t,r){return new n(e,t,r)}constructor(e,t,r){super(),this.widget=e,this.length=t,this.side=r,this.prevWidget=null}split(e){let t=n.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.widget.editable||(this.dom.contentEditable="false"))}getSide(){return this.side}merge(e,t,r,i,o,s){return r&&(!(r instanceof n)||!this.widget.compare(r.widget)||e>0&&o<=0||t0)?Jt.before(this.dom):Jt.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let r=this.widget.coordsAt(this.dom,e,t);if(r)return r;let i=this.dom.getClientRects(),o=null;if(!i.length)return null;let s=this.side?this.side<0:e>0;for(let l=s?i.length-1:0;o=i[l],!(e>0?l==0:l==i.length-1||o.top0?Jt.before(this.dom):Jt.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){return this.dom.getBoundingClientRect()}get overrideDOMText(){return _e.empty}get isHidden(){return!0}};Ur.prototype.children=$l.prototype.children=zl.prototype.children=sv;function pM(n,e){let t=n.dom,{children:r}=n,i=0;for(let o=0;io&&e0;o--){let s=r[o-1];if(s.dom.parentNode==t)return s.domAtPos(s.length)}for(let o=i;o0&&e instanceof Wi&&i.length&&(r=i[i.length-1])instanceof Wi&&r.mark.eq(e.mark)?gM(r,e.children[0],t-1):(i.push(e),e.setParent(n)),n.length+=e.length}function mM(n,e,t){let r=null,i=-1,o=null,s=-1;function l(f,d){for(let p=0,m=0;p=d&&(y.children.length?l(y,d-m):(!o||o.isHidden&&t>0)&&(w>d||m==w&&y.getSide()>0)?(o=y,s=d-m):(m-1?1:0)!=i.length-(t&&i.indexOf(t)>-1?1:0))return!1;for(let o of r)if(o!=t&&(i.indexOf(o)==-1||n[o]!==e[o]))return!1;return!0}function E0(n,e,t){let r=!1;if(e)for(let i in e)t&&i in t||(r=!0,i=="style"?n.style.cssText="":n.removeAttribute(i));if(t)for(let i in t)e&&e[i]==t[i]||(r=!0,i=="style"?n.style.cssText=t[i]:n.setAttribute(i,t[i]));return r}function N$(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new qi(e,t,t,r,e.widget||null,!1)}static replace(e){let t=!!e.block,r,i;if(e.isBlockGap)r=-5e8,i=4e8;else{let{start:o,end:s}=yM(e,t);r=(o?t?-3e8:-1:5e8)-1,i=(s?t?2e8:1:-6e8)+1}return new qi(e,r,i,t,e.widget||null,!0)}static line(e){return new ql(e)}static set(e,t=!1){return Ge.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};J.none=Ge.empty;var Wl=class n extends J{constructor(e){let{start:t,end:r}=yM(e);super(t?-1:5e8,r?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){var t,r;return this==e||e instanceof n&&this.tagName==e.tagName&&(this.class||((t=this.attrs)===null||t===void 0?void 0:t.class))==(e.class||((r=e.attrs)===null||r===void 0?void 0:r.class))&&xd(this.attrs,e.attrs,"class")}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};Wl.prototype.point=!1;var ql=class n extends J{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof n&&this.spec.class==e.spec.class&&xd(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};ql.prototype.mapMode=Rt.TrackBefore;ql.prototype.point=!0;var qi=class n extends J{constructor(e,t,r,i,o,s){super(t,r,o,e),this.block=i,this.isReplace=s,this.mapMode=i?t<=0?Rt.TrackBefore:Rt.TrackAfter:Rt.TrackDel}get type(){return this.startSide!=this.endSide?Xt.WidgetRange:this.startSide<=0?Xt.WidgetBefore:Xt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof n&&O$(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};qi.prototype.point=!0;function yM(n,e=!1){let{inclusiveStart:t,inclusiveEnd:r}=n;return t==null&&(t=n.inclusive),r==null&&(r=n.inclusive),{start:t??e,end:r??e}}function O$(n,e){return n==e||!!(n&&e&&n.compare(e))}function gd(n,e,t,r=0){let i=t.length-1;i>=0&&t[i]+r>=n?t[i]=Math.max(t[i],e):t.push(n,e)}var Ft=class n extends Ze{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(e,t,r,i,o,s){if(r){if(!(r instanceof n))return!1;this.dom||r.transferDOM(this)}return i&&this.setDeco(r?r.attrs:null),fM(this,e,t,r?r.children.slice():[],o,s),!0}split(e){let t=new n;if(t.breakAfter=this.breakAfter,this.length==0)return t;let{i:r,off:i}=this.childPos(e);i&&(t.append(this.children[r].split(i),0),this.children[r].merge(i,this.children[r].length,null,!1,0,0),r++);for(let o=r;o0&&this.children[r-1].length==0;)this.children[--r].destroy();return this.children.length=r,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){xd(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){gM(this,e,t)}addLineDeco(e){let t=e.spec.attributes,r=e.spec.class;t&&(this.attrs=S0(t,this.attrs||{})),r&&(this.attrs=S0({class:r},this.attrs||{}))}domAtPos(e){return pM(this,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.flags|=6)}sync(e,t){var r;this.dom?this.flags&4&&(sM(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(E0(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let i=this.dom.lastChild;for(;i&&Ze.get(i)instanceof Wi;)i=i.lastChild;if(!i||!this.length||i.nodeName!="BR"&&((r=Ze.get(i))===null||r===void 0?void 0:r.isEditable)==!1&&(!Z.ios||!this.children.some(o=>o instanceof Ur))){let o=document.createElement("BR");o.cmIgnore=!0,this.dom.appendChild(o)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0,t;for(let r of this.children){if(!(r instanceof Ur)||/[^ -~]/.test(r.text))return null;let i=Ul(r.dom);if(i.length!=1)return null;e+=i[0].width,t=i[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(e,t){let r=mM(this,e,t);if(!this.children.length&&r&&this.parent){let{heightOracle:i}=this.parent.view.viewState,o=r.bottom-r.top;if(Math.abs(o-i.lineHeight)<2&&i.textHeight=t){if(o instanceof n)return o;if(s>t)break}i=s+o.breakAfter}return null}},Vo=class n extends Ze{constructor(e,t,r){super(),this.widget=e,this.length=t,this.deco=r,this.breakAfter=0,this.prevWidget=null}merge(e,t,r,i,o,s){return r&&(!(r instanceof n)||!this.widget.compare(r.widget)||e>0&&o<=0||t0}},Gl=class extends On{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}},Pl=class n{constructor(e,t,r,i){this.doc=e,this.pos=t,this.end=r,this.disallowBlockEffectsFor=i,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=e.iter(),this.skip=t}posCovered(){if(this.content.length==0)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let e=this.content[this.content.length-1];return!(e.breakAfter||e instanceof Vo&&e.deco.endSide<0)}getLine(){return this.curLine||(this.content.push(this.curLine=new Ft),this.atCursorPos=!0),this.curLine}flushBuffer(e=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(od(new zl(-1),e),e.length),this.pendingBuffer=0)}addBlockWidget(e){this.flushBuffer(),this.curLine=null,this.content.push(e)}finish(e){this.pendingBuffer&&e<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,!this.posCovered()&&!(e&&this.content.length&&this.content[this.content.length-1]instanceof Vo)&&this.getLine()}buildText(e,t,r){for(;e>0;){if(this.textOff==this.text.length){let{value:o,lineBreak:s,done:l}=this.cursor.next(this.skip);if(this.skip=0,l)throw new Error("Ran out of text content when drawing inline views");if(s){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}else this.text=o,this.textOff=0}let i=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-r)),this.getLine().append(od(new Ur(this.text.slice(this.textOff,this.textOff+i)),t),r),this.atCursorPos=!0,this.textOff+=i,e-=i,r=0}}span(e,t,r,i){this.buildText(t-e,r,i),this.pos=t,this.openStart<0&&(this.openStart=i)}point(e,t,r,i,o,s){if(this.disallowBlockEffectsFor[s]&&r instanceof qi){if(r.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let l=t-e;if(r instanceof qi)if(r.block)r.startSide>0&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new Vo(r.widget||b_.block,l,r));else{let u=$l.create(r.widget||b_.inline,l,l?0:r.startSide),f=this.atCursorPos&&!u.isEditable&&o<=i.length&&(e0),d=!u.isEditable&&(ei.length||r.startSide<=0),p=this.getLine();this.pendingBuffer==2&&!f&&!u.isEditable&&(this.pendingBuffer=0),this.flushBuffer(i),f&&(p.append(od(new zl(1),i),o),o=i.length+Math.max(0,o-i.length)),p.append(od(u,i),o),this.atCursorPos=d,this.pendingBuffer=d?ei.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=i.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(r);l&&(this.textOff+l<=this.text.length?this.textOff+=l:(this.skip+=l-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=o)}static build(e,t,r,i,o){let s=new n(e,t,r,o);return s.openEnd=Ge.spans(i,t,r,s),s.openStart<0&&(s.openStart=s.openEnd),s.finish(s.openEnd),s}};function od(n,e){for(let t of e)n=new Wi(t,[n],n.length);return n}var b_=(()=>{class n extends On{constructor(t){super(),this.tag=t}eq(t){return t.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(t){return t.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}return n.inline=new n("span"),n.block=new n("div"),n})(),Ue=function(n){return n[n.LTR=0]="LTR",n[n.RTL=1]="RTL",n}(Ue||(Ue={})),jo=Ue.LTR,av=Ue.RTL;function vM(n){let e=[];for(let t=0;t=t){if(l.level==r)return s;(o<0||(i!=0?i<0?l.fromt:e[o].level>l.level))&&(o=s)}}if(o<0)throw new RangeError("Index out of range");return o}};function bM(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;C-=3)if(Lr[C+1]==-y){let S=Lr[C+2],_=S&2?i:S&4?S&1?o:i:0;_&&(We[p]=We[Lr[C]]=_),l=C;break}}else{if(Lr.length==189)break;Lr[l++]=p,Lr[l++]=m,Lr[l++]=u}else if((w=We[p])==2||w==1){let C=w==i;u=C?0:1;for(let S=l-3;S>=0;S-=3){let _=Lr[S+2];if(_&2)break;if(C)Lr[S+2]|=2;else{if(_&4)break;Lr[S+2]|=4}}}}}function B$(n,e,t,r){for(let i=0,o=r;i<=t.length;i++){let s=i?t[i-1].to:n,l=iu;)w==S&&(w=t[--C].from,S=C?t[C-1].to:n),We[--w]=y;u=d}else o=f,u++}}}function M0(n,e,t,r,i,o,s){let l=r%2?2:1;if(r%2==i%2)for(let u=e,f=0;uu&&s.push(new Br(u,C.from,y));let S=C.direction==jo!=!(y%2);I0(n,S?r+1:r,i,C.inner,C.from,C.to,s),u=C.to}w=C.to}else{if(w==t||(d?We[w]!=l:We[w]==l))break;w++}m?M0(n,u,w,r+1,i,m,s):ue;){let d=!0,p=!1;if(!f||u>o[f-1].to){let C=We[u-1];C!=l&&(d=!1,p=C==16)}let m=!d&&l==1?[]:null,y=d?r:r+1,w=u;e:for(;;)if(f&&w==o[f-1].to){if(p)break e;let C=o[--f];if(!d)for(let S=C.from,_=f;;){if(S==e)break e;if(_&&o[_-1].to==S)S=o[--_].from;else{if(We[S-1]==l)break e;break}}if(m)m.push(C);else{C.toWe.length;)We[We.length]=256;let r=[],i=e==jo?0:1;return I0(n,i,i,t,0,n.length,r),r}function DM(n){return[new Br(0,n,0)]}var CM="";function j$(n,e,t,r,i){var o;let s=r.head-n.from,l=Br.find(e,s,(o=r.bidiLevel)!==null&&o!==void 0?o:-1,r.assoc),u=e[l],f=u.side(i,t);if(s==f){let m=l+=i?1:-1;if(m<0||m>=e.length)return null;u=e[l=m],s=u.side(!i,t),f=u.side(i,t)}let d=gt(n.text,s,u.forward(i,t));(du.to)&&(d=f),CM=n.text.slice(Math.min(s,d),Math.max(s,d));let p=l==(i?e.length-1:0)?null:e[l+(i?1:-1)];return p&&d==f&&p.level+(i?0:1)n.some(e=>e)}),TM=G.define({combine:n=>n.some(e=>e)}),AM=G.define(),Fl=class n{constructor(e,t="nearest",r="nearest",i=5,o=5,s=!1){this.range=e,this.y=t,this.x=r,this.yMargin=i,this.xMargin=o,this.isSnapshot=s}map(e){return e.empty?this:new n(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new n(V.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},sd=de.define({map:(n,e)=>n.map(e)}),kM=de.define();function Lt(n,e,t){let r=n.facet(_M);r.length?r[0](e):window.onerror?window.onerror(String(e),t,void 0,void 0,e):t?console.error(t+":",e):console.error(e)}var di=G.define({combine:n=>n.length?n[0]:!0}),$$=0,Al=G.define(),at=class n{constructor(e,t,r,i,o){this.id=e,this.create=t,this.domEventHandlers=r,this.domEventObservers=i,this.extension=o(this)}static define(e,t){let{eventHandlers:r,eventObservers:i,provide:o,decorations:s}=t||{};return new n($$++,e,r,i,l=>{let u=[Al.of(l)];return s&&u.push(Zl.of(f=>{let d=f.plugin(l);return d?s(d):J.none})),o&&u.push(o(l)),u})}static fromClass(e,t){return n.define(r=>new e(r),t)}},Ll=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(r){if(Lt(t.state,r,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(e)}catch(t){Lt(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(r){Lt(e.state,r,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},C_=G.define(),T0=G.define(),Zl=G.define(),NM=G.define(),cv=G.define(),OM=G.define();function x_(n,e){let t=n.state.facet(OM);if(!t.length)return t;let r=t.map(o=>o instanceof Function?o(n):o),i=[];return Ge.spans(r,e.from,e.to,{point(){},span(o,s,l,u){let f=o-e.from,d=s-e.from,p=i;for(let m=l.length-1;m>=0;m--,u--){let y=l[m].spec.bidiIsolate,w;if(y==null&&(y=U$(e.text,f,d)),u>0&&p.length&&(w=p[p.length-1]).to==f&&w.direction==y)w.to=d,p=w.inner;else{let C={from:f,to:d,direction:y,inner:[]};p.push(C),p=C.inner}}}}),i}var RM=G.define();function fv(n){let e=0,t=0,r=0,i=0;for(let o of n.state.facet(RM)){let s=o(n);s&&(s.left!=null&&(e=Math.max(e,s.left)),s.right!=null&&(t=Math.max(t,s.right)),s.top!=null&&(r=Math.max(r,s.top)),s.bottom!=null&&(i=Math.max(i,s.bottom)))}return{left:e,right:t,top:r,bottom:i}}var Il=G.define(),Hr=class n{constructor(e,t,r,i){this.fromA=e,this.toA=t,this.fromB=r,this.toB=i}join(e){return new n(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,r=this;for(;t>0;t--){let i=e[t-1];if(!(i.fromA>r.toA)){if(i.toAd)break;o+=2}if(!u)return r;new n(u.fromA,u.toA,u.fromB,u.toB).addToSet(r),s=u.toA,l=u.toB}}},Sd=class n{constructor(e,t,r){this.view=e,this.state=t,this.transactions=r,this.flags=0,this.startState=e.state,this.changes=Qt.empty(this.startState.doc.length);for(let o of r)this.changes=this.changes.compose(o.changes);let i=[];this.changes.iterChangedRanges((o,s,l,u)=>i.push(new Hr(o,s,l,u))),this.changedRanges=i}static create(e,t,r){return new n(e,t,r)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},Ed=class extends Ze{get length(){return this.view.state.doc.length}constructor(e){super(),this.view=e,this.decorations=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.markedForComposition=new Set,this.editContextFormatting=J.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(e.contentDOM),this.children=[new Ft],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new Hr(0,0,0,e.state.doc.length)],0,null)}update(e){var t;let r=e.changedRanges;this.minWidth>0&&r.length&&(r.every(({fromA:f,toA:d})=>dthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let i=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?i=this.domChanged.newSel.head:!Y$(e.changes,this.hasComposition)&&!e.selectionSet&&(i=e.state.selection.main.head));let o=i>-1?W$(this.view,e.changes,i):null;if(this.domChanged=null,this.hasComposition){this.markedForComposition.clear();let{from:f,to:d}=this.hasComposition;r=new Hr(f,d,e.changes.mapPos(f,-1),e.changes.mapPos(d,1)).addToSet(r.slice())}this.hasComposition=o?{from:o.range.fromB,to:o.range.toB}:null,(Z.ie||Z.chrome)&&!o&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let s=this.decorations,l=this.updateDeco(),u=Z$(s,l,e.changes);return r=Hr.extendWithRanges(r,u),!(this.flags&7)&&r.length==0?!1:(this.updateInner(r,e.startState.doc.length,o),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t,r){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t,r);let{observer:i}=this.view;i.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=Z.chrome||Z.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,s),this.flags&=-8,s&&(s.written||i.selectionRange.focusNode!=s.node)&&(this.forceSelection=!0),this.dom.style.height=""}),this.markedForComposition.forEach(s=>s.flags&=-9);let o=[];if(this.view.viewport.from||this.view.viewport.to=0?i[s]:null;if(!l)break;let{fromA:u,toA:f,fromB:d,toB:p}=l,m,y,w,C;if(r&&r.range.fromBd){let j=Pl.build(this.view.state.doc,d,r.range.fromB,this.decorations,this.dynamicDecorationMap),R=Pl.build(this.view.state.doc,r.range.toB,p,this.decorations,this.dynamicDecorationMap);y=j.breakAtStart,w=j.openStart,C=R.openEnd;let U=this.compositionView(r);R.breakAtStart?U.breakAfter=1:R.content.length&&U.merge(U.length,U.length,R.content[0],!1,R.openStart,0)&&(U.breakAfter=R.content[0].breakAfter,R.content.shift()),j.content.length&&U.merge(0,0,j.content[j.content.length-1],!0,0,j.openEnd)&&j.content.pop(),m=j.content.concat(U).concat(R.content)}else({content:m,breakAtStart:y,openStart:w,openEnd:C}=Pl.build(this.view.state.doc,d,p,this.decorations,this.dynamicDecorationMap));let{i:S,off:_}=o.findPos(f,1),{i:P,off:B}=o.findPos(u,-1);cM(this,P,B,S,_,m,y,w,C)}r&&this.fixCompositionDOM(r)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let r of t.effects)r.is(kM)&&(this.editContextFormatting=r.value)}compositionView(e){let t=new Ur(e.text.nodeValue);t.flags|=8;for(let{deco:i}of e.marks)t=new Wi(i,[t],t.length);let r=new Ft;return r.append(t,0),r}fixCompositionDOM(e){let t=(o,s)=>{s.flags|=8|(s.children.some(u=>u.flags&7)?1:0),this.markedForComposition.add(s);let l=Ze.get(o);l&&l!=s&&(l.dom=null),s.setDOM(o)},r=this.childPos(e.range.fromB,1),i=this.children[r.i];t(e.line,i);for(let o=e.marks.length-1;o>=-1;o--)r=i.childPos(r.off,1),i=i.children[r.i],t(o>=0?e.marks[o].node:e.text,i)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let r=this.view.root.activeElement,i=r==this.dom,o=!i&&!(this.view.state.facet(di)||this.dom.tabIndex>-1)&&pd(this.dom,this.view.observer.selectionRange)&&!(r&&this.dom.contains(r));if(!(i||t||o))return;let s=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,u=this.moveToLine(this.domAtPos(l.anchor)),f=l.empty?u:this.moveToLine(this.domAtPos(l.head));if(Z.gecko&&l.empty&&!this.hasComposition&&z$(u)){let p=document.createTextNode("");this.view.observer.ignore(()=>u.node.insertBefore(p,u.node.childNodes[u.offset]||null)),u=f=new Jt(p,0),s=!0}let d=this.view.observer.selectionRange;(s||!d.focusNode||(!Rl(u.node,u.offset,d.anchorNode,d.anchorOffset)||!Rl(f.node,f.offset,d.focusNode,d.focusOffset))&&!this.suppressWidgetCursorChange(d,l))&&(this.view.observer.ignore(()=>{Z.android&&Z.chrome&&this.dom.contains(d.focusNode)&&K$(d.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let p=jl(this.view.root);if(p)if(l.empty){if(Z.gecko){let m=q$(u.node,u.offset);if(m&&m!=3){let y=(m==1?lM:uM)(u.node,u.offset);y&&(u=new Jt(y.node,y.offset))}}p.collapse(u.node,u.offset),l.bidiLevel!=null&&p.caretBidiLevel!==void 0&&(p.caretBidiLevel=l.bidiLevel)}else if(p.extend){p.collapse(u.node,u.offset);try{p.extend(f.node,f.offset)}catch{}}else{let m=document.createRange();l.anchor>l.head&&([u,f]=[f,u]),m.setEnd(f.node,f.offset),m.setStart(u.node,u.offset),p.removeAllRanges(),p.addRange(m)}o&&this.view.root.activeElement==this.dom&&(this.dom.blur(),r&&r.focus())}),this.view.observer.setSelectionRange(u,f)),this.impreciseAnchor=u.precise?null:new Jt(d.anchorNode,d.anchorOffset),this.impreciseHead=f.precise?null:new Jt(d.focusNode,d.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Rl(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,r=jl(e.root),{anchorNode:i,anchorOffset:o}=e.observer.selectionRange;if(!r||!t.empty||!t.assoc||!r.modify)return;let s=Ft.find(this,t.head);if(!s)return;let l=s.posAtStart;if(t.head==l||t.head==l+s.length)return;let u=this.coordsAt(t.head,-1),f=this.coordsAt(t.head,1);if(!u||!f||u.bottom>f.top)return;let d=this.domAtPos(t.head+t.assoc);r.collapse(d.node,d.offset),r.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let p=e.observer.selectionRange;e.docView.posFromDOM(p.anchorNode,p.anchorOffset)!=t.from&&r.collapse(i,o)}moveToLine(e){let t=this.dom,r;if(e.node!=t)return e;for(let i=e.offset;!r&&i=0;i--){let o=Ze.get(t.childNodes[i]);o instanceof Ft&&(r=o.domAtPos(o.length))}return r?new Jt(r.node,r.offset,!0):e}nearest(e){for(let t=e;t;){let r=Ze.get(t);if(r&&r.rootView==this)return r;t=t.parentNode}return null}posFromDOM(e,t){let r=this.nearest(e);if(!r)throw new RangeError("Trying to find position for a DOM position outside of the document");return r.localPosFromDOM(e,t)+r.posAtStart}domAtPos(e){let{i:t,off:r}=this.childCursor().findPos(e,-1);for(;t=0;s--){let l=this.children[s],u=o-l.breakAfter,f=u-l.length;if(ue||l.covers(1))&&(!r||l instanceof Ft&&!(r instanceof Ft&&t>=0)))r=l,i=f;else if(r&&f==e&&u==e&&l instanceof Vo&&Math.abs(t)<2){if(l.deco.startSide<0)break;s&&(r=null)}o=f}return r?r.coordsAt(e-i,t):null}coordsForChar(e){let{i:t,off:r}=this.childPos(e,1),i=this.children[t];if(!(i instanceof Ft))return null;for(;i.children.length;){let{i:l,off:u}=i.childPos(r,1);for(;;l++){if(l==i.children.length)return null;if((i=i.children[l]).length)break}r=u}if(!(i instanceof Ur))return null;let o=gt(i.text,r);if(o==r)return null;let s=Ho(i.dom,r,o).getClientRects();for(let l=0;lMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,u=this.view.textDirection==Ue.LTR;for(let f=0,d=0;di)break;if(f>=r){let y=p.dom.getBoundingClientRect();if(t.push(y.height),s){let w=p.dom.lastChild,C=w?Ul(w):[];if(C.length){let S=C[C.length-1],_=u?S.right-y.left:y.right-S.left;_>l&&(l=_,this.minWidth=o,this.minWidthFrom=f,this.minWidthTo=m)}}}f=m+p.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return getComputedStyle(this.children[t].dom).direction=="rtl"?Ue.RTL:Ue.LTR}measureTextSize(){for(let o of this.children)if(o instanceof Ft){let s=o.measureTextSize();if(s)return s}let e=document.createElement("div"),t,r,i;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let o=Ul(e.firstChild)[0];t=e.getBoundingClientRect().height,r=o?o.width/27:7,i=o?o.height:t,e.remove()}),{lineHeight:t,charWidth:r,textHeight:i}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new Cd(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let r=0,i=0;;i++){let o=i==t.viewports.length?null:t.viewports[i],s=o?o.from-1:this.length;if(s>r){let l=(t.lineBlockAt(s).bottom-t.lineBlockAt(r).top)/this.view.scaleY;e.push(J.replace({widget:new Gl(l),block:!0,inclusive:!0,isBlockGap:!0}).range(r,s))}if(!o)break;r=o.to+1}return J.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Zl).map(o=>(this.dynamicDecorationMap[e++]=typeof o=="function")?o(this.view):o),r=!1,i=this.view.state.facet(NM).map((o,s)=>{let l=typeof o=="function";return l&&(r=!0),l?o(this.view):o});for(i.length&&(this.dynamicDecorationMap[e++]=r,t.push(Ge.join(i))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];et.anchor?-1:1),i;if(!r)return;!t.empty&&(i=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(r={left:Math.min(r.left,i.left),top:Math.min(r.top,i.top),right:Math.max(r.right,i.right),bottom:Math.max(r.bottom,i.bottom)});let o=fv(this.view),s={left:r.left-o.left,top:r.top-o.top,right:r.right+o.right,bottom:r.bottom+o.bottom},{offsetWidth:l,offsetHeight:u}=this.view.scrollDOM;E$(this.view.scrollDOM,s,t.head{re.from&&(t=!0)}),t}function Q$(n,e,t=1){let r=n.charCategorizer(e),i=n.doc.lineAt(e),o=e-i.from;if(i.length==0)return V.cursor(e);o==0?t=1:o==i.length&&(t=-1);let s=o,l=o;t<0?s=gt(i.text,o,!1):l=gt(i.text,o);let u=r(i.text.slice(s,l));for(;s>0;){let f=gt(i.text,s,!1);if(r(i.text.slice(f,s))!=u)break;s=f}for(;ln?e.left-n:Math.max(0,n-e.right)}function X$(n,e){return e.top>n?e.top-n:Math.max(0,n-e.bottom)}function d0(n,e){return n.tope.top+1}function S_(n,e){return en.bottom?{top:n.top,left:n.left,right:n.right,bottom:e}:n}function A0(n,e,t){let r,i,o,s,l=!1,u,f,d,p;for(let w=n.firstChild;w;w=w.nextSibling){let C=Ul(w);for(let S=0;SB||s==B&&o>P){r=w,i=_,o=P,s=B;let j=B?t<_.top?-1:1:P?e<_.left?-1:1:0;l=!j||(j>0?S0)}P==0?t>_.bottom&&(!d||d.bottom<_.bottom)?(u=w,d=_):t<_.top&&(!p||p.top>_.top)&&(f=w,p=_):d&&d0(d,_)?d=E_(d,_.bottom):p&&d0(p,_)&&(p=S_(p,_.top))}}if(d&&d.bottom>=t?(r=u,i=d):p&&p.top<=t&&(r=f,i=p),!r)return{node:n,offset:0};let m=Math.max(i.left,Math.min(i.right,e));if(r.nodeType==3)return __(r,m,t);if(l&&r.contentEditable!="false")return A0(r,m,t);let y=Array.prototype.indexOf.call(n.childNodes,r)+(e>=(i.left+i.right)/2?1:0);return{node:n,offset:y}}function __(n,e,t){let r=n.nodeValue.length,i=-1,o=1e9,s=0;for(let l=0;lt?d.top-t:t-d.bottom)-1;if(d.left-1<=e&&d.right+1>=e&&p=(d.left+d.right)/2,y=m;if((Z.chrome||Z.gecko)&&Ho(n,l).getBoundingClientRect().left==d.right&&(y=!m),p<=0)return{node:n,offset:l+(y?1:0)};i=l+(y?1:0),o=p}}}return{node:n,offset:i>-1?i:s>0?n.nodeValue.length:0}}function FM(n,e,t,r=-1){var i,o;let s=n.contentDOM.getBoundingClientRect(),l=s.top+n.viewState.paddingTop,u,{docHeight:f}=n.viewState,{x:d,y:p}=e,m=p-l;if(m<0)return 0;if(m>f)return n.state.doc.length;for(let j=n.viewState.heightOracle.textHeight/2,R=!1;u=n.elementAtHeight(m),u.type!=Xt.Text;)for(;m=r>0?u.bottom+j:u.top-j,!(m>=0&&m<=f);){if(R)return t?null:0;R=!0,r=-r}p=l+m;let y=u.from;if(yn.viewport.to)return n.viewport.to==n.state.doc.length?n.state.doc.length:t?null:M_(n,s,u,d,p);let w=n.dom.ownerDocument,C=n.root.elementFromPoint?n.root:w,S=C.elementFromPoint(d,p);S&&!n.contentDOM.contains(S)&&(S=null),S||(d=Math.max(s.left+1,Math.min(s.right-1,d)),S=C.elementFromPoint(d,p),S&&!n.contentDOM.contains(S)&&(S=null));let _,P=-1;if(S&&((i=n.docView.nearest(S))===null||i===void 0?void 0:i.isEditable)!=!1){if(w.caretPositionFromPoint){let j=w.caretPositionFromPoint(d,p);j&&({offsetNode:_,offset:P}=j)}else if(w.caretRangeFromPoint){let j=w.caretRangeFromPoint(d,p);j&&({startContainer:_,startOffset:P}=j,(!n.contentDOM.contains(_)||Z.safari&&e8(_,P,d)||Z.chrome&&t8(_,P,d))&&(_=void 0))}_&&(P=Math.min(jr(_),P))}if(!_||!n.docView.dom.contains(_)){let j=Ft.find(n.docView,y);if(!j)return m>u.top+u.height/2?u.to:u.from;({node:_,offset:P}=A0(j.dom,d,p))}let B=n.docView.nearest(_);if(!B)return null;if(B.isWidget&&((o=B.dom)===null||o===void 0?void 0:o.nodeType)==1){let j=B.dom.getBoundingClientRect();return e.yn.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,u=Math.floor((i-t.top-(n.defaultLineHeight-l)*.5)/l);o+=u*n.viewState.heightOracle.lineLength}let s=n.state.sliceDoc(t.from,t.to);return t.from+rd(s,o,n.state.tabSize)}function e8(n,e,t){let r;if(n.nodeType!=3||e!=(r=n.nodeValue.length))return!1;for(let i=n.nextSibling;i;i=i.nextSibling)if(i.nodeType!=1||i.nodeName!="BR")return!1;return Ho(n,r-1,r).getBoundingClientRect().left>t}function t8(n,e,t){if(e!=0)return!1;for(let i=n;;){let o=i.parentNode;if(!o||o.nodeType!=1||o.firstChild!=i)return!1;if(o.classList.contains("cm-line"))break;i=o}let r=n.nodeType==1?n.getBoundingClientRect():Ho(n,0,Math.max(n.nodeValue.length,1)).getBoundingClientRect();return t-r.left>5}function k0(n,e){let t=n.lineBlockAt(e);if(Array.isArray(t.type)){for(let r of t.type)if(r.to>e||r.to==e&&(r.to==t.to||r.type==Xt.Text))return r}return t}function n8(n,e,t,r){let i=k0(n,e.head),o=!r||i.type!=Xt.Text||!(n.lineWrapping||i.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>i.from?e.head-1:e.head);if(o){let s=n.dom.getBoundingClientRect(),l=n.textDirectionAt(i.from),u=n.posAtCoords({x:t==(l==Ue.LTR)?s.right-1:s.left+1,y:(o.top+o.bottom)/2});if(u!=null)return V.cursor(u,t?-1:1)}return V.cursor(t?i.to:i.from,t?-1:1)}function I_(n,e,t,r){let i=n.state.doc.lineAt(e.head),o=n.bidiSpans(i),s=n.textDirectionAt(i.from);for(let l=e,u=null;;){let f=j$(i,o,s,l,t),d=CM;if(!f){if(i.number==(t?n.state.doc.lines:1))return l;d=` +`,i=n.state.doc.line(i.number+(t?1:-1)),o=n.bidiSpans(i),f=n.visualLineSide(i,!t)}if(u){if(!u(d))return l}else{if(!r)return f;u=r(d)}l=f}}function r8(n,e,t){let r=n.state.charCategorizer(e),i=r(t);return o=>{let s=r(o);return i==je.Space&&(i=s),i==s}}function i8(n,e,t,r){let i=e.head,o=t?1:-1;if(i==(t?n.state.doc.length:0))return V.cursor(i,e.assoc);let s=e.goalColumn,l,u=n.contentDOM.getBoundingClientRect(),f=n.coordsAtPos(i,e.assoc||-1),d=n.documentTop;if(f)s==null&&(s=f.left-u.left),l=o<0?f.top:f.bottom;else{let y=n.viewState.lineBlockAt(i);s==null&&(s=Math.min(u.right-u.left,n.defaultCharacterWidth*(i-y.from))),l=(o<0?y.top:y.bottom)+d}let p=u.left+s,m=r??n.viewState.heightOracle.textHeight>>1;for(let y=0;;y+=10){let w=l+(m+y)*o,C=FM(n,{x:p,y:w},!1,o);if(wu.bottom||(o<0?Ci)){let S=n.docView.coordsForChar(C),_=!S||w{if(e>o&&ei(n)),t.from,e.head>t.from?-1:1);return r==t.from?t:V.cursor(r,ro)&&this.lineBreak(),i=s}return this.findPointBefore(r,t),this}readTextNode(e){let t=e.nodeValue;for(let r of this.points)r.node==e&&(r.pos=this.text.length+Math.min(r.offset,t.length));for(let r=0,i=this.lineSeparator?null:/\r\n?|\n/g;;){let o=-1,s=1,l;if(this.lineSeparator?(o=t.indexOf(this.lineSeparator,r),s=this.lineSeparator.length):(l=i.exec(t))&&(o=l.index,s=l[0].length),this.append(t.slice(r,o<0?t.length:o)),o<0)break;if(this.lineBreak(),s>1)for(let u of this.points)u.node==e&&u.pos>this.text.length&&(u.pos-=s-1);r=o+s}}readNode(e){if(e.cmIgnore)return;let t=Ze.get(e),r=t&&t.overrideDOMText;if(r!=null){this.findPointInside(e,r.length);for(let i=r.iter();!i.next().done;)i.lineBreak?this.lineBreak():this.append(i.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let r of this.points)r.node==e&&e.childNodes[r.offset]==t&&(r.pos=this.text.length)}findPointInside(e,t){for(let r of this.points)(e.nodeType==3?r.node==e:e.contains(r.node))&&(r.pos=this.text.length+(o8(e,r.node,r.offset)?t:0))}};function o8(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:o,impreciseAnchor:s}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,r,0))){let l=o||s?[]:l8(e),u=new N0(l,e.state);u.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=u.text,this.newSel=u8(l,this.bounds.from)}else{let l=e.observer.selectionRange,u=o&&o.node==l.focusNode&&o.offset==l.focusOffset||!w0(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),f=s&&s.node==l.anchorNode&&s.offset==l.anchorOffset||!w0(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),d=e.viewport;if((Z.ios||Z.chrome)&&e.state.selection.main.empty&&u!=f&&(d.from>0||d.toDate.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:s,to:l}=e.bounds,u=i.from,f=null;(o===8||Z.android&&e.text.length=i.from&&t.to<=i.to&&(t.from!=i.from||t.to!=i.to)&&i.to-i.from-(t.to-t.from)<=4?t={from:i.from,to:i.to,insert:n.state.doc.slice(i.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,i.to))}:Z.chrome&&t&&t.from==t.to&&t.from==i.head&&t.insert.toString()==` + `&&n.lineWrapping&&(r&&(r=V.single(r.main.anchor-1,r.main.head-1)),t={from:i.from,to:i.to,insert:_e.of([" "])}),t)return dv(n,t,r,o);if(r&&!r.main.eq(i)){let s=!1,l="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(s=!0),l=n.inputState.lastSelectionOrigin),n.dispatch({selection:r,scrollIntoView:s,userEvent:l}),!0}else return!1}function dv(n,e,t,r=-1){if(Z.ios&&n.inputState.flushIOSKey(e))return!0;let i=n.state.selection.main;if(Z.android&&(e.to==i.to&&(e.from==i.from||e.from==i.from-1&&n.state.sliceDoc(e.from,i.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&aa(n.contentDOM,"Enter",13)||(e.from==i.from-1&&e.to==i.to&&e.insert.length==0||r==8&&e.insert.lengthi.head)&&aa(n.contentDOM,"Backspace",8)||e.from==i.from&&e.to==i.to+1&&e.insert.length==0&&aa(n.contentDOM,"Delete",46)))return!0;let o=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let s,l=()=>s||(s=s8(n,e,t));return n.state.facet(MM).some(u=>u(n,e.from,e.to,o,l))||n.dispatch(l()),!0}function s8(n,e,t){let r,i=n.state,o=i.selection.main;if(e.from>=o.from&&e.to<=o.to&&e.to-e.from>=(o.to-o.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let l=o.frome.to?i.sliceDoc(e.to,o.to):"";r=i.replaceSelection(n.state.toText(l+e.insert.sliceString(0,void 0,n.state.lineBreak)+u))}else{let l=i.changes(e),u=t&&t.main.to<=l.newLength?t.main:void 0;if(i.selection.ranges.length>1&&n.inputState.composing>=0&&e.to<=o.to&&e.to>=o.to-10){let f=n.state.sliceDoc(e.from,e.to),d,p=t&&PM(n,t.main.head);if(p){let w=e.insert.length-(e.to-e.from);d={from:p.from,to:p.to-w}}else d=n.state.doc.lineAt(o.head);let m=o.to-e.to,y=o.to-o.from;r=i.changeByRange(w=>{if(w.from==o.from&&w.to==o.to)return{changes:l,range:u||w.map(l)};let C=w.to-m,S=C-f.length;if(w.to-w.from!=y||n.state.sliceDoc(S,C)!=f||w.to>=d.from&&w.from<=d.to)return{range:w};let _=i.changes({from:S,to:C,insert:e.insert}),P=w.to-o.to;return{changes:_,range:u?V.range(Math.max(0,u.anchor+P),Math.max(0,u.head+P)):w.map(_)}})}else r={changes:l,selection:u&&i.selection.replaceRange(u)}}let s="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,s+=".compose",n.inputState.compositionFirstChange&&(s+=".start",n.inputState.compositionFirstChange=!1)),i.update(r,{userEvent:s,scrollIntoView:!0})}function a8(n,e,t,r){let i=Math.min(n.length,e.length),o=0;for(;o0&&l>0&&n.charCodeAt(s-1)==e.charCodeAt(l-1);)s--,l--;if(r=="end"){let u=Math.max(0,o-Math.min(s,l));t-=s+u-o}if(s=s?o-t:0;o-=u,l=o+(l-s),s=o}else if(l=l?o-t:0;o-=u,s=o+(s-l),l=o}return{from:o,toA:s,toB:l}}function l8(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:r,focusNode:i,focusOffset:o}=n.observer.selectionRange;return t&&(e.push(new _d(t,r)),(i!=t||o!=r)&&e.push(new _d(i,o))),e}function u8(n,e){if(n.length==0)return null;let t=n[0].pos,r=n.length==2?n[1].pos:t;return t>-1&&r>-1?V.single(t+e,r+e):null}var R0=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,Z.safari&&e.contentDOM.addEventListener("input",()=>null),Z.gecko&&S8(e.contentDOM.ownerDocument)}handleEvent(e){!m8(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||this.runHandlers(e.type,e)}runHandlers(e,t){let r=this.handlers[e];if(r){for(let i of r.observers)i(this.view,t);for(let i of r.handlers){if(t.defaultPrevented)break;if(i(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=c8(e),r=this.handlers,i=this.view.contentDOM;for(let o in t)if(o!="scroll"){let s=!t[o].handlers.length,l=r[o];l&&s!=!l.handlers.length&&(i.removeEventListener(o,this.handleEvent),l=null),l||i.addEventListener(o,this.handleEvent,{passive:s})}for(let o in r)o!="scroll"&&!t[o]&&i.removeEventListener(o,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&BM.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),Z.android&&Z.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return Z.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=VM.find(r=>r.keyCode==e.keyCode))&&!e.ctrlKey||f8.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:Z.safari&&!Z.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1:!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function T_(n,e){return(t,r)=>{try{return e.call(n,r,t)}catch(i){Lt(t.state,i)}}}function c8(n){let e=Object.create(null);function t(r){return e[r]||(e[r]={observers:[],handlers:[]})}for(let r of n){let i=r.spec;if(i&&i.domEventHandlers)for(let o in i.domEventHandlers){let s=i.domEventHandlers[o];s&&t(o).handlers.push(T_(r.value,s))}if(i&&i.domEventObservers)for(let o in i.domEventObservers){let s=i.domEventObservers[o];s&&t(o).observers.push(T_(r.value,s))}}for(let r in yr)t(r).handlers.push(yr[r]);for(let r in nr)t(r).observers.push(nr[r]);return e}var VM=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],f8="dthko",BM=[16,17,18,20,91,92,224,225],ad=6;function ld(n){return Math.max(0,n)*.7+8}function d8(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}var P0=class{constructor(e,t,r,i){this.view=e,this.startEvent=t,this.style=r,this.mustSelect=i,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=_$(e.contentDOM),this.atoms=e.state.facet(cv).map(s=>s(e));let o=e.contentDOM.ownerDocument;o.addEventListener("mousemove",this.move=this.move.bind(this)),o.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(pt.allowMultipleSelections)&&h8(e,t),this.dragging=g8(e,t)&&UM(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&d8(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,r=0,i=0,o=0,s=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:i,right:s}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:o,bottom:l}=this.scrollParents.y.getBoundingClientRect());let u=fv(this.view);e.clientX-u.left<=i+ad?t=-ld(i-e.clientX):e.clientX+u.right>=s-ad&&(t=ld(e.clientX-s)),e.clientY-u.top<=o+ad?r=-ld(o-e.clientY):e.clientY+u.bottom>=l-ad&&(r=ld(e.clientY-l)),this.setScrollSpeed(t,r)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}skipAtoms(e){let t=null;for(let r=0;rt.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function h8(n,e){let t=n.state.facet(xM);return t.length?t[0](e):Z.mac?e.metaKey:e.ctrlKey}function p8(n,e){let t=n.state.facet(SM);return t.length?t[0](e):Z.mac?!e.altKey:!e.ctrlKey}function g8(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let r=jl(n.root);if(!r||r.rangeCount==0)return!0;let i=r.getRangeAt(0).getClientRects();for(let o=0;o=e.clientX&&s.top<=e.clientY&&s.bottom>=e.clientY)return!0}return!1}function m8(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,r;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(r=Ze.get(t))&&r.ignoreEvent(e))return!1;return!0}var yr=Object.create(null),nr=Object.create(null),HM=Z.ie&&Z.ie_version<15||Z.ios&&Z.webkit_version<604;function y8(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),jM(n,t.value)},50)}function Vd(n,e,t){for(let r of n.facet(e))t=r(t,n);return t}function jM(n,e){e=Vd(n.state,lv,e);let{state:t}=n,r,i=1,o=t.toText(e),s=o.lines==t.selection.ranges.length;if(F0!=null&&t.selection.ranges.every(u=>u.empty)&&F0==o.toString()){let u=-1;r=t.changeByRange(f=>{let d=t.doc.lineAt(f.from);if(d.from==u)return{range:f};u=d.from;let p=t.toText((s?o.line(i++).text:e)+t.lineBreak);return{changes:{from:d.from,insert:p},range:V.cursor(f.from+p.length)}})}else s?r=t.changeByRange(u=>{let f=o.line(i++);return{changes:{from:u.from,to:u.to,insert:f.text},range:V.cursor(u.from+f.length)}}):r=t.replaceSelection(o);n.dispatch(r,{userEvent:"input.paste",scrollIntoView:!0})}nr.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};yr.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);nr.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin("select.pointer")};nr.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};yr.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let r of n.state.facet(EM))if(t=r(n,e),t)break;if(!t&&e.button==0&&(t=b8(n,e)),t){let r=!n.hasFocus;n.inputState.startMouseSelection(new P0(n,e,t,r)),r&&n.observer.ignore(()=>{oM(n.contentDOM);let o=n.root.activeElement;o&&!o.contains(n.contentDOM)&&o.blur()});let i=n.inputState.mouseSelection;if(i)return i.start(e),i.dragging===!1}return!1};function A_(n,e,t,r){if(r==1)return V.cursor(e,t);if(r==2)return Q$(n.state,e,t);{let i=Ft.find(n.docView,e),o=n.state.doc.lineAt(i?i.posAtEnd:e),s=i?i.posAtStart:o.from,l=i?i.posAtEnd:o.to;return le>=t.top&&e<=t.bottom&&n>=t.left&&n<=t.right;function v8(n,e,t,r){let i=Ft.find(n.docView,e);if(!i)return 1;let o=e-i.posAtStart;if(o==0)return 1;if(o==i.length)return-1;let s=i.coordsAt(o,-1);if(s&&k_(t,r,s))return-1;let l=i.coordsAt(o,1);return l&&k_(t,r,l)?1:s&&s.bottom>=r?-1:1}function N_(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:t,bias:v8(n,t,e.clientX,e.clientY)}}var w8=Z.ie&&Z.ie_version<=11,O_=null,R_=0,P_=0;function UM(n){if(!w8)return n.detail;let e=O_,t=P_;return O_=n,P_=Date.now(),R_=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(R_+1)%3:1}function b8(n,e){let t=N_(n,e),r=UM(e),i=n.state.selection;return{update(o){o.docChanged&&(t.pos=o.changes.mapPos(t.pos),i=i.map(o.changes))},get(o,s,l){let u=N_(n,o),f,d=A_(n,u.pos,u.bias,r);if(t.pos!=u.pos&&!s){let p=A_(n,t.pos,t.bias,r),m=Math.min(p.from,d.from),y=Math.max(p.to,d.to);d=m1&&(f=D8(i,u.pos))?f:l?i.addRange(d):V.create([d])}}}function D8(n,e){for(let t=0;t=e)return V.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}yr.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let i=n.docView.nearest(e.target);if(i&&i.isWidget){let o=i.posAtStart,s=o+i.length;(o>=t.to||s<=t.from)&&(t=V.range(o,s))}}let{inputState:r}=n;return r.mouseSelection&&(r.mouseSelection.dragging=!0),r.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Vd(n.state,uv,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};yr.dragend=n=>(n.inputState.draggedContent=null,!1);function F_(n,e,t,r){if(t=Vd(n.state,lv,t),!t)return;let i=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:o}=n.inputState,s=r&&o&&p8(n,e)?{from:o.from,to:o.to}:null,l={from:i,insert:t},u=n.state.changes(s?[s,l]:l);n.focus(),n.dispatch({changes:u,selection:{anchor:u.mapPos(i,-1),head:u.mapPos(i,1)},userEvent:s?"move.drop":"input.drop"}),n.inputState.draggedContent=null}yr.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let r=Array(t.length),i=0,o=()=>{++i==t.length&&F_(n,e,r.filter(s=>s!=null).join(n.state.lineBreak),!1)};for(let s=0;s{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(r[s]=l.result),o()},l.readAsText(t[s])}return!0}else{let r=e.dataTransfer.getData("Text");if(r)return F_(n,e,r,!0),!0}return!1};yr.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=HM?null:e.clipboardData;return t?(jM(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(y8(n),!1)};function C8(n,e){let t=n.dom.parentNode;if(!t)return;let r=t.appendChild(document.createElement("textarea"));r.style.cssText="position: fixed; left: -10000px; top: 10px",r.value=e,r.focus(),r.selectionEnd=e.length,r.selectionStart=0,setTimeout(()=>{r.remove(),n.focus()},50)}function x8(n){let e=[],t=[],r=!1;for(let i of n.selection.ranges)i.empty||(e.push(n.sliceDoc(i.from,i.to)),t.push(i));if(!e.length){let i=-1;for(let{from:o}of n.selection.ranges){let s=n.doc.lineAt(o);s.number>i&&(e.push(s.text),t.push({from:s.from,to:Math.min(n.doc.length,s.to+1)})),i=s.number}r=!0}return{text:Vd(n,uv,e.join(n.lineBreak)),ranges:t,linewise:r}}var F0=null;yr.copy=yr.cut=(n,e)=>{let{text:t,ranges:r,linewise:i}=x8(n.state);if(!t&&!i)return!1;F0=i?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:r,scrollIntoView:!0,userEvent:"delete.cut"});let o=HM?null:e.clipboardData;return o?(o.clearData(),o.setData("text/plain",t),!0):(C8(n,t),!1)};var $M=fn.define();function zM(n,e){let t=[];for(let r of n.facet(IM)){let i=r(n,e);i&&t.push(i)}return t?n.update({effects:t,annotations:$M.of(!0)}):null}function WM(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=zM(n.state,e);t?n.dispatch(t):n.update([])}},10)}nr.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),WM(n)};nr.blur=n=>{n.observer.clearSelectionRange(),WM(n)};nr.compositionstart=nr.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};nr.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,Z.chrome&&Z.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};nr.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};yr.beforeinput=(n,e)=>{var t,r;if(e.inputType=="insertReplacementText"&&n.observer.editContext){let o=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),s=e.getTargetRanges();if(o&&s.length){let l=s[0],u=n.posAtDOM(l.startContainer,l.startOffset),f=n.posAtDOM(l.endContainer,l.endOffset);return dv(n,{from:u,to:f,insert:n.state.toText(o)},null),!0}}let i;if(Z.chrome&&Z.android&&(i=VM.find(o=>o.inputType==e.inputType))&&(n.observer.delayAndroidKey(i.key,i.keyCode),i.key=="Backspace"||i.key=="Delete")){let o=((r=window.visualViewport)===null||r===void 0?void 0:r.height)||0;setTimeout(()=>{var s;(((s=window.visualViewport)===null||s===void 0?void 0:s.height)||0)>o+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return Z.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),Z.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>nr.compositionend(n,e),20),!1};var L_=new Set;function S8(n){L_.has(n)||(L_.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}var V_=["pre-wrap","normal","pre-line","break-spaces"],la=!1;function B_(){la=!1}var L0=class{constructor(e){this.lineWrapping=e,this.doc=_e.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let r=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(r+=Math.max(0,Math.ceil((t-e-r*this.lineLength*.5)/this.lineLength))),this.lineHeight*r}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return V_.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let r=0;r-1,u=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=l;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=r,this.textHeight=i,this.lineLength=o,u){this.heightSamples={};for(let f=0;f0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>yd&&(la=!0),this.height=e)}replace(e,t,r){return n.of(r)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,r,i){let o=this,s=r.doc;for(let l=i.length-1;l>=0;l--){let{fromA:u,toA:f,fromB:d,toB:p}=i[l],m=o.lineAt(u,Xe.ByPosNoHeight,r.setDoc(t),0,0),y=m.to>=f?m:o.lineAt(f,Xe.ByPosNoHeight,r,0,0);for(p+=y.to-f,f=y.to;l>0&&m.from<=i[l-1].toA;)u=i[l-1].fromA,d=i[l-1].fromB,l--,uo*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),r+=1+l.break,i-=l.size}else if(o>i*2){let l=e[r];l.break?e.splice(r,1,l.left,null,l.right):e.splice(r,1,l.left,l.right),r+=2+l.break,o-=l.size}else break;else if(i=o&&s(this.blockAt(0,r,i,o))}updateHeight(e,t=0,r=!1,i){return i&&i.from<=t&&i.more&&this.setHeight(i.heights[i.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}},tr=class n extends Id{constructor(e,t){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(e,t,r,i){return new Vr(i,this.length,r,this.height,this.breaks)}replace(e,t,r){let i=r[0];return r.length==1&&(i instanceof n||i instanceof zi&&i.flags&4)&&Math.abs(this.length-i.length)<10?(i instanceof zi?i=new n(i.length,this.height):i.height=this.height,this.outdated||(i.outdated=!1),i):Nn.of(r)}updateHeight(e,t=0,r=!1,i){return i&&i.from<=t&&i.more?this.setHeight(i.heights[i.index++]):(r||this.outdated)&&this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},zi=class n extends Nn{constructor(e){super(e,0)}heightMetrics(e,t){let r=e.doc.lineAt(t).number,i=e.doc.lineAt(t+this.length).number,o=i-r+1,s,l=0;if(e.lineWrapping){let u=Math.min(this.height,e.lineHeight*o);s=u/o,this.length>o+1&&(l=(this.height-u)/(this.length-o-1))}else s=this.height/o;return{firstLine:r,lastLine:i,perLine:s,perChar:l}}blockAt(e,t,r,i){let{firstLine:o,lastLine:s,perLine:l,perChar:u}=this.heightMetrics(t,i);if(t.lineWrapping){let f=i+(e0){let o=r[r.length-1];o instanceof n?r[r.length-1]=new n(o.length+i):r.push(null,new n(i-1))}if(e>0){let o=r[0];o instanceof n?r[0]=new n(e+o.length):r.unshift(new n(e-1),null)}return Nn.of(r)}decomposeLeft(e,t){t.push(new n(e-1),null)}decomposeRight(e,t){t.push(null,new n(this.length-e-1))}updateHeight(e,t=0,r=!1,i){let o=t+this.length;if(i&&i.from<=t+this.length&&i.more){let s=[],l=Math.max(t,i.from),u=-1;for(i.from>t&&s.push(new n(i.from-t-1).updateHeight(e,t));l<=o&&i.more;){let d=e.doc.lineAt(l).length;s.length&&s.push(null);let p=i.heights[i.index++];u==-1?u=p:Math.abs(p-u)>=yd&&(u=-2);let m=new tr(d,p);m.outdated=!1,s.push(m),l+=d+1}l<=o&&s.push(null,new n(o-l).updateHeight(e,l));let f=Nn.of(s);return(u<0||Math.abs(f.height-this.height)>=yd||Math.abs(u-this.heightMetrics(e,t).perLine)>=yd)&&(la=!0),Md(this,f)}else(r||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},B0=class extends Nn{constructor(e,t,r){super(e.length+t+r.length,e.height+r.height,t|(e.outdated||r.outdated?2:0)),this.left=e,this.right=r,this.size=e.size+r.size}get break(){return this.flags&1}blockAt(e,t,r,i){let o=r+this.left.height;return el))return f;let d=t==Xe.ByPosNoHeight?Xe.ByPosNoHeight:Xe.ByPos;return u?f.join(this.right.lineAt(l,d,r,s,l)):this.left.lineAt(l,d,r,i,o).join(f)}forEachLine(e,t,r,i,o,s){let l=i+this.left.height,u=o+this.left.length+this.break;if(this.break)e=u&&this.right.forEachLine(e,t,r,l,u,s);else{let f=this.lineAt(u,Xe.ByPos,r,i,o);e=e&&f.from<=t&&s(f),t>f.to&&this.right.forEachLine(f.to+1,t,r,l,u,s)}}replace(e,t,r){let i=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-i,t-i,r));let o=[];e>0&&this.decomposeLeft(e,o);let s=o.length;for(let l of r)o.push(l);if(e>0&&H_(o,s-1),t=r&&t.push(null)),e>r&&this.right.decomposeLeft(e-r,t)}decomposeRight(e,t){let r=this.left.length,i=r+this.break;if(e>=i)return this.right.decomposeRight(e-i,t);e2*t.size||t.size>2*e.size?Nn.of(this.break?[e,null,t]:[e,t]):(this.left=Md(this.left,e),this.right=Md(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,r=!1,i){let{left:o,right:s}=this,l=t+o.length+this.break,u=null;return i&&i.from<=t+o.length&&i.more?u=o=o.updateHeight(e,t,r,i):o.updateHeight(e,t,r),i&&i.from<=l+s.length&&i.more?u=s=s.updateHeight(e,l,r,i):s.updateHeight(e,l,r),u?this.balanced(o,s):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function H_(n,e){let t,r;n[e]==null&&(t=n[e-1])instanceof zi&&(r=n[e+1])instanceof zi&&n.splice(e-1,3,new zi(t.length+1+r.length))}var E8=5,H0=class n{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let r=Math.min(t,this.lineEnd),i=this.nodes[this.nodes.length-1];i instanceof tr?i.length+=r-this.pos:(r>this.pos||!this.isCovered)&&this.nodes.push(new tr(r-this.pos,-1)),this.writtenTo=r,t>r&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,r){if(e=E8)&&this.addLineDeco(i,o,s)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new tr(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let r=new zi(t-e);return this.oracle.doc.lineAt(e).to==t&&(r.flags|=4),r}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof tr)return e;let t=new tr(0,-1);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,r){let i=this.ensureLine();i.length+=r,i.collapsed+=r,i.widgetHeight=Math.max(i.widgetHeight,e),i.breaks+=t,this.writtenTo=this.pos=this.pos+r}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof tr)&&!this.isCovered?this.nodes.push(new tr(0,-1)):(this.writtenTod.clientHeight||d.scrollWidth>d.clientWidth)&&p.overflow!="visible"){let m=d.getBoundingClientRect();o=Math.max(o,m.left),s=Math.min(s,m.right),l=Math.max(l,m.top),u=Math.min(f==n.parentNode?i.innerHeight:u,m.bottom)}f=p.position=="absolute"||p.position=="fixed"?d.offsetParent:d.parentNode}else if(f.nodeType==11)f=f.host;else break;return{left:o-t.left,right:Math.max(o,s)-t.left,top:l-(t.top+e),bottom:Math.max(l,u)-(t.top+e)}}function I8(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function T8(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Vl=class{constructor(e,t,r,i){this.from=e,this.to=t,this.size=r,this.displaySize=i}static same(e,t){if(e.length!=t.length)return!1;for(let r=0;rtypeof r!="function"&&r.class=="cm-lineWrapping");this.heightOracle=new L0(t),this.stateDeco=e.facet(Zl).filter(r=>typeof r!="function"),this.heightMap=Nn.empty().applyChanges(this.stateDeco,_e.empty,this.heightOracle.setDoc(e.doc),[new Hr(0,0,0,e.doc.length)]);for(let r=0;r<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());r++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=J.set(this.lineGaps.map(r=>r.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let r=0;r<=1;r++){let i=r?t.head:t.anchor;if(!e.some(({from:o,to:s})=>i>=o&&i<=s)){let{from:o,to:s}=this.lineBlockAt(i);e.push(new ia(o,s))}}return this.viewports=e.sort((r,i)=>r.from-i.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?j_:new $0(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(Nl(e,this.scaler))})}update(e,t=null){this.state=e.state;let r=this.stateDeco;this.stateDeco=this.state.facet(Zl).filter(d=>typeof d!="function");let i=e.changedRanges,o=Hr.extendWithRanges(i,_8(r,this.stateDeco,e?e.changes:Qt.empty(this.state.doc.length))),s=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);B_(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),o),(this.heightMap.height!=s||la)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=this.heightMap.height);let u=o.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headu.to)||!this.viewportIsAppropriate(u))&&(u=this.getViewport(0,t));let f=u.from!=this.viewport.from||u.to!=this.viewport.to;this.viewport=u,e.flags|=this.updateForViewport(),(f||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(TM)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,r=window.getComputedStyle(t),i=this.heightOracle,o=r.whiteSpace;this.defaultTextDirection=r.direction=="rtl"?Ue.RTL:Ue.LTR;let s=this.heightOracle.mustRefreshForWrapping(o),l=t.getBoundingClientRect(),u=s||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let f=0,d=0;if(l.width&&l.height){let{scaleX:j,scaleY:R}=iM(t,l);(j>.005&&Math.abs(this.scaleX-j)>.005||R>.005&&Math.abs(this.scaleY-R)>.005)&&(this.scaleX=j,this.scaleY=R,f|=16,s=u=!0)}let p=(parseInt(r.paddingTop)||0)*this.scaleY,m=(parseInt(r.paddingBottom)||0)*this.scaleY;(this.paddingTop!=p||this.paddingBottom!=m)&&(this.paddingTop=p,this.paddingBottom=m,f|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(i.lineWrapping&&(u=!0),this.editorWidth=e.scrollDOM.clientWidth,f|=16);let y=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=y&&(this.scrollAnchorHeight=-1,this.scrollTop=y),this.scrolledToBottom=aM(e.scrollDOM);let w=(this.printing?T8:M8)(t,this.paddingTop),C=w.top-this.pixelViewport.top,S=w.bottom-this.pixelViewport.bottom;this.pixelViewport=w;let _=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(_!=this.inView&&(this.inView=_,_&&(u=!0)),!this.inView&&!this.scrollTarget&&!I8(e.dom))return 0;let P=l.width;if((this.contentDOMWidth!=P||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,f|=16),u){let j=e.docView.measureVisibleLineHeights(this.viewport);if(i.mustRefreshForHeights(j)&&(s=!0),s||i.lineWrapping&&Math.abs(P-this.contentDOMWidth)>i.charWidth){let{lineHeight:R,charWidth:U,textHeight:z}=e.docView.measureTextSize();s=R>0&&i.refresh(o,R,U,z,P/U,j),s&&(e.docView.minWidth=0,f|=16)}C>0&&S>0?d=Math.max(C,S):C<0&&S<0&&(d=Math.min(C,S)),B_();for(let R of this.viewports){let U=R.from==this.viewport.from?j:e.docView.measureVisibleLineHeights(R);this.heightMap=(s?Nn.empty().applyChanges(this.stateDeco,_e.empty,this.heightOracle,[new Hr(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(i,0,s,new V0(R.from,U))}la&&(f|=2)}let B=!this.viewportIsAppropriate(this.viewport,d)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return B&&(f&2&&(f|=this.updateScaler()),this.viewport=this.getViewport(d,this.scrollTarget),f|=this.updateForViewport()),(f&2||B)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(s?[]:this.lineGaps,e)),f|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),f}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let r=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),i=this.heightMap,o=this.heightOracle,{visibleTop:s,visibleBottom:l}=this,u=new ia(i.lineAt(s-r*1e3,Xe.ByHeight,o,0,0).from,i.lineAt(l+(1-r)*1e3,Xe.ByHeight,o,0,0).to);if(t){let{head:f}=t.range;if(fu.to){let d=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),p=i.lineAt(f,Xe.ByPos,o,0,0),m;t.y=="center"?m=(p.top+p.bottom)/2-d/2:t.y=="start"||t.y=="nearest"&&f=l+Math.max(10,Math.min(r,250)))&&i>s-2*1e3&&o>1,s=i<<1;if(this.defaultTextDirection!=Ue.LTR&&!r)return[];let l=[],u=(d,p,m,y)=>{if(p-dd&&__.from>=m.from&&_.to<=m.to&&Math.abs(_.from-d)_.fromP));if(!S){if(pB.from<=p&&B.to>=p)){let B=t.moveToLineBoundary(V.cursor(p),!1,!0).head;B>d&&(p=B)}let _=this.gapSize(m,d,p,y),P=r||_<2e6?_:2e6;S=new Vl(d,p,_,P)}l.push(S)},f=d=>{if(d.length2e6)for(let U of e)U.from>=d.from&&U.fromd.from&&u(d.from,y,d,p),wt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let r=[];Ge.spans(t,this.viewport.from,this.viewport.to,{span(o,s){r.push({from:o,to:s})},point(){}},20);let i=0;if(r.length!=this.visibleRanges.length)i=12;else for(let o=0;o=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||Nl(this.heightMap.lineAt(e,Xe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||Nl(this.heightMap.lineAt(this.scaler.fromDOM(e),Xe.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return Nl(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},ia=class{constructor(e,t){this.from=e,this.to=t}};function A8(n,e,t){let r=[],i=n,o=0;return Ge.spans(t,n,e,{span(){},point(s,l){s>i&&(r.push({from:i,to:s}),o+=s-i),i=l}},20),i=1)return e[e.length-1].to;let r=Math.floor(n*t);for(let i=0;;i++){let{from:o,to:s}=e[i],l=s-o;if(r<=l)return o+r;r-=l}}function cd(n,e){let t=0;for(let{from:r,to:i}of n.ranges){if(e<=i){t+=e-r;break}t+=i-r}return t/n.total}function k8(n,e){for(let t of n)if(e(t))return t}var j_={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}},$0=class n{constructor(e,t,r){let i=0,o=0,s=0;this.viewports=r.map(({from:l,to:u})=>{let f=t.lineAt(l,Xe.ByPos,e,0,0).top,d=t.lineAt(u,Xe.ByPos,e,0,0).bottom;return i+=d-f,{from:l,to:u,top:f,bottom:d,domTop:0,domBottom:0}}),this.scale=(7e6-i)/(t.height-i);for(let l of this.viewports)l.domTop=s+(l.top-o)*this.scale,s=l.domBottom=l.domTop+(l.bottom-l.top),o=l.bottom}toDOM(e){for(let t=0,r=0,i=0;;t++){let o=tt.from==e.viewports[r].from&&t.to==e.viewports[r].to):!1}};function Nl(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),r=e.toDOM(n.bottom);return new Vr(n.from,n.length,t,r-t,Array.isArray(n._content)?n._content.map(i=>Nl(i,e)):n._content)}var fd=G.define({combine:n=>n.join(" ")}),p0=G.define({combine:n=>n.indexOf(!0)>-1}),z0=er.newName(),qM=er.newName(),GM=er.newName(),ZM={"&light":"."+qM,"&dark":"."+GM};function W0(n,e,t){return new er(e,{finish(r){return/&/.test(r)?r.replace(/&\w*/,i=>{if(i=="&")return n;if(!t||!t[i])throw new RangeError(`Unsupported selector: ${i}`);return t[i]}):n+" "+r}})}var N8=W0("."+z0,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",insetInlineStart:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},ZM),O8={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},g0=Z.ie&&Z.ie_version<=11,q0=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new b0,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let r of t)this.queue.push(r);(Z.ie&&Z.ie_version<=11||Z.ios&&e.composing)&&t.some(r=>r.type=="childList"&&r.removedNodes.length||r.type=="characterData"&&r.oldValue.length>r.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&e.constructor.EDIT_CONTEXT!==!1&&!(Z.chrome&&Z.chrome_version<126)&&(this.editContext=new G0(e),e.state.facet(di)&&(e.contentDOM.editContext=this.editContext.editContext)),g0&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,r)=>t!=e[r]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:r}=this,i=this.selectionRange;if(r.state.facet(di)?r.root.activeElement!=this.dom:!pd(this.dom,i))return;let o=i.anchorNode&&r.docView.nearest(i.anchorNode);if(o&&o.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(Z.ie&&Z.ie_version<=11||Z.android&&Z.chrome)&&!r.state.selection.main.empty&&i.focusNode&&Rl(i.focusNode,i.focusOffset,i.anchorNode,i.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=jl(e.root);if(!t)return!1;let r=Z.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&R8(this.view,t)||t;if(!r||this.selectionRange.eq(r))return!1;let i=pd(this.dom,r);return i&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let o=this.delayedAndroidKey;o&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=o.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&o.force&&aa(this.dom,o.key,o.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(i)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,r=-1,i=!1;for(let o of e){let s=this.readMutation(o);s&&(s.typeOver&&(i=!0),t==-1?{from:t,to:r}=s:(t=Math.min(s.from,t),r=Math.max(s.to,r)))}return{from:t,to:r,typeOver:i}}readChange(){let{from:e,to:t,typeOver:r}=this.processRecords(),i=this.selectionChanged&&pd(this.dom,this.selectionRange);if(e<0&&!i)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let o=new O0(this.view,e,t,r);return this.view.docView.domChanged={newSel:o.newSel?o.newSel.main:null},o}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let r=this.view.state,i=LM(this.view,t);return this.view.state==r&&(t.domChanged||t.newSel&&!t.newSel.main.eq(this.view.state.selection.main))&&this.view.update([]),i}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(e.type=="attributes"),e.type=="attributes"&&(t.flags|=4),e.type=="childList"){let r=U_(t,e.previousSibling||e.target.previousSibling,-1),i=U_(t,e.nextSibling||e.target.nextSibling,1);return{from:r?t.posAfter(r):t.posAtStart,to:i?t.posBefore(i):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(di)!=e.state.facet(di)&&(e.view.contentDOM.editContext=e.state.facet(di)?this.editContext.editContext:null))}destroy(){var e,t,r;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(r=this.resizeScroll)===null||r===void 0||r.disconnect();for(let i of this.scrollTargets)i.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function U_(n,e,t){for(;e;){let r=Ze.get(e);if(r&&r.parent==n)return r;let i=e.parentNode;e=i!=n.dom?i:t>0?e.nextSibling:e.previousSibling}return null}function $_(n,e){let t=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset,s=n.docView.domAtPos(n.state.selection.main.anchor);return Rl(s.node,s.offset,i,o)&&([t,r,i,o]=[i,o,t,r]),{anchorNode:t,anchorOffset:r,focusNode:i,focusOffset:o}}function R8(n,e){if(e.getComposedRanges){let i=e.getComposedRanges(n.root)[0];if(i)return $_(n,i)}let t=null;function r(i){i.preventDefault(),i.stopImmediatePropagation(),t=i.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",r,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",r,!0),t?$_(n,t):null}var G0=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=r=>{let i=e.state.selection.main,{anchor:o,head:s}=i,l=this.toEditorPos(r.updateRangeStart),u=this.toEditorPos(r.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:r.updateRangeStart,editorBase:l,drifted:!1});let f={from:l,to:u,insert:_e.of(r.text.split(` +`))};if(f.from==this.from&&othis.to&&(f.to=o),f.from==f.to&&!f.insert.length){let d=V.single(this.toEditorPos(r.selectionStart),this.toEditorPos(r.selectionEnd));d.main.eq(i)||e.dispatch({selection:d,userEvent:"select"});return}if((Z.mac||Z.android)&&f.from==s-1&&/^\. ?$/.test(r.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(f={from:l,to:u,insert:_e.of([r.text.replace("."," ")])}),this.pendingContextChange=f,!e.state.readOnly){let d=this.to-this.from+(f.to-f.from+f.insert.length);dv(e,f,V.single(this.toEditorPos(r.selectionStart,d),this.toEditorPos(r.selectionEnd,d)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state))},this.handlers.characterboundsupdate=r=>{let i=[],o=null;for(let s=this.toEditorPos(r.rangeStart),l=this.toEditorPos(r.rangeEnd);s{let i=[];for(let o of r.getTextFormats()){let s=o.underlineStyle,l=o.underlineThickness;if(s!="None"&&l!="None"){let u=this.toEditorPos(o.rangeStart),f=this.toEditorPos(o.rangeEnd);if(u{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:r}=this.composing;this.composing=null,r&&this.reset(e.state)}};for(let r in this.handlers)t.addEventListener(r,this.handlers[r]);this.measureReq={read:r=>{this.editContext.updateControlBounds(r.contentDOM.getBoundingClientRect());let i=jl(r.root);i&&i.rangeCount&&this.editContext.updateSelectionBounds(i.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,r=!1,i=this.pendingContextChange;return e.changes.iterChanges((o,s,l,u,f)=>{if(r)return;let d=f.length-(s-o);if(i&&s>=i.to)if(i.from==o&&i.to==s&&i.insert.eq(f)){i=this.pendingContextChange=null,t+=d,this.to+=d;return}else i=null,this.revertPending(e.state);if(o+=t,s+=t,s<=this.from)this.from+=d,this.to+=d;else if(othis.to||this.to-this.from+f.length>3e4){r=!0;return}this.editContext.updateText(this.toContextPos(o),this.toContextPos(s),f.toString()),this.to+=d}t+=d}),i&&!r&&this.revertPending(e.state),!r}update(e){let t=this.pendingContextChange;this.composing&&(this.composing.drifted||e.transactions.some(r=>!r.isUserEvent("input.type")&&r.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,r=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),i=this.toContextPos(t.head);(this.editContext.selectionStart!=r||this.editContext.selectionEnd!=i)&&this.editContext.updateSelection(r,i)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let r=this.composing;return r&&r.drifted?r.editorBase+(e-r.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},oe=(()=>{class n{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(t={}){var r;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),t.parent&&t.parent.appendChild(this.dom);let{dispatch:i}=t;this.dispatchTransactions=t.dispatchTransactions||i&&(o=>o.forEach(s=>i(s,this)))||(o=>this.update(o)),this.dispatch=this.dispatch.bind(this),this._root=t.root||M$(t.parent)||document,this.viewState=new Td(t.state||pt.create(t)),t.scrollTo&&t.scrollTo.is(sd)&&(this.viewState.scrollTarget=t.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Al).map(o=>new Ll(o));for(let o of this.plugins)o.update(this);this.observer=new q0(this),this.inputState=new R0(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Ed(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((r=document.fonts)===null||r===void 0)&&r.ready&&document.fonts.ready.then(()=>this.requestMeasure())}dispatch(...t){let r=t.length==1&&t[0]instanceof Tn?t:t.length==1&&Array.isArray(t[0])?t[0]:[this.state.update(...t)];this.dispatchTransactions(r,this)}update(t){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let r=!1,i=!1,o,s=this.state;for(let y of t){if(y.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=y.state}if(this.destroyed){this.viewState.state=s;return}let l=this.hasFocus,u=0,f=null;t.some(y=>y.annotation($M))?(this.inputState.notifiedFocused=l,u=1):l!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=l,f=zM(s,l),f||(u=1));let d=this.observer.delayedAndroidKey,p=null;if(d?(this.observer.clearDelayedAndroidKey(),p=this.observer.readChange(),(p&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(p=null)):this.observer.clear(),s.facet(pt.phrases)!=this.state.facet(pt.phrases))return this.setState(s);o=Sd.create(this,s,t),o.flags|=u;let m=this.viewState.scrollTarget;try{this.updateState=2;for(let y of t){if(m&&(m=m.map(y.changes)),y.scrollIntoView){let{main:w}=y.state.selection;m=new Fl(w.empty?w:V.cursor(w.head,w.head>w.anchor?-1:1))}for(let w of y.effects)w.is(sd)&&(m=w.value.clip(this.state))}this.viewState.update(o,m),this.bidiCache=Ad.update(this.bidiCache,o.changes),o.empty||(this.updatePlugins(o),this.inputState.update(o)),r=this.docView.update(o),this.state.facet(Il)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(t),this.docView.updateSelection(r,t.some(y=>y.isUserEvent("select.pointer")))}finally{this.updateState=0}if(o.startState.facet(fd)!=o.state.facet(fd)&&(this.viewState.mustMeasureContent=!0),(r||i||m||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),r&&this.docViewUpdate(),!o.empty)for(let y of this.state.facet(f0))try{y(o)}catch(w){Lt(this.state,w,"update listener")}(f||p)&&Promise.resolve().then(()=>{f&&this.state==f.startState&&this.dispatch(f),p&&!LM(this,p)&&d.force&&aa(this.contentDOM,d.key,d.keyCode)})}setState(t){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=t;return}this.updateState=2;let r=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new Td(t),this.plugins=t.facet(Al).map(i=>new Ll(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Ed(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}r&&this.focus(),this.requestMeasure()}updatePlugins(t){let r=t.startState.facet(Al),i=t.state.facet(Al);if(r!=i){let o=[];for(let s of i){let l=r.indexOf(s);if(l<0)o.push(new Ll(s));else{let u=this.plugins[l];u.mustUpdate=t,o.push(u)}}for(let s of this.plugins)s.mustUpdate!=t&&s.destroy(this);this.plugins=o,this.pluginMap.clear()}else for(let o of this.plugins)o.mustUpdate=t;for(let o=0;o-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,t&&this.observer.forceFlush();let r=null,i=this.scrollDOM,o=i.scrollTop*this.scaleY,{scrollAnchorPos:s,scrollAnchorHeight:l}=this.viewState;Math.abs(o-this.viewState.scrollTop)>1&&(l=-1),this.viewState.scrollAnchorHeight=-1;try{for(let u=0;;u++){if(l<0)if(aM(i))s=-1,l=this.viewState.heightMap.height;else{let w=this.viewState.scrollAnchorAt(o);s=w.from,l=w.top}this.updateState=1;let f=this.viewState.measure(this);if(!f&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(u>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let d=[];f&4||([this.measureRequests,d]=[d,this.measureRequests]);let p=d.map(w=>{try{return w.read(this)}catch(C){return Lt(this.state,C),z_}}),m=Sd.create(this,this.state,[]),y=!1;m.flags|=f,r?r.flags|=f:r=m,this.updateState=2,m.empty||(this.updatePlugins(m),this.inputState.update(m),this.updateAttrs(),y=this.docView.update(m),y&&this.docViewUpdate());for(let w=0;w1||C<-1){o=o+C,i.scrollTop=o/this.scaleY,l=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(r&&!r.empty)for(let u of this.state.facet(f0))u(r)}get themeClasses(){return z0+" "+(this.state.facet(p0)?GM:qM)+" "+this.state.facet(fd)}updateAttrs(){let t=W_(this,C_,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),r={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(di)?"true":"false",class:"cm-content",style:`${Z.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(r["aria-readonly"]="true"),W_(this,T0,r);let i=this.observer.ignore(()=>{let o=E0(this.contentDOM,this.contentAttrs,r),s=E0(this.dom,this.editorAttrs,t);return o||s});return this.editorAttrs=t,this.contentAttrs=r,i}showAnnouncements(t){let r=!0;for(let i of t)for(let o of i.effects)if(o.is(n.announce)){r&&(this.announceDOM.textContent=""),r=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=o.value}}mountStyles(){this.styleModules=this.state.facet(Il);let t=this.state.facet(n.cspNonce);er.mount(this.root,this.styleModules.concat(N8).reverse(),t?{nonce:t}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(t){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),t){if(this.measureRequests.indexOf(t)>-1)return;if(t.key!=null){for(let r=0;ri.spec==t)||null),r&&r.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(t){return this.readMeasured(),this.viewState.elementAtHeight(t)}lineBlockAtHeight(t){return this.readMeasured(),this.viewState.lineBlockAtHeight(t)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(t){return this.viewState.lineBlockAt(t)}get contentHeight(){return this.viewState.contentHeight}moveByChar(t,r,i){return h0(this,t,I_(this,t,r,i))}moveByGroup(t,r){return h0(this,t,I_(this,t,r,i=>r8(this,t.head,i)))}visualLineSide(t,r){let i=this.bidiSpans(t),o=this.textDirectionAt(t.from),s=i[r?i.length-1:0];return V.cursor(s.side(r,o)+t.from,s.forward(!r,o)?1:-1)}moveToLineBoundary(t,r,i=!0){return n8(this,t,r,i)}moveVertically(t,r,i){return h0(this,t,i8(this,t,r,i))}domAtPos(t){return this.docView.domAtPos(t)}posAtDOM(t,r=0){return this.docView.posFromDOM(t,r)}posAtCoords(t,r=!0){return this.readMeasured(),FM(this,t,r)}coordsAtPos(t,r=1){this.readMeasured();let i=this.docView.coordsAt(t,r);if(!i||i.left==i.right)return i;let o=this.state.doc.lineAt(t),s=this.bidiSpans(o),l=s[Br.find(s,t-o.from,-1,r)];return Fd(i,l.dir==Ue.LTR==r>0)}coordsForChar(t){return this.readMeasured(),this.docView.coordsForChar(t)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(t){return!this.state.facet(D_)||tthis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(t))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(t){if(t.length>P8)return DM(t.length);let r=this.textDirectionAt(t.from),i;for(let s of this.bidiCache)if(s.from==t.from&&s.dir==r&&(s.fresh||bM(s.isolates,i=x_(this,t))))return s.order;i||(i=x_(this,t));let o=H$(t.text,r,i);return this.bidiCache.push(new Ad(t.from,t.to,r,i,!0,o)),o}get hasFocus(){var t;return(this.dom.ownerDocument.hasFocus()||Z.safari&&((t=this.inputState)===null||t===void 0?void 0:t.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{oM(this.contentDOM),this.docView.updateSelection()})}setRoot(t){this._root!=t&&(this._root=t,this.observer.setWindow((t.nodeType==9?t:t.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let t of this.plugins)t.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(t,r={}){return sd.of(new Fl(typeof t=="number"?V.cursor(t):t,r.y,r.x,r.yMargin,r.xMargin))}scrollSnapshot(){let{scrollTop:t,scrollLeft:r}=this.scrollDOM,i=this.viewState.scrollAnchorAt(t);return sd.of(new Fl(V.cursor(i.from),"start","start",i.top-t,r,!0))}setTabFocusMode(t){t==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof t=="boolean"?this.inputState.tabFocusMode=t?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+t)}static domEventHandlers(t){return at.define(()=>({}),{eventHandlers:t})}static domEventObservers(t){return at.define(()=>({}),{eventObservers:t})}static theme(t,r){let i=er.newName(),o=[fd.of(i),Il.of(W0(`.${i}`,t))];return r&&r.dark&&o.push(p0.of(!0)),o}static baseTheme(t){return mr.lowest(Il.of(W0("."+z0,t,ZM)))}static findFromDOM(t){var r;let i=t.querySelector(".cm-content"),o=i&&Ze.get(i)||Ze.get(t);return((r=o?.rootView)===null||r===void 0?void 0:r.view)||null}}return n.styleModule=Il,n.inputHandler=MM,n.clipboardInputFilter=lv,n.clipboardOutputFilter=uv,n.scrollHandler=AM,n.focusChangeEffect=IM,n.perLineTextDirection=D_,n.exceptionSink=_M,n.updateListener=f0,n.editable=di,n.mouseSelectionStyle=EM,n.dragMovesSelection=SM,n.clickAddsSelectionRange=xM,n.decorations=Zl,n.outerDecorations=NM,n.atomicRanges=cv,n.bidiIsolatedRanges=OM,n.scrollMargins=RM,n.darkTheme=p0,n.cspNonce=G.define({combine:e=>e.length?e[0]:""}),n.contentAttributes=T0,n.editorAttributes=C_,n.lineWrapping=n.contentAttributes.of({class:"cm-lineWrapping"}),n.announce=de.define(),n})(),P8=4096,z_={},Ad=class n{constructor(e,t,r,i,o,s){this.from=e,this.to=t,this.dir=r,this.isolates=i,this.fresh=o,this.order=s}static update(e,t){if(t.empty&&!e.some(o=>o.fresh))return e;let r=[],i=e.length?e[e.length-1].dir:Ue.LTR;for(let o=Math.max(0,e.length-10);o=0;i--){let o=r[i],s=typeof o=="function"?o(n):o;s&&S0(s,t)}return t}var F8=Z.mac?"mac":Z.windows?"win":Z.linux?"linux":"key";function L8(n,e){let t=n.split(/-(?!$)/),r=t[t.length-1];r=="Space"&&(r=" ");let i,o,s,l;for(let u=0;ur.concat(i),[]))),t}function YM(n,e,t){return QM(KM(n.state),e,n,t)}var $i=null,B8=4e3;function H8(n,e=F8){let t=Object.create(null),r=Object.create(null),i=(s,l)=>{let u=r[s];if(u==null)r[s]=l;else if(u!=l)throw new Error("Key binding "+s+" is used both as a regular binding and as a multi-stroke prefix")},o=(s,l,u,f,d)=>{var p,m;let y=t[s]||(t[s]=Object.create(null)),w=l.split(/ (?!$)/).map(_=>L8(_,e));for(let _=1;_{let j=$i={view:B,prefix:P,scope:s};return setTimeout(()=>{$i==j&&($i=null)},B8),!0}]})}let C=w.join(" ");i(C,!1);let S=y[C]||(y[C]={preventDefault:!1,stopPropagation:!1,run:((m=(p=y._any)===null||p===void 0?void 0:p.run)===null||m===void 0?void 0:m.slice())||[]});u&&S.run.push(u),f&&(S.preventDefault=!0),d&&(S.stopPropagation=!0)};for(let s of n){let l=s.scope?s.scope.split(" "):["editor"];if(s.any)for(let f of l){let d=t[f]||(t[f]=Object.create(null));d._any||(d._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:p}=s;for(let m in d)d[m].run.push(y=>p(y,Z0))}let u=s[e]||s.key;if(u)for(let f of l)o(f,u,s.run,s.preventDefault,s.stopPropagation),s.shift&&o(f,"Shift-"+u,s.shift,s.preventDefault,s.stopPropagation)}return t}var Z0=null;function QM(n,e,t,r){Z0=e;let i=d_(e),o=Pt(i,0),s=kn(o)==i.length&&i!=" ",l="",u=!1,f=!1,d=!1;$i&&$i.view==t&&$i.scope==r&&(l=$i.prefix+" ",BM.indexOf(e.keyCode)<0&&(f=!0,$i=null));let p=new Set,m=S=>{if(S){for(let _ of S.run)if(!p.has(_)&&(p.add(_),_(t)))return S.stopPropagation&&(d=!0),!0;S.preventDefault&&(S.stopPropagation&&(d=!0),f=!0)}return!1},y=n[r],w,C;return y&&(m(y[l+dd(i,e,!s)])?u=!0:s&&(e.altKey||e.metaKey||e.ctrlKey)&&!(Z.windows&&e.ctrlKey&&e.altKey)&&(w=fi[e.keyCode])&&w!=i?(m(y[l+dd(w,e,!0)])||e.shiftKey&&(C=na[e.keyCode])!=i&&C!=w&&m(y[l+dd(C,e,!1)]))&&(u=!0):s&&e.shiftKey&&m(y[l+dd(i,e,!0)])&&(u=!0),!u&&m(y._any)&&(u=!0)),f&&(u=!0),u&&d&&e.stopPropagation(),Z0=null,u}var Kl=class n{constructor(e,t,r,i,o){this.className=e,this.left=t,this.top=r,this.width=i,this.height=o}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,r){if(r.empty){let i=e.coordsAtPos(r.head,r.assoc||1);if(!i)return[];let o=JM(e);return[new n(t,i.left-o.left,i.top-o.top,null,i.bottom-i.top)]}else return j8(e,t,r)}};function JM(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==Ue.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function G_(n,e,t,r){let i=n.coordsAtPos(e,t*2);if(!i)return r;let o=n.dom.getBoundingClientRect(),s=(i.top+i.bottom)/2,l=n.posAtCoords({x:o.left+1,y:s}),u=n.posAtCoords({x:o.right-1,y:s});return l==null||u==null?r:{from:Math.max(r.from,Math.min(l,u)),to:Math.min(r.to,Math.max(l,u))}}function j8(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let r=Math.max(t.from,n.viewport.from),i=Math.min(t.to,n.viewport.to),o=n.textDirection==Ue.LTR,s=n.contentDOM,l=s.getBoundingClientRect(),u=JM(n),f=s.querySelector(".cm-line"),d=f&&window.getComputedStyle(f),p=l.left+(d?parseInt(d.paddingLeft)+Math.min(0,parseInt(d.textIndent)):0),m=l.right-(d?parseInt(d.paddingRight):0),y=k0(n,r),w=k0(n,i),C=y.type==Xt.Text?y:null,S=w.type==Xt.Text?w:null;if(C&&(n.lineWrapping||y.widgetLineBreaks)&&(C=G_(n,r,1,C)),S&&(n.lineWrapping||w.widgetLineBreaks)&&(S=G_(n,i,-1,S)),C&&S&&C.from==S.from&&C.to==S.to)return P(B(t.from,t.to,C));{let R=C?B(t.from,null,C):j(y,!1),U=S?B(null,t.to,S):j(w,!0),z=[];return(C||y).to<(S||w).from-(C&&S?1:0)||y.widgetLineBreaks>1&&R.bottom+n.defaultLineHeight/2ee&&Q.from=$e)break;Ae>ye&&ce(Math.max(ke,ye),R==null&&ke<=ee,Math.min(Ae,$e),U==null&&Ae>=Ce,Tt.dir)}if(ye=Dt.to+1,ye>=$e)break}return pe.length==0&&ce(ee,R==null,Ce,U==null,n.textDirection),{top:ie,bottom:he,horizontal:pe}}function j(R,U){let z=l.top+(U?R.top:R.bottom);return{top:z,bottom:z,horizontal:[]}}}function U8(n,e){return n.constructor==e.constructor&&n.eq(e)}var K0=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(vd)!=e.state.facet(vd)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,r=e.facet(vd);for(;t!U8(t,this.drawn[r]))){let t=this.dom.firstChild,r=0;for(let i of e)i.update&&t&&i.constructor&&this.drawn[r].constructor&&i.update(t,this.drawn[r])?(t=t.nextSibling,r++):this.dom.insertBefore(i.draw(),t);for(;t;){let i=t.nextSibling;t.remove(),t=i}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},vd=G.define();function XM(n){return[at.define(e=>new K0(e,n)),vd.of(n)]}var eI=!(Z.ios&&Z.webkit&&Z.webkit_version<534),Yl=G.define({combine(n){return $t(n,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function tI(n={}){return[Yl.of(n),$8,z8,W8,TM.of(!0)]}function nI(n){return n.startState.facet(Yl)!=n.state.facet(Yl)}var $8=XM({above:!0,markers(n){let{state:e}=n,t=e.facet(Yl),r=[];for(let i of e.selection.ranges){let o=i==e.selection.main;if(i.empty?!o||eI:t.drawRangeCursor){let s=o?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=i.empty?i:V.cursor(i.head,i.head>i.anchor?-1:1);for(let u of Kl.forRange(n,s,l))r.push(u)}}return r},update(n,e){n.transactions.some(r=>r.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=nI(n);return t&&Z_(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){Z_(e.state,n)},class:"cm-cursorLayer"});function Z_(n,e){e.style.animationDuration=n.facet(Yl).cursorBlinkRate+"ms"}var z8=XM({above:!1,markers(n){return n.state.selection.ranges.map(e=>e.empty?[]:Kl.forRange(n,"cm-selectionBackground",e)).reduce((e,t)=>e.concat(t))},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||nI(n)},class:"cm-selectionLayer"}),Y0={".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"}},".cm-content":{"& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}};eI&&(Y0[".cm-line"].caretColor=Y0[".cm-content"].caretColor="transparent !important");var W8=mr.highest(oe.theme(Y0)),rI=de.define({map(n,e){return n==null?null:e.mapPos(n)}}),Ol=st.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,r)=>r.is(rI)?r.value:t,n)}}),q8=at.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(Ol);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(Ol)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(Ol),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let r=n.scrollDOM.getBoundingClientRect();return{left:t.left-r.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-r.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(Ol)!=n&&this.view.dispatch({effects:rI.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function iI(){return[Ol,q8]}function K_(n,e,t,r,i){e.lastIndex=0;for(let o=n.iterRange(t,r),s=t,l;!o.next().done;s+=o.value.length)if(!o.lineBreak)for(;l=e.exec(o.value);)i(s+l.index,l)}function G8(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let r=[];for(let{from:i,to:o}of t)i=Math.max(n.state.doc.lineAt(i).from,i-e),o=Math.min(n.state.doc.lineAt(o).to,o+e),r.length&&r[r.length-1].to>=i?r[r.length-1].to=o:r.push({from:i,to:o});return r}var Q0=class{constructor(e){let{regexp:t,decoration:r,decorate:i,boundary:o,maxLength:s=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,i)this.addMatch=(l,u,f,d)=>i(d,f,f+l[0].length,l,u);else if(typeof r=="function")this.addMatch=(l,u,f,d)=>{let p=r(l,u,f);p&&d(f,f+l[0].length,p)};else if(r)this.addMatch=(l,u,f,d)=>d(f,f+l[0].length,r);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=o,this.maxLength=s}createDeco(e){let t=new An,r=t.add.bind(t);for(let{from:i,to:o}of G8(e,this.maxLength))K_(e.state.doc,this.regexp,i,o,(s,l)=>this.addMatch(l,e,s,r));return t.finish()}updateDeco(e,t){let r=1e9,i=-1;return e.docChanged&&e.changes.iterChanges((o,s,l,u)=>{u>=e.view.viewport.from&&l<=e.view.viewport.to&&(r=Math.min(l,r),i=Math.max(u,i))}),e.viewportMoved||i-r>1e3?this.createDeco(e.view):i>-1?this.updateRange(e.view,t.map(e.changes),r,i):t}updateRange(e,t,r,i){for(let o of e.visibleRanges){let s=Math.max(o.from,r),l=Math.min(o.to,i);if(l>s){let u=e.state.doc.lineAt(s),f=u.tou.from;s--)if(this.boundary.test(u.text[s-1-u.from])){d=s;break}for(;lm.push(_.range(C,S));if(u==f)for(this.regexp.lastIndex=d-u.from;(y=this.regexp.exec(u.text))&&y.indexthis.addMatch(S,e,C,w));t=t.update({filterFrom:d,filterTo:p,filter:(C,S)=>Cp,add:m})}}return t}},J0=/x/.unicode!=null?"gu":"g",Z8=new RegExp(`[\0-\b +-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,J0),K8={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},m0=null;function Y8(){var n;if(m0==null&&typeof document<"u"&&document.body){let e=document.body.style;m0=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return m0||!1}var wd=G.define({combine(n){let e=$t(n,{render:null,specialChars:Z8,addSpecialChars:null});return(e.replaceTabs=!Y8())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,J0)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,J0)),e}});function oI(n={}){return[wd.of(n),Q8()]}var Y_=null;function Q8(){return Y_||(Y_=at.fromClass(class{constructor(n){this.view=n,this.decorations=J.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(wd)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Q0({regexp:n.specialChars,decoration:(e,t,r)=>{let{doc:i}=t.state,o=Pt(e[0],0);if(o==9){let s=i.lineAt(r),l=t.state.tabSize,u=ci(s.text,l,r-s.from);return J.replace({widget:new ev((l-u%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[o]||(this.decorationCache[o]=J.replace({widget:new X0(n,o)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(wd);n.startState.facet(wd)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}var J8="\u2022";function X8(n){return n>=32?J8:n==10?"\u2424":String.fromCharCode(9216+n)}var X0=class extends On{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=X8(this.code),r=e.state.phrase("Control character")+" "+(K8[this.code]||"0x"+this.code.toString(16)),i=this.options.render&&this.options.render(this.code,r,t);if(i)return i;let o=document.createElement("span");return o.textContent=t,o.title=r,o.setAttribute("aria-label",r),o.className="cm-specialChar",o}ignoreEvent(){return!1}},ev=class extends On{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function sI(){return tz}var ez=J.line({class:"cm-activeLine"}),tz=at.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let r of n.state.selection.ranges){let i=n.lineBlockAt(r.head);i.from>e&&(t.push(ez.range(i.from)),e=i.from)}return J.set(t)}},{decorations:n=>n.decorations});var tv=2e3;function nz(n,e,t){let r=Math.min(e.line,t.line),i=Math.max(e.line,t.line),o=[];if(e.off>tv||t.off>tv||e.col<0||t.col<0){let s=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let u=r;u<=i;u++){let f=n.doc.line(u);f.length<=l&&o.push(V.range(f.from+s,f.to+l))}}else{let s=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let u=r;u<=i;u++){let f=n.doc.line(u),d=rd(f.text,s,n.tabSize,!0);if(d<0)o.push(V.cursor(f.to));else{let p=rd(f.text,l,n.tabSize);o.push(V.range(f.from+d,f.from+p))}}}return o}function rz(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function Q_(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),r=n.state.doc.lineAt(t),i=t-r.from,o=i>tv?-1:i==r.length?rz(n,e.clientX):ci(r.text,n.state.tabSize,t-r.from);return{line:r.number,col:o,off:i}}function iz(n,e){let t=Q_(n,e),r=n.state.selection;return t?{update(i){if(i.docChanged){let o=i.changes.mapPos(i.startState.doc.line(t.line).from),s=i.state.doc.lineAt(o);t={line:s.number,col:t.col,off:Math.min(t.off,s.length)},r=r.map(i.changes)}},get(i,o,s){let l=Q_(n,i);if(!l)return r;let u=nz(n.state,t,l);return u.length?s?V.create(u.concat(r.ranges)):V.create(u):r}}:null}function aI(n){let e=n?.eventFilter||(t=>t.altKey&&t.button==0);return oe.mouseSelectionStyle.of((t,r)=>e(r)?iz(t,r):null)}var oz={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},sz={style:"cursor: crosshair"};function lI(n={}){let[e,t]=oz[n.key||"Alt"],r=at.fromClass(class{constructor(i){this.view=i,this.isDown=!1}set(i){this.isDown!=i&&(this.isDown=i,this.view.update([]))}},{eventObservers:{keydown(i){this.set(i.keyCode==e||t(i))},keyup(i){(i.keyCode==e||!t(i))&&this.set(!1)},mousemove(i){this.set(t(i))}}});return[r,oe.contentAttributes.of(i=>{var o;return!((o=i.plugin(r))===null||o===void 0)&&o.isDown?sz:null})]}var Tl="-10000px",kd=class{constructor(e,t,r,i){this.facet=t,this.createTooltipView=r,this.removeTooltipView=i,this.input=e.state.facet(t),this.tooltips=this.input.filter(s=>s);let o=null;this.tooltipViews=this.tooltips.map(s=>o=r(s,o))}update(e,t){var r;let i=e.state.facet(this.facet),o=i.filter(u=>u);if(i===this.input){for(let u of this.tooltipViews)u.update&&u.update(e);return!1}let s=[],l=t?[]:null;for(let u=0;ut[f]=u),t.length=l.length),this.input=i,this.tooltips=o,this.tooltipViews=s,!0}};function az(n){let{win:e}=n;return{top:0,left:0,bottom:e.innerHeight,right:e.innerWidth}}var y0=G.define({combine:n=>{var e,t,r;return{position:Z.ios?"absolute":((e=n.find(i=>i.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(i=>i.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((r=n.find(i=>i.tooltipSpace))===null||r===void 0?void 0:r.tooltipSpace)||az}}}),J_=new WeakMap,hv=at.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(y0);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new kd(n,Jl,(t,r)=>this.createTooltip(t,r),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,r=n.state.facet(y0);if(r.position!=this.position&&!this.madeAbsolute){this.position=r.position;for(let i of this.manager.tooltipViews)i.dom.style.position=this.position;t=!0}if(r.parent!=this.parent){this.parent&&this.container.remove(),this.parent=r.parent,this.createContainer();for(let i of this.manager.tooltipViews)this.container.appendChild(i.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),r=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let i=document.createElement("div");i.className="cm-tooltip-arrow",t.dom.appendChild(i)}return t.dom.style.position=this.position,t.dom.style.top=Tl,t.dom.style.left="0px",this.container.insertBefore(t.dom,r),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let r of this.manager.tooltipViews)r.dom.remove(),(n=r.destroy)===null||n===void 0||n.call(r);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:o}=this.manager.tooltipViews[0];if(Z.gecko)t=o.offsetParent!=this.container.ownerDocument.body;else if(o.style.top==Tl&&o.style.left=="0px"){let s=o.getBoundingClientRect();t=Math.abs(s.top+1e4)>1||Math.abs(s.left)>1}}if(t||this.position=="absolute")if(this.parent){let o=this.parent.getBoundingClientRect();o.width&&o.height&&(n=o.width/this.parent.offsetWidth,e=o.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let r=this.view.scrollDOM.getBoundingClientRect(),i=fv(this.view);return{visible:{left:r.left+i.left,top:r.top+i.top,right:r.right-i.right,bottom:r.bottom-i.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((o,s)=>{let l=this.manager.tooltipViews[s];return l.getCoords?l.getCoords(o.pos):this.view.coordsAtPos(o.pos)}),size:this.manager.tooltipViews.map(({dom:o})=>o.getBoundingClientRect()),space:this.view.state.facet(y0).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:r,scaleX:i,scaleY:o}=n,s=[];for(let l=0;l=Math.min(t.bottom,r.bottom)||p.rightMath.min(t.right,r.right)+.1)){d.style.top=Tl;continue}let y=u.arrow?f.dom.querySelector(".cm-tooltip-arrow"):null,w=y?7:0,C=m.right-m.left,S=(e=J_.get(f))!==null&&e!==void 0?e:m.bottom-m.top,_=f.offset||uz,P=this.view.textDirection==Ue.LTR,B=m.width>r.right-r.left?P?r.left:r.right-m.width:P?Math.max(r.left,Math.min(p.left-(y?14:0)+_.x,r.right-C)):Math.min(Math.max(r.left,p.left-C+(y?14:0)-_.x),r.right-C),j=this.above[l];!u.strictSide&&(j?p.top-S-w-_.yr.bottom)&&j==r.bottom-p.bottom>p.top-r.top&&(j=this.above[l]=!j);let R=(j?p.top-r.top:r.bottom-p.bottom)-w;if(RB&&ie.topU&&(U=j?ie.top-S-2-w:ie.bottom+w+2);if(this.position=="absolute"?(d.style.top=(U-n.parent.top)/o+"px",X_(d,(B-n.parent.left)/i)):(d.style.top=U/o+"px",X_(d,B/i)),y){let ie=p.left+(P?_.x:-_.x)-(B+14-7);y.style.left=ie/i+"px"}f.overlap!==!0&&s.push({left:B,top:U,right:z,bottom:U+S}),d.classList.toggle("cm-tooltip-above",j),d.classList.toggle("cm-tooltip-below",!j),f.positioned&&f.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=Tl}},{eventObservers:{scroll(){this.maybeMeasure()}}});function X_(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}var lz=oe.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),uz={x:0,y:0},Jl=G.define({enables:[hv,lz]}),Nd=G.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])}),Od=class n{static create(e){return new n(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new kd(e,Nd,(t,r)=>this.createHostedView(t,r),t=>t.dom.remove())}createHostedView(e,t){let r=e.create(this.view);return r.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(r.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&r.mount&&r.mount(this.view),r}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let r of this.manager.tooltipViews){let i=r[e];if(i!==void 0){if(t===void 0)t=i;else if(t!==i)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},cz=Jl.compute([Nd],n=>{let e=n.facet(Nd);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var r;return(r=t.end)!==null&&r!==void 0?r:t.pos})),create:Od.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),nv=class{constructor(e,t,r,i,o){this.view=e,this.source=t,this.field=r,this.setHover=i,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;el.bottom||t.xl.right+e.defaultCharacterWidth)return;let u=e.bidiSpans(e.state.doc.lineAt(i)).find(d=>d.from<=i&&d.to>=i),f=u&&u.dir==Ue.RTL?-1:1;o=t.x{this.pending==l&&(this.pending=null,u&&!(Array.isArray(u)&&!u.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(u)?u:[u])}))},u=>Lt(e.state,u,"hover tooltip"))}else s&&!(Array.isArray(s)&&!s.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(s)?s:[s])})}get tooltip(){let e=this.view.plugin(hv),t=e?e.manager.tooltips.findIndex(r=>r.create==Od.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,r;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:i,tooltip:o}=this;if(i.length&&o&&!fz(o.dom,e)||this.pending){let{pos:s}=i[0]||this.pending,l=(r=(t=i[0])===null||t===void 0?void 0:t.end)!==null&&r!==void 0?r:s;(s==l?this.view.posAtCoords(this.lastMove)!=s:!dz(this.view,s,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:r}=this;r&&r.dom.contains(e.relatedTarget)?this.watchTooltipLeave(r.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=r=>{e.removeEventListener("mouseleave",t),this.active.length&&!this.view.dom.contains(r.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},hd=4;function fz(n,e){let{left:t,right:r,top:i,bottom:o}=n.getBoundingClientRect(),s;if(s=n.querySelector(".cm-tooltip-arrow")){let l=s.getBoundingClientRect();i=Math.min(l.top,i),o=Math.max(l.bottom,o)}return e.clientX>=t-hd&&e.clientX<=r+hd&&e.clientY>=i-hd&&e.clientY<=o+hd}function dz(n,e,t,r,i,o){let s=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(s.left>r||s.righti||Math.min(s.bottom,l)=e&&u<=t}function uI(n,e={}){let t=de.define(),r=st.define({create(){return[]},update(i,o){if(i.length&&(e.hideOnChange&&(o.docChanged||o.selection)?i=[]:e.hideOn&&(i=i.filter(s=>!e.hideOn(o,s))),o.docChanged)){let s=[];for(let l of i){let u=o.changes.mapPos(l.pos,-1,Rt.TrackDel);if(u!=null){let f=Object.assign(Object.create(null),l);f.pos=u,f.end!=null&&(f.end=o.changes.mapPos(f.end)),s.push(f)}}i=s}for(let s of o.effects)s.is(t)&&(i=s.value),s.is(hz)&&(i=[]);return i},provide:i=>Nd.from(i)});return{active:r,extension:[r,at.define(i=>new nv(i,n,r,t,e.hoverTime||300)),cz]}}function pv(n,e){let t=n.plugin(hv);if(!t)return null;let r=t.manager.tooltips.indexOf(e);return r<0?null:t.manager.tooltipViews[r]}var hz=de.define();var eM=G.define({combine(n){let e,t;for(let r of n)e=e||r.topContainer,t=t||r.bottomContainer;return{topContainer:e,bottomContainer:t}}});function $o(n,e){let t=n.plugin(cI),r=t?t.specs.indexOf(e):-1;return r>-1?t.panels[r]:null}var cI=at.fromClass(class{constructor(n){this.input=n.state.facet(Uo),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(eM);this.top=new oa(n,!0,e.topContainer),this.bottom=new oa(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(eM);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new oa(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new oa(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(Uo);if(t!=this.input){let r=t.filter(u=>u),i=[],o=[],s=[],l=[];for(let u of r){let f=this.specs.indexOf(u),d;f<0?(d=u(n.view),l.push(d)):(d=this.panels[f],d.update&&d.update(n)),i.push(d),(d.top?o:s).push(d)}this.specs=r,this.panels=i,this.top.sync(o),this.bottom.sync(s);for(let u of l)u.dom.classList.add("cm-panel"),u.mount&&u.mount()}else for(let r of this.panels)r.update&&r.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>oe.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})}),oa=class{constructor(e,t,r){this.view=e,this.top=t,this.container=r,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=tM(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=tM(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function tM(n){let e=n.nextSibling;return n.remove(),e}var Uo=G.define({enables:cI}),Rn=class extends gr{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Rn.prototype.elementClass="";Rn.prototype.toDOM=void 0;Rn.prototype.mapMode=Rt.TrackBefore;Rn.prototype.startSide=Rn.prototype.endSide=-1;Rn.prototype.point=!0;var bd=G.define(),pz=G.define(),gz={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>Ge.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{}},Bl=G.define();function gv(n){return[fI(),Bl.of(Object.assign(Object.assign({},gz),n))]}var rv=G.define({combine:n=>n.some(e=>e)});function fI(n){let e=[mz];return n&&n.fixed===!1&&e.push(rv.of(!0)),e}var mz=at.fromClass(class{constructor(n){this.view=n,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(Bl).map(e=>new Rd(n,e));for(let e of this.gutters)this.dom.appendChild(e.dom);this.fixed=!n.state.facet(rv),this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,r=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(r<(t.to-t.from)*.8)}n.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px"),this.view.state.facet(rv)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":""),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&this.dom.remove();let t=Ge.iter(this.view.state.facet(bd),this.view.viewport.from),r=[],i=this.gutters.map(o=>new ov(o,this.view.viewport,-this.view.documentPadding.top));for(let o of this.view.viewportLineBlocks)if(r.length&&(r=[]),Array.isArray(o.type)){let s=!0;for(let l of o.type)if(l.type==Xt.Text&&s){iv(t,r,l.from);for(let u of i)u.line(this.view,l,r);s=!1}else if(l.widget)for(let u of i)u.widget(this.view,l)}else if(o.type==Xt.Text){iv(t,r,o.from);for(let s of i)s.line(this.view,o,r)}else if(o.widget)for(let s of i)s.widget(this.view,o);for(let o of i)o.finish();n&&this.view.scrollDOM.insertBefore(this.dom,e)}updateGutters(n){let e=n.startState.facet(Bl),t=n.state.facet(Bl),r=n.docChanged||n.heightChanged||n.viewportChanged||!Ge.eq(n.startState.facet(bd),n.state.facet(bd),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let i of this.gutters)i.update(n)&&(r=!0);else{r=!0;let i=[];for(let o of t){let s=e.indexOf(o);s<0?i.push(new Rd(this.view,o)):(this.gutters[s].update(n),i.push(this.gutters[s]))}for(let o of this.gutters)o.dom.remove(),i.indexOf(o)<0&&o.destroy();for(let o of i)this.dom.appendChild(o.dom);this.gutters=i}return r}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove()}},{provide:n=>oe.scrollMargins.of(e=>{let t=e.plugin(n);return!t||t.gutters.length==0||!t.fixed?null:e.textDirection==Ue.LTR?{left:t.dom.offsetWidth*e.scaleX}:{right:t.dom.offsetWidth*e.scaleX}})});function nM(n){return Array.isArray(n)?n:[n]}function iv(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}var ov=class{constructor(e,t,r){this.gutter=e,this.height=r,this.i=0,this.cursor=Ge.iter(e.markers,t.from)}addElement(e,t,r){let{gutter:i}=this,o=(t.top-this.height)/e.scaleY,s=t.height/e.scaleY;if(this.i==i.elements.length){let l=new Pd(e,s,o,r);i.elements.push(l),i.dom.appendChild(l.dom)}else i.elements[this.i].update(e,s,o,r);this.height=t.bottom,this.i++}line(e,t,r){let i=[];iv(this.cursor,i,t.from),r.length&&(i=i.concat(r));let o=this.gutter.config.lineMarker(e,t,i);o&&i.unshift(o);let s=this.gutter;i.length==0&&!s.config.renderEmptyElements||this.addElement(e,t,i)}widget(e,t){let r=this.gutter.config.widgetMarker(e,t.widget,t),i=r?[r]:null;for(let o of e.state.facet(pz)){let s=o(e,t.widget,t);s&&(i||(i=[])).push(s)}i&&this.addElement(e,t,i)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},Rd=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let r in t.domEventHandlers)this.dom.addEventListener(r,i=>{let o=i.target,s;if(o!=this.dom&&this.dom.contains(o)){for(;o.parentNode!=this.dom;)o=o.parentNode;let u=o.getBoundingClientRect();s=(u.top+u.bottom)/2}else s=i.clientY;let l=e.lineBlockAtHeight(s-e.documentTop);t.domEventHandlers[r](e,l,i)&&i.preventDefault()});this.markers=nM(t.markers(e)),t.initialSpacer&&(this.spacer=new Pd(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=nM(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let i=this.config.updateSpacer(this.spacer.markers[0],e);i!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[i])}let r=e.view.viewport;return!Ge.eq(this.markers,t,r.from,r.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},Pd=class{constructor(e,t,r,i){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,r,i)}update(e,t,r,i){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=r&&(this.dom.style.marginTop=(this.above=r)?r+"px":""),yz(this.markers,i)||this.setMarkers(e,i)}setMarkers(e,t){let r="cm-gutterElement",i=this.dom.firstChild;for(let o=0,s=0;;){let l=s,u=oo(l,u,f)||s(l,u,f):s}return r}})}}),Hl=class extends Rn{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function v0(n,e){return n.state.facet(sa).formatNumber(e,n.state)}var bz=Bl.compute([sa],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(vz)},lineMarker(e,t,r){return r.some(i=>i.toDOM)?null:new Hl(v0(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,r)=>{for(let i of e.state.facet(wz)){let o=i(e,t,r);if(o)return o}return null},lineMarkerChange:e=>e.startState.facet(sa)!=e.state.facet(sa),initialSpacer(e){return new Hl(v0(e,rM(e.state.doc.lines)))},updateSpacer(e,t){let r=v0(t.view,rM(t.view.state.doc.lines));return r==e.number?e:new Hl(r)},domEventHandlers:n.facet(sa).domEventHandlers}));function dI(n={}){return[sa.of(n),fI(),bz]}function rM(n){let e=9;for(;e{let e=[],t=-1;for(let r of n.selection.ranges){let i=n.doc.lineAt(r.head).from;i>t&&(t=i,e.push(Dz.range(i)))}return Ge.of(e)});function hI(){return Cz}var mv,zo=new se;function DI(n){return G.define({combine:n?e=>e.concat(n):void 0})}var xz=new se,vr=(()=>{class n{constructor(t,r,i=[],o=""){this.data=t,this.name=o,pt.prototype.hasOwnProperty("tree")||Object.defineProperty(pt.prototype,"tree",{get(){return Mt(this)}}),this.parser=r,this.extension=[Gi.of(this),pt.languageData.of((s,l,u)=>{let f=pI(s,l,u),d=f.type.prop(zo);if(!d)return[];let p=s.facet(d),m=f.type.prop(xz);if(m){let y=f.resolve(l-f.from,u);for(let w of m)if(w.test(y,s)){let C=s.facet(w.facet);return w.type=="replace"?C:C.concat(p)}}return p})].concat(i)}isActiveAt(t,r,i=-1){return pI(t,r,i).type.prop(zo)==this.data}findRegions(t){let r=t.facet(Gi);if(r?.data==this.data)return[{from:0,to:t.doc.length}];if(!r||!r.allowsNesting)return[];let i=[],o=(s,l)=>{if(s.prop(zo)==this.data){i.push({from:l,to:l+s.length});return}let u=s.prop(se.mounted);if(u){if(u.tree.prop(zo)==this.data){if(u.overlay)for(let f of u.overlay)i.push({from:f.from+l,to:f.to+l});else i.push({from:l,to:l+s.length});return}else if(u.overlay){let f=i.length;if(o(u.tree,u.overlay[0].from+l),i.length>f)return}}for(let f=0;fr.isTop?t:void 0)]}),e.name)}configure(e,t){return new n(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function Mt(n){let e=n.field(vr.state,!1);return e?e.tree:He.empty}var bv=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let r=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-r,t-r)}},Xl=null,tu=class n{constructor(e,t,r=[],i,o,s,l,u){this.parser=e,this.state=t,this.fragments=r,this.tree=i,this.treeLen=o,this.viewport=s,this.skipped=l,this.scheduleOn=u,this.parse=null,this.tempSkipped=[]}static create(e,t,r){return new n(e,t,[],He.empty,0,r,[],null)}startParse(){return this.parser.startParse(new bv(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=He.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var r;if(typeof e=="number"){let i=Date.now()+e;e=()=>Date.now()>i}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(ko.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Xl;Xl=this;try{return e()}finally{Xl=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=gI(e,t.from,t.to);return e}changes(e,t){let{fragments:r,tree:i,treeLen:o,viewport:s,skipped:l}=this;if(this.takeTree(),!e.empty){let u=[];if(e.iterChangedRanges((f,d,p,m)=>u.push({fromA:f,toA:d,fromB:p,toB:m})),r=ko.applyChanges(r,u),i=He.empty,o=0,s={from:e.mapPos(s.from,-1),to:e.mapPos(s.to,1)},this.skipped.length){l=[];for(let f of this.skipped){let d=e.mapPos(f.from,1),p=e.mapPos(f.to,-1);de.from&&(this.fragments=gI(this.fragments,i,o),this.skipped.splice(r--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends No{createParse(t,r,i){let o=i[0].from,s=i[i.length-1].to;return{parsedPos:o,advance(){let u=Xl;if(u){for(let f of i)u.tempSkipped.push(f);e&&(u.scheduleOn=u.scheduleOn?Promise.all([u.scheduleOn,e]):e)}return this.parsedPos=s,new He(Ot.none,[],[],s-o)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Xl}};function gI(n,e,t){return ko.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}var nu=class n{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),r=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,r)||t.takeTree(),new n(t)}static init(e){let t=Math.min(3e3,e.doc.length),r=tu.create(e.facet(Gi).parser,e,{from:0,to:t});return r.work(20,t)||r.takeTree(),new n(r)}};vr.state=st.define({create:nu.init,update(n,e){for(let t of e.effects)if(t.is(vr.setState))return t.value;return e.startState.facet(Gi)!=e.state.facet(Gi)?nu.init(e.state):n.apply(e)}});var CI=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(CI=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var yv=typeof navigator<"u"&&(!((mv=navigator.scheduling)===null||mv===void 0)&&mv.isInputPending)?()=>navigator.scheduling.isInputPending():null,Sz=at.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(vr.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(vr.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=CI(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndi+1e3,u=o.context.work(()=>yv&&yv()||Date.now()>s,i+(l?0:1e5));this.chunkBudget-=Date.now()-t,(u||this.chunkBudget<=0)&&(o.context.takeTree(),this.view.dispatch({effects:vr.setState.of(new nu(o.context))})),this.chunkBudget>0&&!(u&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(o.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Lt(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Gi=G.define({combine(n){return n.length?n[0]:null},enables:n=>[vr.state,Sz,oe.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]}),Hd=class{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}};var Ez=G.define(),iu=G.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Zi(n){let e=n.facet(iu);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function ua(n,e){let t="",r=n.tabSize,i=n.facet(iu)[0];if(i==" "){for(;e>=r;)t+=" ",e-=r;i=" "}for(let o=0;o=e?_z(n,t,e):null}var Wo=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=Zi(e)}lineAt(e,t=1){let r=this.state.doc.lineAt(e),{simulateBreak:i,simulateDoubleBreak:o}=this.options;return i!=null&&i>=r.from&&i<=r.to?o&&i==e?{text:"",from:e}:(t<0?i-1&&(o+=s-this.countColumn(r,r.search(/\S|$/))),o}countColumn(e,t=e.length){return ci(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:r,from:i}=this.lineAt(e,t),o=this.options.overrideIndentation;if(o){let s=o(i);if(s>-1)return s}return this.countColumn(r,r.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Zd=new se;function _z(n,e,t){let r=e.resolveStack(t),i=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(i!=r.node){let o=[];for(let s=i;s&&!(s.from==r.node.from&&s.type==r.node.type);s=s.parent)o.push(s);for(let s=o.length-1;s>=0;s--)r={node:o[s],next:r}}return xI(r,n,t)}function xI(n,e,t){for(let r=n;r;r=r.next){let i=Iz(r.node);if(i)return i(Dv.create(e,t,r))}return 0}function Mz(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Iz(n){let e=n.type.prop(Zd);if(e)return e;let t=n.firstChild,r;if(t&&(r=t.type.prop(se.closedBy))){let i=n.lastChild,o=i&&r.indexOf(i.name)>-1;return s=>Nz(s,!0,1,void 0,o&&!Mz(s)?i.from:void 0)}return n.parent==null?Tz:null}function Tz(){return 0}var Dv=class n extends Wo{constructor(e,t,r){super(e.state,e.options),this.base=e,this.pos=t,this.context=r}get node(){return this.context.node}static create(e,t,r){return new n(e,t,r)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let r=e.resolve(t.from);for(;r.parent&&r.parent.from==r.from;)r=r.parent;if(Az(r,e))break;t=this.state.doc.lineAt(r.from)}return this.lineIndent(t.from)}continue(){return xI(this.context.next,this.base,this.pos)}};function Az(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function kz(n){let e=n.node,t=e.childAfter(e.from),r=e.lastChild;if(!t)return null;let i=n.options.simulateBreak,o=n.state.doc.lineAt(t.from),s=i==null||i<=o.from?o.to:Math.min(o.to,i);for(let l=t.to;;){let u=e.childAfter(l);if(!u||u==r)return null;if(!u.type.isSkipped){if(u.from>=s)return null;let f=/^ */.exec(o.text.slice(t.to-o.from))[0].length;return{from:t.from,to:t.to+f}}l=u.to}}function Nz(n,e,t,r,i){let o=n.textAfter,s=o.match(/^\s*/)[0].length,l=r&&o.slice(s,s+r.length)==r||i==n.pos+s,u=e?kz(n):null;return u?l?n.column(u.from):n.column(u.to):n.baseIndent+(l?0:n.unit*t)}function Iv({except:n,units:e=1}={}){return t=>{let r=n&&n.test(t.textAfter);return t.baseIndent+(r?0:e*t.unit)}}var Oz=200;function SI(){return pt.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:r}=n.newSelection.main,i=t.lineAt(r);if(r>i.from+Oz)return n;let o=t.sliceString(i.from,r);if(!e.some(f=>f.test(o)))return n;let{state:s}=n,l=-1,u=[];for(let{head:f}of s.selection.ranges){let d=s.doc.lineAt(f);if(d.from==l)continue;l=d.from;let p=Gd(s,d.from);if(p==null)continue;let m=/^\s*/.exec(d.text)[0],y=ua(s,p);m!=y&&u.push({from:d.from,to:d.from+m.length,insert:y})}return u.length?[n,{changes:u,sequential:!0}]:n})}var Rz=G.define(),Tv=new se;function EI(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(o&&l.from=e&&f.to>t&&(o=f)}}return o}function Fz(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function jd(n,e,t){for(let r of n.facet(Rz)){let i=r(n,e,t);if(i)return i}return Pz(n,e,t)}function _I(n,e){let t=e.mapPos(n.from,1),r=e.mapPos(n.to,-1);return t>=r?void 0:{from:t,to:r}}var Kd=de.define({map:_I}),ou=de.define({map:_I});function MI(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(r=>r.from<=t&&r.to>=t)||e.push(n.lineBlockAt(t));return e}var qo=st.define({create(){return J.none},update(n,e){n=n.map(e.changes);for(let t of e.effects)if(t.is(Kd)&&!Lz(n,t.value.from,t.value.to)){let{preparePlaceholder:r}=e.state.facet(Av),i=r?J.replace({widget:new Cv(r(e.state,t.value))}):mI;n=n.update({add:[i.range(t.value.from,t.value.to)]})}else t.is(ou)&&(n=n.update({filter:(r,i)=>t.value.from!=r||t.value.to!=i,filterFrom:t.value.from,filterTo:t.value.to}));if(e.selection){let t=!1,{head:r}=e.selection.main;n.between(r,r,(i,o)=>{ir&&(t=!0)}),t&&(n=n.update({filterFrom:r,filterTo:r,filter:(i,o)=>o<=r||i>=r}))}return n},provide:n=>oe.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(r,i)=>{t.push(r,i)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{(!i||i.from>o)&&(i={from:o,to:s})}),i}function Lz(n,e,t){let r=!1;return n.between(e,e,(i,o)=>{i==e&&o==t&&(r=!0)}),r}function II(n,e){return n.field(qo,!1)?e:e.concat(de.appendConfig.of(kI()))}var Vz=n=>{for(let e of MI(n)){let t=jd(n.state,e.from,e.to);if(t)return n.dispatch({effects:II(n.state,[Kd.of(t),TI(n,t)])}),!0}return!1},Bz=n=>{if(!n.state.field(qo,!1))return!1;let e=[];for(let t of MI(n)){let r=Ud(n.state,t.from,t.to);r&&e.push(ou.of(r),TI(n,r,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function TI(n,e,t=!0){let r=n.state.doc.lineAt(e.from).number,i=n.state.doc.lineAt(e.to).number;return oe.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${r} ${n.state.phrase("to")} ${i}.`)}var Hz=n=>{let{state:e}=n,t=[];for(let r=0;r{let e=n.state.field(qo,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(r,i)=>{t.push(ou.of({from:r,to:i}))}),n.dispatch({effects:t}),!0};var AI=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:Vz},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:Bz},{key:"Ctrl-Alt-[",run:Hz},{key:"Ctrl-Alt-]",run:jz}],Uz={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},Av=G.define({combine(n){return $t(n,Uz)}});function kI(n){let e=[qo,zz];return n&&e.push(Av.of(n)),e}function NI(n,e){let{state:t}=n,r=t.facet(Av),i=s=>{let l=n.lineBlockAt(n.posAtDOM(s.target)),u=Ud(n.state,l.from,l.to);u&&n.dispatch({effects:ou.of(u)}),s.preventDefault()};if(r.placeholderDOM)return r.placeholderDOM(n,i,e);let o=document.createElement("span");return o.textContent=r.placeholderText,o.setAttribute("aria-label",t.phrase("folded code")),o.title=t.phrase("unfold"),o.className="cm-foldPlaceholder",o.onclick=i,o}var mI=J.replace({widget:new class extends On{toDOM(n){return NI(n,null)}}}),Cv=class extends On{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return NI(e,this.value)}},$z={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},eu=class extends Rn{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}};function OI(n={}){let e=Object.assign(Object.assign({},$z),n),t=new eu(e,!0),r=new eu(e,!1),i=at.fromClass(class{constructor(s){this.from=s.viewport.from,this.markers=this.buildMarkers(s)}update(s){(s.docChanged||s.viewportChanged||s.startState.facet(Gi)!=s.state.facet(Gi)||s.startState.field(qo,!1)!=s.state.field(qo,!1)||Mt(s.startState)!=Mt(s.state)||e.foldingChanged(s))&&(this.markers=this.buildMarkers(s.view))}buildMarkers(s){let l=new An;for(let u of s.viewportLineBlocks){let f=Ud(s.state,u.from,u.to)?r:jd(s.state,u.from,u.to)?t:null;f&&l.add(u.from,u.from,f)}return l.finish()}}),{domEventHandlers:o}=e;return[i,gv({class:"cm-foldGutter",markers(s){var l;return((l=s.plugin(i))===null||l===void 0?void 0:l.markers)||Ge.empty},initialSpacer(){return new eu(e,!1)},domEventHandlers:Object.assign(Object.assign({},o),{click:(s,l,u)=>{if(o.click&&o.click(s,l,u))return!0;let f=Ud(s.state,l.from,l.to);if(f)return s.dispatch({effects:ou.of(f)}),!0;let d=jd(s.state,l.from,l.to);return d?(s.dispatch({effects:Kd.of(d)}),!0):!1}})}),kI()]}var zz=oe.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),$d=class n{constructor(e,t){this.specs=e;let r;function i(l){let u=er.newName();return(r||(r=Object.create(null)))["."+u]=l,u}let o=typeof t.all=="string"?t.all:t.all?i(t.all):void 0,s=t.scope;this.scope=s instanceof vr?l=>l.prop(zo)==s.data:s?l=>l==s:void 0,this.style=Uy(e.map(l=>({tag:l.tag,class:l.class||i(Object.assign({},l,{tag:null}))})),{all:o}).style,this.module=r?new er(r):null,this.themeType=t.themeType}static define(e,t){return new n(e,t||{})}},xv=G.define(),RI=G.define({combine(n){return n.length?[n[0]]:null}});function vv(n){let e=n.facet(xv);return e.length?e:n.facet(RI)}function PI(n,e){let t=[Wz],r;return n instanceof $d&&(n.module&&t.push(oe.styleModule.of(n.module)),r=n.themeType),e?.fallback?t.push(RI.of(n)):r?t.push(xv.computeN([oe.darkTheme],i=>i.facet(oe.darkTheme)==(r=="dark")?[n]:[])):t.push(xv.of(n)),t}var Sv=class{constructor(e){this.markCache=Object.create(null),this.tree=Mt(e.state),this.decorations=this.buildDeco(e,vv(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Mt(e.state),r=vv(e.state),i=r!=vv(e.startState),{viewport:o}=e.view,s=e.changes.mapPos(this.decoratedTo,1);t.length=o.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=s):(t!=this.tree||e.viewportChanged||i)&&(this.tree=t,this.decorations=this.buildDeco(e.view,r),this.decoratedTo=o.to)}buildDeco(e,t){if(!t||!this.tree.length)return J.none;let r=new An;for(let{from:i,to:o}of e.visibleRanges)V1(this.tree,t,(s,l,u)=>{r.add(s,l,this.markCache[u]||(this.markCache[u]=J.mark({class:u})))},i,o);return r.finish()}},Wz=mr.high(at.fromClass(Sv,{decorations:n=>n.decorations})),FI=$d.define([{tag:$.meta,color:"#404740"},{tag:$.link,textDecoration:"underline"},{tag:$.heading,textDecoration:"underline",fontWeight:"bold"},{tag:$.emphasis,fontStyle:"italic"},{tag:$.strong,fontWeight:"bold"},{tag:$.strikethrough,textDecoration:"line-through"},{tag:$.keyword,color:"#708"},{tag:[$.atom,$.bool,$.url,$.contentSeparator,$.labelName],color:"#219"},{tag:[$.literal,$.inserted],color:"#164"},{tag:[$.string,$.deleted],color:"#a11"},{tag:[$.regexp,$.escape,$.special($.string)],color:"#e40"},{tag:$.definition($.variableName),color:"#00f"},{tag:$.local($.variableName),color:"#30a"},{tag:[$.typeName,$.namespace],color:"#085"},{tag:$.className,color:"#167"},{tag:[$.special($.variableName),$.macroName],color:"#256"},{tag:$.definition($.propertyName),color:"#00c"},{tag:$.comment,color:"#940"},{tag:$.invalid,color:"#f00"}]),qz=oe.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),LI=1e4,VI="()[]{}",BI=G.define({combine(n){return $t(n,{afterCursor:!0,brackets:VI,maxScanDistance:LI,renderMatch:Kz})}}),Gz=J.mark({class:"cm-matchingBracket"}),Zz=J.mark({class:"cm-nonmatchingBracket"});function Kz(n){let e=[],t=n.matched?Gz:Zz;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}var Yz=st.define({create(){return J.none},update(n,e){if(!e.docChanged&&!e.selection)return n;let t=[],r=e.state.facet(BI);for(let i of e.state.selection.ranges){if(!i.empty)continue;let o=wr(e.state,i.head,-1,r)||i.head>0&&wr(e.state,i.head-1,1,r)||r.afterCursor&&(wr(e.state,i.head,1,r)||i.headoe.decorations.from(n)}),Qz=[Yz,qz];function HI(n={}){return[BI.of(n),Qz]}var Jz=new se;function Ev(n,e,t){let r=n.prop(e<0?se.openedBy:se.closedBy);if(r)return r;if(n.name.length==1){let i=t.indexOf(n.name);if(i>-1&&i%2==(e<0?1:0))return[t[i+e]]}return null}function _v(n){let e=n.type.prop(Jz);return e?e(n.node):n}function wr(n,e,t,r={}){let i=r.maxScanDistance||LI,o=r.brackets||VI,s=Mt(n),l=s.resolveInner(e,t);for(let u=l;u;u=u.parent){let f=Ev(u.type,t,o);if(f&&u.from0?e>=d.from&&ed.from&&e<=d.to))return Xz(n,e,t,u,d,f,o)}}return eW(n,e,t,s,l.type,i,o)}function Xz(n,e,t,r,i,o,s){let l=r.parent,u={from:i.from,to:i.to},f=0,d=l?.cursor();if(d&&(t<0?d.childBefore(r.from):d.childAfter(r.to)))do if(t<0?d.to<=r.from:d.from>=r.to){if(f==0&&o.indexOf(d.type.name)>-1&&d.from0)return null;let f={from:t<0?e-1:e,to:t>0?e+1:e},d=n.doc.iterRange(e,t>0?n.doc.length:0),p=0;for(let m=0;!d.next().done&&m<=o;){let y=d.value;t<0&&(m+=y.length);let w=e+m*t;for(let C=t>0?0:y.length-1,S=t>0?y.length:-1;C!=S;C+=t){let _=s.indexOf(y[C]);if(!(_<0||r.resolveInner(w+C,1).type!=i))if(_%2==0==t>0)p++;else{if(p==1)return{start:f,end:{from:w+C,to:w+C+1},matched:_>>1==u>>1};p--}}t>0&&(m+=y.length)}return d.done?{start:f,matched:!1}:null}function yI(n,e,t,r=0,i=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let o=i;for(let s=r;s=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosr?s.toLowerCase():s,o=this.string.substr(this.pos,e.length);return i(o)==i(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let i=this.string.slice(this.pos).match(e);return i&&i.index>0?null:(i&&t!==!1&&(this.pos+=i[0].length),i)}}current(){return this.string.slice(this.start,this.pos)}};function tW(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||nW,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||Nv}}function nW(n){if(typeof n!="object")return n;let e={};for(let t in n){let r=n[t];e[t]=r instanceof Array?r.slice():r}return e}var vI=new WeakMap,Wd=class n extends vr{constructor(e){let t=DI(e.languageData),r=tW(e),i,o=new class extends No{createParse(s,l,u){return new Mv(i,s,l,u)}};super(t,o,[],e.name),this.topNode=sW(t,this),i=this,this.streamParser=r,this.stateAfter=new se({perNode:!0}),this.tokenTable=e.tokenTable?new qd(r.tokenTable):oW}static define(e){return new n(e)}getIndent(e){let t,{overrideIndentation:r}=e.options;r&&(t=vI.get(e.state),t!=null&&t1e4)return null;for(;o=r&&t+e.length<=i&&e.prop(n.stateAfter);if(o)return{state:n.streamParser.copyState(o),pos:t+e.length};for(let s=e.children.length-1;s>=0;s--){let l=e.children[s],u=t+e.positions[s],f=l instanceof He&&u=e.length)return e;!i&&t==0&&e.type==n.topNode&&(i=!0);for(let o=e.children.length-1;o>=0;o--){let s=e.positions[o],l=e.children[o],u;if(st&&kv(n,o.tree,0-o.offset,t,l),f;if(u&&u.pos<=r&&(f=jI(n,o.tree,t+o.offset,u.pos+o.offset,!1)))return{state:u.state,tree:f}}return{state:n.streamParser.startState(i?Zi(i):4),tree:He.empty}}var Mv=class{constructor(e,t,r,i){this.lang=e,this.input=t,this.fragments=r,this.ranges=i,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=i[i.length-1].to;let o=tu.get(),s=i[0].from,{state:l,tree:u}=rW(e,r,s,this.to,o?.state);this.state=l,this.parsedPos=this.chunkStart=s+u.length;for(let f=0;ff.from<=o.viewport.from&&f.to>=o.viewport.from)&&(this.state=this.lang.streamParser.startState(Zi(o.state)),o.skipUntilInView(this.parsedPos,o.viewport.from),this.parsedPos=o.viewport.from),this.moveRangeIndex()}advance(){let e=tu.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),r=Math.min(t,this.chunkStart+2048);for(e&&(r=Math.min(r,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` +`&&(t="");else{let r=t.indexOf(` +`);r>-1&&(t=t.slice(0,r))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),r=e+t.length;for(let i=this.rangeIndex;;){let o=this.ranges[i].to;if(o>=r||(t=t.slice(0,o-(r-t.length)),i++,i==this.ranges.length))break;let s=this.ranges[i].from,l=this.lineAfter(s);t+=l,r=s+l.length}return{line:t,end:r}}skipGapsTo(e,t,r){for(;;){let i=this.ranges[this.rangeIndex].to,o=e+t;if(r>0?i>o:i>=o)break;let s=this.ranges[++this.rangeIndex].from;t+=s-i}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){i=this.skipGapsTo(t,i,1),t+=i;let l=this.chunk.length;i=this.skipGapsTo(r,i,-1),r+=i,o+=this.chunk.length-l}let s=this.chunk.length-4;return o==4&&s>=0&&this.chunk[s]==e&&this.chunk[s+2]==t?this.chunk[s+2]=r:this.chunk.push(e,t,r,o),i}parseLine(e){let{line:t,end:r}=this.nextLine(),i=0,{streamParser:o}=this.lang,s=new zd(t,e?e.state.tabSize:4,e?Zi(e.state):2);if(s.eol())o.blankLine(this.state,s.indentUnit);else for(;!s.eol();){let l=UI(o.token,s,this.state);if(l&&(i=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+s.start,this.parsedPos+s.pos,i)),s.start>1e4)break}this.parsedPos=r,this.moveRangeIndex(),this.parsedPose.start)return i}throw new Error("Stream parser failed to advance stream.")}var Nv=Object.create(null),ru=[Ot.none],iW=new Gs(ru),wI=[],bI=Object.create(null),$I=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])$I[n]=zI(Nv,e);var qd=class{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),$I)}resolve(e){return e?this.table[e]||(this.table[e]=zI(this.extra,e)):0}},oW=new qd(Nv);function wv(n,e){wI.indexOf(n)>-1||(wI.push(n),console.warn(e))}function zI(n,e){let t=[];for(let l of e.split(" ")){let u=[];for(let f of l.split(".")){let d=n[f]||$[f];d?typeof d=="function"?u.length?u=u.map(d):wv(f,`Modifier ${f} used at start of tag`):u.length?wv(f,`Tag ${f} used as modifier`):u=Array.isArray(d)?d:[d]:wv(f,`Unknown highlighting tag ${f}`)}for(let f of u)t.push(f)}if(!t.length)return 0;let r=e.replace(/ /g,"_"),i=r+" "+t.map(l=>l.id),o=bI[i];if(o)return o.id;let s=bI[i]=Ot.define({id:ru.length,name:r,props:[qf({[r]:t})]});return ru.push(s),s.id}function sW(n,e){let t=Ot.define({id:ru.length,name:"Document",props:[zo.add(()=>n),Zd.add(()=>r=>e.getIndent(r))],top:!0});return ru.push(t),t}var Q7={rtl:J.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:Ue.RTL}),ltr:J.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:Ue.LTR}),auto:J.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var aW=Bd.define({name:"json",parser:B1.configure({props:[Zd.add({Object:Iv({except:/^\s*\}/}),Array:Iv({except:/^\s*\]/})}),Tv.add({"Object Array":EI})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function WI(){return new Hd(aW)}function Ov(n,e){return n.skipToEnd(),e.cur=Yd,"error"}function lW(n,e){return n.match(/^HTTP\/\d\.\d/)?(e.cur=uW,"keyword"):n.match(/^[A-Z]+/)&&/[ \t]/.test(n.peek())?(e.cur=fW,"keyword"):Ov(n,e)}function uW(n,e){var t=n.match(/^\d+/);if(!t)return Ov(n,e);e.cur=cW;var r=Number(t[0]);return r>=100&&r<400?"atom":"error"}function cW(n,e){return n.skipToEnd(),e.cur=Yd,null}function fW(n,e){return n.eatWhile(/\S/),e.cur=dW,"string.special"}function dW(n,e){return n.match(/^HTTP\/\d\.\d$/)?(e.cur=Yd,"keyword"):Ov(n,e)}function Yd(n){return n.sol()&&!n.eat(/[ \t]/)?n.match(/^.*?:/)?"atom":(n.skipToEnd(),"error"):(n.skipToEnd(),"string")}function qI(n){return n.skipToEnd(),null}var GI={name:"http",token:function(n,e){var t=e.cur;return t!=Yd&&t!=qI&&n.eatSpace()?null:t(n,e)},blankLine:function(n){n.cur=qI},startState:function(){return{cur:lW}}};var hW=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),r=jv(n.state,t.from);return r.line?pW(n):r.block?mW(n):!1};function Hv(n,e){return({state:t,dispatch:r})=>{if(t.readOnly)return!1;let i=n(e,t);return i?(r(t.update(i)),!0):!1}}var pW=Hv(wW,0);var gW=Hv(nT,0);var mW=Hv((n,e)=>nT(n,e,vW(e)),0);function jv(n,e){let t=n.languageDataAt("commentTokens",e);return t.length?t[0]:{}}var su=50;function yW(n,{open:e,close:t},r,i){let o=n.sliceDoc(r-su,r),s=n.sliceDoc(i,i+su),l=/\s*$/.exec(o)[0].length,u=/^\s*/.exec(s)[0].length,f=o.length-l;if(o.slice(f-e.length,f)==e&&s.slice(u,u+t.length)==t)return{open:{pos:r-l,margin:l&&1},close:{pos:i+u,margin:u&&1}};let d,p;i-r<=2*su?d=p=n.sliceDoc(r,i):(d=n.sliceDoc(r,r+su),p=n.sliceDoc(i-su,i));let m=/^\s*/.exec(d)[0].length,y=/\s*$/.exec(p)[0].length,w=p.length-y-t.length;return d.slice(m,m+e.length)==e&&p.slice(w,w+t.length)==t?{open:{pos:r+m+e.length,margin:/\s/.test(d.charAt(m+e.length))?1:0},close:{pos:i-y-t.length,margin:/\s/.test(p.charAt(w-1))?1:0}}:null}function vW(n){let e=[];for(let t of n.selection.ranges){let r=n.doc.lineAt(t.from),i=t.to<=r.to?r:n.doc.lineAt(t.to);i.from>r.from&&i.from==t.to&&(i=t.to==r.to+1?r:n.doc.lineAt(t.to-1));let o=e.length-1;o>=0&&e[o].to>r.from?e[o].to=i.to:e.push({from:r.from+/^\s*/.exec(r.text)[0].length,to:i.to})}return e}function nT(n,e,t=e.selection.ranges){let r=t.map(o=>jv(e,o.from).block);if(!r.every(o=>o))return null;let i=t.map((o,s)=>yW(e,r[s],o.from,o.to));if(n!=2&&!i.every(o=>o))return{changes:e.changes(t.map((o,s)=>i[s]?[]:[{from:o.from,insert:r[s].open+" "},{from:o.to,insert:" "+r[s].close}]))};if(n!=1&&i.some(o=>o)){let o=[];for(let s=0,l;si&&(o==s||s>p.from)){i=p.from;let m=/^\s*/.exec(p.text)[0].length,y=m==p.length,w=p.text.slice(m,m+f.length)==f?m:-1;mo.comment<0&&(!o.empty||o.single))){let o=[];for(let{line:l,token:u,indent:f,empty:d,single:p}of r)(p||!d)&&o.push({from:l.from+f,insert:u+" "});let s=e.changes(o);return{changes:s,selection:e.selection.map(s,1)}}else if(n!=1&&r.some(o=>o.comment>=0)){let o=[];for(let{line:s,comment:l,token:u}of r)if(l>=0){let f=s.from+l,d=f+u.length;s.text[d-s.from]==" "&&d++,o.push({from:f,to:d})}return{changes:o}}return null}var Fv=fn.define(),bW=fn.define(),DW=G.define(),rT=G.define({combine(n){return $t(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(r,i)=>e(r,i)||t(r,i)})}}),iT=st.define({create(){return Pv.empty},update(n,e){let t=e.state.facet(rT),r=e.annotation(Fv);if(r){let u=br.fromTransaction(e,r.selection),f=r.side,d=f==0?n.undone:n.done;return u?d=Jd(d,d.length,t.minDepth,u):d=lT(d,e.startState.selection),new Pv(f==0?r.rest:d,f==0?d:r.rest)}let i=e.annotation(bW);if((i=="full"||i=="before")&&(n=n.isolate()),e.annotation(Tn.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let o=br.fromTransaction(e),s=e.annotation(Tn.time),l=e.annotation(Tn.userEvent);return o?n=n.addChanges(o,s,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,s,l,t.newGroupDelay)),(i=="full"||i=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new Pv(n.done.map(br.fromJSON),n.undone.map(br.fromJSON))}});function oT(n={}){return[iT,rT.of(n),oe.domEventHandlers({beforeinput(e,t){let r=e.inputType=="historyUndo"?sT:e.inputType=="historyRedo"?Lv:null;return r?(e.preventDefault(),r(t)):!1}})]}function Xd(n,e){return function({state:t,dispatch:r}){if(!e&&t.readOnly)return!1;let i=t.field(iT,!1);if(!i)return!1;let o=i.pop(n,t,e);return o?(r(o),!0):!1}}var sT=Xd(0,!1),Lv=Xd(1,!1),CW=Xd(0,!0),xW=Xd(1,!0);var br=class n{constructor(e,t,r,i,o){this.changes=e,this.effects=t,this.mapped=r,this.startSelection=i,this.selectionsAfter=o}setSelAfter(e){return new n(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,r;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(r=this.startSelection)===null||r===void 0?void 0:r.toJSON(),selectionsAfter:this.selectionsAfter.map(i=>i.toJSON())}}static fromJSON(e){return new n(e.changes&&Qt.fromJSON(e.changes),[],e.mapped&&ui.fromJSON(e.mapped),e.startSelection&&V.fromJSON(e.startSelection),e.selectionsAfter.map(V.fromJSON))}static fromTransaction(e,t){let r=rr;for(let i of e.startState.facet(DW)){let o=i(e);o.length&&(r=r.concat(o))}return!r.length&&e.changes.empty?null:new n(e.changes.invert(e.startState.doc),r,void 0,t||e.startState.selection,rr)}static selection(e){return new n(void 0,rr,void 0,void 0,e)}};function Jd(n,e,t,r){let i=e+1>t+20?e-t-1:0,o=n.slice(i,e);return o.push(r),o}function SW(n,e){let t=[],r=!1;return n.iterChangedRanges((i,o)=>t.push(i,o)),e.iterChangedRanges((i,o,s,l)=>{for(let u=0;u=f&&s<=d&&(r=!0)}}),r}function EW(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,r)=>t.empty!=e.ranges[r].empty).length===0}function aT(n,e){return n.length?e.length?n.concat(e):n:e}var rr=[],_W=200;function lT(n,e){if(n.length){let t=n[n.length-1],r=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-_W));return r.length&&r[r.length-1].eq(e)?n:(r.push(e),Jd(n,n.length-1,1e9,t.setSelAfter(r)))}else return[br.selection([e])]}function MW(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Rv(n,e){if(!n.length)return n;let t=n.length,r=rr;for(;t;){let i=IW(n[t-1],e,r);if(i.changes&&!i.changes.empty||i.effects.length){let o=n.slice(0,t);return o[t-1]=i,o}else e=i.mapped,t--,r=i.selectionsAfter}return r.length?[br.selection(r)]:rr}function IW(n,e,t){let r=aT(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):rr,t);if(!n.changes)return br.selection(r);let i=n.changes.map(e),o=e.mapDesc(n.changes,!0),s=n.mapped?n.mapped.composeDesc(o):o;return new br(i,de.mapEffects(n.effects,e),s,n.startSelection.map(o),r)}var TW=/^(input\.type|delete)($|\.)/,Pv=(()=>{class n{constructor(t,r,i=0,o=void 0){this.done=t,this.undone=r,this.prevTime=i,this.prevUserEvent=o}isolate(){return this.prevTime?new n(this.done,this.undone):this}addChanges(t,r,i,o,s){let l=this.done,u=l[l.length-1];return u&&u.changes&&!u.changes.empty&&t.changes&&(!i||TW.test(i))&&(!u.selectionsAfter.length&&r-this.prevTime0&&r-this.prevTimet.empty?n.moveByChar(t,e):eh(t,e))}function zt(n){return n.textDirectionAt(n.state.selection.main.head)==Ue.LTR}var fT=n=>cT(n,!zt(n)),dT=n=>cT(n,zt(n));function hT(n,e){return Dr(n,t=>t.empty?n.moveByGroup(t,e):eh(t,e))}var AW=n=>hT(n,!zt(n)),kW=n=>hT(n,zt(n));var fZ=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function NW(n,e,t){if(e.type.prop(t))return!0;let r=e.to-e.from;return r&&(r>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function th(n,e,t){let r=Mt(n).resolveInner(e.head),i=t?se.closedBy:se.openedBy;for(let u=e.head;;){let f=t?r.childAfter(u):r.childBefore(u);if(!f)break;NW(n,f,i)?r=f:u=t?f.to:f.from}let o=r.type.prop(i),s,l;return o&&(s=t?wr(n,r.from,1):wr(n,r.to,-1))&&s.matched?l=t?s.end.to:s.end.from:l=t?r.to:r.from,V.cursor(l,t?-1:1)}var OW=n=>Dr(n,e=>th(n.state,e,!zt(n))),RW=n=>Dr(n,e=>th(n.state,e,zt(n)));function pT(n,e){return Dr(n,t=>{if(!t.empty)return eh(t,e);let r=n.moveVertically(t,e);return r.head!=t.head?r:n.moveToLineBoundary(t,e)})}var gT=n=>pT(n,!1),mT=n=>pT(n,!0);function yT(n){let e=n.scrollDOM.clientHeights.empty?n.moveVertically(s,e,t.height):eh(s,e));if(i.eq(r.selection))return!1;let o;if(t.selfScroll){let s=n.coordsAtPos(r.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),u=l.top+t.marginTop,f=l.bottom-t.marginBottom;s&&s.top>u&&s.bottomvT(n,!1),Vv=n=>vT(n,!0);function Ki(n,e,t){let r=n.lineBlockAt(e.head),i=n.moveToLineBoundary(e,t);if(i.head==e.head&&i.head!=(t?r.to:r.from)&&(i=n.moveToLineBoundary(e,t,!1)),!t&&i.head==r.from&&r.length){let o=/^\s*/.exec(n.state.sliceDoc(r.from,Math.min(r.from+100,r.to)))[0].length;o&&e.head!=r.from+o&&(i=V.cursor(r.from+o))}return i}var PW=n=>Dr(n,e=>Ki(n,e,!0)),FW=n=>Dr(n,e=>Ki(n,e,!1)),LW=n=>Dr(n,e=>Ki(n,e,!zt(n))),VW=n=>Dr(n,e=>Ki(n,e,zt(n))),BW=n=>Dr(n,e=>V.cursor(n.lineBlockAt(e.head).from,1)),HW=n=>Dr(n,e=>V.cursor(n.lineBlockAt(e.head).to,-1));function jW(n,e,t){let r=!1,i=ca(n.selection,o=>{let s=wr(n,o.head,-1)||wr(n,o.head,1)||o.head>0&&wr(n,o.head-1,1)||o.headjW(n,e,!1);function ir(n,e){let t=ca(n.state.selection,r=>{let i=e(r);return V.range(r.anchor,i.head,i.goalColumn,i.bidiLevel||void 0)});return t.eq(n.state.selection)?!1:(n.dispatch($r(n.state,t)),!0)}function wT(n,e){return ir(n,t=>n.moveByChar(t,e))}var bT=n=>wT(n,!zt(n)),DT=n=>wT(n,zt(n));function CT(n,e){return ir(n,t=>n.moveByGroup(t,e))}var $W=n=>CT(n,!zt(n)),zW=n=>CT(n,zt(n));var WW=n=>ir(n,e=>th(n.state,e,!zt(n))),qW=n=>ir(n,e=>th(n.state,e,zt(n)));function xT(n,e){return ir(n,t=>n.moveVertically(t,e))}var ST=n=>xT(n,!1),ET=n=>xT(n,!0);function _T(n,e){return ir(n,t=>n.moveVertically(t,e,yT(n).height))}var KI=n=>_T(n,!1),YI=n=>_T(n,!0),GW=n=>ir(n,e=>Ki(n,e,!0)),ZW=n=>ir(n,e=>Ki(n,e,!1)),KW=n=>ir(n,e=>Ki(n,e,!zt(n))),YW=n=>ir(n,e=>Ki(n,e,zt(n))),QW=n=>ir(n,e=>V.cursor(n.lineBlockAt(e.head).from)),JW=n=>ir(n,e=>V.cursor(n.lineBlockAt(e.head).to)),QI=({state:n,dispatch:e})=>(e($r(n,{anchor:0})),!0),JI=({state:n,dispatch:e})=>(e($r(n,{anchor:n.doc.length})),!0),XI=({state:n,dispatch:e})=>(e($r(n,{anchor:n.selection.main.anchor,head:0})),!0),eT=({state:n,dispatch:e})=>(e($r(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),XW=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),e4=({state:n,dispatch:e})=>{let t=nh(n).map(({from:r,to:i})=>V.range(r,Math.min(i+1,n.doc.length)));return e(n.update({selection:V.create(t),userEvent:"select"})),!0},t4=({state:n,dispatch:e})=>{let t=ca(n.selection,r=>{let i=Mt(n),o=i.resolveStack(r.from,1);if(r.empty){let s=i.resolveStack(r.from,-1);s.node.from>=o.node.from&&s.node.to<=o.node.to&&(o=s)}for(let s=o;s;s=s.next){let{node:l}=s;if((l.from=r.to||l.to>r.to&&l.from<=r.from)&&s.next)return V.range(l.to,l.from)}return r});return t.eq(n.selection)?!1:(e($r(n,t)),!0)},n4=({state:n,dispatch:e})=>{let t=n.selection,r=null;return t.ranges.length>1?r=V.create([t.main]):t.main.empty||(r=V.create([V.cursor(t.main.head)])),r?(e($r(n,r)),!0):!1};function au(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:r}=n,i=r.changeByRange(o=>{let{from:s,to:l}=o;if(s==l){let u=e(o);us&&(t="delete.forward",u=Qd(n,u,!0)),s=Math.min(s,u),l=Math.max(l,u)}else s=Qd(n,s,!1),l=Qd(n,l,!0);return s==l?{range:o}:{changes:{from:s,to:l},range:V.cursor(s,si(n)))r.between(e,e,(i,o)=>{ie&&(e=t?o:i)});return e}var MT=(n,e,t)=>au(n,r=>{let i=r.from,{state:o}=n,s=o.doc.lineAt(i),l,u;if(t&&!e&&i>s.from&&iMT(n,!1,!0);var IT=n=>MT(n,!0,!1),TT=(n,e)=>au(n,t=>{let r=t.head,{state:i}=n,o=i.doc.lineAt(r),s=i.charCategorizer(r);for(let l=null;;){if(r==(e?o.to:o.from)){r==t.head&&o.number!=(e?i.doc.lines:1)&&(r+=e?1:-1);break}let u=gt(o.text,r-o.from,e)+o.from,f=o.text.slice(Math.min(r,u)-o.from,Math.max(r,u)-o.from),d=s(f);if(l!=null&&d!=l)break;(f!=" "||r!=t.head)&&(l=d),r=u}return r}),AT=n=>TT(n,!1),r4=n=>TT(n,!0),i4=n=>au(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headau(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),s4=n=>au(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(r=>({changes:{from:r.from,to:r.to,insert:_e.of(["",""])},range:V.cursor(r.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},l4=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(r=>{if(!r.empty||r.from==0||r.from==n.doc.length)return{range:r};let i=r.from,o=n.doc.lineAt(i),s=i==o.from?i-1:gt(o.text,i-o.from,!1)+o.from,l=i==o.to?i+1:gt(o.text,i-o.from,!0)+o.from;return{changes:{from:s,to:l,insert:n.doc.slice(i,l).append(n.doc.slice(s,i))},range:V.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function nh(n){let e=[],t=-1;for(let r of n.selection.ranges){let i=n.doc.lineAt(r.from),o=n.doc.lineAt(r.to);if(!r.empty&&r.to==o.from&&(o=n.doc.lineAt(r.to-1)),t>=i.number){let s=e[e.length-1];s.to=o.to,s.ranges.push(r)}else e.push({from:i.from,to:o.to,ranges:[r]});t=o.number+1}return e}function kT(n,e,t){if(n.readOnly)return!1;let r=[],i=[];for(let o of nh(n)){if(t?o.to==n.doc.length:o.from==0)continue;let s=n.doc.lineAt(t?o.to+1:o.from-1),l=s.length+1;if(t){r.push({from:o.to,to:s.to},{from:o.from,insert:s.text+n.lineBreak});for(let u of o.ranges)i.push(V.range(Math.min(n.doc.length,u.anchor+l),Math.min(n.doc.length,u.head+l)))}else{r.push({from:s.from,to:o.from},{from:o.to,insert:n.lineBreak+s.text});for(let u of o.ranges)i.push(V.range(u.anchor-l,u.head-l))}}return r.length?(e(n.update({changes:r,scrollIntoView:!0,selection:V.create(i,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var u4=({state:n,dispatch:e})=>kT(n,e,!1),c4=({state:n,dispatch:e})=>kT(n,e,!0);function NT(n,e,t){if(n.readOnly)return!1;let r=[];for(let i of nh(n))t?r.push({from:i.from,insert:n.doc.slice(i.from,i.to)+n.lineBreak}):r.push({from:i.to,insert:n.lineBreak+n.doc.slice(i.from,i.to)});return e(n.update({changes:r,scrollIntoView:!0,userEvent:"input.copyline"})),!0}var f4=({state:n,dispatch:e})=>NT(n,e,!1),d4=({state:n,dispatch:e})=>NT(n,e,!0),h4=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(nh(e).map(({from:i,to:o})=>(i>0?i--:o{let o;if(n.lineWrapping){let s=n.lineBlockAt(i.head),l=n.coordsAtPos(i.head,i.assoc||1);l&&(o=s.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(i,!0,o)}).map(t);return n.dispatch({changes:t,selection:r,scrollIntoView:!0,userEvent:"delete.line"}),!0};function p4(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Mt(n).resolveInner(e),r=t.childBefore(e),i=t.childAfter(e),o;return r&&i&&r.to<=e&&i.from>=e&&(o=r.type.prop(se.closedBy))&&o.indexOf(i.name)>-1&&n.doc.lineAt(r.to).from==n.doc.lineAt(i.from).from&&!/\S/.test(n.sliceDoc(r.to,i.from))?{from:r.to,to:i.from}:null}var tT=OT(!1),g4=OT(!0);function OT(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let r=e.changeByRange(i=>{let{from:o,to:s}=i,l=e.doc.lineAt(o),u=!n&&o==s&&p4(e,o);n&&(o=s=(s<=l.to?l:e.doc.lineAt(s)).to);let f=new Wo(e,{simulateBreak:o,simulateDoubleBreak:!!u}),d=Gd(f,o);for(d==null&&(d=ci(/^\s*/.exec(e.doc.lineAt(o).text)[0],e.tabSize));sl.from&&o{let i=[];for(let s=r.from;s<=r.to;){let l=n.doc.lineAt(s);l.number>t&&(r.empty||r.to>l.from)&&(e(l,i,r),t=l.number),s=l.to+1}let o=n.changes(i);return{changes:i,range:V.range(o.mapPos(r.anchor,1),o.mapPos(r.head,1))}})}var m4=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),r=new Wo(n,{overrideIndentation:o=>{let s=t[o];return s??-1}}),i=Uv(n,(o,s,l)=>{let u=Gd(r,o.from);if(u==null)return;/\S/.test(o.text)||(u=0);let f=/^\s*/.exec(o.text)[0],d=ua(n,u);(f!=d||l.fromn.readOnly?!1:(e(n.update(Uv(n,(t,r)=>{r.push({from:t.from,insert:n.facet(iu)})}),{userEvent:"input.indent"})),!0),v4=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Uv(n,(t,r)=>{let i=/^\s*/.exec(t.text)[0];if(!i)return;let o=ci(i,n.tabSize),s=0,l=ua(n,Math.max(0,o-Zi(n)));for(;s(n.setTabFocusMode(),!0);var b4=[{key:"Ctrl-b",run:fT,shift:bT,preventDefault:!0},{key:"Ctrl-f",run:dT,shift:DT},{key:"Ctrl-p",run:gT,shift:ST},{key:"Ctrl-n",run:mT,shift:ET},{key:"Ctrl-a",run:BW,shift:QW},{key:"Ctrl-e",run:HW,shift:JW},{key:"Ctrl-d",run:IT},{key:"Ctrl-h",run:Bv},{key:"Ctrl-k",run:i4},{key:"Ctrl-Alt-h",run:AT},{key:"Ctrl-o",run:a4},{key:"Ctrl-t",run:l4},{key:"Ctrl-v",run:Vv}],D4=[{key:"ArrowLeft",run:fT,shift:bT,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:AW,shift:$W,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:LW,shift:KW,preventDefault:!0},{key:"ArrowRight",run:dT,shift:DT,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:kW,shift:zW,preventDefault:!0},{mac:"Cmd-ArrowRight",run:VW,shift:YW,preventDefault:!0},{key:"ArrowUp",run:gT,shift:ST,preventDefault:!0},{mac:"Cmd-ArrowUp",run:QI,shift:XI},{mac:"Ctrl-ArrowUp",run:ZI,shift:KI},{key:"ArrowDown",run:mT,shift:ET,preventDefault:!0},{mac:"Cmd-ArrowDown",run:JI,shift:eT},{mac:"Ctrl-ArrowDown",run:Vv,shift:YI},{key:"PageUp",run:ZI,shift:KI},{key:"PageDown",run:Vv,shift:YI},{key:"Home",run:FW,shift:ZW,preventDefault:!0},{key:"Mod-Home",run:QI,shift:XI},{key:"End",run:PW,shift:GW,preventDefault:!0},{key:"Mod-End",run:JI,shift:eT},{key:"Enter",run:tT,shift:tT},{key:"Mod-a",run:XW},{key:"Backspace",run:Bv,shift:Bv},{key:"Delete",run:IT},{key:"Mod-Backspace",mac:"Alt-Backspace",run:AT},{key:"Mod-Delete",mac:"Alt-Delete",run:r4},{mac:"Mod-Backspace",run:o4},{mac:"Mod-Delete",run:s4}].concat(b4.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),RT=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:OW,shift:WW},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:RW,shift:qW},{key:"Alt-ArrowUp",run:u4},{key:"Shift-Alt-ArrowUp",run:f4},{key:"Alt-ArrowDown",run:c4},{key:"Shift-Alt-ArrowDown",run:d4},{key:"Escape",run:n4},{key:"Mod-Enter",run:g4},{key:"Alt-l",mac:"Ctrl-l",run:e4},{key:"Mod-i",run:t4,preventDefault:!0},{key:"Mod-[",run:v4},{key:"Mod-]",run:y4},{key:"Mod-Alt-\\",run:m4},{key:"Shift-Mod-k",run:h4},{key:"Shift-Mod-\\",run:UW},{key:"Mod-/",run:hW},{key:"Alt-A",run:gW},{key:"Ctrl-m",mac:"Shift-Alt-m",run:w4}].concat(D4);function Le(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){var i=t[r];typeof i=="string"?n.setAttribute(r,i):i!=null&&(n[r]=i)}e++}for(;en.normalize("NFKD"):n=>n,Qi=class{constructor(e,t,r=0,i=e.length,o,s){this.test=s,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(r,i),this.bufferStart=r,this.normalize=o?l=>o(FT(l)):FT,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Pt(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=Ml(e),r=this.bufferStart+this.bufferPos;this.bufferPos+=kn(e);let i=this.normalize(t);if(i.length)for(let o=0,s=r;;o++){let l=i.charCodeAt(o),u=this.match(l,s,this.bufferPos+this.bufferStart);if(o==i.length-1){if(u)return this.value=u,this;break}s==r&&othis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let r=this.curLineStart+t.index,i=r+t[0].length;if(this.matchPos=lh(this.text,i+(r==i?1:0)),r==this.curLineStart+this.curLine.length&&this.nextLine(),(rthis.value.to)&&(!this.test||this.test(r,i,t)))return this.value={from:r,to:i,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=r||i.to<=t){let l=new n(t,e.sliceString(t,r));return $v.set(e,l),l}if(i.from==t&&i.to==r)return i;let{text:o,from:s}=i;return s>t&&(o=e.sliceString(t,s)+o,s=t),i.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let r=this.flat.from+t.index,i=r+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(r,i,t)))return this.value={from:r,to:i,match:t},this.matchPos=lh(this.text,i+(r==i?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=sh.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(oh.prototype[Symbol.iterator]=ah.prototype[Symbol.iterator]=function(){return this});function C4(n){try{return new RegExp(n,Kv),!0}catch{return!1}}function lh(n,e){if(e>=n.length)return e;let t=n.lineAt(e),r;for(;e=56320&&r<57344;)e++;return e}function zv(n){let e=String(n.state.doc.lineAt(n.state.selection.main.head).number),t=Le("input",{class:"cm-textfield",name:"line",value:e}),r=Le("form",{class:"cm-gotoLine",onkeydown:o=>{o.keyCode==27?(o.preventDefault(),n.dispatch({effects:uh.of(!1)}),n.focus()):o.keyCode==13&&(o.preventDefault(),i())},onsubmit:o=>{o.preventDefault(),i()}},Le("label",n.state.phrase("Go to line"),": ",t)," ",Le("button",{class:"cm-button",type:"submit"},n.state.phrase("go")));function i(){let o=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.value);if(!o)return;let{state:s}=n,l=s.doc.lineAt(s.selection.main.head),[,u,f,d,p]=o,m=d?+d.slice(1):0,y=f?+f:l.number;if(f&&p){let S=y/100;u&&(S=S*(u=="-"?-1:1)+l.number/s.doc.lines),y=Math.round(s.doc.lines*S)}else f&&u&&(y=y*(u=="-"?-1:1)+l.number);let w=s.doc.line(Math.max(1,Math.min(s.doc.lines,y))),C=V.cursor(w.from+Math.max(0,Math.min(m,w.length)));n.dispatch({effects:[uh.of(!1),oe.scrollIntoView(C.from,{y:"center"})],selection:C}),n.focus()}return{dom:r}}var uh=de.define(),LT=st.define({create(){return!0},update(n,e){for(let t of e.effects)t.is(uh)&&(n=t.value);return n},provide:n=>Uo.from(n,e=>e?zv:null)}),x4=n=>{let e=$o(n,zv);if(!e){let t=[uh.of(!0)];n.state.field(LT,!1)==null&&t.push(de.appendConfig.of([LT,S4])),n.dispatch({effects:t}),e=$o(n,zv)}return e&&e.dom.querySelector("input").select(),!0},S4=oe.baseTheme({".cm-panel.cm-gotoLine":{padding:"2px 6px 4px","& label":{fontSize:"80%"}}}),E4={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},jT=G.define({combine(n){return $t(n,E4,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function UT(n){let e=[A4,T4];return n&&e.push(jT.of(n)),e}var _4=J.mark({class:"cm-selectionMatch"}),M4=J.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function VT(n,e,t,r){return(t==0||n(e.sliceDoc(t-1,t))!=je.Word)&&(r==e.doc.length||n(e.sliceDoc(r,r+1))!=je.Word)}function I4(n,e,t,r){return n(e.sliceDoc(t,t+1))==je.Word&&n(e.sliceDoc(r-1,r))==je.Word}var T4=at.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(jT),{state:t}=n,r=t.selection;if(r.ranges.length>1)return J.none;let i=r.main,o,s=null;if(i.empty){if(!e.highlightWordAroundCursor)return J.none;let u=t.wordAt(i.head);if(!u)return J.none;s=t.charCategorizer(i.head),o=t.sliceDoc(u.from,u.to)}else{let u=i.to-i.from;if(u200)return J.none;if(e.wholeWords){if(o=t.sliceDoc(i.from,i.to),s=t.charCategorizer(i.head),!(VT(s,t,i.from,i.to)&&I4(s,t,i.from,i.to)))return J.none}else if(o=t.sliceDoc(i.from,i.to),!o)return J.none}let l=[];for(let u of n.visibleRanges){let f=new Qi(t.doc,o,u.from,u.to);for(;!f.next().done;){let{from:d,to:p}=f.value;if((!s||VT(s,t,d,p))&&(i.empty&&d<=i.from&&p>=i.to?l.push(M4.range(d,p)):(d>=i.to||p<=i.from)&&l.push(_4.range(d,p)),l.length>e.maxMatches))return J.none}}return J.set(l)}},{decorations:n=>n.decorations}),A4=oe.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),k4=({state:n,dispatch:e})=>{let{selection:t}=n,r=V.create(t.ranges.map(i=>n.wordAt(i.head)||V.cursor(i.head)),t.mainIndex);return r.eq(t)?!1:(e(n.update({selection:r})),!0)};function N4(n,e){let{main:t,ranges:r}=n.selection,i=n.wordAt(t.head),o=i&&i.from==t.from&&i.to==t.to;for(let s=!1,l=new Qi(n.doc,e,r[r.length-1].to);;)if(l.next(),l.done){if(s)return null;l=new Qi(n.doc,e,0,Math.max(0,r[r.length-1].from-1)),s=!0}else{if(s&&r.some(u=>u.from==l.value.from))continue;if(o){let u=n.wordAt(l.value.from);if(!u||u.from!=l.value.from||u.to!=l.value.to)continue}return l.value}}var O4=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(o=>o.from===o.to))return k4({state:n,dispatch:e});let r=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(o=>n.sliceDoc(o.from,o.to)!=r))return!1;let i=N4(n,r);return i?(e(n.update({selection:n.selection.addRange(V.range(i.from,i.to),!1),effects:oe.scrollIntoView(i.to)})),!0):!1},ha=G.define({combine(n){return $t(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Zv(e),scrollToMatch:e=>oe.scrollIntoView(e)})}});var ch=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||C4(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,r)=>r=="n"?` +`:r=="r"?"\r":r=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord}create(){return this.regexp?new qv(this):new Wv(this)}getCursor(e,t=0,r){let i=e.doc?e:pt.create({doc:e});return r==null&&(r=i.doc.length),this.regexp?da(this,i,t,r):fa(this,i,t,r)}},fh=class{constructor(e){this.spec=e}};function fa(n,e,t,r){return new Qi(e.doc,n.unquoted,t,r,n.caseSensitive?void 0:i=>i.toLowerCase(),n.wholeWord?R4(e.doc,e.charCategorizer(e.selection.main.head)):void 0)}function R4(n,e){return(t,r,i,o)=>((o>t||o+i.length=t)return null;i.push(r.value)}return i}highlight(e,t,r,i){let o=fa(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(r+this.spec.unquoted.length,e.doc.length));for(;!o.next().done;)i(o.value.from,o.value.to)}};function da(n,e,t,r){return new oh(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:n.wholeWord?P4(e.charCategorizer(e.selection.main.head)):void 0},t,r)}function dh(n,e){return n.slice(gt(n,e,!1),e)}function hh(n,e){return n.slice(e,gt(n,e))}function P4(n){return(e,t,r)=>!r[0].length||(n(dh(r.input,r.index))!=je.Word||n(hh(r.input,r.index))!=je.Word)&&(n(hh(r.input,r.index+r[0].length))!=je.Word||n(dh(r.input,r.index+r[0].length))!=je.Word)}var qv=class extends fh{nextMatch(e,t,r){let i=da(this.spec,e,r,e.doc.length).next();return i.done&&(i=da(this.spec,e,0,t).next()),i.done?null:i.value}prevMatchInRange(e,t,r){for(let i=1;;i++){let o=Math.max(t,r-i*1e4),s=da(this.spec,e,o,r),l=null;for(;!s.next().done;)l=s.value;if(l&&(o==t||l.from>o+10))return l;if(o==t)return null}}prevMatch(e,t,r){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,r,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&\d+])/g,(t,r)=>r=="$"?"$":r=="&"?e.match[0]:r!="0"&&+r=t)return null;i.push(r.value)}return i}highlight(e,t,r,i){let o=da(this.spec,e,Math.max(0,t-250),Math.min(r+250,e.doc.length));for(;!o.next().done;)i(o.value.from,o.value.to)}},uu=de.define(),Yv=de.define(),Yi=st.define({create(n){return new lu(Gv(n).create(),null)},update(n,e){for(let t of e.effects)t.is(uu)?n=new lu(t.value.create(),n.panel):t.is(Yv)&&(n=new lu(n.query,t.value?Qv:null));return n},provide:n=>Uo.from(n,e=>e.panel)});var lu=class{constructor(e,t){this.query=e,this.panel=t}},F4=J.mark({class:"cm-searchMatch"}),L4=J.mark({class:"cm-searchMatch cm-searchMatch-selected"}),V4=at.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Yi))}update(n){let e=n.state.field(Yi);(e!=n.startState.field(Yi)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return J.none;let{view:t}=this,r=new An;for(let i=0,o=t.visibleRanges,s=o.length;io[i+1].from-2*250;)u=o[++i].to;n.highlight(t.state,l,u,(f,d)=>{let p=t.state.selection.ranges.some(m=>m.from==f&&m.to==d);r.add(f,d,p?L4:F4)})}return r.finish()}},{decorations:n=>n.decorations});function cu(n){return e=>{let t=e.state.field(Yi,!1);return t&&t.query.spec.valid?n(e,t):WT(e)}}var ph=cu((n,{query:e})=>{let{to:t}=n.state.selection.main,r=e.nextMatch(n.state,t,t);if(!r)return!1;let i=V.single(r.from,r.to),o=n.state.facet(ha);return n.dispatch({selection:i,effects:[Jv(n,r),o.scrollToMatch(i.main,n)],userEvent:"select.search"}),zT(n),!0}),gh=cu((n,{query:e})=>{let{state:t}=n,{from:r}=t.selection.main,i=e.prevMatch(t,r,r);if(!i)return!1;let o=V.single(i.from,i.to),s=n.state.facet(ha);return n.dispatch({selection:o,effects:[Jv(n,i),s.scrollToMatch(o.main,n)],userEvent:"select.search"}),zT(n),!0}),B4=cu((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:V.create(t.map(r=>V.range(r.from,r.to))),userEvent:"select.search.matches"}),!0)}),H4=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:r,to:i}=t.main,o=[],s=0;for(let l=new Qi(n.doc,n.sliceDoc(r,i));!l.next().done;){if(o.length>1e3)return!1;l.value.from==r&&(s=o.length),o.push(V.range(l.value.from,l.value.to))}return e(n.update({selection:V.create(o,s),userEvent:"select.search.matches"})),!0},BT=cu((n,{query:e})=>{let{state:t}=n,{from:r,to:i}=t.selection.main;if(t.readOnly)return!1;let o=e.nextMatch(t,r,r);if(!o)return!1;let s=o,l=[],u,f,d=[];if(s.from==r&&s.to==i&&(f=t.toText(e.getReplacement(s)),l.push({from:s.from,to:s.to,insert:f}),s=e.nextMatch(t,s.from,s.to),d.push(oe.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(r).number)+"."))),s){let p=l.length==0||l[0].from>=o.to?0:o.to-o.from-f.length;u=V.single(s.from-p,s.to-p),d.push(Jv(n,s)),d.push(t.facet(ha).scrollToMatch(u.main,n))}return n.dispatch({changes:l,selection:u,effects:d,userEvent:"input.replace"}),!0}),j4=cu((n,{query:e})=>{if(n.state.readOnly)return!1;let t=e.matchAll(n.state,1e9).map(i=>{let{from:o,to:s}=i;return{from:o,to:s,insert:e.getReplacement(i)}});if(!t.length)return!1;let r=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:oe.announce.of(r),userEvent:"input.replace.all"}),!0});function Qv(n){return n.state.facet(ha).createPanel(n)}function Gv(n,e){var t,r,i,o,s;let l=n.selection.main,u=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!u)return e;let f=n.facet(ha);return new ch({search:((t=e?.literal)!==null&&t!==void 0?t:f.literal)?u:u.replace(/\n/g,"\\n"),caseSensitive:(r=e?.caseSensitive)!==null&&r!==void 0?r:f.caseSensitive,literal:(i=e?.literal)!==null&&i!==void 0?i:f.literal,regexp:(o=e?.regexp)!==null&&o!==void 0?o:f.regexp,wholeWord:(s=e?.wholeWord)!==null&&s!==void 0?s:f.wholeWord})}function $T(n){let e=$o(n,Qv);return e&&e.dom.querySelector("[main-field]")}function zT(n){let e=$T(n);e&&e==n.root.activeElement&&e.select()}var WT=n=>{let e=n.state.field(Yi,!1);if(e&&e.panel){let t=$T(n);if(t&&t!=n.root.activeElement){let r=Gv(n.state,e.query.spec);r.valid&&n.dispatch({effects:uu.of(r)}),t.focus(),t.select()}}else n.dispatch({effects:[Yv.of(!0),e?uu.of(Gv(n.state,e.query.spec)):de.appendConfig.of($4)]});return!0},qT=n=>{let e=n.state.field(Yi,!1);if(!e||!e.panel)return!1;let t=$o(n,Qv);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Yv.of(!1)}),!0},GT=[{key:"Mod-f",run:WT,scope:"editor search-panel"},{key:"F3",run:ph,shift:gh,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:ph,shift:gh,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:qT,scope:"editor search-panel"},{key:"Mod-Shift-l",run:H4},{key:"Mod-Alt-g",run:x4},{key:"Mod-d",run:O4,preventDefault:!0}],Zv=class{constructor(e){this.view=e;let t=this.query=e.state.field(Yi).query.spec;this.commit=this.commit.bind(this),this.searchField=Le("input",{value:t.search,placeholder:Pn(e,"Find"),"aria-label":Pn(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=Le("input",{value:t.replace,placeholder:Pn(e,"Replace"),"aria-label":Pn(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=Le("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=Le("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=Le("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function r(i,o,s){return Le("button",{class:"cm-button",name:i,onclick:o,type:"button"},s)}this.dom=Le("div",{onkeydown:i=>this.keydown(i),class:"cm-search"},[this.searchField,r("next",()=>ph(e),[Pn(e,"next")]),r("prev",()=>gh(e),[Pn(e,"previous")]),r("select",()=>B4(e),[Pn(e,"all")]),Le("label",null,[this.caseField,Pn(e,"match case")]),Le("label",null,[this.reField,Pn(e,"regexp")]),Le("label",null,[this.wordField,Pn(e,"by word")]),...e.state.readOnly?[]:[Le("br"),this.replaceField,r("replace",()=>BT(e),[Pn(e,"replace")]),r("replaceAll",()=>j4(e),[Pn(e,"replace all")])],Le("button",{name:"close",onclick:()=>qT(e),"aria-label":Pn(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new ch({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:uu.of(e)}))}keydown(e){YM(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?gh:ph)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),BT(this.view))}update(e){for(let t of e.transactions)for(let r of t.effects)r.is(uu)&&!r.value.eq(this.query)&&this.setQuery(r.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(ha).top}};function Pn(n,e){return n.state.phrase(e)}var rh=30,ih=/[\s\.,:;?!]/;function Jv(n,{from:e,to:t}){let r=n.state.doc.lineAt(e),i=n.state.doc.lineAt(t).to,o=Math.max(r.from,e-rh),s=Math.min(i,t+rh),l=n.state.sliceDoc(o,s);if(o!=r.from){for(let u=0;ul.length-rh;u--)if(!ih.test(l[u-1])&&ih.test(l[u])){l=l.slice(0,u);break}}return oe.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${r.number}.`)}var U4=oe.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),$4=[Yi,mr.low(V4),U4];var yh=class{constructor(e,t,r,i){this.state=e,this.pos=t,this.explicit=r,this.view=i,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Mt(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),r=Math.max(t.from,this.pos-250),i=t.text.slice(r-t.from,this.pos-t.from),o=i.search(nA(e,!1));return o<0?null:{from:r+o,to:this.pos,text:i.slice(o)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,r){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),r&&r.onDocChange&&(this.abortOnDocChange=!0))}};function ZT(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function z4(n){let e=Object.create(null),t=Object.create(null);for(let{label:i}of n){e[i[0]]=!0;for(let o=1;otypeof i=="string"?{label:i}:i),[t,r]=e.every(i=>/^\w+$/.test(i.label))?[/\w*$/,/\w+$/]:z4(e);return i=>{let o=i.matchBefore(r);return o||i.explicit?{from:o?o.from:i.pos,options:e,validFor:t}:null}}var vh=class{constructor(e,t,r,i){this.completion=e,this.source=t,this.match=r,this.score=i}};function Zo(n){return n.selection.main.from}function nA(n,e){var t;let{source:r}=n,i=e&&r[0]!="^",o=r[r.length-1]!="$";return!i&&!o?n:new RegExp(`${i?"^":""}(?:${r})${o?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}var rA=fn.define();function q4(n,e,t,r){let{main:i}=n.selection,o=t-i.from,s=r-i.from;return Object.assign(Object.assign({},n.changeByRange(l=>{if(l!=i&&t!=r&&n.sliceDoc(l.from+o,l.from+s)!=n.sliceDoc(t,r))return{range:l};let u=n.toText(e);return{changes:{from:l.from+o,to:r==i.from?l.to:l.from+s,insert:u},range:V.cursor(l.from+o+u.length)}})),{scrollIntoView:!0,userEvent:"input.complete"})}var KT=new WeakMap;function G4(n){if(!Array.isArray(n))return n;let e=KT.get(n);return e||KT.set(n,e=W4(n)),e}var wh=de.define(),fu=de.define(),tw=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&R<=57||R>=97&&R<=122?2:R>=65&&R<=90?1:0:(U=Ml(R))!=U.toLowerCase()?1:U!=U.toUpperCase()?2:0;(!P||z==1&&S||j==0&&z!=0)&&(t[p]==R||r[p]==R&&(m=!0)?s[p++]=P:s.length&&(_=!1)),j=z,P+=kn(R)}return p==u&&s[0]==0&&_?this.result(-100+(m?-200:0),s,e):y==u&&w==0?this.ret(-200-e.length+(C==e.length?0:-100),[0,C]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):y==u?this.ret(-900-e.length,[w,C]):p==u?this.result(-100+(m?-200:0)+-700+(_?0:-1100),s,e):t.length==2?null:this.result((i[0]?-700:0)+-200+-1100,i,e)}result(e,t,r){let i=[],o=0;for(let s of t){let l=s+(this.astral?kn(Pt(r,s)):1);o&&i[o-1]==s?i[o-1]=l:(i[o++]=s,i[o++]=l)}return this.ret(e-r.length,i)}},nw=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:Z4,filterStrict:!1,compareCompletions:(e,t)=>e.label.localeCompare(t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>r=>YT(e(r),t(r)),optionClass:(e,t)=>r=>YT(e(r),t(r)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function YT(n,e){return n?e?n+" "+e:n:e}function Z4(n,e,t,r,i,o){let s=n.textDirection==Ue.RTL,l=s,u=!1,f="top",d,p,m=e.left-i.left,y=i.right-e.right,w=r.right-r.left,C=r.bottom-r.top;if(l&&m=C||P>e.top?d=t.bottom-e.top:(f="bottom",d=e.bottom-t.top)}let S=(e.bottom-e.top)/o.offsetHeight,_=(e.right-e.left)/o.offsetWidth;return{style:`${f}: ${d/S}px; max-width: ${p/_}px`,class:"cm-completionInfo-"+(u?s?"left-narrow":"right-narrow":l?"left":"right")}}function K4(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let r=document.createElement("div");return r.classList.add("cm-completionIcon"),t.type&&r.classList.add(...t.type.split(/\s+/g).map(i=>"cm-completionIcon-"+i)),r.setAttribute("aria-hidden","true"),r},position:20}),e.push({render(t,r,i,o){let s=document.createElement("span");s.className="cm-completionLabel";let l=t.displayLabel||t.label,u=0;for(let f=0;fu&&s.appendChild(document.createTextNode(l.slice(u,d)));let m=s.appendChild(document.createElement("span"));m.appendChild(document.createTextNode(l.slice(d,p))),m.className="cm-completionMatchedText",u=p}return ut.position-r.position).map(t=>t.render)}function Xv(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let i=Math.floor(e/t);return{from:i*t,to:(i+1)*t}}let r=Math.floor((n-e)/t);return{from:n-(r+1)*t,to:n-r*t}}var rw=class{constructor(e,t,r){this.view=e,this.stateField=t,this.applyCompletion=r,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:u=>this.placeInfo(u),key:this},this.space=null,this.currentClass="";let i=e.state.field(t),{options:o,selected:s}=i.open,l=e.state.facet(It);this.optionContent=K4(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=Xv(o.length,s,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",u=>{let{options:f}=e.state.field(t).open;for(let d=u.target,p;d&&d!=this.dom;d=d.parentNode)if(d.nodeName=="LI"&&(p=/-(\d+)$/.exec(d.id))&&+p[1]{let f=e.state.field(this.stateField,!1);f&&f.tooltip&&e.state.facet(It).closeOnBlur&&u.relatedTarget!=e.contentDOM&&e.dispatch({effects:fu.of(null)})}),this.showOptions(o,i.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let r=e.state.field(this.stateField),i=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),r!=i){let{options:o,selected:s,disabled:l}=r.open;(!i.open||i.open.options!=o)&&(this.range=Xv(o.length,s,e.state.facet(It).maxRenderedOptions),this.showOptions(o,r.id)),this.updateSel(),l!=((t=i.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let r of this.currentClass.split(" "))r&&this.dom.classList.remove(r);for(let r of t.split(" "))r&&this.dom.classList.add(r);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;if((t.selected>-1&&t.selected=this.range.to)&&(this.range=Xv(t.options.length,t.selected,this.view.state.facet(It).maxRenderedOptions),this.showOptions(t.options,e.id)),this.updateSelectedOption(t.selected)){this.destroyInfo();let{completion:r}=t.options[t.selected],{info:i}=r;if(!i)return;let o=typeof i=="string"?document.createTextNode(i):i(r);if(!o)return;"then"in o?o.then(s=>{s&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(s,r)}).catch(s=>Lt(this.view.state,s,"completion info")):this.addInfoPane(o,r)}}addInfoPane(e,t){this.destroyInfo();let r=this.info=document.createElement("div");if(r.className="cm-tooltip cm-completionInfo",e.nodeType!=null)r.appendChild(e),this.infoDestroy=null;else{let{dom:i,destroy:o}=e;r.appendChild(i),this.infoDestroy=o||null}this.dom.appendChild(r),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let r=this.list.firstChild,i=this.range.from;r;r=r.nextSibling,i++)r.nodeName!="LI"||!r.id?i--:i==e?r.hasAttribute("aria-selected")||(r.setAttribute("aria-selected","true"),t=r):r.hasAttribute("aria-selected")&&r.removeAttribute("aria-selected");return t&&Q4(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),r=this.info.getBoundingClientRect(),i=e.getBoundingClientRect(),o=this.space;if(!o){let s=this.dom.ownerDocument.defaultView||window;o={left:0,top:0,right:s.innerWidth,bottom:s.innerHeight}}return i.top>Math.min(o.bottom,t.bottom)-10||i.bottomr.from||r.from==0))if(o=m,typeof f!="string"&&f.header)i.appendChild(f.header(f));else{let y=i.appendChild(document.createElement("completion-section"));y.textContent=m}}let d=i.appendChild(document.createElement("li"));d.id=t+"-"+s,d.setAttribute("role","option");let p=this.optionClass(l);p&&(d.className=p);for(let m of this.optionContent){let y=m(l,this.view.state,this.view,u);y&&d.appendChild(y)}}return r.from&&i.classList.add("cm-completionListIncompleteTop"),r.tonew rw(t,n,e)}function Q4(n,e){let t=n.getBoundingClientRect(),r=e.getBoundingClientRect(),i=t.height/n.offsetHeight;r.topt.bottom&&(n.scrollTop+=(r.bottom-t.bottom)/i)}function QT(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function J4(n,e){let t=[],r=null,i=f=>{t.push(f);let{section:d}=f.completion;if(d){r||(r=[]);let p=typeof d=="string"?d:d.name;r.some(m=>m.name==p)||r.push(typeof d=="string"?{name:p}:d)}},o=e.facet(It);for(let f of n)if(f.hasResult()){let d=f.result.getMatch;if(f.result.filter===!1)for(let p of f.result.options)i(new vh(p,f.source,d?d(p):[],1e9-t.length));else{let p=e.sliceDoc(f.from,f.to),m,y=o.filterStrict?new nw(p):new tw(p);for(let w of f.result.options)if(m=y.match(w.label)){let C=w.displayLabel?d?d(w,m.matched):[]:m.matched;i(new vh(w,f.source,C,m.score+(w.boost||0)))}}}if(r){let f=Object.create(null),d=0,p=(m,y)=>{var w,C;return((w=m.rank)!==null&&w!==void 0?w:1e9)-((C=y.rank)!==null&&C!==void 0?C:1e9)||(m.namep.score-d.score||u(d.completion,p.completion))){let d=f.completion;!l||l.label!=d.label||l.detail!=d.detail||l.type!=null&&d.type!=null&&l.type!=d.type||l.apply!=d.apply||l.boost!=d.boost?s.push(f):QT(f.completion)>QT(l)&&(s[s.length-1]=f),l=f.completion}return s}var iw=class n{constructor(e,t,r,i,o,s){this.options=e,this.attrs=t,this.tooltip=r,this.timestamp=i,this.selected=o,this.disabled=s}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new n(this.options,JT(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,r,i,o,s){if(i&&!s&&e.some(f=>f.isPending))return i.setDisabled();let l=J4(e,t);if(!l.length)return i&&e.some(f=>f.isPending)?i.setDisabled():null;let u=t.facet(It).selectOnOpen?0:-1;if(i&&i.selected!=u&&i.selected!=-1){let f=i.options[i.selected].completion;for(let d=0;dd.hasResult()?Math.min(f,d.from):f,1e8),create:i5,above:o.aboveCursor},i?i.timestamp:Date.now(),u,!1)}map(e){return new n(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}setDisabled(){return new n(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},ow=class n{constructor(e,t,r){this.active=e,this.id=t,this.open=r}static start(){return new n(n5,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,r=t.facet(It),o=(r.override||t.languageDataAt("autocomplete",Zo(t)).map(G4)).map(u=>(this.active.find(d=>d.source==u)||new hi(u,this.active.some(d=>d.state!=0)?1:0)).update(e,r));o.length==this.active.length&&o.every((u,f)=>u==this.active[f])&&(o=this.active);let s=this.open,l=e.effects.some(u=>u.is(aw));s&&e.docChanged&&(s=s.map(e.changes)),e.selection||o.some(u=>u.hasResult()&&e.changes.touchesRange(u.from,u.to))||!X4(o,this.active)||l?s=iw.build(o,t,this.id,s,r,l):s&&s.disabled&&!o.some(u=>u.isPending)&&(s=null),!s&&o.every(u=>!u.isPending)&&o.some(u=>u.hasResult())&&(o=o.map(u=>u.hasResult()?new hi(u.source,0):u));for(let u of e.effects)u.is(oA)&&(s=s&&s.setSelected(u.value,this.id));return o==this.active&&s==this.open?this:new n(o,this.id,s)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?e5:t5}};function X4(n,e){if(n==e)return!0;for(let t=0,r=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}var n5=[];function iA(n,e){if(n.isUserEvent("input.complete")){let r=n.annotation(rA);if(r&&e.activateOnCompletion(r))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}var hi=class n{constructor(e,t,r=!1){this.source=e,this.state=t,this.explicit=r}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let r=iA(e,t),i=this;(r&8||r&16&&this.touches(e))&&(i=new n(i.source,0)),r&4&&i.state==0&&(i=new n(this.source,1)),i=i.updateFor(e,r);for(let o of e.effects)if(o.is(wh))i=new n(i.source,1,o.value);else if(o.is(fu))i=new n(i.source,0);else if(o.is(aw))for(let s of o.value)s.source==i.source&&(i=s);return i}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(Zo(e.state))}},bh=class n extends hi{constructor(e,t,r,i,o,s){super(e,3,t),this.limit=r,this.result=i,this.from=o,this.to=s}hasResult(){return!0}updateFor(e,t){var r;if(!(t&3))return this.map(e.changes);let i=this.result;i.map&&!e.changes.empty&&(i=i.map(i,e.changes));let o=e.changes.mapPos(this.from),s=e.changes.mapPos(this.to,1),l=Zo(e.state);if(l>s||!i||t&2&&(Zo(e.startState)==this.from||lt.map(e))}}),oA=de.define(),hn=st.define({create(){return ow.start()},update(n,e){return n.update(e)},provide:n=>[Jl.from(n,e=>e.tooltip),oe.contentAttributes.from(n,e=>e.attrs)]});function lw(n,e){let t=e.completion.apply||e.completion.label,r=n.state.field(hn).active.find(i=>i.source==e.source);return r instanceof bh?(typeof t=="string"?n.dispatch(Object.assign(Object.assign({},q4(n.state,t,r.from,r.to)),{annotations:rA.of(e.completion)})):t(n,e.completion,r.from,r.to),!0):!1}var i5=Y4(hn,lw);function mh(n,e="option"){return t=>{let r=t.state.field(hn,!1);if(!r||!r.open||r.open.disabled||Date.now()-r.open.timestamp-1?r.open.selected+i*(n?1:-1):n?0:s-1;return l<0?l=e=="page"?0:s-1:l>=s&&(l=e=="page"?s-1:0),t.dispatch({effects:oA.of(l)}),!0}}var o5=n=>{let e=n.state.field(hn,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(hn,!1)?(n.dispatch({effects:wh.of(!0)}),!0):!1,s5=n=>{let e=n.state.field(hn,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:fu.of(null)}),!0)},sw=class{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}},a5=50,l5=1e3,u5=at.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(hn).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(hn),t=n.state.facet(It);if(!n.selectionSet&&!n.docChanged&&n.startState.field(hn)==e)return;let r=n.transactions.some(o=>{let s=iA(o,t);return s&8||(o.selection||o.docChanged)&&!(s&3)});for(let o=0;oa5&&Date.now()-s.time>l5){for(let l of s.context.abortListeners)try{l()}catch(u){Lt(this.view.state,u)}s.context.abortListeners=null,this.running.splice(o--,1)}else s.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(o=>o.effects.some(s=>s.is(wh)))&&(this.pendingStart=!0);let i=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(o=>o.isPending&&!this.running.some(s=>s.active.source==o.source))?setTimeout(()=>this.startUpdate(),i):-1,this.composing!=0)for(let o of n.transactions)o.isUserEvent("input.type")?this.composing=2:this.composing==2&&o.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(hn);for(let t of e.active)t.isPending&&!this.running.some(r=>r.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(It).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=Zo(e),r=new yh(e,t,n.explicit,this.view),i=new sw(n,r);this.running.push(i),Promise.resolve(n.source(r)).then(o=>{i.context.aborted||(i.done=o||null,this.scheduleAccept())},o=>{this.view.dispatch({effects:fu.of(null)}),Lt(this.view.state,o)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(It).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(It),r=this.view.state.field(hn);for(let i=0;il.source==o.active.source);if(s&&s.isPending)if(o.done==null){let l=new hi(o.active.source,0);for(let u of o.updates)l=l.update(u,t);l.isPending||e.push(l)}else this.startQuery(s)}(e.length||r.open&&r.open.disabled)&&this.view.dispatch({effects:aw.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(hn,!1);if(e&&e.tooltip&&this.view.state.facet(It).closeOnBlur){let t=e.open&&pv(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:fu.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:wh.of(!1)}),20),this.composing=0}}}),c5=typeof navigator=="object"&&/Win/.test(navigator.platform),f5=mr.highest(oe.domEventHandlers({keydown(n,e){let t=e.state.field(hn,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(c5&&n.altKey)||n.metaKey)return!1;let r=t.open.options[t.open.selected],i=t.active.find(s=>s.source==r.source),o=r.completion.commitCharacters||i.result.commitCharacters;return o&&o.indexOf(n.key)>-1&&lw(e,r),!1}})),d5=oe.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});var du={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Go=de.define({map(n,e){let t=e.mapPos(n,-1,Rt.TrackAfter);return t??void 0}}),uw=new class extends gr{};uw.startSide=1;uw.endSide=-1;var sA=st.define({create(){return Ge.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:r=>r>=t.from&&r<=t.to})}for(let t of e.effects)t.is(Go)&&(n=n.update({add:[uw.range(t.value,t.value+1)]}));return n}});function aA(){return[p5,sA]}var ew="()[]{}<>";function lA(n){for(let e=0;e{if((h5?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let i=n.state.selection.main;if(r.length>2||r.length==2&&kn(Pt(r,0))==1||e!=i.from||t!=i.to)return!1;let o=m5(n.state,r);return o?(n.dispatch(o),!0):!1}),g5=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let r=uA(n,n.selection.main.head).brackets||du.brackets,i=null,o=n.changeByRange(s=>{if(s.empty){let l=y5(n.doc,s.head);for(let u of r)if(u==l&&Dh(n.doc,s.head)==lA(Pt(u,0)))return{changes:{from:s.head-u.length,to:s.head+u.length},range:V.cursor(s.head-u.length)}}return{range:i=s}});return i||e(n.update(o,{scrollIntoView:!0,userEvent:"delete.backward"})),!i},cA=[{key:"Backspace",run:g5}];function m5(n,e){let t=uA(n,n.selection.main.head),r=t.brackets||du.brackets;for(let i of r){let o=lA(Pt(i,0));if(e==i)return o==i?b5(n,i,r.indexOf(i+i+i)>-1,t):v5(n,i,o,t.before||du.before);if(e==o&&fA(n,n.selection.main.from))return w5(n,i,o)}return null}function fA(n,e){let t=!1;return n.field(sA).between(0,n.doc.length,r=>{r==e&&(t=!0)}),t}function Dh(n,e){let t=n.sliceString(e,e+2);return t.slice(0,kn(Pt(t,0)))}function y5(n,e){let t=n.sliceString(e-2,e);return kn(Pt(t,0))==t.length?t:t.slice(1)}function v5(n,e,t,r){let i=null,o=n.changeByRange(s=>{if(!s.empty)return{changes:[{insert:e,from:s.from},{insert:t,from:s.to}],effects:Go.of(s.to+e.length),range:V.range(s.anchor+e.length,s.head+e.length)};let l=Dh(n.doc,s.head);return!l||/\s/.test(l)||r.indexOf(l)>-1?{changes:{insert:e+t,from:s.head},effects:Go.of(s.head+e.length),range:V.cursor(s.head+e.length)}:{range:i=s}});return i?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function w5(n,e,t){let r=null,i=n.changeByRange(o=>o.empty&&Dh(n.doc,o.head)==t?{changes:{from:o.head,to:o.head+t.length,insert:t},range:V.cursor(o.head+t.length)}:r={range:o});return r?null:n.update(i,{scrollIntoView:!0,userEvent:"input.type"})}function b5(n,e,t,r){let i=r.stringPrefixes||du.stringPrefixes,o=null,s=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:Go.of(l.to+e.length),range:V.range(l.anchor+e.length,l.head+e.length)};let u=l.head,f=Dh(n.doc,u),d;if(f==e){if(eA(n,u))return{changes:{insert:e+e,from:u},effects:Go.of(u+e.length),range:V.cursor(u+e.length)};if(fA(n,u)){let m=t&&n.sliceDoc(u,u+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:u,to:u+m.length,insert:m},range:V.cursor(u+m.length)}}}else{if(t&&n.sliceDoc(u-2*e.length,u)==e+e&&(d=tA(n,u-2*e.length,i))>-1&&eA(n,d))return{changes:{insert:e+e+e+e,from:u},effects:Go.of(u+e.length),range:V.cursor(u+e.length)};if(n.charCategorizer(u)(f)!=je.Word&&tA(n,u,i)>-1&&!D5(n,u,e,i))return{changes:{insert:e+e,from:u},effects:Go.of(u+e.length),range:V.cursor(u+e.length)}}return{range:o=l}});return o?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function eA(n,e){let t=Mt(n).resolveInner(e+1);return t.parent&&t.from==e}function D5(n,e,t,r){let i=Mt(n).resolveInner(e,-1),o=r.reduce((s,l)=>Math.max(s,l.length),0);for(let s=0;s<5;s++){let l=n.sliceDoc(i.from,Math.min(i.to,i.from+t.length+o)),u=l.indexOf(t);if(!u||u>-1&&r.indexOf(l.slice(0,u))>-1){let d=i.firstChild;for(;d&&d.from==i.from&&d.to-d.from>t.length+u;){if(n.sliceDoc(d.to-t.length,d.to)==t)return!1;d=d.firstChild}return!0}let f=i.to==e&&i.parent;if(!f)break;i=f}return!1}function tA(n,e,t){let r=n.charCategorizer(e);if(r(n.sliceDoc(e-1,e))!=je.Word)return e;for(let i of t){let o=e-i.length;if(n.sliceDoc(o,e)==i&&r(n.sliceDoc(o-1,o))!=je.Word)return o}return-1}function dA(n={}){return[f5,hn,It.of(n),u5,C5,d5]}var cw=[{key:"Ctrl-Space",run:XT},{mac:"Alt-`",run:XT},{key:"Escape",run:s5},{key:"ArrowDown",run:mh(!0)},{key:"ArrowUp",run:mh(!1)},{key:"PageDown",run:mh(!0,"page")},{key:"PageUp",run:mh(!1,"page")},{key:"Enter",run:o5}],C5=mr.highest(Ql.computeN([It],n=>n.facet(It).defaultKeymap?[cw]:[]));var xh=class{constructor(e,t,r){this.from=e,this.to=t,this.diagnostic=r}},Ko=class n{constructor(e,t,r){this.diagnostics=e,this.panel=t,this.selected=r}static init(e,t,r){let i=e,o=r.facet(hu).markerFilter;o&&(i=o(i,r));let s=e.slice().sort((p,m)=>p.from-m.from||p.to-m.to),l=new An,u=[],f=0;for(let p=0;;){let m=p==s.length?null:s[p];if(!m&&!u.length)break;let y,w;for(u.length?(y=f,w=u.reduce((S,_)=>Math.min(S,_.to),m&&m.from>y?m.from:1e8)):(y=m.from,w=m.to,u.push(m),p++);pS.from||S.to==y))u.push(S),p++,w=Math.min(S.to,w);else{w=Math.min(S.from,w);break}}let C=O5(u);if(u.some(S=>S.from==S.to||S.from==S.to-1&&r.doc.lineAt(S.from).to==S.from))l.add(y,y,J.widget({widget:new fw(C),diagnostics:u.slice()}));else{let S=u.reduce((_,P)=>P.markClass?_+" "+P.markClass:_,"");l.add(y,w,J.mark({class:"cm-lintRange cm-lintRange-"+C+S,diagnostics:u.slice(),inclusiveEnd:u.some(_=>_.to>w)}))}f=w;for(let S=0;S{if(!(e&&s.diagnostics.indexOf(e)<0))if(!r)r=new xh(i,o,e||s.diagnostics[0]);else{if(s.diagnostics.indexOf(r.diagnostic)<0)return!1;r=new xh(r.from,o,r.diagnostic)}}),r}function x5(n,e){let t=e.pos,r=e.end||t,i=n.state.facet(hu).hideOn(n,t,r);if(i!=null)return i;let o=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(s=>s.is(pA))||n.changes.touchesRange(o.from,Math.max(o.to,r)))}function S5(n,e){return n.field(Fn,!1)?e:e.concat(de.appendConfig.of(R5))}var pA=de.define(),dw=de.define(),gA=de.define(),Fn=st.define({create(){return new Ko(J.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),r=null,i=n.panel;if(n.selected){let o=e.changes.mapPos(n.selected.from,1);r=pa(t,n.selected.diagnostic,o)||pa(t,null,o)}!t.size&&i&&e.state.facet(hu).autoPanel&&(i=null),n=new Ko(t,i,r)}for(let t of e.effects)if(t.is(pA)){let r=e.state.facet(hu).autoPanel?t.value.length?pu.open:null:n.panel;n=Ko.init(t.value,r,e.state)}else t.is(dw)?n=new Ko(n.diagnostics,t.value?pu.open:null,n.selected):t.is(gA)&&(n=new Ko(n.diagnostics,n.panel,t.value));return n},provide:n=>[Uo.from(n,e=>e.panel),oe.decorations.from(n,e=>e.diagnostics)]});var E5=J.mark({class:"cm-lintRange cm-lintRange-active"});function _5(n,e,t){let{diagnostics:r}=n.state.field(Fn),i,o=-1,s=-1;r.between(e-(t<0?1:0),e+(t>0?1:0),(u,f,{spec:d})=>{if(e>=u&&e<=f&&(u==f||(e>u||t>0)&&(evA(n,t,!1)))}var I5=n=>{let e=n.state.field(Fn,!1);(!e||!e.panel)&&n.dispatch({effects:S5(n.state,[dw.of(!0)])});let t=$o(n,pu.open);return t&&t.dom.querySelector(".cm-panel-lint ul").focus(),!0},hA=n=>{let e=n.state.field(Fn,!1);return!e||!e.panel?!1:(n.dispatch({effects:dw.of(!1)}),!0)},T5=n=>{let e=n.state.field(Fn,!1);if(!e)return!1;let t=n.state.selection.main,r=e.diagnostics.iter(t.to+1);return!r.value&&(r=e.diagnostics.iter(0),!r.value||r.from==t.from&&r.to==t.to)?!1:(n.dispatch({selection:{anchor:r.from,head:r.to},scrollIntoView:!0}),!0)};var mA=[{key:"Mod-Shift-m",run:I5,preventDefault:!0},{key:"F8",run:T5}];var hu=G.define({combine(n){return Object.assign({sources:n.map(e=>e.source).filter(e=>e!=null)},$t(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{needsRefresh:(e,t)=>e?t?r=>e(r)||t(r):e:t}))}});function yA(n){let e=[];if(n)e:for(let{name:t}of n){for(let r=0;ro.toLowerCase()==i.toLowerCase())){e.push(i);continue e}}e.push("")}return e}function vA(n,e,t){var r;let i=t?yA(e.actions):[];return Le("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},Le("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(r=e.actions)===null||r===void 0?void 0:r.map((o,s)=>{let l=!1,u=m=>{if(m.preventDefault(),l)return;l=!0;let y=pa(n.state.field(Fn).diagnostics,e);y&&o.apply(n,y.from,y.to)},{name:f}=o,d=i[s]?f.indexOf(i[s]):-1,p=d<0?f:[f.slice(0,d),Le("u",f.slice(d,d+1)),f.slice(d+1)];return Le("button",{type:"button",class:"cm-diagnosticAction",onclick:u,onmousedown:u,"aria-label":` Action: ${f}${d<0?"":` (access key "${i[s]})"`}.`},p)}),e.source&&Le("div",{class:"cm-diagnosticSource"},e.source))}var fw=class extends On{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return Le("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},Sh=class{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=vA(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},pu=class n{constructor(e){this.view=e,this.items=[];let t=i=>{if(i.keyCode==27)hA(this.view),this.view.focus();else if(i.keyCode==38||i.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(i.keyCode==40||i.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(i.keyCode==36)this.moveSelection(0);else if(i.keyCode==35)this.moveSelection(this.items.length-1);else if(i.keyCode==13)this.view.focus();else if(i.keyCode>=65&&i.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:o}=this.items[this.selectedIndex],s=yA(o.actions);for(let l=0;l{for(let o=0;ohA(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(Fn).selected;if(!e)return-1;for(let t=0;t{for(let d of f.diagnostics){if(s.has(d))continue;s.add(d);let p=-1,m;for(let y=r;yr&&(this.items.splice(r,p-r),i=!0)),t&&m.diagnostic==t.diagnostic?m.dom.hasAttribute("aria-selected")||(m.dom.setAttribute("aria-selected","true"),o=m):m.dom.hasAttribute("aria-selected")&&m.dom.removeAttribute("aria-selected"),r++}});r({sel:o.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:u})=>{let f=u.height/this.list.offsetHeight;l.topu.bottom&&(this.list.scrollTop+=(l.bottom-u.bottom)/f)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),i&&this.sync()}sync(){let e=this.list.firstChild;function t(){let r=e;e=r.nextSibling,r.remove()}for(let r of this.items)if(r.dom.parentNode==this.list){for(;e!=r.dom;)t();e=r.dom.nextSibling}else this.list.insertBefore(r.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(Fn),r=pa(t.diagnostics,this.items[e].diagnostic);r&&this.view.dispatch({selection:{anchor:r.from,head:r.to},scrollIntoView:!0,effects:gA.of(r)})}static open(e){return new n(e)}};function A5(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function Ch(n){return A5(``,'width="6" height="3"')}var k5=oe.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:Ch("#d11")},".cm-lintRange-warning":{backgroundImage:Ch("orange")},".cm-lintRange-info":{backgroundImage:Ch("#999")},".cm-lintRange-hint":{backgroundImage:Ch("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});function N5(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function O5(n){let e="hint",t=1;for(let r of n){let i=N5(r.severity);i>t&&(t=i,e=r.severity)}return e}var R5=[Fn,oe.decorations.compute([Fn],n=>{let{selected:e,panel:t}=n.field(Fn);return!e||!t||e.from==e.to?J.none:J.set([E5.range(e.from,e.to)])}),uI(_5,{hideOn:x5}),k5];var Eh=[dI(),hI(),oI(),oT(),OI(),tI(),iI(),pt.allowMultipleSelections.of(!0),SI(),PI(FI,{fallback:!0}),HI(),aA(),dA(),aI(),lI(),sI(),UT(),Ql.of([...cA,...RT,...GT,...uT,...AI,...cw,...mA])];var Xi=$p(hw()),Ji=$p(bA());var en=$p(hw()),DA=[{name:"Request without headers and body",message:["GET /features?p1=v1%3B&p2= HTTP/1.1","host: www.example.com","",""].join(en.consts.EOL)},{name:"Request without body",message:["GET https://foo.com/bar HTTP/1.1","host: example.com","connection: ","accept: */*","accept-Encoding: gzip,deflate","accept-language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4","user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0",'generated-by: "modern-framework 2020"','Sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"',"Authorization: AWS4-HMAC-SHA256 Credential=CRED/20210118/eu-west-1/s3/aws4_request, SignedHeaders=host;x-amz-acl;x-amz-user-agent, Signature=fb1e6017a1d","",""].join(en.consts.EOL)},{name:"Request with cookies and without body",message:["GET /features HTTP/1.1","Host: example.com:8080","Connection: ","Accept: */*","Accept-Encoding: gzip,deflate","Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4","Cookie: csrftoken=123abc;sessionid=sd=456def%3B;userid=","",""].join(en.consts.EOL)},{name:"Request with body of contentType=text/plain",message:["POST /features HTTP/1.1","Host: example.com","Connection: keep-alive","Accept: */*","Accept-Encoding: gzip,deflate","Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4","Content-Type: text/plain; charset=UTF-8","Content-Encoding: gzip,deflate","Content-Length: 301","","Text data"].join(en.consts.EOL)},{name:"Request with body of contentType=application/x-www-form-urlencoded",message:["POST /features HTTP/1.1","Host: example.com","Connection: keep-alive","Accept: */*","Accept-Encoding: gzip,deflate","Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4","Content-Type: application/x-www-form-urlencoded; charset=UTF-8","Content-Encoding: gzip,deflate","Content-Length: 301","","firstName=John&lastName=&age=25%3B"].join(en.consts.EOL)},{name:"Request with body of contentType=multipart/form-data",message:["POST /features HTTP/1.1","Host: example.com","Connection: keep-alive","Accept: */*","Accept-Encoding: gzip,deflate","Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",'Content-Type: multipart/form-data; boundary="111362:53119209"',"Content-Encoding: gzip,deflate","Content-Length: 301","","--111362:53119209",'Content-Disposition: form-data; name="user.data[firstName]"',"","John","--111362:53119209",'Content-Disposition: form-data; name="photo"; filename="photo1.jpg"',"Content-Type: application/octet-stream","","","--111362:53119209",'Content-Disposition: form-data; name="bio"',"Content-Type: text/plain","","some info","more info","","--111362:53119209--"].join(en.consts.EOL)},{name:"Request with body of contentType=multipart/alternative (inline)",message:["POST /features HTTP/1.1","Host: example.com","Connection: keep-alive","Accept: */*","Accept-Encoding: gzip,deflate","Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",'Content-Type: multipart/alternative; boundary="111362-53119209"',"Content-Encoding: gzip,deflate","Content-Length: 301","","--111362-53119209","Content-Disposition: inline","","","--111362-53119209--"].join(en.consts.EOL)},{name:"Request with body of contentType=multipart/mixed (attachment)",message:["POST /features HTTP/1.1","Host: example.com","Connection: keep-alive","Accept: */*","Accept-Encoding: gzip,deflate","Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",'Content-Type: multipart/mixed; boundary="11136253119209"',"Content-Encoding: gzip,deflate","Content-Length: 301","","--11136253119209",'Content-Disposition: attachment; filename="photo1.jpg"',"Content-Type: application/octet-stream","","","--11136253119209--"].join(en.consts.EOL)},{name:"Request with transferEncoding=chunked",message:["POST /features HTTP/1.1","Host: example.com","Connection: keep-alive","Accept: */*","Accept-Encoding: gzip, deflate","Accept-Language: ru-RU, ru;q=0.8, en-US;q=0.6, en;q=0.4","Content-Type: text/plain;charset=UTF-8","Content-Encoding: gzip, deflate","Transfer-Encoding: chunked","","19","The Transfer-Encoding hea","19","der specifies the form of","19"," encoding used to safely ","19","transfer the payload body","C"," to the user"].join(en.consts.EOL)},{name:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",message:"",isSeparator:!0},{name:"Response without headers and body",message:["HTTP/1.1 204 No content","",""].join(en.consts.EOL)},{name:"Response without body (header names in lower case)",message:["HTTP/1.1 201 Created","connection: ","cache-Control: no-cache","Content-type: text/plain; charset=UTF-8","content-encoding: gzip,deflate","",""].join(en.consts.EOL)},{name:"Response without cookies and body",message:["HTTP/1.1 201 Created","Connection: ","Cache-Control: no-cache","Content-Type: text/plain; charset=UTF-8","Content-Encoding: gzip,deflate","Set-Cookie: csrftoken=123abc","Set-Cookie: sessionid=456def; Domain=example.com; Path=/","Set-Cookie: username=smith; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly","",""].join(en.consts.EOL)},{name:"Response with body of contentType=text/plain",message:["HTTP/1.1 200 Ok","Connection: keep-alive","Cache-Control: no-cache","Content-Type: text/plain; charset=UTF-8","Content-Encoding: gzip,deflate","Content-Length: 301","","Text data"].join(en.consts.EOL)},{name:"Response with transferEncoding=chunked",message:["HTTP/1.1 200 Ok","Connection: keep-alive","Cache-Control: no-cache","Content-Encoding: gzip, deflate","Content-Type: text/plain;charset=UTF-8","Transfer-Encoding: chunked","","19","The Transfer-Encoding hea","19","der specifies the form of","19"," encoding used to safely ","19","transfer the payload body","C"," to the user"].join(en.consts.EOL)}],CA=[{name:"Request without headers and body",message:`{ + "method": "GET", + "protocolVersion": "HTTP/1.1", + "target": "/features?p1=v1%3B&p2=", + "host": "www.example.com", + "path": "/features", + "headersSize": 62, + "bodySize": 0, + "queryParams": [ + { + "name": "p1", + "value": "v1;" + }, + { + "name": "p2", + "value": "" + } + ], + "headers": [ + { + "name": "Host", + "value": "www.example.com" + } + ] +}`},{name:"Request without body",message:`{ + "method": "GET", + "protocolVersion": "HTTP/1.1", + "target": "https://foo.com/bar", + "host": "example.com", + "path": "/bar", + "headersSize": 529, + "bodySize": 0, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "User-Agent", + "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" + }, + { + "name": "Generated-By", + "value": "modern-framework 2020" + }, + { + "name": "Sec-Ch-Ua", + "value": "\\"Google Chrome\\";v=\\"87\\", \\" Not;A Brand\\";v=\\"99\\", \\"Chromium\\";v=\\"87\\"" + }, + { + "name": "Authorization", + "value": "AWS4-HMAC-SHA256 Credential=CRED/20210118/eu-west-1/s3/aws4_request, SignedHeaders=host;x-amz-acl;x-amz-user-agent, Signature=fb1e6017a1d" + } + ] +}`},{name:"Request with cookies and without body",message:`{ + "method": "GET", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com:8080", + "path": "/features", + "headersSize": 219, + "bodySize": 0, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com:8080" + }, + { + "name": "Connection", + "value": "" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Cookie", + "value": "csrftoken=123abc;sessionid=sd=456def%3B;userid=" + } + ], + "cookies": [ + { + "name": "csrftoken", + "value": "123abc" + }, + { + "name": "sessionid", + "value": "sd=456def%3B" + }, + { + "name": "userid" + } + ] +}`},{name:"Request with body of contentType=text/plain",message:`{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 262, + "bodySize": 9, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "text/plain", + "text": "Text data" + } +}`},{name:"Request with body of contentType=application/x-www-form-urlencoded",message:`{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 285, + "bodySize": 34, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "application/x-www-form-urlencoded; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "application/x-www-form-urlencoded", + "params": [ + { + "name": "firstName", + "value": "John" + }, + { + "name": "lastName", + "value": "" + }, + { + "name": "age", + "value": "25;" + } + ] + } +}`},{name:"Request with body of contentType=multipart/form-data",message:`{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 284, + "bodySize": 367, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "multipart/form-data; boundary=\\"111362:53119209\\"" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "multipart/form-data", + "boundary": "111362:53119209", + "params": [ + { + "value": "John", + "name": "user.data[firstName]" + }, + { + "value": "", + "contentType": "application/octet-stream", + "name": "photo", + "fileName": "photo1.jpg" + }, + { + "value": "some info\\r\\nmore info\\r\\n", + "contentType": "text/plain", + "name": "bio" + } + ] + } +}`},{name:"Request with body of contentType=multipart/alternative (inline)",message:`{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 286, + "bodySize": 84, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\\"111362-53119209\\"" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "multipart/alternative", + "boundary": "111362-53119209", + "params": [ + { + "value": "", + "type": "inline" + } + ] + } +}`},{name:"Request with body of contentType=multipart/mixed (attachment)",message:`{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 279, + "bodySize": 149, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "multipart/mixed; boundary=\\"11136253119209\\"" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "multipart/mixed", + "boundary": "11136253119209", + "params": [ + { + "value": "", + "type": "attachment", + "contentType": "application/octet-stream", + "fileName": "photo1.jpg" + } + ] + } +}`},{name:"Request with transferEncoding=chunked",message:`{ + "method": "POST", + "protocolVersion": "HTTP/1.1", + "target": "/features", + "host": "example.com", + "path": "/features", + "headersSize": 269, + "bodySize": 140, + "queryParams": [], + "headers": [ + { + "name": "Host", + "value": "example.com" + }, + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Accept", + "value": "*/*" + }, + { + "name": "Accept-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Accept-Language", + "value": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + } + ], + "body": { + "contentType": "text/plain", + "text": "The Transfer-Encoding header specifies the form of encoding used to safely transfer the payload body to the user" + } +}`},{name:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",message:"",isSeparator:!0},{name:"Response without headers and body",message:`{ + "protocolVersion": "HTTP/1.1", + "statusCode": 204, + "statusMessage": "No content", + "headersSize": 27, + "bodySize": 0, + "headers": [] +}`},{name:"Response without body (header names in lower case)",message:`{ + "protocolVersion": "HTTP/1.1", + "statusCode": 201, + "statusMessage": "Created", + "headersSize": 136, + "bodySize": 0, + "headers": [ + { + "name": "Connection", + "value": "" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + } + ] +}`},{name:"Response without cookies and body",message:`{ + "protocolVersion": "HTTP/1.1", + "statusCode": 201, + "statusMessage": "Created", + "headersSize": 309, + "bodySize": 0, + "headers": [ + { + "name": "Connection", + "value": "" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Set-Cookie", + "value": "csrftoken=123abc" + }, + { + "name": "Set-Cookie", + "value": "sessionid=456def; Domain=example.com; Path=/" + }, + { + "name": "Set-Cookie", + "value": "username=smith; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly" + } + ], + "cookies": [ + { + "name": "csrftoken", + "value": "123abc" + }, + { + "name": "sessionid", + "value": "456def", + "params": [ + "Domain=example.com", + "Path=/" + ] + }, + { + "name": "username", + "value": "smith", + "params": [ + "Expires=Wed, 21 Oct 2015 07:28:00 GMT", + "Secure", + "HttpOnly" + ] + } + ] +}`},{name:"Response with body of contentType=text/plain",message:`{ + "protocolVersion": "HTTP/1.1", + "statusCode": 200, + "statusMessage": "Ok", + "headersSize": 162, + "bodySize": 9, + "headers": [ + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Content-Length", + "value": "301" + } + ], + "body": { + "contentType": "text/plain", + "text": "Text data" + } +}`},{name:"Response with transferEncoding=chunked",message:`{ + "protocolVersion": "HTTP/1.1", + "statusCode": 200, + "statusMessage": "Ok", + "headersSize": 169, + "bodySize": 140, + "headers": [ + { + "name": "Connection", + "value": "keep-alive" + }, + { + "name": "Cache-Control", + "value": "no-cache" + }, + { + "name": "Content-Type", + "value": "text/plain; charset=UTF-8" + }, + { + "name": "Content-Encoding", + "value": "gzip,deflate" + }, + { + "name": "Transfer-Encoding", + "value": "chunked" + } + ], + "body": { + "contentType": "text/plain", + "text": "The Transfer-Encoding header specifies the form of encoding used to safely transfer the payload body to the user" + } +}`}];var P5=["input"],F5=["output"];function L5(n,e){if(n&1&&(dt(0,"option",25),Nt(1),ht()),n&2){let t=e.$implicit;Hs("ngValue",t)("disabled",t.isSeparator),Xn(),sl(t.name)}}function V5(n,e){if(n&1&&(dt(0,"span",26),Nt(1),ht()),n&2){let t=Ym();Xn(),sl(t.inputSuccess)}}function B5(n,e){if(n&1&&(dt(0,"span",27),Nt(1),ht()),n&2){let t=Ym();Xn(),sl(t.inputError)}}var Mh=class n{selectedOperation="parse";selectedSample;samples=[];cmInputEditor;cmOutputEditor;inputSuccess="";inputError="";libVersion=Xi.utils.getLibVersion();input;output;ngAfterViewInit(){this.cmInputEditor=this._createCmEditor(this.input.nativeElement),this.cmOutputEditor=this._createCmEditor(this.output.nativeElement),this._setOperation()}selectOperation(){this._setOperation()}selectSample(){this._setCmEditorText(this.cmInputEditor,this.selectedSample.message),this.exec()}exec(){this._clearMessages(),(this.selectedOperation==="parse"?this._parse():this._build())&&(this.inputSuccess="Success")}_parse(){let e=this.cmInputEditor.state.doc.toString(),t=this._getPlainFromInput(e),r=(0,Ji.attempt)(Xi.parse.bind(Xi,t));if((0,Ji.isError)(r))return this.inputError=r.message,!1;let i=JSON.stringify(r,null," ");return this._setCmEditorText(this.cmOutputEditor,i),!0}_build(){let e=this.cmInputEditor.state.doc.toString(),t=(0,Ji.attempt)(JSON.parse.bind(JSON,e));if((0,Ji.isError)(t))return this.inputError=t.message,!1;let r=(0,Ji.attempt)(Xi.build.bind(Xi,t));return(0,Ji.isError)(r)?(this.inputError=r.message,!1):(this._setCmEditorText(this.cmOutputEditor,r),!0)}_setOperation(){let e;this.selectedOperation==="parse"?(this.cmInputEditor.setState(this._createCmHttpState()),this.cmOutputEditor.setState(this._createCmJsonState(!0)),e=DA):(this.cmInputEditor.setState(this._createCmJsonState()),this.cmOutputEditor.setState(this._createCmHttpState(!0)),e=CA),this.samples.splice(0,this.samples.length),this.samples.push(...e),setTimeout(()=>{this.selectedSample=e[0],this.selectSample()})}_createCmEditor(e){return new oe({parent:e,state:pt.create({extensions:[Eh]})})}_createCmHttpState(e=!1){let t=[Eh,Wd.define(GI)];return e&&t.push(this._createCmStateReadonly()),pt.create({doc:"",extensions:t})}_createCmJsonState(e=!1){let t=[Eh,WI()];return e&&t.push(this._createCmStateReadonly()),pt.create({doc:"",extensions:t})}_createCmStateReadonly(){return new ta().of(pt.readOnly.of(!0))}_setCmEditorText(e,t){e.dispatch({changes:{from:0,to:e.state.doc.length,insert:t}})}_getPlainFromInput(e){return e.replace(/\r\n/g,` +`).replace(/\n/g,`\r +`)}_clearMessages(){this.inputSuccess="",this.inputError=""}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=bE({type:n,selectors:[["app-root"]],viewQuery:function(t,r){if(t&1&&(Qm(P5,5),Qm(F5,5)),t&2){let i;Jm(i=Xm())&&(r.input=i.first),Jm(i=Xm())&&(r.output=i.first)}},decls:49,vars:8,consts:[["input",""],["output",""],[1,"text-center","mt-2"],[2,"position","absolute","right","1em","top","1.0em"],["href","https://github.com/AlexanderMac/http-z"],[1,"container"],[1,"row","mb-3"],["for","operation",1,"col-lg-2","col-form-label"],[1,"col-lg-10"],["id","operation",1,"form-control",3,"ngModelChange","change","ngModel"],["value","parse"],["value","build"],["for","samples",1,"col-lg-2","col-form-label"],["id","samples",1,"form-control",3,"ngModelChange","change","ngModel"],[3,"ngValue","disabled",4,"ngFor","ngForOf"],[1,"row"],[1,"col-lg-6"],[1,"text-body-secondary","ms-1"],[1,"cm"],[1,"col"],[1,"me-1"],["class","text-success",4,"ngIf"],["class","text-danger",4,"ngIf"],[1,"col","d-grid","gap-2"],[1,"btn","btn-primary",3,"click"],[3,"ngValue","disabled"],[1,"text-success"],[1,"text-danger"]],template:function(t,r){if(t&1){let i=ME();dt(0,"h1",2),Nt(1,"HttpZ demo"),ht(),dt(2,"div",3)(3,"a",4),Nt(4,"GitHub Repo"),ht(),dt(5,"div"),Nt(6),ht()(),ol(7,"hr"),dt(8,"div",5)(9,"div",6)(10,"label",7),Nt(11,"Operation"),ht(),dt(12,"div",8)(13,"select",9),Df("ngModelChange",function(s){return Ns(i),ey(r.selectedOperation,s)||(r.selectedOperation=s),Os(s)}),ai("change",function(){return Ns(i),Os(r.selectOperation())}),dt(14,"option",10),Nt(15,"Parse (plain to model)"),ht(),dt(16,"option",11),Nt(17,"Build (model to plain)"),ht()()()(),dt(18,"div",6)(19,"label",12),Nt(20,"Samples"),ht(),dt(21,"div",8)(22,"select",13),Df("ngModelChange",function(s){return Ns(i),ey(r.selectedSample,s)||(r.selectedSample=s),Os(s)}),ai("change",function(){return Ns(i),Os(r.selectSample())}),wf(23,L5,2,3,"option",14),ht()()(),dt(24,"div",15)(25,"div",16)(26,"h3"),Nt(27,"Input"),dt(28,"small",17),Nt(29),ht()(),ol(30,"div",18,0),ht(),dt(32,"div",16)(33,"h3"),Nt(34,"Output"),dt(35,"small",17),Nt(36),ht()(),ol(37,"div",18,1),ht()(),dt(39,"div",6)(40,"div",19)(41,"strong",20),Nt(42,"Status:"),ht(),wf(43,V5,2,1,"span",21)(44,B5,2,1,"span",22),ht()(),dt(45,"div",15)(46,"div",23)(47,"button",24),ai("click",function(){return Ns(i),Os(r.exec())}),Nt(48," Execute"),ht()()()()}t&2&&(Xn(6),js("v",r.libVersion,""),Xn(7),bf("ngModel",r.selectedOperation),Xn(9),bf("ngModel",r.selectedSample),Xn(),Hs("ngForOf",r.samples),Xn(6),js("(",r.selectedOperation==="parse"?"Plain HTTP Message":"Model",")"),Xn(7),js("(",r.selectedOperation==="parse"?"Model":"Plain HTTP Message",")"),Xn(7),Hs("ngIf",r.inputSuccess),Xn(),Hs("ngIf",r.inputError))},dependencies:[sy,HE,jE,x1,b1,C1,Ff,m1,Dy],encapsulation:2})};var xA={providers:[kE({eventCoalescing:!0})]};JE(Mh,xA).catch(n=>console.error(n)); diff --git a/docs/polyfills-SC4UBBZS.js b/docs/polyfills-SC4UBBZS.js new file mode 100644 index 0000000..b01b791 --- /dev/null +++ b/docs/polyfills-SC4UBBZS.js @@ -0,0 +1,2 @@ +var ce=globalThis;function te(e){return(ce.__Zone_symbol_prefix||"__zone_symbol__")+e}function dt(){let e=ce.performance;function n(M){e&&e.mark&&e.mark(M)}function a(M,s){e&&e.measure&&e.measure(M,s)}n("Zone");class t{static{this.__symbol__=te}static assertZonePatched(){if(ce.Promise!==S.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let s=t.current;for(;s.parent;)s=s.parent;return s}static get current(){return b.zone}static get currentTask(){return D}static __load_patch(s,i,o=!1){if(S.hasOwnProperty(s)){let g=ce[te("forceDuplicateZoneCheck")]===!0;if(!o&&g)throw Error("Already loaded patch: "+s)}else if(!ce["__Zone_disable_"+s]){let g="Zone:"+s;n(g),S[s]=i(ce,t,w),a(g,g)}}get parent(){return this._parent}get name(){return this._name}constructor(s,i){this._parent=s,this._name=i?i.name||"unnamed":"",this._properties=i&&i.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,i)}get(s){let i=this.getZoneWith(s);if(i)return i._properties[s]}getZoneWith(s){let i=this;for(;i;){if(i._properties.hasOwnProperty(s))return i;i=i._parent}return null}fork(s){if(!s)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,s)}wrap(s,i){if(typeof s!="function")throw new Error("Expecting function got: "+s);let o=this._zoneDelegate.intercept(this,s,i),g=this;return function(){return g.runGuarded(o,this,arguments,i)}}run(s,i,o,g){b={parent:b,zone:this};try{return this._zoneDelegate.invoke(this,s,i,o,g)}finally{b=b.parent}}runGuarded(s,i=null,o,g){b={parent:b,zone:this};try{try{return this._zoneDelegate.invoke(this,s,i,o,g)}catch(V){if(this._zoneDelegate.handleError(this,V))throw V}}finally{b=b.parent}}runTask(s,i,o){if(s.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(s.zone||J).name+"; Execution: "+this.name+")");let g=s,{type:V,data:{isPeriodic:ee=!1,isRefreshable:Z=!1}={}}=s;if(s.state===q&&(V===z||V===y))return;let he=s.state!=A;he&&g._transitionTo(A,d);let _e=D;D=g,b={parent:b,zone:this};try{V==y&&s.data&&!ee&&!Z&&(s.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,g,i,o)}catch(Q){if(this._zoneDelegate.handleError(this,Q))throw Q}}finally{let Q=s.state;if(Q!==q&&Q!==X)if(V==z||ee||Z&&Q===k)he&&g._transitionTo(d,A,k);else{let Ee=g._zoneDelegates;this._updateTaskCount(g,-1),he&&g._transitionTo(q,A,q),Z&&(g._zoneDelegates=Ee)}b=b.parent,D=_e}}scheduleTask(s){if(s.zone&&s.zone!==this){let o=this;for(;o;){if(o===s.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${s.zone.name}`);o=o.parent}}s._transitionTo(k,q);let i=[];s._zoneDelegates=i,s._zone=this;try{s=this._zoneDelegate.scheduleTask(this,s)}catch(o){throw s._transitionTo(X,k,q),this._zoneDelegate.handleError(this,o),o}return s._zoneDelegates===i&&this._updateTaskCount(s,1),s.state==k&&s._transitionTo(d,k),s}scheduleMicroTask(s,i,o,g){return this.scheduleTask(new E(G,s,i,o,g,void 0))}scheduleMacroTask(s,i,o,g,V){return this.scheduleTask(new E(y,s,i,o,g,V))}scheduleEventTask(s,i,o,g,V){return this.scheduleTask(new E(z,s,i,o,g,V))}cancelTask(s){if(s.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(s.zone||J).name+"; Execution: "+this.name+")");if(!(s.state!==d&&s.state!==A)){s._transitionTo(x,d,A);try{this._zoneDelegate.cancelTask(this,s)}catch(i){throw s._transitionTo(X,x),this._zoneDelegate.handleError(this,i),i}return this._updateTaskCount(s,-1),s._transitionTo(q,x),s.runCount=-1,s}}_updateTaskCount(s,i){let o=s._zoneDelegates;i==-1&&(s._zoneDelegates=null);for(let g=0;gM.hasTask(i,o),onScheduleTask:(M,s,i,o)=>M.scheduleTask(i,o),onInvokeTask:(M,s,i,o,g,V)=>M.invokeTask(i,o,g,V),onCancelTask:(M,s,i,o)=>M.cancelTask(i,o)};class f{get zone(){return this._zone}constructor(s,i,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this._zone=s,this._parentDelegate=i,this._forkZS=o&&(o&&o.onFork?o:i._forkZS),this._forkDlgt=o&&(o.onFork?i:i._forkDlgt),this._forkCurrZone=o&&(o.onFork?this._zone:i._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:i._interceptZS),this._interceptDlgt=o&&(o.onIntercept?i:i._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this._zone:i._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:i._invokeZS),this._invokeDlgt=o&&(o.onInvoke?i:i._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this._zone:i._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:i._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?i:i._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this._zone:i._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:i._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?i:i._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this._zone:i._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:i._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?i:i._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this._zone:i._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:i._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?i:i._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this._zone:i._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let g=o&&o.onHasTask,V=i&&i._hasTaskZS;(g||V)&&(this._hasTaskZS=g?o:c,this._hasTaskDlgt=i,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,o.onScheduleTask||(this._scheduleTaskZS=c,this._scheduleTaskDlgt=i,this._scheduleTaskCurrZone=this._zone),o.onInvokeTask||(this._invokeTaskZS=c,this._invokeTaskDlgt=i,this._invokeTaskCurrZone=this._zone),o.onCancelTask||(this._cancelTaskZS=c,this._cancelTaskDlgt=i,this._cancelTaskCurrZone=this._zone))}fork(s,i){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,s,i):new t(s,i)}intercept(s,i,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,s,i,o):i}invoke(s,i,o,g,V){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,s,i,o,g,V):i.apply(o,g)}handleError(s,i){return this._handleErrorZS?this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,s,i):!0}scheduleTask(s,i){let o=i;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,s,i),o||(o=i);else if(i.scheduleFn)i.scheduleFn(i);else if(i.type==G)U(i);else throw new Error("Task is missing scheduleFn.");return o}invokeTask(s,i,o,g){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,s,i,o,g):i.callback.apply(o,g)}cancelTask(s,i){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,s,i);else{if(!i.cancelFn)throw Error("Task is not cancelable");o=i.cancelFn(i)}return o}hasTask(s,i){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,s,i)}catch(o){this.handleError(s,o)}}_updateTaskCount(s,i){let o=this._taskCounts,g=o[s],V=o[s]=g+i;if(V<0)throw new Error("More tasks executed then were scheduled.");if(g==0||V==0){let ee={microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:s};this.hasTask(this._zone,ee)}}}class E{constructor(s,i,o,g,V,ee){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=s,this.source=i,this.data=g,this.scheduleFn=V,this.cancelFn=ee,!o)throw new Error("callback is not defined");this.callback=o;let Z=this;s===z&&g&&g.useG?this.invoke=E.invokeTask:this.invoke=function(){return E.invokeTask.call(ce,Z,this,arguments)}}static invokeTask(s,i,o){s||(s=this),K++;try{return s.runCount++,s.zone.runTask(s,i,o)}finally{K==1&&$(),K--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(q,k)}_transitionTo(s,i,o){if(this._state===i||this._state===o)this._state=s,s==q&&(this._zoneDelegates=null);else throw new Error(`${this.type} '${this.source}': can not transition to '${s}', expecting state '${i}'${o?" or '"+o+"'":""}, was '${this._state}'.`)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let T=te("setTimeout"),p=te("Promise"),C=te("then"),_=[],P=!1,I;function H(M){if(I||ce[p]&&(I=ce[p].resolve(0)),I){let s=I[C];s||(s=I.then),s.call(I,M)}else ce[T](M,0)}function U(M){K===0&&_.length===0&&H($),M&&_.push(M)}function $(){if(!P){for(P=!0;_.length;){let M=_;_=[];for(let s=0;sb,onUnhandledError:W,microtaskDrainDone:W,scheduleMicroTask:U,showUncaughtError:()=>!t[te("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:W,patchMethod:()=>W,bindArguments:()=>[],patchThen:()=>W,patchMacroTask:()=>W,patchEventPrototype:()=>W,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>W,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>W,wrapWithCurrentZone:()=>W,filterProperties:()=>[],attachOriginToPatched:()=>W,_redefineProperty:()=>W,patchCallbacks:()=>W,nativeScheduleMicroTask:H},b={parent:null,zone:new t(null,null)},D=null,K=0;function W(){}return a("Zone","Zone"),t}function _t(){let e=globalThis,n=e[te("forceDuplicateZoneCheck")]===!0;if(e.Zone&&(n||typeof e.Zone.__symbol__!="function"))throw new Error("Zone already loaded.");return e.Zone??=dt(),e.Zone}var be=Object.getOwnPropertyDescriptor,Ae=Object.defineProperty,je=Object.getPrototypeOf,Et=Object.create,Tt=Array.prototype.slice,He="addEventListener",xe="removeEventListener",Le=te(He),Ie=te(xe),ae="true",le="false",Pe=te("");function Ve(e,n){return Zone.current.wrap(e,n)}function Ge(e,n,a,t,c){return Zone.current.scheduleMacroTask(e,n,a,t,c)}var j=te,De=typeof window<"u",pe=De?window:void 0,Y=De&&pe||globalThis,gt="removeAttribute";function Fe(e,n){for(let a=e.length-1;a>=0;a--)typeof e[a]=="function"&&(e[a]=Ve(e[a],n+"_"+a));return e}function yt(e,n){let a=e.constructor.name;for(let t=0;t{let p=function(){return T.apply(this,Fe(arguments,a+"."+c))};return fe(p,T),p})(f)}}}function tt(e){return e?e.writable===!1?!1:!(typeof e.get=="function"&&typeof e.set>"u"):!0}var nt=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Se=!("nw"in Y)&&typeof Y.process<"u"&&Y.process.toString()==="[object process]",Be=!Se&&!nt&&!!(De&&pe.HTMLElement),rt=typeof Y.process<"u"&&Y.process.toString()==="[object process]"&&!nt&&!!(De&&pe.HTMLElement),Ce={},mt=j("enable_beforeunload"),Ye=function(e){if(e=e||Y.event,!e)return;let n=Ce[e.type];n||(n=Ce[e.type]=j("ON_PROPERTY"+e.type));let a=this||e.target||Y,t=a[n],c;if(Be&&a===pe&&e.type==="error"){let f=e;c=t&&t.call(this,f.message,f.filename,f.lineno,f.colno,f.error),c===!0&&e.preventDefault()}else c=t&&t.apply(this,arguments),e.type==="beforeunload"&&Y[mt]&&typeof c=="string"?e.returnValue=c:c!=null&&!c&&e.preventDefault();return c};function $e(e,n,a){let t=be(e,n);if(!t&&a&&be(a,n)&&(t={enumerable:!0,configurable:!0}),!t||!t.configurable)return;let c=j("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete t.writable,delete t.value;let f=t.get,E=t.set,T=n.slice(2),p=Ce[T];p||(p=Ce[T]=j("ON_PROPERTY"+T)),t.set=function(C){let _=this;if(!_&&e===Y&&(_=Y),!_)return;typeof _[p]=="function"&&_.removeEventListener(T,Ye),E&&E.call(_,null),_[p]=C,typeof C=="function"&&_.addEventListener(T,Ye,!1)},t.get=function(){let C=this;if(!C&&e===Y&&(C=Y),!C)return null;let _=C[p];if(_)return _;if(f){let P=f.call(this);if(P)return t.set.call(this,P),typeof C[gt]=="function"&&C.removeAttribute(n),P}return null},Ae(e,n,t),e[c]=!0}function ot(e,n,a){if(n)for(let t=0;tfunction(E,T){let p=a(E,T);return p.cbIdx>=0&&typeof T[p.cbIdx]=="function"?Ge(p.name,T[p.cbIdx],p,c):f.apply(E,T)})}function fe(e,n){e[j("OriginalDelegate")]=n}var Je=!1,Me=!1;function kt(){try{let e=pe.navigator.userAgent;if(e.indexOf("MSIE ")!==-1||e.indexOf("Trident/")!==-1)return!0}catch{}return!1}function vt(){if(Je)return Me;Je=!0;try{let e=pe.navigator.userAgent;(e.indexOf("MSIE ")!==-1||e.indexOf("Trident/")!==-1||e.indexOf("Edge/")!==-1)&&(Me=!0)}catch{}return Me}function Ke(e){return typeof e=="function"}function Qe(e){return typeof e=="number"}var me=!1;if(typeof window<"u")try{let e=Object.defineProperty({},"passive",{get:function(){me=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch{me=!1}var bt={useG:!0},ne={},st={},it=new RegExp("^"+Pe+"(\\w+)(true|false)$"),ct=j("propagationStopped");function at(e,n){let a=(n?n(e):e)+le,t=(n?n(e):e)+ae,c=Pe+a,f=Pe+t;ne[e]={},ne[e][le]=c,ne[e][ae]=f}function Pt(e,n,a,t){let c=t&&t.add||He,f=t&&t.rm||xe,E=t&&t.listeners||"eventListeners",T=t&&t.rmAll||"removeAllListeners",p=j(c),C="."+c+":",_="prependListener",P="."+_+":",I=function(k,d,A){if(k.isRemoved)return;let x=k.callback;typeof x=="object"&&x.handleEvent&&(k.callback=y=>x.handleEvent(y),k.originalDelegate=x);let X;try{k.invoke(k,d,[A])}catch(y){X=y}let G=k.options;if(G&&typeof G=="object"&&G.once){let y=k.originalDelegate?k.originalDelegate:k.callback;d[f].call(d,A.type,y,G)}return X};function H(k,d,A){if(d=d||e.event,!d)return;let x=k||d.target||e,X=x[ne[d.type][A?ae:le]];if(X){let G=[];if(X.length===1){let y=I(X[0],x,d);y&&G.push(y)}else{let y=X.slice();for(let z=0;z{throw z})}}}let U=function(k){return H(this,k,!1)},$=function(k){return H(this,k,!0)};function J(k,d){if(!k)return!1;let A=!0;d&&d.useG!==void 0&&(A=d.useG);let x=d&&d.vh,X=!0;d&&d.chkDup!==void 0&&(X=d.chkDup);let G=!1;d&&d.rt!==void 0&&(G=d.rt);let y=k;for(;y&&!y.hasOwnProperty(c);)y=je(y);if(!y&&k[c]&&(y=k),!y||y[p])return!1;let z=d&&d.eventNameToString,S={},w=y[p]=y[c],b=y[j(f)]=y[f],D=y[j(E)]=y[E],K=y[j(T)]=y[T],W;d&&d.prepend&&(W=y[j(d.prepend)]=y[d.prepend]);function M(r,u){return!me&&typeof r=="object"&&r?!!r.capture:!me||!u?r:typeof r=="boolean"?{capture:r,passive:!0}:r?typeof r=="object"&&r.passive!==!1?{...r,passive:!0}:r:{passive:!0}}let s=function(r){if(!S.isExisting)return w.call(S.target,S.eventName,S.capture?$:U,S.options)},i=function(r){if(!r.isRemoved){let u=ne[r.eventName],v;u&&(v=u[r.capture?ae:le]);let R=v&&r.target[v];if(R){for(let m=0;mre.zone.cancelTask(re);r.call(Te,"abort",ie,{once:!0}),re.removeAbortListener=()=>Te.removeEventListener("abort",ie)}if(S.target=null,ke&&(ke.taskData=null),Ue&&(S.options.once=!0),!me&&typeof re.options=="boolean"||(re.options=se),re.target=N,re.capture=Oe,re.eventName=L,B&&(re.originalDelegate=F),O?ge.unshift(re):ge.push(re),m)return N}};return y[c]=l(w,C,ee,Z,G),W&&(y[_]=l(W,P,g,Z,G,!0)),y[f]=function(){let r=this||e,u=arguments[0];d&&d.transferEventName&&(u=d.transferEventName(u));let v=arguments[2],R=v?typeof v=="boolean"?!0:v.capture:!1,m=arguments[1];if(!m)return b.apply(this,arguments);if(x&&!x(b,m,r,arguments))return;let O=ne[u],N;O&&(N=O[R?ae:le]);let L=N&&r[N];if(L)for(let F=0;Ffunction(c,f){c[ct]=!0,t&&t.apply(c,f)})}function Rt(e,n){n.patchMethod(e,"queueMicrotask",a=>function(t,c){Zone.current.scheduleMicroTask("queueMicrotask",c[0])})}var Re=j("zoneTask");function ye(e,n,a,t){let c=null,f=null;n+=t,a+=t;let E={};function T(C){let _=C.data;_.args[0]=function(){return C.invoke.apply(this,arguments)};let P=c.apply(e,_.args);return Qe(P)?_.handleId=P:(_.handle=P,_.isRefreshable=Ke(P.refresh)),C}function p(C){let{handle:_,handleId:P}=C.data;return f.call(e,_??P)}c=ue(e,n,C=>function(_,P){if(Ke(P[0])){let I={isRefreshable:!1,isPeriodic:t==="Interval",delay:t==="Timeout"||t==="Interval"?P[1]||0:void 0,args:P},H=P[0];P[0]=function(){try{return H.apply(this,arguments)}finally{let{handle:A,handleId:x,isPeriodic:X,isRefreshable:G}=I;!X&&!G&&(x?delete E[x]:A&&(A[Re]=null))}};let U=Ge(n,P[0],I,T,p);if(!U)return U;let{handleId:$,handle:J,isRefreshable:q,isPeriodic:k}=U.data;if($)E[$]=U;else if(J&&(J[Re]=U,q&&!k)){let d=J.refresh;J.refresh=function(){let{zone:A,state:x}=U;return x==="notScheduled"?(U._state="scheduled",A._updateTaskCount(U,1)):x==="running"&&(U._state="scheduling"),d.call(this)}}return J??$??U}else return C.apply(e,P)}),f=ue(e,a,C=>function(_,P){let I=P[0],H;Qe(I)?(H=E[I],delete E[I]):(H=I?.[Re],H?I[Re]=null:H=I),H?.type?H.cancelFn&&H.zone.cancelTask(H):C.apply(e,P)})}function Ct(e,n){let{isBrowser:a,isMix:t}=n.getGlobalObjects();if(!a&&!t||!e.customElements||!("customElements"in e))return;let c=["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","formAssociatedCallback","formDisabledCallback","formResetCallback","formStateRestoreCallback"];n.patchCallbacks(n,e.customElements,"customElements","define",c)}function Dt(e,n){if(Zone[n.symbol("patchEventTarget")])return;let{eventNames:a,zoneSymbolEventNames:t,TRUE_STR:c,FALSE_STR:f,ZONE_SYMBOL_PREFIX:E}=n.getGlobalObjects();for(let p=0;pf.target===e);if(!t||t.length===0)return n;let c=t[0].ignoreProperties;return n.filter(f=>c.indexOf(f)===-1)}function et(e,n,a,t){if(!e)return;let c=ut(e,n,a);ot(e,c,t)}function Ze(e){return Object.getOwnPropertyNames(e).filter(n=>n.startsWith("on")&&n.length>2).map(n=>n.substring(2))}function Ot(e,n){if(Se&&!rt||Zone[e.symbol("patchEvents")])return;let a=n.__Zone_ignore_on_properties,t=[];if(Be){let c=window;t=t.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);let f=kt()?[{target:c,ignoreProperties:["error"]}]:[];et(c,Ze(c),a&&a.concat(f),je(c))}t=t.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let c=0;c{let a=n[e.__symbol__("legacyPatch")];a&&a()}),e.__load_patch("timers",n=>{let a="set",t="clear";ye(n,a,t,"Timeout"),ye(n,a,t,"Interval"),ye(n,a,t,"Immediate")}),e.__load_patch("requestAnimationFrame",n=>{ye(n,"request","cancel","AnimationFrame"),ye(n,"mozRequest","mozCancel","AnimationFrame"),ye(n,"webkitRequest","webkitCancel","AnimationFrame")}),e.__load_patch("blocking",(n,a)=>{let t=["alert","prompt","confirm"];for(let c=0;cfunction(C,_){return a.current.run(E,n,_,p)})}}),e.__load_patch("EventTarget",(n,a,t)=>{St(n,t),Dt(n,t);let c=n.XMLHttpRequestEventTarget;c&&c.prototype&&t.patchEventTarget(n,t,[c.prototype])}),e.__load_patch("MutationObserver",(n,a,t)=>{ve("MutationObserver"),ve("WebKitMutationObserver")}),e.__load_patch("IntersectionObserver",(n,a,t)=>{ve("IntersectionObserver")}),e.__load_patch("FileReader",(n,a,t)=>{ve("FileReader")}),e.__load_patch("on_property",(n,a,t)=>{Ot(t,n)}),e.__load_patch("customElements",(n,a,t)=>{Ct(n,t)}),e.__load_patch("XHR",(n,a)=>{C(n);let t=j("xhrTask"),c=j("xhrSync"),f=j("xhrListener"),E=j("xhrScheduled"),T=j("xhrURL"),p=j("xhrErrorBeforeScheduled");function C(_){let P=_.XMLHttpRequest;if(!P)return;let I=P.prototype;function H(w){return w[t]}let U=I[Le],$=I[Ie];if(!U){let w=_.XMLHttpRequestEventTarget;if(w){let b=w.prototype;U=b[Le],$=b[Ie]}}let J="readystatechange",q="scheduled";function k(w){let b=w.data,D=b.target;D[E]=!1,D[p]=!1;let K=D[f];U||(U=D[Le],$=D[Ie]),K&&$.call(D,J,K);let W=D[f]=()=>{if(D.readyState===D.DONE)if(!b.aborted&&D[E]&&w.state===q){let s=D[a.__symbol__("loadfalse")];if(D.status!==0&&s&&s.length>0){let i=w.invoke;w.invoke=function(){let o=D[a.__symbol__("loadfalse")];for(let g=0;gfunction(w,b){return w[c]=b[2]==!1,w[T]=b[1],x.apply(w,b)}),X="XMLHttpRequest.send",G=j("fetchTaskAborting"),y=j("fetchTaskScheduling"),z=ue(I,"send",()=>function(w,b){if(a.current[y]===!0||w[c])return z.apply(w,b);{let D={target:w,url:w[T],isPeriodic:!1,args:b,aborted:!1},K=Ge(X,d,D,k,A);w&&w[p]===!0&&!D.aborted&&K.state===q&&K.invoke()}}),S=ue(I,"abort",()=>function(w,b){let D=H(w);if(D&&typeof D.type=="string"){if(D.cancelFn==null||D.data&&D.data.aborted)return;D.zone.cancelTask(D)}else if(a.current[G]===!0)return S.apply(w,b)})}}),e.__load_patch("geolocation",n=>{n.navigator&&n.navigator.geolocation&&yt(n.navigator.geolocation,["getCurrentPosition","watchPosition"])}),e.__load_patch("PromiseRejectionEvent",(n,a)=>{function t(c){return function(f){lt(n,c).forEach(T=>{let p=n.PromiseRejectionEvent;if(p){let C=new p(c,{promise:f.promise,reason:f.rejection});T.invoke(C)}})}}n.PromiseRejectionEvent&&(a[j("unhandledPromiseRejectionHandler")]=t("unhandledrejection"),a[j("rejectionHandledHandler")]=t("rejectionhandled"))}),e.__load_patch("queueMicrotask",(n,a,t)=>{Rt(n,t)})}function Lt(e){e.__load_patch("ZoneAwarePromise",(n,a,t)=>{let c=Object.getOwnPropertyDescriptor,f=Object.defineProperty;function E(h){if(h&&h.toString===Object.prototype.toString){let l=h.constructor&&h.constructor.name;return(l||"")+": "+JSON.stringify(h)}return h?h.toString():Object.prototype.toString.call(h)}let T=t.symbol,p=[],C=n[T("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")]!==!1,_=T("Promise"),P=T("then"),I="__creationTrace__";t.onUnhandledError=h=>{if(t.showUncaughtError()){let l=h&&h.rejection;l?console.error("Unhandled Promise rejection:",l instanceof Error?l.message:l,"; Zone:",h.zone.name,"; Task:",h.task&&h.task.source,"; Value:",l,l instanceof Error?l.stack:void 0):console.error(h)}},t.microtaskDrainDone=()=>{for(;p.length;){let h=p.shift();try{h.zone.runGuarded(()=>{throw h.throwOriginal?h.rejection:h})}catch(l){U(l)}}};let H=T("unhandledPromiseRejectionHandler");function U(h){t.onUnhandledError(h);try{let l=a[H];typeof l=="function"&&l.call(this,h)}catch{}}function $(h){return h&&h.then}function J(h){return h}function q(h){return Z.reject(h)}let k=T("state"),d=T("value"),A=T("finally"),x=T("parentPromiseValue"),X=T("parentPromiseState"),G="Promise.then",y=null,z=!0,S=!1,w=0;function b(h,l){return r=>{try{M(h,l,r)}catch(u){M(h,!1,u)}}}let D=function(){let h=!1;return function(r){return function(){h||(h=!0,r.apply(null,arguments))}}},K="Promise resolved with itself",W=T("currentTaskTrace");function M(h,l,r){let u=D();if(h===r)throw new TypeError(K);if(h[k]===y){let v=null;try{(typeof r=="object"||typeof r=="function")&&(v=r&&r.then)}catch(R){return u(()=>{M(h,!1,R)})(),h}if(l!==S&&r instanceof Z&&r.hasOwnProperty(k)&&r.hasOwnProperty(d)&&r[k]!==y)i(r),M(h,r[k],r[d]);else if(l!==S&&typeof v=="function")try{v.call(r,u(b(h,l)),u(b(h,!1)))}catch(R){u(()=>{M(h,!1,R)})()}else{h[k]=l;let R=h[d];if(h[d]=r,h[A]===A&&l===z&&(h[k]=h[X],h[d]=h[x]),l===S&&r instanceof Error){let m=a.currentTask&&a.currentTask.data&&a.currentTask.data[I];m&&f(r,W,{configurable:!0,enumerable:!1,writable:!0,value:m})}for(let m=0;m{try{let O=h[d],N=!!r&&A===r[A];N&&(r[x]=O,r[X]=R);let L=l.run(m,void 0,N&&m!==q&&m!==J?[]:[O]);M(r,!0,L)}catch(O){M(r,!1,O)}},r)}let g="function ZoneAwarePromise() { [native code] }",V=function(){},ee=n.AggregateError;class Z{static toString(){return g}static resolve(l){return l instanceof Z?l:M(new this(null),z,l)}static reject(l){return M(new this(null),S,l)}static withResolvers(){let l={};return l.promise=new Z((r,u)=>{l.resolve=r,l.reject=u}),l}static any(l){if(!l||typeof l[Symbol.iterator]!="function")return Promise.reject(new ee([],"All promises were rejected"));let r=[],u=0;try{for(let m of l)u++,r.push(Z.resolve(m))}catch{return Promise.reject(new ee([],"All promises were rejected"))}if(u===0)return Promise.reject(new ee([],"All promises were rejected"));let v=!1,R=[];return new Z((m,O)=>{for(let N=0;N{v||(v=!0,m(L))},L=>{R.push(L),u--,u===0&&(v=!0,O(new ee(R,"All promises were rejected")))})})}static race(l){let r,u,v=new this((O,N)=>{r=O,u=N});function R(O){r(O)}function m(O){u(O)}for(let O of l)$(O)||(O=this.resolve(O)),O.then(R,m);return v}static all(l){return Z.allWithCallback(l)}static allSettled(l){return(this&&this.prototype instanceof Z?this:Z).allWithCallback(l,{thenCallback:u=>({status:"fulfilled",value:u}),errorCallback:u=>({status:"rejected",reason:u})})}static allWithCallback(l,r){let u,v,R=new this((L,F)=>{u=L,v=F}),m=2,O=0,N=[];for(let L of l){$(L)||(L=this.resolve(L));let F=O;try{L.then(B=>{N[F]=r?r.thenCallback(B):B,m--,m===0&&u(N)},B=>{r?(N[F]=r.errorCallback(B),m--,m===0&&u(N)):v(B)})}catch(B){v(B)}m++,O++}return m-=2,m===0&&u(N),R}constructor(l){let r=this;if(!(r instanceof Z))throw new Error("Must be an instanceof Promise.");r[k]=y,r[d]=[];try{let u=D();l&&l(u(b(r,z)),u(b(r,S)))}catch(u){M(r,!1,u)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return Z}then(l,r){let u=this.constructor?.[Symbol.species];(!u||typeof u!="function")&&(u=this.constructor||Z);let v=new u(V),R=a.current;return this[k]==y?this[d].push(R,v,l,r):o(this,R,v,l,r),v}catch(l){return this.then(null,l)}finally(l){let r=this.constructor?.[Symbol.species];(!r||typeof r!="function")&&(r=Z);let u=new r(V);u[A]=A;let v=a.current;return this[k]==y?this[d].push(v,u,l,l):o(this,v,u,l,l),u}}Z.resolve=Z.resolve,Z.reject=Z.reject,Z.race=Z.race,Z.all=Z.all;let he=n[_]=n.Promise;n.Promise=Z;let _e=T("thenPatched");function Q(h){let l=h.prototype,r=c(l,"then");if(r&&(r.writable===!1||!r.configurable))return;let u=l.then;l[P]=u,h.prototype.then=function(v,R){return new Z((O,N)=>{u.call(this,O,N)}).then(v,R)},h[_e]=!0}t.patchThen=Q;function Ee(h){return function(l,r){let u=h.apply(l,r);if(u instanceof Z)return u;let v=u.constructor;return v[_e]||Q(v),u}}return he&&(Q(he),ue(n,"fetch",h=>Ee(h))),Promise[a.__symbol__("uncaughtPromiseErrors")]=p,Z})}function It(e){e.__load_patch("toString",n=>{let a=Function.prototype.toString,t=j("OriginalDelegate"),c=j("Promise"),f=j("Error"),E=function(){if(typeof this=="function"){let _=this[t];if(_)return typeof _=="function"?a.call(_):Object.prototype.toString.call(_);if(this===Promise){let P=n[c];if(P)return a.call(P)}if(this===Error){let P=n[f];if(P)return a.call(P)}}return a.call(this)};E[t]=a,Function.prototype.toString=E;let T=Object.prototype.toString,p="[object Promise]";Object.prototype.toString=function(){return typeof Promise=="function"&&this instanceof Promise?p:T.call(this)}})}function Mt(e,n,a,t,c){let f=Zone.__symbol__(t);if(n[f])return;let E=n[f]=n[t];n[t]=function(T,p,C){return p&&p.prototype&&c.forEach(function(_){let P=`${a}.${t}::`+_,I=p.prototype;try{if(I.hasOwnProperty(_)){let H=e.ObjectGetOwnPropertyDescriptor(I,_);H&&H.value?(H.value=e.wrapWithCurrentZone(H.value,P),e._redefineProperty(p.prototype,_,H)):I[_]&&(I[_]=e.wrapWithCurrentZone(I[_],P))}else I[_]&&(I[_]=e.wrapWithCurrentZone(I[_],P))}catch{}}),E.call(n,T,p,C)},e.attachOriginToPatched(n[t],E)}function Zt(e){e.__load_patch("util",(n,a,t)=>{let c=Ze(n);t.patchOnProperties=ot,t.patchMethod=ue,t.bindArguments=Fe,t.patchMacroTask=pt;let f=a.__symbol__("BLACK_LISTED_EVENTS"),E=a.__symbol__("UNPATCHED_EVENTS");n[E]&&(n[f]=n[E]),n[f]&&(a[f]=a[E]=n[f]),t.patchEventPrototype=wt,t.patchEventTarget=Pt,t.isIEOrEdge=vt,t.ObjectDefineProperty=Ae,t.ObjectGetOwnPropertyDescriptor=be,t.ObjectCreate=Et,t.ArraySlice=Tt,t.patchClass=ve,t.wrapWithCurrentZone=Ve,t.filterProperties=ut,t.attachOriginToPatched=fe,t._redefineProperty=Object.defineProperty,t.patchCallbacks=Mt,t.getGlobalObjects=()=>({globalSources:st,zoneSymbolEventNames:ne,eventNames:c,isBrowser:Be,isMix:rt,isNode:Se,TRUE_STR:ae,FALSE_STR:le,ZONE_SYMBOL_PREFIX:Pe,ADD_EVENT_LISTENER_STR:He,REMOVE_EVENT_LISTENER_STR:xe})})}function At(e){Lt(e),It(e),Zt(e)}var ft=_t();At(ft);Nt(ft); diff --git a/docs/styles-PMBODT4Z.css b/docs/styles-PMBODT4Z.css new file mode 100644 index 0000000..65729a8 --- /dev/null +++ b/docs/styles-PMBODT4Z.css @@ -0,0 +1 @@ +@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, .75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, .5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, .175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);--bs-box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(13, 110, 253, .25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, .75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, .5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: #e685b5;--bs-highlight-color: #dee2e6;--bs-highlight-bg: #664d03;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, .15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer:before{content:"\2014\a0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), .05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), .1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), .075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #a6b5cc;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #b5b6b7;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #a7b9b1;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #a6c3ca;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #ccc2a4;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #c6acae;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #c6c7c8;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #4d5154;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder,.form-floating>.form-control-plaintext::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown),.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label:after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-control-plaintext~label:after,.form-floating>.form-select~label:after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label:after,.form-floating>.form-control:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3.75rem + 1.5em)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3.75rem + 1.5em)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13, 110, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size: 1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle:after{display:none}.dropstart .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, .15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), .65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), .8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), .3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), .15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgba(255, 255, 255, .55);--bs-navbar-hover-color: rgba(255, 255, 255, .75);--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, .1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;inset:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform .2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size: 1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size: 1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size: .875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size: .75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size: .75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width .6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size: .875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), .85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), .85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size: .875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size: .875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size: 1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow:before,.popover .popover-arrow:after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header:before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin:calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn:before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,#000c,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix:after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity, 1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity, 1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity, 1))!important}.link-primary:hover,.link-primary:focus{color:RGBA(10,88,202,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity, 1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity, 1))!important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86,94,100,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity, 1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity, 1))!important}.link-success:hover,.link-success:focus{color:RGBA(20,108,67,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity, 1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity, 1))!important}.link-info:hover,.link-info:focus{color:RGBA(61,213,243,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity, 1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity, 1))!important}.link-warning:hover,.link-warning:focus{color:RGBA(255,205,57,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity, 1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity, 1))!important}.link-danger:hover,.link-danger:focus{color:RGBA(176,42,55,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity, 1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity, 1))!important}.link-light:hover,.link-light:focus{color:RGBA(249,250,251,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity, 1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity, 1))!important}.link-dark:hover,.link-dark:focus{color:RGBA(26,30,33,var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity, 1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity, 1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity, 1))!important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity, .75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity, .75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity, .75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity, .5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity, .5));text-underline-offset:.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio:before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute!important}.stretched-link:after{position:absolute;inset:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translate(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity: 1;color:#00000080!important}.text-white-50{--bs-text-opacity: 1;color:#ffffff80!important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity: 1;color:inherit!important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity: 1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity, 1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity, 1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity: 1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width: 576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width: 768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width: 992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width: 1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width: 1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width: 1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.cm-editor{height:calc(100vh - 21rem);border:1px solid #ccc}.cm-editor .cm-scroller{max-height:calc(100vh - 21rem)} From e46b220aec3795563db99ec201f9faddeae1a640 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Sat, 8 Feb 2025 10:52:26 +0300 Subject: [PATCH 10/13] delete duplicate step from ci --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70623e0..e271636 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,6 @@ name: ci on: - push - - pull_request jobs: test: From 76327d22a2f14d0f3d6f59d87c3b85866287aae4 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Mon, 10 Feb 2025 18:44:49 +0300 Subject: [PATCH 11/13] rename /demo to /docs-src --- {demo => docs-src}/.gitignore | 0 {demo => docs-src}/.lintstagedrc.json | 2 +- {demo => docs-src}/.nvmrc | 0 {demo => docs-src}/.prettierrc.json | 0 {demo => docs-src}/angular.json | 0 {demo => docs-src}/eslint.config.mjs | 0 {demo => docs-src}/package.json | 1 + {demo => docs-src}/pnpm-lock.yaml | 70 +++++++++++++++++++ {demo => docs-src}/src/app/app.component.html | 0 {demo => docs-src}/src/app/app.component.ts | 0 {demo => docs-src}/src/app/app.config.ts | 0 {demo => docs-src}/src/app/samples.ts | 0 .../environments/environment.development.ts | 0 .../src/environments/environment.ts | 0 {demo => docs-src}/src/index.html | 0 {demo => docs-src}/src/main.ts | 0 {demo => docs-src}/src/styles.sass | 0 {demo => docs-src}/tsconfig.app.json | 0 {demo => docs-src}/tsconfig.json | 0 19 files changed, 72 insertions(+), 1 deletion(-) rename {demo => docs-src}/.gitignore (100%) rename {demo => docs-src}/.lintstagedrc.json (70%) rename {demo => docs-src}/.nvmrc (100%) rename {demo => docs-src}/.prettierrc.json (100%) rename {demo => docs-src}/angular.json (100%) rename {demo => docs-src}/eslint.config.mjs (100%) rename {demo => docs-src}/package.json (97%) rename {demo => docs-src}/pnpm-lock.yaml (98%) rename {demo => docs-src}/src/app/app.component.html (100%) rename {demo => docs-src}/src/app/app.component.ts (100%) rename {demo => docs-src}/src/app/app.config.ts (100%) rename {demo => docs-src}/src/app/samples.ts (100%) rename {demo => docs-src}/src/environments/environment.development.ts (100%) rename {demo => docs-src}/src/environments/environment.ts (100%) rename {demo => docs-src}/src/index.html (100%) rename {demo => docs-src}/src/main.ts (100%) rename {demo => docs-src}/src/styles.sass (100%) rename {demo => docs-src}/tsconfig.app.json (100%) rename {demo => docs-src}/tsconfig.json (100%) diff --git a/demo/.gitignore b/docs-src/.gitignore similarity index 100% rename from demo/.gitignore rename to docs-src/.gitignore diff --git a/demo/.lintstagedrc.json b/docs-src/.lintstagedrc.json similarity index 70% rename from demo/.lintstagedrc.json rename to docs-src/.lintstagedrc.json index 2f97a1a..00e40ba 100644 --- a/demo/.lintstagedrc.json +++ b/docs-src/.lintstagedrc.json @@ -1,5 +1,5 @@ { - "(src)/**/*.ts": [ + "src/**/*.ts": [ "prettier --write", "eslint --fix" ] diff --git a/demo/.nvmrc b/docs-src/.nvmrc similarity index 100% rename from demo/.nvmrc rename to docs-src/.nvmrc diff --git a/demo/.prettierrc.json b/docs-src/.prettierrc.json similarity index 100% rename from demo/.prettierrc.json rename to docs-src/.prettierrc.json diff --git a/demo/angular.json b/docs-src/angular.json similarity index 100% rename from demo/angular.json rename to docs-src/angular.json diff --git a/demo/eslint.config.mjs b/docs-src/eslint.config.mjs similarity index 100% rename from demo/eslint.config.mjs rename to docs-src/eslint.config.mjs diff --git a/demo/package.json b/docs-src/package.json similarity index 97% rename from demo/package.json rename to docs-src/package.json index e0cdf88..02033c6 100644 --- a/demo/package.json +++ b/docs-src/package.json @@ -44,6 +44,7 @@ "@angular/compiler-cli": "^19.1.4", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/lodash": "^4.17.15", + "@typescript-eslint/eslint-plugin": "^8.23.0", "eslint": "^9.19.0", "prettier": "^3.4.2", "tslib": "^2.8.1", diff --git a/demo/pnpm-lock.yaml b/docs-src/pnpm-lock.yaml similarity index 98% rename from demo/pnpm-lock.yaml rename to docs-src/pnpm-lock.yaml index 7ac901b..09135b7 100644 --- a/demo/pnpm-lock.yaml +++ b/docs-src/pnpm-lock.yaml @@ -87,6 +87,9 @@ importers: '@types/lodash': specifier: ^4.17.15 version: 4.17.15 + '@typescript-eslint/eslint-plugin': + specifier: ^8.23.0 + version: 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) eslint: specifier: ^9.19.0 version: 9.20.0(jiti@1.21.7) @@ -1791,10 +1794,32 @@ packages: '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} + '@typescript-eslint/eslint-plugin@8.23.0': + resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.23.0': + resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/scope-manager@8.23.0': resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@8.23.0': + resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/types@8.23.0': resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2671,6 +2696,9 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -6151,11 +6179,51 @@ snapshots: dependencies: '@types/node': 22.13.1 + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.23.0 + eslint: 9.20.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0 + eslint: 9.20.0(jiti@1.21.7) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.23.0': dependencies: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 + '@typescript-eslint/type-utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) + debug: 4.4.0 + eslint: 9.20.0(jiti@1.21.7) + ts-api-utils: 2.0.1(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.23.0': {} '@typescript-eslint/typescript-estree@8.23.0(typescript@5.6.3)': @@ -7135,6 +7203,8 @@ snapshots: graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + handle-thing@2.0.1: {} has-flag@4.0.0: {} diff --git a/demo/src/app/app.component.html b/docs-src/src/app/app.component.html similarity index 100% rename from demo/src/app/app.component.html rename to docs-src/src/app/app.component.html diff --git a/demo/src/app/app.component.ts b/docs-src/src/app/app.component.ts similarity index 100% rename from demo/src/app/app.component.ts rename to docs-src/src/app/app.component.ts diff --git a/demo/src/app/app.config.ts b/docs-src/src/app/app.config.ts similarity index 100% rename from demo/src/app/app.config.ts rename to docs-src/src/app/app.config.ts diff --git a/demo/src/app/samples.ts b/docs-src/src/app/samples.ts similarity index 100% rename from demo/src/app/samples.ts rename to docs-src/src/app/samples.ts diff --git a/demo/src/environments/environment.development.ts b/docs-src/src/environments/environment.development.ts similarity index 100% rename from demo/src/environments/environment.development.ts rename to docs-src/src/environments/environment.development.ts diff --git a/demo/src/environments/environment.ts b/docs-src/src/environments/environment.ts similarity index 100% rename from demo/src/environments/environment.ts rename to docs-src/src/environments/environment.ts diff --git a/demo/src/index.html b/docs-src/src/index.html similarity index 100% rename from demo/src/index.html rename to docs-src/src/index.html diff --git a/demo/src/main.ts b/docs-src/src/main.ts similarity index 100% rename from demo/src/main.ts rename to docs-src/src/main.ts diff --git a/demo/src/styles.sass b/docs-src/src/styles.sass similarity index 100% rename from demo/src/styles.sass rename to docs-src/src/styles.sass diff --git a/demo/tsconfig.app.json b/docs-src/tsconfig.app.json similarity index 100% rename from demo/tsconfig.app.json rename to docs-src/tsconfig.app.json diff --git a/demo/tsconfig.json b/docs-src/tsconfig.json similarity index 100% rename from demo/tsconfig.json rename to docs-src/tsconfig.json From eded442e934b4380850380d53d6f1890e742b377 Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Mon, 10 Feb 2025 18:45:15 +0300 Subject: [PATCH 12/13] update configs --- .gitignore | 2 +- .lintstagedrc.json | 2 +- eslint.config.mjs | 2 +- jest.config.js | 2 +- tsconfig.json | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 43314e6..9857305 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,7 @@ coverage .angular # Compiled -build/Release +build # Dependency directory node_modules diff --git a/.lintstagedrc.json b/.lintstagedrc.json index ff09e48..00e40ba 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,5 +1,5 @@ { - "src/**/*.js": [ + "src/**/*.ts": [ "prettier --write", "eslint --fix" ] diff --git a/eslint.config.mjs b/eslint.config.mjs index c0b9531..df9efde 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -11,7 +11,7 @@ export default [ 'coverage/**', 'build/**', 'dist/**', - 'demo/**', + 'docs-src/**', 'docs/**', 'tmp/**', "**/*.mjs", diff --git a/jest.config.js b/jest.config.js index 9d81bbf..ceaa312 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,5 +6,5 @@ module.exports = { transform: { "^.+.ts$": ["ts-jest", {}], }, - modulePathIgnorePatterns: ['/demo'] + modulePathIgnorePatterns: ['/docs', '/docs-src'] }; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1a338fb..a8e9d9c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,7 @@ "test/**/*.ts" ], "exclude": [ - "demo" + "docs", + "docs-src" ] } \ No newline at end of file From dfe72f2afd80b125930a775ea4ad3b7d1f3636ac Mon Sep 17 00:00:00 2001 From: Alexander Mac Date: Mon, 10 Feb 2025 18:48:35 +0300 Subject: [PATCH 13/13] fix test file names --- jest.config.js | 2 +- test/{assertions-spec.ts => assertions.spec.ts} | 0 test/builders/{base-spec.ts => base.spec.ts} | 0 test/builders/{builders-spec.ts => builders.spec.ts} | 0 test/builders/{request-spec.ts => request.spec.ts} | 0 test/builders/{response-spec.ts => response.spec.ts} | 0 test/{httpz-spec.ts => httpz.spec.ts} | 0 test/parsers/{base-spec.ts => base.spec.ts} | 0 test/parsers/{parsers-spec.ts => parsers.spec.ts} | 0 test/parsers/{request-spec.ts => request.spec.ts} | 0 test/parsers/{response-spec.ts => response.spec.ts} | 0 test/{utils-spec.ts => utils.spec.ts} | 0 12 files changed, 1 insertion(+), 1 deletion(-) rename test/{assertions-spec.ts => assertions.spec.ts} (100%) rename test/builders/{base-spec.ts => base.spec.ts} (100%) rename test/builders/{builders-spec.ts => builders.spec.ts} (100%) rename test/builders/{request-spec.ts => request.spec.ts} (100%) rename test/builders/{response-spec.ts => response.spec.ts} (100%) rename test/{httpz-spec.ts => httpz.spec.ts} (100%) rename test/parsers/{base-spec.ts => base.spec.ts} (100%) rename test/parsers/{parsers-spec.ts => parsers.spec.ts} (100%) rename test/parsers/{request-spec.ts => request.spec.ts} (100%) rename test/parsers/{response-spec.ts => response.spec.ts} (100%) rename test/{utils-spec.ts => utils.spec.ts} (100%) diff --git a/jest.config.js b/jest.config.js index ceaa312..c12f7f9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ module.exports = { testEnvironment: "node", testMatch: [ - "**/test/**/*-spec.ts" + "**/test/**/*.spec.ts" ], transform: { "^.+.ts$": ["ts-jest", {}], diff --git a/test/assertions-spec.ts b/test/assertions.spec.ts similarity index 100% rename from test/assertions-spec.ts rename to test/assertions.spec.ts diff --git a/test/builders/base-spec.ts b/test/builders/base.spec.ts similarity index 100% rename from test/builders/base-spec.ts rename to test/builders/base.spec.ts diff --git a/test/builders/builders-spec.ts b/test/builders/builders.spec.ts similarity index 100% rename from test/builders/builders-spec.ts rename to test/builders/builders.spec.ts diff --git a/test/builders/request-spec.ts b/test/builders/request.spec.ts similarity index 100% rename from test/builders/request-spec.ts rename to test/builders/request.spec.ts diff --git a/test/builders/response-spec.ts b/test/builders/response.spec.ts similarity index 100% rename from test/builders/response-spec.ts rename to test/builders/response.spec.ts diff --git a/test/httpz-spec.ts b/test/httpz.spec.ts similarity index 100% rename from test/httpz-spec.ts rename to test/httpz.spec.ts diff --git a/test/parsers/base-spec.ts b/test/parsers/base.spec.ts similarity index 100% rename from test/parsers/base-spec.ts rename to test/parsers/base.spec.ts diff --git a/test/parsers/parsers-spec.ts b/test/parsers/parsers.spec.ts similarity index 100% rename from test/parsers/parsers-spec.ts rename to test/parsers/parsers.spec.ts diff --git a/test/parsers/request-spec.ts b/test/parsers/request.spec.ts similarity index 100% rename from test/parsers/request-spec.ts rename to test/parsers/request.spec.ts diff --git a/test/parsers/response-spec.ts b/test/parsers/response.spec.ts similarity index 100% rename from test/parsers/response-spec.ts rename to test/parsers/response.spec.ts diff --git a/test/utils-spec.ts b/test/utils.spec.ts similarity index 100% rename from test/utils-spec.ts rename to test/utils.spec.ts