├── .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 | 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 | --------------------------------------------------------------------------------