From ed9c33c9d32b16b26eaa1f5e82daeba63ba461fc Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 11:25:57 -0700 Subject: [PATCH 1/7] refactor(overlay): share the collectors between platforms The component tree, signal graph, injector tree and NgRx collectors walk the host tree through a HostTree adapter (roots, children, parent, tag, selector, lookup) instead of the DOM directly, so an overlay for a platform without a DOM only has to describe its hosts. `domTree()` keeps the DOM walk, the CSS selector paths and the router-outlet lookup the browser overlay had, and stays the default, so its callers and payloads are unchanged. Host ids and the id lookup now take any object with a connected check supplied by the tree, and `installSignalWriteHook` moves to signal-history so another overlay can record signal writes without loading the browser overlay; the overlay still re-exports it. --- .../src/__tests__/ngrx-collector.test.ts | 10 +- .../src/__tests__/signal-history.test.ts | 2 +- packages/ng-devtools/src/component-tree.ts | 116 ++++++--------- packages/ng-devtools/src/element-id.ts | 18 ++- packages/ng-devtools/src/host-tree.ts | 139 ++++++++++++++++++ packages/ng-devtools/src/injector-tree.ts | 133 ++++++++--------- packages/ng-devtools/src/ngrx-collector.ts | 39 +++-- packages/ng-devtools/src/ngrx-overlay.ts | 25 +++- packages/ng-devtools/src/overlay.ts | 38 +---- packages/ng-devtools/src/signal-graph.ts | 89 ++++------- packages/ng-devtools/src/signal-history.ts | 34 +++++ 11 files changed, 372 insertions(+), 271 deletions(-) create mode 100644 packages/ng-devtools/src/host-tree.ts diff --git a/packages/ng-devtools/src/__tests__/ngrx-collector.test.ts b/packages/ng-devtools/src/__tests__/ngrx-collector.test.ts index 2017df2..62a9732 100644 --- a/packages/ng-devtools/src/__tests__/ngrx-collector.test.ts +++ b/packages/ng-devtools/src/__tests__/ngrx-collector.test.ts @@ -1,5 +1,6 @@ // @vitest-environment jsdom import { describe, expect, it, vi } from 'vitest'; +import { domTree } from '../host-tree.ts'; import { createNgrxCollector } from '../ngrx-collector.ts'; import { diff, serialize } from '../ngrx-shared.ts'; import { mergeNgrxReport, nameStore, ngrxStateOf, type NgrxPages } from '../rpc/ngrx-tools.ts'; @@ -53,7 +54,7 @@ class App { } } -function setup() { +function setup(tree = domTree()) { document.body.innerHTML = ''; const root = document.querySelector('app-root')!; const store = new SignalStore(); @@ -76,7 +77,7 @@ function setup() { ɵgetInjectorProviders: () => [], }; const onChange = vi.fn(); - const collector = createNgrxCollector(() => ng as any, onChange); + const collector = createNgrxCollector(() => ng as any, onChange, tree); return { store, app, rootEnv, collector, onChange }; } @@ -214,8 +215,9 @@ describe('ngrx collector', () => { }); it('only rescans the page when asked to rediscover stores', () => { - const { store, collector } = setup(); - const spy = vi.spyOn(document, 'createTreeWalker'); + const tree = domTree(); + const { store, collector } = setup(tree); + const spy = vi.spyOn(tree, 'roots'); collector.collect(); expect(spy).toHaveBeenCalledTimes(1); store.setQuery('a'); diff --git a/packages/ng-devtools/src/__tests__/signal-history.test.ts b/packages/ng-devtools/src/__tests__/signal-history.test.ts index 714891c..e032c89 100644 --- a/packages/ng-devtools/src/__tests__/signal-history.test.ts +++ b/packages/ng-devtools/src/__tests__/signal-history.test.ts @@ -1,10 +1,10 @@ // @vitest-environment jsdom import { describe, expect, it, vi } from 'vitest'; -import { installSignalWriteHook } from '../overlay.ts'; import { MAX_CHANGES, MAX_NODES, createSignalHistory, + installSignalWriteHook, type RawSignalNode, } from '../signal-history.ts'; import type { SignalGraphNode } from '../types.ts'; diff --git a/packages/ng-devtools/src/component-tree.ts b/packages/ng-devtools/src/component-tree.ts index 3abc5bd..69b4ce5 100644 --- a/packages/ng-devtools/src/component-tree.ts +++ b/packages/ng-devtools/src/component-tree.ts @@ -1,4 +1,5 @@ import { elementById, elementId, pruneElementIds } from './element-id.ts'; +import { documentTree, type HostTree } from './host-tree.ts'; import { className, dependenciesOf, type DebugNg } from './injector-tree.ts'; import { isSecretName, serializeNamed } from './serialize.ts'; import type { @@ -8,16 +9,16 @@ import type { LiveComponentNode, } from './types.ts'; -export interface ComponentDebugNg extends DebugNg { - getComponent?(el: Element): unknown; - getDirectives?(el: Element): unknown[]; +export interface ComponentDebugNg extends DebugNg { + getComponent?(el: H): unknown; + getDirectives?(el: H): unknown[]; getDirectiveMetadata?(instance: unknown): { inputs?: Record; outputs?: Record; changeDetection?: number; encapsulation?: number; } | null; - getListeners?(el: Element): { name: string; type?: string }[]; + getListeners?(el: H): { name: string; type?: string }[]; isSignal?(value: unknown): boolean; } @@ -47,76 +48,48 @@ function nameOf(instance: unknown): string { return typeof ctor === 'function' ? className(ctor) : 'Anonymous'; } -function componentAt(ng: ComponentDebugNg, el: Element): object | null { +function componentAt(ng: ComponentDebugNg, el: H): object | null { const found = read(() => ng.getComponent?.(el) ?? null, null); return found && typeof found === 'object' ? found : null; } -function directivesAt(ng: ComponentDebugNg, el: Element): object[] { +function directivesAt(ng: ComponentDebugNg, el: H): object[] { const found = read(() => ng.getDirectives?.(el) ?? [], [] as unknown[]); return found.filter((d): d is object => !!d && typeof d === 'object'); } -export function childElements(el: Element): Element[] { - const children = Array.from(el.children); - const shadow = (el as Element & { shadowRoot?: ShadowRoot | null }).shadowRoot; - if (shadow) children.push(...Array.from(shadow.children)); - return children; -} - -function parentOf(el: Element): Element | null { - if (el.parentElement) return el.parentElement; - const root = el.parentNode; - return root && 'host' in root ? ((root as ShadowRoot).host ?? null) : null; -} - -export function angularRoots(doc: Document = document): Element[] { - const tagged = Array.from(doc.querySelectorAll('[ng-version]')); - const roots = tagged.filter((root) => !tagged.some((o) => o !== root && o.contains(root))); - if (!doc.body) return roots; - if (!roots.length) return [doc.body]; - const outside: Element[] = []; - const collect = (el: Element) => { - for (const child of childElements(el)) { - if (roots.includes(child)) continue; - if (roots.some((root) => child.contains(root))) collect(child); - else outside.push(child); - } - }; - collect(doc.body); - return [...roots, ...outside]; -} - -export function componentHosts( - ng: ComponentDebugNg, - doc: Document = document, +export function componentHosts( + ng: ComponentDebugNg, + tree: HostTree = documentTree(), limit = MAX_COMPONENTS, -): Element[] { - const out: Element[] = []; - const visit = (el: Element, depth: number) => { +): H[] { + const out: H[] = []; + const visit = (el: H, depth: number) => { if (out.length >= limit || depth > MAX_DEPTH) return; if (componentAt(ng, el)) out.push(el); - for (const child of childElements(el)) visit(child, depth + 1); + for (const child of tree.children(el)) visit(child, depth + 1); }; - for (const root of angularRoots(doc)) visit(root, 0); + for (const root of tree.roots()) visit(root, 0); return out; } -export function hostPath(ng: ComponentDebugNg, el: Element): string { +export function hostPath( + ng: ComponentDebugNg, + el: H, + tree: HostTree = documentTree(), +): string { const parts: string[] = []; - for (let node: Element | null = el; node; node = parentOf(node)) { + for (let node: H | null = el; node; node = tree.parent(node)) { if (!componentAt(ng, node)) continue; - const tag = node.tagName.toLowerCase(); - const parent = node.parentNode; - const twins = parent - ? Array.from(parent.children).filter((c) => c.tagName === node!.tagName) - : []; + const tag = tree.tag(node); + const parent = tree.parent(node); + const twins = parent ? tree.children(parent).filter((c) => tree.tag(c) === tag) : []; parts.unshift(twins.length > 1 ? `${tag}[${twins.indexOf(node) + 1}]` : tag); } return parts.join(' > '); } -function unwrap(ng: ComponentDebugNg, value: unknown): unknown { +function unwrap(ng: ComponentDebugNg, value: unknown): unknown { if (typeof value !== 'function') return value; const signal = read(() => !!ng.isSignal?.(value), false); return signal ? read(() => (value as () => unknown)(), undefined) : value; @@ -128,8 +101,8 @@ function propName(entry: unknown, fallback: string): string { return fallback; } -function readInputs( - ng: ComponentDebugNg, +function readInputs( + ng: ComponentDebugNg, instance: object, inputs: Record | undefined, ): ComponentProp[] { @@ -152,7 +125,11 @@ function readOutputs( .map(([name, entry]) => ({ name, prop: propName(entry, name), listened: listened.has(name) })); } -export function componentDetail(ng: ComponentDebugNg, el: Element): ComponentDetail | null { +export function componentDetail( + ng: ComponentDebugNg, + el: H, + tree: HostTree = documentTree(), +): ComponentDetail | null { const instance = componentAt(ng, el); if (!instance) return null; const meta = read(() => ng.getDirectiveMetadata?.(instance) ?? null, null); @@ -167,8 +144,8 @@ export function componentDetail(ng: ComponentDebugNg, el: Element): ComponentDet const detail: ComponentDetail = { id: elementId(el), name: nameOf(instance), - tag: el.tagName.toLowerCase(), - path: hostPath(ng, el), + tag: tree.tag(el), + path: hostPath(ng, el, tree), inputs: readInputs(ng, instance, meta?.inputs), outputs: readOutputs(meta?.outputs, listened), listeners: dom.slice(0, MAX_PROPS), @@ -189,20 +166,20 @@ export function componentDetail(ng: ComponentDebugNg, el: Element): ComponentDet const injector = read(() => ng.getInjector?.(el) ?? null, null); if (injector) { - detail.dependencies = dependenciesOf(ng, injector, [instance.constructor], true); + detail.dependencies = dependenciesOf(ng, injector, [instance.constructor], true, tree); } return detail; } -export function collectComponentTree( - ng: ComponentDebugNg | undefined, - options: { doc?: Document; selectedId?: string | null } = {}, +export function collectComponentTree( + ng: ComponentDebugNg | undefined, + options: { tree?: HostTree; selectedId?: string | null } = {}, ): Omit { - const doc = options.doc ?? document; + const tree = options.tree ?? documentTree(); const report: Omit = { roots: [], count: 0, detail: null }; if (!ng?.getComponent) return report; - const visit = (el: Element, out: LiveComponentNode[], depth: number) => { + const visit = (el: H, out: LiveComponentNode[], depth: number) => { if (depth > MAX_DEPTH) { report.truncated = true; return; @@ -218,7 +195,7 @@ export function collectComponentTree( const node: LiveComponentNode = { id: elementId(el), name: nameOf(instance), - tag: el.tagName.toLowerCase(), + tag: tree.tag(el), children: [], }; const directives = directivesAt(ng, el) @@ -228,12 +205,13 @@ export function collectComponentTree( out.push(node); target = node.children; } - for (const child of childElements(el)) visit(child, target, depth + 1); + for (const child of tree.children(el)) visit(child, target, depth + 1); }; - for (const root of angularRoots(doc)) visit(root, report.roots, 0); + for (const root of tree.roots()) visit(root, report.roots, 0); - pruneElementIds(); - const selected = options.selectedId ? elementById(options.selectedId) : null; - if (selected) report.detail = componentDetail(ng, selected); + const connected = (host: object) => tree.isHost(host) && tree.connected(host); + pruneElementIds(connected); + const selected = options.selectedId ? elementById(options.selectedId, connected) : null; + if (selected && tree.isHost(selected)) report.detail = componentDetail(ng, selected, tree); return report; } diff --git a/packages/ng-devtools/src/element-id.ts b/packages/ng-devtools/src/element-id.ts index 3ed993c..ff6694a 100644 --- a/packages/ng-devtools/src/element-id.ts +++ b/packages/ng-devtools/src/element-id.ts @@ -1,9 +1,13 @@ -const ids = new WeakMap(); -const byId = new Map>(); +const ids = new WeakMap(); +const byId = new Map>(); const load = Math.random().toString(36).slice(2, 6).padEnd(4, '0'); let nextId = 0; -export function elementId(el: Element): string { +type Connected = (host: object) => boolean; + +const isConnected: Connected = (host) => (host as { isConnected?: unknown }).isConnected === true; + +export function elementId(el: object): string { let id = ids.get(el); if (!id) { id = `c${load}-${++nextId}`; @@ -13,18 +17,18 @@ export function elementId(el: Element): string { return id; } -export function elementById(id: string): Element | null { +export function elementById(id: string, connected: Connected = isConnected): object | null { const el = byId.get(id)?.deref(); if (!el) { byId.delete(id); return null; } - return el.isConnected ? el : null; + return connected(el) ? el : null; } -export function pruneElementIds() { +export function pruneElementIds(connected: Connected = isConnected) { for (const [id, ref] of byId) { const el = ref.deref(); - if (!el || !el.isConnected) byId.delete(id); + if (!el || !connected(el)) byId.delete(id); } } diff --git a/packages/ng-devtools/src/host-tree.ts b/packages/ng-devtools/src/host-tree.ts new file mode 100644 index 0000000..8c03f6c --- /dev/null +++ b/packages/ng-devtools/src/host-tree.ts @@ -0,0 +1,139 @@ +/** + * The tree Angular rendered into, as the collectors walk it. The browser + * overlay walks the DOM; a platform without one, such as NativeScript, + * describes its own views instead. + */ +export interface HostTree { + /** Where a walk of the app starts, in render order. */ + roots(): H[]; + /** Direct children, in render order. */ + children(host: H): H[]; + parent(host: H): H | null; + /** What the host is called in a component path: a tag name or a view type. */ + tag(host: H): string; + /** Whether the host is still part of the rendered tree. */ + connected(host: H): boolean; + /** Whether a value, such as an element injector's source, is a host of this tree. */ + isHost(value: unknown): value is H; + /** A string that `find()` resolves back to the host. */ + selector(host: H): string; + /** The host a selector names, or null when it names none or is not valid. */ + find(selector: string): H | null; + /** The component the router rendered deepest in the primary outlet chain. */ + routed?(isComponentHost: (host: H) => boolean): H | null; +} + +export function childElements(el: Element): Element[] { + const children = Array.from(el.children); + const shadow = (el as Element & { shadowRoot?: ShadowRoot | null }).shadowRoot; + if (shadow) children.push(...Array.from(shadow.children)); + return children; +} + +function parentOf(el: Element): Element | null { + if (el.parentElement) return el.parentElement; + const root = el.parentNode; + return root && 'host' in root ? ((root as ShadowRoot).host ?? null) : null; +} + +export function angularRoots(doc: Document = document): Element[] { + const tagged = Array.from(doc.querySelectorAll('[ng-version]')); + const roots = tagged.filter((root) => !tagged.some((o) => o !== root && o.contains(root))); + if (!doc.body) return roots; + if (!roots.length) return [doc.body]; + const outside: Element[] = []; + const collect = (el: Element) => { + for (const child of childElements(el)) { + if (roots.includes(child)) continue; + if (roots.some((root) => child.contains(root))) collect(child); + else outside.push(child); + } + }; + collect(doc.body); + return [...roots, ...outside]; +} + +function isPrimaryOutlet(outlet: Element): boolean { + const name = outlet.getAttribute('name'); + return !name || name === 'primary'; +} + +function outletBefore(el: Element): Element | null { + const prev = el.previousElementSibling; + return prev && prev.tagName === 'ROUTER-OUTLET' ? prev : null; +} + +function routedElement(doc: Document, isComponentHost: (el: Element) => boolean): Element | null { + let best: Element | null = null; + let bestDepth = -1; + for (const outlet of Array.from(doc.querySelectorAll('router-outlet'))) { + if (!isPrimaryOutlet(outlet)) continue; + const el = outlet.nextElementSibling; + if (!el || !isComponentHost(el)) continue; + let depth = 0; + let primary = true; + for (let node: Element | null = el; node; node = node.parentElement) { + const before = outletBefore(node); + if (!before || !isComponentHost(node)) continue; + if (!isPrimaryOutlet(before)) { + primary = false; + break; + } + depth++; + } + if (primary && depth > bestDepth) { + best = el; + bestDepth = depth; + } + } + return best; +} + +/** The DOM of `doc`. Selectors are cached, so take a fresh tree for each collection. */ +export function domTree(doc: Document = document): HostTree { + const selectors = new Map(); + const positions = new Map(); + const top = doc.documentElement; + const selector = (el: Element): string => { + if (el === top) return ''; + const known = selectors.get(el); + if (known !== undefined) return known; + const parent = el.parentElement; + const tag = el.tagName.toLowerCase(); + let out = tag; + if (parent) { + if (!positions.has(el)) { + let index = 0; + for (const child of Array.from(parent.children)) positions.set(child, ++index); + } + const prefix = selector(parent); + const part = `${tag}:nth-child(${positions.get(el)})`; + out = prefix ? `${prefix} > ${part}` : part; + } + selectors.set(el, out); + return out; + }; + + return { + roots: () => angularRoots(doc), + children: childElements, + parent: parentOf, + tag: (el) => el.tagName.toLowerCase(), + connected: (el) => el.isConnected, + isHost: (value): value is Element => typeof Element !== 'undefined' && value instanceof Element, + selector, + find: (query) => { + try { + return doc.querySelector(query); + } catch { + return null; + } + }, + routed: (isComponentHost) => routedElement(doc, isComponentHost), + }; +} + +/** The DOM tree, for a collector whose host type is a parameter that defaults to Element. */ +export function documentTree(): HostTree { + return domTree() as unknown as HostTree; +} diff --git a/packages/ng-devtools/src/injector-tree.ts b/packages/ng-devtools/src/injector-tree.ts index 8086f05..9994df4 100644 --- a/packages/ng-devtools/src/injector-tree.ts +++ b/packages/ng-devtools/src/injector-tree.ts @@ -5,6 +5,7 @@ import type { InjectorTreeReport, ProviderInfo, } from './types.ts'; +import { documentTree, type HostTree } from './host-tree.ts'; interface ProviderRecord { token: unknown; @@ -13,10 +14,10 @@ interface ProviderRecord { importPath?: unknown[]; } -export interface DebugNg { - getInjector?(el: Element): unknown; - getComponent?(el: Element): unknown; - getDirectives?(el: Element): unknown[]; +export interface DebugNg { + getInjector?(el: H): unknown; + getComponent?(el: H): unknown; + getDirectives?(el: H): unknown[]; ɵgetInjectorMetadata?(injector: unknown): { type: string; source: unknown } | null; ɵgetInjectorProviders?(injector: unknown): ProviderRecord[]; ɵgetInjectorResolutionPath?(injector: unknown): unknown[]; @@ -76,7 +77,7 @@ function isBuiltInElementToken(record: ProviderRecord): boolean { return record.provider === record.token && !!token && '__NG_ELEMENT_ID__' in token; } -function toProviders(ng: DebugNg, injector: unknown): ProviderInfo[] { +function toProviders(ng: DebugNg, injector: unknown): ProviderInfo[] { let records: ProviderRecord[]; try { records = ng.ɵgetInjectorProviders?.(injector) ?? []; @@ -98,32 +99,6 @@ function toProviders(ng: DebugNg, injector: unknown): ProviderInfo[] { }); } -function selectorCache(doc: Document) { - const selectors = new Map(); - const positions = new Map(); - const top = doc.documentElement; - const selectorOf = (el: Element): string => { - if (el === top) return ''; - const known = selectors.get(el); - if (known !== undefined) return known; - const parent = el.parentElement; - const tag = el.tagName.toLowerCase(); - let out = tag; - if (parent) { - if (!positions.has(el)) { - let index = 0; - for (const child of Array.from(parent.children)) positions.set(child, ++index); - } - const prefix = selectorOf(parent); - const part = `${tag}:nth-child(${positions.get(el)})`; - out = prefix ? `${prefix} > ${part}` : part; - } - selectors.set(el, out); - return out; - }; - return selectorOf; -} - function environmentName(injector: unknown, source: unknown): string { const scopes = (injector as { scopes?: Set } | null)?.scopes; if (scopes?.has('platform')) return 'Platform'; @@ -134,7 +109,11 @@ function environmentName(injector: unknown, source: unknown): string { export const NULL_INJECTOR_ID = 'inj-null'; -export function injectorRef(ng: DebugNg, injector: unknown): { id: string; name: string } | null { +export function injectorRef( + ng: DebugNg, + injector: unknown, + tree: HostTree = documentTree(), +): { id: string; name: string } | null { if (!injector || typeof injector !== 'object') return null; let meta: { type: string; source: unknown } | null = null; try { @@ -143,19 +122,20 @@ export function injectorRef(ng: DebugNg, injector: unknown): { id: string; name: return null; } if (meta?.type === 'element') { - return meta.source instanceof Element - ? { id: idFor(meta.source), name: `<${meta.source.tagName.toLowerCase()}>` } + return tree.isHost(meta.source) + ? { id: idFor(meta.source), name: `<${tree.tag(meta.source)}>` } : null; } if (meta?.type === 'null') return { id: NULL_INJECTOR_ID, name: 'Null injector' }; return { id: idFor(injector), name: environmentName(injector, meta?.source) }; } -export function dependenciesOf( - ng: DebugNg, +export function dependenciesOf( + ng: DebugNg, injector: unknown, owners: Iterable, withNames = false, + tree: HostTree = documentTree(), ): DependencyInfo[] { const out: DependencyInfo[] = []; for (const ctor of owners) { @@ -167,7 +147,7 @@ export function dependenciesOf( const flags = Object.entries(dep.flags ?? {}) .filter(([, on]) => on) .map(([flag]) => flag); - const by = dep.providedIn ? injectorRef(ng, dep.providedIn) : null; + const by = dep.providedIn ? injectorRef(ng, dep.providedIn, tree) : null; const info: DependencyInfo = { from: className(ctor), token: tokenName(dep.token), @@ -198,9 +178,9 @@ interface ElementEntry { export const MAX_INJECTOR_NODES = 2000; -const elementEntries = new WeakMap(); +const elementEntries = new WeakMap(); -function environmentsOf(ng: DebugNg, path: unknown[]): object[] { +function environmentsOf(ng: DebugNg, path: unknown[]): object[] { return path.filter((injector) => { try { return ng.ɵgetInjectorMetadata!(injector)?.type === 'environment'; @@ -210,7 +190,11 @@ function environmentsOf(ng: DebugNg, path: unknown[]): object[] { }) as object[]; } -function readElement(ng: DebugNg, el: Element): ElementEntry | null { +function readElement( + ng: DebugNg, + el: H, + tree: HostTree, +): ElementEntry | null { const cached = elementEntries.get(el); if (cached) return cached; let component: unknown = null; @@ -248,27 +232,27 @@ function readElement(ng: DebugNg, el: Element): ElementEntry | null { const info: Omit = { id: idFor(el), type: 'element', - name: el.tagName.toLowerCase(), + name: tree.tag(el), providerCount: providers.length, directives: [...owners].map(className), path: path - .map((entry) => injectorRef(ng, entry)?.id ?? null) + .map((entry) => injectorRef(ng, entry, tree)?.id ?? null) .filter((id): id is string => !!id), }; if (typeof componentCtor === 'function') info.component = className(componentCtor); const entry: ElementEntry = { info, providers, - dependencies: dependenciesOf(ng, injector, owners), + dependencies: dependenciesOf(ng, injector, owners, false, tree), environments: environmentsOf(ng, path), }; elementEntries.set(el, entry); return entry; } -export function collectInjectorTree( - ng: DebugNg | undefined, - doc: Document = document, +export function collectInjectorTree( + ng: DebugNg | undefined, + tree: HostTree = documentTree(), ): InjectorTreeReport & { truncated?: boolean } { const empty: InjectorTreeReport = { roots: [], environment: [] }; if (!ng?.getInjector || !ng.ɵgetInjectorMetadata) return empty; @@ -300,37 +284,40 @@ export function collectInjectorTree( }); }; - const selectorOf = selectorCache(doc); - const elementNodes = new Map(); const roots: InjectorTreeNode[] = []; + let count = 0; let truncated = false; - const walker = doc.createTreeWalker(doc.body ?? doc.documentElement, 1); + // Depth first in render order; each entry carries the list its nearest + // injector-bearing ancestor collects children into. + const stack: { el: H; into: InjectorTreeNode[] }[] = tree + .roots() + .map((el) => ({ el, into: roots })) + .reverse(); - for ( - let el = walker.currentNode as Element | null; - el; - el = walker.nextNode() as Element | null - ) { - const entry = readElement(ng, el); - if (!entry) continue; - if (elementNodes.size >= MAX_INJECTOR_NODES) { - truncated = true; - break; + while (stack.length) { + const { el, into } = stack.pop()!; + let childrenInto = into; + const entry = readElement(ng, el, tree); + if (entry) { + if (count >= MAX_INJECTOR_NODES) { + truncated = true; + break; + } + count++; + noteEnvironment(entry.environments); + const node: InjectorTreeNode = { + injector: { ...entry.info, selector: tree.selector(el) }, + providers: entry.providers, + children: [], + dependencies: entry.dependencies, + }; + into.push(node); + childrenInto = node.children; + } + const children = tree.children(el); + for (let i = children.length - 1; i >= 0; i--) { + stack.push({ el: children[i], into: childrenInto }); } - noteEnvironment(entry.environments); - - const node: InjectorTreeNode = { - injector: { ...entry.info, selector: selectorOf(el) }, - providers: entry.providers, - children: [], - dependencies: entry.dependencies, - }; - elementNodes.set(el, node); - - let parent: Element | null = el.parentElement; - while (parent && !elementNodes.has(parent)) parent = parent.parentElement; - if (parent) elementNodes.get(parent)!.children.push(node); - else roots.push(node); } const environment: InjectorTreeNode[] = []; diff --git a/packages/ng-devtools/src/ngrx-collector.ts b/packages/ng-devtools/src/ngrx-collector.ts index ae7ce28..879dac6 100644 --- a/packages/ng-devtools/src/ngrx-collector.ts +++ b/packages/ng-devtools/src/ngrx-collector.ts @@ -1,4 +1,5 @@ import { untracked } from '@angular/core'; +import { documentTree, type HostTree } from './host-tree.ts'; import { className, tokenName } from './injector-tree.ts'; import { diff, @@ -16,9 +17,9 @@ import { registeredPatchState } from './ngrx-register.ts'; type AnyRecord = Record; -export interface NgrxDebugNg { - getInjector?(el: Element): unknown; - getComponent?(el: Element): unknown; +export interface NgrxDebugNg { + getInjector?(el: H): unknown; + getComponent?(el: H): unknown; ɵgetInjectorMetadata?(injector: unknown): { type: string; source: unknown } | null; ɵgetInjectorProviders?(injector: unknown): { token: unknown; isViewProvider?: boolean }[]; ɵgetInjectorResolutionPath?(injector: unknown): unknown[]; @@ -98,20 +99,18 @@ function stripped(token: unknown): string { return tokenName(token).replace(/^_+/, ''); } -function componentElements(ng: NgrxDebugNg, doc: Document): Element[] { - const out: Element[] = []; - const walker = doc.createTreeWalker(doc.body ?? doc.documentElement, 1); - for ( - let el = walker.currentNode as Element | null; - el; - el = walker.nextNode() as Element | null - ) { +function componentElements(ng: NgrxDebugNg, tree: HostTree): H[] { + const out: H[] = []; + const stack = tree.roots().reverse(); + while (stack.length) { + const el = stack.pop()!; if (read(() => !!ng.getComponent?.(el), false)) out.push(el); + stack.push(...tree.children(el).reverse()); } return out; } -function envScope(ng: NgrxDebugNg, injector: AnyRecord): string { +function envScope(ng: NgrxDebugNg, injector: AnyRecord): string { if (read(() => injector['scopes']?.has?.('root'), false)) return 'root'; if (read(() => injector['scopes']?.has?.('platform'), false)) return 'platform'; const source = read(() => ng.ɵgetInjectorMetadata?.(injector)?.source, undefined); @@ -172,10 +171,10 @@ export interface NgrxCollector { stop(): void; } -export function createNgrxCollector( - getNg: () => NgrxDebugNg | undefined, +export function createNgrxCollector( + getNg: () => NgrxDebugNg | undefined, onChange: () => void, - doc: Document = document, + tree: HostTree = documentTree(), ): NgrxCollector { const ids = new WeakMap(); let nextId = 0; @@ -334,7 +333,7 @@ export function createNgrxCollector( return t; }; - const findClassic = (ng: NgrxDebugNg, envs: Map, rootInjector: unknown) => { + const findClassic = (ng: NgrxDebugNg, envs: Map, rootInjector: unknown) => { const want: Record boolean> = { Store: (v) => typeof v['dispatch'] === 'function' && typeof v['select'] === 'function', ScannedActionsSubject: (v) => typeof v['subscribe'] === 'function', @@ -432,13 +431,13 @@ export function createNgrxCollector( }; let discovered = false; - const discover = (ng: NgrxDebugNg) => { + const discover = (ng: NgrxDebugNg) => { const found = new Set(); const envs = new Map(); - const elements = componentElements(ng, doc); + const elements = componentElements(ng, tree); let rootInjector: unknown = null; - const perElement: { el: Element; injector: unknown; component: AnyRecord | null }[] = []; + const perElement: { el: H; injector: unknown; component: AnyRecord | null }[] = []; for (const el of elements) { const injector = read(() => ng.getInjector!(el), null); if (!injector) continue; @@ -468,7 +467,7 @@ export function createNgrxCollector( } for (const { el, injector, component } of perElement) { - const owner = component ? className(component.constructor) : el.tagName.toLowerCase(); + const owner = component ? className(component.constructor) : tree.tag(el); for (const p of read(() => ng.ɵgetInjectorProviders?.(injector) ?? [], [])) { if (!/^SignalStore\d*$/.test(stripped(p.token))) continue; const value = read( diff --git a/packages/ng-devtools/src/ngrx-overlay.ts b/packages/ng-devtools/src/ngrx-overlay.ts index 782452b..4767a17 100644 --- a/packages/ng-devtools/src/ngrx-overlay.ts +++ b/packages/ng-devtools/src/ngrx-overlay.ts @@ -1,3 +1,4 @@ +import { documentTree, type HostTree } from './host-tree.ts'; import { createNgrxCollector, type NgrxDebugNg } from './ngrx-collector.ts'; import type { NgrxPageReport, NgrxRequest } from './ngrx-shared.ts'; @@ -16,7 +17,24 @@ interface RpcScope { const HEARTBEAT_MS = 5000; -export function attachNgrx(my: RpcScope, pageId: string, getNg: () => NgrxDebugNg | undefined) { +export interface NgrxPageOptions { + tree?: HostTree; + /** Where the app is, for the page list. */ + describe?: () => { url: string; title: string }; +} + +const describeDocument = () => ({ + url: location.pathname + location.search, + title: document.title, +}); + +export function attachNgrx( + my: RpcScope, + pageId: string, + getNg: () => NgrxDebugNg | undefined, + options: NgrxPageOptions = {}, +) { + const describe = options.describe ?? describeDocument; const session = Math.random().toString(36).slice(2, 10); let sentSeq = 0; let lastBody = ''; @@ -35,7 +53,7 @@ export function attachNgrx(my: RpcScope, pageId: string, getNg: () => NgrxDebugN }, 50); }; - const collector = createNgrxCollector(getNg, () => schedule()); + const collector = createNgrxCollector(getNg, () => schedule(), options.tree ?? documentTree()); const push = async (rediscover = true) => { if (pushing) return schedule(rediscover); @@ -51,8 +69,7 @@ export function attachNgrx(my: RpcScope, pageId: string, getNg: () => NgrxDebugN const report: NgrxPageReport = { pageId, session, - url: location.pathname + location.search, - title: document.title, + ...describe(), stores, classic, log, diff --git a/packages/ng-devtools/src/overlay.ts b/packages/ng-devtools/src/overlay.ts index c9355b2..9f2322a 100644 --- a/packages/ng-devtools/src/overlay.ts +++ b/packages/ng-devtools/src/overlay.ts @@ -1,5 +1,6 @@ import { connectDevframe } from 'devframe/client'; export { registerNgrxSignals } from './ngrx-register.ts'; +export { installSignalWriteHook } from './signal-history.ts'; import { attachAnalog } from './analog-runtime.ts'; import { attachForms } from './forms-collector.ts'; import { attachPipes } from './pipes-collector.ts'; @@ -29,7 +30,7 @@ import { storedInstrumented, type PreloadRecord, } from './router-actions.ts'; -import { createSignalHistory, type RawSignalNode } from './signal-history.ts'; +import { createSignalHistory, installSignalWriteHook } from './signal-history.ts'; import { collectComponentTree } from './component-tree.ts'; import { elementById } from './element-id.ts'; import { collectSignalGraph, graphKey, toSignalTarget, type SignalTarget } from './signal-graph.ts'; @@ -458,41 +459,6 @@ function clearHighlight() { highlightEl = null; } -// --- Signal Graph collection using Angular's debug API --- -type SignalSetHook = ((node: RawSignalNode) => void) | null; - -export async function installSignalWriteHook( - onWrite: (node: RawSignalNode) => void, - load: () => Promise<{ setPostSignalSetFn: (fn: SignalSetHook) => SignalSetHook }> = () => - import('@angular/core/primitives/signals') as never, -): Promise<() => void> { - let setHook: (fn: SignalSetHook) => SignalSetHook; - try { - ({ setPostSignalSetFn: setHook } = await load()); - } catch { - // Without the hook, history falls back to poll samples only. - return () => {}; - } - let prev: SignalSetHook = null; - let active = true; - const hook = (node: RawSignalNode) => { - prev?.(node); - if (!active) return; - try { - onWrite(node); - } catch { - return; - } - }; - prev = setHook(hook); - return () => { - active = false; - const current = setHook(prev); - // Someone chained after us; keep theirs, our hook now just forwards. - if (current !== hook) setHook(current); - }; -} - function read(fn: () => T, fallback: T): T { try { return fn(); diff --git a/packages/ng-devtools/src/signal-graph.ts b/packages/ng-devtools/src/signal-graph.ts index a3a7ce2..fb441a1 100644 --- a/packages/ng-devtools/src/signal-graph.ts +++ b/packages/ng-devtools/src/signal-graph.ts @@ -1,10 +1,11 @@ import { componentHosts, hostPath, type ComponentDebugNg } from './component-tree.ts'; import { elementById, elementId } from './element-id.ts'; +import { documentTree, type HostTree } from './host-tree.ts'; import { className } from './injector-tree.ts'; import { serializeNamed } from './serialize.ts'; import type { SignalGraph, SignalGraphEdge, SignalGraphNode, SignalNodeKind } from './types.ts'; -export interface SignalDebugNg extends ComponentDebugNg { +export interface SignalDebugNg extends ComponentDebugNg { ɵgetSignalGraph?(injector: unknown): { nodes: { id: string; kind?: string; label?: string; epoch?: number; value?: unknown }[]; edges?: SignalGraphEdge[]; @@ -25,7 +26,7 @@ function read(fn: () => T, fallback: T): T { } } -function isComponentHost(ng: SignalDebugNg, el: Element | null): el is Element { +function isComponentHost(ng: SignalDebugNg, el: H | null): el is H { return !!el && !!read(() => ng.getComponent?.(el), null); } @@ -40,50 +41,20 @@ export function toSignalTarget(request: unknown, pageId: string): SignalTarget | return typeof id === 'string' && id ? { id } : null; } -function resolveTarget(target: SignalTarget, doc: Document): Element | null { +function resolveTarget(target: SignalTarget, tree: HostTree): H | null { if (!target) return null; - if ('id' in target) return elementById(target.id); - try { - return doc.querySelector(target.selector); - } catch { - return null; + if ('id' in target) { + const host = elementById(target.id, (h) => tree.isHost(h) && tree.connected(h)); + return host && tree.isHost(host) ? host : null; } + return tree.find(target.selector); } -function isPrimaryOutlet(outlet: Element): boolean { - const name = outlet.getAttribute('name'); - return !name || name === 'primary'; -} - -function outletBefore(el: Element): Element | null { - const prev = el.previousElementSibling; - return prev && prev.tagName === 'ROUTER-OUTLET' ? prev : null; -} - -export function routedComponent(ng: SignalDebugNg, doc: Document = document): Element | null { - let best: Element | null = null; - let bestDepth = -1; - for (const outlet of Array.from(doc.querySelectorAll('router-outlet'))) { - if (!isPrimaryOutlet(outlet)) continue; - const el = outlet.nextElementSibling; - if (!isComponentHost(ng, el)) continue; - let depth = 0; - let primary = true; - for (let node: Element | null = el; node; node = node.parentElement) { - const before = outletBefore(node); - if (!before || !isComponentHost(ng, node)) continue; - if (!isPrimaryOutlet(before)) { - primary = false; - break; - } - depth++; - } - if (primary && depth > bestDepth) { - best = el; - bestDepth = depth; - } - } - return best; +export function routedComponent( + ng: SignalDebugNg, + tree: HostTree = documentTree(), +): H | null { + return tree.routed?.((host) => isComponentHost(ng, host)) ?? null; } function signalNodeOf(value: unknown): { kind?: string; debugName?: string } | null { @@ -96,7 +67,10 @@ function signalNodeOf(value: unknown): { kind?: string; debugName?: string } | n return null; } -function linkedSignalReaders(ng: SignalDebugNg, instance: object): Map unknown> { +function linkedSignalReaders( + ng: SignalDebugNg, + instance: object, +): Map unknown> { const readers = new Map unknown>(); for (const key of read(() => Object.keys(instance), [] as string[])) { const value = read(() => (instance as Record)[key], undefined); @@ -111,9 +85,10 @@ function linkedSignalReaders(ng: SignalDebugNg, instance: object): Map( + ng: SignalDebugNg, + el: H, + tree: HostTree, source: NonNullable, ): SignalGraph | null { const instance = read(() => ng.getComponent?.(el), null); @@ -144,7 +119,7 @@ function graphFor( const edges = (raw.edges ?? []).filter( (e) => e.consumer < kept.length && e.producer < kept.length, ); - const tag = el.tagName.toLowerCase(); + const tag = tree.tag(el); return { nodes, edges, @@ -153,31 +128,31 @@ function graphFor( id: elementId(el), name: className((instance as { constructor: new () => unknown }).constructor), tag, - path: hostPath(ng, el), + path: hostPath(ng, el, tree), }, source, }; } -export function collectSignalGraph( - ng: SignalDebugNg | undefined, +export function collectSignalGraph( + ng: SignalDebugNg | undefined, target: SignalTarget = null, - doc: Document = document, + tree: HostTree = documentTree(), ): SignalGraph | null { if (!ng?.ɵgetSignalGraph || !ng.getInjector || !ng.getComponent) return null; - const picked = resolveTarget(target, doc); + const picked = resolveTarget(target, tree); if (isComponentHost(ng, picked)) { - const graph = graphFor(ng, picked, 'selected'); + const graph = graphFor(ng, picked, tree, 'selected'); if (graph) return graph; } - const routed = routedComponent(ng, doc); + const routed = routedComponent(ng, tree); if (routed) { - const graph = graphFor(ng, routed, 'routed'); + const graph = graphFor(ng, routed, tree, 'routed'); if (graph) return graph; } let empty: SignalGraph | null = null; - for (const host of componentHosts(ng, doc, MAX_FALLBACK_HOSTS)) { - const graph = graphFor(ng, host, 'root'); + for (const host of componentHosts(ng, tree, MAX_FALLBACK_HOSTS)) { + const graph = graphFor(ng, host, tree, 'root'); if (graph?.nodes.length) return graph; empty ??= graph; } diff --git a/packages/ng-devtools/src/signal-history.ts b/packages/ng-devtools/src/signal-history.ts index f7f6ed3..67f617f 100644 --- a/packages/ng-devtools/src/signal-history.ts +++ b/packages/ng-devtools/src/signal-history.ts @@ -143,3 +143,37 @@ export function createSignalHistory( return { onWrite, collect, collectDelta }; } + +type SignalSetHook = ((node: RawSignalNode) => void) | null; + +export async function installSignalWriteHook( + onWrite: (node: RawSignalNode) => void, + load: () => Promise<{ setPostSignalSetFn: (fn: SignalSetHook) => SignalSetHook }> = () => + import('@angular/core/primitives/signals') as never, +): Promise<() => void> { + let setHook: (fn: SignalSetHook) => SignalSetHook; + try { + ({ setPostSignalSetFn: setHook } = await load()); + } catch { + // Without the hook, history falls back to poll samples only. + return () => {}; + } + let prev: SignalSetHook = null; + let active = true; + const hook = (node: RawSignalNode) => { + prev?.(node); + if (!active) return; + try { + onWrite(node); + } catch { + return; + } + }; + prev = setHook(hook); + return () => { + active = false; + const current = setHook(prev); + // Someone chained after us; keep theirs, our hook now just forwards. + if (current !== hook) setHook(current); + }; +} From 154cabff885f7d1a42fd4ac3ad5b302016a97d8d Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 11:29:28 -0700 Subject: [PATCH 2/7] feat(overlay): add a NativeScript overlay A NativeScript Angular app has no DOM, so the browser overlay cannot run in it. The new `@santoshyadavdev/ng-devtools/overlay-nativescript` entry walks the native view tree from the root component host through the shared collectors and reports over a WebSocket to a devtools server on the developer's machine, with the same page reports the browser overlay sends: the component tree and the selected component's detail, the signal graph of the selected or first signal-bearing component with its write history, the injector tree with the environment injectors above it, NgRx stores, and the highlight event, which outlines the native view. The runtime needs a few things a browser has for free. A WebSocket global must come from the app (for example @valor/nativescript-websockets), and `location` and `navigator` are shimmed for devframe's client. Angular only wires its injector profiler, which backs the DI panel, when `window` exists as the platform is created, so a `window` is defined until core publishes `getComponent` and removed then; the sentinel is that property rather than the `ng` object itself because provideRouter() publishes its own utilities onto that object earlier. The devframe client has no reconnect, and the server and the app restart independently, so a failed or dropped session is replaced after a pause. @nativescript/core is an optional peer dependency and stays external to the build, like Angular. --- README.md | 57 +++ packages/ng-devtools/package.json | 10 +- .../__tests__/overlay-nativescript.test.ts | 174 ++++++++ .../src/overlay-nativescript-views.ts | 154 +++++++ .../ng-devtools/src/overlay-nativescript.ts | 395 ++++++++++++++++++ packages/ng-devtools/tsdown.config.ts | 3 +- pnpm-lock.yaml | 75 ++++ 7 files changed, 866 insertions(+), 2 deletions(-) create mode 100644 packages/ng-devtools/src/__tests__/overlay-nativescript.test.ts create mode 100644 packages/ng-devtools/src/overlay-nativescript-views.ts create mode 100644 packages/ng-devtools/src/overlay-nativescript.ts diff --git a/README.md b/README.md index de8669f..3fdb9ab 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,63 @@ createDevtoolsPopup(); This adds a floating button (bottom-right) that opens the full devtools UI in an iframe. Supports three dock modes (float, bottom, right), dragging, resizing, and persists position via localStorage. The popup is automatically loaded in development when using the demo app. +## NativeScript + +The same devtools work inside a NativeScript Angular app. The app has no DOM, so a +separate overlay walks the native view tree through Angular's debug API and reports +over a WebSocket to a devtools server running on your machine. The component tree, +signal graph, injector tree (including environment injectors and their providers), +the highlight tool and the MCP surface all work; the source scanners run against +the app's `src/`. + +### Set up an app + +```sh +npm install @santoshyadavdev/ng-devtools @valor/nativescript-websockets +``` + +```ts +// src/polyfills.ts — first import, so the runtime has a WebSocket global +import '@valor/nativescript-websockets'; +``` + +```ts +// src/main.ts — before runNativeScriptAngularApp() +import { initNativeScriptOverlay } from '@santoshyadavdev/ng-devtools/overlay-nativescript'; + +if (__DEV__) { + initNativeScriptOverlay(); +} +``` + +`initNativeScriptOverlay()` must run before Angular bootstraps: the DI inspector +relies on Angular's injector profiler, which Angular only wires while it creates +the platform. The overlay connects to `http://localhost:9999/` on the iOS +simulator and `http://10.0.2.2:9999/` on the Android emulator; pass +`{ baseURL }` for a physical device, and allow plain HTTP to that address in +`Info.plist` / `AndroidManifest.xml`. + +### Run the devtools server + +```sh +cd my-nativescript-app +npx @santoshyadavdev/ng-devtools dev --host 0.0.0.0 --no-auth +``` + +Then open `http://localhost:9999/` for the UI, or point an MCP client at +`http://localhost:9999/__mcp`. + +### Example app + +`app-nativescript/` is a `ns create --ng` project wired up this way, with a small +showcase component (signals, a computed, an effect and a component-level +provider). Tested on the iOS simulator; Android has not been verified yet. + +```sh +pnpm devtools:nativescript # devtools server scanning app-nativescript/src +cd app-nativescript && ns debug ios --no-hmr +``` + ## Demo App The repository includes a demo app, **Angular Travel** (`src/`), that looks and behaves like a real booking site so every inspector has something to show: diff --git a/packages/ng-devtools/package.json b/packages/ng-devtools/package.json index 7e0357c..2acac4b 100644 --- a/packages/ng-devtools/package.json +++ b/packages/ng-devtools/package.json @@ -18,6 +18,7 @@ "./devframe": "./src/devframe.ts", "./overlay": "./src/overlay.ts", "./popup": "./src/popup.ts", + "./overlay-nativescript": "./src/overlay-nativescript.ts", "./http": "./src/http.ts", "./hub": "./src/hub.ts", "./package.json": "./package.json", @@ -29,6 +30,7 @@ "./devframe": "./dist/devframe.mjs", "./overlay": "./dist/overlay.mjs", "./popup": "./dist/popup.mjs", + "./overlay-nativescript": "./dist/overlay-nativescript.mjs", "./http": "./dist/http.mjs", "./hub": "./dist/hub.mjs", "./package.json": "./package.json", @@ -60,7 +62,8 @@ "devframe", "signals", "dependency-injection", - "mcp" + "mcp", + "nativescript" ], "dependencies": { "@devframes/agentic": "^1.1.0", @@ -73,12 +76,16 @@ "valibot": "^1.5.0" }, "peerDependencies": { + "@nativescript/core": ">=8", "@angular/common": ">=20", "@angular/core": ">=20", "rxjs": ">=7", "vite": ">=5" }, "peerDependenciesMeta": { + "@nativescript/core": { + "optional": true + }, "@angular/common": { "optional": true }, @@ -95,6 +102,7 @@ "devDependencies": { "@angular/common": "^22.1.0", "@angular/core": "^22.1.0", + "@nativescript/core": "^9.1.0", "rxjs": "~7.8.0", "tsdown": "^0.23.0" }, diff --git a/packages/ng-devtools/src/__tests__/overlay-nativescript.test.ts b/packages/ng-devtools/src/__tests__/overlay-nativescript.test.ts new file mode 100644 index 0000000..a33d2f9 --- /dev/null +++ b/packages/ng-devtools/src/__tests__/overlay-nativescript.test.ts @@ -0,0 +1,174 @@ +import { describe, expect, it } from 'vitest'; +import { collectComponentTree, componentHosts } from '../component-tree.ts'; +import { collectInjectorTree } from '../injector-tree.ts'; +import { + angularRootHost, + nativeScriptRoot, + nativeScriptTree, + renderedView, + selectorOf, + topmostView, + type NativeView, +} from '../overlay-nativescript-views.ts'; +import { collectSignalGraph, type SignalDebugNg } from '../signal-graph.ts'; + +/** A stand-in for a `@nativescript/core` view: children come from `eachChildView`. */ +function view(typeName: string, children: NativeView[] = [], extra: Partial = {}) { + const v: NativeView = { + typeName, + parent: null, + isLoaded: true, + eachChildView: (callback) => { + for (const child of children) if (callback(child) === false) break; + }, + ...extra, + }; + for (const child of children) child.parent = v; + return v; +} + +function component(selector: string, name: string, fields: Record = {}) { + const Cmp = { [name]: class {} }[name] as new () => object; + Object.assign(Cmp, { ɵcmp: { selectors: [[selector]] } }); + return Object.assign(new Cmp(), fields); +} + +type Ng = SignalDebugNg & { + getRootComponents?(host: unknown): unknown[]; + getHostElement?(component: unknown): NativeView | null; +}; + +describe('NativeScript host tree', () => { + // AppHostView(ns-app) > GridLayout > ProxyViewContainer(page-router-outlet) > Frame > Page + // > ProxyViewContainer(ns-person) > StackLayout > Label + const label = view('Label'); + const personHost = view('ProxyViewContainer', [view('StackLayout', [label])], { + customCSSName: 'ns-person', + }); + const page = view('Page', [personHost]); + const frame = view('Frame', [page]); + const outlet = view('ProxyViewContainer', [frame], { customCSSName: 'page-router-outlet' }); + const grid = view('GridLayout', [outlet]); + const appHost = view('AppHostView', [grid]); + // NativeScript hands out the root component's content as the root view, with + // no parent link back up to the host. + grid.parent = null; + + const app = component('ns-app', 'AppComponent'); + const person = component('ns-person', 'PersonComponent', { name: 'Ada' }); + const components = new Map([ + [appHost, app], + [personHost, person], + ]); + const ng: Ng = { + getComponent: (host) => components.get(host) ?? null, + getRootComponents: () => [app], + getHostElement: (c) => (c === app ? appHost : null), + }; + const tree = nativeScriptTree( + () => ng, + () => grid, + ); + + it('nests components through layouts, frames and pages', () => { + const report = collectComponentTree(ng, { tree }); + expect(report.count).toBe(2); + expect(report.roots).toHaveLength(1); + expect(report.roots[0]).toMatchObject({ name: 'AppComponent', tag: 'ns-app' }); + expect(report.roots[0].children).toHaveLength(1); + expect(report.roots[0].children[0]).toMatchObject({ + name: 'PersonComponent', + tag: 'ns-person', + }); + }); + + it('keeps ids stable across collections and resolves a selected id', () => { + const first = collectComponentTree(ng, { tree }); + const id = first.roots[0].children[0].id; + const second = collectComponentTree(ng, { tree, selectedId: id }); + expect(second.roots[0].children[0].id).toBe(id); + expect(second.detail).toMatchObject({ name: 'PersonComponent', path: 'ns-app > ns-person' }); + }); + + it('lists component hosts parents first and finds a host by selector', () => { + expect(componentHosts(ng, tree)).toEqual([appHost, personHost]); + expect(tree.find('ns-person')).toBe(personHost); + expect(tree.find('ns-missing')).toBeNull(); + }); + + it('links the root content back to the root component host', () => { + tree.roots(); + expect(tree.parent(grid)).toBe(appHost); + expect(tree.parent(appHost)).toBeNull(); + }); + + it('climbs to the top of the parent chain when Angular names no root', () => { + expect(topmostView(label)).toBe(grid); + const detached = view('GridLayout', [view('Label')]); + expect(angularRootHost(ng, detached)).toBe(appHost); + expect(nativeScriptRoot({ getComponent: () => null }, detached)).toBe(detached); + }); + + it('draws highlights on the first view below a proxy container', () => { + expect(renderedView(personHost).typeName).toBe('StackLayout'); + expect(renderedView(label)).toBe(label); + }); + + it('names a host by its component selector, then by the template element name', () => { + expect(selectorOf(personHost, component('ns-x', 'X'))).toBe('ns-x'); + expect(selectorOf(personHost, {})).toBe('ns-person'); + expect(selectorOf(label, null)).toBe('label'); + // An attribute selector has no element name to report. + const attr = { constructor: { ɵcmp: { selectors: [['', 'nsHighlight', '']] } } }; + expect(selectorOf(label, attr)).toBe('label'); + }); + + it('reports element injectors under their environment injectors', () => { + const root = { scopes: new Set(['root']) }; + const platform = { scopes: new Set(['platform']) }; + const injectors = new Map([ + [appHost, { host: appHost }], + [personHost, { host: personHost }], + ]); + const withInjectors: Ng = { + ...ng, + getInjector: (host) => injectors.get(host) ?? null, + ɵgetInjectorMetadata: (injector) => + injector === root || injector === platform + ? { type: 'environment', source: null } + : { type: 'element', source: (injector as { host: NativeView }).host }, + ɵgetInjectorProviders: (injector) => + injector === root ? [{ token: class PersonService {}, provider: class {} }] : [], + ɵgetInjectorResolutionPath: (injector) => [injector, root, platform], + }; + const first = collectInjectorTree(withInjectors, tree); + const again = collectInjectorTree(withInjectors, tree); + expect(first.roots[0].injector).toMatchObject({ name: 'ns-app', component: 'AppComponent' }); + expect(first.roots[0].children[0].injector).toMatchObject({ name: 'ns-person' }); + expect(again.roots[0].children[0].injector.id).toBe(first.roots[0].children[0].injector.id); + expect(first.environment[0].injector.name).toBe('Platform'); + expect(first.environment[0].children[0].injector).toMatchObject({ + name: 'Root', + providerCount: 1, + }); + }); + + it('reports the signal graph of a selected host', () => { + const withSignals: Ng = { + ...ng, + getInjector: (host) => host, + ɵgetSignalGraph: (injector) => + injector === personHost + ? { nodes: [{ id: '1', kind: 'signal', label: 'name', epoch: 1, value: 'Ada' }] } + : { nodes: [] }, + }; + const graph = collectSignalGraph(withSignals, { selector: 'ns-person' }, tree); + expect(graph).toMatchObject({ + source: 'selected', + componentSelector: 'ns-person', + component: { name: 'PersonComponent', path: 'ns-app > ns-person' }, + }); + expect(graph!.nodes[0]).toMatchObject({ label: 'name', value: 'Ada' }); + expect(collectSignalGraph(withSignals, null, tree)?.component?.name).toBe('PersonComponent'); + }); +}); diff --git a/packages/ng-devtools/src/overlay-nativescript-views.ts b/packages/ng-devtools/src/overlay-nativescript-views.ts new file mode 100644 index 0000000..7319440 --- /dev/null +++ b/packages/ng-devtools/src/overlay-nativescript-views.ts @@ -0,0 +1,154 @@ +// The NativeScript side of the overlay that needs no NativeScript import: +// Angular renders into `@nativescript/core` views instead of DOM elements, and +// the host tree here lets the shared collectors walk those views. + +import type { HostTree } from './host-tree.ts'; + +/** + * The part of a `@nativescript/core` View the overlay touches. Structural, so + * this file compiles and tests without the framework installed. + */ +export interface NativeView { + readonly typeName: string; + parent?: NativeView | null; + eachChildView?(callback: (child: NativeView) => boolean): void; + /** The element name a template used when it is not a registered view. */ + customCSSName?: string; + isLoaded?: boolean; + borderWidth?: unknown; + borderColor?: unknown; +} + +/** The subset of the `ng` global the NativeScript tree reads. */ +export interface NativeScriptDebugNg { + getComponent?(host: NativeView): unknown; + getRootComponents?(hostOrDirective: unknown): unknown[]; + getHostElement?(componentOrDirective: unknown): NativeView | null; +} + +export function viewChildren(view: NativeView): NativeView[] { + const out: NativeView[] = []; + view.eachChildView?.((child) => { + out.push(child); + return true; + }); + return out; +} + +/** The view at the top of the parent chain. */ +export function topmostView(view: NativeView): NativeView { + let current = view; + while (current.parent) current = current.parent; + return current; +} + +/** + * The host of the root component of the application that rendered `view`. + * NativeScript makes the root component's template content the app's root + * view and leaves the host above it without a parent link, so the host is + * asked for through Angular rather than found by climbing. + */ +export function angularRootHost(ng: NativeScriptDebugNg, view: NativeView): NativeView | null { + try { + for (const component of ng.getRootComponents?.(view) ?? []) { + const host = ng.getHostElement?.(component); + if (host) return host; + } + } catch { + // the view was not rendered by Angular + } + return null; +} + +/** Where a walk of the app should start, given the view NativeScript reports as root. */ +export function nativeScriptRoot(ng: NativeScriptDebugNg, view: NativeView): NativeView { + return angularRootHost(ng, view) ?? topmostView(view); +} + +/** + * The selector of a component from its definition, so a host reports + * `ns-person` whether the renderer gave it a proxy container or a real view. + */ +export function selectorOf(view: NativeView, component: unknown): string { + const definition = (component as { constructor?: { ɵcmp?: { selectors?: unknown[][] } } } | null) + ?.constructor?.ɵcmp; + const first = definition?.selectors?.[0]?.[0]; + if (typeof first === 'string' && first) return first; + return view.customCSSName ?? view.typeName.toLowerCase(); +} + +export function isNativeView(value: unknown): value is NativeView { + const view = value as Partial | null; + return ( + !!view && + typeof view === 'object' && + typeof view.typeName === 'string' && + typeof view.eachChildView === 'function' + ); +} + +/** + * The views under the root component of the app. The root is looked up again + * on every walk, since NativeScript replaces the root view on some navigations. + * A host is named by its component's selector, which is also what `find()` + * matches. + */ +export function nativeScriptTree( + getNg: () => NativeScriptDebugNg | undefined, + getRootView: () => NativeView | undefined, +): HostTree { + let root: NativeView | null = null; + let rootChildren: NativeView[] = []; + const refresh = () => { + const ng = getNg(); + const view = getRootView(); + root = ng && view ? nativeScriptRoot(ng, view) : null; + rootChildren = root ? viewChildren(root) : []; + return root; + }; + const tag = (view: NativeView) => { + let component: unknown = null; + try { + component = getNg()?.getComponent?.(view) ?? null; + } catch { + // not Angular's + } + return selectorOf(view, component); + }; + return { + roots: () => { + const top = refresh(); + return top ? [top] : []; + }, + children: viewChildren, + parent: (view) => view.parent ?? (view !== root && rootChildren.includes(view) ? root : null), + tag, + connected: (view) => view.isLoaded !== false, + isHost: isNativeView, + selector: tag, + find: (selector) => { + const top = refresh(); + const stack = top ? [top] : []; + while (stack.length) { + const view = stack.pop()!; + if (tag(view) === selector) return view; + stack.push(...viewChildren(view).reverse()); + } + return null; + }, + }; +} + +/** + * The first view under `view` that draws something. A component host is + * usually a ProxyViewContainer, which has no native view of its own. + */ +export function renderedView(view: NativeView): NativeView { + let current = view; + while (current.typeName === 'ProxyViewContainer') { + const [first] = viewChildren(current); + if (!first) break; + current = first; + } + return current; +} diff --git a/packages/ng-devtools/src/overlay-nativescript.ts b/packages/ng-devtools/src/overlay-nativescript.ts new file mode 100644 index 0000000..f0f6c64 --- /dev/null +++ b/packages/ng-devtools/src/overlay-nativescript.ts @@ -0,0 +1,395 @@ +// The overlay for a NativeScript Angular app. It reports the same live data as +// the browser overlay, over the app's network connection to a devtools server +// running on the developer's machine. +// +// Call `initNativeScriptOverlay()` before `runNativeScriptAngularApp()`, and +// give the runtime a `WebSocket` global first (for example by importing +// `@valor/nativescript-websockets` in `polyfills.ts`). + +import { Application, isAndroid } from '@nativescript/core'; +import { connectDevframe } from 'devframe/client'; +import { collectComponentTree, type ComponentDebugNg } from './component-tree.ts'; +import { elementById } from './element-id.ts'; +import { collectInjectorTree } from './injector-tree.ts'; +import { attachNgrx } from './ngrx-overlay.ts'; +import { + collectSignalGraph, + graphKey, + toSignalTarget, + type SignalDebugNg, + type SignalTarget, +} from './signal-graph.ts'; +import { createSignalHistory, installSignalWriteHook } from './signal-history.ts'; +import { serializeNamed } from './serialize.ts'; +import { + nativeScriptTree, + renderedView, + type NativeScriptDebugNg, + type NativeView, +} from './overlay-nativescript-views.ts'; + +type DebugNg = SignalDebugNg & ComponentDebugNg & NativeScriptDebugNg; + +export interface NativeScriptOverlayOptions { + /** Absolute URL of the devtools server. Defaults to `defaultDevtoolsBaseURL()`. */ + baseURL?: string; + /** How often the app reports, in milliseconds. */ + intervalMs?: number; + /** How long to wait before trying the server again after a failure, in milliseconds. */ + retryMs?: number; +} + +/** + * Where a simulator or emulator finds a devtools server on the machine that + * runs it. A physical device needs the machine's LAN address instead. + */ +export function defaultDevtoolsBaseURL(port = 9999): string { + // The Android emulator reaches its host at 10.0.2.2; the iOS simulator shares + // the host's loopback interface. + return `http://${isAndroid ? '10.0.2.2' : 'localhost'}:${port}/`; +} + +export function initNativeScriptOverlay(options: NativeScriptOverlayOptions = {}): () => void { + const baseURL = options.baseURL ?? defaultDevtoolsBaseURL(); + gateInjectorProfiler(); + installWebShims(baseURL); + + if (typeof WebSocket === 'undefined') { + console.warn( + '[ng-devtools] No WebSocket global. Import @valor/nativescript-websockets in polyfills.ts before starting the overlay.', + ); + return () => {}; + } + ensureWebSocketStates(); + + // The server and the app restart independently of each other, and the + // devframe client has no reconnect of its own, so a session that fails or + // drops is replaced after a pause for as long as the overlay is alive. + const intervalMs = options.intervalMs ?? 3000; + const retryMs = options.retryMs ?? 5000; + let disposed = false; + let session: (() => void) | undefined; + let retry: ReturnType | undefined; + let unreachable = false; + + const again = () => { + session?.(); + session = undefined; + if (disposed || retry) return; + retry = setTimeout(() => { + retry = undefined; + start(); + }, retryMs); + }; + const start = () => { + connect(baseURL, intervalMs, again).then( + (dispose) => { + if (disposed) { + dispose(); + return; + } + session = dispose; + unreachable = false; + console.log(`[ng-devtools] Connected to the devtools server at ${baseURL}`); + }, + () => { + if (!unreachable) { + console.warn( + `[ng-devtools] Could not reach the devtools server at ${baseURL}; retrying every ${retryMs}ms.`, + ); + } + unreachable = true; + again(); + }, + ); + }; + start(); + + return () => { + disposed = true; + clearTimeout(retry); + session?.(); + session = undefined; + }; +} + +async function connect(baseURL: string, intervalMs: number, onDisconnected: () => void) { + // SSE is out: the NativeScript fetch has no streaming body. + // Closing the socket on purpose also fires the close event. + let closing = false; + const rpc = await connectDevframe({ + baseURL, + transport: 'websocket', + simpleAuth: false, + otpParam: false, + webmcp: false, + wsOptions: { + onDisconnected: () => { + if (!closing) onDisconnected(); + }, + }, + }); + const my = rpc.scope('ng-devtools'); + const pageId = Math.random().toString(36).slice(2, 6); + + const tree = nativeScriptTree(angularDebugApi, () => Application.getRootView() as NativeView); + + let componentTarget: string | null = null; + let lastTreeJson = ''; + let treeSkips = 0; + async function pushTree(force = false) { + const ng = angularDebugApi(); + if (!ng) return; + const report = collectComponentTree(ng, { tree, selectedId: componentTarget }); + const json = JSON.stringify(report); + if (!force && json === lastTreeJson && ++treeSkips < 4) return; + lastTreeJson = json; + treeSkips = 0; + await my.rpc.call('push-component-tree', { ...report, pageId }); + } + + const signalHistory = createSignalHistory((value, name) => + serializeNamed(name, value, { budget: 1000 }), + ); + const restoreSignalHook = await installSignalWriteHook(signalHistory.onWrite); + + let signalTarget: SignalTarget = null; + let lastSignalKey = ''; + let signalSkips = 0; + let historyDelta = false; + let historyFor = ''; + async function pushSignalGraph(force = false) { + const graph = collectSignalGraph(angularDebugApi(), signalTarget, tree); + if (!graph) return; + const key = graphKey(graph); + if (!force && key === lastSignalKey && ++signalSkips < 4) return; + lastSignalKey = key; + signalSkips = 0; + const owner = graph.component?.id ?? ''; + const full = force || !historyDelta || owner !== historyFor; + historyFor = owner; + const history = signalHistory.collectDelta(graph.nodes, full); + const answer = (await my.rpc.call('push-signal-graph', { + ...graph, + pageId, + ...(full ? { history } : { historyDelta: history }), + })) as { delta?: boolean } | undefined; + historyDelta = answer?.delta === true; + } + + let lastInjectorJson = ''; + let injectorSkips = 0; + async function pushInjectorTree() { + const ng = angularDebugApi(); + if (!ng) return; + const report = collectInjectorTree(ng, tree); + const json = JSON.stringify(report); + if (json === lastInjectorJson && ++injectorSkips < 4) return; + lastInjectorJson = json; + injectorSkips = 0; + await my.rpc.call('push-injector-tree', { ...report, pageId }); + } + + const ngrx = attachNgrx(my, pageId, angularDebugApi, { + tree, + describe: () => ({ url: '/', title: `NativeScript (${isAndroid ? 'Android' : 'iOS'})` }), + }); + + const report = async () => { + await pushTree(); + await pushSignalGraph(); + await pushInjectorTree(); + await ngrx.push(); + }; + const tick = () => { + if (rpc.status !== 'connected' && rpc.status !== 'connecting') return; + report().catch((error) => console.warn('[ng-devtools] report failed', error)); + }; + tick(); + const interval = setInterval(tick, intervalMs); + + my.rpc.register({ + name: 'highlight-in-page', + type: 'event', + jsonSerializable: true, + handler: (selector: string | { pageId?: string; id?: string } | null) => { + if (selector && typeof selector === 'object') { + if (selector.pageId && selector.pageId !== pageId) return; + const host = + typeof selector.id === 'string' + ? elementById(selector.id, (h) => tree.isHost(h) && tree.connected(h)) + : null; + if (tree.isHost(host)) flash(renderedView(host)); + return; + } + if (typeof selector !== 'string' || !selector) return; + const host = tree.find(selector); + if (host) flash(renderedView(host)); + }, + }); + + my.rpc.register({ + name: 'select-signal-component', + type: 'event', + jsonSerializable: true, + handler: (request: unknown) => { + const next = toSignalTarget(request, pageId); + if (next === undefined) return; + signalTarget = next; + void pushSignalGraph(true); + }, + }); + + my.rpc.register({ + name: 'inspect-component-in-page', + type: 'event', + jsonSerializable: true, + handler: (request: { pageId?: string; id?: string | null } | null) => { + if (request?.pageId && request.pageId !== pageId) return; + componentTarget = typeof request?.id === 'string' ? request.id : null; + void pushTree(true); + }, + }); + + return () => { + closing = true; + clearInterval(interval); + restoreSignalHook(); + ngrx.stop(); + void Promise.allSettled([ + my.rpc.call('forget-component-page', pageId), + my.rpc.call('forget-injector-page', pageId), + my.rpc.call('forget-ngrx-page', pageId), + ]).finally(() => rpc.close?.()); + }; +} + +function angularDebugApi(): DebugNg | undefined { + const ng = (globalThis as { ng?: DebugNg }).ng; + if (typeof ng?.getComponent !== 'function') return undefined; + const getDirectives = ng.getDirectives; + if (!getDirectives) return ng; + return { ...ng, getDirectives: (host) => withTextGlobal(() => getDirectives(host)) }; +} + +/** + * Angular's `getDirectives()` starts with `node instanceof Text`, a DOM global + * a NativeScript runtime lacks, so a stand-in exists for the length of the call. + */ +function withTextGlobal(fn: () => T): T { + const g = globalThis as Record; + if ('Text' in g) return fn(); + g['Text'] = class Text {}; + try { + return fn(); + } finally { + delete g['Text']; + } +} + +const flashing = new WeakMap< + NativeView, + { borderWidth: unknown; borderColor: unknown; timer: ReturnType } +>(); + +/** Outline a view for two seconds, keeping the border it had for when that ends. */ +function flash(view: NativeView) { + const active = flashing.get(view); + if (active) clearTimeout(active.timer); + const { borderWidth, borderColor } = active ?? view; + view.borderWidth = 2; + view.borderColor = '#68b6ff'; + const timer = setTimeout(() => { + flashing.delete(view); + view.borderWidth = borderWidth; + view.borderColor = borderColor; + }, 2000); + flashing.set(view, { borderWidth, borderColor, timer }); +} + +/** + * Angular wires its injector profiler, which backs the provider lists the DI + * inspector shows, only when `window` exists as the platform is created, so a + * `window` is defined here and removed once the profiler is in place. The + * moment is read off the `ng` global: core publishes `getComponent` right + * after wiring the profiler, and `getComponent` is the sentinel rather than + * the `ng` object itself because the router publishes its own utilities onto + * that object earlier, while `provideRouter()` evaluates. + */ +function gateInjectorProfiler() { + const g = globalThis as Record; + if ('window' in g || 'ng' in g) return; + Object.defineProperty(g, 'window', { configurable: true, get: () => g }); + const removeWindow = () => { + if (Object.getOwnPropertyDescriptor(g, 'window')?.get) delete g['window']; + }; + Object.defineProperty(g, 'ng', { + configurable: true, + enumerable: true, + get: () => undefined, + set(value: unknown) { + Object.defineProperty(g, 'ng', { + configurable: true, + enumerable: true, + writable: true, + value, + }); + if (!value || typeof value !== 'object') { + removeWindow(); + return; + } + Object.defineProperty(value, 'getComponent', { + configurable: true, + enumerable: true, + get: () => undefined, + set(fn: unknown) { + Object.defineProperty(value, 'getComponent', { + configurable: true, + enumerable: true, + writable: true, + value: fn, + }); + removeWindow(); + }, + }); + }, + }); +} + +/** + * `devframe/client` reads `location` and `navigator` as bare globals when it + * resolves the socket URL and identifies the client. A NativeScript runtime has + * neither, so the server's address stands in for the page's. + */ +function installWebShims(baseURL: string) { + const g = globalThis as Record; + if (typeof g['location'] === 'undefined') { + const url = new URL(baseURL); + g['location'] = { + href: url.href, + origin: url.origin, + protocol: url.protocol, + host: url.host, + hostname: url.hostname, + port: url.port, + pathname: url.pathname, + search: '', + hash: '', + }; + } + if (typeof g['navigator'] === 'undefined') { + g['navigator'] = { userAgent: `NativeScript/${isAndroid ? 'android' : 'ios'}` }; + } +} + +/** + * The transport compares `readyState` with the constants on the `WebSocket` + * constructor, which a polyfill may only define on its instances. + */ +function ensureWebSocketStates() { + const states = WebSocket as unknown as Record; + states['CONNECTING'] ??= 0; + states['OPEN'] ??= 1; + states['CLOSING'] ??= 2; + states['CLOSED'] ??= 3; +} diff --git a/packages/ng-devtools/tsdown.config.ts b/packages/ng-devtools/tsdown.config.ts index 6035077..2d3186b 100644 --- a/packages/ng-devtools/tsdown.config.ts +++ b/packages/ng-devtools/tsdown.config.ts @@ -5,11 +5,12 @@ export default defineConfig({ 'src/devframe.ts', 'src/popup.ts', 'src/overlay.ts', + 'src/overlay-nativescript.ts', 'src/vite.ts', 'src/http.ts', 'src/hub.ts', ], - external: [/^@angular\//, /^rxjs/], + external: [/^@angular\//, /^@nativescript\//, /^rxjs/], format: 'esm', platform: 'node', dts: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f2b53e..7a8ce20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -232,6 +232,9 @@ importers: '@angular/core': specifier: ^22.1.0 version: 22.1.7(@angular/compiler@22.1.7)(rxjs@7.8.2)(zone.js@0.16.3) + '@nativescript/core': + specifier: ^9.1.0 + version: 9.1.2 rxjs: specifier: ~7.8.0 version: 7.8.2 @@ -1148,10 +1151,21 @@ packages: resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + '@csstools/color-helpers@6.1.1': resolution: {integrity: sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==} engines: {node: '>=20.19.0'} + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-calc@3.4.0': resolution: {integrity: sha512-XQKj5B7QiZcHiegCOCAzcAOJdhGgWOHbbu62h5e5mkHnn8lWcfiJhllkqWmxu5zWR9jucPHuo1iTB56P033hcg==} engines: {node: '>=20.19.0'} @@ -1159,6 +1173,13 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-color-parser@4.2.3': resolution: {integrity: sha512-y4LpL+lmpuyKDiEFq2PnZUVFdAjsoB/qQJod79yLNokXyW7jewi+/WJ69EfItj8A2unWtxXnGjw6LYXgXu5ZjA==} engines: {node: '>=20.19.0'} @@ -1166,6 +1187,12 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms@4.0.0': resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} engines: {node: '>=20.19.0'} @@ -1180,6 +1207,10 @@ packages: css-tree: optional: true + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@csstools/css-tokenizer@4.0.1': resolution: {integrity: sha512-bPlN9S9O1A0euCpEWE4qnvB5YDuyYVsUTrxSgmAM1Is0j4tICHoVyOVAXfWMP/kS9ZrjvyIXWV2PmomiAXXqOw==} engines: {node: '>=20.19.0'} @@ -2054,6 +2085,12 @@ packages: '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@nativescript/core@9.1.2': + resolution: {integrity: sha512-zL/dgfuLmcVu9nR47UEFOaPHXoaRKuWMBnDwiaMAwXmf4WKd6yr1gIXcNHheKgBNGrls06LgbBpkB841fI+HcA==} + + '@nativescript/hook@3.0.5': + resolution: {integrity: sha512-MzL7R/nPZU2qnvDWWuJ8RB7H3luEwANgFX/d/ILdg7bSYxl6uANCfzlueHnWgrQmBxu6dTkvPsFW2WNVUxlhUg==} + '@ngrx/signals@22.0.1': resolution: {integrity: sha512-R62VsPrnH54LgA3LAqw+GWA9FHii526CH1aqah8aiK1RZocp+3N9rS3g5wrrXU655eVH65jhN4k/k+EFyxO/RA==} peerDependencies: @@ -7739,13 +7776,27 @@ snapshots: '@cloudflare/kv-asset-handler@0.4.2': {} + '@csstools/color-helpers@5.1.0': {} + '@csstools/color-helpers@6.1.1': {} + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-calc@3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.1))(@csstools/css-tokenizer@4.0.1)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.1) '@csstools/css-tokenizer': 4.0.1 + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-color-parser@4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.1))(@csstools/css-tokenizer@4.0.1)': dependencies: '@csstools/color-helpers': 6.1.1 @@ -7753,6 +7804,10 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.1) '@csstools/css-tokenizer': 4.0.1 + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.1)': dependencies: '@csstools/css-tokenizer': 4.0.1 @@ -7761,6 +7816,8 @@ snapshots: optionalDependencies: css-tree: 3.2.1 + '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@4.0.1': {} '@devframes/agentic@1.1.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.1.0)': @@ -8436,6 +8493,24 @@ snapshots: '@tybys/wasm-util': 0.10.4 optional: true + '@nativescript/core@9.1.2': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@nativescript/hook': 3.0.5 + acorn: 8.18.0 + css-tree: 3.2.1 + css-what: 7.0.0 + emoji-regex: 10.6.0 + semver: 7.8.5 + source-map: 0.7.6 + source-map-js: 1.2.1 + tslib: 2.8.1 + + '@nativescript/hook@3.0.5': {} + '@ngrx/signals@22.0.1(@angular/core@22.1.7(@angular/compiler@22.1.7)(rxjs@7.8.2)(zone.js@0.16.3))(rxjs@7.8.2)': dependencies: '@angular/core': 22.1.7(@angular/compiler@22.1.7)(rxjs@7.8.2)(zone.js@0.16.3) From 52127c396df50dc610c93df4bf4f14e5afbf8151 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 11:30:45 -0700 Subject: [PATCH 3/7] fix(ui): connect from the page's own base `ng-devtools dev` served the UI at / with its connection beside the page, at /__connection.json, while the UI only looked for it at /__ng-devtools/, which is where the Vite bridge and the Express mount put it, so the standalone UI never connected. The UI now tries its own base first and falls back to /__ng-devtools/. --- app/src/app.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/app.ts b/app/src/app.ts index 90914b5..fce1cc0 100644 --- a/app/src/app.ts +++ b/app/src/app.ts @@ -803,7 +803,9 @@ export class App implements OnInit, OnDestroy { } } -// Chrome extension passes ?baseURL=...; embedded uses /__ng-devtools/; standalone uses default +// Chrome extension passes ?baseURL=...; the Vite bridge mounts the connection +// at /__ng-devtools/ beside a page served from /; the standalone server and the +// Express mount serve it next to the page. function sameOrigin(value: string): boolean { try { return new URL(value, location.href).origin === location.origin; @@ -827,7 +829,7 @@ function loopbackFromExtension(value: string): boolean { } } -function detectBaseURL(): string | undefined { +function detectBaseURL(): string | string[] | undefined { const params = new URLSearchParams(location.search); const fromQuery = params.get('baseURL'); // Same origin only: any page can open this URL, and this value decides where @@ -841,5 +843,5 @@ function detectBaseURL(): string | undefined { if (location.pathname.includes('__ng-devtools') || location.pathname.includes('__devframes/')) { return undefined; } - return '/__ng-devtools/'; + return ['./', '/__ng-devtools/']; } From eb6725c634c3b628e4dd06f32ecc82db923301f1 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 11:38:39 -0700 Subject: [PATCH 4/7] feat: add a NativeScript example app `app-nativescript/` is an `ns create --ng` project wired to the NativeScript overlay: the WebSocket polyfill in polyfills.ts, the overlay started in main.ts before the app runs, plain-HTTP allowances for the simulator and emulator, and a showcase component with a signal, two computeds, an effect, an input and a component-level provider so every panel has something to show. The app maps the devtools package through tsconfig `paths` to its build output in packages/ng-devtools/dist, which is what the published package serves, rather than to its TypeScript sources. The sources import each other with `.ts` extensions, which the app's compiler rejects, and TypeScript never emits `.ts` sources it resolved through node_modules, so a linked package compiles to an empty module under @nativescript/webpack. `pnpm devtools:nativescript` starts the devtools server scanning the app's sources. Generated directories are left out of the Prettier check. --- .prettierignore | 4 + README.md | 6 +- app-nativescript/.editorconfig | 19 + app-nativescript/.gitignore | 28 + app-nativescript/.vscode/extensions.json | 3 + .../App_Resources/Android/app.gradle | 25 + .../Android/before-plugins.gradle | 15 + .../Android/src/main/AndroidManifest.xml | 44 + .../src/main/res/drawable-hdpi/background.png | Bin 0 -> 3661 bytes .../src/main/res/drawable-hdpi/logo.png | Bin 0 -> 5165 bytes .../src/main/res/drawable-ldpi/background.png | Bin 0 -> 1609 bytes .../src/main/res/drawable-ldpi/logo.png | Bin 0 -> 2511 bytes .../src/main/res/drawable-mdpi/background.png | Bin 0 -> 2218 bytes .../src/main/res/drawable-mdpi/logo.png | Bin 0 -> 3432 bytes .../main/res/drawable-nodpi/splash_screen.xml | 8 + .../main/res/drawable-xhdpi/background.png | Bin 0 -> 5473 bytes .../src/main/res/drawable-xhdpi/logo.png | Bin 0 -> 6904 bytes .../main/res/drawable-xxhdpi/background.png | Bin 0 -> 9949 bytes .../src/main/res/drawable-xxhdpi/logo.png | Bin 0 -> 10319 bytes .../main/res/drawable-xxxhdpi/background.png | Bin 0 -> 15701 bytes .../src/main/res/drawable-xxxhdpi/logo.png | Bin 0 -> 13941 bytes .../res/drawable/ic_launcher_foreground.xml | 15 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3092 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1956 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4484 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7184 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10378 bytes .../src/main/res/values-v21/colors.xml | 5 + .../src/main/res/values-v21/styles.xml | 34 + .../src/main/res/values-v29/styles.xml | 18 + .../Android/src/main/res/values/colors.xml | 14 + .../res/values/ic_launcher_background.xml | 4 + .../Android/src/main/res/values/styles.xml | 42 + .../src/main/res/xml/network_security.xml | 16 + .../AppIcon.appiconset/Contents.json | 122 + .../AppIcon.appiconset/icon-1024.png | Bin 0 -> 17868 bytes .../AppIcon.appiconset/icon-20.png | Bin 0 -> 745 bytes .../AppIcon.appiconset/icon-20@2x.png | Bin 0 -> 995 bytes .../AppIcon.appiconset/icon-20@3x.png | Bin 0 -> 1258 bytes .../AppIcon.appiconset/icon-29.png | Bin 0 -> 851 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 0 -> 1232 bytes .../AppIcon.appiconset/icon-29@3x.png | Bin 0 -> 1668 bytes .../AppIcon.appiconset/icon-40.png | Bin 0 -> 995 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 0 -> 1504 bytes .../AppIcon.appiconset/icon-40@3x.png | Bin 0 -> 2121 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 0 -> 2121 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 0 -> 3018 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 1482 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 2633 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 0 -> 2831 bytes .../iOS/Assets.xcassets/Contents.json | 6 + .../Contents.json | 23 + .../LaunchScreen-AspectFill.png | Bin 0 -> 4920 bytes .../LaunchScreen-AspectFill@2x.png | Bin 0 -> 14165 bytes .../LaunchScreen-AspectFill@3x.png | Bin 0 -> 27892 bytes .../Contents.json | 23 + .../LaunchScreen-Center.png | Bin 0 -> 6808 bytes .../LaunchScreen-Center@2x.png | Bin 0 -> 13502 bytes .../LaunchScreen-Center@3x.png | Bin 0 -> 20794 bytes app-nativescript/App_Resources/iOS/Info.plist | 59 + .../App_Resources/iOS/LaunchScreen.storyboard | 53 + .../App_Resources/iOS/build.xcconfig | 7 + app-nativescript/nativescript.config.ts | 11 + app-nativescript/package-lock.json | 14083 ++++++++++++++++ app-nativescript/package.json | 33 + app-nativescript/references.d.ts | 1 + app-nativescript/src/app.css | 3 + app-nativescript/src/app/app.component.html | 3 + app-nativescript/src/app/app.component.ts | 10 + app-nativescript/src/app/app.routes.ts | 9 + .../src/app/devtools-showcase.component.ts | 43 + .../app/people/person-detail.component.html | 39 + .../src/app/people/person-detail.component.ts | 44 + .../src/app/people/person.component.html | 12 + .../src/app/people/person.component.ts | 15 + .../src/app/people/person.service.ts | 119 + app-nativescript/src/app/people/person.ts | 6 + app-nativescript/src/main.ts | 27 + app-nativescript/src/polyfills.ts | 11 + app-nativescript/tailwind.config.js | 13 + app-nativescript/tsconfig.json | 24 + app-nativescript/webpack.config.js | 10 + package.json | 1 + 84 files changed, 15114 insertions(+), 1 deletion(-) create mode 100644 app-nativescript/.editorconfig create mode 100644 app-nativescript/.gitignore create mode 100644 app-nativescript/.vscode/extensions.json create mode 100644 app-nativescript/App_Resources/Android/app.gradle create mode 100644 app-nativescript/App_Resources/Android/before-plugins.gradle create mode 100644 app-nativescript/App_Resources/Android/src/main/AndroidManifest.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/background.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/background.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app-nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/values/colors.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/values/styles.xml create mode 100644 app-nativescript/App_Resources/Android/src/main/res/xml/network_security.xml create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/Contents.json create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png create mode 100644 app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png create mode 100644 app-nativescript/App_Resources/iOS/Info.plist create mode 100644 app-nativescript/App_Resources/iOS/LaunchScreen.storyboard create mode 100644 app-nativescript/App_Resources/iOS/build.xcconfig create mode 100644 app-nativescript/nativescript.config.ts create mode 100644 app-nativescript/package-lock.json create mode 100644 app-nativescript/package.json create mode 100644 app-nativescript/references.d.ts create mode 100644 app-nativescript/src/app.css create mode 100644 app-nativescript/src/app/app.component.html create mode 100644 app-nativescript/src/app/app.component.ts create mode 100644 app-nativescript/src/app/app.routes.ts create mode 100644 app-nativescript/src/app/devtools-showcase.component.ts create mode 100644 app-nativescript/src/app/people/person-detail.component.html create mode 100644 app-nativescript/src/app/people/person-detail.component.ts create mode 100644 app-nativescript/src/app/people/person.component.html create mode 100644 app-nativescript/src/app/people/person.component.ts create mode 100644 app-nativescript/src/app/people/person.service.ts create mode 100644 app-nativescript/src/app/people/person.ts create mode 100644 app-nativescript/src/main.ts create mode 100644 app-nativescript/src/polyfills.ts create mode 100644 app-nativescript/tailwind.config.js create mode 100644 app-nativescript/tsconfig.json create mode 100644 app-nativescript/webpack.config.js diff --git a/.prettierignore b/.prettierignore index 00b7438..d037d1c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,3 +4,7 @@ dist pnpm-lock.yaml extension/ui docs/privacy-policy.html +app-nativescript/platforms +app-nativescript/hooks +app-nativescript/App_Resources +app-nativescript/package-lock.json diff --git a/README.md b/README.md index 3fdb9ab..2f453b0 100644 --- a/README.md +++ b/README.md @@ -374,9 +374,13 @@ Then open `http://localhost:9999/` for the UI, or point an MCP client at showcase component (signals, a computed, an effect and a component-level provider). Tested on the iOS simulator; Android has not been verified yet. +The app maps `@santoshyadavdev/ng-devtools/*` to the package's build output in +`packages/ng-devtools/dist`, so build the package first. + ```sh +pnpm devtools:build-pkg # builds packages/ng-devtools/dist, UI included pnpm devtools:nativescript # devtools server scanning app-nativescript/src -cd app-nativescript && ns debug ios --no-hmr +cd app-nativescript && npm install && ns debug ios --no-hmr ``` ## Demo App diff --git a/app-nativescript/.editorconfig b/app-nativescript/.editorconfig new file mode 100644 index 0000000..84ba4fa --- /dev/null +++ b/app-nativescript/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.json] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.ts] +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/app-nativescript/.gitignore b/app-nativescript/.gitignore new file mode 100644 index 0000000..1cb1231 --- /dev/null +++ b/app-nativescript/.gitignore @@ -0,0 +1,28 @@ +# NativeScript +hooks/ +node_modules/ +platforms/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# General +.DS_Store +.AppleDouble +.LSOverride +.idea +.cloud +.project +tmp/ +typings/ + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/app-nativescript/.vscode/extensions.json b/app-nativescript/.vscode/extensions.json new file mode 100644 index 0000000..2a163b8 --- /dev/null +++ b/app-nativescript/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["nativescript.nativescript"] +} diff --git a/app-nativescript/App_Resources/Android/app.gradle b/app-nativescript/App_Resources/Android/app.gradle new file mode 100644 index 0000000..7f4f14a --- /dev/null +++ b/app-nativescript/App_Resources/Android/app.gradle @@ -0,0 +1,25 @@ +// You can add your native dependencies here +dependencies { +// implementation 'androidx.multidex:multidex:2.0.1' +} + +android { + compileSdkVersion 36 + buildToolsVersion "36" + // ndkVersion "" + + defaultConfig { + minSdkVersion 24 + targetSdkVersion 36 + + // Version Information + versionCode 1 + versionName "1.0.0" + + generatedDensities = [] + } + + aaptOptions { + additionalParameters "--no-version-vectors" + } +} diff --git a/app-nativescript/App_Resources/Android/before-plugins.gradle b/app-nativescript/App_Resources/Android/before-plugins.gradle new file mode 100644 index 0000000..9faffb8 --- /dev/null +++ b/app-nativescript/App_Resources/Android/before-plugins.gradle @@ -0,0 +1,15 @@ +// this configurations is loaded before building plugins, as well as before building +// the app - this is where you can apply global settings and overrides + +project.ext { + // androidXAppCompat = "1.4.1" + // androidXExifInterface = "1.3.3" + // androidXFragment = "1.4.1" + // androidXMaterial = "1.5.0" + // androidXMultidex = "2.0.1" + // androidXTransition = "1.4.1" + // androidXViewPager = "1.0.0" + + // useKotlin = true + // kotlinVersion = "1.6.0" +} diff --git a/app-nativescript/App_Resources/Android/src/main/AndroidManifest.xml b/app-nativescript/App_Resources/Android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f1773d8 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..bbefbf42a4b53283de502b924cf2ed3c9ff03aec GIT binary patch literal 3661 zcmeAS@N?(olHy`uVBq!ia0y~yV3J{AV6Na`0*bKrExXLXz-X80>>Lp0ZfI$2P@c=c zpfNEyA>q>r&vUwINeKxj&T4CN6_p2dbo2xz>_2(n*nz_bjvqLwFndN!%me8+VoV{2 z9z1{l{8R(uzS!ghmW$I%9n%s|J!Xy3TzT}Q!!Le;a1ln`^n?T*#!ar56yNX(SaTkl z$DAbI%3{fUQ@SB%UkS%=hK{)`iSY~@PkVDUq#4*Ttn}B@VA{B!;U?e7PD=-~$($ZC zS^69WZ9Ao-q@<@jKO}SXq`+AF-VGW0- zAGF-RV3UTi?P8b2rA-qX8<#poq-9kW)WxN3YAUV^bgT3ItnpqvFBk;M!Q!8{<$=zH~-00RThR!tU_%@`!w30gOb*9F7*5RKVvr1GR7lohNbzB9=vm1y z!BCXJXjF1E5JpqNXm%Ja6GjWh(b{3OiX3exj5d}=8-=4SW7>2N&aht&;`p4bYqbs7 Pt6}hT^>bP0l+XkK#s4G) literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e788deb314f1c7493977876f02dd0f261830b30c GIT binary patch literal 5165 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%0D4l9w_KO(atKw51I&5^GF zhQghmi^zAP!#X)4yH84PsHE2ea(@Wa`E)=o(<~rqB}q#H<+4_0H7GcL&u8dzV5H2!DY;mOb!yh{lay^mhjnd6{auotij@0GL_S1ahgHPpG6XmT*k01; zJU@{dPLed!%r1`!nAt`0kx8(}?m^Oaz%4Y9GN#p-*)8(8y7UTRO9Q0kZ}7G8)uqjW z4+DqMfv~EAT#wt5(t3@-V}EdyR$%%YMi8#YO)!G4A9GfU!{(vog#ZUBKZ_0Rv)lp@nAME zThc`Q#j`u^uE#A3?*h^CFDsQZV zoEJIX3e>@L$9XA+V&C(FeQC7W4y&1R9|CSvhT-1KmbRhYwqj=Y6CN3kz&EIE2uTxg z_k&Ci?Sz@YqDJfPAiu`LhtiA#ko#rTt$Gsf=<@D`q7?CE>V=uTYi8G***JXU6?+&D zs`-CR|GGtp0ZQKYi21OE?vIA)bPnfT@KmhFcevel^L=0+JeI03lC}n7SzMRmj+4`I z2hEvgwm`lB&}YZSR$^vv%3T@KM&)t1zf@>CxR|irB^Hx+HF3YMEEe?qN1o8|$bigU zW;P?M5;J>7(iylqA=b72x0_XbOXfxp&>N~7mC9O$#I(W00y%jhf>#(}b?6%0cMtPTT z@b4IWN}fk7pZkgo4rcb2q_^-en_4!IG(2)mk+eGD&h+knwhzD#WOrDxmv?&VUx>19 z`U{m4oI21jv!`f2Ml!TFHtJWjhT!(NJp=N=(UO@h!e0Ps zc2T}>-*9Dwvm}`yUI?7pOF3>k2{CW-^fLVPfJ_%~LQdU33w&ZDma;fW@u2??5MLO1 zv_Knm_h(rh)-c?jmAP^=0J#`9m=|Su;MmI17AxYOjfziC!FMPG4bakv~aamGBRI5nbV5(@Rh^R((iyI z>0pimg2Vj`Lczm3DIAuwH}KPf^~aXF$H>D$c9is~CC| zH@*c}Ew>W3Wvva|FX?be8%kOwSz){#2<273%goxjy4Wl~k?&Qxhdj(~e_#smrHK4* zl96*S5?78;_KcN)3nYz|N5rhtY(A{0(OmVO?s@#8(O*ZNd#WgH@pR8A|M?u9(xEwL zMdX%9nl8_^bh@P5bLtIxx+iTkl1J)esWJ_Fx~Iwwk&kTh*u8<@^4N^>OC-&f^q}JL zYf>P_Qa)O`v;iF(CHPFpUj%uib62JLRG{9Fr+a9W64I#^p6;P&f-DwG+AKq-8ycwN z=w?S)(T1DgOOircP=(0!gzqny*$rfP0tdK?uqX2{+%feW+-tbUDRUlhe?hgPp%gVV zliH?^#4+-hIb!pON9osc3GvN6hv8F`9f&U=JxE{*nT&=fQ2cic@tbX_nBmu$H<+eIb&LgeVh{3)U&(7!~I|&uB1;W9xy9O zPb!I!mvmL&d~`~flo>ARYVSQoqCQ+zdY)!+luB;2|x;@R8bs_)g7AW|r$*8M&`8vs||U`9fF7 zyz)je+OL(Jf{#MeY+`25B{IYC%}PFwFLFGGCu4l9nQNTXwO#s=lN3=A3* zlM@m?o$x%To0gQ2aN?}CCRb5;P)A2kP{RI`2aX*$eBk(jlM1tE#Kb(1ej~;da_GVH z_s>r?Fz$;@PGGq>z0@%+@zi717|oSOPdfbK7YG+&)J;!F&|%!mg>L(-_=Xn>3+ hhS7{bzmnl3_w8oZYK8hZ5nzeN;OXk;vd$@?2>{eFH1Plc literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cac1adb9d183933b367930c6a241c211bd9874 GIT binary patch literal 2511 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 R39K?1JYD@<);T3K0RUrsV7dSR literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ce3c3a4b4fe24e68242245b6ad1beabb16f31410 GIT binary patch literal 3432 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 KMNUMnLSTZ1B6j%z literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml b/app-nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml new file mode 100644 index 0000000..ada77f9 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3541570c1cee0feb7ae07c98e84563d237c4582e GIT binary patch literal 5473 zcmeAS@N?(olHy`uVBq!ia0y~yV7kD-z_NgY2`CbG{DlDn1EXE0vvWY0yP>7AL3u6% zgT}<u>a(NV+Rf&IDX)y!t5C_F%P8Qh%tp6 zdhq=H^HU9s`(l$5ST0U4bxcb<^_VqAbLG*K4!`&X!bKQ$(-RVO7&p0IQhdWFV9j}G z9&?g-D~l!bP3eZ5eI*>f89L^&B*rsrJnhZZkY-@Vu+m>ogK6V_hMRmRJ1rf|CUbho zWa)DhwC$9Rl9HbC{E*DilLE&coJ%;7a5CXc!hwKu6HYtWGH}IntX|jAcyJ}di*249 z8#nCb;n7xOn0vidAUKBY$^Ybp8>i>TM1`=KwoN=aqp?vyKJnOdy#g7-uCLRVgf$$R ze$aCNf=wF6wu@a7mo`moY+ULTk(O0iP#2fBsj0Xw(6KHs$uq4^?$BLDhrdb=R!dcc zWn@ldvM@ZJ6Vmv5rspkSfN~aiL>4nJpY(Kb45^s&_L?K_0R@Hw z4hOV93A8t_%u6{1-oD!M6| literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..88267df0231a5e016a67e4cd783f5a64cc5b1570 GIT binary patch literal 6904 zcmXY$c|26#|M-V76teI8zGOGqiL5i$?2%<`BiY6hgV2PmiBT9r7)hiU$~FvT9~5t8 zi;-*@`x?b>`u;wD+;h+4bg7qxn*B?*`m!XbI#dThlveaLUZ$%t58# z4}-~5HJXfzl9^a^F87oIy}46pw1Ct64}v-)FP#C>N@%=10S&_z^bg?5*8w#)iZav< zU4Ut(!E`MH^}NdvfxAkV5RY2x018vx*iL5*)XAfIoRL_c?T zZ0_%pGcdFj*;`W}R8~5mq*;pWk}p+UN=xIQq5_qsytFeh7KUJDm}zdrhKgAgu@H7x z(#D~8%0bu<1_|3w?nzm1&Ebw)k4tq{iNy1S>-&S!5u@{Q-@&U}&BrsfJd&b=L%(YI z3o)IM@*XWwdmTv5QNhII~ zv>Fm?m6Vz)u_+bs@^x9LST2N7TVh0Z{SI{7L3=W~AQ8f6e~7b|U`t0Ce{JL)-)k zg^^Rl`B%5FpI8h$F!xwtwj>pBv0Ve?yUF;nc^MefNgL^3kWUS9sXv*aP7O z&{Hi01iJL7PuqQ*gS3Zklb19r#HJv=k>HlDAlKe>D?R9Me^@&b1pcMbZgj7XdXdfYChLYiYb{h09RBvS!}K?g4c66Wz+U&I&#nGQ$e@ z_z*^4igBEzZzxhomGSww&C=6ubwaiygUSP!){h%TY*3tqHXD*glkX&mVZ?cCMptZ| z1!|-s4})|@gA4u}1H+G^G9fCc zJ81_>2+!R}_kg&vxA5Gm`&bVLCD2l~gd8}o&S#O9DNnn@Ll*5s`<{6&JO%T8;$*my zW58_lnkw!xI;z`qK4d)qKBp=-;w9E9H3y$y0jnk)=Ap#se_q?07}f11%sh?~Y@HZB zB+N-hwF@AU=C<@5%#ALDPPj(iXxl%KJ9RAj>LR2mgNSGQY=&|WatVeP0J>heX7laE zkaQ>>e^$l~qmtI!?;zPu%*}@{LM0TEic5zbg!JUI<#M&!KSysW<8)AZ52E=M@qnN} zxY9wF!}sbsK}fX#bscq(YqN;jQUN+d8P{LSBFwK4BADJpdrmF?i=UzRgRw zDBn^_VMd%6XNiUrfuZqlhe<1~1U%{yw)nxDFwm*ZAAB6%b+FA$fg=rLmDdDR7GkEh z)WlKwTeyx9X^VL4?TBR7KL(m#XrN_OodT`Fd( zREKqx9J!qu?J+Jez5hzS*G|Fm7G4F%uuK)FU+0?7r^0~9#;Os?N#_EZ#dT4HC3{mp z{l|2b+va?9bBu0z3N+q-w|cS?mr}&7LUR9W8P^*i*56$_z66^!&@c9fKPo-DFwk6C zgn$F{L*Fn{^7$4moO$lOd-p0%{vG!_(Jc?1@V?>L%h5I$;)sCSkOM-ZX+1an_=qOI zW;U-M*=m@#OHv_CNvfYz)}Dp<0?c#E$hF9P3 zJ%7TJxWiWFg!#PwQTWjZsYU^F&8@&-a2&Y(+s>~Be(FF{slA@xpeOAXsE=Bsw=@M? zRk#}}V6h+3g6(tPxYuki!b`W5`pc7&H~AXa5E7r2a(`lui62nFG@C6Pkl$aw-yi5%diO2gH{Xv-F2` z8Ov^R6Yz)D`H@@*Snf5==?t~d#_jTVA5oZinRVD+*;%H^+0YNxgooS+h7lWaL~oP) z4vyC`h{yNJRs|^*d#A<>Of8dm1Uo zOf#nESMSb1%gE0lhab#e?NEi&{pk1o%##JLTub?OjiAolDhiPgv9^TZCgEG})!seB z#uLf^jnix}aWCc>muej|pdWD)eGYmD4jJ}-#5PVYABPnjIav)ykZKnmO9pe>&XHEL zF2w4LO@Rd*oCIQm^TE7sW2A8PgvJvWRwuw#P9*)#U+d^!=qNGIm;*U9*TZ5sdgMb_~CK(P`<~^(%@;UdWR6PkFKW7}*b>GFpkgqG_Tw zhWCRju`wzBktn_S?$T}J`m%520<WKfbhe@vxHkVI z3K4LxqJ|7CYLrzF!O*sYaEl_kGE1{(Q=1JKmx|Hn!mUE~j1bpCL}#Vh4)Q5nAf*ia ztostlEhcJ;C8qH}Szp-yG&qD z)<5fLVY~cHSSB2D4!s{P%&aT24uDz|)L8ypKTdSnIbuc)g0}T;+Q~?}rddC=nHHGv zI?E-5hSwjSEB4w+rFSlLJsF0qo=3MHLph-P{=qNJ`P|o*;@UA1-~aO^_mqmEzvdo< zrIt18kGEQk-$kou&w*XWtBVfs5mC)Z4$#}Ly!LW@(NS4hvd~Q9(!uGH zrtQhGfZT-q(Ex6_IxgMJyhs;pys$K&m49U-H!3l|n3I3D{^~jkGP^0JdLcD_{R#JS z3OdS}&ZO<<_S^~eQi*s#aBB@SGy?9^#T5_@A8k2%zvEIplxbWdx_;+3xZPI7@Ziwy_TSq_KOqzZs87v&o1?{?1Ko@#e~c3jTEvno+INOle5$1AdevGwAQE-X zJQzp2*OH?_9bEnTw^;2fYDx^vLHZUNoC9Y=H6J8A34bdLguCx2-L*$G1@^=;P7#TH zkvG4GTqmje)n@QuJdf0yNFGzzC&gjxBdp1l{u@0vk|)A~l#ZR`lERRPX;VVfiPz6X zB-dO+OIc#tZLx2+^=QbU^;Cup9HQW_ZOImFKT8^t|6B;uFfsk!_b>HoU$R{qnR1{y zi_Yf{VnoClWb=qWc)K{Ztp$}H@X^d*sf~*$#|Y*fGZM+Nb0fM>Facdm{g08l5JB@B zWPf;pT00D`iUX#%7bTjwYxduDM#%&JxOC#Te!g4Bwdmnl;8FTQ#hjx1 z%+wCas4^_f#*{GpX`8$u5zOdj5#J$4?*(59NVxRcTq8`+ zve#F{IVG~{3PH`?g^w^LXoxY~3VfKhy%x(J&XR75^4F@j?vtMN1lX7reJZ5;pqM#Zc6d)Llne~Hc%2NKEC>NEF}7B~mRN=De1#6C1XXB9E!MI{d} zrB8cHWwUhUAHW!>!u7F-Z`NxVv!Hdn{iJ$q;ELOVzyhY^s{*Bl?HNLPR95Y}uZ<&< zkiWtIe(JTqg4N0|nCo7Cj>uY6aS(_uP!OE~_wvT;m9@od_r6az~l z`$xFW_Lh~eEMt5!HZfd%GR4(b1=@3=3UmCkYR^LAW#yQ#S%WbNy5Ws$<)?BSV+@=Y z0?u(nvTaYm_f#rqKh4kbTeYL~SZhD*Z58Q04#>JrP9q1zEYC^l zYY#qw-c};a&D3SjaYVKy8X~muLkJ!$8to$RMEDgG7tWz}&g3LhQ}3#tj>CcsB6Q8N zs>=>hpq-7eQo~VRer*feRN0QGI>F;t@xz2{NU_*ZfXwHN4|mAhH&3J6oDL0Cqw<=Z zCk_A0m1kX0GX0!8^U z_Kz7kjfJ5E#tWx^qu=)c&$Xp8#iz9p!*R%)OCY$@sl_cLAwqrX|=KI3CljWdF?OEL9DDtvb+>sgA_8Snx5d=@r(P}O_#pqN8-N}4IiIC3;{ z!XoRtImNzNBr@H*=5_cEu!V6n{XN<}FwbEl&+P;1+3pE}tE*S&(mLF?N+UAJ`u5FG zM+>;9uAT-akG&QVD*GHFMi5J8yQf%;0pIp}JaFjDcP?Bzq-i?d(QsoqV77m03^#2v zi|SYNdLpLcu^06DwrPl5{0%#Q5cSr?^8#o%BoC7vrBKt}kK(md*#0Dwf#XG6(oTl**s~Vqy-yjlL+qPx6vtTA?0&1Mc;_8YzoDV?ztPq(xy_ha zLVRv(4CiCL-O)jCd?g>m>OC)2sZH*ZB$6+Syp>pcn2ZB{`jrWT3$u=TUNapp zyrsWK9bE9EW zpD)`wMIG@%j%DYEM{9eJC941Vt$G#Q=jggO+Y1IaMM%tu&DSZfWc8_qw%cfGbF<9f~jBa5BaF2O3PE+ye z2=YOL^7(Jif=G=mng-flZylk&eZV6mhlca&da}(TL#4BX6)jgmld%guR-ZhEQ$sjG;=4>BmEic5-*`t_{Y%E5y3YAi3#% z;CVR5D7lQ+j>o^^!%UQ~BF3bW!N)7CuMds`N&LtVT*zJonBkcOPo~-X{?grwrj?mE zVT2>Y@waEyg}YhdA=F$bful6PsL_snp-z~s1R;=>kk&I)`PKENNKlwjZ zrrq}Q1P|*K4{&U+ByWsF4#g0@l=H`e`tt)^kU~?h*R0>I+~-F&CmmHc=U|UMC>-J8 z7=Mw?x||s=C1^V*-o-;wA(lt$^Pp66$(=;8Q^8F->CT73714HN3#7ccoVkpWP8i0` zd^eKKYNNED0w;ERzhIqaS9b97dT~K>gDtW$Z%ZN4&*|@jSIL#O+5S7YEGN~mm0fz} zmk_(JR6WBj!wEXit@d?&W1eS~$#GUWfWi&+Hw^*S`AtsUas8^-qC^U(KOza9I>8_^ zbR%!Dl5pzx+zKf@+Mt?w{)5B!w7L_cGc3BX@tl+wuKgX(IU_)MH1mC8Fz zKg+V|4kib}Gio`AK>{KBe}#4p20OsTjk1m4cBNXTDRuY}1#euAHs{G~|G~A$H7C&A zh-q$oNY*=AXl!u)814S1(CQ^A?-)+lgMZyRJEoMzbQ*a=Rt+hiW=|IU!QffN;c>mS zf%E!WlI?m-#8E1Nw}nlwY2^D3KVfy}SoS3Zt_rQT4QX1rHm7iK{Z#62vEWqYr-m)M zkie6Y#cq>8+XSi_KVqGIfs4e5$yD4A&k_M9e;4n4JI4-tiOjH-mmjW`j{0cnHh*eI z#;*6H`1zSvBu0!nrEiso@t^XeIo{!D+hOj%ulxIvwTa)j z`pQ5H&mR9e1Per;A{F^B)WLBddK3Jm$$-6=n3TE9;zKPuFXx$W#hbK^ptQi2|CN zjC3e}DU6j2ynJ*jq0R~h|KM|q7cvJbHp+pfhEh=SIwSDhT(iWWr!|(vq*;o>mirmO zxZ?-K6rKh^_)Sv(f83l7Y;CcV{WVrhxbiIC8D<45>%Z};mzq;Udnn` z`b0U0?VP39N4bh9G9&bQjU|!nO)91LtC34>=6m(@pA^*>xupX*9#51N`!x!JN5%dh z!@e>61}T`WYn~~;O&f0)?<;vV6nhbP^V{QH!dm3fKN>!=p7;10G2|nzk?E1!>82{{ zl(y`Xf9Se8Ksy?&!#>3p?J0P7F5ACQQ2vmH;!K6y&#yog+{RAUdqMv)L4)VC_pjGl z{97s=(EZTPMPX?SpkEPs_o(|5oF=|(aJ38(?XI3tjQXeKf47bF!qxHyNdz1qh0Mx|VxZV)<@c#j@G${c9 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..abb0fc704741cbf206833a86b43ce14b5ff991a1 GIT binary patch literal 9949 zcmeAS@N?(olHy`uVBq!ia0y~yV6k9eVEe$q1Qg*6E7M?LV6@A0b`A)0H?%Z1D9>eJ z(3qHuY}__L&sc}#CV2{r@grv(hTevR{HB{Fm2q=aFg$3r=^40WKIv6 zEPalGww=;ZQqohNACftGQsCHwa|tIBP9~g5I1q4d!f6Lv2CjIH)$2MM53Xc*vCWfX zOwuvWaG&TyzCmwsQS0H29^>zA^u!cj^ z4_fYDut~$%cCkz1(x!=xjZ2*((y}TG>f+KiH5JzdI@Sdyd8XCL9lERN@K?#fYN?8_ zjLeBl7KX=jLK=V1^t=TM&;pOhVg`m~5+KZ2S9-FSfkA=6)5S5QV$PfEhKvUk7!GVO zTz|q@hVO@=L%)mT{l1;w*cliCKJDiNYTqF#3RHi51(0d!#>&8O!cdEW!J#jZk%6J8 z2N;DDl0z668e|p&=)78&qol`;+0Mgm%5&!@I literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..55800c9ab9ea2cad920ce68dccb14fe60418232b GIT binary patch literal 10319 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 S`Af#N0iXtE`n9^S$Nvw3wEU(3 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..108977520c8929349df397242f1ef0d7b8c80374 GIT binary patch literal 15701 zcmeHNUr1A76hE6&x1npG6u4_?h)qn>R?#YD(}`XLojR;!2yVPLQx22oTGjdYff= zBiURqxxni-w<(Wjii+9^*(;iOU@_x%oR#)zrTTCej`v&=8mrJ?JvKTA2 zGo@F*4ox&WLqkDrV0=ccDZ6K|_}qgom#^Z4t@D!IaoRTH?s7Ef9Sv=)&9O7Io~!%5 zTX)2lm%%XM4hd|Gm|Tfl>{|+`%wBV{3t+ulI7APx%zFTGfHmk%7f0f&`gAS_IIi?j zxROyQgPsGkO)q+u%!wrWq&m@>N>A`^|6y94$2`Ktum%^10qz6*7O)>+PefioIz&l; zvIwOi%44($=#0=Ap)*2fgw6<^5jrDuM(B*t8KE=!3uhFawx;IMJp=9^fpgX48VQ{T zNrV~1^qybZx-2N7i?~cdE2+2B3YXo2-dN3GXywMDwBjR(7;YH+Ucia%f_6jfmJ|de z3xODa;XY}NH@2hWV<3p6lN&QaP)(dFC6^g+!M#Xlo&C+ryyW@PeH)+ c{{K$zMZQm&p4$6&ztDFLY*n3Ms)D$G0x>!>?f?J) literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png b/app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0703f90f437fb831ea98b3ee99c783e1934992e2 GIT binary patch literal 13941 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 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml b/app-nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..fd826a3 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app-nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png b/app-nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..69948d224f4d018068dfed3c884394cc3d178524 GIT binary patch literal 3092 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 Q{bLAFSJqbgq5up2AGbo6Bme*a literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml b/app-nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml new file mode 100644 index 0000000..da5ca2f --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app-nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml b/app-nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml new file mode 100644 index 0000000..04d8a06 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + diff --git a/app-nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml b/app-nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml new file mode 100644 index 0000000..9a2a79d --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/app-nativescript/App_Resources/Android/src/main/res/values/colors.xml b/app-nativescript/App_Resources/Android/src/main/res/values/colors.xml new file mode 100644 index 0000000..78c4a51 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/values/colors.xml @@ -0,0 +1,14 @@ + + + + #F5F5F5 + + + #757575 + + + #65ADF1 + + + + diff --git a/app-nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml b/app-nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/app-nativescript/App_Resources/Android/src/main/res/values/styles.xml b/app-nativescript/App_Resources/Android/src/main/res/values/styles.xml new file mode 100644 index 0000000..4f91b61 --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/values/styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + diff --git a/app-nativescript/App_Resources/Android/src/main/res/xml/network_security.xml b/app-nativescript/App_Resources/Android/src/main/res/xml/network_security.xml new file mode 100644 index 0000000..f7b522e --- /dev/null +++ b/app-nativescript/App_Resources/Android/src/main/res/xml/network_security.xml @@ -0,0 +1,16 @@ + + + + + + + + + + localhost + 127.0.0.1 + 10.0.2.2 + + + + diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1a8b0e6 --- /dev/null +++ b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b46c8bb2f70abf9fa2d5f91cb6987dfda64ba1fe GIT binary patch literal 17868 zcmeIa_dnL{A3yvy${ER7DawwFvdYd(GAb0=GnFl;$lj5X5wd5Yk`UQjh3ri>S=p-- zr}=%oyROgYaX%jSKX8BV$LELZygJ^;dL6IhI9}uVJnF@56$MK2v*ZYZP%0_PsUZj{ z{E-yF5X1jgyvn-~ghJJgfr~EvGLjurB)tO6Jz5aEf=}SA3Lc% ze;%Y}T-8urSN*NJzPf=qK1N@EjBepH@!hXuGs`oL-b9rK_l-$AqMuwfz1KK#NS`aC zwn1i_3adp;#A9Y`%uSScy_03(7*_nq*CY}X8h=tTl72dG>q-aA4)Q#a^qvut+jNuM z+mv4l$x!9xB+jiu`j0id5R(y(IHE{z$%nx`E1}apOZR%_D}8MPwr;G|_=j4Nh#G|lt1_q=n} z^NxvU0^a#kw!H@TI z4E$n`6T$DfbMPZ0_rJ#f)5ibK#{X{0|4acG#xVCxGUQICNO;Y7olLr6wqWD8;I*p# zrgmIv$6T&ZU+_Blm-jKav4{mJwc$$J;+|CVJXtBONr77TcR$0prUm>%ZaJ|Cq>Jdy zHJj>63O|p+)7Gg}gwbEo8Fb1oUDn2rxfSf+@GuwsJhK~$-xg=}@-$oCdSuHmexE_o zV6Z&1bM8)1SZhf0YrB$+ivG<5m;SU}zi@p$V&%jnOl5)02&tESS5%>aQw31ru;t8OYgCd}yadr^C})*vF~84Omi z3sxioOD?HF+1=~hsP!!gg@B-vm3nrvajXB zBq>p`IWeOD`ptM_536kY^e~#cnT+8w@X--G;aGqW>LG&?1 zNUI*J(#RFjwU;zxq4<7$6|U(tbyaD8Sx>6BFbp5PWHMctDXyj8KYJUSz*mnO-=!Bb z*s1NUVF-}dm3-Ch=Bf2?I&CQL5P40tKd08&P#Ze;dz&lKwsT3+E$c@U$h`P**@pw@ zRLd_HTPUP273f6lF8HsVpRj*~In4VrtgE2P?W65#!dIFo2fXF!ni4xwOlx+BqVVFU z-RY^CtMz;FSw$CjMwb=}tgrpTwAXSuK3FQxwj!LW4KhR$g0IuGnwS@_?mgL)_IR@} z>m~SyvX^Oy|8{1PE4@skhWuISLEZiO(Tz>2*vxTmQe=xQK&5xTe&YS8=%E7Mk=nK!XuGB|et&OnPnxVv)tE0wy z%gIY_b3H5`JX@l~NW#^uq+M$(f|2mCpl)vF`;#3!Q$?YJ`6O{E9g0cLE-OsQvveO~ zzKtJ+`9E|$#iL7}&=XFpznhgL@!2!Q_Q%fY6fsAJ?EM^$ZI!5&3oCbs5%(Ya_j?Xj z=PNzxt*;kV&(>^TBd?KJr=QQ<8?BlZcW+D&UST0dc1L_Bdc2(9RgJPc%r8jl?oGXf zW?c!4pAK?3Z04&2FvyCJlWOn&c+uWB4KjH>>xq!YUdeA+jEArxaJojNhnL+Rt=N(x zis5WxuB97Ps+*LAPA|8uhG`!X4(mQ5W%Vqf-t76&)$F5)(m6yXoQ-39-s`}jD)f4O zsHLQf@t*gfyEpqsk#I8Mqx35Um$1m#-ID!H)y+gkho!2DgbRI4u7yS{wB~QeEhmya z`@BA>a>V>Rg2-igeL$O4iHu$P!muc&=3yN#%in%$>c#|9(o)gvwMkOsm&O^3-ERVg zz5@eaY&8srGOBtZX_v#nDeP&fOmc1oi)3jXrx)wbOYDaqRLOKn;NzkZKUIVow-c%{Dq$|p@u14hWC0aL zWO2ruVRJQ`3tZUCMBc9|it8I*X(#;7k>33T2Z)|;>4_a13k<4R5oW!0~d?hESMxO*ka^5b$1#rY)!P1sp(5hM3pC&mw z7L|6n4@J>Dt|wE@mkq(Dob zRWyyhvad)H;{5sN>(cIH&PID=ZIps?$e8bfW6Epn5ybCZ7+aam&z0qJ7u;ln7PYSr zMefdXRi6_uQ2WuNJ!BW&SxHT1XayLmV-B|(ffB0I*GLr*WC7zj&dFVfeLHwqFTIdNS^ygL%P@VGiS)Zgt#*ZVImJTUBA@@&x zqi0;^dftHLR6J>mU_ucYb9$m*5t4+)vH4|AQj(d*$`few8>~ty$DFmAbatEUN$NlS zt}b!Osal$3_JO)a#e#cD)1TnBEa%XDKs%+3D9V3)N8x)8!M+X@i?g@??l|9Nwwnh5QF&YEc_V!01d%+ph)3dfwZp|W0 zX5W9wYLg<~lRYG?RT`MX%*TjPJK11sc-DR1z~2~wtAVg7g$ssHjt7&}@0{`_!XyA5 z;R6PE;K|;jT_R>{Vx)SRK}y5zfw~Sc!fXu1fbzACm1RRM7*89D3X+u`xByvx#ODNp zNX_lZt{j1pWg+KHs2RiEUvz~MF6H&k^#P1pc?l4$>t^EthG9_9M@xT~2IBTmud}wz!5rXkS5S-)k1*js2ssy+_<>SgQ zjhZTgh-!haANqSWk?QM^VYh0ehDrRfK2U-NowuL?)zpoDq*6mm(qyBVd)h3t-rXR6 z>mWombfX{hU8xZq3rI<^+C<2-{+n@;> zwDD%^ivd+(w2mF>uDjSRuh_$i(gHx7Yl;ue{yAY!CgDxLS>Rc5OZIj z8xuZw5)CL1Bq2yUJ(FmgU05t0%+ z7d%-*NrD!6pxCe-Fh^xg`ymiP^3Ow=aEv}@|1K=B5H=wwkf-coyc4Ld9e@b$jJ^H8;7`qQ6DZv0nq<*mdu%7}#FUlbZtpV6dugZcU@H5q9(EHBj zZfoPT0Xp#^BE*<`_mBUYC%OV}z&TD^;wOD5Nj%WnI4H|+AD*XrMEl_di1ix9K{mih zv|GZgF$4Ku@*Wn!EIh0rVFAR)RP=DVQiNcRT+K`lt3IkfloljNJ24zz3J4*j(?Bs7 zLB6cqO>=xSA1sF-RZLWWacbU^He99xk&Hf+HMjo;3$Q#|ap-zcW4?i8o@_hdY!)L1 z$;Bdw?gB&v?O*ml$RJA46@G(0L#j|2l$Fa2a{8N%ek?E6g5n*xDETk{dh)luuzsv4 zv^MzbyEm!sq7z()3FyRhvZeFiRPhoc{FX5PM&6DhKG)_c1T{zv9It`aXCeWGi(t=; z?}GG;zZKe|sVd*YV%Cp9@q@0_C%C1?)KF(LHz~6>ZU#5f{4z}Cv3Ny)ug4LT8>a-v z#p++*DYK3avjoG8N@l4OriktZqdT5 z<`+S*SmHSmbM*LpPI7;^@&uM61$G0| zUnL=e`=knIV-#+vtmYXDcducY>rnPO56JG)@7Vz=5m@aC5v<5Phk@2*S_t}v!$o@j z{Uje%rORy=S_JBj1+x)q>U<_V@S0Sl-lt(OlS_h~Tl=N^H#F!FX1F0Tav=%Xl50cW zqzD$(4{r`5Eg?&mU*w9Ig3Wx5$hrHZdX0nC?7H#qWSFm2DDLANqU zxd-rYNYGoOcr5YL-ftIwV{cB-6Zntvd@tucI;b57>9?wL3aOUR4MH!8H)zrxl44gplClEbj1)(YwVq)iS@i5Rm*eubf^@Ws6SM+Vr z4UmFr0dv9dfTTrfIO$k=w0u$PtW_TzH$Qm<8N1Kmp0hF00-dkI%C^`BH;&o5qZvEW zE(j2-*?%oLsVubS2BZ0ga*v}4+Oxo#M9aVe6Ty<0VMz%Q5KMZ)8G7XjJ!j@>D+LWcwm|g zIG#8b!=D1>N}ytYQUu{`Z!3!0gxi!B3_TB_sfx(a1jf72^(1tq=##$dWxOY&0Z9-Q zlwYoGtj?*z#GT+G$4qSc4f@N~VJHR|DsIe7uW2U~l>)4<%*pOKFm5P-6@Uj|)o%5T_+AP- zG1l+i%*`WcFk{`BUuDf+;&i=@6r#BWwC`ye;`@~BoY#acI#cd8f70oR(87dN1Ej)J zcFI>t@}H?2-S&>rr+sUFQIf-_feHDVs@F&sVs$(G5eFGJFX?rJnX`V!DvObL#Yk$dzy-H#86S5nS0R-PItFZO)tV*S$;0Zq2ubrCd23HTMyDY$o!4f z?~n>FeXt%D0OtuI^N86C7J5yCuj7<5Hw>Dv*-4F)0c_dgA8md+?^V2+JuJl=a_ z24S31VueEHla9#S(CXJpL)=SUHJ)ftMr{&nPkkX5X~gAgtij*jcOw|Tf+(4V+`VK^ z$;8+ltw?I$`zs52ku-29BQCpzYMW#HBB8-4#1{upmsa!zQibvQ_@?EA&&fC9ep;LZ zGs*(DvO+;YSCTw#;+c#8lolsxK#s1J#OF${lwXsK8M&Lk6~9qM!M*Y`9?ku@9OyUs zvd^gvq^X948SY?UWZHFz?nf{25n+4~8I0k;GQZvJ$NiJy7jI6K-nuB(*N=W!?}|ze_4yE|zbTEPbzYd}{C8h|X~&^I}HP&dT%q z->=3Ai5*17m%`bu`x=_e$K@-$8`x@X>_?K< z+|k~wYX{dpFaps*dDgj}Pao2LT9G{)rTb9iN*&}6NSRUP9Trh?Y1hi#B?w~&2EYqj zk+Erj0b1gPo2_~Vrw5bD1S53Z7^;5A{5vRcJRGBA)2F7OY(KaLmu}x zKQ)lojJw%F_FhM%z-?}3%al`kD(24#L@^z_$9{O8vBO&b)QDQ!F#xtb!v?2+V=`D;QtOwZ9}^&J5f>fqT}&Al0J zb9KOS=tkFsEIT2;dk7JmYL#VSumQVLrF(=dj#}kUACsphOUwoy-22`&&y=(vL?#Z> z7%+mToIbDT_>VE7Mg#Ke?@cOu9q%ATOSa_!b>cifC8jmp+<6vBOc0qU%^TIxX#_0z znEa?f4rRq#8>KQ=i-XT}pOk2byt_p;vZYIFc`2AKJAIVJaigJ;`wf;DVf=53DfNd_ zf@;?woH`pk8Kz8fjrG{U${i7-JLPtUZ+cRVyD7EkMvdNMZ^fTI`$!_sB4vC==>`T# z`v!24Bg4kHS1WS_n^8%|PN!0dCY9eEr?*x6BqF3;*#Nga8oFbF=NwCb=GA{Mtk~|i z`o@{dR+{)f4wfW-%UMneNp~^t3?vJ)%4eQeTmU1VG7PzWj=`vHTd1mVrMTN@BPf7Y zVsD^5lME11a?z){0Et~Yc;WdF82|u7kM69+ZdH~2T(tdVTg&~I;6@e3{|&QliC@q< zd$3#P87wrAfXM8CUkU&St)SVyHOfe*+%p@F7z77yb#EmZ#0=cbpXQOpvZ*2D(G8u}TlCZLFu+96|C^vxQdP9?9?OlBO~DmBk4r zxjy+_;8f0$rff5y14CU#78Q|{3Wzqq;J3ML&-`jmj;gYH0jI^Y_>TJXjRFg^sXJ%9 zH&~H&dB{!b;}dt^h-vC;=wDV~5p|EWoYS;E`q1Sk&CjS(Xx8o(zp{@6$ z8#eumv&qvx*c$qxp0p)=02=@p7n2lh@6JGZ=9+5TR+^BF9FoF=!k~+`D$7?Eh_A=Z z?#becWO1a1US^ZCea~PQwzS2mLU-Fn|1iwk>jxJyBkit$N$oD$Zij4^TnU?w*KQms zddtB|EH{QC0k<*lf*Jmfxb4WeaWNf?m2Sp}qUX+byYyb6*N>NX}kE9`*I3=y2D~lL^0x0l+;It<_qR*Hew@E9`P|_UNBWZBR#(Sm0(RlI70|blSX~=4I{5V`o=hXf+~-C5g2%-h#X}Sk->* zEQisVe6Bj}69_Fuusq~?D+h#^U8)sV1l0uUJ1$2Xb*>U>!H`(7HBbp3+bX2Z;8(Mf zAT+k4BLloV)T7SupSJ)iIhTY<5qT|ECC75{HIdL{&j(#Hqbap9y?O|>7=11wTICN?e%vqOdd_xnm2@el1 z|AWG~n`wmJH%hCm*|a>^8r;9hKB;NYQ(~^dVw)V*5oX~$DEB4uVz6@Ag|-TfS-QNb zHnPgc>YFXmG{6vzqA5~*y((3y_c>xG-nr7fI0&YGC0GyWxH#M_=}Ap7_~U45Tas67 zeYNAsv|yqLBB)%@>%2ZZcXKCT)Yr1hK4vP(XpqfJFSOzuXNh!P_- zZ#7j%#O@5+=a+7pKUwbh=q93+p_jAdJ|njnSrniriIwkb2dt=c|6r|TM0Vux1q+P~ zVZ$Nu-CrZ)CJLrY-Md2>1Q+%7Xq83^5`Bco+g>eOFl4h261LF9>_u@+j~(Y07A9gi zrM4qO9)P+*;yG3gz}3!yaOARqPB@}i)~JXkhs&c59brw)aS8DP=cOO&Ke}P-_*hlt zp0_;aj(0Xv)(XFUYAseM(`|oxwd<6(t~^6OY}@5vC?LR;h+kk!JwBxNdV;N4Vu}j+opRB@eY_8d}Y! z^F7i(hMTBfor5O2lGuSbq?&^;-IAV85xD+-s@};=lJWTGi)Ie)kHUuYRw|4zQXR__ zwWOR8Y$r>wi#lo?-pn^o&YNTf%E64SpJVWQ-W5Ti_xx4iml0!-EyQ zn?G^c6Ti_IXC?Ez4a2GClEMH&ng+i-sfz$DMwmvtJH#?`} zgQ#XM?pSq*&__f?*Wip4buTEsZ>Z>Zd&IT3zB~j5+Q^0};nF21f&)0!UO4b}dqZDk z+x7$_5gCC~;+J2}P@it&0&^|7qdDb2{4JY;`AK$Mzg_(k1J&|{XJggi%&yTL-XCNN zir0P|=v%1%!|YLlR`FEhuh%2`nf0=ejLX-)9vOy)KeEeNgEXW_K{t($^`s@XY-(X4YVyyI8|Hcj191-@~MgVWeN(J;eVs7BLS7`5|5KS`HaelJxY;FSx}{*jNkaTdf@fvYyFS6Jy$~JlC+_ zz))dSUU`!*M00iF`o)&`xPzB%p?ZR4?O^9PX76G`>Iy6VMRxtH!8RGWdkzg{2=7~* zC-OdhaZ+IO6X$Trho9Om%shl--ma44ED%8BU?<{ja((i+*zvL&567k(LLv5xh;I|Yz1>SA&@+0jpw9&f(P9CnP(qOr+#fnGtnT{Qb-^)p!7jkQtlCbWOe;3@e*KbyDaQW(B zxNu|x+a@>Pi;PRoU@SSvYXrZYKl#{equ=h)>GxUMb>@8OCev=oONn9~a!T=Y+z%?t zO6!l0(3TfFZIv*P*XX~FJ!wC><6zsMm17}5jM%&{iy@3k4ZHQT87ZbHE31QQ_zI&o z=`}FZ#0J7*2NkNDj&9rU_dw*-Y}x5h>EQ`i>Ve+(yz^UsgwPnh3X2B8>mqJ9_Csx# zXStoX-!ni&mjUl0n1*`=THYuP^f2^2F%Y|!&gZ^&4d_j(yQh4`n7Zm`_J0>9wH{MF z$mb&R-stHMBd8YP|7@9_wc(0aS}IAOyf9BoFM7wr;iWA9%*Xcv>j6cs+wZeHv-hm4d z%5=R#-OKtJ-eRn)fB=&hMV_eM-aRk5tF07KYftggRNPQ0zVrb^zucaM1?2}ZviwZi z67N4h2q}0WcpOoTxE1a`^=>KLs>edBuZ4H$BbMF=jruEO`IW-i;FvUxs6+@8BV1h? zKft;05qDHB>32UVfmrZgWQe`Q{*IPbO(8WGEAmQ8q=m0F=9LwsBF%ZRlOuXJvWWs~ zfc^g`lgjT5I#NP61Ca{3sBIKyCr7+erSsFxto)oM6Vnz;|1nO9sxNsi(XzPmrOG#h z(O!zIMBaDfqZvPTG>x`Q0ONGP9<0ABNqKe`^3cpScr~*uE3OBt zvwQ>Th9&;N;ais5)rTvGT z4#EsQ%hG;Y4rb;T{l$_(=Y32*tFnk*F4FZ@6lglZC2Vifx^clK`~L+erQ!&GLe8A@ z2nwNw-4}7=&#!`uWMl+N^+y>B*i~bEkJO&h-{gNv;0muD2V!IU7gLhBn;uSzY95aeH}w&mfJJffjHZd{M};S zHkGs_rb{f^g7sX?o#Ws|bGS(B$2sE3jwRg29BVOYqP&VlFf|3yr-sOH>FP@teg1U= z!rcESFQOdL#NO9>0wvjGFr_cgj6Pt#zNFi^IHY@2C32ohaxe!=A9Scoy!3S|#ut%c z9>T~6PUbauT%`6*{XB!x9pp7WpWCrVo2YzZ#Cytb#r<(GT{6;WjDO1dA80ASILZIn zZEbhV_vRM_*^zji&dEF_LJlv_KWPm5UIJxVaCgWF&CN>0hz|%Y#~a_AWMaww@KKDG zwx>S|hZWS30PlW*yoO8I?8ZnRJLVZ6a^(rp(g<;omY?bNPFs1MYM{~uj_-Pv3 zN_{XE5HRZckLAY>r6RX(OYj_j4K7!ciimdzaHY(=?_>Y+JzWp-YW+V0ZujtUXtE$z zR1^E=Mbi3vedBXEMHflmKLc&7K4s^O0Ng6O=q8Kk>G=`#8AZa0lQ;L-j|4IaUY)%l znyxg58p5?;K$o^U)~B3QFOa_XuJx~manoOkD4g_#V6*8oAa%C?A&Z7K0#DO?1szcn zc^eOTq(a_2Lia(s+)jq2xaHK9f1%Us_JVJIm_;mq;>J71rGG10Z~rmD$3X8PB5S*xeCsxY(0t`oTutSyQhV1;OPy4FjOng5#$A(w!97c^pUWU6OOR<5D zJ_fLx+mDwl*+d~iK{11B#jIQlv-Fqt?a0+2ZrKuM;xm1hw641u|>_QxWKngt=U zmJT|LdO_O@5TI8&sAcz%5HUZ5>GJ1(JX|vBQNLgbq!J^1ppFOTquK=sjZPbQ>_>xk zG=q+F!;c@@HR$^TJqDcUD_2+|giEm}0kjtt2bPBvO`SC)hk-dr0D1uX{0N#7yIzKe z;mL|XK-K>@^GEW9pgrfsoH>07ROV2WfI1KGl2NbZeP7^J&0yJn?^vUCzLdVtOrb=o z&j86m6o-Nhc_@+Q1bKL$+w(fMX&xQ zMrcVA=EX(0=51yJt1w0atJ=ygPMc`G4nniRs<1C0$t!;p1u{S#J;YJL@n!Erf!uwb z2(>R|rM{RxQGE|w)ewyP{MJ&#h}%uL@XuqRHX6-=RDj|L@{qkWyKtKfc^(2CGtfi;#QOz%_kI3jEJJbyI?P{&>rvIa^|+=hfW;tn zXj?R%>|G0op(H?ppD>hA=FRIck0?rQsk_=k>;+Z{2?B=O8>lXSfWS%Qt^)r;l3e+2 zeeNb~7cr2-D?XbPHR`TVk_Bb2xF!A*i?4$sQ08~*RmQ~Q(NdrX(Kiza)038ThGfEB zGhnK#Kfsw1eJY;4s4I%HIdA|GvsVplqm^juzop*(FxWb<_=n+{2U1-hC(OIaBLckF zb&w;%eJ(FV)d(m~>@kq>OYuZ$b|$P|7Ty`)PWRt>+_u&^$$0ay45oP+NiZ;D0hPl$ z1Q`Taqt=E$t0j;y4+Bev%SAu*prH^@YH9Eeq}l}ykhJtsA`JEbnPCCfWN;@Aj?61v zQykK&ss)2-s4Ae^jYNA7o<9jQcisT8Wc5YLaPvK|{#n=toX?Uz+6^92AT+<>jmY=# zbW&#J<^e>%I9nDC7mU3jgh7fq1=uGm-#|-7w51h9>T~|+7(fHJlX`vrmoOswO9TsE zg%qgltr;9~nLz<{l6HECamwHUr@0$+Ru;H#vNYcW@<4_SNgq#=y0%LsG~I#yFwX!6C~{+&8>)_QAP}?oCEHBJJ8jT>Y;oR57-ox3Pw_=woCj^ zX`Keo`}ckrQx6xUxh28i;;;zX>m}BYM+1{qL2#RIK}V~9&&~d2tBS^ue6saRNa_;m zn*X}Hzt^PtXE7x4QQ$&}bm0k$agh7?_EL#D941|$7>$F#zdC6~)jiR1MRXguk5>Pj zoo&w6(P-3hM|A7yk5n}x&;B8&|SrC>7w@Eo{{|-!LK1vNz z{2dL5!hG*o8t>lUi_Ku9kMd79mm&GhpBe~!qriakqgv6mfb{P&?93%L(7uV&XuG5y z3$5`dxEcA{Qt?AodELO=^0PM=BKd~@k{QVT8hr{GJv7-%M{T4$+;f>SZC4k&Sz;Ke z158spFW7-}x-v6mAf?fF6Nn94vND7SbF=vpL_wzoxRJ$&`dS-6|McI=tS7>9!m%zC zaI)OL342S+038<1`=@H@X5gF(Cd2sRjcg5Cj}}U;(R&;L1|mPho!9>0qnhe_Vc2=} zL(b}O|BmJcC_yj`dg#TA2pwF9DyfLVCO4rYDs zU$f5p3Ys@MKu3L2Skj-^+iIA@sKY@r1if_kv(KZ+h|D&qH?1cy^9oJd9n4`-X{fe{ z{0Dr6dx4XJjZs^G=u+z{9Y8g(wzNTbY+V_d9)v+~kI>rX|5$RI3KV5OTi%;_+Yj=Y zfk0Sauv5{uz?6tmfDAI!YyYVTQIhOOlNA#86Ht+&Z>Lnx#0>&&p$6-Xj>nUkCtqMg zTj4}93&N`EP^umEEZ7tnG7$;~KCr$RcKn0oigY$2#N7{yp8z`@r z=nkaMdUOjLAz?-FHu?}Q;_wz}k?4G+R?dHIy- z%rd>#Z+9~SEr(ofU{kte`|hxm=A~q~79mJk0wY&HeLb`41o^7x3_9I1kVHuqlVS zA_?9U4)p~FT0kg+YvhhuvQ+wtR>4VH9rhfo_WuF-Z&WmUnHqM+3ln`L1bNszP<{P3 z_k-R~OLs7JI}c>fBUtt?!njNCLfbsnry+0m)r=d8Py9{JPdpW^95X#nL_#w&pyNN7 za|aXB7cN!{A+tO@4~VIAGMm|Q7Qop_xf%3D3Y4n^byK229&ylV2w)9tmk#ry%)I?g zi*Q+-`?PYC_`$X6-Qpv?Pri`5NaMzSIh;ZXHHS$ERUc1CfPAqttiC-OKe)@gZ^G*e z0AE-{dHvm|2XsO_kE73dhxxV8cNV4n{)5??z@>v$R*q|bWk;}i7fl^r2eR9x9FZ#e zFdukxfn4Fz*?B>4$voGzOVqto#*~24N7Kgd=_)NTKQkr~^53y6-&!n;kJ4f*#5>aLmJp_6kEON;7JI z78x#X9DZvWc+T)|wBM<5)>uXzeE`yvjy?bp0K8)*oz8tT0{v?UJkiQadUxW4`d@;w zAnPrjB8Pdt;7sd9YJ>YvEm3K0Iuw7R3}-uzjCp`^z1Ct!lz7RI zxcBb`%1kwsSc<2>F70*LRMY})w?fo)!rfR+bwgEpQ2hSeFL1K-0Wv)0KNbbq#Qy4{ zWcu6pUT9k2nFD_#h$DG6ahZ`R#RZUa?QHDOIbbgi<`X9pR{TO&IEa`!0Rc=Mbj?nj z@5oLPpy<7iXF;7JG|K$l)Ou|sCFmrhse zu};?d!{~4V8V44n%~Ks5Y%HaVe7qbou_czMCte^&Vndzl9p%ho_|oLpL!TENht`Po z=j*l}IZV0npVf-vq|h=*+eAayMUTbsl&k;nsC3rEH=9sdiOVN}}^zDQNVq3JA?n0>RE1qjewUPUl@@8;ow7g`krqGwHjUk^xd%Alb z`eL6Mokju~vx{-3PzroVuS{Upm>c*1o^0u&J|7G7oYj zHs<}T%Cu|CuIrQj6T+w`_V6atXZe7cL0~DR?K_4ir27jh_J8ZokMzr@PWzqSGU6uk zrR3)hT;{#Yl=z!bylcMy+^#Bo^vW-maKCU2%a*x$Ksdbg-H+Ynd;dr-`WE`CB>GKdHp;}j0pEdS~}0kKKb>2 z?mJ^GpFGJZZ;y~4V`aO-cJ{Gn>L60%MKo!4jy?^xlF>*%GIAs;_#10 zd4fHP1OrV>2#qVvwR2y88NcbO`ux-A_tDddq@>i>b*L4lIa-aDypnTSigoxn^rqlc z4R_%yy72uBc+GFu;IF#u6M5g6)BNUNTa$C~=_8?qjb~aP?-gArt+-cII>Ots<0Rsd zOQ-4NVzDxk8+k`HH>|GFBu_)7ux=ph@#FFY>yQGysRx;#c7mva;9V)=&8*Ua{z5E> z_(FJwU?3zzn4kZx`oHs|+qI}X2s-J}e;45Y>V^DI`2Rm0%m3}>|7Uh{O?;s*Uhbme SSurqkh|+ZxxolZu-~R*5H2Tf} literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png new file mode 100644 index 0000000000000000000000000000000000000000..d73288a7f480c3fcee88b28d2de9f88fb4564ff1 GIT binary patch literal 745 zcmV8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00B`+L_t(Ijm?w2P69y?$N#%`;qJhL z5I+)4G%B^#MH}rbtat)m!PbZI0qE>#jTMa=s7z=iBpNh^BjmVGyt`cs0dFry3{*_D zJM;g|?9A>G&N)^!x-z*|u>Z|F{m``Iq|@?Pryp7#ONr&=X6Ufnd)o=vhDxum^rALR z-TjL09$iXsQ!SP9fAxgQ11oj{2EYkez3E0`CC2eN5>B+R=l5aMXnBjG8E`zia+w0a zb9eIeI>{8I;UMI#-c)*dqUjn1&}e&aW;EBddy^pK88GJ{v$d|$+Ic~uh#BflckHvI zECbeZ#5hvs+k-8+YUBaf0eg7yf1Sp$qUA^i3_udccUDnOD++-5*d-ze{&`_lBfq~X zFNzBAZdsyYZkeKXQP5Qips3NEl9Y^+)R(k8_A!e0%2M(rnRYxFv%_sU*>DEDl&#N~ bT*`g`2AY0HSk3hD00000NkvXXu0mjf%;QJU literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d24cdc75a820965d03d4550d5fa343e051a378 GIT binary patch literal 995 zcmV<9104K`P)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYZn^*fZn^>1-mw<|00K)%L_t(oh3%F-Z__{+#~+{H>NrV( z24x5&qV7NkRMgNgv~*?(3mX~wDflRCY!&$cr2}GM2^}CMQp6I8wlsw@kQ70j_}xB+ zNL8Hr&Z*O?68M>{yZ>`P-`)S7I|gG6R}tt+s4+MO$KZ<$j^6!S^FAM0ot_5(0tb(m zB#vcB;#$iXDsRoP_X~o+5tRVIP%2kX_g=hJRoy#nS-vAYeJGR0d-+a1_~{J4Ws!Ma zo~5v9OI_bLN2vhN_-cLlVp390V_@QD+oA|)U{w!TjO~VY*l{LdAOCVAf&;_DP~92) z(Y$aeHKMq>Z+NeE2F`Toh{x&siL?0}KgYWVW_@oWqn#V9TfQl!CB*vWuNzvs zOEj8p(^iBCHf-GbVUM>A}0*I<^fmI~aV}aW-px+Z|6^QN+@M zING8bUX@@p+r^u;KI!ZQgIy0u1+BcC$Y*?o_NeP@H?%-8#^4gn9}HHq+{Sv64=T$n zg379#l6;9D_sshKxY2l)*;r31+2HGdxW^*TEav#Yu9So-tMZu9wmxZH)i=Av953>b zYPBQ~)AAXve8y;FE~BJ}fay_E#1%yh*IhUm0LsP0?YWQ}{Zhajg36klnu#*Vv`?S3 zgr2R*h_;*O2j_0ElMGQfW3*vhlWBv~`j!epaO6&sV;d Rs09E3002ovPDHLkV1h0F!n^8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYrWgPKrWgT!b;*qY00UAePZLob$KNbnrlo}l z2q++%#7Hj|#F%1YG(=-S&(gnu1AmPt&RWhIOX2~%NE0Qt9F!no6$OH9T07HDXL;Ug z1M@n+S7t^@=5w2+zxj0LedjI1V2sgugZ#P$`U&DE}P{i?X)+Q(M|DPCN+vz}^(iWA;=2v@t?R$7m{*`z7h{QYSdd z>2DVc@bf98SN9asAyLLJ=5nf5{d{8m2eJ5RD5SIbN>1BH+RKkp)z+1ZpTNquM`ok= zVMVsEAPI|KdC82lxo^c-RS z^8Bh@p|o-Ak<3VjozdBWO6wREipCH8`el#deoaSHb7D3R3T2^)b#QxvO79+P3L#sM zZUj0SjRzjT3wmNsQ~}zGhIfxO^YaiwKxtJ+(+d*mD956wv0zv*F7@qDO{R&zEoXW` zg8V&XDy?XEc}JO?$yV+%LVh+r6yylS=GWx;HSR}5uGBR@VI zinMu62iBlA&2!91lz11*8Honk8wjDy>xq=8k+nyo0iFZR1E6n@mO9SMn^)vm6psZ% zgivlBsL70RD7`$>T*m=rpwbM31TW||gakGoBZl(Jj`3h$@G=Z|mS{_l*xta8_Jf*J zb=cL74|e-*c0;G=wAeWI80`Vv+l;Mv8(`kqq0vN7>6Oqv0l z=KYF1`#E3QY^vq@TD{Ru^O0RSbkhF`=kiN{EA14nv{Sg!PT@*Bg)8k8uC!D90fMq7 UzqfVJMgRZ+07*qoM6N<$g89ozYybcN literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..72a164103c514a7c5abac63b1bcdf86103e6de04 GIT binary patch literal 851 zcmV-Z1FZasP)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00Fy6L_t(YiS3oWPr^_T!0(mHD^MiC zuR$HabRcm8O(2*MXH9f9I{Ck$i-QijlVC9MgGm`kgaHO)M3ho^Q2HD|Qs{vY!eGKp z*SqVl*ZX*naL!>0B1{81<4&C`4sw(=Lu1@7!lK(|^_Enl-sG}G<{fxu2$us~+*Q;0 z1^@^IPIuk@<^HgnwDwYL5&{v0?gyP#2=cX0)o4Qjz~FFxtClqbO^S0!Wm%<$co8ns zdp4!Ycs!{#Tlo5L4k|-jBlWFVYF*xIW9{Xr^N`Lr?y_tmZp-w`R3u&f`bo>Z>%-%R zai0s#uI^tELw?%U4Gw2X^~=&jbNoPVD$5d?diRk49E2Qe3!OQuG9FJ>_1**%nYy(^ z{oIH`V*$x*5pCo+>XM~SK?)`P>Y=BHv49j-=pS4F*j%^wSv*eRC@KrTrGCscUf=W~ z@i^Cp&4_PF+%xT!dB)NBG0vT^LW4deHB`pn5`e=k=c*SuhDPGLBq9*282~`Ek&_+S zMSI+m9f?M`Zb=9$lng-k^>BNGdYlM^47!iMYld3q(j4*1$ZH=JgX!Ew2?`y?olySU d{Wjya1TXuEP)8 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 O00008 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00K)%L_t(oh3%F-Z__{+#~+{H>NrV( z24x5&qV7NkRMgNgv~*?(3mX~wDflRCY!&$cr2}GM2^}CMQp6I8wlsw@kQ70j_}xB+ zNL8Hr&Z*O?68M>{yZ>`P-`)S7I|gG6R}tt+s4+MO$KZ<$j^6!S^FAM0ot_5(0tb(m zB#vcB;#$iXDsRoP_X~o+5tRVIP%2kX_g=hJRoy#nS-vAYeJGR0d-+a1_~{J4Ws!Ma zo~5v9OI_bLN2vhN_-cLlVp390V_@QD+oA|)U{w!TjO~VY*l{LdAOCVAf&;_DP~92) z(Y$aeHKMq>Z+NeE2F`Toh{x&siL?0}KgYWVW_@oWqn#V9TfQl!CB*vWuNzvs zOEj8p(^iBCHf-GbVUM>A}0*I<^fmI~aV}aW-px+Z|6^QN+@M zING8bUX@@p+r^u;KI!ZQgIy0u1+BcC$Y*?o_NeP@H?%-8#^4gn9}HHq+{Sv64=T$n zg379#l6;9D_sshKxY2l)*;r31+2HGdxW^*TEav#Yu9So-tMZu9wmxZH)i=Av953>b zYPBQ~)AAXve8y;FE~BJ}fay_E#1%yh*IhUm0LsP0?YWQ}{Zhajg36klnu#*Vv`?S3 zgr2R*h_;*O2j_0ElMGQfW3*vhlWBv~`j!epaO6&sV;d Rs09E3002ovPDHLkV1i*Fz*GPL literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..88824fa7ca87f8cd64217bd0bccb6eaa8e197759 GIT binary patch literal 1504 zcmV<61t0o}P)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYZn^*fZn^>1-mw<|00c-$L_t(|ob8*bO4|j> zp)>`O*s&YO!wCsYoAJDMY%qR~kv%g{;{Imd@suNkpzjGB_5gw=7LGcxaMX!~qfRUw zbzR2(0wA~&#GIs+%VHja_e#BuiGWtL#uG%`?Kb~XJ(xXUcaqfnbLjVBAi>Y?)+zfZ-)!t zeoF6kdSUhMOua7!M*T0kK0x7O#ThE=absGaU$S7mc<=p7fWoDU+eg(VXmq0dUI&iP z`v4pSF%LH)z`z8w@K{`_U47_(fB^_@rInvwz3(Ax{36h$<+Z#%|HkJ4VB+V>x{xi~wttFh{H4 zY=TB7H1G-$3{dzTEol#=#b$-lc-gQ=#x)D1OdY^_0EHJ@STo7xNzJIbnpXODHXY~|sh5rA z^%u)*znHN~E>CK@$vnF;2p3BBSs{oUlxZ#YNl$gg4N$I472V6vvgZ?gYf0};RKRNwnfu0cq-6Fsif#>0Et&ko3 zW4+3bHdg^gopL%r13+Nm7SJmN9;0kVP0|9aSh1;lBj9%$K^G568D}%}0BcpR#?EKQC*U2u)bPC_4z5NIeqf34oN0PrF!w z`Af)09)4&Oj`ao_VBw$f*q0Xf?g}oz!WZTcI?*S01QlT63nPRCp37#`gyj9m3LT&@ zb$Q52vw}}&5-v}xa0s;|f?ZmwBIo5)(wcO(yA81R6fX+E#{oX*gX|R|mHpjf@6IOb zWqcqlPCl-!6v2fIhg`-X^9Cc#hsPh5po_gajvPsea0000 ziJ7ittaqB2kPza^_LY69>-+2ef6x8ndEWP&=e*}V=RMDPpHxSCn`1Bp3;=**n2V^( zM>YCy@N*wA75Xe00Juy8t*jiKZL|$_wW4kSfJ%-p2>$5B3~BiLfMD;SnkpN1&} zaT)Ajc6N8Z@9gPh%0DT@4mk0J|fpUPhSwiDu}f3_wJkJ#j93#G0pdc zMO-AfGzcK5&eeqeaB^8l#7KZq!s8>A3^C*xLlUpQi{Re}$i)zEFM!f-3nTh#nF7@g znkw9s4q!}(nQCZ$K3CwPOwd{WkQ5ry9f8bSV90baMY^Ylz+R9E4uGAGL)rc2CIHNf zzqX!CqE`cpR180*v0YG5O$jLGB#T_ZL+5_`f}i?J@$NY2xs)7cA&Dd+=iR-a86u;d zwpmc&Ok@<$4LhDTspy)Nqr58RQu+ zVe^rIGvE_Fg@mWXo1wIo)v*cM2I-@oWXN#QBSXUC-K*PM6T>CNYXgs__^SfB?-`e| zc@Mm%%T(#;D+%dU5UEQ7nvccsdZ%9pU_)4W|EplBbjbCFtHVrlNHZus&{O03=LOFA z^d*@eVrM{aw+`dH$@OR14t1FqTSRGrS<5*POWryw=MA~6bWTrrZ4G6UU7uCk#_*ZF zDV&PXo3yK6LYn5`N0dwR0eOVPFjZ~8hJRe%AY#K|E|#yk;gujzCD5KYHosh3iXr31 zcfN5pUhdxsle55X9PWPDq~Ldlhb0HoTXjxPQcn1=lSl0wXd>X-7FJlp>1JmQew9Sw7L+)M4nXfIO9C0<_)?)J@e zN8d~vaM2Jq>bk`x$_lq#tg;i2;nNj@mKT3*C6X5-h8`-lfLE8J)ZsUdcSvh`N}GC) z#)s&^DYKVZfR?F;Op%I#C-3>sY6#$FMlCzuP&xx1+7j?S=?iH9D;;dRJsZRVvNa6e z`usC_0?pIOXo}lB|C8QJ3;^IyRE11HBlwueF~BUdI?Gka+8>2f!XtX~!r3FmTBi`B zi4?PPigbp0DwMc;`fy2BDKSU;Xzkt$17qe@ttMpzuxCB;2;H5KgJG#dPvw?z$>-|F zLYojqHK}CHygHM3vk#`f@z^$NdHBoYUP?P?sdKvdR4Q^~%gM{?T-tXdc5=?W!bI(S z7Ur`%{p1 z;+KZ&y(i-lHhVCSM7Iq*)~aM~)Ve}=LLy13>Zi4X*$^o6SRI@y>r#!;AmAyjEDqi! zv`nCK;x7#Lds{H=8bQ~NsP_KM7f<)=WzQdsyXbSy2P>dK?o%{c5yyk~QGD zwR;8n9Ie}hpH@ooeei85toR?5_lB{qW$t1#c+1_r0zF2|Tuxu9e-9OzkmBkt(oyObCMiO!ckwL6ZgOe~^+GH`zU299wPy5&WC7>n1?`Mj8<9^BQ z_=9NNeVh4Qn?K`+^4}qu-_oO#dQOFLLg)L|yN}IzWDiN3@QgW3!LU?5v{&-F(~~fR z`_F@s6YxI`R(HP^JE|+r#JqpFmv%ox8zr-&$j+6Pm?76R5i-gbJx zE7^6btbAlhk<9XuRoNQ9+FwgaRCr&0rEVGZT&&KoI{IPIq5jFz=o5imixSJYJ+b}T zId)H>fOQI*$K0d5wS|-k`gyzp*5lNW^j>PfjxwC5Uf8;o<05o4W%_Ko{TjJ=MIHex z`P>xlzM+5s#)V@%meh*seXdZm0=S;mj(8y{v1)jEU5KdY%Ev)FH?bp^a_3WV=)|2? z7h-n6eu1QpcSp3QXrp*Ws7}`{eHP#-m+Nq@oX^+T($Co*72!ExnsJHS(39D#-QJ|9M2s*xJ+JEX9Z@sKhOreJgF8(7;~324O44Ho3D0`5anyuic2l zOx4ZrUcYA<;0GZ-V=~s2lv}y;E!7pz;rea9N+wxnNQp=dx)Jv41U-fRPrv=YF%i$x XBXL@GcuU&uDA526+8$MJ2`2mpoxasn literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b077f1b6a77b21c294a5b696ea576188e761d5 GIT binary patch literal 2121 zcmb_dc{J3G8vc!CFrVx)W{4z9hHQoG%#3EpQ1e+w#*(p=tP#bGt+9m=m8EQD2}5X- znCY{O^=e{5LWnEdSN5f@@2~s+J@=32dEaxM^Pcyd_dMr)lI?7*jzM4$0053*E+Q`< z)yRLq&vnGj;Ae>d05b8jw6t@u(lXG|jJN>+Dp_7c;*TE8pt_GIk=Qe!rV0s(xJ;#{ zT_(1(I=VXEcXW5KU z^HBu^Gcpt8Wt&R8s;9If)`y2;jNjUc^s*#RL~T_*_yJE1yCUk@M(U& z3T79|6~$#_di;2R*#bOe{}E>V=%4~Y7o9@^An?sU0F8d3NdW+uhC!O+BMVlZOyKZV zGTpHY4Tx6K**AS9%qlW9U8#bf>(*`G$Dfo&9-bd5OTk@wyitBg8aLS}$0-PpjyhE} zVc2{W;0*DJu0q^Xa$qohWp!+VzCrn@D;YFY@W_C)c<1W&*2GXz;adNrDgFvSu6sr$ zY~BO+=@L~2>PlQ{1&`Dv0gcCE1l`lGeX&8qIsdC*p>zm(18O(b7}W4j^>b6d{&|5j zK7C2%hu9gShjY78&gA;DOk7R+#U@d@U&eA4j|FdyrNf3?Mk=Q}w7QD6$*#?)Ze@DT z1_~#`bSG_Um*6Hjgc0T9TtFTsG1RQKU&TKzuOGI7n~Uaata~L0R0y=ikIgSv7h|aS z@ttp+jhFkkL*&e{8;83eHfe<2p&`kE)E4d2le80_?1bXA`Jysii!~fF45L?gPVNcCw!swW2FPEw`cu_flPJ% zx1N6`PN29um<=(T=YKMK$i4vdiK>t>(GWT&atts{ugq`~Li-@$N(5L>PAGe%Q1cXQ zG@fQ!N|R1QB!kJjrw^B8mEyCsj@ItI&^KaT)of6P0ek3?N2sp2EX*(hd@8#HB%iGp z4Q_xLRwYw4a%zlYO+T3YCSY69^3a#Z-IaDwQs;DXo15VqTlVgj=Tg2KvJyyDq}!G^s3|w35_tY_xJfl zFkxw^)?+djX0-=#jd$K4U@eR0M$u)$6A}qh6+h89(?O!lV+3)kq*FCYokXCu408yM z!6gFa6Mti{-&+Id*GM`xWVQEazPPzuFM0l8+)9>_O8;@PE?0x zSMTNNaWrq`e_AOf^g_3#u;PD|-y6a@mAHt_5G;20@^qO|bKR{=tMv)hs=C>F?T6}< zuO~uZbp3QmR~D-ew;yjS8Hvjpfcp=3=%0k(Qzi=`E}C0{-dexrF9A)y-anIE>i3Io z#U4cB?_14hTiuNv%zX!EeM^l@=sp#~37+p=?>aW;nmH(K%sqyif?%8ZQ0|HA_D@3e z?>`TKPeAYLukL;=v_mM)M7@8wmvTQ|g|V|kA0@TrZJOfml?_b^%rpo_l4K1f{Gh3MP+qdm$}d@ntwH|6aCE8m_`!9{(Ri&nOVuCaZj$us17x<| ziOxIyT)%tQos0*)Oc_{O>lJfoP&jwgUgN)wu+*7D$oFX}H`#~C8oq)p^n9&@Df16b z2)b_5wekUfEA!KXZ@fFGJ_Y=&#;YdA#20Ev?f}AHZ_QaB%MH*ny<@w6Xd_pxqOTp0 zwru5omcB&R-2bSU!k2W*Nm2BTI95azItf^Z^WF7~;5vQOdi}Xp{a`Al@AXpkXb&mDqH7#cI4OBOm%7>YXf(JmJ^5D6x#+6Wgzz zV|V8Zpp#JCX0D|zO_X$^x9cllJw^@A=xO%dQHFBY3Zq*%jzULMCeNnZu2BnDpWG7CUk&S8g*N6~EKs zNY3=#&y&>lXphtotrt%V*6zHiHw@UxW#i73@_89qcstl4!`%8UJ!2d1TzLF;AY6s< zx(-`A#u}7VPYr5*&q{s?tTTf97%Gr|jeI4k3WA>cJP)fHTYDOip%@kcmbgimyr@uM z&9jwBFQ6=LtRl0w8?zbycP1kp#_Vrtu0pJf-%1Qdh?KE76`?2_&%$zk_qTEDG{jwXVQL+pqtSD>9_wkCStj} XB~Hr@ZAsf4B^rQ1*&=H#h;jb`p3Bx- literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2f872dd4e6b82061ed2194970feba051eae12d89 GIT binary patch literal 3018 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 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb23a706ad105fce9a3b47c9743dfd95d2d9bdd GIT binary patch literal 1482 zcmV;*1vUDKP)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00c5gL_t(|ob8*-Z`4K{$7k&I+WSmN z69NgSyc)=cfJAtN$10=>;s#PnfkQa;AL>2Fa3};MBoG{crPT_O2oXWcCJGPHR7s?~ z1le8h+Uv*kRwZfhcz$cf$nocBjc5FoXTJ0M{l>RiVO;&$e<94 z3<{yhpb&}-3ZclLuqi}F>hGeWld^8FzS5Ku1q|tmAhcMtR$qxlaZ0K8O~6H(HX3=O zP0kwAOXj-jLSIHXcPIwvlMwXl{o=Zd>6mbIPqeQyCPKvm?;{A^d9FTqS^ax)y+VZ0 zlL@UbV*sD%e-x{BuAmL(N|sG;ydgl5Pp7o;4>gAd!=viL+KE>u|16omPiU}vfg+#1 z(VZLAOfr-&Yc(&cWG_BY2K^imkrkbMQt4A?xn$oMRXr>Qep2m<4(SdeQZw9+G&N^D zeq99&QUB1Z`QrOzuAohLXF@P|1OuL%5Gy=H>L$6KS79^F6F7x+OC@XAQxjr>U+g+L zYvc;Rjjm3(2I!ApS0`tEFd^Pq$jwo8sl?lac#G5xGL%p*MtCq-E1n5GjHO z&Lm?|r|JMf=*Eb;Tw;4OBX4y;R>>yPveCWqikld%F)3U@tj_rr z>)v>URi|5#)f#yb~D5ou?H+7K+xbQI*Mq#@^|JxzelYTGe&3>QXarx&CKZ|q{WhX5 zm+4Ebr9os>hyd;?3g}e3%ydg*Qn-3D;arH-YUFypT%(!L>HRXGFbUZw+Zvgxwe8y_ zY9)4l#kxJFI=5-v0x1+jM8;)EdAv8H9CTqqUt(x}u`5RC(h0Wp>=j%C^k@VRoJlGY z=$xbucxNHsri3dr6Y?A%Qmy^1QhyiZI0%eC=aXkMO6Lw&TfZmxBNAhDsVA{D&B=s( zJ8709cp#gQxtNfj$LUQe@k&pE!$3ZNGjO1dhY3MMdb`o}Wt5IKS0*H2l;9TeC=zZ= zdNu_xMwfdMO)0twZEX-Gkz-iby@xFkaYmN#wQNF;Pz3aLD6sy4B6~ZOUCkbR9`hf~ zY4PWiP9~H+pd9{=65oFgphy9uU;0x0U9pC^XY)4GCjHR4{#^+e?Q4-P9*v(r4EHBo z{~tbO&91DiDK)1-O9vrB(Bj&Yl9VDimp0wtfyl3)P4R7AC^9I7B7;IGGAM*1gF+}W kD1;(|LMSpQYzmS80#`U~)%i12?EnA(07*qoM6N<$g20KIp8x;= literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb04c367d06f849ae97d73d9802400253a353181 GIT binary patch literal 2633 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 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json b/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json new file mode 100644 index 0000000..444d715 --- /dev/null +++ b/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png new file mode 100644 index 0000000000000000000000000000000000000000..280c30e083fda186bcc1b24d9b226a9c47bfc7e3 GIT binary patch literal 6808 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 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f984b9e44d67e72483d624e50eacc6ce2b7d3a94 GIT binary patch literal 13502 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 literal 0 HcmV?d00001 diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png b/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..95d86f3f768054dc8c83bdf1e2e095d9213c8e8d GIT binary patch literal 20794 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 + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0.0 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiresFullScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIApplicationSceneManifest + + UIApplicationPreferredDefaultSceneSessionRole + UIWindowSceneSessionRoleApplication + UIApplicationSupportsMultipleScenes + + + NSAppTransportSecurity + + NSAllowsLocalNetworking + + + + diff --git a/app-nativescript/App_Resources/iOS/LaunchScreen.storyboard b/app-nativescript/App_Resources/iOS/LaunchScreen.storyboard new file mode 100644 index 0000000..c4e5a3f --- /dev/null +++ b/app-nativescript/App_Resources/iOS/LaunchScreen.storyboard @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app-nativescript/App_Resources/iOS/build.xcconfig b/app-nativescript/App_Resources/iOS/build.xcconfig new file mode 100644 index 0000000..80bc992 --- /dev/null +++ b/app-nativescript/App_Resources/iOS/build.xcconfig @@ -0,0 +1,7 @@ +// You can add custom settings here +// for example you can uncomment the following line to force distribution code signing +// CODE_SIGN_IDENTITY = iPhone Distribution +// To build for device with XCode you need to specify your development team. +// DEVELOPMENT_TEAM = YOUR_TEAM_ID; +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; +IPHONEOS_DEPLOYMENT_TARGET = 16.0; diff --git a/app-nativescript/nativescript.config.ts b/app-nativescript/nativescript.config.ts new file mode 100644 index 0000000..fdef80c --- /dev/null +++ b/app-nativescript/nativescript.config.ts @@ -0,0 +1,11 @@ +import { NativeScriptConfig } from '@nativescript/core'; + +export default { + id: 'org.nativescript.appnativescript', + appPath: 'src', + appResourcesPath: 'App_Resources', + android: { + v8Flags: '--expose_gc', + markingMode: 'none', + }, +} as NativeScriptConfig; diff --git a/app-nativescript/package-lock.json b/app-nativescript/package-lock.json new file mode 100644 index 0000000..212c42a --- /dev/null +++ b/app-nativescript/package-lock.json @@ -0,0 +1,14083 @@ +{ + "name": "app-nativescript", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app-nativescript", + "version": "1.0.0", + "dependencies": { + "@angular/animations": "~22.0.0", + "@angular/common": "~22.0.0", + "@angular/compiler": "~22.0.0", + "@angular/core": "~22.0.0", + "@angular/forms": "~22.0.0", + "@angular/platform-browser": "~22.0.0", + "@angular/platform-browser-dynamic": "~22.0.0", + "@angular/router": "~22.0.0", + "@nativescript/angular": "~22.0.0", + "@nativescript/core": "~9.1.0", + "@santoshyadavdev/ng-devtools": "file:../packages/ng-devtools", + "@valor/nativescript-websockets": "^2.0.3", + "rxjs": "~7.8.0", + "zone.js": "~0.16.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~22.0.0", + "@angular/compiler-cli": "~22.0.0", + "@nativescript/ios": "9.1.0", + "@nativescript/tailwind": "^2.1.0", + "@nativescript/types": "~9.0.0", + "@nativescript/webpack": "~5.0.25", + "@ngtools/webpack": "~22.0.0", + "tailwindcss": "~3.4.0", + "typescript": "~6.0.0" + } + }, + "../packages/ng-devtools": { + "name": "@santoshyadavdev/ng-devtools", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@valibot/to-json-schema": "^1.8.0", + "cac": "^7.0.0", + "devframe": "^1.0.0", + "valibot": "^1.5.0" + }, + "bin": { + "ng-devtools": "bin.mjs" + }, + "peerDependencies": { + "@devframes/agentic": "^1.0.0", + "@nativescript/core": ">=8.0.0" + }, + "peerDependenciesMeta": { + "@devframes/agentic": { + "optional": true + }, + "@nativescript/core": { + "optional": true + } + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", + "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2200.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2200.9.tgz", + "integrity": "sha512-kwiyEFfJsnJ4o7ondW8KswwJbp+qri5yWLS0wMMG+uBwOolZfrQReorqsQNCALhwmojhDNZc0wEWXEHEhKnotw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.0.9", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "22.0.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-22.0.9.tgz", + "integrity": "sha512-WwWi/lS3h3XYoUBuTrxhqRU5KItWFdEcXYcUfhGYBUTcLXh3LAMs4jh22W3ugFFT5EO02kmxk7ww5L/Si8g4uw==", + "deprecated": "Angular's Webpack support is deprecated. Use the esbuild and Vite-based \"@angular/build\" package instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2200.9", + "@angular-devkit/build-webpack": "0.2200.9", + "@angular-devkit/core": "22.0.9", + "@angular/build": "22.0.9", + "@babel/core": "7.29.7", + "@babel/generator": "7.29.7", + "@babel/helper-annotate-as-pure": "7.29.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.29.7", + "@babel/plugin-transform-async-to-generator": "7.29.7", + "@babel/plugin-transform-runtime": "7.29.7", + "@babel/preset-env": "7.29.7", + "@babel/runtime": "7.29.7", + "@discoveryjs/json-ext": "1.1.0", + "@ngtools/webpack": "22.0.9", + "ansi-colors": "4.1.3", + "autoprefixer": "10.5.0", + "babel-loader": "10.1.1", + "browserslist": "^4.26.0", + "copy-webpack-plugin": "14.0.0", + "css-loader": "7.1.4", + "esbuild-wasm": "0.28.1", + "http-proxy-middleware": "3.0.7", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.6.4", + "less-loader": "12.3.2", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.10.2", + "open": "11.0.0", + "ora": "9.4.0", + "picomatch": "4.0.4", + "piscina": "5.2.0", + "postcss": "8.5.13", + "postcss-loader": "8.2.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.2", + "sass": "1.99.0", + "sass-loader": "16.0.7", + "semver": "7.7.4", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.46.2", + "tinyglobby": "0.2.16", + "tslib": "2.8.1", + "webpack": "5.106.2", + "webpack-dev-middleware": "8.0.3", + "webpack-dev-server": "5.2.3", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.28.1" + }, + "peerDependencies": { + "@angular/compiler-cli": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/localize": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/service-worker": "^22.0.0", + "@angular/ssr": "^22.0.9", + "browser-sync": "^3.0.2", + "karma": "^6.3.0", + "ng-packagr": "^22.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=6.0 <6.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular/build": { + "version": "22.0.9", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-22.0.9.tgz", + "integrity": "sha512-j5eYaMTGFXdPVSX0xtWRRWHE2Ezz2CFiBPsAKrWHitvzccv95nURQYk5jbB+FHCYuN60zJNoTZMIlT7rXYAvag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2200.9", + "@babel/core": "7.29.7", + "@babel/helper-annotate-as-pure": "7.29.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "6.0.12", + "@vitejs/plugin-basic-ssl": "2.3.0", + "beasties": "0.4.2", + "browserslist": "^4.26.0", + "esbuild": "0.28.1", + "https-proxy-agent": "9.0.0", + "jsonc-parser": "3.3.1", + "listr2": "10.2.1", + "magic-string": "0.30.21", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.1", + "picomatch": "4.0.4", + "piscina": "5.2.0", + "rollup": "4.60.2", + "sass": "1.99.0", + "semver": "7.7.4", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.16", + "vite": "7.3.6", + "watchpack": "2.5.1" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.4" + }, + "peerDependencies": { + "@angular/compiler": "^22.0.0", + "@angular/compiler-cli": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/localize": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/service-worker": "^22.0.0", + "@angular/ssr": "^22.0.9", + "istanbul-lib-instrument": "^6.0.0", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^22.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=6.0 <6.1", + "vitest": "^4.0.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "istanbul-lib-instrument": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular/build/node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.3.0.tgz", + "integrity": "sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular/build/node_modules/vite": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "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 + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz", + "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack": { + "version": "5.106.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", + "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "loader-runner": "^4.3.1", + "mime-db": "^1.54.0", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.2200.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2200.9.tgz", + "integrity": "sha512-1/NV1agI7eAi+uKcYo0i2Y/BwIn5gO7XorAvE+TZx/ux0XAdcj+uxnpR2e5+blBwRLynn0DIe8SkA/W6V58Xhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2200.9", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.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" + } + }, + "node_modules/@angular-devkit/core": { + "version": "22.0.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.0.9.tgz", + "integrity": "sha512-u53kltrh1ZKHSqGfEDbPW2RzSC1WBPpan3LN61TuzjAkiHqqaQXrN6EmUvYkX3CIT5PKhO6RPRsptMH9y7hs0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.20.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.4", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/animations": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-22.0.8.tgz", + "integrity": "sha512-hdBlckl5mARzuc5gt2siydIAxeJbBiRneg8V0kazEDH6xNkNp/1siro68ZaHgTY5dCUEOec/eC4zbhB8AlSLhQ==", + "deprecated": "@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/core": "22.0.8" + } + }, + "node_modules/@angular/common": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.0.8.tgz", + "integrity": "sha512-FnwkXndUgAyWk1/p5flMfocIUtuuneJ01mxC1FxRc5/bdWTyNVeQDsM9Lw4PEAPc0AHu//EnblegRq8o6LGdUQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/core": "22.0.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.0.8.tgz", + "integrity": "sha512-ot7rvntfkZsPHmp8yl6PWUj/yG4e50X0+YeR7QYy/rEYKBiIg91w8GwjxSzaF4g5+bzJGDv7l/XnachKm0IySg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.0.8.tgz", + "integrity": "sha512-shBqaUxMtqriv4UG2MHmYT8GSvDizI40mUFkOfeQ1yRJ2C9dk0TnWKPwjSO7o6bs6UiU6V8Y3uSWdmfCGVVZAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.29.7", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.0.8", + "typescript": ">=6.0 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.0.8.tgz", + "integrity": "sha512-HagZZVzbtXd+ZhMb++k/HOtr/UTiBROHHH7xutgYgnSnPRXX0kCca5EQ02OZ/OCWfsMP5liSJDfwiePFULKA6Q==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.0.8", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@angular/forms": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.0.8.tgz", + "integrity": "sha512-KlLJE8rgziSBqCQy+cqCHPEQPGjJEY53i1vZbpnBoLXhnwswLJ3O0c76RHNpIrlrvr9v4p3b2/LxSE8wQmdStg==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0", + "zod": "^4.0.10" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.0.8", + "@angular/core": "22.0.8", + "@angular/platform-browser": "22.0.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.0.8.tgz", + "integrity": "sha512-FllGHCayu5Dv82HAA9ORL04Xf+In9JGMbQ1Vn4QnhrAVxBz182vm+ZwszLzRDSAwmfeIjZDeK49tKAcqHR9XNg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/animations": "22.0.8", + "@angular/common": "22.0.8", + "@angular/core": "22.0.8" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-22.0.8.tgz", + "integrity": "sha512-HQ5GeMoKqd2eMy9hHga1F0yumhrt4gVlhoP8YfmQnZWluVagdyinUpGdd3dNiuYjLcbHB+KXdW9c6LnqEmU+dg==", + "deprecated": "@angular/platform-browser-dynamic is deprecated. Use `@angular/platform-browser` instead.", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.0.8", + "@angular/compiler": "22.0.8", + "@angular/core": "22.0.8", + "@angular/platform-browser": "22.0.8" + } + }, + "node_modules/@angular/router": { + "version": "22.0.8", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.0.8.tgz", + "integrity": "sha512-9NO5K03QqfWMWWZ+Uu4WqBSLw/YAot918cBUFdgl6mTUOfoHi/xWO5pAt0SEpbXMHmWafJBdb99GRlAGybGSTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.0.8", + "@angular/core": "22.0.8", + "@angular/platform-browser": "22.0.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.7.tgz", + "integrity": "sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.4.tgz", + "integrity": "sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^3.0.1", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.1.0.tgz", + "integrity": "sha512-Xc3VhU02wqZ1HvHRJUwL09HkZSTvidqY5Ya0NXBSYOxAp+Ln9dcJr9fySI+CkONzP3PekQo9WdzCv0PGER/mOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hookun/parse-animation-shorthand": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@hookun/parse-animation-shorthand/-/parse-animation-shorthand-0.1.5.tgz", + "integrity": "sha512-/fnwYK9Tgllhtv2EpwZZVbwhCokAoGtfEz23mZtjHMHvih4YeiAeUuVpyjGrTGf6j6ymgrCxGwUiAkAfDsmUjw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.8.tgz", + "integrity": "sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.12.tgz", + "integrity": "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.9.tgz", + "integrity": "sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/type": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.1.1.tgz", + "integrity": "sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.79.0.tgz", + "integrity": "sha512-bxSwMrDY71OjEdj2mAYBxSe4BnHtAOjOxqUoFJc0WsllcGgA8iYl6wRF+4aVdFUjjEyHfBwxVv0QqW4AweIUZw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.79.0.tgz", + "integrity": "sha512-EdadmStAvZw4jYg4iW3mDxBmzMFSI8jcHQkSl+rIQIO7dWbPdXaB83PBQhNCCtMBeX7zwcOFjpp0ecXqbYbjUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.79.0.tgz", + "integrity": "sha512-/k18aT1X+A2yLdlTe3WKpL5y2qrvbcUY1BXA4A+s8fBfTeXfi+xdvEB85JVXVf2i9kzASQZFx8dHw9OchgMUhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "@jsonjoy.com/fs-print": "4.79.0", + "@jsonjoy.com/fs-snapshot": "4.79.0", + "glob-to-regex.js": "^1.3.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.79.0.tgz", + "integrity": "sha512-LoBHewVHp/bZQ8Om1Iivl6NEHg7Mmby9kXJZysfnHYW4256rzXFSEcEpto1qgSAka+sq2v4N/Cnl562Z15MByA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.79.0.tgz", + "integrity": "sha512-xFza/t81sVL4rik7h3SlcymC6X7pvNllI88LW1GESEANDXinf5lZoqju59i3AsGLyy4i0eBQvPiizWSMwCunQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.79.0.tgz", + "integrity": "sha512-Rj/WevHB8DV8VyEvFGSvDD3m3JHOVk3fO1biH26iworL9/rqdUMKQQeyiKTLbdf3Z9s9vVZnn8ZC0FWZgtO2mg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "glob-to-regex.js": "^1.3.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.79.0.tgz", + "integrity": "sha512-Bp5Q+OV1Dnl8oKf8hVhmboeI+NWbWRk1GxtJzuRvopDeNBDBh0RLevEsfnOVtwBwgRZaptSXn3e/mm3kbOzfDw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.79.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.79.0.tgz", + "integrity": "sha512-/GY+eMvOl4ZQHUnrKYjC/t3N0BImBg7zv/cAGm3kiwUfqSQuo87jtbjmD3mzgQMv16K8zttkHE2wT9GaVsehvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.4.tgz", + "integrity": "sha512-Kk4Kz3iyu1QiLsLZBS9Af1eSKUC8VR2T+/jyE2iAyuGw2VwK08pp5iTbZnXn6sWu0LogO/RFktMxOjiDA2sS3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.4.tgz", + "integrity": "sha512-BEe5Rp3trn26oxoXOVL5HVDoiYmjUDwr8NRPkBOdUdCSBEorKI+7JrZLRKAdxO+G6cGQLgseXk0gR7qIQa7aGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.4.tgz", + "integrity": "sha512-SGbFR7816uBcTHc2ZY4S6WyOkl9bICnzqTQd2Mv4V/j24cfds88xx2nC6cm/y8zGQL7Ds31YF/5NGxjgcdM5Hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.4.tgz", + "integrity": "sha512-cUXEengO8o60v1SWerJTH4/RH4U3+9jC0/4njp2Z9NdmvaGzhKsbRM2wpXuRYrN8tytsoJCg0SvWEWwHAwLbCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.4.tgz", + "integrity": "sha512-Gxq8jpgOWXwd0PUR+c9R2Ik1/uBnGd5GMIIzRRDqABCkvmjtC3KWcyhesV9jSPCz759isl0NlbsstZ2oyvk8lA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.4.tgz", + "integrity": "sha512-pKv1DJ1bPZAaHkdFsSz5IDfUG8x9vntgquXF9/Dm2xuupcIe/EkLzylpoBxppFVK5vzbV561Dq26jNY2fIMA7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.4.tgz", + "integrity": "sha512-JF1BmLCm9kGEVZgYmJq43zeQVdHVgAJnTi/NURWEsy6L1ZrrlSmdltS+D17QN4LODwf+1LMXAA9auIZVXtWwzw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", + "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", + "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", + "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", + "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", + "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", + "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nativescript/angular": { + "version": "22.0.1", + "resolved": "https://registry.npmjs.org/@nativescript/angular/-/angular-22.0.1.tgz", + "integrity": "sha512-ZrZnlWn8fEmY6L4GYerb7UiA+CKSFS9kuIeh948TLq+iuZvfxqThgCtoRSwkrzKAyPAU7oN0z/5YBle8tmTHfA==", + "license": "Apache-2.0", + "dependencies": { + "@nativescript/zone-js": "^4.0.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@nativescript/core": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-9.1.2.tgz", + "integrity": "sha512-zL/dgfuLmcVu9nR47UEFOaPHXoaRKuWMBnDwiaMAwXmf4WKd6yr1gIXcNHheKgBNGrls06LgbBpkB841fI+HcA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/NativeScript" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NativeScript" + } + ], + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@csstools/css-calc": "~2.1.4", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@nativescript/hook": "~3.0.4", + "acorn": "^8.15.0", + "css-tree": "^3.1.0", + "css-what": "^7.0.0", + "emoji-regex": "^10.2.1", + "semver": "^7.0.0", + "source-map": "0.7.6", + "source-map-js": "^1.2.1", + "tslib": "^2.0.0" + } + }, + "node_modules/@nativescript/hook": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nativescript/hook/-/hook-3.0.5.tgz", + "integrity": "sha512-MzL7R/nPZU2qnvDWWuJ8RB7H3luEwANgFX/d/ILdg7bSYxl6uANCfzlueHnWgrQmBxu6dTkvPsFW2WNVUxlhUg==", + "license": "Apache-2.0" + }, + "node_modules/@nativescript/ios": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@nativescript/ios/-/ios-9.1.0.tgz", + "integrity": "sha512-rdSmL+oOL+iyLYoSBM/cS0bOMAKzzOax6SpR4WmIHpmpa7TrFrrmzekuPSkwTZGeA7NTXnXD6K45rFvCHm6kOA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@nativescript/tailwind": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nativescript/tailwind/-/tailwind-2.1.1.tgz", + "integrity": "sha512-Fo+E8JG0MbZLRLcvIWPiI2P4SqJ/S6u4uzceIun5wfmm3LG4gErF4ivvHuJu/IdwDKCGw5FNLO21e+M0O/P5/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/postcss-is-pseudo-class": "4.0.4", + "@hookun/parse-animation-shorthand": "^0.1.4" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/@nativescript/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/types/-/types-9.0.0.tgz", + "integrity": "sha512-fR9ot7Si9L0StcsOZpAEThggeQb8cQxCL0BwRKuWHbm+SdlinuOWSl6lS3bKuIIcCzJem2cWP3UrzgweRnOe/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@nativescript/types-android": "9.0.0", + "@nativescript/types-ios": "9.0.0" + } + }, + "node_modules/@nativescript/types-android": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/types-android/-/types-android-9.0.0.tgz", + "integrity": "sha512-Az64E1m6jd7CKX/QKOZi3uSxQEXZbPW5NlmMNP9VGCP9UobHLd5GgqpEIyeBB4Jep4rckA2Z4LEEpjbu/my63Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@nativescript/types-ios": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/types-ios/-/types-ios-9.0.0.tgz", + "integrity": "sha512-A13VLFFKNrkYqS7JU0V+R4wxKIE66VvYiHK1+vrVXqiK6l+95BxgEgRPD8FlXN7W2iXXqYLapo8nVMtWArpscg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@nativescript/webpack": { + "version": "5.0.38", + "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.38.tgz", + "integrity": "sha512-lcOfqIgRe53LHi/DoSMe67N3wBon+Fg/820wrew83DH/OyWKxy1ian5BZONU0Bn9syTjpKa212cuz5WCXF4PHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/core": "^7.0.0", + "@pmmmwh/react-refresh-webpack-plugin": "~0.6.1", + "@vue/compiler-sfc": "^3.5.17", + "acorn": "^8.0.0", + "acorn-stage3": "^4.0.0", + "ansi-colors": "^4.1.3", + "babel-loader": "^10.0.0", + "cli-highlight": "^2.0.0", + "commander": "^14.0.0", + "copy-webpack-plugin": "^13.0.0", + "css": "^3.0.0", + "css-loader": "^7.0.0", + "dotenv-webpack": "^8.0.0", + "fork-ts-checker-webpack-plugin": "^9.0.0", + "loader-utils": "^2.0.0 || ^3.0.0", + "postcss": "^8.0.0", + "postcss-import": "^16.0.0", + "postcss-loader": "^8.0.0", + "raw-loader": "^4.0.0", + "react-refresh": "~0.18.0", + "sass": "^1.0.0", + "sass-loader": "^16.0.0", + "sax": "^1.0.0", + "semver": "^7.0.0 || ^6.0.0", + "source-map": "^0.7.0", + "terser-webpack-plugin": "^5.0.0", + "ts-dedent": "^2.0.0", + "ts-loader": "^9.0.0", + "vue-loader": "^17.4.2", + "webpack": "^5.30.0 <= 5.50.0 || ^5.51.2", + "webpack-bundle-analyzer": "^4.0.0", + "webpack-chain": "^6.0.0", + "webpack-cli": "^6.0.0", + "webpack-merge": "^6.0.0", + "webpack-virtual-modules": "^0.4.0" + }, + "bin": { + "nativescript-webpack": "dist/bin/index.js" + }, + "peerDependencies": { + "nativescript-vue-template-compiler": "^2.8.1" + }, + "peerDependenciesMeta": { + "nativescript-vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@nativescript/webpack/node_modules/copy-webpack-plugin": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/@nativescript/webpack/node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@nativescript/zone-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/zone-js/-/zone-js-4.0.0.tgz", + "integrity": "sha512-CpCMfQ8lPOmW0RKPhE0XByt78zmN12zKdaJTv6dlqHOjvfDqnpXwtlQVONkaDgxtowuTRJaQqWZsc2Wsyec/LA==" + }, + "node_modules/@ngtools/webpack": { + "version": "22.0.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-22.0.9.tgz", + "integrity": "sha512-FCzOHY9Pwk23ET1vFziYduR+/9siNw1iNX9K1oxSQPM94DSwsoCpmbCsC/HCw6KXBNjfxU3LRhIawwVIcj2oOQ==", + "deprecated": "Angular's Webpack support is deprecated. Use the esbuild and Vite-based \"@angular/build\" package instead.", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^22.0.0", + "typescript": ">=6.0 <6.1", + "webpack": "^5.54.0" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.9.5.tgz", + "integrity": "sha512-4Ivz0fsyFofe0bslNsYcGN9+iETdHX4v+BFwIPr+K/BAt61sHXECP63ff9FntU9zcfVQELJFdUG9so44OjUlBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "@peculiar/asn1-x509-attr": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.9.5.tgz", + "integrity": "sha512-9dO6PcoJeI+1xJ4rG7eINMa6f9Ix/QdRs5UGZ0D7v/R3TzmsbVr5cqAgfYw4xgS9U54ouHYqEz0bIZBbM/UY1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.9.5.tgz", + "integrity": "sha512-OD+HLlcV7wCL64w0rheX/C0J31DbJce0nf8ulv3UNftQ617JEZE3sQ4cMN6PotXWlJ1M5GQx90G3bywtdKOstw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.9.5.tgz", + "integrity": "sha512-btcH7lbcD4410qnjHvv7F0kEuMNKbX8CFAZSs9CDPWHKzT1byLPHYeR40AnUw9z4CzsijMY0daBFYUvVx75sdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.9.5", + "@peculiar/asn1-pkcs8": "^2.9.5", + "@peculiar/asn1-rsa": "^2.9.5", + "@peculiar/asn1-schema": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.9.5.tgz", + "integrity": "sha512-c7UghAGQdBfAHL9JdwcJkAc/lDJKNXfCdYXPXlf8BZdD/fVJjJnXKHxX4gyLhkFTvnGhME7caieSgc2ROtqYTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.9.5.tgz", + "integrity": "sha512-4R/zMgLSHbQIZRBwP1KzX6iuNHmW3xFWwu9TS9A00N60fmQqp9DkkqnQFyd0mAYMQTrQefuzQ/yP4U8sOLGUgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.9.5", + "@peculiar/asn1-pfx": "^2.9.5", + "@peculiar/asn1-pkcs8": "^2.9.5", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "@peculiar/asn1-x509-attr": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.9.5.tgz", + "integrity": "sha512-kHwBLVMkm9ljlM521ovS7y4z4mr8xuHTdNyyoPlDvckBwFKSgs9HqKBryLBeqHqL2YpIgl+Vspl7kzNGG2phzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.5.tgz", + "integrity": "sha512-Ez3wLKVjaxdsLcgeWN4OE31QkM7oBOgKuuBJxldRYAkfYw2C+8zJPcSd/SThnbhszsEOlAmoaS5kIIkN29fGKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.9.5.tgz", + "integrity": "sha512-NP3ecvN6zTDlwCvogIWL7MJN9AZNuskkIbnlhrlkB97Mn2EqirBUQ8GKzsOmdAL3pRvjGu1Uk/a4DNfiZrWxhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.9.5.tgz", + "integrity": "sha512-PlbL1a74RZiry7puPCZ5hdk/puvivxYJPbjadr2i7DBjHCJFEKCfTRPKL3DILeZFtzJjn95J5EBtSc4/TB9/6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.6.3.tgz", + "integrity": "sha512-k1EEmFS9K7685tqJM55DCA3sYlTNZb7aFj1M3HNFwMqH+fGgMEvemIQ5kurIzKc9wYRSmfKpSZN3WUyY/GHlvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "anser": "^2.1.1", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "@types/webpack": "5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <6.0.0", + "webpack": "^5.0.0", + "webpack-dev-server": "^4.8.0 || 5.x || 6.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@santoshyadavdev/ng-devtools": { + "resolved": "../packages/ng-devtools", + "link": true + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.9", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", + "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.2.tgz", + "integrity": "sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@valor/nativescript-websockets": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@valor/nativescript-websockets/-/nativescript-websockets-2.0.3.tgz", + "integrity": "sha512-gNmdgvRttQjOxnIMqdu4xmAU19IQkqMYbYUX/OGlicGkF67Yej4ShvRFPgVCzDa2zXCctlJVVqkgsj9ZHLl+zg==", + "license": "MIT" + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz", + "integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.43", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz", + "integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz", + "integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.43", + "@vue/compiler-dom": "3.5.43", + "@vue/compiler-ssr": "3.5.43", + "@vue/shared": "3.5.43", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.28", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz", + "integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz", + "integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-class-fields": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz", + "integrity": "sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-private-class-elements": "^0.2.7" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6 || ^7 || ^8" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-private-class-elements": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz", + "integrity": "sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6.1.0 || ^7 || ^8" + } + }, + "node_modules/acorn-private-methods": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/acorn-private-methods/-/acorn-private-methods-0.3.3.tgz", + "integrity": "sha512-46oeEol3YFvLSah5m9hGMlNpxDBCEkdceJgf01AjqKYTK9r6HexKs2rgSbLK81pYjZZMonhftuUReGMlbbv05w==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-private-class-elements": "^0.2.7" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6 || ^7 || ^8" + } + }, + "node_modules/acorn-stage3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-stage3/-/acorn-stage3-4.0.0.tgz", + "integrity": "sha512-BR+LaADtA6GTB5prkNqWmlmCLYmkyW0whvSxdHhbupTaro2qBJ95fJDEiRLPUmiACGHPaYyeH9xmNJWdGfXRQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-class-fields": "^0.3.7", + "acorn-private-methods": "^0.3.3", + "acorn-static-class-features": "^0.2.4" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^7.4 || ^8" + } + }, + "node_modules/acorn-static-class-features": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz", + "integrity": "sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-private-class-elements": "^0.2.7" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6.1.0 || ^7 || ^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/anser": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.5.tgz", + "integrity": "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.1.1.tgz", + "integrity": "sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0 || ^8.0.0-beta.1", + "@rspack/core": "^1.0.0 || ^2.0.0-0", + "webpack": ">=5.61.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.26", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.26.tgz", + "integrity": "sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/beasties": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.2.tgz", + "integrity": "sha512-NvcGjG/7AVUAfRbvrJmHunDQS9uHnE6Q/7AkaPr8oKE8HjOlpjRG5075z/th2Tmlezk3VlaaS8+X9I1RwHJMQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.8", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.8.tgz", + "integrity": "sha512-JNcyFQ64OiijEkPzUBTCe+hyPXUD/3LEldGQ6iF5LR1w00mx9o7xtDWHXBY2iItjdCFGoilOLNQbH943ut7pHA==", + "dev": true, + "license": "MIT", + "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.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.16.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.4.tgz", + "integrity": "sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.1.tgz", + "integrity": "sha512-AUdjuRyCNGUYtqpqfTmWyM4fXay8yIQhmLnvYe/THMGfT9B/34X7xQd3ifKxwyNPPpowVBjLb+64BN9Rn1mizw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.25", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.438", + "node-releases": "^2.0.57", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001812", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001812.tgz", + "integrity": "sha512-qN+QNNBr93TCmFrmte0bBCjSDMuRvt78VlHT99qIGPszm4QsqCX8lnyWUFkHi8B7ZBAPq8SH+UqyXNy/odMdng==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-highlight/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.2.tgz", + "integrity": "sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", + "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "destroy": "1.2.0", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz", + "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^7.0.3", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 20.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", + "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.7" + }, + "engines": { + "node": ">=6.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.50.0.tgz", + "integrity": "sha512-6GP3Pxz4IKyWjAfa747vIu/jilB5z29JWROLqH/b+pXVcpgh6tM06ZIBwSuglgVqzDYURhOK6oEzTrG0bCHitA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/css-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.4.tgz", + "integrity": "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-defaults": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv": "^8.2.0" + } + }, + "node_modules/dotenv-webpack": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.1.tgz", + "integrity": "sha512-+TY/AJ2k9bU2EML3mxgLmaAvEcqs1Wbv6deCIUSI3eW3Xeo8LBQumYib6puyaSwbjC9JCzg/y5Pwjd/lePX04w==", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv-defaults": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "^4 || ^5" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.439", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.439.tgz", + "integrity": "sha512-qu6QIPXhsb+CRcAiTMNjR4A1y/7tCYKkKjr5CZXRVih6qkDf79peZ2BpEU3qoDBNCRrcy3Mra3X9nG5oruuA7Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.28.1.tgz", + "integrity": "sha512-p/GD4E8oYRjg3kjdKrnMb0s4PzXgJF42e0MF4H0+ACyK/kIlFRp3e0fzOleIG+wBBm6MM3XQrbpe7soEA+vJIA==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.3.tgz", + "integrity": "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "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.13", + "proxy-addr": "~2.0.7", + "qs": "~6.16.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" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "license": "MIT", + "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.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^4.0.1", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.3.1.tgz", + "integrity": "sha512-zhWhMRsgnOym+1txhUmYJGD6eUsbUdrZv55gCYKuJX8t2p3+M8My23PD09bEIsreGUs5pnSa/idmcfp2/IlqGg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.7.tgz", + "integrity": "sha512-iwbQltVlx8bCrqePUM8C+hllHvdawVhQJaLrj1X7qllkvFQdXFsr16pW/mo9+JDVjN+QO2XUx9jd8SmoFkE5qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.18.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.0.0.tgz", + "integrity": "sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz", + "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", + "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.1.0.tgz", + "integrity": "sha512-bUi/yjmtKYcRVUtWRGr0UA6xEFh2I6zWUwMrUXB3s7bmYCaZ8a+0ZsTRkrawh/mzlSD1Y0Ph8bp/U+TvBpWDNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.4" + } + }, + "node_modules/less": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/less/-/less-4.6.4.tgz", + "integrity": "sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^3.0.5", + "parse-node-version": "^1.0.1" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.2.tgz", + "integrity": "sha512-uLV5c702ff2jBvO7qewpkLRzkh/I9QW07ur2NKkv8TVTrtX2lrKjEbEU/LLXAn7cgpCIBbkfyUm4qYXCQs5/+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", + "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.2.tgz", + "integrity": "sha512-6OLRNZqRntVGBm26ghZ5eZhCuWWyOkRCSn8XsOIuq5stpCE/tjLbdozd93naILZig0lmD8ANfRwnhn0DLeXGlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.4.tgz", + "integrity": "sha512-9FKQA6G1MMtqNxfxvSBNXD/axeG2QRjYbNh0/ykRL5xYcRbCm2vXq7B9bhc7nSuKdHzr8/BHIwfPuYYH1UsXXw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "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" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.4", + "@lmdb/lmdb-darwin-x64": "3.5.4", + "@lmdb/lmdb-linux-arm": "3.5.4", + "@lmdb/lmdb-linux-arm64": "3.5.4", + "@lmdb/lmdb-linux-x64": "3.5.4", + "@lmdb/lmdb-win32-arm64": "3.5.4", + "@lmdb/lmdb-win32-x64": "3.5.4" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/loader-runner": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz", + "integrity": "sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimizer-webpack-plugin": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.12.0.tgz", + "integrity": "sha512-PCN1x1OzFeFB2GlP91s46q7Gz8Jf16Z7M45bzpoqrYZlh12QeY6tYVM5h299wbwy1DxnQ69VFmmh8Hb2Ff8mbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.3", + "terser": "^5.51.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@napi-rs/image": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "imagemin": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "sharp": { + "optional": true + }, + "svgo": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/minimizer-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimizer-webpack-plugin/node_modules/terser": { + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.1.tgz", + "integrity": "sha512-4EUH9tQHnMmEgzW/MdAP0KIfa1T9AF+htl0ffe2n5vb2EKn9y2co8ccpgWko6S52Jy1PQZKwRnx5/KkYjtd9MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz", + "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", + "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/ora": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.0.tgz", + "integrity": "sha512-84cglkRILFxdtA8hAvLNdMrtBpPNBTrQ9/ulg0FA7xLMnD6mifv+enAIeRmvtv+WgdCE+LPGOfQmtJRrVaIVhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.2", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.2.tgz", + "integrity": "sha512-BY+qgDArmYpvvmij141xbkB4Cw8RFLBQM5Zj4MODFb1SyXBRE/xO4Xj/QWbR7aUEBxbkjuNdsFVCL2TmbYrlNg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.1.tgz", + "integrity": "sha512-NaRku2aMpUN1Sh1Gyk1KWUh2A7EJx2c6qYzvwsPtqhoHoaURshdrceYK3LunVCm3WHhm6FS7Vcczbvdh3/UIVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/piscina": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.2.0.tgz", + "integrity": "sha512-DszUCKeVN/5G5QKo6jAVHL8fmKnkJvQ0ACiVgY7YGCq3TUB2oznAOayvZPIAdEThvhczkXR+qm3IHsNXpFCYfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkijs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.1.tgz", + "integrity": "sha512-Oo/NZcSWccq8KyoG7gLE9fnltgHns+pNCjCAp/WmjsUySi+sX7y4z4Xqu4fVb42CDHzRPl33fjzT15V1wvcyhA==", + "dev": true, + "license": "BSD-3-Clause", + "workspaces": [ + "website" + ], + "dependencies": { + "@noble/hashes": "1.8.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.2.0.tgz", + "integrity": "sha512-0mQUGlSp87Zl70K58RNwQAN1WS9plFE6KWGui9nyK6ninduMyjW/Khaoy/BpBoFTBh7ndAvAKrSKVbwy6vd/BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.1.tgz", + "integrity": "sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^2.5.1", + "semver": "^7.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz", + "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz", + "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-safe-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz", + "integrity": "sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", + "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/qs": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/raw-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/raw-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/raw-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz", + "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.3.tgz", + "integrity": "sha512-ycwFAS14Jw4mppvmK4GR/J6u3WpWpjkEApehuHtLc/8VpPNpDMbQ4WjqwplXifGeyKOzHSFLmSPqzksDQE2Sfg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", + "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "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 + } + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/schema-utils": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.5.0.tgz", + "integrity": "sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.15", + "ajv": "^8.20.0", + "ajv-formats": "^3.0.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.2.tgz", + "integrity": "sha512-GL2BWwVa6JydKO6l/ljVgjAZF4QJ3S7dWDWi53s5GZT8PJzD2fNxi67HANQGKAqPrwEpL5ba7gUBGi0Ls/sEoQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tailwindcss/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tailwindcss/node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz", + "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thingies": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", + "integrity": "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/ts-dedent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.3.0.tgz", + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ts-loader": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.6.2.tgz", + "integrity": "sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "picomatch": "^4.0.0", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "loader-utils": "*", + "typescript": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "loader-utils": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/webpack": { + "version": "5.111.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.111.1.tgz", + "integrity": "sha512-cNypaz0RP+S4cvQVi1M/3bRUkvNP0xZpL0TjFx+c6jg64VbxD+2weWDgY9UnjRI6dhZgtaj8DU76GGFcJ79xPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.25.0", + "es-module-lexer": "^2.1.0", + "events": "^3.2.0", + "graceful-fs": "^4.2.11", + "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.7.0", + "schema-utils": "^4.5.0", + "tapable": "^2.3.0", + "watchpack": "^2.5.2", + "webpack-sources": "^3.5.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-chain/node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.82.0" + }, + "peerDependenciesMeta": { + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-8.0.3.tgz", + "integrity": "sha512-zWrde9VZDiRaFuWsjHO40wm9LxxtXEk8DdzFXdU7eU5ZpiANnZZDBbZgN3guxbEoKqUHd9YupBmynyioz42nkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "memfs": "^4.56.10", + "mime-types": "^3.0.2", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.3.3" + }, + "engines": { + "node": ">= 20.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.101.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.79.0.tgz", + "integrity": "sha512-vDFqA9WSa//xa3XIKwMmVqxgWWft4PMKW0k69gBM2rYOzZ3VqL9BrK3Kyl45jSxS7qImDgwejZzEb/xDWhP37g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-fsa": "4.79.0", + "@jsonjoy.com/fs-node": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-to-fsa": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "@jsonjoy.com/fs-print": "4.79.0", + "@jsonjoy.com/fs-snapshot": "4.79.0", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.3.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", + "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz", + "integrity": "sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/memfs": { + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.79.0.tgz", + "integrity": "sha512-vDFqA9WSa//xa3XIKwMmVqxgWWft4PMKW0k69gBM2rYOzZ3VqL9BrK3Kyl45jSxS7qImDgwejZzEb/xDWhP37g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-fsa": "4.79.0", + "@jsonjoy.com/fs-node": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-to-fsa": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "@jsonjoy.com/fs-print": "4.79.0", + "@jsonjoy.com/fs-snapshot": "4.79.0", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.3.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.6.tgz", + "integrity": "sha512-yBWCMvIfUmuhAE8vdqUKzH0vg9kuWN0KeG4vBnqRplUFHRU7lMQjkiJWxVQzvo2BTewqhPhDlMB41rAt2jVA9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "dev": true, + "license": "MIT", + "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 + } + } + }, + "node_modules/webpack-dev-server/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.3.tgz", + "integrity": "sha512-F/zS5rEcCKxS6hrhxkLjOzblTsuv89rkuDyP+vToquds6KfPJ3fDqg9UNzbtJcA2AgXZOLMYLQqZpuyE5zDfxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true, + "license": "MIT" + }, + "node_modules/websocket-driver": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ws": { + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", + "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz", + "integrity": "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zone.js": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.16.3.tgz", + "integrity": "sha512-ihXL9+vhYyEhXz4TDNpHeAOZN9FVrbog0Il64OIEI28UP/n5AaI6gsccRuOHBfx+206agzyoK527bYIO0Foy6A==", + "license": "MIT" + } + } +} diff --git a/app-nativescript/package.json b/app-nativescript/package.json new file mode 100644 index 0000000..5e53209 --- /dev/null +++ b/app-nativescript/package.json @@ -0,0 +1,33 @@ +{ + "name": "app-nativescript", + "main": "./src/main.ts", + "version": "1.0.0", + "private": true, + "dependencies": { + "@angular/animations": "~22.0.0", + "@angular/common": "~22.0.0", + "@angular/compiler": "~22.0.0", + "@angular/core": "~22.0.0", + "@angular/forms": "~22.0.0", + "@angular/platform-browser": "~22.0.0", + "@angular/platform-browser-dynamic": "~22.0.0", + "@angular/router": "~22.0.0", + "@nativescript/angular": "~22.0.0", + "@nativescript/core": "~9.1.0", + "@santoshyadavdev/ng-devtools": "file:../packages/ng-devtools", + "@valor/nativescript-websockets": "^2.0.3", + "rxjs": "~7.8.0", + "zone.js": "~0.16.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~22.0.0", + "@angular/compiler-cli": "~22.0.0", + "@nativescript/ios": "9.1.0", + "@nativescript/tailwind": "^2.1.0", + "@nativescript/types": "~9.0.0", + "@nativescript/webpack": "~5.0.25", + "@ngtools/webpack": "~22.0.0", + "tailwindcss": "~3.4.0", + "typescript": "~6.0.0" + } +} diff --git a/app-nativescript/references.d.ts b/app-nativescript/references.d.ts new file mode 100644 index 0000000..d743326 --- /dev/null +++ b/app-nativescript/references.d.ts @@ -0,0 +1 @@ +/// diff --git a/app-nativescript/src/app.css b/app-nativescript/src/app.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/app-nativescript/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/app-nativescript/src/app/app.component.html b/app-nativescript/src/app/app.component.html new file mode 100644 index 0000000..be22686 --- /dev/null +++ b/app-nativescript/src/app/app.component.html @@ -0,0 +1,3 @@ + + + diff --git a/app-nativescript/src/app/app.component.ts b/app-nativescript/src/app/app.component.ts new file mode 100644 index 0000000..b391b90 --- /dev/null +++ b/app-nativescript/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; +import { PageRouterOutlet } from '@nativescript/angular'; + +@Component({ + selector: 'ns-app', + templateUrl: './app.component.html', + imports: [PageRouterOutlet], + schemas: [NO_ERRORS_SCHEMA], +}) +export class AppComponent {} diff --git a/app-nativescript/src/app/app.routes.ts b/app-nativescript/src/app/app.routes.ts new file mode 100644 index 0000000..5b7c357 --- /dev/null +++ b/app-nativescript/src/app/app.routes.ts @@ -0,0 +1,9 @@ +import { Routes } from '@angular/router'; +import { PersonComponent } from './people/person.component'; +import { PersonDetailComponent } from './people/person-detail.component'; + +export const routes: Routes = [ + { path: '', redirectTo: '/items', pathMatch: 'full' }, + { path: 'items', component: PersonComponent }, + { path: 'item/:id', component: PersonDetailComponent }, +]; diff --git a/app-nativescript/src/app/devtools-showcase.component.ts b/app-nativescript/src/app/devtools-showcase.component.ts new file mode 100644 index 0000000..a09a585 --- /dev/null +++ b/app-nativescript/src/app/devtools-showcase.component.ts @@ -0,0 +1,43 @@ +import { + Component, + Injectable, + NO_ERRORS_SCHEMA, + computed, + effect, + inject, + input, + signal, +} from '@angular/core'; + +/** Provided by the showcase component, so it shows up on an element injector. */ +@Injectable() +export class TapCounter { + readonly taps = signal(0); +} + +@Component({ + selector: 'ns-devtools-showcase', + template: ` + + + + + + `, + providers: [TapCounter], + schemas: [NO_ERRORS_SCHEMA], +}) +export class DevtoolsShowcaseComponent { + readonly title = input('DevTools showcase'); + readonly counter = inject(TapCounter); + readonly doubled = computed(() => this.counter.taps() * 2); + readonly summary = computed(() => `${this.counter.taps()} taps, doubled ${this.doubled()}`); + + constructor() { + effect(() => console.log(`[showcase] taps=${this.counter.taps()}`)); + } + + tap() { + this.counter.taps.update((n) => n + 1); + } +} diff --git a/app-nativescript/src/app/people/person-detail.component.html b/app-nativescript/src/app/people/person-detail.component.html new file mode 100644 index 0000000..44f157d --- /dev/null +++ b/app-nativescript/src/app/people/person-detail.component.html @@ -0,0 +1,39 @@ + + @if (isAndroid) { + + + + + } + + + + + + + + + + + + + + + + + + diff --git a/app-nativescript/src/app/people/person-detail.component.ts b/app-nativescript/src/app/people/person-detail.component.ts new file mode 100644 index 0000000..321ea61 --- /dev/null +++ b/app-nativescript/src/app/people/person-detail.component.ts @@ -0,0 +1,44 @@ +import { + ChangeDetectionStrategy, + Component, + NO_ERRORS_SCHEMA, + OnInit, + inject, + signal, +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { NativeScriptCommonModule, RouterExtensions } from '@nativescript/angular'; +import { Person } from './person'; +import { PersonService } from './person.service'; + +@Component({ + selector: 'ns-person-detail', + templateUrl: './person-detail.component.html', + imports: [NativeScriptCommonModule], + schemas: [NO_ERRORS_SCHEMA], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PersonDetailComponent implements OnInit { + personService = inject(PersonService); + routerExtensions = inject(RouterExtensions); + route = inject(ActivatedRoute); + person = signal(null); + isAndroid = __ANDROID__; + + ngOnInit(): void { + const id = +this.route.snapshot.params.id; + this.person.set(this.personService.getPerson(id)); + + // log the person to the console + console.log(this.person()); + } + + goBack() { + this.routerExtensions.back(); + } + + formatAchievements(achievements: string[] | undefined | null): string { + if (!achievements || !Array.isArray(achievements)) return ''; + return achievements.map((a, index) => index + 1 + '. ' + a.trim()).join('\n'); + } +} diff --git a/app-nativescript/src/app/people/person.component.html b/app-nativescript/src/app/people/person.component.html new file mode 100644 index 0000000..a6c8f31 --- /dev/null +++ b/app-nativescript/src/app/people/person.component.html @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app-nativescript/src/app/people/person.component.ts b/app-nativescript/src/app/people/person.component.ts new file mode 100644 index 0000000..92b0bf3 --- /dev/null +++ b/app-nativescript/src/app/people/person.component.ts @@ -0,0 +1,15 @@ +import { ChangeDetectionStrategy, Component, NO_ERRORS_SCHEMA, inject } from '@angular/core'; +import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular'; +import { PersonService } from './person.service'; +import { DevtoolsShowcaseComponent } from '../devtools-showcase.component'; + +@Component({ + selector: 'ns-person', + templateUrl: './person.component.html', + imports: [NativeScriptCommonModule, NativeScriptRouterModule, DevtoolsShowcaseComponent], + schemas: [NO_ERRORS_SCHEMA], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PersonComponent { + personService = inject(PersonService); +} diff --git a/app-nativescript/src/app/people/person.service.ts b/app-nativescript/src/app/people/person.service.ts new file mode 100644 index 0000000..e56e44f --- /dev/null +++ b/app-nativescript/src/app/people/person.service.ts @@ -0,0 +1,119 @@ +import { Injectable, signal } from '@angular/core'; +import { Person } from './person'; + +@Injectable({ providedIn: 'root' }) +export class PersonService { + items = signal([ + { + id: 1, + name: 'Alan Turing', + nationality: 'British', + notableAchievements: ['WW2 code breaking', 'Father of theoretical computer science and AI'], + }, + { + id: 2, + name: 'Grace Hopper', + nationality: 'American', + notableAchievements: [ + 'COBOL development', + 'Navy commander', + 'Implementation of computer systems and components testing', + ], + }, + { + id: 3, + name: 'Donal Knuth', + nationality: 'American', + notableAchievements: [ + 'Author of The Art of Computer Programming', + 'Created TeX typesetting system', + ], + }, + { + id: 4, + name: 'Ada Lovelace', + nationality: 'British', + notableAchievements: ['First computer programmer', 'Worked on Analytical Engine'], + }, + { + id: 5, + name: 'John von Neumann', + nationality: 'Hungarian/American', + notableAchievements: ['Von Neumann architecture', 'Game theory', 'Contributed to EDVAC'], + }, + { + id: 6, + name: 'Tim Berners-Lee', + nationality: 'British', + notableAchievements: ['Inventor of the World Wide Web'], + }, + { + id: 7, + name: 'Edsger Dijkstra', + nationality: 'Dutch', + notableAchievements: ['Shortest path algorithm', 'Structured programming advocate'], + }, + { + id: 8, + name: 'Linus Torvalds', + nationality: 'Finnish-American', + notableAchievements: ['Creator of Linux kernel', 'Creator of Git'], + }, + { + id: 9, + name: 'John McCarthy', + nationality: 'American', + notableAchievements: [ + 'Coined term "Artificial Intelligence"', + 'Created LISP programming language', + ], + }, + { + id: 10, + name: 'Dennis Ritchie', + nationality: 'American', + notableAchievements: ['Creator of C programming language', 'Co-creator of Unix'], + }, + { + id: 11, + name: 'Bjarne Stroustrup', + nationality: 'Danish', + notableAchievements: ['Creator of C++ programming language'], + }, + { + id: 12, + name: 'Steve Wozniak', + nationality: 'American', + notableAchievements: [ + 'Co-founder of Apple', + 'Designer of Apple I & II', + 'Pioneer of personal computing', + ], + }, + { + id: 13, + name: 'Tommy Flowers', + nationality: 'British', + notableAchievements: ['Designer of Colossus', 'Pioneer in electronic computing'], + }, + { + id: 14, + name: 'John Backus', + nationality: 'American', + notableAchievements: ['Created FORTRAN', 'Developed Backus-Naur form(BNF) notation'], + }, + { + id: 15, + name: 'Niklaus Wirth', + nationality: 'Swiss', + notableAchievements: [ + 'Creator of Pascal, Modula, Oberon languages', + 'Software engineering pioneer', + ], + }, + ]); + + getPerson(id: number): Person { + return this.items().find((person) => person.id === id); + } +} diff --git a/app-nativescript/src/app/people/person.ts b/app-nativescript/src/app/people/person.ts new file mode 100644 index 0000000..f297616 --- /dev/null +++ b/app-nativescript/src/app/people/person.ts @@ -0,0 +1,6 @@ +export interface Person { + id: number; + name: string; + nationality: string; + notableAchievements: string[]; +} diff --git a/app-nativescript/src/main.ts b/app-nativescript/src/main.ts new file mode 100644 index 0000000..7b28a55 --- /dev/null +++ b/app-nativescript/src/main.ts @@ -0,0 +1,27 @@ +import { + bootstrapApplication, + provideNativeScriptHttpClient, + provideNativeScriptRouter, + runNativeScriptAngularApp, +} from '@nativescript/angular'; +import { provideZonelessChangeDetection } from '@angular/core'; +import { withInterceptorsFromDi } from '@angular/common/http'; +import { initNativeScriptOverlay } from '@santoshyadavdev/ng-devtools/overlay-nativescript'; +import { routes } from './app/app.routes'; +import { AppComponent } from './app/app.component'; + +if (__DEV__) { + initNativeScriptOverlay(); +} + +runNativeScriptAngularApp({ + appModuleBootstrap: () => { + return bootstrapApplication(AppComponent, { + providers: [ + provideNativeScriptHttpClient(withInterceptorsFromDi()), + provideNativeScriptRouter(routes), + provideZonelessChangeDetection(), + ], + }); + }, +}); diff --git a/app-nativescript/src/polyfills.ts b/app-nativescript/src/polyfills.ts new file mode 100644 index 0000000..0df96b7 --- /dev/null +++ b/app-nativescript/src/polyfills.ts @@ -0,0 +1,11 @@ +/** + * NativeScript Polyfills + */ + +// Gives the runtime a WebSocket global, which the ng-devtools overlay needs. +import '@valor/nativescript-websockets'; + +// Install @nativescript/core polyfills (XHR, setTimeout, requestAnimationFrame) +import '@nativescript/core/globals'; +// Install @nativescript/angular specific polyfills +import '@nativescript/angular/polyfills'; diff --git a/app-nativescript/tailwind.config.js b/app-nativescript/tailwind.config.js new file mode 100644 index 0000000..f8cfdb1 --- /dev/null +++ b/app-nativescript/tailwind.config.js @@ -0,0 +1,13 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/**/*.{css,xml,html,vue,svelte,ts,tsx}'], + // use the .ns-dark class to control dark mode (applied by NativeScript) - since 'media' (default) is not supported. + darkMode: ['class', '.ns-dark'], + theme: { + extend: {}, + }, + plugins: [], + corePlugins: { + preflight: false, // disables browser-specific resets + }, +}; diff --git a/app-nativescript/tsconfig.json b/app-nativescript/tsconfig.json new file mode 100644 index 0000000..0b7a9ee --- /dev/null +++ b/app-nativescript/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "strict": false, + "module": "esnext", + "target": "ES2020", + "moduleResolution": "bundler", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "noEmitHelpers": true, + "noEmitOnError": true, + "skipLibCheck": true, + "lib": ["ESNext", "dom"], + "paths": { + "~/*": ["./src/*"], + "@/*": ["./src/*"], + "@nativescript/core": ["./node_modules/@nativescript/core"], + "@nativescript/core/*": ["./node_modules/@nativescript/core/*"], + "@santoshyadavdev/ng-devtools/*": ["../packages/ng-devtools/dist/*.mjs"] + } + }, + "include": ["src/tests/**/*.ts", "src/**/*.ios.ts", "src/**/*.android.ts"], + "files": ["./src/main.ts", "./references.d.ts", "./src/polyfills.ts"], + "exclude": ["node_modules", "platforms", "e2e"] +} diff --git a/app-nativescript/webpack.config.js b/app-nativescript/webpack.config.js new file mode 100644 index 0000000..b80dc7f --- /dev/null +++ b/app-nativescript/webpack.config.js @@ -0,0 +1,10 @@ +const webpack = require('@nativescript/webpack'); + +module.exports = (env) => { + webpack.init(env); + + // Learn how to customize: + // https://docs.nativescript.org/webpack + + return webpack.resolveConfig(); +}; diff --git a/package.json b/package.json index f5497fd..e52f331 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "devtools:standalone": "node bin.mjs dev", "devtools:mcp": "node bin.mjs mcp", "devtools:report": "node bin.mjs build --outDir dist-report", + "devtools:nativescript": "cd app-nativescript && node ../bin.mjs dev --host 0.0.0.0 --no-auth", "devtools:build-pkg": "pnpm --filter @santoshyadavdev/ng-devtools build", "devtools:publish": "pnpm --filter @santoshyadavdev/ng-devtools publish --access public", "extension:build": "pnpm devtools:build && rm -rf extension/ui && cp -r dist/devtools-ui extension/ui", From 1ed1f546d82ed8bb137b5631dd730d3c56e3dfd5 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 11:48:43 -0700 Subject: [PATCH 5/7] feat(ui): replace the NativeScript coming-soon card with setup steps The NativeScript dock is no longer marked Coming Soon. Its view shows what the integration does and how to set up an app, with a link to the README section, since a NativeScript app's data shows up in the Angular dock rather than a dock of its own. The card takes an optional heading for its list, which reads "Set up an app" here. --- app/src/app.ts | 37 +++++++++++-------- app/src/pages/coming-soon.ts | 9 ++++- .../ng-devtools/src/__tests__/hub.test.ts | 1 - packages/ng-devtools/src/hub-docks.ts | 2 +- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/app/src/app.ts b/app/src/app.ts index fce1cc0..5a0d013 100644 --- a/app/src/app.ts +++ b/app/src/app.ts @@ -53,22 +53,6 @@ const VIEW_TAB: Partial> = { ngrx: 'store', analog: 'analog' } const TAB_VIEW: Partial> = { store: 'ngrx', analog: 'analog' }; const COMING_SOON: Partial> = { - nativescript: { - id: 'nativescript', - name: 'NativeScript', - badge: 'Coming Soon', - heading: 'NativeScript Support', - summary: - 'Inspect NativeScript Angular apps running natively on iOS and Android, with the same tools.', - color: '#3c5afd', - plans: [ - 'Native overlay that reports the component tree from the device', - 'Standalone devtools server your phone or simulator connects to', - 'Example NativeScript app to try it end to end', - ], - pr: 16, - author: { name: 'Nathan Walker', login: 'NathanWalker' }, - }, capacitor: { id: 'capacitor', name: 'Capacitor', @@ -86,6 +70,26 @@ const COMING_SOON: Partial> = { }, }; +const NATIVESCRIPT_SETUP: ComingSoonInfo = { + id: 'nativescript', + name: 'NativeScript', + badge: 'Available', + heading: 'Inspect NativeScript apps', + summary: + 'A NativeScript Angular app reports from the simulator or device to this server, and its components, signals, injectors and NgRx stores show up in the Angular dock.', + color: '#3c5afd', + plansTitle: 'Set up an app', + plans: [ + 'Install @santoshyadavdev/ng-devtools and @valor/nativescript-websockets', + 'Call initNativeScriptOverlay() in main.ts, before the app bootstraps', + 'Run ng-devtools dev --host 0.0.0.0 in the app, then open the Angular dock', + ], + link: { + label: 'NativeScript setup guide', + href: 'https://github.com/santoshyadavdev/angular-devtools#nativescript', + }, +}; + const NOT_ANALOG: ComingSoonInfo = { id: 'analog', name: 'Analog', @@ -614,6 +618,7 @@ export class App implements OnInit, OnDestroy { readonly comingSoon = computed(() => { const view = this.view(); if (view === 'analog') return this.analogKnown() && !this.analog() ? NOT_ANALOG : undefined; + if (view === 'nativescript') return NATIVESCRIPT_SETUP; return view ? COMING_SOON[view] : undefined; }); readonly tabs = computed(() => { diff --git a/app/src/pages/coming-soon.ts b/app/src/pages/coming-soon.ts index 938c826..97c605a 100644 --- a/app/src/pages/coming-soon.ts +++ b/app/src/pages/coming-soon.ts @@ -1,4 +1,4 @@ -import { Component, input } from '@angular/core'; +import { Component, computed, input } from '@angular/core'; export interface ComingSoonInfo { id: 'nativescript' | 'capacitor' | 'analog'; @@ -8,6 +8,7 @@ export interface ComingSoonInfo { summary: string; color: string; plans: string[]; + plansTitle?: string; pr?: number; author?: { name: string; login: string }; link?: { label: string; href: string }; @@ -105,7 +106,7 @@ export interface ComingSoonInfo { }

