├── .gitignore
├── src
├── vite.env.d.ts
├── demo
│ ├── index.html
│ ├── index.tsx
│ ├── instructions.tsx
│ └── hackernews.tsx
└── index.ts
├── assets
└── image.png
├── tsconfig.json
├── vite.config.demo.js
├── vite.config.js
├── .github
└── workflows
│ └── deploy_pages.yml
├── LICENSE
├── package.json
├── README.md
└── pnpm-lock.yaml
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | /dist
3 | /demo
4 |
--------------------------------------------------------------------------------
/src/vite.env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KrofDrakula/preact-perf-profiler/HEAD/assets/image.png
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "lib": ["DOM", "ESNext"],
5 | "module": "ESNext",
6 | "moduleResolution": "NodeNext",
7 | "jsx": "react-jsx",
8 | "jsxImportSource": "preact",
9 | "strict": true
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Preact Perf Profiler example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/vite.config.demo.js:
--------------------------------------------------------------------------------
1 | import { resolve } from "node:path";
2 | import { defineConfig } from "vite";
3 |
4 | export default defineConfig({
5 | esbuild: {
6 | jsxImportSource: "preact",
7 | },
8 | build: {
9 | outDir: resolve(__dirname, "demo"),
10 | sourcemap: true,
11 | target: "esnext",
12 | emptyOutDir: true,
13 | },
14 | root: "./src/demo",
15 | });
16 |
--------------------------------------------------------------------------------
/src/demo/index.tsx:
--------------------------------------------------------------------------------
1 | import { render } from "preact";
2 | import { track } from "../index.js";
3 | import Hackernews from "./hackernews.js";
4 | import Instructions from "./instructions.js";
5 |
6 | const root = document.getElementById("app")!;
7 |
8 | track(Hackernews);
9 |
10 | render(
11 | <>
12 |
13 |
14 | >,
15 | root
16 | );
17 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { resolve } from "node:path";
2 | import { defineConfig } from "vite";
3 | import dts from "vite-plugin-dts";
4 |
5 | export default defineConfig({
6 | build: {
7 | lib: {
8 | entry: resolve(__dirname, "src/index.ts"),
9 | name: "PreactPerfProfiler",
10 | fileName: "index",
11 | },
12 | sourcemap: true,
13 | target: "esnext",
14 | emptyOutDir: true,
15 | reportCompressedSize: true,
16 | rollupOptions: {
17 | external: ["preact"],
18 | },
19 | },
20 | plugins: [dts({ entryRoot: "src" })],
21 | });
22 |
--------------------------------------------------------------------------------
/.github/workflows/deploy_pages.yml:
--------------------------------------------------------------------------------
1 | name: deploy-pages
2 | run-name: Deploy demo to GitHub Pages
3 | on:
4 | push:
5 | branches:
6 | - master
7 | jobs:
8 | build-pages:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v3
12 | - uses: pnpm/action-setup@v2
13 | with:
14 | version: "latest"
15 | - uses: actions/setup-node@v3
16 | with:
17 | node-version: "18.x"
18 | cache: "pnpm"
19 | - run: pnpm install
20 | - run: pnpm run build-demo --base=/preact-perf-profiler/
21 | - uses: actions/upload-pages-artifact@v1
22 | with:
23 | path: "demo"
24 | deploy-pages:
25 | runs-on: ubuntu-latest
26 | needs: build-pages
27 | permissions:
28 | pages: write # to deploy to Pages
29 | id-token: write # to verify the deployment originates from an appropriate source
30 | steps:
31 | - uses: actions/deploy-pages@v2
32 |
--------------------------------------------------------------------------------
/src/demo/instructions.tsx:
--------------------------------------------------------------------------------
1 | export default () => (
2 | <>
3 |
4 | preact-perf-profiler demo
5 |
6 |
7 |
11 | github.com/krofdrakula/preact-perf-profiler
12 |
13 |
14 |
15 | This demo loads top stories from{" "}
16 |
17 | Hackernews
18 | {" "}
19 | and renders a table. It tracks this component's rendering performance by
20 | injecting performance.mark() and{" "}
21 | performance.measure() calls during component rendering to
22 | mark locations on the Dev Tools timeline.
23 |
24 |
25 | To see how the table component performs on this page, record a timeline in
26 | the Performance tab in Dev Tools and you should be able to see timings in
27 | the User Timings section.
28 |
29 | >
30 | );
31 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Klemen Slavič
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "preact-perf-profiler",
3 | "version": "2.0.1",
4 | "description": "A utility for measuring rendering performance with Preact",
5 | "author": "Klemen Slavič (https://krofdrakula.github.io/)",
6 | "license": "MIT",
7 | "bugs": {
8 | "url": "https://github.com/krofdrakula/preact-perf-profiler/issues"
9 | },
10 | "homepage": "https://github.com/krofdrakula/preact-perf-profiler#readme",
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/krofdrakula/preact-perf-profiler.git"
14 | },
15 | "keywords": [
16 | "preact",
17 | "performance"
18 | ],
19 | "type": "module",
20 | "main": "dist/index.umd.cjs",
21 | "umd:main": "dist/index.umd.cjs",
22 | "module": "dist/index.js",
23 | "types": "dist/index.d.ts",
24 | "exports": {
25 | ".": {
26 | "types": "./dist/index.d.ts",
27 | "import": "./dist/index.js",
28 | "require": "./dist/index.umd.cjs"
29 | }
30 | },
31 | "files": [
32 | "./dist",
33 | "./src",
34 | "./README.md",
35 | "./LICENSE",
36 | "./package.json",
37 | "./tsconfig.json"
38 | ],
39 | "scripts": {
40 | "build": "vite build",
41 | "build-demo": "vite build --config vite.config.demo.js",
42 | "dev": "vite --config vite.config.demo.js",
43 | "prepublish": "vite build"
44 | },
45 | "peerDependencies": {
46 | "preact": ">=10"
47 | },
48 | "devDependencies": {
49 | "preact": ">=10",
50 | "vite": "^4.4.3",
51 | "vite-plugin-dts": "^3.2.0"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { options, Options, ComponentType, VNode } from "preact";
2 |
3 | type OptionsWithInternals = Options & {
4 | _diff?: (vnode: VNode) => void;
5 | __b: (vnode: VNode) => void;
6 | };
7 |
8 | // aliasing to provide internal options
9 | const opts = options as OptionsWithInternals;
10 | let id = 0;
11 |
12 | const trackedComponents = new Set();
13 |
14 | const isTracking = (vnode: VNode) =>
15 | typeof vnode.type != "string" && trackedComponents.has(vnode.type);
16 |
17 | const originals = { ...opts };
18 |
19 | const marks: string[] = [];
20 |
21 | opts._diff = opts.__b = (vnode) => {
22 | if (isTracking(vnode)) {
23 | marks.push(`component_${id++}`);
24 | performance.mark(marks.at(-1)!);
25 | }
26 | return originals._diff?.(vnode);
27 | };
28 |
29 | opts.diffed = (vnode) => {
30 | if (isTracking(vnode)) {
31 | const component = vnode.type as ComponentType;
32 | const startMark = marks.pop();
33 | if (startMark) {
34 | const endMark = `${startMark}_end`;
35 | performance.mark(endMark);
36 | performance.measure(
37 | `⚛️ ${component.displayName ?? component.name ?? "component"}`,
38 | startMark,
39 | endMark
40 | );
41 | performance.clearMarks(startMark);
42 | performance.clearMarks(endMark);
43 | } else if (import.meta.env.DEV) {
44 | console.error(`Cannot find start mark for `, vnode);
45 | }
46 | }
47 | originals.diffed?.(vnode);
48 | };
49 |
50 | export const track = >(component: T): void => {
51 | trackedComponents.add(component);
52 | };
53 |
54 | export const untrack = >(component: T): void => {
55 | trackedComponents.delete(component);
56 | };
57 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # `preact-perf-profiler`
2 |
3 | 
4 | 
5 | 
6 |
7 | This library allows you to register a Preact component for measuring its rendering performance using the [User Timing Performance API](https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/User_timing). The measurements show up in the Performance tab timeline in Chromium-based browsers and Firefox browsers and are available through the [`PerformanceObserver` API](https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Performance_data) if you would like to collect remote telemetry from clients.
8 |
9 | ## Demo
10 |
11 | Open [the demo site](https://krofdrakula.github.io/preact-perf-profiler/) to see it in action.
12 |
13 | You can also check out the demo locally and run it on your own machine:
14 |
15 | ```bash
16 | pnpm install
17 | pnpm run dev
18 | ```
19 |
20 | Open Dev Tools and you should be able to see the performance measure for the tracked component:
21 |
22 | 
23 |
24 | ## Usage
25 |
26 | The API consist of two methods that take a component class or function and returns it:
27 |
28 | - `track(k: ComponentType) => void`
29 | - `untrack(k: ComponentType) => void`
30 |
31 | Registering a component adds that component to a `Set` of components. This means that multiple registrations will only add the tracked component once. Same for unregistering.
32 |
33 | The easiest way to track a component is to register it where it is defined:
34 |
35 | ```ts
36 | import { track } from "preact-perf-profiler";
37 |
38 | const MyComponent = () => Hello!
;
39 |
40 | export default MyComponent;
41 |
42 | track(MyComponent);
43 | ```
44 |
45 | If you do not control the source of the component, you can start tracking the component after importing it elsewhere:
46 |
47 | ```ts
48 | import { track } from "preact-perf-profiler";
49 | import MyComponent from "./my-component.tsx";
50 |
51 | track(MyComponent);
52 |
53 | const MyOtherComponent = () => ;
54 |
55 | export default MyOtherComponent;
56 | ```
57 |
--------------------------------------------------------------------------------
/src/demo/hackernews.tsx:
--------------------------------------------------------------------------------
1 | import { FunctionComponent, FunctionalComponent } from "preact";
2 | import { useEffect, useState } from "preact/hooks";
3 |
4 | const chunk = function* (list: Iterable, count: number): Generator {
5 | let buffer: T[] = [];
6 | for (const item of list) {
7 | buffer.push(item);
8 | if (buffer.length == count) {
9 | yield buffer;
10 | buffer = [];
11 | }
12 | }
13 | if (buffer.length > 0) yield buffer;
14 | };
15 |
16 | interface Props {
17 | maxStories: number;
18 | }
19 |
20 | interface HackernewsItem {
21 | by: string;
22 | descendants: number;
23 | id: number;
24 | kids: number[];
25 | score: number;
26 | time: number;
27 | title: string;
28 | type: string;
29 | url: string;
30 | }
31 |
32 | const Hackernews: FunctionComponent = ({ maxStories }) => {
33 | const [error, setError] = useState(null);
34 | const [list, setList] = useState(null);
35 |
36 | useEffect(() => {
37 | fetch(`https://hacker-news.firebaseio.com/v0/topstories.json`)
38 | .then((response) => response.json())
39 | .then((ids) => chunk(ids.slice(0, maxStories), 5))
40 | .then(async (chunks) => {
41 | let data: HackernewsItem[] = [];
42 | for (const chunk of chunks) {
43 | data.push(
44 | ...(await Promise.all(
45 | chunk.map((id) =>
46 | fetch(
47 | `https://hacker-news.firebaseio.com/v0/item/${id}.json`
48 | ).then((response) => response.json())
49 | )
50 | ))
51 | );
52 | }
53 | setList(data);
54 | })
55 | .catch((err) => setError(err));
56 | }, []);
57 |
58 | if (error) {
59 | return (
60 |
61 |
62 | {error.toString()}
63 |
64 |
65 | );
66 | }
67 |
68 | if (!list) {
69 | return Loading...
;
70 | }
71 |
72 | return (
73 | <>
74 |
83 | Hackernews top stories
84 |
85 |
86 |
87 |
88 | | ID |
89 | Created |
90 | Title |
91 | Author |
92 |
93 |
94 |
95 | {list.map((item) => (
96 |
97 | | {item.id} |
98 |
99 | {new Date(item.time).toDateString()} @{" "}
100 | {new Date(item.time).toLocaleTimeString()}
101 | |
102 |
103 |
104 | {item.title}
105 |
106 | |
107 |
108 |
112 | {item.by}
113 |
114 | |
115 |
116 | ))}
117 |
118 |
119 |
120 | >
121 | );
122 | };
123 |
124 | export default Hackernews;
125 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | devDependencies:
8 | preact:
9 | specifier: '>=10'
10 | version: 10.16.0
11 | vite:
12 | specifier: ^4.4.3
13 | version: 4.4.3
14 | vite-plugin-dts:
15 | specifier: ^3.2.0
16 | version: 3.2.0(typescript@5.1.6)
17 |
18 | packages:
19 |
20 | /@babel/helper-string-parser@7.22.5:
21 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
22 | engines: {node: '>=6.9.0'}
23 | dev: true
24 |
25 | /@babel/helper-validator-identifier@7.22.5:
26 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
27 | engines: {node: '>=6.9.0'}
28 | dev: true
29 |
30 | /@babel/parser@7.22.7:
31 | resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==}
32 | engines: {node: '>=6.0.0'}
33 | hasBin: true
34 | dependencies:
35 | '@babel/types': 7.22.5
36 | dev: true
37 |
38 | /@babel/types@7.22.5:
39 | resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
40 | engines: {node: '>=6.9.0'}
41 | dependencies:
42 | '@babel/helper-string-parser': 7.22.5
43 | '@babel/helper-validator-identifier': 7.22.5
44 | to-fast-properties: 2.0.0
45 | dev: true
46 |
47 | /@esbuild/android-arm64@0.18.11:
48 | resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==}
49 | engines: {node: '>=12'}
50 | cpu: [arm64]
51 | os: [android]
52 | requiresBuild: true
53 | dev: true
54 | optional: true
55 |
56 | /@esbuild/android-arm@0.18.11:
57 | resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==}
58 | engines: {node: '>=12'}
59 | cpu: [arm]
60 | os: [android]
61 | requiresBuild: true
62 | dev: true
63 | optional: true
64 |
65 | /@esbuild/android-x64@0.18.11:
66 | resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==}
67 | engines: {node: '>=12'}
68 | cpu: [x64]
69 | os: [android]
70 | requiresBuild: true
71 | dev: true
72 | optional: true
73 |
74 | /@esbuild/darwin-arm64@0.18.11:
75 | resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==}
76 | engines: {node: '>=12'}
77 | cpu: [arm64]
78 | os: [darwin]
79 | requiresBuild: true
80 | dev: true
81 | optional: true
82 |
83 | /@esbuild/darwin-x64@0.18.11:
84 | resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==}
85 | engines: {node: '>=12'}
86 | cpu: [x64]
87 | os: [darwin]
88 | requiresBuild: true
89 | dev: true
90 | optional: true
91 |
92 | /@esbuild/freebsd-arm64@0.18.11:
93 | resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==}
94 | engines: {node: '>=12'}
95 | cpu: [arm64]
96 | os: [freebsd]
97 | requiresBuild: true
98 | dev: true
99 | optional: true
100 |
101 | /@esbuild/freebsd-x64@0.18.11:
102 | resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==}
103 | engines: {node: '>=12'}
104 | cpu: [x64]
105 | os: [freebsd]
106 | requiresBuild: true
107 | dev: true
108 | optional: true
109 |
110 | /@esbuild/linux-arm64@0.18.11:
111 | resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==}
112 | engines: {node: '>=12'}
113 | cpu: [arm64]
114 | os: [linux]
115 | requiresBuild: true
116 | dev: true
117 | optional: true
118 |
119 | /@esbuild/linux-arm@0.18.11:
120 | resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==}
121 | engines: {node: '>=12'}
122 | cpu: [arm]
123 | os: [linux]
124 | requiresBuild: true
125 | dev: true
126 | optional: true
127 |
128 | /@esbuild/linux-ia32@0.18.11:
129 | resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==}
130 | engines: {node: '>=12'}
131 | cpu: [ia32]
132 | os: [linux]
133 | requiresBuild: true
134 | dev: true
135 | optional: true
136 |
137 | /@esbuild/linux-loong64@0.18.11:
138 | resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==}
139 | engines: {node: '>=12'}
140 | cpu: [loong64]
141 | os: [linux]
142 | requiresBuild: true
143 | dev: true
144 | optional: true
145 |
146 | /@esbuild/linux-mips64el@0.18.11:
147 | resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==}
148 | engines: {node: '>=12'}
149 | cpu: [mips64el]
150 | os: [linux]
151 | requiresBuild: true
152 | dev: true
153 | optional: true
154 |
155 | /@esbuild/linux-ppc64@0.18.11:
156 | resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==}
157 | engines: {node: '>=12'}
158 | cpu: [ppc64]
159 | os: [linux]
160 | requiresBuild: true
161 | dev: true
162 | optional: true
163 |
164 | /@esbuild/linux-riscv64@0.18.11:
165 | resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==}
166 | engines: {node: '>=12'}
167 | cpu: [riscv64]
168 | os: [linux]
169 | requiresBuild: true
170 | dev: true
171 | optional: true
172 |
173 | /@esbuild/linux-s390x@0.18.11:
174 | resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==}
175 | engines: {node: '>=12'}
176 | cpu: [s390x]
177 | os: [linux]
178 | requiresBuild: true
179 | dev: true
180 | optional: true
181 |
182 | /@esbuild/linux-x64@0.18.11:
183 | resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==}
184 | engines: {node: '>=12'}
185 | cpu: [x64]
186 | os: [linux]
187 | requiresBuild: true
188 | dev: true
189 | optional: true
190 |
191 | /@esbuild/netbsd-x64@0.18.11:
192 | resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==}
193 | engines: {node: '>=12'}
194 | cpu: [x64]
195 | os: [netbsd]
196 | requiresBuild: true
197 | dev: true
198 | optional: true
199 |
200 | /@esbuild/openbsd-x64@0.18.11:
201 | resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==}
202 | engines: {node: '>=12'}
203 | cpu: [x64]
204 | os: [openbsd]
205 | requiresBuild: true
206 | dev: true
207 | optional: true
208 |
209 | /@esbuild/sunos-x64@0.18.11:
210 | resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==}
211 | engines: {node: '>=12'}
212 | cpu: [x64]
213 | os: [sunos]
214 | requiresBuild: true
215 | dev: true
216 | optional: true
217 |
218 | /@esbuild/win32-arm64@0.18.11:
219 | resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==}
220 | engines: {node: '>=12'}
221 | cpu: [arm64]
222 | os: [win32]
223 | requiresBuild: true
224 | dev: true
225 | optional: true
226 |
227 | /@esbuild/win32-ia32@0.18.11:
228 | resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==}
229 | engines: {node: '>=12'}
230 | cpu: [ia32]
231 | os: [win32]
232 | requiresBuild: true
233 | dev: true
234 | optional: true
235 |
236 | /@esbuild/win32-x64@0.18.11:
237 | resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==}
238 | engines: {node: '>=12'}
239 | cpu: [x64]
240 | os: [win32]
241 | requiresBuild: true
242 | dev: true
243 | optional: true
244 |
245 | /@microsoft/api-extractor-model@7.27.4:
246 | resolution: {integrity: sha512-HjqQFmuGPOS20rtnu+9Jj0QrqZyR59E+piUWXPMZTTn4jaZI+4UmsHSf3Id8vyueAhOBH2cgwBuRTE5R+MfSMw==}
247 | dependencies:
248 | '@microsoft/tsdoc': 0.14.2
249 | '@microsoft/tsdoc-config': 0.16.2
250 | '@rushstack/node-core-library': 3.59.5
251 | transitivePeerDependencies:
252 | - '@types/node'
253 | dev: true
254 |
255 | /@microsoft/api-extractor@7.36.1:
256 | resolution: {integrity: sha512-2SPp1jq6wDY5IOsRLUv/4FxngslctBZJlztAJ3uWpCAwqKQG7ESdL3DhEza+StbYLtBQmu1Pk6q1Vkhl7qD/bg==}
257 | hasBin: true
258 | dependencies:
259 | '@microsoft/api-extractor-model': 7.27.4
260 | '@microsoft/tsdoc': 0.14.2
261 | '@microsoft/tsdoc-config': 0.16.2
262 | '@rushstack/node-core-library': 3.59.5
263 | '@rushstack/rig-package': 0.4.0
264 | '@rushstack/ts-command-line': 4.15.1
265 | colors: 1.2.5
266 | lodash: 4.17.21
267 | resolve: 1.22.2
268 | semver: 7.3.8
269 | source-map: 0.6.1
270 | typescript: 5.0.4
271 | transitivePeerDependencies:
272 | - '@types/node'
273 | dev: true
274 |
275 | /@microsoft/tsdoc-config@0.16.2:
276 | resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
277 | dependencies:
278 | '@microsoft/tsdoc': 0.14.2
279 | ajv: 6.12.6
280 | jju: 1.4.0
281 | resolve: 1.19.0
282 | dev: true
283 |
284 | /@microsoft/tsdoc@0.14.2:
285 | resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
286 | dev: true
287 |
288 | /@rollup/pluginutils@5.0.2(rollup@3.26.2):
289 | resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
290 | engines: {node: '>=14.0.0'}
291 | peerDependencies:
292 | rollup: ^1.20.0||^2.0.0||^3.0.0
293 | peerDependenciesMeta:
294 | rollup:
295 | optional: true
296 | dependencies:
297 | '@types/estree': 1.0.1
298 | estree-walker: 2.0.2
299 | picomatch: 2.3.1
300 | rollup: 3.26.2
301 | dev: true
302 |
303 | /@rushstack/node-core-library@3.59.5:
304 | resolution: {integrity: sha512-1IpV7LufrI1EoVO8hYsb3t6L8L+yp40Sa0OaOV2CIu1zx4e6ZeVNaVIEXFgMXBKdGXkAh21MnCaIzlDNpG6ZQw==}
305 | peerDependencies:
306 | '@types/node': '*'
307 | peerDependenciesMeta:
308 | '@types/node':
309 | optional: true
310 | dependencies:
311 | colors: 1.2.5
312 | fs-extra: 7.0.1
313 | import-lazy: 4.0.0
314 | jju: 1.4.0
315 | resolve: 1.22.2
316 | semver: 7.3.8
317 | z-schema: 5.0.5
318 | dev: true
319 |
320 | /@rushstack/rig-package@0.4.0:
321 | resolution: {integrity: sha512-FnM1TQLJYwSiurP6aYSnansprK5l8WUK8VG38CmAaZs29ZeL1msjK0AP1VS4ejD33G0kE/2cpsPsS9jDenBMxw==}
322 | dependencies:
323 | resolve: 1.22.2
324 | strip-json-comments: 3.1.1
325 | dev: true
326 |
327 | /@rushstack/ts-command-line@4.15.1:
328 | resolution: {integrity: sha512-EL4jxZe5fhb1uVL/P/wQO+Z8Rc8FMiWJ1G7VgnPDvdIt5GVjRfK7vwzder1CZQiX3x0PY6uxENYLNGTFd1InRQ==}
329 | dependencies:
330 | '@types/argparse': 1.0.38
331 | argparse: 1.0.10
332 | colors: 1.2.5
333 | string-argv: 0.3.2
334 | dev: true
335 |
336 | /@types/argparse@1.0.38:
337 | resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
338 | dev: true
339 |
340 | /@types/estree@1.0.1:
341 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
342 | dev: true
343 |
344 | /@volar/language-core@1.8.0:
345 | resolution: {integrity: sha512-ZHTvZPM3pEbOOuaq+ybNz5TQlHUqPQPK0G1+SonvApGq0e3qgGijjhtL5T7hsCtUEmxfix8FrAuCH14tMBOhTg==}
346 | dependencies:
347 | '@volar/source-map': 1.8.0
348 | dev: true
349 |
350 | /@volar/source-map@1.8.0:
351 | resolution: {integrity: sha512-d35aV0yFkIrkynRSKgrN5hgbMv6ekkFvcJsJGmOZ8UEjqLStto9zq7RSvpp6/PZ7/pa4Gn1f6K1qDt0bq0oUew==}
352 | dependencies:
353 | muggle-string: 0.3.1
354 | dev: true
355 |
356 | /@volar/typescript@1.8.0:
357 | resolution: {integrity: sha512-T/U1XLLhXv6tNr40Awznfc6QZWizSL99t6M0DeXtIMbnvSCqjjCVRnwlsq+DK9C1RlO3k8+i0Z8iJn7O1GGtoA==}
358 | dependencies:
359 | '@volar/language-core': 1.8.0
360 | dev: true
361 |
362 | /@vue/compiler-core@3.3.4:
363 | resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
364 | dependencies:
365 | '@babel/parser': 7.22.7
366 | '@vue/shared': 3.3.4
367 | estree-walker: 2.0.2
368 | source-map-js: 1.0.2
369 | dev: true
370 |
371 | /@vue/compiler-dom@3.3.4:
372 | resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
373 | dependencies:
374 | '@vue/compiler-core': 3.3.4
375 | '@vue/shared': 3.3.4
376 | dev: true
377 |
378 | /@vue/language-core@1.8.4(typescript@5.1.6):
379 | resolution: {integrity: sha512-pnNtNcJVfkGYluW0vsVO+Y1gyX+eA0voaS7+1JOhCp5zKeCaL/PAmGYOgfvwML62neL+2H8pnhY7sffmrGpEhw==}
380 | peerDependencies:
381 | typescript: '*'
382 | peerDependenciesMeta:
383 | typescript:
384 | optional: true
385 | dependencies:
386 | '@volar/language-core': 1.8.0
387 | '@volar/source-map': 1.8.0
388 | '@vue/compiler-dom': 3.3.4
389 | '@vue/reactivity': 3.3.4
390 | '@vue/shared': 3.3.4
391 | minimatch: 9.0.3
392 | muggle-string: 0.3.1
393 | typescript: 5.1.6
394 | vue-template-compiler: 2.7.14
395 | dev: true
396 |
397 | /@vue/reactivity@3.3.4:
398 | resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
399 | dependencies:
400 | '@vue/shared': 3.3.4
401 | dev: true
402 |
403 | /@vue/shared@3.3.4:
404 | resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
405 | dev: true
406 |
407 | /@vue/typescript@1.8.4(typescript@5.1.6):
408 | resolution: {integrity: sha512-sioQfIY5xcmEAz+cPLvv6CtzGPtGhIdR0Za87zB8M4mPe4OSsE3MBGkXcslf+EzQgF+fm6Gr1SRMSX8r5ZmzDA==}
409 | dependencies:
410 | '@volar/typescript': 1.8.0
411 | '@vue/language-core': 1.8.4(typescript@5.1.6)
412 | transitivePeerDependencies:
413 | - typescript
414 | dev: true
415 |
416 | /ajv@6.12.6:
417 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
418 | dependencies:
419 | fast-deep-equal: 3.1.3
420 | fast-json-stable-stringify: 2.1.0
421 | json-schema-traverse: 0.4.1
422 | uri-js: 4.4.1
423 | dev: true
424 |
425 | /argparse@1.0.10:
426 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
427 | dependencies:
428 | sprintf-js: 1.0.3
429 | dev: true
430 |
431 | /balanced-match@1.0.2:
432 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
433 | dev: true
434 |
435 | /brace-expansion@2.0.1:
436 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
437 | dependencies:
438 | balanced-match: 1.0.2
439 | dev: true
440 |
441 | /colors@1.2.5:
442 | resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==}
443 | engines: {node: '>=0.1.90'}
444 | dev: true
445 |
446 | /commander@9.5.0:
447 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
448 | engines: {node: ^12.20.0 || >=14}
449 | requiresBuild: true
450 | dev: true
451 | optional: true
452 |
453 | /de-indent@1.0.2:
454 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
455 | dev: true
456 |
457 | /debug@4.3.4:
458 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
459 | engines: {node: '>=6.0'}
460 | peerDependencies:
461 | supports-color: '*'
462 | peerDependenciesMeta:
463 | supports-color:
464 | optional: true
465 | dependencies:
466 | ms: 2.1.2
467 | dev: true
468 |
469 | /esbuild@0.18.11:
470 | resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==}
471 | engines: {node: '>=12'}
472 | hasBin: true
473 | requiresBuild: true
474 | optionalDependencies:
475 | '@esbuild/android-arm': 0.18.11
476 | '@esbuild/android-arm64': 0.18.11
477 | '@esbuild/android-x64': 0.18.11
478 | '@esbuild/darwin-arm64': 0.18.11
479 | '@esbuild/darwin-x64': 0.18.11
480 | '@esbuild/freebsd-arm64': 0.18.11
481 | '@esbuild/freebsd-x64': 0.18.11
482 | '@esbuild/linux-arm': 0.18.11
483 | '@esbuild/linux-arm64': 0.18.11
484 | '@esbuild/linux-ia32': 0.18.11
485 | '@esbuild/linux-loong64': 0.18.11
486 | '@esbuild/linux-mips64el': 0.18.11
487 | '@esbuild/linux-ppc64': 0.18.11
488 | '@esbuild/linux-riscv64': 0.18.11
489 | '@esbuild/linux-s390x': 0.18.11
490 | '@esbuild/linux-x64': 0.18.11
491 | '@esbuild/netbsd-x64': 0.18.11
492 | '@esbuild/openbsd-x64': 0.18.11
493 | '@esbuild/sunos-x64': 0.18.11
494 | '@esbuild/win32-arm64': 0.18.11
495 | '@esbuild/win32-ia32': 0.18.11
496 | '@esbuild/win32-x64': 0.18.11
497 | dev: true
498 |
499 | /estree-walker@2.0.2:
500 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
501 | dev: true
502 |
503 | /fast-deep-equal@3.1.3:
504 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
505 | dev: true
506 |
507 | /fast-json-stable-stringify@2.1.0:
508 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
509 | dev: true
510 |
511 | /fs-extra@7.0.1:
512 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
513 | engines: {node: '>=6 <7 || >=8'}
514 | dependencies:
515 | graceful-fs: 4.2.11
516 | jsonfile: 4.0.0
517 | universalify: 0.1.2
518 | dev: true
519 |
520 | /fsevents@2.3.2:
521 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
522 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
523 | os: [darwin]
524 | requiresBuild: true
525 | dev: true
526 | optional: true
527 |
528 | /function-bind@1.1.1:
529 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
530 | dev: true
531 |
532 | /graceful-fs@4.2.11:
533 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
534 | dev: true
535 |
536 | /has@1.0.3:
537 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
538 | engines: {node: '>= 0.4.0'}
539 | dependencies:
540 | function-bind: 1.1.1
541 | dev: true
542 |
543 | /he@1.2.0:
544 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
545 | hasBin: true
546 | dev: true
547 |
548 | /import-lazy@4.0.0:
549 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
550 | engines: {node: '>=8'}
551 | dev: true
552 |
553 | /is-core-module@2.12.1:
554 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
555 | dependencies:
556 | has: 1.0.3
557 | dev: true
558 |
559 | /jju@1.4.0:
560 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
561 | dev: true
562 |
563 | /json-schema-traverse@0.4.1:
564 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
565 | dev: true
566 |
567 | /jsonfile@4.0.0:
568 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
569 | optionalDependencies:
570 | graceful-fs: 4.2.11
571 | dev: true
572 |
573 | /kolorist@1.8.0:
574 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
575 | dev: true
576 |
577 | /lodash.get@4.4.2:
578 | resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
579 | dev: true
580 |
581 | /lodash.isequal@4.5.0:
582 | resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
583 | dev: true
584 |
585 | /lodash@4.17.21:
586 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
587 | dev: true
588 |
589 | /lru-cache@6.0.0:
590 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
591 | engines: {node: '>=10'}
592 | dependencies:
593 | yallist: 4.0.0
594 | dev: true
595 |
596 | /minimatch@9.0.3:
597 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
598 | engines: {node: '>=16 || 14 >=14.17'}
599 | dependencies:
600 | brace-expansion: 2.0.1
601 | dev: true
602 |
603 | /ms@2.1.2:
604 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
605 | dev: true
606 |
607 | /muggle-string@0.3.1:
608 | resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
609 | dev: true
610 |
611 | /nanoid@3.3.6:
612 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
613 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
614 | hasBin: true
615 | dev: true
616 |
617 | /path-parse@1.0.7:
618 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
619 | dev: true
620 |
621 | /picocolors@1.0.0:
622 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
623 | dev: true
624 |
625 | /picomatch@2.3.1:
626 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
627 | engines: {node: '>=8.6'}
628 | dev: true
629 |
630 | /postcss@8.4.25:
631 | resolution: {integrity: sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==}
632 | engines: {node: ^10 || ^12 || >=14}
633 | dependencies:
634 | nanoid: 3.3.6
635 | picocolors: 1.0.0
636 | source-map-js: 1.0.2
637 | dev: true
638 |
639 | /preact@10.16.0:
640 | resolution: {integrity: sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==}
641 | dev: true
642 |
643 | /punycode@2.3.0:
644 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
645 | engines: {node: '>=6'}
646 | dev: true
647 |
648 | /resolve@1.19.0:
649 | resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
650 | dependencies:
651 | is-core-module: 2.12.1
652 | path-parse: 1.0.7
653 | dev: true
654 |
655 | /resolve@1.22.2:
656 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
657 | hasBin: true
658 | dependencies:
659 | is-core-module: 2.12.1
660 | path-parse: 1.0.7
661 | supports-preserve-symlinks-flag: 1.0.0
662 | dev: true
663 |
664 | /rollup@3.26.2:
665 | resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==}
666 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
667 | hasBin: true
668 | optionalDependencies:
669 | fsevents: 2.3.2
670 | dev: true
671 |
672 | /semver@7.3.8:
673 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
674 | engines: {node: '>=10'}
675 | hasBin: true
676 | dependencies:
677 | lru-cache: 6.0.0
678 | dev: true
679 |
680 | /semver@7.5.4:
681 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
682 | engines: {node: '>=10'}
683 | hasBin: true
684 | dependencies:
685 | lru-cache: 6.0.0
686 | dev: true
687 |
688 | /source-map-js@1.0.2:
689 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
690 | engines: {node: '>=0.10.0'}
691 | dev: true
692 |
693 | /source-map@0.6.1:
694 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
695 | engines: {node: '>=0.10.0'}
696 | dev: true
697 |
698 | /sprintf-js@1.0.3:
699 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
700 | dev: true
701 |
702 | /string-argv@0.3.2:
703 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
704 | engines: {node: '>=0.6.19'}
705 | dev: true
706 |
707 | /strip-json-comments@3.1.1:
708 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
709 | engines: {node: '>=8'}
710 | dev: true
711 |
712 | /supports-preserve-symlinks-flag@1.0.0:
713 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
714 | engines: {node: '>= 0.4'}
715 | dev: true
716 |
717 | /to-fast-properties@2.0.0:
718 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
719 | engines: {node: '>=4'}
720 | dev: true
721 |
722 | /typescript@5.0.4:
723 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
724 | engines: {node: '>=12.20'}
725 | hasBin: true
726 | dev: true
727 |
728 | /typescript@5.1.6:
729 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
730 | engines: {node: '>=14.17'}
731 | hasBin: true
732 | dev: true
733 |
734 | /universalify@0.1.2:
735 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
736 | engines: {node: '>= 4.0.0'}
737 | dev: true
738 |
739 | /uri-js@4.4.1:
740 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
741 | dependencies:
742 | punycode: 2.3.0
743 | dev: true
744 |
745 | /validator@13.9.0:
746 | resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==}
747 | engines: {node: '>= 0.10'}
748 | dev: true
749 |
750 | /vite-plugin-dts@3.2.0(typescript@5.1.6):
751 | resolution: {integrity: sha512-s+dwJvDcb/AWgb49oVbq9JiUSIMwaVpFfV4SVIaBZmv9OZyeyDGxujaq+z4HJ4LB4hUG5c4oRAJyLfV66c763Q==}
752 | engines: {node: ^14.18.0 || >=16.0.0}
753 | peerDependencies:
754 | typescript: '*'
755 | dependencies:
756 | '@microsoft/api-extractor': 7.36.1
757 | '@rollup/pluginutils': 5.0.2(rollup@3.26.2)
758 | '@rushstack/node-core-library': 3.59.5
759 | '@vue/language-core': 1.8.4(typescript@5.1.6)
760 | debug: 4.3.4
761 | kolorist: 1.8.0
762 | typescript: 5.1.6
763 | vue-tsc: 1.8.4(typescript@5.1.6)
764 | optionalDependencies:
765 | rollup: 3.26.2
766 | vite: 4.4.3
767 | transitivePeerDependencies:
768 | - '@types/node'
769 | - less
770 | - lightningcss
771 | - sass
772 | - stylus
773 | - sugarss
774 | - supports-color
775 | - terser
776 | dev: true
777 |
778 | /vite@4.4.3:
779 | resolution: {integrity: sha512-IMnXQXXWgLi5brBQx/4WzDxdzW0X3pjO4nqFJAuNvwKtxzAmPzFE1wszW3VDpAGQJm3RZkm/brzRdyGsnwgJIA==}
780 | engines: {node: ^14.18.0 || >=16.0.0}
781 | hasBin: true
782 | peerDependencies:
783 | '@types/node': '>= 14'
784 | less: '*'
785 | lightningcss: ^1.21.0
786 | sass: '*'
787 | stylus: '*'
788 | sugarss: '*'
789 | terser: ^5.4.0
790 | peerDependenciesMeta:
791 | '@types/node':
792 | optional: true
793 | less:
794 | optional: true
795 | lightningcss:
796 | optional: true
797 | sass:
798 | optional: true
799 | stylus:
800 | optional: true
801 | sugarss:
802 | optional: true
803 | terser:
804 | optional: true
805 | dependencies:
806 | esbuild: 0.18.11
807 | postcss: 8.4.25
808 | rollup: 3.26.2
809 | optionalDependencies:
810 | fsevents: 2.3.2
811 | dev: true
812 |
813 | /vue-template-compiler@2.7.14:
814 | resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
815 | dependencies:
816 | de-indent: 1.0.2
817 | he: 1.2.0
818 | dev: true
819 |
820 | /vue-tsc@1.8.4(typescript@5.1.6):
821 | resolution: {integrity: sha512-+hgpOhIx11vbi8/AxEdaPj3fiRwN9wy78LpsNNw2V995/IWa6TMyQxHbaw2ZKUpdwjySSHgrT6ohDEhUgFxGYw==}
822 | hasBin: true
823 | peerDependencies:
824 | typescript: '*'
825 | dependencies:
826 | '@vue/language-core': 1.8.4(typescript@5.1.6)
827 | '@vue/typescript': 1.8.4(typescript@5.1.6)
828 | semver: 7.5.4
829 | typescript: 5.1.6
830 | dev: true
831 |
832 | /yallist@4.0.0:
833 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
834 | dev: true
835 |
836 | /z-schema@5.0.5:
837 | resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
838 | engines: {node: '>=8.0.0'}
839 | hasBin: true
840 | dependencies:
841 | lodash.get: 4.4.2
842 | lodash.isequal: 4.5.0
843 | validator: 13.9.0
844 | optionalDependencies:
845 | commander: 9.5.0
846 | dev: true
847 |
--------------------------------------------------------------------------------