From d2b6249fa5448125bcbb8902457b88ddb771df2a Mon Sep 17 00:00:00 2001 From: Augustin <48162609+AugustinSorel@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:04:37 +0000 Subject: [PATCH] FEAT/are dom equals fn (#30) --- example/counter/package.json | 8 +- packages/runtime/rollup.config.ts | 2 - packages/runtime/src/app.ts | 7 +- packages/runtime/src/destroy-dom.ts | 6 +- packages/runtime/src/events.ts | 2 +- packages/runtime/src/h.ts | 22 +- packages/runtime/src/mount-dom.ts | 67 +++- packages/runtime/src/nodes-equal.ts | 13 + packages/runtime/src/patch-dom.ts | 239 +++++++++++++- packages/runtime/tests/h.test.ts | 38 ++- pnpm-lock.yaml | 465 +++++++++++++++++++++++++--- 11 files changed, 772 insertions(+), 97 deletions(-) create mode 100644 packages/runtime/src/nodes-equal.ts diff --git a/example/counter/package.json b/example/counter/package.json index acfabc1..e4c0cea 100644 --- a/example/counter/package.json +++ b/example/counter/package.json @@ -11,14 +11,14 @@ "author": "", "license": "ISC", "devDependencies": { - "@babel/preset-env": "^7.23.7", + "@babel/preset-env": "^7.23.8", "@babel/preset-typescript": "^7.23.3", "@babel/register": "^7.23.7", - "@types/node": "^20.10.6", - "css-loader": "^6.8.1", + "@types/node": "^20.10.8", + "css-loader": "^6.9.0", "html-webpack-plugin": "^5.6.0", "rollup-plugin-dts": "^6.1.0", - "style-loader": "^3.3.3", + "style-loader": "^3.3.4", "ts-loader": "^9.5.1", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", diff --git a/packages/runtime/rollup.config.ts b/packages/runtime/rollup.config.ts index 7fce72e..577d823 100644 --- a/packages/runtime/rollup.config.ts +++ b/packages/runtime/rollup.config.ts @@ -1,5 +1,4 @@ import cleanup from "rollup-plugin-cleanup"; -import filesize from "rollup-plugin-filesize"; import typescript from "@rollup/plugin-typescript"; import dts from "rollup-plugin-dts"; @@ -13,7 +12,6 @@ const config: RollupOptions[] = [ { file: "dist/index.js", format: "esm", - plugins: [filesize()], }, ], }, diff --git a/packages/runtime/src/app.ts b/packages/runtime/src/app.ts index cd979ba..812beca 100644 --- a/packages/runtime/src/app.ts +++ b/packages/runtime/src/app.ts @@ -49,9 +49,10 @@ export const createApp = >({ }; const renderApp = () => { - const newVdom = view(state, emit); - - vdom = patchDom(vdom, newVdom, parentEl); + if (vdom && parentEl) { + const newVdom = view(state, emit); + vdom = patchDom(vdom, newVdom, parentEl); + } }; const subscriptions = [dispatcher.afterEveryCommand(renderApp)]; diff --git a/packages/runtime/src/destroy-dom.ts b/packages/runtime/src/destroy-dom.ts index 4d95b84..7aa3214 100644 --- a/packages/runtime/src/destroy-dom.ts +++ b/packages/runtime/src/destroy-dom.ts @@ -55,9 +55,7 @@ const destroyFragmentNode = (fragmentNode: HFragment) => { }; const destroyPortalNode = (portalNode: HPortal) => { - if (!portalNode.children) { - return; + for (const children of portalNode.children) { + destroyDom(children); } - - destroyDom(portalNode.children); }; diff --git a/packages/runtime/src/events.ts b/packages/runtime/src/events.ts index 9d660f9..160e315 100644 --- a/packages/runtime/src/events.ts +++ b/packages/runtime/src/events.ts @@ -1,7 +1,7 @@ import { H } from "./h"; export const addEventListener = ( - eventName: keyof HTMLElementEventMap, + eventName: string, handler: Parameters[1], el: HTMLElement, ) => { diff --git a/packages/runtime/src/h.ts b/packages/runtime/src/h.ts index 54b0367..33a916d 100644 --- a/packages/runtime/src/h.ts +++ b/packages/runtime/src/h.ts @@ -29,7 +29,7 @@ export type HFragment = { export type HPortal = { type: "portal"; - children: VNodes | null; + children: VNodes[]; domPointer: HTMLElement; }; @@ -76,7 +76,25 @@ export const hPortal = ( ): HPortal => { return { type: "portal", - children, + children: [children].filter(removeNull), domPointer: targetEl, }; }; + +export function extractChildren(vdom: HFragment | HPortal | H) { + if (vdom.children == null) { + return []; + } + + const children: VNodes[] = []; + + for (const child of vdom.children) { + if (child.type === "fragment") { + children.push(...extractChildren(child)); + } else { + children.push(child); + } + } + + return children; +} diff --git a/packages/runtime/src/mount-dom.ts b/packages/runtime/src/mount-dom.ts index 52bb3fa..f7582b7 100644 --- a/packages/runtime/src/mount-dom.ts +++ b/packages/runtime/src/mount-dom.ts @@ -2,51 +2,61 @@ import { setAttributes } from "./attributes"; import { addEventListeners } from "./events"; import { HString, VNodes, H, HFragment } from "./h"; -export const mountDOM = (vdom: VNodes, parentEl: HTMLElement) => { +export const mountDOM = ( + vdom: VNodes, + parentEl: HTMLElement, + index?: number, +) => { if (vdom.type === "text") { - createTextNode(vdom, parentEl); + createTextNode(vdom, parentEl, index); return; } if (vdom.type === "fragment") { - createFragmentNode(vdom, parentEl); + createFragmentNode(vdom, parentEl, index); return; } if (vdom.type === "element") { - createElementNode(vdom, parentEl); + createElementNode(vdom, parentEl, index); return; } if (vdom.type === "portal") { - if (!vdom.children) { - return; - } - - mountDOM(vdom.children, vdom.domPointer); + vdom.children.forEach((children, i) => { + mountDOM(children, parentEl, index ? index + i : undefined); + }); return; } throw new Error(`vdom type: ${JSON.stringify(vdom)} is not being handle`); }; -const createTextNode = (vdom: HString, parentEl: HTMLElement) => { +const createTextNode = ( + vdom: HString, + parentEl: HTMLElement, + index?: number, +) => { const textNode = document.createTextNode(vdom.value); vdom.domPointer = textNode; - parentEl.append(textNode); + insert(textNode, parentEl, index); }; -const createFragmentNode = (vdom: HFragment, parentEl: HTMLElement) => { +const createFragmentNode = ( + vdom: HFragment, + parentEl: HTMLElement, + index?: number, +) => { vdom.domPointer = parentEl; - for (const children of vdom.children) { - mountDOM(children, parentEl); - } + vdom.children.forEach((children, i) => { + mountDOM(children, parentEl, index ? index + i : undefined); + }); }; -const createElementNode = (vdom: H, parentEl: HTMLElement) => { +const createElementNode = (vdom: H, parentEl: HTMLElement, index?: number) => { const { tagName, props, children } = vdom; const { on: events, ...attrs } = props; @@ -61,5 +71,28 @@ const createElementNode = (vdom: H, parentEl: HTMLElement) => { mountDOM(child, element); } - parentEl.append(element); + insert(element, parentEl, index); +}; + +export const insert = ( + el: HTMLElement | Text, + parentEl: HTMLElement, + index?: number, +) => { + if (index == null) { + parentEl.append(el); + return; + } + + if (index < 0) { + throw new Error(`Index must be a positive integer, got ${index}`); + } + + const children = parentEl.childNodes; + + if (index >= children.length) { + parentEl.append(el); + } else { + parentEl.insertBefore(el, children[index]); + } }; diff --git a/packages/runtime/src/nodes-equal.ts b/packages/runtime/src/nodes-equal.ts new file mode 100644 index 0000000..3907c4d --- /dev/null +++ b/packages/runtime/src/nodes-equal.ts @@ -0,0 +1,13 @@ +import { VNodes } from "./h"; + +export const areNodesEqual = (nodeOne: VNodes, nodeTwo: VNodes) => { + if (nodeOne.type !== nodeTwo.type) { + return false; + } + + if (nodeOne.type === "element" && nodeTwo.type === "element") { + return nodeOne.tagName === nodeTwo.tagName; + } + + return true; +}; diff --git a/packages/runtime/src/patch-dom.ts b/packages/runtime/src/patch-dom.ts index c92b97b..758d4e9 100644 --- a/packages/runtime/src/patch-dom.ts +++ b/packages/runtime/src/patch-dom.ts @@ -1 +1,238 @@ -export const patchDom = () => {}; +import { + removeAttribute, + removeStyle, + setAttribute, + setStyle, +} from "./attributes"; +import { destroyDom } from "./destroy-dom"; +import { addEventListener } from "./events"; +import { mountDOM } from "./mount-dom"; +import { areNodesEqual } from "./nodes-equal"; +import { arraysDiff, arraysDiffSequence } from "./arrays"; +import { objectsDiff } from "./objects"; +import { H, HFragment, HPortal, HString, VNodes, extractChildren } from "./h"; + +export function isNotEmptyString(str: string) { + return str !== ""; +} + +export function isNotBlankOrEmptyString(str: string) { + return isNotEmptyString(str.trim()); +} + +export function patchDom( + oldVdom: VNodes, + newVdom: VNodes, + parentEl: HTMLElement, +) { + if (!areNodesEqual(oldVdom, newVdom)) { + if (!oldVdom.domPointer) { + throw new Error("dom pointer cannot be undefinied"); + } + + const index = findIndexInParent(parentEl, oldVdom.domPointer); + destroyDom(oldVdom); + mountDOM(newVdom, parentEl, index == null ? undefined : index); + + return newVdom; + } + + newVdom.domPointer = oldVdom.domPointer; + + if (newVdom.type === "text" && oldVdom.type === "text") { + patchText(oldVdom, newVdom); + return newVdom; + } + + if (newVdom.type === "element" && oldVdom.type === "element") { + patchElement(oldVdom, newVdom); + } + + patchChildren(oldVdom as HFragment, newVdom as HFragment); + + return newVdom; +} + +function findIndexInParent(parentEl: HTMLElement, el: HTMLElement | Text) { + const index = Array.from(parentEl.childNodes).indexOf(el); + + if (index < 0) { + return null; + } + + return index; +} + +function patchText(oldVdom: HString, newVdom: HString) { + const el = oldVdom.domPointer; + const { value: oldText } = oldVdom; + const { value: newText } = newVdom; + + if (!el) { + throw new Error("parentel cannot be undefined"); + } + + if (oldText !== newText) { + el.nodeValue = newText; + } +} + +function patchElement(oldVdom: H, newVdom: H) { + const el = oldVdom.domPointer; + const { + class: oldClass, + style: oldStyle, + on: oldEvents, + ...oldAttrs + } = oldVdom.props; + const { + class: newClass, + style: newStyle, + on: newEvents, + ...newAttrs + } = newVdom.props; + const { listeners: oldListeners } = oldVdom; + + if (!el) { + throw new Error("el cannot be undefined"); + } + + patchAttrs(el, oldAttrs, newAttrs); + patchClasses(el, oldClass, newClass); + patchStyles(el, oldStyle, newStyle); + newVdom.listeners = patchEvents(el, oldListeners, oldEvents, newEvents); +} + +function patchAttrs( + el: HTMLElement, + oldAttrs: Record, + newAttrs: Record, +) { + const { added, removed, updated } = objectsDiff(oldAttrs, newAttrs); + + for (const attr of removed) { + removeAttribute(el, attr); + } + + for (const attr of added.concat(updated)) { + setAttribute(el, attr, newAttrs[attr]); + } +} + +function patchClasses( + el: HTMLElement, + oldClass: string | string[], + newClass: string | string[], +) { + const oldClasses = toClassList(oldClass); + const newClasses = toClassList(newClass); + + const { added, removed } = arraysDiff(oldClasses, newClasses); + + if (removed.length > 0) { + el.classList.remove(...removed); + } + if (added.length > 0) { + el.classList.add(...added); + } +} + +function toClassList(classes: string | string[] = "") { + return Array.isArray(classes) + ? classes.filter(isNotBlankOrEmptyString) + : classes.split(/(\s+)/).filter(isNotBlankOrEmptyString); +} + +function patchStyles( + el: HTMLElement, + oldStyle: Record = {}, + newStyle: Record = {}, +) { + const { added, removed, updated } = objectsDiff(oldStyle, newStyle); + + for (const style of removed) { + removeStyle(el, style); + } + + for (const style of added.concat(updated)) { + setStyle(el, style, newStyle[style]); + } +} + +function patchEvents( + el: HTMLElement, + oldListeners: Record = {}, + oldEvents: Record = {}, + newEvents: Record = {}, +) { + const { removed, added, updated } = objectsDiff(oldEvents, newEvents); + + for (const eventName of removed.concat(updated)) { + el.removeEventListener(eventName, oldListeners[eventName]); + } + + const addedListeners: Record = {}; + + for (const eventName of added.concat(updated)) { + const listener = addEventListener(eventName, newEvents[eventName], el); + addedListeners[eventName] = listener; + } + + return addedListeners; +} + +function patchChildren( + oldVdom: H | HFragment | HPortal, + newVdom: H | HFragment | HPortal, +) { + const oldChildren = extractChildren(oldVdom); + const newChildren = extractChildren(newVdom); + const parentEl = oldVdom.domPointer; + + const diffSeq = arraysDiffSequence(oldChildren, newChildren, areNodesEqual); + + if (!parentEl) { + throw new Error("dom pointer cannot be undefinied"); + } + + for (const operation of diffSeq) { + const { index, item } = operation; + + switch (operation.op) { + case "add": { + mountDOM(item, parentEl, index); + break; + } + + case "remove": { + destroyDom(item); + break; + } + + case "move": { + const oldChild = oldChildren[operation.originalIndex]; + const newChild = newChildren[index]; + const el = oldChild.domPointer; + const elAtTargetIndex = parentEl.childNodes[index]; + + if (!el) { + throw new Error("el cannot be undefinied"); + } + + parentEl.insertBefore(el, elAtTargetIndex); + patchDom(oldChild, newChild, parentEl); + + break; + } + + case "noop": { + patchDom( + oldChildren[operation.originalIndex], + newChildren[index], + parentEl, + ); + break; + } + } + } +} diff --git a/packages/runtime/tests/h.test.ts b/packages/runtime/tests/h.test.ts index a11eaf7..fb33bde 100644 --- a/packages/runtime/tests/h.test.ts +++ b/packages/runtime/tests/h.test.ts @@ -138,10 +138,12 @@ describe("testing HPortal", () => { const correctFragment: HPortal = { type: "portal", - children: { - type: "text", - value: "hello", - }, + children: [ + { + type: "text", + value: "hello", + }, + ], domPointer: document.body, }; @@ -156,19 +158,21 @@ describe("testing HPortal", () => { const correctFragment: HPortal = { type: "portal", - children: { - type: "element", - props: { - class: "main-btn", - }, - tagName: "button", - children: [ - { - type: "text", - value: "click me", + children: [ + { + type: "element", + props: { + class: "main-btn", }, - ], - }, + tagName: "button", + children: [ + { + type: "text", + value: "click me", + }, + ], + }, + ], domPointer: document.body, }; @@ -180,7 +184,7 @@ describe("testing HPortal", () => { const correctFragment: HPortal = { type: "portal", - children: null, + children: [], domPointer: document.body, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9cdba0a..e229b78 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,49 @@ importers: specifier: ^5.3.3 version: 5.3.3 + example/counter: + dependencies: + SerendipJS: + specifier: workspace:^ + version: link:../../packages/runtime + devDependencies: + '@babel/preset-env': + specifier: ^7.23.8 + version: 7.23.8(@babel/core@7.23.7) + '@babel/preset-typescript': + specifier: ^7.23.3 + version: 7.23.3(@babel/core@7.23.7) + '@babel/register': + specifier: ^7.23.7 + version: 7.23.7(@babel/core@7.23.7) + '@types/node': + specifier: ^20.10.8 + version: 20.10.8 + css-loader: + specifier: ^6.9.0 + version: 6.9.0(webpack@5.89.0) + html-webpack-plugin: + specifier: ^5.6.0 + version: 5.6.0(webpack@5.89.0) + rollup-plugin-dts: + specifier: ^6.1.0 + version: 6.1.0(rollup@4.9.4)(typescript@5.3.3) + style-loader: + specifier: ^3.3.4 + version: 3.3.4(webpack@5.89.0) + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.3.3)(webpack@5.89.0) + webpack: + specifier: ^5.89.0 + version: 5.89.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack-dev-server@4.15.1)(webpack@5.89.0) + webpack-dev-server: + specifier: ^4.15.1 + version: 4.15.1(webpack-cli@5.1.4)(webpack@5.89.0) + example/todo: dependencies: SerendipJS: @@ -118,7 +161,7 @@ packages: '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.7 + '@babel/helpers': 7.23.8 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 '@babel/traverse': 7.23.7 @@ -342,8 +385,8 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helpers@7.23.7: - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 @@ -698,6 +741,23 @@ packages: globals: 11.12.0 dev: true + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} @@ -1239,6 +1299,97 @@ packages: - supports-color dev: true + /@babel/preset-env@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: @@ -1289,8 +1440,8 @@ packages: regenerator-runtime: 0.14.1 dev: true - /@babel/runtime@7.23.7: - resolution: {integrity: sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==} + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -1741,6 +1892,14 @@ packages: dev: true optional: true + /@rollup/rollup-android-arm-eabi@4.9.4: + resolution: {integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-android-arm64@4.9.1: resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} cpu: [arm64] @@ -1757,6 +1916,14 @@ packages: dev: true optional: true + /@rollup/rollup-android-arm64@4.9.4: + resolution: {integrity: sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-darwin-arm64@4.9.1: resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} cpu: [arm64] @@ -1773,6 +1940,14 @@ packages: dev: true optional: true + /@rollup/rollup-darwin-arm64@4.9.4: + resolution: {integrity: sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-darwin-x64@4.9.1: resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} cpu: [x64] @@ -1789,6 +1964,14 @@ packages: dev: true optional: true + /@rollup/rollup-darwin-x64@4.9.4: + resolution: {integrity: sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm-gnueabihf@4.9.1: resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} cpu: [arm] @@ -1805,6 +1988,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm-gnueabihf@4.9.4: + resolution: {integrity: sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm64-gnu@4.9.1: resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} cpu: [arm64] @@ -1821,6 +2012,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm64-gnu@4.9.4: + resolution: {integrity: sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-arm64-musl@4.9.1: resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} cpu: [arm64] @@ -1837,6 +2036,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-arm64-musl@4.9.4: + resolution: {integrity: sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-riscv64-gnu@4.9.1: resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} cpu: [riscv64] @@ -1853,6 +2060,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-riscv64-gnu@4.9.4: + resolution: {integrity: sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-x64-gnu@4.9.1: resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} cpu: [x64] @@ -1869,6 +2084,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-x64-gnu@4.9.4: + resolution: {integrity: sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-linux-x64-musl@4.9.1: resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} cpu: [x64] @@ -1885,6 +2108,14 @@ packages: dev: true optional: true + /@rollup/rollup-linux-x64-musl@4.9.4: + resolution: {integrity: sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-win32-arm64-msvc@4.9.1: resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} cpu: [arm64] @@ -1901,6 +2132,14 @@ packages: dev: true optional: true + /@rollup/rollup-win32-arm64-msvc@4.9.4: + resolution: {integrity: sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-win32-ia32-msvc@4.9.1: resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} cpu: [ia32] @@ -1917,6 +2156,14 @@ packages: dev: true optional: true + /@rollup/rollup-win32-ia32-msvc@4.9.4: + resolution: {integrity: sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rollup/rollup-win32-x64-msvc@4.9.1: resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} cpu: [x64] @@ -1933,6 +2180,14 @@ packages: dev: true optional: true + /@rollup/rollup-win32-x64-msvc@4.9.4: + resolution: {integrity: sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@sigstore/bundle@1.1.0: resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1992,37 +2247,37 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 4.17.41 - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.0 + '@types/eslint': 8.56.1 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.56.0: - resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} + /@types/eslint@8.56.1: + resolution: {integrity: sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -2035,7 +2290,7 @@ packages: /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -2061,7 +2316,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/json-schema@7.0.15: @@ -2076,10 +2331,10 @@ packages: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} dev: true - /@types/node-forge@1.3.10: - resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/node@20.10.6: @@ -2088,6 +2343,12 @@ packages: undici-types: 5.26.5 dev: true + /@types/node@20.10.8: + resolution: {integrity: sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/qs@6.9.11: resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} dev: true @@ -2104,7 +2365,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/serve-index@1.9.4: @@ -2118,19 +2379,19 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 dev: true /@vitest/expect@1.1.0: @@ -2510,10 +2771,6 @@ packages: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-flatten@2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: true - /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true @@ -2591,11 +2848,9 @@ packages: - supports-color dev: true - /bonjour-service@1.1.1: - resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} + /bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 dev: true @@ -2650,8 +2905,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001572 - electron-to-chromium: 1.4.616 + caniuse-lite: 1.0.30001576 + electron-to-chromium: 1.4.626 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -2745,8 +3000,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001572: - resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + /caniuse-lite@1.0.30001576: + resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true /chai@4.3.10: @@ -2995,6 +3250,23 @@ packages: webpack: 5.89.0(webpack-cli@5.1.4) dev: true + /css-loader@6.9.0(webpack@5.89.0): + resolution: {integrity: sha512-3I5Nu4ytWlHvOP6zItjiHlefBNtrH+oehq8tnQa2kO305qpVyx9XNIT1CXIj5bgCJs7qICBCkgCYxQLKPANoLA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.33) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.33) + postcss-modules-scope: 3.1.0(postcss@8.4.33) + postcss-modules-values: 4.0.0(postcss@8.4.33) + postcss-value-parser: 4.2.0 + semver: 7.5.4 + webpack: 5.89.0(webpack-cli@5.1.4) + dev: true + /css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: @@ -3119,10 +3391,6 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /dns-equal@1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: true - /dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -3186,8 +3454,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + /electron-to-chromium@1.4.626: + resolution: {integrity: sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==} dev: true /emoji-regex@8.0.0: @@ -3935,6 +4203,15 @@ packages: postcss: 8.4.32 dev: true + /icss-utils@5.1.0(postcss@8.4.33): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.33 + dev: true + /ignore-walk@6.0.4: resolution: {integrity: sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4103,7 +4380,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.8 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -4979,6 +5256,15 @@ packages: postcss: 8.4.32 dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.33): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.33 + dev: true + /postcss-modules-local-by-default@4.0.3(postcss@8.4.32): resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} @@ -4991,6 +5277,18 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-modules-local-by-default@4.0.3(postcss@8.4.33): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 + dev: true + /postcss-modules-scope@3.1.0(postcss@8.4.32): resolution: {integrity: sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==} engines: {node: ^10 || ^12 || >= 14} @@ -5001,6 +5299,16 @@ packages: postcss-selector-parser: 6.0.15 dev: true + /postcss-modules-scope@3.1.0(postcss@8.4.33): + resolution: {integrity: sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true + /postcss-modules-values@4.0.0(postcss@8.4.32): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} @@ -5011,6 +5319,16 @@ packages: postcss: 8.4.32 dev: true + /postcss-modules-values@4.0.0(postcss@8.4.33): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.33) + postcss: 8.4.33 + dev: true + /postcss-selector-parser@6.0.15: resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} engines: {node: '>=4'} @@ -5032,6 +5350,15 @@ packages: source-map-js: 1.0.2 dev: true + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: @@ -5198,7 +5525,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.7 + '@babel/runtime': 7.23.8 dev: true /regexpu-core@5.3.2: @@ -5321,6 +5648,20 @@ packages: '@babel/code-frame': 7.23.5 dev: true + /rollup-plugin-dts@6.1.0(rollup@4.9.4)(typescript@5.3.3): + resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 + dependencies: + magic-string: 0.30.5 + rollup: 4.9.4 + typescript: 5.3.3 + optionalDependencies: + '@babel/code-frame': 7.23.5 + dev: true + /rollup-plugin-filesize@10.0.0: resolution: {integrity: sha512-JAYYhzCcmGjmCzo3LEHSDE3RAPHKIeBdpqRhiyZSv5o/3wFhktUOzYAWg/uUKyEu5dEaVaql6UOmaqHx1qKrZA==} engines: {node: '>=16.0.0'} @@ -5386,6 +5727,29 @@ packages: fsevents: 2.3.3 dev: true + /rollup@4.9.4: + resolution: {integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.4 + '@rollup/rollup-android-arm64': 4.9.4 + '@rollup/rollup-darwin-arm64': 4.9.4 + '@rollup/rollup-darwin-x64': 4.9.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.4 + '@rollup/rollup-linux-arm64-gnu': 4.9.4 + '@rollup/rollup-linux-arm64-musl': 4.9.4 + '@rollup/rollup-linux-riscv64-gnu': 4.9.4 + '@rollup/rollup-linux-x64-gnu': 4.9.4 + '@rollup/rollup-linux-x64-musl': 4.9.4 + '@rollup/rollup-win32-arm64-msvc': 4.9.4 + '@rollup/rollup-win32-ia32-msvc': 4.9.4 + '@rollup/rollup-win32-x64-msvc': 4.9.4 + fsevents: 2.3.3 + dev: true + /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true @@ -5437,7 +5801,7 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} dependencies: - '@types/node-forge': 1.3.10 + '@types/node-forge': 1.3.11 node-forge: 1.3.1 dev: true @@ -5480,8 +5844,8 @@ packages: - supports-color dev: true - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: randombytes: 2.1.0 dev: true @@ -5806,6 +6170,15 @@ packages: webpack: 5.89.0(webpack-cli@5.1.4) dev: true + /style-loader@3.3.4(webpack@5.89.0): + resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.89.0(webpack-cli@5.1.4) + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5873,7 +6246,7 @@ packages: '@jridgewell/trace-mapping': 0.3.20 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 + serialize-javascript: 6.0.2 terser: 5.26.0 webpack: 5.89.0(webpack-cli@5.1.4) dev: true @@ -6334,7 +6707,7 @@ packages: '@types/sockjs': 0.3.36 '@types/ws': 8.5.10 ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 + bonjour-service: 1.2.1 chokidar: 3.5.3 colorette: 2.0.20 compression: 1.7.4