- {{ info().link ? 'In an ' + info().name + ' app' : 'On the roadmap' }} + {{ plansTitle() }}

    @for (plan of info().plans; track plan; let i = $index) { @@ -464,4 +465,8 @@ export interface ComingSoonInfo { }) export class ComingSoon { readonly info = input.required(); + readonly plansTitle = computed(() => { + const info = this.info(); + return info.plansTitle ?? (info.link ? `In an ${info.name} app` : 'On the roadmap'); + }); } diff --git a/packages/ng-devtools/src/__tests__/hub.test.ts b/packages/ng-devtools/src/__tests__/hub.test.ts index cf68b59..385553c 100644 --- a/packages/ng-devtools/src/__tests__/hub.test.ts +++ b/packages/ng-devtools/src/__tests__/hub.test.ts @@ -37,7 +37,6 @@ describe('ng-devtools hub', () => { ['ng-devtools:capacitor', '/__devframes/ng-devtools/?view=capacitor'], ]); expect(ours.filter((d) => d.title.endsWith('Coming Soon')).map((d) => d.id)).toEqual([ - 'ng-devtools:nativescript', 'ng-devtools:capacitor', ]); expect(ours.some((d) => d.badge || d.groupId)).toBe(false); diff --git a/packages/ng-devtools/src/hub-docks.ts b/packages/ng-devtools/src/hub-docks.ts index db08eb0..ae16580 100644 --- a/packages/ng-devtools/src/hub-docks.ts +++ b/packages/ng-devtools/src/hub-docks.ts @@ -12,7 +12,7 @@ const DOCKS: { view: HubView; title: string; icon: string; soon?: boolean }[] = { view: 'angular', title: 'Angular', icon: 'logos:angular-icon' }, { view: 'ngrx', title: 'NgRx', icon: NGRX_ICON }, { view: 'analog', title: 'Analog', icon: 'logos:analog' }, - { view: 'nativescript', title: 'NativeScript', icon: 'logos:nativescript', soon: true }, + { view: 'nativescript', title: 'NativeScript', icon: 'logos:nativescript' }, { view: 'capacitor', title: 'Capacitor', icon: 'logos:capacitorjs-icon', soon: true }, ]; From 057aab62e18f1a6c4e975284a65fa0e07e2bf101 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 11:51:11 -0700 Subject: [PATCH 6/7] chore(examples): move the NativeScript example app to examples/nativescript The example sits next to the Analog demo, as `nativescript-demo`. It stays out of the pnpm workspace and installs with npm from its own lockfile, so the root install does not pull in the NativeScript toolchain. `pnpm devtools:nativescript` and the README follow the move. --- .prettierignore | 8 +-- README.md | 6 +-- .../nativescript}/.editorconfig | 0 .../nativescript}/.gitignore | 0 .../nativescript}/.vscode/extensions.json | 0 .../App_Resources/Android/app.gradle | 0 .../Android/before-plugins.gradle | 0 .../Android/src/main/AndroidManifest.xml | 0 .../src/main/res/drawable-hdpi/background.png | Bin .../src/main/res/drawable-hdpi/logo.png | Bin .../src/main/res/drawable-ldpi/background.png | Bin .../src/main/res/drawable-ldpi/logo.png | Bin .../src/main/res/drawable-mdpi/background.png | Bin .../src/main/res/drawable-mdpi/logo.png | Bin .../main/res/drawable-nodpi/splash_screen.xml | 0 .../main/res/drawable-xhdpi/background.png | Bin .../src/main/res/drawable-xhdpi/logo.png | Bin .../main/res/drawable-xxhdpi/background.png | Bin .../src/main/res/drawable-xxhdpi/logo.png | Bin .../main/res/drawable-xxxhdpi/background.png | Bin .../src/main/res/drawable-xxxhdpi/logo.png | Bin .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../src/main/res/values-v21/colors.xml | 0 .../src/main/res/values-v21/styles.xml | 0 .../src/main/res/values-v29/styles.xml | 0 .../Android/src/main/res/values/colors.xml | 0 .../res/values/ic_launcher_background.xml | 0 .../Android/src/main/res/values/styles.xml | 0 .../src/main/res/xml/network_security.xml | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/icon-1024.png | Bin .../AppIcon.appiconset/icon-20.png | Bin .../AppIcon.appiconset/icon-20@2x.png | Bin .../AppIcon.appiconset/icon-20@3x.png | Bin .../AppIcon.appiconset/icon-29.png | Bin .../AppIcon.appiconset/icon-29@2x.png | Bin .../AppIcon.appiconset/icon-29@3x.png | Bin .../AppIcon.appiconset/icon-40.png | Bin .../AppIcon.appiconset/icon-40@2x.png | Bin .../AppIcon.appiconset/icon-40@3x.png | Bin .../AppIcon.appiconset/icon-60@2x.png | Bin .../AppIcon.appiconset/icon-60@3x.png | Bin .../AppIcon.appiconset/icon-76.png | Bin .../AppIcon.appiconset/icon-76@2x.png | Bin .../AppIcon.appiconset/icon-83.5@2x.png | Bin .../iOS/Assets.xcassets/Contents.json | 0 .../Contents.json | 0 .../LaunchScreen-AspectFill.png | Bin .../LaunchScreen-AspectFill@2x.png | Bin .../LaunchScreen-AspectFill@3x.png | Bin .../Contents.json | 0 .../LaunchScreen-Center.png | Bin .../LaunchScreen-Center@2x.png | Bin .../LaunchScreen-Center@3x.png | Bin .../App_Resources/iOS/Info.plist | 0 .../App_Resources/iOS/LaunchScreen.storyboard | 0 .../App_Resources/iOS/build.xcconfig | 0 .../nativescript}/nativescript.config.ts | 0 .../nativescript}/package-lock.json | 46 ++++++++++++++---- .../nativescript}/package.json | 4 +- .../nativescript}/references.d.ts | 0 .../nativescript}/src/app.css | 0 .../nativescript}/src/app/app.component.html | 0 .../nativescript}/src/app/app.component.ts | 0 .../nativescript}/src/app/app.routes.ts | 0 .../src/app/devtools-showcase.component.ts | 0 .../app/people/person-detail.component.html | 0 .../src/app/people/person-detail.component.ts | 0 .../src/app/people/person.component.html | 0 .../src/app/people/person.component.ts | 0 .../src/app/people/person.service.ts | 0 .../nativescript}/src/app/people/person.ts | 0 .../nativescript}/src/main.ts | 0 .../nativescript}/src/polyfills.ts | 0 .../nativescript}/tailwind.config.js | 0 .../nativescript}/tsconfig.json | 2 +- .../nativescript}/webpack.config.js | 0 package.json | 2 +- pnpm-workspace.yaml | 2 + 85 files changed, 49 insertions(+), 21 deletions(-) rename {app-nativescript => examples/nativescript}/.editorconfig (100%) rename {app-nativescript => examples/nativescript}/.gitignore (100%) rename {app-nativescript => examples/nativescript}/.vscode/extensions.json (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/app.gradle (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/before-plugins.gradle (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/AndroidManifest.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-hdpi/background.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-hdpi/logo.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-ldpi/background.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-ldpi/logo.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-mdpi/background.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-mdpi/logo.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-xhdpi/background.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/values-v21/colors.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/values-v21/styles.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/values-v29/styles.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/values/colors.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/values/ic_launcher_background.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/values/styles.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/Android/src/main/res/xml/network_security.xml (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/Contents.json (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/Info.plist (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/LaunchScreen.storyboard (100%) rename {app-nativescript => examples/nativescript}/App_Resources/iOS/build.xcconfig (100%) rename {app-nativescript => examples/nativescript}/nativescript.config.ts (100%) rename {app-nativescript => examples/nativescript}/package-lock.json (99%) rename {app-nativescript => examples/nativescript}/package.json (90%) rename {app-nativescript => examples/nativescript}/references.d.ts (100%) rename {app-nativescript => examples/nativescript}/src/app.css (100%) rename {app-nativescript => examples/nativescript}/src/app/app.component.html (100%) rename {app-nativescript => examples/nativescript}/src/app/app.component.ts (100%) rename {app-nativescript => examples/nativescript}/src/app/app.routes.ts (100%) rename {app-nativescript => examples/nativescript}/src/app/devtools-showcase.component.ts (100%) rename {app-nativescript => examples/nativescript}/src/app/people/person-detail.component.html (100%) rename {app-nativescript => examples/nativescript}/src/app/people/person-detail.component.ts (100%) rename {app-nativescript => examples/nativescript}/src/app/people/person.component.html (100%) rename {app-nativescript => examples/nativescript}/src/app/people/person.component.ts (100%) rename {app-nativescript => examples/nativescript}/src/app/people/person.service.ts (100%) rename {app-nativescript => examples/nativescript}/src/app/people/person.ts (100%) rename {app-nativescript => examples/nativescript}/src/main.ts (100%) rename {app-nativescript => examples/nativescript}/src/polyfills.ts (100%) rename {app-nativescript => examples/nativescript}/tailwind.config.js (100%) rename {app-nativescript => examples/nativescript}/tsconfig.json (89%) rename {app-nativescript => examples/nativescript}/webpack.config.js (100%) diff --git a/.prettierignore b/.prettierignore index d037d1c..c50ea13 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,7 +4,7 @@ dist pnpm-lock.yaml extension/ui docs/privacy-policy.html -app-nativescript/platforms -app-nativescript/hooks -app-nativescript/App_Resources -app-nativescript/package-lock.json +examples/nativescript/platforms +examples/nativescript/hooks +examples/nativescript/App_Resources +examples/nativescript/package-lock.json diff --git a/README.md b/README.md index 2f453b0..ec6dd52 100644 --- a/README.md +++ b/README.md @@ -370,7 +370,7 @@ Then open `http://localhost:9999/` for the UI, or point an MCP client at ### Example app -`app-nativescript/` is a `ns create --ng` project wired up this way, with a small +`examples/nativescript/` is a `ns create --ng` project wired up this way, with a small showcase component (signals, a computed, an effect and a component-level provider). Tested on the iOS simulator; Android has not been verified yet. @@ -379,8 +379,8 @@ The app maps `@santoshyadavdev/ng-devtools/*` to the package's build output in ```sh pnpm devtools:build-pkg # builds packages/ng-devtools/dist, UI included -pnpm devtools:nativescript # devtools server scanning app-nativescript/src -cd app-nativescript && npm install && ns debug ios --no-hmr +pnpm devtools:nativescript # devtools server scanning examples/nativescript/src +cd examples/nativescript && npm install && ns debug ios --no-hmr ``` ## Demo App diff --git a/app-nativescript/.editorconfig b/examples/nativescript/.editorconfig similarity index 100% rename from app-nativescript/.editorconfig rename to examples/nativescript/.editorconfig diff --git a/app-nativescript/.gitignore b/examples/nativescript/.gitignore similarity index 100% rename from app-nativescript/.gitignore rename to examples/nativescript/.gitignore diff --git a/app-nativescript/.vscode/extensions.json b/examples/nativescript/.vscode/extensions.json similarity index 100% rename from app-nativescript/.vscode/extensions.json rename to examples/nativescript/.vscode/extensions.json diff --git a/app-nativescript/App_Resources/Android/app.gradle b/examples/nativescript/App_Resources/Android/app.gradle similarity index 100% rename from app-nativescript/App_Resources/Android/app.gradle rename to examples/nativescript/App_Resources/Android/app.gradle diff --git a/app-nativescript/App_Resources/Android/before-plugins.gradle b/examples/nativescript/App_Resources/Android/before-plugins.gradle similarity index 100% rename from app-nativescript/App_Resources/Android/before-plugins.gradle rename to examples/nativescript/App_Resources/Android/before-plugins.gradle diff --git a/app-nativescript/App_Resources/Android/src/main/AndroidManifest.xml b/examples/nativescript/App_Resources/Android/src/main/AndroidManifest.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/AndroidManifest.xml rename to examples/nativescript/App_Resources/Android/src/main/AndroidManifest.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/background.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/background.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/background.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/background.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/background.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/background.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/background.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/background.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml b/examples/nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png b/examples/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png rename to examples/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml b/examples/nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml rename to examples/nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to examples/nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png rename to examples/nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/nativescript/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png rename to examples/nativescript/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/nativescript/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png rename to examples/nativescript/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/nativescript/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to examples/nativescript/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/nativescript/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to examples/nativescript/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/app-nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml b/examples/nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml rename to examples/nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml b/examples/nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml rename to examples/nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml b/examples/nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml rename to examples/nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/values/colors.xml b/examples/nativescript/App_Resources/Android/src/main/res/values/colors.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/values/colors.xml rename to examples/nativescript/App_Resources/Android/src/main/res/values/colors.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml b/examples/nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml rename to examples/nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/values/styles.xml b/examples/nativescript/App_Resources/Android/src/main/res/values/styles.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/values/styles.xml rename to examples/nativescript/App_Resources/Android/src/main/res/values/styles.xml diff --git a/app-nativescript/App_Resources/Android/src/main/res/xml/network_security.xml b/examples/nativescript/App_Resources/Android/src/main/res/xml/network_security.xml similarity index 100% rename from app-nativescript/App_Resources/Android/src/main/res/xml/network_security.xml rename to examples/nativescript/App_Resources/Android/src/main/res/xml/network_security.xml diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/Contents.json b/examples/nativescript/App_Resources/iOS/Assets.xcassets/Contents.json similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/Contents.json rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/Contents.json diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png diff --git a/app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png b/examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png similarity index 100% rename from app-nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png rename to examples/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png diff --git a/app-nativescript/App_Resources/iOS/Info.plist b/examples/nativescript/App_Resources/iOS/Info.plist similarity index 100% rename from app-nativescript/App_Resources/iOS/Info.plist rename to examples/nativescript/App_Resources/iOS/Info.plist diff --git a/app-nativescript/App_Resources/iOS/LaunchScreen.storyboard b/examples/nativescript/App_Resources/iOS/LaunchScreen.storyboard similarity index 100% rename from app-nativescript/App_Resources/iOS/LaunchScreen.storyboard rename to examples/nativescript/App_Resources/iOS/LaunchScreen.storyboard diff --git a/app-nativescript/App_Resources/iOS/build.xcconfig b/examples/nativescript/App_Resources/iOS/build.xcconfig similarity index 100% rename from app-nativescript/App_Resources/iOS/build.xcconfig rename to examples/nativescript/App_Resources/iOS/build.xcconfig diff --git a/app-nativescript/nativescript.config.ts b/examples/nativescript/nativescript.config.ts similarity index 100% rename from app-nativescript/nativescript.config.ts rename to examples/nativescript/nativescript.config.ts diff --git a/app-nativescript/package-lock.json b/examples/nativescript/package-lock.json similarity index 99% rename from app-nativescript/package-lock.json rename to examples/nativescript/package-lock.json index 212c42a..319f087 100644 --- a/app-nativescript/package-lock.json +++ b/examples/nativescript/package-lock.json @@ -1,11 +1,11 @@ { - "name": "app-nativescript", + "name": "nativescript-demo", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "app-nativescript", + "name": "nativescript-demo", "version": "1.0.0", "dependencies": { "@angular/animations": "~22.0.0", @@ -18,7 +18,7 @@ "@angular/router": "~22.0.0", "@nativescript/angular": "~22.0.0", "@nativescript/core": "~9.1.0", - "@santoshyadavdev/ng-devtools": "file:../packages/ng-devtools", + "@santoshyadavdev/ng-devtools": "file:../../packages/ng-devtools", "@valor/nativescript-websockets": "^2.0.3", "rxjs": "~7.8.0", "zone.js": "~0.16.0" @@ -35,29 +35,55 @@ "typescript": "~6.0.0" } }, - "../packages/ng-devtools": { + "../../packages/ng-devtools": { "name": "@santoshyadavdev/ng-devtools", - "version": "0.0.1", + "version": "0.0.5", "license": "MIT", "dependencies": { + "@devframes/agentic": "^1.1.0", + "@devframes/hub": "^1.1.0", + "@devframes/hub-ui": "^1.1.0", "@valibot/to-json-schema": "^1.8.0", "cac": "^7.0.0", - "devframe": "^1.0.0", + "devframe": "^1.1.0", + "h3": "^1.15.11", "valibot": "^1.5.0" }, "bin": { "ng-devtools": "bin.mjs" }, + "devDependencies": { + "@angular/common": "^22.1.0", + "@angular/core": "^22.1.0", + "@nativescript/core": "^9.1.0", + "rxjs": "~7.8.0", + "tsdown": "^0.23.0" + }, + "engines": { + "node": ">=22" + }, "peerDependencies": { - "@devframes/agentic": "^1.0.0", - "@nativescript/core": ">=8.0.0" + "@angular/common": ">=20", + "@angular/core": ">=20", + "@nativescript/core": ">=8", + "rxjs": ">=7", + "vite": ">=5" }, "peerDependenciesMeta": { - "@devframes/agentic": { + "@angular/common": { + "optional": true + }, + "@angular/core": { "optional": true }, "@nativescript/core": { "optional": true + }, + "rxjs": { + "optional": true + }, + "vite": { + "optional": true } } }, @@ -5286,7 +5312,7 @@ ] }, "node_modules/@santoshyadavdev/ng-devtools": { - "resolved": "../packages/ng-devtools", + "resolved": "../../packages/ng-devtools", "link": true }, "node_modules/@standard-schema/spec": { diff --git a/app-nativescript/package.json b/examples/nativescript/package.json similarity index 90% rename from app-nativescript/package.json rename to examples/nativescript/package.json index 5e53209..4505d44 100644 --- a/app-nativescript/package.json +++ b/examples/nativescript/package.json @@ -1,5 +1,5 @@ { - "name": "app-nativescript", + "name": "nativescript-demo", "main": "./src/main.ts", "version": "1.0.0", "private": true, @@ -14,7 +14,7 @@ "@angular/router": "~22.0.0", "@nativescript/angular": "~22.0.0", "@nativescript/core": "~9.1.0", - "@santoshyadavdev/ng-devtools": "file:../packages/ng-devtools", + "@santoshyadavdev/ng-devtools": "file:../../packages/ng-devtools", "@valor/nativescript-websockets": "^2.0.3", "rxjs": "~7.8.0", "zone.js": "~0.16.0" diff --git a/app-nativescript/references.d.ts b/examples/nativescript/references.d.ts similarity index 100% rename from app-nativescript/references.d.ts rename to examples/nativescript/references.d.ts diff --git a/app-nativescript/src/app.css b/examples/nativescript/src/app.css similarity index 100% rename from app-nativescript/src/app.css rename to examples/nativescript/src/app.css diff --git a/app-nativescript/src/app/app.component.html b/examples/nativescript/src/app/app.component.html similarity index 100% rename from app-nativescript/src/app/app.component.html rename to examples/nativescript/src/app/app.component.html diff --git a/app-nativescript/src/app/app.component.ts b/examples/nativescript/src/app/app.component.ts similarity index 100% rename from app-nativescript/src/app/app.component.ts rename to examples/nativescript/src/app/app.component.ts diff --git a/app-nativescript/src/app/app.routes.ts b/examples/nativescript/src/app/app.routes.ts similarity index 100% rename from app-nativescript/src/app/app.routes.ts rename to examples/nativescript/src/app/app.routes.ts diff --git a/app-nativescript/src/app/devtools-showcase.component.ts b/examples/nativescript/src/app/devtools-showcase.component.ts similarity index 100% rename from app-nativescript/src/app/devtools-showcase.component.ts rename to examples/nativescript/src/app/devtools-showcase.component.ts diff --git a/app-nativescript/src/app/people/person-detail.component.html b/examples/nativescript/src/app/people/person-detail.component.html similarity index 100% rename from app-nativescript/src/app/people/person-detail.component.html rename to examples/nativescript/src/app/people/person-detail.component.html diff --git a/app-nativescript/src/app/people/person-detail.component.ts b/examples/nativescript/src/app/people/person-detail.component.ts similarity index 100% rename from app-nativescript/src/app/people/person-detail.component.ts rename to examples/nativescript/src/app/people/person-detail.component.ts diff --git a/app-nativescript/src/app/people/person.component.html b/examples/nativescript/src/app/people/person.component.html similarity index 100% rename from app-nativescript/src/app/people/person.component.html rename to examples/nativescript/src/app/people/person.component.html diff --git a/app-nativescript/src/app/people/person.component.ts b/examples/nativescript/src/app/people/person.component.ts similarity index 100% rename from app-nativescript/src/app/people/person.component.ts rename to examples/nativescript/src/app/people/person.component.ts diff --git a/app-nativescript/src/app/people/person.service.ts b/examples/nativescript/src/app/people/person.service.ts similarity index 100% rename from app-nativescript/src/app/people/person.service.ts rename to examples/nativescript/src/app/people/person.service.ts diff --git a/app-nativescript/src/app/people/person.ts b/examples/nativescript/src/app/people/person.ts similarity index 100% rename from app-nativescript/src/app/people/person.ts rename to examples/nativescript/src/app/people/person.ts diff --git a/app-nativescript/src/main.ts b/examples/nativescript/src/main.ts similarity index 100% rename from app-nativescript/src/main.ts rename to examples/nativescript/src/main.ts diff --git a/app-nativescript/src/polyfills.ts b/examples/nativescript/src/polyfills.ts similarity index 100% rename from app-nativescript/src/polyfills.ts rename to examples/nativescript/src/polyfills.ts diff --git a/app-nativescript/tailwind.config.js b/examples/nativescript/tailwind.config.js similarity index 100% rename from app-nativescript/tailwind.config.js rename to examples/nativescript/tailwind.config.js diff --git a/app-nativescript/tsconfig.json b/examples/nativescript/tsconfig.json similarity index 89% rename from app-nativescript/tsconfig.json rename to examples/nativescript/tsconfig.json index 0b7a9ee..a16b984 100644 --- a/app-nativescript/tsconfig.json +++ b/examples/nativescript/tsconfig.json @@ -15,7 +15,7 @@ "@/*": ["./src/*"], "@nativescript/core": ["./node_modules/@nativescript/core"], "@nativescript/core/*": ["./node_modules/@nativescript/core/*"], - "@santoshyadavdev/ng-devtools/*": ["../packages/ng-devtools/dist/*.mjs"] + "@santoshyadavdev/ng-devtools/*": ["../../packages/ng-devtools/dist/*.mjs"] } }, "include": ["src/tests/**/*.ts", "src/**/*.ios.ts", "src/**/*.android.ts"], diff --git a/app-nativescript/webpack.config.js b/examples/nativescript/webpack.config.js similarity index 100% rename from app-nativescript/webpack.config.js rename to examples/nativescript/webpack.config.js diff --git a/package.json b/package.json index e52f331..c2448f4 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "devtools:standalone": "node bin.mjs dev", "devtools:mcp": "node bin.mjs mcp", "devtools:report": "node bin.mjs build --outDir dist-report", - "devtools:nativescript": "cd app-nativescript && node ../bin.mjs dev --host 0.0.0.0 --no-auth", + "devtools:nativescript": "cd examples/nativescript && node ../../bin.mjs dev --host 0.0.0.0 --no-auth", "devtools:build-pkg": "pnpm --filter @santoshyadavdev/ng-devtools build", "devtools:publish": "pnpm --filter @santoshyadavdev/ng-devtools publish --access public", "extension:build": "pnpm devtools:build && rm -rf extension/ui && cp -r dist/devtools-ui extension/ui", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c8c7160..0a61a01 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,8 @@ packages: - packages/* - examples/* + # Installs with npm from its own lockfile, outside the root install. + - '!examples/nativescript' packageExtensions: '@analogjs/vite-plugin-nitro': From 9f0a1ca32a90f074916cc2f8ba3335649103e730 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 29 Sep 2026 13:24:06 -0700 Subject: [PATCH 7/7] fix: address CodeRabbit review on NativeScript support - overlay: close the socket when session setup fails after connecting, so retries don't leak open sockets - example: getPerson returns Person | undefined; detail page shows a not-found state - README: warn that --host 0.0.0.0 --no-auth exposes the server --- README.md | 7 ++++ .../app/people/person-detail.component.html | 42 ++++++++++--------- .../src/app/people/person-detail.component.ts | 2 +- .../src/app/people/person.service.ts | 2 +- .../ng-devtools/src/overlay-nativescript.ts | 18 +++++++- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index ec6dd52..2007d04 100644 --- a/README.md +++ b/README.md @@ -368,6 +368,13 @@ npx @santoshyadavdev/ng-devtools dev --host 0.0.0.0 --no-auth Then open `http://localhost:9999/` for the UI, or point an MCP client at `http://localhost:9999/__mcp`. +> [!WARNING] +> `--host 0.0.0.0 --no-auth` exposes the devtools RPC and MCP endpoints, +> unauthenticated, to every host that can reach your machine. Use it only on a +> trusted network. The simulators reach the server over loopback, so drop +> `--host 0.0.0.0` unless a physical device needs it, and prefer binding to the +> one interface that device uses (e.g. `--host 192.168.1.20`). + ### Example app `examples/nativescript/` is a `ns create --ng` project wired up this way, with a small diff --git a/examples/nativescript/src/app/people/person-detail.component.html b/examples/nativescript/src/app/people/person-detail.component.html index 44f157d..c1a3212 100644 --- a/examples/nativescript/src/app/people/person-detail.component.html +++ b/examples/nativescript/src/app/people/person-detail.component.html @@ -16,24 +16,28 @@ } - - - - - +@if (person(); as p) { + + + + + - - - - + + + + - - - - - + + + + + +} @else { + +} diff --git a/examples/nativescript/src/app/people/person-detail.component.ts b/examples/nativescript/src/app/people/person-detail.component.ts index 321ea61..df49f98 100644 --- a/examples/nativescript/src/app/people/person-detail.component.ts +++ b/examples/nativescript/src/app/people/person-detail.component.ts @@ -22,7 +22,7 @@ export class PersonDetailComponent implements OnInit { personService = inject(PersonService); routerExtensions = inject(RouterExtensions); route = inject(ActivatedRoute); - person = signal(null); + person = signal(undefined); isAndroid = __ANDROID__; ngOnInit(): void { diff --git a/examples/nativescript/src/app/people/person.service.ts b/examples/nativescript/src/app/people/person.service.ts index e56e44f..a9ec353 100644 --- a/examples/nativescript/src/app/people/person.service.ts +++ b/examples/nativescript/src/app/people/person.service.ts @@ -113,7 +113,7 @@ export class PersonService { }, ]); - getPerson(id: number): Person { + getPerson(id: number): Person | undefined { return this.items().find((person) => person.id === id); } } diff --git a/packages/ng-devtools/src/overlay-nativescript.ts b/packages/ng-devtools/src/overlay-nativescript.ts index f0f6c64..4f63a42 100644 --- a/packages/ng-devtools/src/overlay-nativescript.ts +++ b/packages/ng-devtools/src/overlay-nativescript.ts @@ -129,6 +129,23 @@ async function connect(baseURL: string, intervalMs: number, onDisconnected: () = }, }, }); + try { + const stop = await startSession(rpc, intervalMs); + return () => { + closing = true; + stop(); + }; + } catch (error) { + closing = true; + rpc.close?.(); + throw error; + } +} + +async function startSession( + rpc: Awaited>, + intervalMs: number, +): Promise<() => void> { const my = rpc.scope('ng-devtools'); const pageId = Math.random().toString(36).slice(2, 6); @@ -252,7 +269,6 @@ async function connect(baseURL: string, intervalMs: number, onDisconnected: () = }); return () => { - closing = true; clearInterval(interval); restoreSignalHook(); ngrx.stop();