├── .gitignore
├── LICENSE
├── README.md
├── build
├── build-installer.js
└── build-server.js
├── electron
├── index.js
├── logger.js
├── preload.js
└── splash.html
├── package-lock.json
├── package.json
├── spring
├── .gitignore
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── demo
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller
│ │ │ └── ItemController.java
│ │ │ ├── model
│ │ │ └── Item.java
│ │ │ └── service
│ │ │ ├── ItemService.java
│ │ │ └── impl
│ │ │ └── ItemServiceImpl.java
│ └── resources
│ │ ├── application.properties
│ │ └── logback-spring.xml
│ └── test
│ └── java
│ └── com
│ └── example
│ └── demo
│ └── DemoApplicationTests.java
└── vue
├── .gitignore
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── public
└── favicon.ico
├── src
├── App.vue
├── assets
│ └── logo.png
├── env.d.ts
├── interop-fallback.ts
├── keys.ts
├── main.ts
└── types
│ ├── Interop.ts
│ └── Item.ts
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 | yarn-error.log
6 |
7 | # Editor directories and files
8 | .vscode
9 | .idea
10 | *.suo
11 | *.ntvs*
12 | *.njsproj
13 | *.sln
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Ruoyun Wu
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Electron-Vue-Spring
2 |
3 | > An opionated desktop application with web front-end and Java backend.
4 |
5 | In some cases, you may like to use Java backend for an Electron desktop app. The reasons could be you have some legacy Java codes that you want to reuse, or you want to have the same codes run on Cloud as well as on desktop.
6 |
7 | This project has two sub projects:
8 |
9 | 1. `vue`: a Vue 3 app in TypeScript as the front-end, based on the scaffold project created using Vite. You may also replace this project with a React or Angular project with similar design.
10 | 2. `spring`: a Spring Boot application as the backend, based on a Maven project created by [Spring Initializer](https://start.spring.io/) with Web dependency.
11 |
12 | Both Windows and Mac OS are supported.
13 |
14 | ## Prerequisites
15 |
16 | - JDK 11, such as [Amazon Corretto 11](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html)
17 | - Node 14.x
18 | - Maven 3.x
19 |
20 | > NOTE: This project uses your system Java to run the spring web app. If you prefer to bundle JRE into the app, configure the `extraFiles` of Electron Builder to copy it when making the installer.
21 |
22 | ## Build Installer
23 |
24 | Build the final installer, which can be found in folder `dist`. It is an `exe` file for Windows and `dmg` file for Mac.
25 |
26 | ```bash
27 | # install dependencies
28 | npm install
29 |
30 | # install dependencies for vue project
31 | cd vue
32 | npm install
33 | cd ..
34 |
35 | # build installer for production
36 | npm run build
37 | ```
38 |
39 | ## Development Setup
40 |
41 | During development, you may work on front-end and backend separately with independent tools, such as using Visual Studio Code for front-end and IntelliJ for backend. Note that the front-end `vue` project has its own `package.json` so it can be built independently.
42 |
43 | - To run backend, import the Maven project into your favorite Java IDE and launch from there. The embedded Tomcat server will be running on port `8080`.
44 | - To run front-end, run `npm run dev` in `vue` folder. Vite will run a server on port `9000` with hot reload. It is configured to proxy `actuator/health` and `api` URL to port `8080`.
45 | - To run the Electron part, run `npm run start` in root folder. The Electron app loads the home page at `http://localhost:9000`, therefore you should run both backend and front-end first.
46 |
47 | ## How it works
48 |
49 | The main idea is to use Electron as a browser, and the front-end and backend of the app work as a web app. It might not be a common design, but is helpful in some cases.
50 |
51 | The backend is a typical Spring Boot app, serving API to the front-end. The front-end is a typical Vue app, consuming API from the backend.
52 |
53 | ### Build process
54 |
55 | When building the final desktop app installer:
56 |
57 | 1. Front-end is built first. The final artifacts, including `index.html` and JavaScript files, are copied into `spring/src/main/resources/public` folder.
58 | 2. Backend is built second. It creates a web app with the front-end artifacts created above and an executable jar.
59 | 3. Electron installer is built last. It includes the web app created above in the bundle and creates an executable installer.
60 |
61 | However, both `vue` sub project and `spring` sub project are free of Electron and can be built independently without building the Electron part. They can be deployed online, instead of packaged into Electron app, allowing you to use the same code base for online and desktop deployment.
62 |
63 | ### Launch process
64 |
65 | When launching the Electron app:
66 |
67 | 1. Electron app detects an available port and starts the backend server with Node `child_process` at the specified port. The PID of the server process is kept to potentially kill the process before quiting the app.
68 | 2. Electron app then displays a splash window, at the same time pings the `actuator/health` URL of the backend server periodically.
69 | 3. Once the `actuator/health` ping returns OK (the web app is up), Electron app closes the splash window and open a new window to load the home page of the web app.
70 |
71 | > The Electron app starts the backend server only in production build. During development, you will need to manually start the front-end dev server as mentioned earlier.
72 |
73 | ### Shutdown process
74 |
75 | When shutting down the Electron app:
76 |
77 | 1. Electron app handles the `will-quit` event by trying to stop the backend server and cancel the quit.
78 | 2. The first attempt is to shutdown gracefully via the `actuator/shutdown` URL of the backend server.
79 | 3. If that fails, the Electron app will attempt to kill the process by its PID.
80 | 4. Either of the shutsown attempts above will clear up the `baseUrl` and call `app.quit()` again.
81 | 5. With `baseUrl` being cleared, `will-quit` handler will not prevent the quitting this time.
82 |
83 | ### Node access
84 |
85 | Although the Java backend is running locally, it is more secure to load the page with Node integration disabled (defualt behavior). This prevents third-party JavaScript libraries used by your web app from accessing Node directly, and mitigates the risk if your app navigates to external website.
86 |
87 | The access to Node can be selectively re-introduced back to the web app via [preload.js](electron/preload.js), which defines a set of API on a global `window.interop` object. This object is provided by the Vue app instance in [main.ts](vue/src/main.ts) for injection into Vue components via key `KEY_INTEROP`. This allows any UI component to call the API.
88 |
89 | ### Log Aggregation
90 |
91 | The log messages from Electron, Vue and Spring apps are aggregated into the [electron logger](https://www.npmjs.com/package/electron-log) in Electron app. By default it writes logs to the following locations:
92 |
93 | - on Linux: `~/.config/{app name}/logs/{process type}.log`
94 | - on macOS: `~/Library/Logs/{app name}/{process type}.log`
95 | - on Windows: `%USERPROFILE%\AppData\Roaming\{app name}\logs\{process type}.log`
96 |
97 | In the Vue app, the electron logger is wrapped by the `log` property of `window.interop` object. This `log` object is provided by Vue app instance in [main.ts](vue/src/main.ts) for injection into Vue components via key `KEY_LOG`. Calling `$log.info(...)` will send the log messages (after attaching a prefix to identify it is from UI) to electron logger. Other logging level works in the same way.
98 |
99 | In the Spring app, `logback-spring.xml` configuration sends the log to console, which is the standard output received by the Electron app. The logback message pattern put the log level (`INFO`, `DEBUG`, etc.) at the begining of the message so that Electron app checks and calls the corresponding function (`info`, `debug`, etc.) on the electron logger.
100 |
101 | ## License
102 |
103 | [MIT](LICENSE)
104 |
--------------------------------------------------------------------------------
/build/build-installer.js:
--------------------------------------------------------------------------------
1 | const shell = require('shelljs')
2 |
3 | shell.echo('##########################')
4 | shell.echo('# Building electron #')
5 | shell.echo('##########################')
6 |
7 | if (!shell.test('-e', 'spring/target')) {
8 | shell.echo('Error: server is not built yet.')
9 | shell.exit(1)
10 | }
11 |
12 | shell.rm('-rf', 'dist')
13 | if (shell.exec('electron-builder build').code !== 0) {
14 | shell.echo('Error: electron build failed')
15 | shell.exit(1)
16 | }
17 |
--------------------------------------------------------------------------------
/build/build-server.js:
--------------------------------------------------------------------------------
1 | const shell = require('shelljs')
2 |
3 | shell.echo('##########################')
4 | shell.echo('# Building vue #')
5 | shell.echo('##########################')
6 |
7 | shell.cd('vue')
8 | const PUBLIC = '../spring/src/main/resources/public/'
9 | shell.rm('-rf', PUBLIC);
10 | if (shell.exec('npm run build').code !== 0) {
11 | shell.echo('Error: vue build failed')
12 | shell.exit(1)
13 | }
14 | shell.cp('-R', 'dist/', PUBLIC)
15 | shell.cd('..')
16 |
17 | shell.echo('##########################')
18 | shell.echo('# Building spring #')
19 | shell.echo('##########################')
20 |
21 | shell.cd('spring')
22 | const mvnw = process.platform === 'win32' ? 'mvnw' : './mvnw'
23 | if (shell.exec(mvnw + ' clean package').code !== 0) {
24 | shell.echo('Error: spring build failed')
25 | shell.exit(1)
26 | }
27 |
--------------------------------------------------------------------------------
/electron/index.js:
--------------------------------------------------------------------------------
1 | const { app, ipcMain, BrowserWindow, dialog } = require('electron')
2 | const path = require('path')
3 | const url = require('url')
4 | var findPort = require('find-free-port')
5 | const isDev = require('electron-is-dev')
6 | const logger = require('./logger')
7 | const axios = require('axios')
8 |
9 | const JAR = 'spring-1.0.0.jar' // how to avoid manual update of this?
10 | const MAX_CHECK_COUNT = 10
11 |
12 | // Keep a global reference of the window object, if you don't, the window will
13 | // be closed automatically when the JavaScript object is garbage collected.
14 | let mainWindow
15 |
16 | // The server url and process
17 | let serverProcess
18 | let baseUrl
19 |
20 | function startServer(port) {
21 | logger.info(`Starting server at port ${port}`)
22 |
23 | const server = `${path.join(app.getAppPath(), '..', '..', JAR)}`
24 | logger.info(`Launching server with jar ${server} at port ${port}...`)
25 |
26 | serverProcess = require('child_process').spawn('java', [
27 | '-jar',
28 | server,
29 | `--server.port=${port}`,
30 | ])
31 |
32 | serverProcess.stdout.on('data', logger.server)
33 |
34 | if (serverProcess.pid) {
35 | baseUrl = `http://localhost:${port}`
36 | logger.info('Server PID: ' + serverProcess.pid)
37 | } else {
38 | logger.error('Failed to launch server process.')
39 | }
40 | }
41 |
42 | function stopServer() {
43 | logger.info('Stopping server...')
44 | axios
45 | .post(`${baseUrl}/actuator/shutdown`, null, {
46 | headers: { 'Content-Type': 'application/json' },
47 | })
48 | .then(() => logger.info('Server stopped'))
49 | .catch((error) => {
50 | logger.error('Failed to stop the server gracefully.', error)
51 | if (serverProcess) {
52 | logger.info(`Killing server process ${serverProcess.pid}`)
53 | const kill = require('tree-kill')
54 | kill(serverProcess.pid, 'SIGTERM', function (err) {
55 | logger.info('Server process killed')
56 | serverProcess = null
57 | baseUrl = null
58 | app.quit() // quit again
59 | })
60 | }
61 | })
62 | .finally(() => {
63 | serverProcess = null
64 | baseUrl = null
65 | app.quit() // quit again
66 | })
67 | }
68 |
69 | function createSplash() {
70 | const splash = new BrowserWindow({ width: 400, height: 300, frame: false })
71 | splash.loadURL(
72 | url.format({
73 | pathname: path.join(__dirname, 'splash.html'),
74 | protocol: 'file:',
75 | slashes: true,
76 | })
77 | )
78 | return splash
79 | }
80 |
81 | function createWindow(callback) {
82 | mainWindow = new BrowserWindow({
83 | width: 800,
84 | height: 600,
85 | show: false, // hide until ready-to-show
86 | webPreferences: {
87 | preload: path.join(__dirname, 'preload.js'),
88 | },
89 | })
90 |
91 | loadHomePage()
92 |
93 | // Open the DevTools.
94 | // mainWindow.webContents.openDevTools()
95 |
96 | mainWindow.once('ready-to-show', () => {
97 | mainWindow.show()
98 | if (callback) callback()
99 | })
100 |
101 | // Emitted when the window is closed.
102 | mainWindow.on('closed', function () {
103 | // Dereference the window object, usually you would store windows
104 | // in an array if your app supports multi windows, this is the time
105 | // when you should delete the corresponding element.
106 | mainWindow = null
107 | })
108 | }
109 |
110 | function quitOnError(title, content) {
111 | logger.error(content)
112 | dialog.showErrorBox(title, content)
113 | app.quit()
114 | }
115 |
116 | function loadHomePage() {
117 | logger.info(`Loading home page at ${baseUrl}`)
118 | // check server health and switch to main page
119 | checkCount = 0
120 | setTimeout(function cycle() {
121 | axios
122 | .get(`${baseUrl}/actuator/health`)
123 | .then(() => mainWindow.loadURL(`${baseUrl}?_=${Date.now()}`))
124 | .catch((e) => {
125 | if (e.code === 'ECONNREFUSED') {
126 | if (checkCount < MAX_CHECK_COUNT) {
127 | checkCount++
128 | setTimeout(cycle, 1000)
129 | } else {
130 | quitOnError(
131 | 'Server timeout',
132 | `UI does not receive server response for ${MAX_CHECK_COUNT} seconds.`
133 | )
134 | app.quit()
135 | }
136 | } else {
137 | logger.error(e)
138 | quitOnError('Server error', 'UI receives an error from server.')
139 | }
140 | })
141 | }, 200)
142 | }
143 |
144 | // This method will be called when Electron has finished
145 | // initialization and is ready to create browser windows.
146 | // Some APIs can only be used after this event occurs.
147 | app.whenReady().then(() => {
148 | logger.info('###################################################')
149 | logger.info('# Application Starting #')
150 | logger.info('###################################################')
151 |
152 | // handle messages from ipcRenderer via preload.js
153 | ipcMain.on('app:badgeCount', (_, count) => app.setBadgeCount(count))
154 | ipcMain.handle('dialog:openFile', () => dialog.showOpenDialogSync())
155 | ipcMain.handle('dialog:saveFile', () => dialog.showSaveDialogSync())
156 |
157 | if (isDev) {
158 | // Assume the webpack dev server is up at port 9000
159 | baseUrl = `http://localhost:9000`
160 | createWindow()
161 | } else {
162 | // Create window first to show splash before starting server
163 | const splash = createSplash()
164 |
165 | // Start server at an available port (prefer 8080)
166 | findPort(8080, function (err, port) {
167 | if (!err) {
168 | startServer(port)
169 | createWindow(() => splash.close())
170 | } else {
171 | quitOnError('Error', 'Unable to get a server port.')
172 | }
173 | })
174 | }
175 | })
176 |
177 | // Quit when all windows are closed.
178 | app.on('window-all-closed', function () {
179 | // On OS X it is common for applications and their menu bar
180 | // to stay active until the user quits explicitly with Cmd + Q
181 | if (process.platform !== 'darwin') {
182 | app.quit()
183 | }
184 | })
185 |
186 | app.on('activate', function () {
187 | // On OS X it's common to re-create a window in the app when the
188 | // dock icon is clicked and there are no other windows open.
189 | if (mainWindow === null) {
190 | createWindow()
191 | }
192 | })
193 |
194 | app.on('will-quit', (e) => {
195 | if (!isDev && baseUrl != null) {
196 | stopServer()
197 | e.preventDefault() // will quite later after stopped the server
198 | }
199 | })
200 | // In this file you can include the rest of your app's specific main process
201 | // code. You can also put them in separate files and require them here.
202 |
--------------------------------------------------------------------------------
/electron/logger.js:
--------------------------------------------------------------------------------
1 | const logger = require('electron-log')
2 |
3 | logger.server = function (data) {
4 | // data is from server std.out and may includes multiple lines
5 | const messages = data.toString().split('\n')
6 | messages.forEach((msg) => {
7 | if (msg.length > 0) {
8 | if (msg.startsWith('INFO')) logger.info(msg.substring(6))
9 | else if (msg.startsWith('WARN')) logger.warn(msg.substring(6))
10 | else if (msg.startsWith('ERROR')) logger.error(msg.substring(6))
11 | else if (msg.startsWith('DEBUG')) logger.debug(msg.substring(6))
12 | else logger.silly(msg)
13 | }
14 | })
15 | }
16 |
17 | module.exports = logger
18 |
--------------------------------------------------------------------------------
/electron/preload.js:
--------------------------------------------------------------------------------
1 | const { app, contextBridge, ipcRenderer } = require('electron')
2 | const logger = require('./logger')
3 |
4 | const LOG_PREFIX = '[ui]'
5 |
6 | contextBridge.exposeInMainWorld('interop', {
7 | log: {
8 | info(msg) {
9 | logger.info(`${LOG_PREFIX} ${msg}`)
10 | },
11 | debug(msg) {
12 | logger.debug(`${LOG_PREFIX} ${msg}`)
13 | },
14 | warn(msg) {
15 | logger.warn(`${LOG_PREFIX} ${msg}`)
16 | },
17 | error(msg) {
18 | logger.error(`${LOG_PREFIX} ${msg}`)
19 | },
20 | log(msg) {
21 | logger.silly(`${LOG_PREFIX} ${msg}`)
22 | },
23 | },
24 | setBadgeCount(count) {
25 | return ipcRenderer.send('app:badgeCount', count)
26 | },
27 | showOpenDialog() {
28 | return ipcRenderer.invoke('dialog:openFile')
29 | },
30 | showSaveDialog() {
31 | return ipcRenderer.invoke('dialog:saveFile')
32 | },
33 | })
34 |
--------------------------------------------------------------------------------
/electron/splash.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Electron-Vue-Spring
6 |
7 |
14 |
15 | Splash Screen
16 | Starting server, please wait...
17 |
18 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "electron-vue-spring",
3 | "version": "1.0.0",
4 | "description": "A minimal starter project for using Electron, Vue and Spring.",
5 | "author": "Wu, Ruoyun",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/wuruoyun/electron-vue-spring.git"
9 | },
10 | "main": "electron/index.js",
11 | "scripts": {
12 | "start": "electron ./electron",
13 | "build-server": "node build/build-server.js",
14 | "build-installer": "node build/build-installer.js",
15 | "build": "npm-run-all clean build-server build-installer",
16 | "clean": "rimraf dist"
17 | },
18 | "license": "MIT",
19 | "build": {
20 | "appId": "electron-vue-spring",
21 | "files": [
22 | "electron/**/*",
23 | "node_modules/**/*",
24 | "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}",
25 | "!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}",
26 | "!**/node_modules/*.d.ts",
27 | "!**/node_modules/.bin",
28 | "!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}",
29 | "!.editorconfig",
30 | "!**/._*",
31 | "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}",
32 | "!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}",
33 | "!**/{appveyor.yml,.travis.yml,circle.yml}",
34 | "!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}"
35 | ],
36 | "extraFiles": [
37 | {
38 | "from": "spring/target",
39 | "filter": [
40 | "*.jar"
41 | ]
42 | }
43 | ]
44 | },
45 | "devDependencies": {
46 | "electron": "^18.0.3",
47 | "electron-builder": "^22.14.13",
48 | "npm-run-all": "^4.1.5",
49 | "rimraf": "^3.0.2",
50 | "shelljs": "^0.8.5"
51 | },
52 | "dependencies": {
53 | "axios": "^0.26.1",
54 | "electron-is-dev": "^2.0.0",
55 | "electron-log": "^4.4.6",
56 | "find-free-port": "^2.0.0",
57 | "tree-kill": "^1.2.2"
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/spring/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### public folder is from external SPA ###
5 | src/main/resources/public
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 |
15 | ### IntelliJ IDEA ###
16 | .idea
17 | *.iws
18 | *.iml
19 | *.ipr
20 |
21 | ### NetBeans ###
22 | nbproject/private/
23 | build/
24 | nbbuild/
25 | dist/
26 | nbdist/
27 | .nb-gradle/
28 |
29 | ### Eclipse ###
30 | .settings
31 | .classpath
32 | .project
--------------------------------------------------------------------------------
/spring/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wuruoyun/electron-vue-spring/42eccb72578bb45e0512658504f144928cb3ab27/spring/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/spring/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
2 |
--------------------------------------------------------------------------------
/spring/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Maven2 Start Up Batch script
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # M2_HOME - location of maven2's installed home dir
31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32 | # e.g. to debug Maven itself, use
33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35 | # ----------------------------------------------------------------------------
36 |
37 | if [ -z "$MAVEN_SKIP_RC" ] ; then
38 |
39 | if [ -f /etc/mavenrc ] ; then
40 | . /etc/mavenrc
41 | fi
42 |
43 | if [ -f "$HOME/.mavenrc" ] ; then
44 | . "$HOME/.mavenrc"
45 | fi
46 |
47 | fi
48 |
49 | # OS specific support. $var _must_ be set to either true or false.
50 | cygwin=false;
51 | darwin=false;
52 | mingw=false
53 | case "`uname`" in
54 | CYGWIN*) cygwin=true ;;
55 | MINGW*) mingw=true;;
56 | Darwin*) darwin=true
57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59 | if [ -z "$JAVA_HOME" ]; then
60 | if [ -x "/usr/libexec/java_home" ]; then
61 | export JAVA_HOME="`/usr/libexec/java_home`"
62 | else
63 | export JAVA_HOME="/Library/Java/Home"
64 | fi
65 | fi
66 | ;;
67 | esac
68 |
69 | if [ -z "$JAVA_HOME" ] ; then
70 | if [ -r /etc/gentoo-release ] ; then
71 | JAVA_HOME=`java-config --jre-home`
72 | fi
73 | fi
74 |
75 | if [ -z "$M2_HOME" ] ; then
76 | ## resolve links - $0 may be a link to maven's home
77 | PRG="$0"
78 |
79 | # need this for relative symlinks
80 | while [ -h "$PRG" ] ; do
81 | ls=`ls -ld "$PRG"`
82 | link=`expr "$ls" : '.*-> \(.*\)$'`
83 | if expr "$link" : '/.*' > /dev/null; then
84 | PRG="$link"
85 | else
86 | PRG="`dirname "$PRG"`/$link"
87 | fi
88 | done
89 |
90 | saveddir=`pwd`
91 |
92 | M2_HOME=`dirname "$PRG"`/..
93 |
94 | # make it fully qualified
95 | M2_HOME=`cd "$M2_HOME" && pwd`
96 |
97 | cd "$saveddir"
98 | # echo Using m2 at $M2_HOME
99 | fi
100 |
101 | # For Cygwin, ensure paths are in UNIX format before anything is touched
102 | if $cygwin ; then
103 | [ -n "$M2_HOME" ] &&
104 | M2_HOME=`cygpath --unix "$M2_HOME"`
105 | [ -n "$JAVA_HOME" ] &&
106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107 | [ -n "$CLASSPATH" ] &&
108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109 | fi
110 |
111 | # For Migwn, ensure paths are in UNIX format before anything is touched
112 | if $mingw ; then
113 | [ -n "$M2_HOME" ] &&
114 | M2_HOME="`(cd "$M2_HOME"; pwd)`"
115 | [ -n "$JAVA_HOME" ] &&
116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117 | # TODO classpath?
118 | fi
119 |
120 | if [ -z "$JAVA_HOME" ]; then
121 | javaExecutable="`which javac`"
122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
123 | # readlink(1) is not available as standard on Solaris 10.
124 | readLink=`which readlink`
125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
126 | if $darwin ; then
127 | javaHome="`dirname \"$javaExecutable\"`"
128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
129 | else
130 | javaExecutable="`readlink -f \"$javaExecutable\"`"
131 | fi
132 | javaHome="`dirname \"$javaExecutable\"`"
133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'`
134 | JAVA_HOME="$javaHome"
135 | export JAVA_HOME
136 | fi
137 | fi
138 | fi
139 |
140 | if [ -z "$JAVACMD" ] ; then
141 | if [ -n "$JAVA_HOME" ] ; then
142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
143 | # IBM's JDK on AIX uses strange locations for the executables
144 | JAVACMD="$JAVA_HOME/jre/sh/java"
145 | else
146 | JAVACMD="$JAVA_HOME/bin/java"
147 | fi
148 | else
149 | JAVACMD="`which java`"
150 | fi
151 | fi
152 |
153 | if [ ! -x "$JAVACMD" ] ; then
154 | echo "Error: JAVA_HOME is not defined correctly." >&2
155 | echo " We cannot execute $JAVACMD" >&2
156 | exit 1
157 | fi
158 |
159 | if [ -z "$JAVA_HOME" ] ; then
160 | echo "Warning: JAVA_HOME environment variable is not set."
161 | fi
162 |
163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
164 |
165 | # traverses directory structure from process work directory to filesystem root
166 | # first directory with .mvn subdirectory is considered project base directory
167 | find_maven_basedir() {
168 |
169 | if [ -z "$1" ]
170 | then
171 | echo "Path not specified to find_maven_basedir"
172 | return 1
173 | fi
174 |
175 | basedir="$1"
176 | wdir="$1"
177 | while [ "$wdir" != '/' ] ; do
178 | if [ -d "$wdir"/.mvn ] ; then
179 | basedir=$wdir
180 | break
181 | fi
182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
183 | if [ -d "${wdir}" ]; then
184 | wdir=`cd "$wdir/.."; pwd`
185 | fi
186 | # end of workaround
187 | done
188 | echo "${basedir}"
189 | }
190 |
191 | # concatenates all lines of a file
192 | concat_lines() {
193 | if [ -f "$1" ]; then
194 | echo "$(tr -s '\n' ' ' < "$1")"
195 | fi
196 | }
197 |
198 | BASE_DIR=`find_maven_basedir "$(pwd)"`
199 | if [ -z "$BASE_DIR" ]; then
200 | exit 1;
201 | fi
202 |
203 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
204 | echo $MAVEN_PROJECTBASEDIR
205 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
206 |
207 | # For Cygwin, switch paths to Windows format before running java
208 | if $cygwin; then
209 | [ -n "$M2_HOME" ] &&
210 | M2_HOME=`cygpath --path --windows "$M2_HOME"`
211 | [ -n "$JAVA_HOME" ] &&
212 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
213 | [ -n "$CLASSPATH" ] &&
214 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
215 | [ -n "$MAVEN_PROJECTBASEDIR" ] &&
216 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
217 | fi
218 |
219 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
220 |
221 | exec "$JAVACMD" \
222 | $MAVEN_OPTS \
223 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
224 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
225 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
226 |
--------------------------------------------------------------------------------
/spring/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM http://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven2 Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
40 |
41 | @REM set %HOME% to equivalent of $HOME
42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
43 |
44 | @REM Execute a user defined script before this one
45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
49 | :skipRcPre
50 |
51 | @setlocal
52 |
53 | set ERROR_CODE=0
54 |
55 | @REM To isolate internal variables from possible post scripts, we use another setlocal
56 | @setlocal
57 |
58 | @REM ==== START VALIDATION ====
59 | if not "%JAVA_HOME%" == "" goto OkJHome
60 |
61 | echo.
62 | echo Error: JAVA_HOME not found in your environment. >&2
63 | echo Please set the JAVA_HOME variable in your environment to match the >&2
64 | echo location of your Java installation. >&2
65 | echo.
66 | goto error
67 |
68 | :OkJHome
69 | if exist "%JAVA_HOME%\bin\java.exe" goto init
70 |
71 | echo.
72 | echo Error: JAVA_HOME is set to an invalid directory. >&2
73 | echo JAVA_HOME = "%JAVA_HOME%" >&2
74 | echo Please set the JAVA_HOME variable in your environment to match the >&2
75 | echo location of your Java installation. >&2
76 | echo.
77 | goto error
78 |
79 | @REM ==== END VALIDATION ====
80 |
81 | :init
82 |
83 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
84 | @REM Fallback to current working directory if not found.
85 |
86 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
87 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
88 |
89 | set EXEC_DIR=%CD%
90 | set WDIR=%EXEC_DIR%
91 | :findBaseDir
92 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
93 | cd ..
94 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
95 | set WDIR=%CD%
96 | goto findBaseDir
97 |
98 | :baseDirFound
99 | set MAVEN_PROJECTBASEDIR=%WDIR%
100 | cd "%EXEC_DIR%"
101 | goto endDetectBaseDir
102 |
103 | :baseDirNotFound
104 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
105 | cd "%EXEC_DIR%"
106 |
107 | :endDetectBaseDir
108 |
109 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
110 |
111 | @setlocal EnableExtensions EnableDelayedExpansion
112 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
113 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
114 |
115 | :endReadAdditionalConfig
116 |
117 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
118 |
119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
121 |
122 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
123 | if ERRORLEVEL 1 goto error
124 | goto end
125 |
126 | :error
127 | set ERROR_CODE=1
128 |
129 | :end
130 | @endlocal & set ERROR_CODE=%ERROR_CODE%
131 |
132 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
133 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
134 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
135 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
136 | :skipRcPost
137 |
138 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
139 | if "%MAVEN_BATCH_PAUSE%" == "on" pause
140 |
141 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
142 |
143 | exit /B %ERROR_CODE%
144 |
--------------------------------------------------------------------------------
/spring/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.example
7 | spring
8 | 1.0.0
9 | jar
10 |
11 | spring
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 2.6.6
18 |
19 |
20 |
21 |
22 | 11
23 |
24 |
25 |
26 | org.springframework.boot
27 | spring-boot-starter-actuator
28 |
29 |
30 | org.springframework.boot
31 | spring-boot-starter-web
32 |
33 |
34 |
35 | org.springframework.boot
36 | spring-boot-starter-test
37 | test
38 |
39 |
40 |
41 |
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-maven-plugin
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/spring/src/main/java/com/example/demo/DemoApplication.java:
--------------------------------------------------------------------------------
1 | package com.example.demo;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class DemoApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(DemoApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/spring/src/main/java/com/example/demo/controller/ItemController.java:
--------------------------------------------------------------------------------
1 | package com.example.demo.controller;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | import com.example.demo.model.Item;
10 | import com.example.demo.service.ItemService;
11 |
12 | @RestController
13 | @RequestMapping("/api")
14 | public class ItemController {
15 |
16 | @Autowired
17 | private ItemService itemService;
18 |
19 | @RequestMapping("/items")
20 | public List- getItems() {
21 | return itemService.getItems();
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring/src/main/java/com/example/demo/model/Item.java:
--------------------------------------------------------------------------------
1 | package com.example.demo.model;
2 |
3 | public class Item {
4 |
5 | private long id;
6 |
7 | private String name;
8 |
9 | public Item() {
10 | }
11 |
12 | public Item(long id, String name) {
13 | this.id = id;
14 | this.name = name;
15 | }
16 |
17 | public long getId() {
18 | return id;
19 | }
20 |
21 | public void setId(long id) {
22 | this.id = id;
23 | }
24 |
25 | public String getName() {
26 | return name;
27 | }
28 |
29 | public void setName(String name) {
30 | this.name = name;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/spring/src/main/java/com/example/demo/service/ItemService.java:
--------------------------------------------------------------------------------
1 | package com.example.demo.service;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.stereotype.Service;
6 |
7 | import com.example.demo.model.Item;
8 |
9 | public interface ItemService {
10 |
11 | List
- getItems();
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/spring/src/main/java/com/example/demo/service/impl/ItemServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.example.demo.service.impl;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.example.demo.model.Item;
9 | import com.example.demo.service.ItemService;
10 |
11 | @Service("itemService")
12 | public class ItemServiceImpl implements ItemService {
13 |
14 | private List
- items = new ArrayList<>();
15 |
16 | public ItemServiceImpl() {
17 | items.add(new Item(0, "Item 1"));
18 | items.add(new Item(1, "Item 2"));
19 | items.add(new Item(2, "Item 3"));
20 | }
21 |
22 | @Override
23 | public List
- getItems() {
24 | return items;
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/spring/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | management.endpoints.web.exposure.include=*
2 | management.endpoint.shutdown.enabled=true
3 | endpoints.shutdown.enabled=true
--------------------------------------------------------------------------------
/spring/src/main/resources/logback-spring.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
9 |
10 | %-5level [%thread] %logger{32} - %msg%n
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/spring/src/test/java/com/example/demo/DemoApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.example.demo;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class DemoApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/vue/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/vue/README.md:
--------------------------------------------------------------------------------
1 | # front-end
2 |
3 | ## Project setup
4 |
5 | ```
6 | npm install
7 | ```
8 |
9 | ## Compiles and hot-reloads for development
10 |
11 | ```
12 | npm run dev
13 | ```
14 |
15 | ## Compiles and minifies for production
16 |
17 | ```
18 | npm run build
19 | ```
20 |
--------------------------------------------------------------------------------
/vue/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/vue/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-project",
3 | "version": "0.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vite-project",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "@vueuse/core": "^8.2.5",
12 | "vue": "^3.2.25"
13 | },
14 | "devDependencies": {
15 | "@vitejs/plugin-vue": "^2.3.0",
16 | "typescript": "^4.5.4",
17 | "vite": "^2.9.0",
18 | "vue-tsc": "^0.29.8"
19 | }
20 | },
21 | "node_modules/@babel/helper-validator-identifier": {
22 | "version": "7.16.7",
23 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
24 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
25 | "dev": true,
26 | "engines": {
27 | "node": ">=6.9.0"
28 | }
29 | },
30 | "node_modules/@babel/parser": {
31 | "version": "7.17.9",
32 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
33 | "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
34 | "bin": {
35 | "parser": "bin/babel-parser.js"
36 | },
37 | "engines": {
38 | "node": ">=6.0.0"
39 | }
40 | },
41 | "node_modules/@babel/types": {
42 | "version": "7.17.0",
43 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
44 | "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
45 | "dev": true,
46 | "dependencies": {
47 | "@babel/helper-validator-identifier": "^7.16.7",
48 | "to-fast-properties": "^2.0.0"
49 | },
50 | "engines": {
51 | "node": ">=6.9.0"
52 | }
53 | },
54 | "node_modules/@emmetio/abbreviation": {
55 | "version": "2.2.3",
56 | "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
57 | "integrity": "sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==",
58 | "dev": true,
59 | "dependencies": {
60 | "@emmetio/scanner": "^1.0.0"
61 | }
62 | },
63 | "node_modules/@emmetio/css-abbreviation": {
64 | "version": "2.1.4",
65 | "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz",
66 | "integrity": "sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==",
67 | "dev": true,
68 | "dependencies": {
69 | "@emmetio/scanner": "^1.0.0"
70 | }
71 | },
72 | "node_modules/@emmetio/scanner": {
73 | "version": "1.0.0",
74 | "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.0.tgz",
75 | "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==",
76 | "dev": true
77 | },
78 | "node_modules/@vitejs/plugin-vue": {
79 | "version": "2.3.1",
80 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.1.tgz",
81 | "integrity": "sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==",
82 | "dev": true,
83 | "engines": {
84 | "node": ">=12.0.0"
85 | },
86 | "peerDependencies": {
87 | "vite": "^2.5.10",
88 | "vue": "^3.2.25"
89 | }
90 | },
91 | "node_modules/@volar/code-gen": {
92 | "version": "0.29.8",
93 | "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.29.8.tgz",
94 | "integrity": "sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==",
95 | "dev": true,
96 | "dependencies": {
97 | "@volar/shared": "0.29.8",
98 | "@volar/source-map": "0.29.8"
99 | }
100 | },
101 | "node_modules/@volar/html2pug": {
102 | "version": "0.29.8",
103 | "resolved": "https://registry.npmjs.org/@volar/html2pug/-/html2pug-0.29.8.tgz",
104 | "integrity": "sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==",
105 | "dev": true,
106 | "dependencies": {
107 | "domelementtype": "^2.2.0",
108 | "domhandler": "^4.2.2",
109 | "htmlparser2": "^7.1.2",
110 | "pug": "^3.0.2"
111 | }
112 | },
113 | "node_modules/@volar/shared": {
114 | "version": "0.29.8",
115 | "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.29.8.tgz",
116 | "integrity": "sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==",
117 | "dev": true,
118 | "dependencies": {
119 | "upath": "^2.0.1",
120 | "vscode-jsonrpc": "^8.0.0-next.2",
121 | "vscode-uri": "^3.0.2"
122 | }
123 | },
124 | "node_modules/@volar/source-map": {
125 | "version": "0.29.8",
126 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.29.8.tgz",
127 | "integrity": "sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==",
128 | "dev": true,
129 | "dependencies": {
130 | "@volar/shared": "0.29.8"
131 | }
132 | },
133 | "node_modules/@volar/transforms": {
134 | "version": "0.29.8",
135 | "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.29.8.tgz",
136 | "integrity": "sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==",
137 | "dev": true,
138 | "dependencies": {
139 | "@volar/shared": "0.29.8",
140 | "vscode-languageserver": "^8.0.0-next.2"
141 | }
142 | },
143 | "node_modules/@volar/vue-code-gen": {
144 | "version": "0.29.8",
145 | "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.29.8.tgz",
146 | "integrity": "sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==",
147 | "dev": true,
148 | "dependencies": {
149 | "@volar/code-gen": "0.29.8",
150 | "@volar/shared": "0.29.8",
151 | "@volar/source-map": "0.29.8",
152 | "@vue/compiler-core": "^3.2.21",
153 | "@vue/compiler-dom": "^3.2.21",
154 | "@vue/shared": "^3.2.21",
155 | "upath": "^2.0.1"
156 | }
157 | },
158 | "node_modules/@vscode/emmet-helper": {
159 | "version": "2.8.4",
160 | "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz",
161 | "integrity": "sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg==",
162 | "dev": true,
163 | "dependencies": {
164 | "emmet": "^2.3.0",
165 | "jsonc-parser": "^2.3.0",
166 | "vscode-languageserver-textdocument": "^1.0.1",
167 | "vscode-languageserver-types": "^3.15.1",
168 | "vscode-nls": "^5.0.0",
169 | "vscode-uri": "^2.1.2"
170 | }
171 | },
172 | "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": {
173 | "version": "2.1.2",
174 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
175 | "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
176 | "dev": true
177 | },
178 | "node_modules/@vue/compiler-core": {
179 | "version": "3.2.31",
180 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz",
181 | "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==",
182 | "dependencies": {
183 | "@babel/parser": "^7.16.4",
184 | "@vue/shared": "3.2.31",
185 | "estree-walker": "^2.0.2",
186 | "source-map": "^0.6.1"
187 | }
188 | },
189 | "node_modules/@vue/compiler-dom": {
190 | "version": "3.2.31",
191 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz",
192 | "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==",
193 | "dependencies": {
194 | "@vue/compiler-core": "3.2.31",
195 | "@vue/shared": "3.2.31"
196 | }
197 | },
198 | "node_modules/@vue/compiler-sfc": {
199 | "version": "3.2.31",
200 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz",
201 | "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==",
202 | "dependencies": {
203 | "@babel/parser": "^7.16.4",
204 | "@vue/compiler-core": "3.2.31",
205 | "@vue/compiler-dom": "3.2.31",
206 | "@vue/compiler-ssr": "3.2.31",
207 | "@vue/reactivity-transform": "3.2.31",
208 | "@vue/shared": "3.2.31",
209 | "estree-walker": "^2.0.2",
210 | "magic-string": "^0.25.7",
211 | "postcss": "^8.1.10",
212 | "source-map": "^0.6.1"
213 | }
214 | },
215 | "node_modules/@vue/compiler-ssr": {
216 | "version": "3.2.31",
217 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz",
218 | "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==",
219 | "dependencies": {
220 | "@vue/compiler-dom": "3.2.31",
221 | "@vue/shared": "3.2.31"
222 | }
223 | },
224 | "node_modules/@vue/reactivity": {
225 | "version": "3.2.31",
226 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz",
227 | "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==",
228 | "dependencies": {
229 | "@vue/shared": "3.2.31"
230 | }
231 | },
232 | "node_modules/@vue/reactivity-transform": {
233 | "version": "3.2.31",
234 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz",
235 | "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==",
236 | "dependencies": {
237 | "@babel/parser": "^7.16.4",
238 | "@vue/compiler-core": "3.2.31",
239 | "@vue/shared": "3.2.31",
240 | "estree-walker": "^2.0.2",
241 | "magic-string": "^0.25.7"
242 | }
243 | },
244 | "node_modules/@vue/runtime-core": {
245 | "version": "3.2.31",
246 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz",
247 | "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==",
248 | "dependencies": {
249 | "@vue/reactivity": "3.2.31",
250 | "@vue/shared": "3.2.31"
251 | }
252 | },
253 | "node_modules/@vue/runtime-dom": {
254 | "version": "3.2.31",
255 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz",
256 | "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==",
257 | "dependencies": {
258 | "@vue/runtime-core": "3.2.31",
259 | "@vue/shared": "3.2.31",
260 | "csstype": "^2.6.8"
261 | }
262 | },
263 | "node_modules/@vue/server-renderer": {
264 | "version": "3.2.31",
265 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz",
266 | "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==",
267 | "dependencies": {
268 | "@vue/compiler-ssr": "3.2.31",
269 | "@vue/shared": "3.2.31"
270 | },
271 | "peerDependencies": {
272 | "vue": "3.2.31"
273 | }
274 | },
275 | "node_modules/@vue/shared": {
276 | "version": "3.2.31",
277 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz",
278 | "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ=="
279 | },
280 | "node_modules/@vueuse/core": {
281 | "version": "8.2.5",
282 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.2.5.tgz",
283 | "integrity": "sha512-5prZAA1Ji2ltwNUnzreu6WIXYqHYP/9U2BiY5mD/650VYLpVcwVlYznJDFcLCmEWI3o3Vd34oS1FUf+6Mh68GQ==",
284 | "dependencies": {
285 | "@vueuse/metadata": "8.2.5",
286 | "@vueuse/shared": "8.2.5",
287 | "vue-demi": "*"
288 | },
289 | "funding": {
290 | "url": "https://github.com/sponsors/antfu"
291 | },
292 | "peerDependencies": {
293 | "@vue/composition-api": "^1.1.0",
294 | "vue": "^2.6.0 || ^3.2.0"
295 | },
296 | "peerDependenciesMeta": {
297 | "@vue/composition-api": {
298 | "optional": true
299 | },
300 | "vue": {
301 | "optional": true
302 | }
303 | }
304 | },
305 | "node_modules/@vueuse/core/node_modules/@vueuse/shared": {
306 | "version": "8.2.5",
307 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.2.5.tgz",
308 | "integrity": "sha512-lNWo+7sk6JCuOj4AiYM+6HZ6fq4xAuVq1sVckMQKgfCJZpZRe4i8es+ZULO5bYTKP+VrOCtqrLR2GzEfrbr3YQ==",
309 | "dependencies": {
310 | "vue-demi": "*"
311 | },
312 | "funding": {
313 | "url": "https://github.com/sponsors/antfu"
314 | },
315 | "peerDependencies": {
316 | "@vue/composition-api": "^1.1.0",
317 | "vue": "^2.6.0 || ^3.2.0"
318 | },
319 | "peerDependenciesMeta": {
320 | "@vue/composition-api": {
321 | "optional": true
322 | },
323 | "vue": {
324 | "optional": true
325 | }
326 | }
327 | },
328 | "node_modules/@vueuse/core/node_modules/vue-demi": {
329 | "version": "0.12.5",
330 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz",
331 | "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==",
332 | "hasInstallScript": true,
333 | "bin": {
334 | "vue-demi-fix": "bin/vue-demi-fix.js",
335 | "vue-demi-switch": "bin/vue-demi-switch.js"
336 | },
337 | "engines": {
338 | "node": ">=12"
339 | },
340 | "funding": {
341 | "url": "https://github.com/sponsors/antfu"
342 | },
343 | "peerDependencies": {
344 | "@vue/composition-api": "^1.0.0-rc.1",
345 | "vue": "^3.0.0-0 || ^2.6.0"
346 | },
347 | "peerDependenciesMeta": {
348 | "@vue/composition-api": {
349 | "optional": true
350 | }
351 | }
352 | },
353 | "node_modules/@vueuse/metadata": {
354 | "version": "8.2.5",
355 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.2.5.tgz",
356 | "integrity": "sha512-Lk9plJjh9cIdiRdcj16dau+2LANxIdFCiTgdfzwYXbflxq0QnMBeOD2qHgKDE7fuVrtPcVWj8VSuZEx1HRfNQA==",
357 | "funding": {
358 | "url": "https://github.com/sponsors/antfu"
359 | }
360 | },
361 | "node_modules/acorn": {
362 | "version": "7.4.1",
363 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
364 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
365 | "dev": true,
366 | "bin": {
367 | "acorn": "bin/acorn"
368 | },
369 | "engines": {
370 | "node": ">=0.4.0"
371 | }
372 | },
373 | "node_modules/asap": {
374 | "version": "2.0.6",
375 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
376 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
377 | "dev": true
378 | },
379 | "node_modules/assert-never": {
380 | "version": "1.2.1",
381 | "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
382 | "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==",
383 | "dev": true
384 | },
385 | "node_modules/babel-walk": {
386 | "version": "3.0.0-canary-5",
387 | "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
388 | "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
389 | "dev": true,
390 | "dependencies": {
391 | "@babel/types": "^7.9.6"
392 | },
393 | "engines": {
394 | "node": ">= 10.0.0"
395 | }
396 | },
397 | "node_modules/call-bind": {
398 | "version": "1.0.2",
399 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
400 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
401 | "dev": true,
402 | "dependencies": {
403 | "function-bind": "^1.1.1",
404 | "get-intrinsic": "^1.0.2"
405 | },
406 | "funding": {
407 | "url": "https://github.com/sponsors/ljharb"
408 | }
409 | },
410 | "node_modules/character-parser": {
411 | "version": "2.2.0",
412 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
413 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
414 | "dev": true,
415 | "dependencies": {
416 | "is-regex": "^1.0.3"
417 | }
418 | },
419 | "node_modules/constantinople": {
420 | "version": "4.0.1",
421 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
422 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
423 | "dev": true,
424 | "dependencies": {
425 | "@babel/parser": "^7.6.0",
426 | "@babel/types": "^7.6.1"
427 | }
428 | },
429 | "node_modules/csstype": {
430 | "version": "2.6.20",
431 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz",
432 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
433 | },
434 | "node_modules/doctypes": {
435 | "version": "1.1.0",
436 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
437 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=",
438 | "dev": true
439 | },
440 | "node_modules/dom-serializer": {
441 | "version": "1.3.2",
442 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
443 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
444 | "dev": true,
445 | "dependencies": {
446 | "domelementtype": "^2.0.1",
447 | "domhandler": "^4.2.0",
448 | "entities": "^2.0.0"
449 | },
450 | "funding": {
451 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
452 | }
453 | },
454 | "node_modules/dom-serializer/node_modules/entities": {
455 | "version": "2.2.0",
456 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
457 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
458 | "dev": true,
459 | "funding": {
460 | "url": "https://github.com/fb55/entities?sponsor=1"
461 | }
462 | },
463 | "node_modules/domelementtype": {
464 | "version": "2.3.0",
465 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
466 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
467 | "dev": true,
468 | "funding": [
469 | {
470 | "type": "github",
471 | "url": "https://github.com/sponsors/fb55"
472 | }
473 | ]
474 | },
475 | "node_modules/domhandler": {
476 | "version": "4.3.1",
477 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
478 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
479 | "dev": true,
480 | "dependencies": {
481 | "domelementtype": "^2.2.0"
482 | },
483 | "engines": {
484 | "node": ">= 4"
485 | },
486 | "funding": {
487 | "url": "https://github.com/fb55/domhandler?sponsor=1"
488 | }
489 | },
490 | "node_modules/domutils": {
491 | "version": "2.8.0",
492 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
493 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
494 | "dev": true,
495 | "dependencies": {
496 | "dom-serializer": "^1.0.1",
497 | "domelementtype": "^2.2.0",
498 | "domhandler": "^4.2.0"
499 | },
500 | "funding": {
501 | "url": "https://github.com/fb55/domutils?sponsor=1"
502 | }
503 | },
504 | "node_modules/emmet": {
505 | "version": "2.3.6",
506 | "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.3.6.tgz",
507 | "integrity": "sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==",
508 | "dev": true,
509 | "dependencies": {
510 | "@emmetio/abbreviation": "^2.2.3",
511 | "@emmetio/css-abbreviation": "^2.1.4"
512 | }
513 | },
514 | "node_modules/entities": {
515 | "version": "3.0.1",
516 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
517 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
518 | "dev": true,
519 | "engines": {
520 | "node": ">=0.12"
521 | },
522 | "funding": {
523 | "url": "https://github.com/fb55/entities?sponsor=1"
524 | }
525 | },
526 | "node_modules/esbuild": {
527 | "version": "0.14.34",
528 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.34.tgz",
529 | "integrity": "sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg==",
530 | "dev": true,
531 | "hasInstallScript": true,
532 | "bin": {
533 | "esbuild": "bin/esbuild"
534 | },
535 | "engines": {
536 | "node": ">=12"
537 | },
538 | "optionalDependencies": {
539 | "esbuild-android-64": "0.14.34",
540 | "esbuild-android-arm64": "0.14.34",
541 | "esbuild-darwin-64": "0.14.34",
542 | "esbuild-darwin-arm64": "0.14.34",
543 | "esbuild-freebsd-64": "0.14.34",
544 | "esbuild-freebsd-arm64": "0.14.34",
545 | "esbuild-linux-32": "0.14.34",
546 | "esbuild-linux-64": "0.14.34",
547 | "esbuild-linux-arm": "0.14.34",
548 | "esbuild-linux-arm64": "0.14.34",
549 | "esbuild-linux-mips64le": "0.14.34",
550 | "esbuild-linux-ppc64le": "0.14.34",
551 | "esbuild-linux-riscv64": "0.14.34",
552 | "esbuild-linux-s390x": "0.14.34",
553 | "esbuild-netbsd-64": "0.14.34",
554 | "esbuild-openbsd-64": "0.14.34",
555 | "esbuild-sunos-64": "0.14.34",
556 | "esbuild-windows-32": "0.14.34",
557 | "esbuild-windows-64": "0.14.34",
558 | "esbuild-windows-arm64": "0.14.34"
559 | }
560 | },
561 | "node_modules/esbuild-android-64": {
562 | "version": "0.14.34",
563 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.34.tgz",
564 | "integrity": "sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw==",
565 | "cpu": [
566 | "x64"
567 | ],
568 | "dev": true,
569 | "optional": true,
570 | "os": [
571 | "android"
572 | ],
573 | "engines": {
574 | "node": ">=12"
575 | }
576 | },
577 | "node_modules/esbuild-android-arm64": {
578 | "version": "0.14.34",
579 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.34.tgz",
580 | "integrity": "sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew==",
581 | "cpu": [
582 | "arm64"
583 | ],
584 | "dev": true,
585 | "optional": true,
586 | "os": [
587 | "android"
588 | ],
589 | "engines": {
590 | "node": ">=12"
591 | }
592 | },
593 | "node_modules/esbuild-darwin-64": {
594 | "version": "0.14.34",
595 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.34.tgz",
596 | "integrity": "sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw==",
597 | "cpu": [
598 | "x64"
599 | ],
600 | "dev": true,
601 | "optional": true,
602 | "os": [
603 | "darwin"
604 | ],
605 | "engines": {
606 | "node": ">=12"
607 | }
608 | },
609 | "node_modules/esbuild-darwin-arm64": {
610 | "version": "0.14.34",
611 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.34.tgz",
612 | "integrity": "sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w==",
613 | "cpu": [
614 | "arm64"
615 | ],
616 | "dev": true,
617 | "optional": true,
618 | "os": [
619 | "darwin"
620 | ],
621 | "engines": {
622 | "node": ">=12"
623 | }
624 | },
625 | "node_modules/esbuild-freebsd-64": {
626 | "version": "0.14.34",
627 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.34.tgz",
628 | "integrity": "sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA==",
629 | "cpu": [
630 | "x64"
631 | ],
632 | "dev": true,
633 | "optional": true,
634 | "os": [
635 | "freebsd"
636 | ],
637 | "engines": {
638 | "node": ">=12"
639 | }
640 | },
641 | "node_modules/esbuild-freebsd-arm64": {
642 | "version": "0.14.34",
643 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.34.tgz",
644 | "integrity": "sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA==",
645 | "cpu": [
646 | "arm64"
647 | ],
648 | "dev": true,
649 | "optional": true,
650 | "os": [
651 | "freebsd"
652 | ],
653 | "engines": {
654 | "node": ">=12"
655 | }
656 | },
657 | "node_modules/esbuild-linux-32": {
658 | "version": "0.14.34",
659 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.34.tgz",
660 | "integrity": "sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ==",
661 | "cpu": [
662 | "ia32"
663 | ],
664 | "dev": true,
665 | "optional": true,
666 | "os": [
667 | "linux"
668 | ],
669 | "engines": {
670 | "node": ">=12"
671 | }
672 | },
673 | "node_modules/esbuild-linux-64": {
674 | "version": "0.14.34",
675 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.34.tgz",
676 | "integrity": "sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ==",
677 | "cpu": [
678 | "x64"
679 | ],
680 | "dev": true,
681 | "optional": true,
682 | "os": [
683 | "linux"
684 | ],
685 | "engines": {
686 | "node": ">=12"
687 | }
688 | },
689 | "node_modules/esbuild-linux-arm": {
690 | "version": "0.14.34",
691 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.34.tgz",
692 | "integrity": "sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg==",
693 | "cpu": [
694 | "arm"
695 | ],
696 | "dev": true,
697 | "optional": true,
698 | "os": [
699 | "linux"
700 | ],
701 | "engines": {
702 | "node": ">=12"
703 | }
704 | },
705 | "node_modules/esbuild-linux-arm64": {
706 | "version": "0.14.34",
707 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.34.tgz",
708 | "integrity": "sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA==",
709 | "cpu": [
710 | "arm64"
711 | ],
712 | "dev": true,
713 | "optional": true,
714 | "os": [
715 | "linux"
716 | ],
717 | "engines": {
718 | "node": ">=12"
719 | }
720 | },
721 | "node_modules/esbuild-linux-mips64le": {
722 | "version": "0.14.34",
723 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.34.tgz",
724 | "integrity": "sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw==",
725 | "cpu": [
726 | "mips64el"
727 | ],
728 | "dev": true,
729 | "optional": true,
730 | "os": [
731 | "linux"
732 | ],
733 | "engines": {
734 | "node": ">=12"
735 | }
736 | },
737 | "node_modules/esbuild-linux-ppc64le": {
738 | "version": "0.14.34",
739 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.34.tgz",
740 | "integrity": "sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg==",
741 | "cpu": [
742 | "ppc64"
743 | ],
744 | "dev": true,
745 | "optional": true,
746 | "os": [
747 | "linux"
748 | ],
749 | "engines": {
750 | "node": ">=12"
751 | }
752 | },
753 | "node_modules/esbuild-linux-riscv64": {
754 | "version": "0.14.34",
755 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.34.tgz",
756 | "integrity": "sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA==",
757 | "cpu": [
758 | "riscv64"
759 | ],
760 | "dev": true,
761 | "optional": true,
762 | "os": [
763 | "linux"
764 | ],
765 | "engines": {
766 | "node": ">=12"
767 | }
768 | },
769 | "node_modules/esbuild-linux-s390x": {
770 | "version": "0.14.34",
771 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.34.tgz",
772 | "integrity": "sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA==",
773 | "cpu": [
774 | "s390x"
775 | ],
776 | "dev": true,
777 | "optional": true,
778 | "os": [
779 | "linux"
780 | ],
781 | "engines": {
782 | "node": ">=12"
783 | }
784 | },
785 | "node_modules/esbuild-netbsd-64": {
786 | "version": "0.14.34",
787 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.34.tgz",
788 | "integrity": "sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ==",
789 | "cpu": [
790 | "x64"
791 | ],
792 | "dev": true,
793 | "optional": true,
794 | "os": [
795 | "netbsd"
796 | ],
797 | "engines": {
798 | "node": ">=12"
799 | }
800 | },
801 | "node_modules/esbuild-openbsd-64": {
802 | "version": "0.14.34",
803 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.34.tgz",
804 | "integrity": "sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow==",
805 | "cpu": [
806 | "x64"
807 | ],
808 | "dev": true,
809 | "optional": true,
810 | "os": [
811 | "openbsd"
812 | ],
813 | "engines": {
814 | "node": ">=12"
815 | }
816 | },
817 | "node_modules/esbuild-sunos-64": {
818 | "version": "0.14.34",
819 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.34.tgz",
820 | "integrity": "sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA==",
821 | "cpu": [
822 | "x64"
823 | ],
824 | "dev": true,
825 | "optional": true,
826 | "os": [
827 | "sunos"
828 | ],
829 | "engines": {
830 | "node": ">=12"
831 | }
832 | },
833 | "node_modules/esbuild-windows-32": {
834 | "version": "0.14.34",
835 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.34.tgz",
836 | "integrity": "sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg==",
837 | "cpu": [
838 | "ia32"
839 | ],
840 | "dev": true,
841 | "optional": true,
842 | "os": [
843 | "win32"
844 | ],
845 | "engines": {
846 | "node": ">=12"
847 | }
848 | },
849 | "node_modules/esbuild-windows-64": {
850 | "version": "0.14.34",
851 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.34.tgz",
852 | "integrity": "sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q==",
853 | "cpu": [
854 | "x64"
855 | ],
856 | "dev": true,
857 | "optional": true,
858 | "os": [
859 | "win32"
860 | ],
861 | "engines": {
862 | "node": ">=12"
863 | }
864 | },
865 | "node_modules/esbuild-windows-arm64": {
866 | "version": "0.14.34",
867 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.34.tgz",
868 | "integrity": "sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg==",
869 | "cpu": [
870 | "arm64"
871 | ],
872 | "dev": true,
873 | "optional": true,
874 | "os": [
875 | "win32"
876 | ],
877 | "engines": {
878 | "node": ">=12"
879 | }
880 | },
881 | "node_modules/estree-walker": {
882 | "version": "2.0.2",
883 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
884 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
885 | },
886 | "node_modules/fsevents": {
887 | "version": "2.3.2",
888 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
889 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
890 | "dev": true,
891 | "hasInstallScript": true,
892 | "optional": true,
893 | "os": [
894 | "darwin"
895 | ],
896 | "engines": {
897 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
898 | }
899 | },
900 | "node_modules/function-bind": {
901 | "version": "1.1.1",
902 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
903 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
904 | "dev": true
905 | },
906 | "node_modules/get-intrinsic": {
907 | "version": "1.1.1",
908 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
909 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
910 | "dev": true,
911 | "dependencies": {
912 | "function-bind": "^1.1.1",
913 | "has": "^1.0.3",
914 | "has-symbols": "^1.0.1"
915 | },
916 | "funding": {
917 | "url": "https://github.com/sponsors/ljharb"
918 | }
919 | },
920 | "node_modules/has": {
921 | "version": "1.0.3",
922 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
923 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
924 | "dev": true,
925 | "dependencies": {
926 | "function-bind": "^1.1.1"
927 | },
928 | "engines": {
929 | "node": ">= 0.4.0"
930 | }
931 | },
932 | "node_modules/has-symbols": {
933 | "version": "1.0.3",
934 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
935 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
936 | "dev": true,
937 | "engines": {
938 | "node": ">= 0.4"
939 | },
940 | "funding": {
941 | "url": "https://github.com/sponsors/ljharb"
942 | }
943 | },
944 | "node_modules/has-tostringtag": {
945 | "version": "1.0.0",
946 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
947 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
948 | "dev": true,
949 | "dependencies": {
950 | "has-symbols": "^1.0.2"
951 | },
952 | "engines": {
953 | "node": ">= 0.4"
954 | },
955 | "funding": {
956 | "url": "https://github.com/sponsors/ljharb"
957 | }
958 | },
959 | "node_modules/htmlparser2": {
960 | "version": "7.2.0",
961 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
962 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
963 | "dev": true,
964 | "funding": [
965 | "https://github.com/fb55/htmlparser2?sponsor=1",
966 | {
967 | "type": "github",
968 | "url": "https://github.com/sponsors/fb55"
969 | }
970 | ],
971 | "dependencies": {
972 | "domelementtype": "^2.0.1",
973 | "domhandler": "^4.2.2",
974 | "domutils": "^2.8.0",
975 | "entities": "^3.0.1"
976 | }
977 | },
978 | "node_modules/is-core-module": {
979 | "version": "2.8.1",
980 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
981 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
982 | "dev": true,
983 | "dependencies": {
984 | "has": "^1.0.3"
985 | },
986 | "funding": {
987 | "url": "https://github.com/sponsors/ljharb"
988 | }
989 | },
990 | "node_modules/is-expression": {
991 | "version": "4.0.0",
992 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
993 | "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
994 | "dev": true,
995 | "dependencies": {
996 | "acorn": "^7.1.1",
997 | "object-assign": "^4.1.1"
998 | }
999 | },
1000 | "node_modules/is-promise": {
1001 | "version": "2.2.2",
1002 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
1003 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
1004 | "dev": true
1005 | },
1006 | "node_modules/is-regex": {
1007 | "version": "1.1.4",
1008 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
1009 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
1010 | "dev": true,
1011 | "dependencies": {
1012 | "call-bind": "^1.0.2",
1013 | "has-tostringtag": "^1.0.0"
1014 | },
1015 | "engines": {
1016 | "node": ">= 0.4"
1017 | },
1018 | "funding": {
1019 | "url": "https://github.com/sponsors/ljharb"
1020 | }
1021 | },
1022 | "node_modules/js-stringify": {
1023 | "version": "1.0.2",
1024 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
1025 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=",
1026 | "dev": true
1027 | },
1028 | "node_modules/jsonc-parser": {
1029 | "version": "2.3.1",
1030 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
1031 | "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
1032 | "dev": true
1033 | },
1034 | "node_modules/jstransformer": {
1035 | "version": "1.0.0",
1036 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
1037 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
1038 | "dev": true,
1039 | "dependencies": {
1040 | "is-promise": "^2.0.0",
1041 | "promise": "^7.0.1"
1042 | }
1043 | },
1044 | "node_modules/lru-cache": {
1045 | "version": "7.8.0",
1046 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz",
1047 | "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==",
1048 | "dev": true,
1049 | "engines": {
1050 | "node": ">=12"
1051 | }
1052 | },
1053 | "node_modules/magic-string": {
1054 | "version": "0.25.9",
1055 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
1056 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
1057 | "dependencies": {
1058 | "sourcemap-codec": "^1.4.8"
1059 | }
1060 | },
1061 | "node_modules/nanoid": {
1062 | "version": "3.3.2",
1063 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
1064 | "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
1065 | "bin": {
1066 | "nanoid": "bin/nanoid.cjs"
1067 | },
1068 | "engines": {
1069 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1070 | }
1071 | },
1072 | "node_modules/object-assign": {
1073 | "version": "4.1.1",
1074 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1075 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1076 | "dev": true,
1077 | "engines": {
1078 | "node": ">=0.10.0"
1079 | }
1080 | },
1081 | "node_modules/path-parse": {
1082 | "version": "1.0.7",
1083 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1084 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1085 | "dev": true
1086 | },
1087 | "node_modules/picocolors": {
1088 | "version": "1.0.0",
1089 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1090 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1091 | },
1092 | "node_modules/postcss": {
1093 | "version": "8.4.12",
1094 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
1095 | "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
1096 | "funding": [
1097 | {
1098 | "type": "opencollective",
1099 | "url": "https://opencollective.com/postcss/"
1100 | },
1101 | {
1102 | "type": "tidelift",
1103 | "url": "https://tidelift.com/funding/github/npm/postcss"
1104 | }
1105 | ],
1106 | "dependencies": {
1107 | "nanoid": "^3.3.1",
1108 | "picocolors": "^1.0.0",
1109 | "source-map-js": "^1.0.2"
1110 | },
1111 | "engines": {
1112 | "node": "^10 || ^12 || >=14"
1113 | }
1114 | },
1115 | "node_modules/promise": {
1116 | "version": "7.3.1",
1117 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
1118 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
1119 | "dev": true,
1120 | "dependencies": {
1121 | "asap": "~2.0.3"
1122 | }
1123 | },
1124 | "node_modules/pug": {
1125 | "version": "3.0.2",
1126 | "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
1127 | "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
1128 | "dev": true,
1129 | "dependencies": {
1130 | "pug-code-gen": "^3.0.2",
1131 | "pug-filters": "^4.0.0",
1132 | "pug-lexer": "^5.0.1",
1133 | "pug-linker": "^4.0.0",
1134 | "pug-load": "^3.0.0",
1135 | "pug-parser": "^6.0.0",
1136 | "pug-runtime": "^3.0.1",
1137 | "pug-strip-comments": "^2.0.0"
1138 | }
1139 | },
1140 | "node_modules/pug-attrs": {
1141 | "version": "3.0.0",
1142 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
1143 | "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
1144 | "dev": true,
1145 | "dependencies": {
1146 | "constantinople": "^4.0.1",
1147 | "js-stringify": "^1.0.2",
1148 | "pug-runtime": "^3.0.0"
1149 | }
1150 | },
1151 | "node_modules/pug-code-gen": {
1152 | "version": "3.0.2",
1153 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
1154 | "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
1155 | "dev": true,
1156 | "dependencies": {
1157 | "constantinople": "^4.0.1",
1158 | "doctypes": "^1.1.0",
1159 | "js-stringify": "^1.0.2",
1160 | "pug-attrs": "^3.0.0",
1161 | "pug-error": "^2.0.0",
1162 | "pug-runtime": "^3.0.0",
1163 | "void-elements": "^3.1.0",
1164 | "with": "^7.0.0"
1165 | }
1166 | },
1167 | "node_modules/pug-error": {
1168 | "version": "2.0.0",
1169 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
1170 | "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==",
1171 | "dev": true
1172 | },
1173 | "node_modules/pug-filters": {
1174 | "version": "4.0.0",
1175 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
1176 | "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
1177 | "dev": true,
1178 | "dependencies": {
1179 | "constantinople": "^4.0.1",
1180 | "jstransformer": "1.0.0",
1181 | "pug-error": "^2.0.0",
1182 | "pug-walk": "^2.0.0",
1183 | "resolve": "^1.15.1"
1184 | }
1185 | },
1186 | "node_modules/pug-lexer": {
1187 | "version": "5.0.1",
1188 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
1189 | "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
1190 | "dev": true,
1191 | "dependencies": {
1192 | "character-parser": "^2.2.0",
1193 | "is-expression": "^4.0.0",
1194 | "pug-error": "^2.0.0"
1195 | }
1196 | },
1197 | "node_modules/pug-linker": {
1198 | "version": "4.0.0",
1199 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
1200 | "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
1201 | "dev": true,
1202 | "dependencies": {
1203 | "pug-error": "^2.0.0",
1204 | "pug-walk": "^2.0.0"
1205 | }
1206 | },
1207 | "node_modules/pug-load": {
1208 | "version": "3.0.0",
1209 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
1210 | "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
1211 | "dev": true,
1212 | "dependencies": {
1213 | "object-assign": "^4.1.1",
1214 | "pug-walk": "^2.0.0"
1215 | }
1216 | },
1217 | "node_modules/pug-parser": {
1218 | "version": "6.0.0",
1219 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
1220 | "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
1221 | "dev": true,
1222 | "dependencies": {
1223 | "pug-error": "^2.0.0",
1224 | "token-stream": "1.0.0"
1225 | }
1226 | },
1227 | "node_modules/pug-runtime": {
1228 | "version": "3.0.1",
1229 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
1230 | "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==",
1231 | "dev": true
1232 | },
1233 | "node_modules/pug-strip-comments": {
1234 | "version": "2.0.0",
1235 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
1236 | "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
1237 | "dev": true,
1238 | "dependencies": {
1239 | "pug-error": "^2.0.0"
1240 | }
1241 | },
1242 | "node_modules/pug-walk": {
1243 | "version": "2.0.0",
1244 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
1245 | "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==",
1246 | "dev": true
1247 | },
1248 | "node_modules/request-light": {
1249 | "version": "0.5.7",
1250 | "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.7.tgz",
1251 | "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==",
1252 | "dev": true
1253 | },
1254 | "node_modules/resolve": {
1255 | "version": "1.22.0",
1256 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
1257 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
1258 | "dev": true,
1259 | "dependencies": {
1260 | "is-core-module": "^2.8.1",
1261 | "path-parse": "^1.0.7",
1262 | "supports-preserve-symlinks-flag": "^1.0.0"
1263 | },
1264 | "bin": {
1265 | "resolve": "bin/resolve"
1266 | },
1267 | "funding": {
1268 | "url": "https://github.com/sponsors/ljharb"
1269 | }
1270 | },
1271 | "node_modules/rollup": {
1272 | "version": "2.70.1",
1273 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz",
1274 | "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==",
1275 | "dev": true,
1276 | "bin": {
1277 | "rollup": "dist/bin/rollup"
1278 | },
1279 | "engines": {
1280 | "node": ">=10.0.0"
1281 | },
1282 | "optionalDependencies": {
1283 | "fsevents": "~2.3.2"
1284 | }
1285 | },
1286 | "node_modules/semver": {
1287 | "version": "7.3.6",
1288 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
1289 | "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
1290 | "dev": true,
1291 | "dependencies": {
1292 | "lru-cache": "^7.4.0"
1293 | },
1294 | "bin": {
1295 | "semver": "bin/semver.js"
1296 | },
1297 | "engines": {
1298 | "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0"
1299 | }
1300 | },
1301 | "node_modules/source-map": {
1302 | "version": "0.6.1",
1303 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1304 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1305 | "engines": {
1306 | "node": ">=0.10.0"
1307 | }
1308 | },
1309 | "node_modules/source-map-js": {
1310 | "version": "1.0.2",
1311 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1312 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1313 | "engines": {
1314 | "node": ">=0.10.0"
1315 | }
1316 | },
1317 | "node_modules/sourcemap-codec": {
1318 | "version": "1.4.8",
1319 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1320 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
1321 | },
1322 | "node_modules/supports-preserve-symlinks-flag": {
1323 | "version": "1.0.0",
1324 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1325 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1326 | "dev": true,
1327 | "engines": {
1328 | "node": ">= 0.4"
1329 | },
1330 | "funding": {
1331 | "url": "https://github.com/sponsors/ljharb"
1332 | }
1333 | },
1334 | "node_modules/to-fast-properties": {
1335 | "version": "2.0.0",
1336 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
1337 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
1338 | "dev": true,
1339 | "engines": {
1340 | "node": ">=4"
1341 | }
1342 | },
1343 | "node_modules/token-stream": {
1344 | "version": "1.0.0",
1345 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
1346 | "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=",
1347 | "dev": true
1348 | },
1349 | "node_modules/typescript": {
1350 | "version": "4.6.3",
1351 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
1352 | "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
1353 | "dev": true,
1354 | "bin": {
1355 | "tsc": "bin/tsc",
1356 | "tsserver": "bin/tsserver"
1357 | },
1358 | "engines": {
1359 | "node": ">=4.2.0"
1360 | }
1361 | },
1362 | "node_modules/upath": {
1363 | "version": "2.0.1",
1364 | "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
1365 | "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
1366 | "dev": true,
1367 | "engines": {
1368 | "node": ">=4",
1369 | "yarn": "*"
1370 | }
1371 | },
1372 | "node_modules/vite": {
1373 | "version": "2.9.1",
1374 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
1375 | "integrity": "sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==",
1376 | "dev": true,
1377 | "dependencies": {
1378 | "esbuild": "^0.14.27",
1379 | "postcss": "^8.4.12",
1380 | "resolve": "^1.22.0",
1381 | "rollup": "^2.59.0"
1382 | },
1383 | "bin": {
1384 | "vite": "bin/vite.js"
1385 | },
1386 | "engines": {
1387 | "node": ">=12.2.0"
1388 | },
1389 | "optionalDependencies": {
1390 | "fsevents": "~2.3.2"
1391 | },
1392 | "peerDependencies": {
1393 | "less": "*",
1394 | "sass": "*",
1395 | "stylus": "*"
1396 | },
1397 | "peerDependenciesMeta": {
1398 | "less": {
1399 | "optional": true
1400 | },
1401 | "sass": {
1402 | "optional": true
1403 | },
1404 | "stylus": {
1405 | "optional": true
1406 | }
1407 | }
1408 | },
1409 | "node_modules/void-elements": {
1410 | "version": "3.1.0",
1411 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
1412 | "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
1413 | "dev": true,
1414 | "engines": {
1415 | "node": ">=0.10.0"
1416 | }
1417 | },
1418 | "node_modules/vscode-css-languageservice": {
1419 | "version": "5.4.1",
1420 | "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.4.1.tgz",
1421 | "integrity": "sha512-W7D3GKFXf97ReAaU4EZ2nxVO1kQhztbycJgc1b/Ipr0h8zYWr88BADmrXu02z+lsCS84D7Sr4hoUzDKeaFn2Kg==",
1422 | "dev": true,
1423 | "dependencies": {
1424 | "vscode-languageserver-textdocument": "^1.0.4",
1425 | "vscode-languageserver-types": "^3.16.0",
1426 | "vscode-nls": "^5.0.0",
1427 | "vscode-uri": "^3.0.3"
1428 | }
1429 | },
1430 | "node_modules/vscode-html-languageservice": {
1431 | "version": "4.2.4",
1432 | "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.4.tgz",
1433 | "integrity": "sha512-1HqvXKOq9WlZyW4HTD+0XzrjZoZ/YFrgQY2PZqktbRloHXVAUKm6+cAcvZi4YqKPVn05/CK7do+KBHfuSaEdbg==",
1434 | "dev": true,
1435 | "dependencies": {
1436 | "vscode-languageserver-textdocument": "^1.0.4",
1437 | "vscode-languageserver-types": "^3.16.0",
1438 | "vscode-nls": "^5.0.0",
1439 | "vscode-uri": "^3.0.3"
1440 | }
1441 | },
1442 | "node_modules/vscode-json-languageservice": {
1443 | "version": "4.2.1",
1444 | "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz",
1445 | "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==",
1446 | "dev": true,
1447 | "dependencies": {
1448 | "jsonc-parser": "^3.0.0",
1449 | "vscode-languageserver-textdocument": "^1.0.3",
1450 | "vscode-languageserver-types": "^3.16.0",
1451 | "vscode-nls": "^5.0.0",
1452 | "vscode-uri": "^3.0.3"
1453 | }
1454 | },
1455 | "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": {
1456 | "version": "3.0.0",
1457 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
1458 | "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
1459 | "dev": true
1460 | },
1461 | "node_modules/vscode-jsonrpc": {
1462 | "version": "8.0.0-next.7",
1463 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.7.tgz",
1464 | "integrity": "sha512-JX/F31LEsims0dAlOTKFE4E+AJMiJvdRSRViifFJSqSN7EzeYyWlfuDchF7g91oRNPZOIWfibTkDf3/UMsQGzQ==",
1465 | "dev": true,
1466 | "engines": {
1467 | "node": ">=14.0.0"
1468 | }
1469 | },
1470 | "node_modules/vscode-languageserver": {
1471 | "version": "8.0.0-next.10",
1472 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.0-next.10.tgz",
1473 | "integrity": "sha512-sdjldl9ipuBSWVw5ENVMRcOVQwF0o+J6+lNA7FrB8MiLmzflnfjRoJMqA5tCEY8S/J/+P56ZR/dqiQnRYg5m8w==",
1474 | "dev": true,
1475 | "dependencies": {
1476 | "vscode-languageserver-protocol": "3.17.0-next.16"
1477 | },
1478 | "bin": {
1479 | "installServerIntoExtension": "bin/installServerIntoExtension"
1480 | }
1481 | },
1482 | "node_modules/vscode-languageserver-protocol": {
1483 | "version": "3.17.0-next.16",
1484 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.16.tgz",
1485 | "integrity": "sha512-tx4DnXw9u3N7vw+bx6n2NKp6FoxoNwiP/biH83AS30I2AnTGyLd7afSeH6Oewn2E8jvB7K15bs12sMppkKOVeQ==",
1486 | "dev": true,
1487 | "dependencies": {
1488 | "vscode-jsonrpc": "8.0.0-next.7",
1489 | "vscode-languageserver-types": "3.17.0-next.9"
1490 | }
1491 | },
1492 | "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
1493 | "version": "3.17.0-next.9",
1494 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.9.tgz",
1495 | "integrity": "sha512-9/PeDNPYduaoXRUzYpqmu4ZV9L01HGo0wH9FUt+sSHR7IXwA7xoXBfNUlv8gB9H0D2WwEmMomSy1NmhjKQyn3A==",
1496 | "dev": true
1497 | },
1498 | "node_modules/vscode-languageserver-textdocument": {
1499 | "version": "1.0.4",
1500 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz",
1501 | "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==",
1502 | "dev": true
1503 | },
1504 | "node_modules/vscode-languageserver-types": {
1505 | "version": "3.16.0",
1506 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
1507 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==",
1508 | "dev": true
1509 | },
1510 | "node_modules/vscode-nls": {
1511 | "version": "5.0.0",
1512 | "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz",
1513 | "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==",
1514 | "dev": true
1515 | },
1516 | "node_modules/vscode-pug-languageservice": {
1517 | "version": "0.29.8",
1518 | "resolved": "https://registry.npmjs.org/vscode-pug-languageservice/-/vscode-pug-languageservice-0.29.8.tgz",
1519 | "integrity": "sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==",
1520 | "deprecated": "WARNING: This project has been renamed to @volar/pug-language-service. Install using @volar/pug-language-service instead.",
1521 | "dev": true,
1522 | "dependencies": {
1523 | "@volar/code-gen": "0.29.8",
1524 | "@volar/shared": "0.29.8",
1525 | "@volar/source-map": "0.29.8",
1526 | "@volar/transforms": "0.29.8",
1527 | "pug-lexer": "^5.0.1",
1528 | "pug-parser": "^6.0.0",
1529 | "vscode-languageserver": "^8.0.0-next.2"
1530 | }
1531 | },
1532 | "node_modules/vscode-typescript-languageservice": {
1533 | "version": "0.29.8",
1534 | "resolved": "https://registry.npmjs.org/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.29.8.tgz",
1535 | "integrity": "sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==",
1536 | "deprecated": "WARNING: This project has been renamed to @volar/typescript-language-service. Install using @volar/typescript-language-service instead.",
1537 | "dev": true,
1538 | "dependencies": {
1539 | "@volar/shared": "0.29.8",
1540 | "semver": "^7.3.5",
1541 | "upath": "^2.0.1",
1542 | "vscode-languageserver": "^8.0.0-next.2",
1543 | "vscode-languageserver-textdocument": "^1.0.1"
1544 | }
1545 | },
1546 | "node_modules/vscode-uri": {
1547 | "version": "3.0.3",
1548 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz",
1549 | "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==",
1550 | "dev": true
1551 | },
1552 | "node_modules/vscode-vue-languageservice": {
1553 | "version": "0.29.8",
1554 | "resolved": "https://registry.npmjs.org/vscode-vue-languageservice/-/vscode-vue-languageservice-0.29.8.tgz",
1555 | "integrity": "sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==",
1556 | "deprecated": "WARNING: This project has been renamed to @volar/vue-language-service. Install using @volar/vue-language-service instead.",
1557 | "dev": true,
1558 | "dependencies": {
1559 | "@volar/code-gen": "0.29.8",
1560 | "@volar/html2pug": "0.29.8",
1561 | "@volar/shared": "0.29.8",
1562 | "@volar/source-map": "0.29.8",
1563 | "@volar/transforms": "0.29.8",
1564 | "@volar/vue-code-gen": "0.29.8",
1565 | "@vscode/emmet-helper": "^2.8.0",
1566 | "@vue/reactivity": "^3.2.21",
1567 | "@vue/shared": "^3.2.21",
1568 | "request-light": "^0.5.4",
1569 | "upath": "^2.0.1",
1570 | "vscode-css-languageservice": "^5.1.7",
1571 | "vscode-html-languageservice": "^4.1.0",
1572 | "vscode-json-languageservice": "^4.1.8",
1573 | "vscode-languageserver": "^8.0.0-next.2",
1574 | "vscode-languageserver-textdocument": "^1.0.1",
1575 | "vscode-pug-languageservice": "0.29.8",
1576 | "vscode-typescript-languageservice": "0.29.8"
1577 | }
1578 | },
1579 | "node_modules/vue": {
1580 | "version": "3.2.31",
1581 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz",
1582 | "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==",
1583 | "dependencies": {
1584 | "@vue/compiler-dom": "3.2.31",
1585 | "@vue/compiler-sfc": "3.2.31",
1586 | "@vue/runtime-dom": "3.2.31",
1587 | "@vue/server-renderer": "3.2.31",
1588 | "@vue/shared": "3.2.31"
1589 | }
1590 | },
1591 | "node_modules/vue-tsc": {
1592 | "version": "0.29.8",
1593 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.29.8.tgz",
1594 | "integrity": "sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==",
1595 | "dev": true,
1596 | "dependencies": {
1597 | "@volar/shared": "0.29.8",
1598 | "vscode-vue-languageservice": "0.29.8"
1599 | },
1600 | "bin": {
1601 | "vue-tsc": "bin/vue-tsc.js"
1602 | },
1603 | "peerDependencies": {
1604 | "typescript": "*"
1605 | }
1606 | },
1607 | "node_modules/with": {
1608 | "version": "7.0.2",
1609 | "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
1610 | "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
1611 | "dev": true,
1612 | "dependencies": {
1613 | "@babel/parser": "^7.9.6",
1614 | "@babel/types": "^7.9.6",
1615 | "assert-never": "^1.2.1",
1616 | "babel-walk": "3.0.0-canary-5"
1617 | },
1618 | "engines": {
1619 | "node": ">= 10.0.0"
1620 | }
1621 | }
1622 | },
1623 | "dependencies": {
1624 | "@babel/helper-validator-identifier": {
1625 | "version": "7.16.7",
1626 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
1627 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
1628 | "dev": true
1629 | },
1630 | "@babel/parser": {
1631 | "version": "7.17.9",
1632 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
1633 | "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg=="
1634 | },
1635 | "@babel/types": {
1636 | "version": "7.17.0",
1637 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
1638 | "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
1639 | "dev": true,
1640 | "requires": {
1641 | "@babel/helper-validator-identifier": "^7.16.7",
1642 | "to-fast-properties": "^2.0.0"
1643 | }
1644 | },
1645 | "@emmetio/abbreviation": {
1646 | "version": "2.2.3",
1647 | "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
1648 | "integrity": "sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==",
1649 | "dev": true,
1650 | "requires": {
1651 | "@emmetio/scanner": "^1.0.0"
1652 | }
1653 | },
1654 | "@emmetio/css-abbreviation": {
1655 | "version": "2.1.4",
1656 | "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz",
1657 | "integrity": "sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==",
1658 | "dev": true,
1659 | "requires": {
1660 | "@emmetio/scanner": "^1.0.0"
1661 | }
1662 | },
1663 | "@emmetio/scanner": {
1664 | "version": "1.0.0",
1665 | "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.0.tgz",
1666 | "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==",
1667 | "dev": true
1668 | },
1669 | "@vitejs/plugin-vue": {
1670 | "version": "2.3.1",
1671 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.1.tgz",
1672 | "integrity": "sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==",
1673 | "dev": true,
1674 | "requires": {}
1675 | },
1676 | "@volar/code-gen": {
1677 | "version": "0.29.8",
1678 | "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.29.8.tgz",
1679 | "integrity": "sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==",
1680 | "dev": true,
1681 | "requires": {
1682 | "@volar/shared": "0.29.8",
1683 | "@volar/source-map": "0.29.8"
1684 | }
1685 | },
1686 | "@volar/html2pug": {
1687 | "version": "0.29.8",
1688 | "resolved": "https://registry.npmjs.org/@volar/html2pug/-/html2pug-0.29.8.tgz",
1689 | "integrity": "sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==",
1690 | "dev": true,
1691 | "requires": {
1692 | "domelementtype": "^2.2.0",
1693 | "domhandler": "^4.2.2",
1694 | "htmlparser2": "^7.1.2",
1695 | "pug": "^3.0.2"
1696 | }
1697 | },
1698 | "@volar/shared": {
1699 | "version": "0.29.8",
1700 | "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.29.8.tgz",
1701 | "integrity": "sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==",
1702 | "dev": true,
1703 | "requires": {
1704 | "upath": "^2.0.1",
1705 | "vscode-jsonrpc": "^8.0.0-next.2",
1706 | "vscode-uri": "^3.0.2"
1707 | }
1708 | },
1709 | "@volar/source-map": {
1710 | "version": "0.29.8",
1711 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.29.8.tgz",
1712 | "integrity": "sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==",
1713 | "dev": true,
1714 | "requires": {
1715 | "@volar/shared": "0.29.8"
1716 | }
1717 | },
1718 | "@volar/transforms": {
1719 | "version": "0.29.8",
1720 | "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.29.8.tgz",
1721 | "integrity": "sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==",
1722 | "dev": true,
1723 | "requires": {
1724 | "@volar/shared": "0.29.8",
1725 | "vscode-languageserver": "^8.0.0-next.2"
1726 | }
1727 | },
1728 | "@volar/vue-code-gen": {
1729 | "version": "0.29.8",
1730 | "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.29.8.tgz",
1731 | "integrity": "sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==",
1732 | "dev": true,
1733 | "requires": {
1734 | "@volar/code-gen": "0.29.8",
1735 | "@volar/shared": "0.29.8",
1736 | "@volar/source-map": "0.29.8",
1737 | "@vue/compiler-core": "^3.2.21",
1738 | "@vue/compiler-dom": "^3.2.21",
1739 | "@vue/shared": "^3.2.21",
1740 | "upath": "^2.0.1"
1741 | }
1742 | },
1743 | "@vscode/emmet-helper": {
1744 | "version": "2.8.4",
1745 | "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz",
1746 | "integrity": "sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg==",
1747 | "dev": true,
1748 | "requires": {
1749 | "emmet": "^2.3.0",
1750 | "jsonc-parser": "^2.3.0",
1751 | "vscode-languageserver-textdocument": "^1.0.1",
1752 | "vscode-languageserver-types": "^3.15.1",
1753 | "vscode-nls": "^5.0.0",
1754 | "vscode-uri": "^2.1.2"
1755 | },
1756 | "dependencies": {
1757 | "vscode-uri": {
1758 | "version": "2.1.2",
1759 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
1760 | "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
1761 | "dev": true
1762 | }
1763 | }
1764 | },
1765 | "@vue/compiler-core": {
1766 | "version": "3.2.31",
1767 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz",
1768 | "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==",
1769 | "requires": {
1770 | "@babel/parser": "^7.16.4",
1771 | "@vue/shared": "3.2.31",
1772 | "estree-walker": "^2.0.2",
1773 | "source-map": "^0.6.1"
1774 | }
1775 | },
1776 | "@vue/compiler-dom": {
1777 | "version": "3.2.31",
1778 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz",
1779 | "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==",
1780 | "requires": {
1781 | "@vue/compiler-core": "3.2.31",
1782 | "@vue/shared": "3.2.31"
1783 | }
1784 | },
1785 | "@vue/compiler-sfc": {
1786 | "version": "3.2.31",
1787 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz",
1788 | "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==",
1789 | "requires": {
1790 | "@babel/parser": "^7.16.4",
1791 | "@vue/compiler-core": "3.2.31",
1792 | "@vue/compiler-dom": "3.2.31",
1793 | "@vue/compiler-ssr": "3.2.31",
1794 | "@vue/reactivity-transform": "3.2.31",
1795 | "@vue/shared": "3.2.31",
1796 | "estree-walker": "^2.0.2",
1797 | "magic-string": "^0.25.7",
1798 | "postcss": "^8.1.10",
1799 | "source-map": "^0.6.1"
1800 | }
1801 | },
1802 | "@vue/compiler-ssr": {
1803 | "version": "3.2.31",
1804 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz",
1805 | "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==",
1806 | "requires": {
1807 | "@vue/compiler-dom": "3.2.31",
1808 | "@vue/shared": "3.2.31"
1809 | }
1810 | },
1811 | "@vue/reactivity": {
1812 | "version": "3.2.31",
1813 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz",
1814 | "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==",
1815 | "requires": {
1816 | "@vue/shared": "3.2.31"
1817 | }
1818 | },
1819 | "@vue/reactivity-transform": {
1820 | "version": "3.2.31",
1821 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz",
1822 | "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==",
1823 | "requires": {
1824 | "@babel/parser": "^7.16.4",
1825 | "@vue/compiler-core": "3.2.31",
1826 | "@vue/shared": "3.2.31",
1827 | "estree-walker": "^2.0.2",
1828 | "magic-string": "^0.25.7"
1829 | }
1830 | },
1831 | "@vue/runtime-core": {
1832 | "version": "3.2.31",
1833 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz",
1834 | "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==",
1835 | "requires": {
1836 | "@vue/reactivity": "3.2.31",
1837 | "@vue/shared": "3.2.31"
1838 | }
1839 | },
1840 | "@vue/runtime-dom": {
1841 | "version": "3.2.31",
1842 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz",
1843 | "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==",
1844 | "requires": {
1845 | "@vue/runtime-core": "3.2.31",
1846 | "@vue/shared": "3.2.31",
1847 | "csstype": "^2.6.8"
1848 | }
1849 | },
1850 | "@vue/server-renderer": {
1851 | "version": "3.2.31",
1852 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz",
1853 | "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==",
1854 | "requires": {
1855 | "@vue/compiler-ssr": "3.2.31",
1856 | "@vue/shared": "3.2.31"
1857 | }
1858 | },
1859 | "@vue/shared": {
1860 | "version": "3.2.31",
1861 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz",
1862 | "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ=="
1863 | },
1864 | "@vueuse/core": {
1865 | "version": "8.2.5",
1866 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.2.5.tgz",
1867 | "integrity": "sha512-5prZAA1Ji2ltwNUnzreu6WIXYqHYP/9U2BiY5mD/650VYLpVcwVlYznJDFcLCmEWI3o3Vd34oS1FUf+6Mh68GQ==",
1868 | "requires": {
1869 | "@vueuse/metadata": "8.2.5",
1870 | "@vueuse/shared": "8.2.5",
1871 | "vue-demi": "*"
1872 | },
1873 | "dependencies": {
1874 | "@vueuse/shared": {
1875 | "version": "8.2.5",
1876 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.2.5.tgz",
1877 | "integrity": "sha512-lNWo+7sk6JCuOj4AiYM+6HZ6fq4xAuVq1sVckMQKgfCJZpZRe4i8es+ZULO5bYTKP+VrOCtqrLR2GzEfrbr3YQ==",
1878 | "requires": {
1879 | "vue-demi": "*"
1880 | }
1881 | },
1882 | "vue-demi": {
1883 | "version": "0.12.5",
1884 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz",
1885 | "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==",
1886 | "requires": {}
1887 | }
1888 | }
1889 | },
1890 | "@vueuse/metadata": {
1891 | "version": "8.2.5",
1892 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.2.5.tgz",
1893 | "integrity": "sha512-Lk9plJjh9cIdiRdcj16dau+2LANxIdFCiTgdfzwYXbflxq0QnMBeOD2qHgKDE7fuVrtPcVWj8VSuZEx1HRfNQA=="
1894 | },
1895 | "acorn": {
1896 | "version": "7.4.1",
1897 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
1898 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
1899 | "dev": true
1900 | },
1901 | "asap": {
1902 | "version": "2.0.6",
1903 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
1904 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
1905 | "dev": true
1906 | },
1907 | "assert-never": {
1908 | "version": "1.2.1",
1909 | "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
1910 | "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==",
1911 | "dev": true
1912 | },
1913 | "babel-walk": {
1914 | "version": "3.0.0-canary-5",
1915 | "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
1916 | "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
1917 | "dev": true,
1918 | "requires": {
1919 | "@babel/types": "^7.9.6"
1920 | }
1921 | },
1922 | "call-bind": {
1923 | "version": "1.0.2",
1924 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
1925 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
1926 | "dev": true,
1927 | "requires": {
1928 | "function-bind": "^1.1.1",
1929 | "get-intrinsic": "^1.0.2"
1930 | }
1931 | },
1932 | "character-parser": {
1933 | "version": "2.2.0",
1934 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
1935 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
1936 | "dev": true,
1937 | "requires": {
1938 | "is-regex": "^1.0.3"
1939 | }
1940 | },
1941 | "constantinople": {
1942 | "version": "4.0.1",
1943 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
1944 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
1945 | "dev": true,
1946 | "requires": {
1947 | "@babel/parser": "^7.6.0",
1948 | "@babel/types": "^7.6.1"
1949 | }
1950 | },
1951 | "csstype": {
1952 | "version": "2.6.20",
1953 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz",
1954 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
1955 | },
1956 | "doctypes": {
1957 | "version": "1.1.0",
1958 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
1959 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=",
1960 | "dev": true
1961 | },
1962 | "dom-serializer": {
1963 | "version": "1.3.2",
1964 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
1965 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
1966 | "dev": true,
1967 | "requires": {
1968 | "domelementtype": "^2.0.1",
1969 | "domhandler": "^4.2.0",
1970 | "entities": "^2.0.0"
1971 | },
1972 | "dependencies": {
1973 | "entities": {
1974 | "version": "2.2.0",
1975 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
1976 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
1977 | "dev": true
1978 | }
1979 | }
1980 | },
1981 | "domelementtype": {
1982 | "version": "2.3.0",
1983 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
1984 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
1985 | "dev": true
1986 | },
1987 | "domhandler": {
1988 | "version": "4.3.1",
1989 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
1990 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
1991 | "dev": true,
1992 | "requires": {
1993 | "domelementtype": "^2.2.0"
1994 | }
1995 | },
1996 | "domutils": {
1997 | "version": "2.8.0",
1998 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
1999 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
2000 | "dev": true,
2001 | "requires": {
2002 | "dom-serializer": "^1.0.1",
2003 | "domelementtype": "^2.2.0",
2004 | "domhandler": "^4.2.0"
2005 | }
2006 | },
2007 | "emmet": {
2008 | "version": "2.3.6",
2009 | "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.3.6.tgz",
2010 | "integrity": "sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==",
2011 | "dev": true,
2012 | "requires": {
2013 | "@emmetio/abbreviation": "^2.2.3",
2014 | "@emmetio/css-abbreviation": "^2.1.4"
2015 | }
2016 | },
2017 | "entities": {
2018 | "version": "3.0.1",
2019 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
2020 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
2021 | "dev": true
2022 | },
2023 | "esbuild": {
2024 | "version": "0.14.34",
2025 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.34.tgz",
2026 | "integrity": "sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg==",
2027 | "dev": true,
2028 | "requires": {
2029 | "esbuild-android-64": "0.14.34",
2030 | "esbuild-android-arm64": "0.14.34",
2031 | "esbuild-darwin-64": "0.14.34",
2032 | "esbuild-darwin-arm64": "0.14.34",
2033 | "esbuild-freebsd-64": "0.14.34",
2034 | "esbuild-freebsd-arm64": "0.14.34",
2035 | "esbuild-linux-32": "0.14.34",
2036 | "esbuild-linux-64": "0.14.34",
2037 | "esbuild-linux-arm": "0.14.34",
2038 | "esbuild-linux-arm64": "0.14.34",
2039 | "esbuild-linux-mips64le": "0.14.34",
2040 | "esbuild-linux-ppc64le": "0.14.34",
2041 | "esbuild-linux-riscv64": "0.14.34",
2042 | "esbuild-linux-s390x": "0.14.34",
2043 | "esbuild-netbsd-64": "0.14.34",
2044 | "esbuild-openbsd-64": "0.14.34",
2045 | "esbuild-sunos-64": "0.14.34",
2046 | "esbuild-windows-32": "0.14.34",
2047 | "esbuild-windows-64": "0.14.34",
2048 | "esbuild-windows-arm64": "0.14.34"
2049 | }
2050 | },
2051 | "esbuild-android-64": {
2052 | "version": "0.14.34",
2053 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.34.tgz",
2054 | "integrity": "sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw==",
2055 | "dev": true,
2056 | "optional": true
2057 | },
2058 | "esbuild-android-arm64": {
2059 | "version": "0.14.34",
2060 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.34.tgz",
2061 | "integrity": "sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew==",
2062 | "dev": true,
2063 | "optional": true
2064 | },
2065 | "esbuild-darwin-64": {
2066 | "version": "0.14.34",
2067 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.34.tgz",
2068 | "integrity": "sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw==",
2069 | "dev": true,
2070 | "optional": true
2071 | },
2072 | "esbuild-darwin-arm64": {
2073 | "version": "0.14.34",
2074 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.34.tgz",
2075 | "integrity": "sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w==",
2076 | "dev": true,
2077 | "optional": true
2078 | },
2079 | "esbuild-freebsd-64": {
2080 | "version": "0.14.34",
2081 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.34.tgz",
2082 | "integrity": "sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA==",
2083 | "dev": true,
2084 | "optional": true
2085 | },
2086 | "esbuild-freebsd-arm64": {
2087 | "version": "0.14.34",
2088 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.34.tgz",
2089 | "integrity": "sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA==",
2090 | "dev": true,
2091 | "optional": true
2092 | },
2093 | "esbuild-linux-32": {
2094 | "version": "0.14.34",
2095 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.34.tgz",
2096 | "integrity": "sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ==",
2097 | "dev": true,
2098 | "optional": true
2099 | },
2100 | "esbuild-linux-64": {
2101 | "version": "0.14.34",
2102 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.34.tgz",
2103 | "integrity": "sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ==",
2104 | "dev": true,
2105 | "optional": true
2106 | },
2107 | "esbuild-linux-arm": {
2108 | "version": "0.14.34",
2109 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.34.tgz",
2110 | "integrity": "sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg==",
2111 | "dev": true,
2112 | "optional": true
2113 | },
2114 | "esbuild-linux-arm64": {
2115 | "version": "0.14.34",
2116 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.34.tgz",
2117 | "integrity": "sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA==",
2118 | "dev": true,
2119 | "optional": true
2120 | },
2121 | "esbuild-linux-mips64le": {
2122 | "version": "0.14.34",
2123 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.34.tgz",
2124 | "integrity": "sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw==",
2125 | "dev": true,
2126 | "optional": true
2127 | },
2128 | "esbuild-linux-ppc64le": {
2129 | "version": "0.14.34",
2130 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.34.tgz",
2131 | "integrity": "sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg==",
2132 | "dev": true,
2133 | "optional": true
2134 | },
2135 | "esbuild-linux-riscv64": {
2136 | "version": "0.14.34",
2137 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.34.tgz",
2138 | "integrity": "sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA==",
2139 | "dev": true,
2140 | "optional": true
2141 | },
2142 | "esbuild-linux-s390x": {
2143 | "version": "0.14.34",
2144 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.34.tgz",
2145 | "integrity": "sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA==",
2146 | "dev": true,
2147 | "optional": true
2148 | },
2149 | "esbuild-netbsd-64": {
2150 | "version": "0.14.34",
2151 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.34.tgz",
2152 | "integrity": "sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ==",
2153 | "dev": true,
2154 | "optional": true
2155 | },
2156 | "esbuild-openbsd-64": {
2157 | "version": "0.14.34",
2158 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.34.tgz",
2159 | "integrity": "sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow==",
2160 | "dev": true,
2161 | "optional": true
2162 | },
2163 | "esbuild-sunos-64": {
2164 | "version": "0.14.34",
2165 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.34.tgz",
2166 | "integrity": "sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA==",
2167 | "dev": true,
2168 | "optional": true
2169 | },
2170 | "esbuild-windows-32": {
2171 | "version": "0.14.34",
2172 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.34.tgz",
2173 | "integrity": "sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg==",
2174 | "dev": true,
2175 | "optional": true
2176 | },
2177 | "esbuild-windows-64": {
2178 | "version": "0.14.34",
2179 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.34.tgz",
2180 | "integrity": "sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q==",
2181 | "dev": true,
2182 | "optional": true
2183 | },
2184 | "esbuild-windows-arm64": {
2185 | "version": "0.14.34",
2186 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.34.tgz",
2187 | "integrity": "sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg==",
2188 | "dev": true,
2189 | "optional": true
2190 | },
2191 | "estree-walker": {
2192 | "version": "2.0.2",
2193 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
2194 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
2195 | },
2196 | "fsevents": {
2197 | "version": "2.3.2",
2198 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
2199 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
2200 | "dev": true,
2201 | "optional": true
2202 | },
2203 | "function-bind": {
2204 | "version": "1.1.1",
2205 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
2206 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
2207 | "dev": true
2208 | },
2209 | "get-intrinsic": {
2210 | "version": "1.1.1",
2211 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
2212 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
2213 | "dev": true,
2214 | "requires": {
2215 | "function-bind": "^1.1.1",
2216 | "has": "^1.0.3",
2217 | "has-symbols": "^1.0.1"
2218 | }
2219 | },
2220 | "has": {
2221 | "version": "1.0.3",
2222 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
2223 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
2224 | "dev": true,
2225 | "requires": {
2226 | "function-bind": "^1.1.1"
2227 | }
2228 | },
2229 | "has-symbols": {
2230 | "version": "1.0.3",
2231 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
2232 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
2233 | "dev": true
2234 | },
2235 | "has-tostringtag": {
2236 | "version": "1.0.0",
2237 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
2238 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
2239 | "dev": true,
2240 | "requires": {
2241 | "has-symbols": "^1.0.2"
2242 | }
2243 | },
2244 | "htmlparser2": {
2245 | "version": "7.2.0",
2246 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
2247 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
2248 | "dev": true,
2249 | "requires": {
2250 | "domelementtype": "^2.0.1",
2251 | "domhandler": "^4.2.2",
2252 | "domutils": "^2.8.0",
2253 | "entities": "^3.0.1"
2254 | }
2255 | },
2256 | "is-core-module": {
2257 | "version": "2.8.1",
2258 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
2259 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
2260 | "dev": true,
2261 | "requires": {
2262 | "has": "^1.0.3"
2263 | }
2264 | },
2265 | "is-expression": {
2266 | "version": "4.0.0",
2267 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
2268 | "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
2269 | "dev": true,
2270 | "requires": {
2271 | "acorn": "^7.1.1",
2272 | "object-assign": "^4.1.1"
2273 | }
2274 | },
2275 | "is-promise": {
2276 | "version": "2.2.2",
2277 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
2278 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
2279 | "dev": true
2280 | },
2281 | "is-regex": {
2282 | "version": "1.1.4",
2283 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
2284 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
2285 | "dev": true,
2286 | "requires": {
2287 | "call-bind": "^1.0.2",
2288 | "has-tostringtag": "^1.0.0"
2289 | }
2290 | },
2291 | "js-stringify": {
2292 | "version": "1.0.2",
2293 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
2294 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=",
2295 | "dev": true
2296 | },
2297 | "jsonc-parser": {
2298 | "version": "2.3.1",
2299 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
2300 | "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
2301 | "dev": true
2302 | },
2303 | "jstransformer": {
2304 | "version": "1.0.0",
2305 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
2306 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
2307 | "dev": true,
2308 | "requires": {
2309 | "is-promise": "^2.0.0",
2310 | "promise": "^7.0.1"
2311 | }
2312 | },
2313 | "lru-cache": {
2314 | "version": "7.8.0",
2315 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz",
2316 | "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==",
2317 | "dev": true
2318 | },
2319 | "magic-string": {
2320 | "version": "0.25.9",
2321 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
2322 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
2323 | "requires": {
2324 | "sourcemap-codec": "^1.4.8"
2325 | }
2326 | },
2327 | "nanoid": {
2328 | "version": "3.3.2",
2329 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
2330 | "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA=="
2331 | },
2332 | "object-assign": {
2333 | "version": "4.1.1",
2334 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2335 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
2336 | "dev": true
2337 | },
2338 | "path-parse": {
2339 | "version": "1.0.7",
2340 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2341 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2342 | "dev": true
2343 | },
2344 | "picocolors": {
2345 | "version": "1.0.0",
2346 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2347 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
2348 | },
2349 | "postcss": {
2350 | "version": "8.4.12",
2351 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
2352 | "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
2353 | "requires": {
2354 | "nanoid": "^3.3.1",
2355 | "picocolors": "^1.0.0",
2356 | "source-map-js": "^1.0.2"
2357 | }
2358 | },
2359 | "promise": {
2360 | "version": "7.3.1",
2361 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
2362 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
2363 | "dev": true,
2364 | "requires": {
2365 | "asap": "~2.0.3"
2366 | }
2367 | },
2368 | "pug": {
2369 | "version": "3.0.2",
2370 | "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
2371 | "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
2372 | "dev": true,
2373 | "requires": {
2374 | "pug-code-gen": "^3.0.2",
2375 | "pug-filters": "^4.0.0",
2376 | "pug-lexer": "^5.0.1",
2377 | "pug-linker": "^4.0.0",
2378 | "pug-load": "^3.0.0",
2379 | "pug-parser": "^6.0.0",
2380 | "pug-runtime": "^3.0.1",
2381 | "pug-strip-comments": "^2.0.0"
2382 | }
2383 | },
2384 | "pug-attrs": {
2385 | "version": "3.0.0",
2386 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
2387 | "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
2388 | "dev": true,
2389 | "requires": {
2390 | "constantinople": "^4.0.1",
2391 | "js-stringify": "^1.0.2",
2392 | "pug-runtime": "^3.0.0"
2393 | }
2394 | },
2395 | "pug-code-gen": {
2396 | "version": "3.0.2",
2397 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
2398 | "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
2399 | "dev": true,
2400 | "requires": {
2401 | "constantinople": "^4.0.1",
2402 | "doctypes": "^1.1.0",
2403 | "js-stringify": "^1.0.2",
2404 | "pug-attrs": "^3.0.0",
2405 | "pug-error": "^2.0.0",
2406 | "pug-runtime": "^3.0.0",
2407 | "void-elements": "^3.1.0",
2408 | "with": "^7.0.0"
2409 | }
2410 | },
2411 | "pug-error": {
2412 | "version": "2.0.0",
2413 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
2414 | "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==",
2415 | "dev": true
2416 | },
2417 | "pug-filters": {
2418 | "version": "4.0.0",
2419 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
2420 | "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
2421 | "dev": true,
2422 | "requires": {
2423 | "constantinople": "^4.0.1",
2424 | "jstransformer": "1.0.0",
2425 | "pug-error": "^2.0.0",
2426 | "pug-walk": "^2.0.0",
2427 | "resolve": "^1.15.1"
2428 | }
2429 | },
2430 | "pug-lexer": {
2431 | "version": "5.0.1",
2432 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
2433 | "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
2434 | "dev": true,
2435 | "requires": {
2436 | "character-parser": "^2.2.0",
2437 | "is-expression": "^4.0.0",
2438 | "pug-error": "^2.0.0"
2439 | }
2440 | },
2441 | "pug-linker": {
2442 | "version": "4.0.0",
2443 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
2444 | "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
2445 | "dev": true,
2446 | "requires": {
2447 | "pug-error": "^2.0.0",
2448 | "pug-walk": "^2.0.0"
2449 | }
2450 | },
2451 | "pug-load": {
2452 | "version": "3.0.0",
2453 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
2454 | "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
2455 | "dev": true,
2456 | "requires": {
2457 | "object-assign": "^4.1.1",
2458 | "pug-walk": "^2.0.0"
2459 | }
2460 | },
2461 | "pug-parser": {
2462 | "version": "6.0.0",
2463 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
2464 | "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
2465 | "dev": true,
2466 | "requires": {
2467 | "pug-error": "^2.0.0",
2468 | "token-stream": "1.0.0"
2469 | }
2470 | },
2471 | "pug-runtime": {
2472 | "version": "3.0.1",
2473 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
2474 | "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==",
2475 | "dev": true
2476 | },
2477 | "pug-strip-comments": {
2478 | "version": "2.0.0",
2479 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
2480 | "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
2481 | "dev": true,
2482 | "requires": {
2483 | "pug-error": "^2.0.0"
2484 | }
2485 | },
2486 | "pug-walk": {
2487 | "version": "2.0.0",
2488 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
2489 | "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==",
2490 | "dev": true
2491 | },
2492 | "request-light": {
2493 | "version": "0.5.7",
2494 | "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.7.tgz",
2495 | "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==",
2496 | "dev": true
2497 | },
2498 | "resolve": {
2499 | "version": "1.22.0",
2500 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
2501 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
2502 | "dev": true,
2503 | "requires": {
2504 | "is-core-module": "^2.8.1",
2505 | "path-parse": "^1.0.7",
2506 | "supports-preserve-symlinks-flag": "^1.0.0"
2507 | }
2508 | },
2509 | "rollup": {
2510 | "version": "2.70.1",
2511 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz",
2512 | "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==",
2513 | "dev": true,
2514 | "requires": {
2515 | "fsevents": "~2.3.2"
2516 | }
2517 | },
2518 | "semver": {
2519 | "version": "7.3.6",
2520 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
2521 | "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
2522 | "dev": true,
2523 | "requires": {
2524 | "lru-cache": "^7.4.0"
2525 | }
2526 | },
2527 | "source-map": {
2528 | "version": "0.6.1",
2529 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2530 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
2531 | },
2532 | "source-map-js": {
2533 | "version": "1.0.2",
2534 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2535 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
2536 | },
2537 | "sourcemap-codec": {
2538 | "version": "1.4.8",
2539 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
2540 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
2541 | },
2542 | "supports-preserve-symlinks-flag": {
2543 | "version": "1.0.0",
2544 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2545 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2546 | "dev": true
2547 | },
2548 | "to-fast-properties": {
2549 | "version": "2.0.0",
2550 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
2551 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
2552 | "dev": true
2553 | },
2554 | "token-stream": {
2555 | "version": "1.0.0",
2556 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
2557 | "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=",
2558 | "dev": true
2559 | },
2560 | "typescript": {
2561 | "version": "4.6.3",
2562 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
2563 | "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
2564 | "dev": true
2565 | },
2566 | "upath": {
2567 | "version": "2.0.1",
2568 | "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
2569 | "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
2570 | "dev": true
2571 | },
2572 | "vite": {
2573 | "version": "2.9.1",
2574 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
2575 | "integrity": "sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==",
2576 | "dev": true,
2577 | "requires": {
2578 | "esbuild": "^0.14.27",
2579 | "fsevents": "~2.3.2",
2580 | "postcss": "^8.4.12",
2581 | "resolve": "^1.22.0",
2582 | "rollup": "^2.59.0"
2583 | }
2584 | },
2585 | "void-elements": {
2586 | "version": "3.1.0",
2587 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
2588 | "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
2589 | "dev": true
2590 | },
2591 | "vscode-css-languageservice": {
2592 | "version": "5.4.1",
2593 | "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.4.1.tgz",
2594 | "integrity": "sha512-W7D3GKFXf97ReAaU4EZ2nxVO1kQhztbycJgc1b/Ipr0h8zYWr88BADmrXu02z+lsCS84D7Sr4hoUzDKeaFn2Kg==",
2595 | "dev": true,
2596 | "requires": {
2597 | "vscode-languageserver-textdocument": "^1.0.4",
2598 | "vscode-languageserver-types": "^3.16.0",
2599 | "vscode-nls": "^5.0.0",
2600 | "vscode-uri": "^3.0.3"
2601 | }
2602 | },
2603 | "vscode-html-languageservice": {
2604 | "version": "4.2.4",
2605 | "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.4.tgz",
2606 | "integrity": "sha512-1HqvXKOq9WlZyW4HTD+0XzrjZoZ/YFrgQY2PZqktbRloHXVAUKm6+cAcvZi4YqKPVn05/CK7do+KBHfuSaEdbg==",
2607 | "dev": true,
2608 | "requires": {
2609 | "vscode-languageserver-textdocument": "^1.0.4",
2610 | "vscode-languageserver-types": "^3.16.0",
2611 | "vscode-nls": "^5.0.0",
2612 | "vscode-uri": "^3.0.3"
2613 | }
2614 | },
2615 | "vscode-json-languageservice": {
2616 | "version": "4.2.1",
2617 | "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz",
2618 | "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==",
2619 | "dev": true,
2620 | "requires": {
2621 | "jsonc-parser": "^3.0.0",
2622 | "vscode-languageserver-textdocument": "^1.0.3",
2623 | "vscode-languageserver-types": "^3.16.0",
2624 | "vscode-nls": "^5.0.0",
2625 | "vscode-uri": "^3.0.3"
2626 | },
2627 | "dependencies": {
2628 | "jsonc-parser": {
2629 | "version": "3.0.0",
2630 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
2631 | "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
2632 | "dev": true
2633 | }
2634 | }
2635 | },
2636 | "vscode-jsonrpc": {
2637 | "version": "8.0.0-next.7",
2638 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.7.tgz",
2639 | "integrity": "sha512-JX/F31LEsims0dAlOTKFE4E+AJMiJvdRSRViifFJSqSN7EzeYyWlfuDchF7g91oRNPZOIWfibTkDf3/UMsQGzQ==",
2640 | "dev": true
2641 | },
2642 | "vscode-languageserver": {
2643 | "version": "8.0.0-next.10",
2644 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.0-next.10.tgz",
2645 | "integrity": "sha512-sdjldl9ipuBSWVw5ENVMRcOVQwF0o+J6+lNA7FrB8MiLmzflnfjRoJMqA5tCEY8S/J/+P56ZR/dqiQnRYg5m8w==",
2646 | "dev": true,
2647 | "requires": {
2648 | "vscode-languageserver-protocol": "3.17.0-next.16"
2649 | }
2650 | },
2651 | "vscode-languageserver-protocol": {
2652 | "version": "3.17.0-next.16",
2653 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.16.tgz",
2654 | "integrity": "sha512-tx4DnXw9u3N7vw+bx6n2NKp6FoxoNwiP/biH83AS30I2AnTGyLd7afSeH6Oewn2E8jvB7K15bs12sMppkKOVeQ==",
2655 | "dev": true,
2656 | "requires": {
2657 | "vscode-jsonrpc": "8.0.0-next.7",
2658 | "vscode-languageserver-types": "3.17.0-next.9"
2659 | },
2660 | "dependencies": {
2661 | "vscode-languageserver-types": {
2662 | "version": "3.17.0-next.9",
2663 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.9.tgz",
2664 | "integrity": "sha512-9/PeDNPYduaoXRUzYpqmu4ZV9L01HGo0wH9FUt+sSHR7IXwA7xoXBfNUlv8gB9H0D2WwEmMomSy1NmhjKQyn3A==",
2665 | "dev": true
2666 | }
2667 | }
2668 | },
2669 | "vscode-languageserver-textdocument": {
2670 | "version": "1.0.4",
2671 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz",
2672 | "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==",
2673 | "dev": true
2674 | },
2675 | "vscode-languageserver-types": {
2676 | "version": "3.16.0",
2677 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
2678 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==",
2679 | "dev": true
2680 | },
2681 | "vscode-nls": {
2682 | "version": "5.0.0",
2683 | "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz",
2684 | "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==",
2685 | "dev": true
2686 | },
2687 | "vscode-pug-languageservice": {
2688 | "version": "0.29.8",
2689 | "resolved": "https://registry.npmjs.org/vscode-pug-languageservice/-/vscode-pug-languageservice-0.29.8.tgz",
2690 | "integrity": "sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==",
2691 | "dev": true,
2692 | "requires": {
2693 | "@volar/code-gen": "0.29.8",
2694 | "@volar/shared": "0.29.8",
2695 | "@volar/source-map": "0.29.8",
2696 | "@volar/transforms": "0.29.8",
2697 | "pug-lexer": "^5.0.1",
2698 | "pug-parser": "^6.0.0",
2699 | "vscode-languageserver": "^8.0.0-next.2"
2700 | }
2701 | },
2702 | "vscode-typescript-languageservice": {
2703 | "version": "0.29.8",
2704 | "resolved": "https://registry.npmjs.org/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.29.8.tgz",
2705 | "integrity": "sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==",
2706 | "dev": true,
2707 | "requires": {
2708 | "@volar/shared": "0.29.8",
2709 | "semver": "^7.3.5",
2710 | "upath": "^2.0.1",
2711 | "vscode-languageserver": "^8.0.0-next.2",
2712 | "vscode-languageserver-textdocument": "^1.0.1"
2713 | }
2714 | },
2715 | "vscode-uri": {
2716 | "version": "3.0.3",
2717 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz",
2718 | "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==",
2719 | "dev": true
2720 | },
2721 | "vscode-vue-languageservice": {
2722 | "version": "0.29.8",
2723 | "resolved": "https://registry.npmjs.org/vscode-vue-languageservice/-/vscode-vue-languageservice-0.29.8.tgz",
2724 | "integrity": "sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==",
2725 | "dev": true,
2726 | "requires": {
2727 | "@volar/code-gen": "0.29.8",
2728 | "@volar/html2pug": "0.29.8",
2729 | "@volar/shared": "0.29.8",
2730 | "@volar/source-map": "0.29.8",
2731 | "@volar/transforms": "0.29.8",
2732 | "@volar/vue-code-gen": "0.29.8",
2733 | "@vscode/emmet-helper": "^2.8.0",
2734 | "@vue/reactivity": "^3.2.21",
2735 | "@vue/shared": "^3.2.21",
2736 | "request-light": "^0.5.4",
2737 | "upath": "^2.0.1",
2738 | "vscode-css-languageservice": "^5.1.7",
2739 | "vscode-html-languageservice": "^4.1.0",
2740 | "vscode-json-languageservice": "^4.1.8",
2741 | "vscode-languageserver": "^8.0.0-next.2",
2742 | "vscode-languageserver-textdocument": "^1.0.1",
2743 | "vscode-pug-languageservice": "0.29.8",
2744 | "vscode-typescript-languageservice": "0.29.8"
2745 | }
2746 | },
2747 | "vue": {
2748 | "version": "3.2.31",
2749 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz",
2750 | "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==",
2751 | "requires": {
2752 | "@vue/compiler-dom": "3.2.31",
2753 | "@vue/compiler-sfc": "3.2.31",
2754 | "@vue/runtime-dom": "3.2.31",
2755 | "@vue/server-renderer": "3.2.31",
2756 | "@vue/shared": "3.2.31"
2757 | }
2758 | },
2759 | "vue-tsc": {
2760 | "version": "0.29.8",
2761 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.29.8.tgz",
2762 | "integrity": "sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==",
2763 | "dev": true,
2764 | "requires": {
2765 | "@volar/shared": "0.29.8",
2766 | "vscode-vue-languageservice": "0.29.8"
2767 | }
2768 | },
2769 | "with": {
2770 | "version": "7.0.2",
2771 | "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
2772 | "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
2773 | "dev": true,
2774 | "requires": {
2775 | "@babel/parser": "^7.9.6",
2776 | "@babel/types": "^7.9.6",
2777 | "assert-never": "^1.2.1",
2778 | "babel-walk": "3.0.0-canary-5"
2779 | }
2780 | }
2781 | }
2782 | }
2783 |
--------------------------------------------------------------------------------
/vue/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-project",
3 | "private": true,
4 | "version": "0.0.0",
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vue-tsc --noEmit && vite build",
8 | "preview": "vite preview"
9 | },
10 | "dependencies": {
11 | "@vueuse/core": "^8.2.5",
12 | "vue": "^3.2.25"
13 | },
14 | "devDependencies": {
15 | "@vitejs/plugin-vue": "^2.3.0",
16 | "typescript": "^4.5.4",
17 | "vite": "^2.9.0",
18 | "vue-tsc": "^0.29.8"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/vue/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wuruoyun/electron-vue-spring/42eccb72578bb45e0512658504f144928cb3ab27/vue/public/favicon.ico
--------------------------------------------------------------------------------
/vue/src/App.vue:
--------------------------------------------------------------------------------
1 |
52 |
53 |
54 |
55 |
Items from Server
56 |
Fetching items...
57 |
58 | Failed to receive items. {{ error }}
59 |
60 | {{ item.name }}
61 |
62 |
63 |
64 |
Set badge count (Mac Only)
65 |
Click buttons below to set app badge count (calling Electron via preload script)
66 |
Increase
67 |
Decrease
68 |
69 |
File dialog
70 |
Show Open Dialog
71 |
Show Save Dialog
72 |
73 | Selected File(s)
74 | : {{ selectedFile }}
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/vue/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wuruoyun/electron-vue-spring/42eccb72578bb45e0512658504f144928cb3ab27/vue/src/assets/logo.png
--------------------------------------------------------------------------------
/vue/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare module '*.vue' {
4 | import type { DefineComponent } from 'vue'
5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
6 | const component: DefineComponent<{}, {}, any>
7 | export default component
8 | }
9 |
--------------------------------------------------------------------------------
/vue/src/interop-fallback.ts:
--------------------------------------------------------------------------------
1 | import type Interop from './types/InterOp'
2 |
3 | /* eslint-disable no-console */
4 | function promptNoElectron() {
5 | alert('You are not in Electron.')
6 | }
7 |
8 | // The following will be used if front end is run in browser during development.
9 | const fallBack: Interop = {
10 | log: {
11 | info(msg: string) {
12 | console.info(msg)
13 | },
14 | debug(msg: string) {
15 | console.debug(msg)
16 | },
17 | warn(msg: string) {
18 | console.warn(msg)
19 | },
20 | error(msg: string) {
21 | console.error(msg)
22 | },
23 | log(msg: string) {
24 | console.log(msg)
25 | },
26 | },
27 | setBadgeCount(count: Number) {
28 | promptNoElectron()
29 | },
30 | showOpenDialog() {
31 | return new Promise((resolve) => {
32 | promptNoElectron()
33 | resolve(undefined)
34 | })
35 | },
36 | showSaveDialog() {
37 | return new Promise((resolve) => {
38 | promptNoElectron()
39 | resolve(undefined)
40 | })
41 | },
42 | }
43 |
44 | export default fallBack
45 |
--------------------------------------------------------------------------------
/vue/src/keys.ts:
--------------------------------------------------------------------------------
1 | import { InjectionKey } from 'vue'
2 | import Interop from './types/InterOp'
3 |
4 | export const KEY_INTEROP = Symbol() as InjectionKey
5 | export const KEY_LOG = Symbol() as InjectionKey
6 |
--------------------------------------------------------------------------------
/vue/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 | import { KEY_INTEROP, KEY_LOG } from './keys'
4 | import interopFallback from './interop-fallback'
5 |
6 | const app = createApp(App)
7 |
8 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9 | // @ts-ignore the unknown interop on window object
10 | const interop = window.interop || interopFallback
11 | app.provide(KEY_INTEROP, interop)
12 | app.provide(KEY_LOG, interop.log)
13 |
14 | app.mount('#app')
15 |
--------------------------------------------------------------------------------
/vue/src/types/Interop.ts:
--------------------------------------------------------------------------------
1 | export default interface Interop {
2 | log: {
3 | info: (msg: string) => void
4 | debug: (msg: string) => void
5 | warn: (msg: string) => void
6 | error: (msg: string) => void
7 | log: (msg: string) => void
8 | }
9 | setBadgeCount: (count: Number) => void
10 | showOpenDialog: () => Promise
11 | showSaveDialog: () => Promise
12 | }
13 |
--------------------------------------------------------------------------------
/vue/src/types/Item.ts:
--------------------------------------------------------------------------------
1 | export type Item = {
2 | id: string
3 | name: string
4 | }
5 |
--------------------------------------------------------------------------------
/vue/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "useDefineForClassFields": true,
5 | "module": "esnext",
6 | "moduleResolution": "node",
7 | "strict": true,
8 | "jsx": "preserve",
9 | "sourceMap": true,
10 | "resolveJsonModule": true,
11 | "isolatedModules": true,
12 | "skipLibCheck": true,
13 | "esModuleInterop": true,
14 | "lib": ["esnext", "dom"]
15 | },
16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
17 | "references": [{ "path": "./tsconfig.node.json" }]
18 | }
19 |
--------------------------------------------------------------------------------
/vue/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "esnext",
5 | "moduleResolution": "node"
6 | },
7 | "include": ["vite.config.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/vue/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [vue()],
7 | server: {
8 | port: 9000,
9 | proxy: {
10 | '^/api': {
11 | target: 'http://localhost:8080',
12 | changeOrigin: true,
13 | },
14 | '^/actuator/health': {
15 | target: 'http://localhost:8080',
16 | },
17 | },
18 | },
19 | })
20 |
--------------------------------------------------------------------------------