├── templates
└── vue
│ ├── server
│ ├── Deployment
│ │ └── Azure
│ │ │ ├── .gitignore
│ │ │ ├── zip.sh
│ │ │ ├── README.md
│ │ │ └── app_service.sh
│ ├── wwwroot
│ │ ├── favicon.ico
│ │ ├── img
│ │ │ └── minics.png
│ │ └── Content
│ │ │ ├── Home
│ │ │ ├── Community.md
│ │ │ ├── ASPNet.md
│ │ │ ├── Tailwind.md
│ │ │ ├── MinimalAPI.md
│ │ │ ├── Ecosystem.md
│ │ │ ├── Documentation.md
│ │ │ ├── Hero.md
│ │ │ └── Tooling.md
│ │ │ ├── About.md
│ │ │ ├── Privacy.md
│ │ │ └── Terms.md
│ ├── appsettings.json
│ ├── Makefile
│ ├── appsettings.Development.json
│ ├── .editorconfig
│ ├── Tests
│ │ ├── Content
│ │ │ └── test.md
│ │ └── ContentTests.cs
│ ├── Program.cs
│ ├── Api
│ │ └── Content.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── .vscode
│ │ ├── tasks.json
│ │ └── launch.json
│ ├── Data
│ │ ├── Models
│ │ │ └── Document.cs
│ │ └── ContentLibrary.cs
│ └── Vue.Starter.csproj
│ ├── icon.png
│ ├── app
│ ├── src
│ │ ├── style.css
│ │ ├── components
│ │ │ ├── Blocks
│ │ │ │ ├── 1280.vue
│ │ │ │ ├── Hero.vue
│ │ │ │ └── Features.vue
│ │ │ └── Nav
│ │ │ │ ├── Global.vue
│ │ │ │ └── Footer.vue
│ │ ├── App.vue
│ │ ├── main.js
│ │ ├── views
│ │ │ ├── AboutView.vue
│ │ │ └── HomeView.vue
│ │ ├── router
│ │ │ └── index.js
│ │ ├── composables
│ │ │ └── seo.js
│ │ └── stores
│ │ │ ├── content.js
│ │ │ └── site.js
│ ├── .vscode
│ │ └── extensions.json
│ ├── public
│ │ ├── favicon.ico
│ │ └── img
│ │ │ └── minics.png
│ ├── postcss.config.js
│ ├── tailwind.config.js
│ ├── .gitignore
│ ├── vite.config.js
│ ├── index.html
│ ├── package.json
│ ├── README.md
│ └── package-lock.json
│ ├── package.json
│ ├── .template.config
│ └── template.json
│ ├── Dockerfile
│ ├── README.md
│ └── .gitignore
├── Makefile
├── CODE-OF-CONDUCT.md
├── README.md
├── LICENSE
├── VueStarterTemplate.csproj
└── .gitignore
/templates/vue/server/Deployment/Azure/.gitignore:
--------------------------------------------------------------------------------
1 | ./deploy.zip
--------------------------------------------------------------------------------
/templates/vue/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robconery/Vue.Starter/HEAD/templates/vue/icon.png
--------------------------------------------------------------------------------
/templates/vue/app/src/style.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 |
--------------------------------------------------------------------------------
/templates/vue/app/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
3 | }
4 |
--------------------------------------------------------------------------------
/templates/vue/app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robconery/Vue.Starter/HEAD/templates/vue/app/public/favicon.ico
--------------------------------------------------------------------------------
/templates/vue/app/public/img/minics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robconery/Vue.Starter/HEAD/templates/vue/app/public/img/minics.png
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robconery/Vue.Starter/HEAD/templates/vue/server/wwwroot/favicon.ico
--------------------------------------------------------------------------------
/templates/vue/app/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/img/minics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robconery/Vue.Starter/HEAD/templates/vue/server/wwwroot/img/minics.png
--------------------------------------------------------------------------------
/templates/vue/app/src/components/Blocks/1280.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | pack:
2 | dotnet pack
3 |
4 | template_dir:
5 | mkdir "templates/vue/.template.config"
6 |
7 | template_config:
8 | touch "templates/vue/.template.config/template.json"
--------------------------------------------------------------------------------
/templates/vue/app/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./index.html",
5 | "./src/**/*.{vue,js,ts,jsx,tsx}",
6 | ],
7 | theme: {
8 | extend: {},
9 | },
10 | plugins: [],
11 | }
--------------------------------------------------------------------------------
/templates/vue/server/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*"
10 | }
11 |
--------------------------------------------------------------------------------
/CODE-OF-CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | This project has adopted the code of conduct defined by the Contributor Covenant
4 | to clarify expected behavior in our community.
5 |
6 | For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/Community.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Community
3 | icon: fa-solid fa-users-line
4 | index: 4
5 | ---
6 |
7 | Stuck? Ask your question on [Vue Land](https://chat.vuejs.org/), our official Discord server, or [StackOverflow](https://stackoverflow.com/questions/tagged/vue.js).
--------------------------------------------------------------------------------
/templates/vue/server/Makefile:
--------------------------------------------------------------------------------
1 | DEPLOY="./Deployment/azure/zip.sh"
2 | LOGS="./Deployment/azure/logs.sh"
3 | APP_SERVICE="./Deployment/Azure/app_service.sh"
4 |
5 | zip:
6 | source $(DEPLOY)
7 |
8 | logs:
9 | source $(LOGS)
10 |
11 | app_service:
12 | source $(APP_SERVICE)
13 |
14 | .phony: zip app_service logs
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/ASPNet.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ASP.NET Help
3 | icon: fa-regular fa-star
4 | index: 5
5 | ---
6 |
7 | You have a full-featured ASP.NET web application behind this beautiful frontend, powered by C#! If you have any questions or need some help, [start right here](https://dotnet.microsoft.com/en-us/apps/aspnet).
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/Tailwind.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tailwind CSS
3 | image: https://source.unsplash.com/random
4 | ---
5 |
6 | Tailwind is a utility-first CSS framework that is rapidly gaining popularity due to its ease of use. There's a bit of a learning curve, but it's well documented with strong examples and ready-made components.
--------------------------------------------------------------------------------
/templates/vue/server/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.AspNetCore.SpaProxy": "Information",
7 | "Microsoft.Hosting.Lifetime": "Information"
8 | }
9 | },
10 | "ContentDirectory": {
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/MinimalAPI.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Minimal API
3 | icon: fa-solid fa-rocket
4 | index: 6
5 | ---
6 |
7 | [Minimal API](https://minimal-apis.github.io/) is a lean, focused implementation of ASP.NET that users of Express, Sinatra or Flask will appreciate. You have the power of C# and only the API bits you need from ASP.NET.
--------------------------------------------------------------------------------
/templates/vue/app/src/App.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/Ecosystem.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Ecosystem
3 | icon: fa-brands fa-rebel
4 | index: 3
5 | ---
6 |
7 | Get official tools and libraries for your project: [Pinia](https://pinia.vuejs.org/) and [Vue Dev Tools](https://github.com/vuejs/devtools). If you need more resources, we suggest paying [Awesome Vue](https://github.com/vuejs/awesome-vue) a visit.
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/Documentation.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Documentation
3 | icon: fa-solid fa-book
4 | index: 1
5 | ---
6 |
7 | Vue’s [official documentation](https://vuejs.org/) provides you with all information you need to get started. ASP.NET and Minimal API [tutorials can be found here](https://minimal-apis.github.io/quickstart/), with tons of goodness to help get you off the ground.
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/Hero.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Welcome to the ASP.NET Minimal API/Vue 3 Starter Kit
3 | image: https://dummyimage.com/720x600
4 | ---
5 |
6 | Working with ASP.NET and Vue 3 is simple and fun with this starter template. Get off the ground quickly with [ASP.NET Minimal API](https://minimal-apis.github.io/), [Vue 3](https://vuejs.org) and [Tailwind CSS](https://tailwindcss.com).
--------------------------------------------------------------------------------
/templates/vue/server/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = false
12 | insert_final_newline = false
13 |
14 | [{Makefile,**.mk}]
15 | # Use tabs for indentation (Makefiles require tabs)
16 | indent_style = tab
--------------------------------------------------------------------------------
/templates/vue/app/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import { createPinia } from 'pinia'
3 | import { createHead } from "@vueuse/head" //for SEO and meta data
4 |
5 | import App from './App.vue'
6 | import router from './router'
7 |
8 | //tailwind
9 | import './style.css'
10 |
11 | const app = createApp(App)
12 |
13 | app.use(createPinia())
14 | app.use(createHead());
15 | app.use(router)
16 |
17 | app.mount('#app')
18 |
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Home/Tooling.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tooling
3 | icon: fa-solid fa-screwdriver-wrench
4 | index: 2
5 | ---
6 |
7 | This project is served and bundled with [Vite](https://vitejs.dev/guide/features.html) as the frontend server. The recommended IDE setup is [VSCode](https://code.visualstudio.com/) + [Volar](https://github.com/johnsoncodehk/volar). If you need to test your components and web pages, check out [Playwright](https://playwright.dev), which is set up for you.
--------------------------------------------------------------------------------
/templates/vue/app/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | dist
13 | dist-ssr
14 | coverage
15 | *.local
16 |
17 | /cypress/videos/
18 | /cypress/screenshots/
19 |
20 | # Editor directories and files
21 | .vscode/*
22 | !.vscode/extensions.json
23 | .idea
24 | *.suo
25 | *.ntvs*
26 | *.njsproj
27 | *.sln
28 | *.sw?
29 |
30 | test-results/
31 | playwright-report/
32 |
--------------------------------------------------------------------------------
/templates/vue/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "minimal",
3 | "version": "1.0.0",
4 | "description": "Hello and welcome to the ASP.NET Vue Starter Template with ASP.NET Minimal API and Vue 3.0. The only things this template contains are:",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "dotnet watch --project ./server",
8 | "start": "dotnet run --project ./server",
9 | "postinstall": "cd app && npm install"
10 | },
11 | "keywords": [],
12 | "author": "",
13 | "license": "ISC"
14 | }
15 |
--------------------------------------------------------------------------------
/templates/vue/server/Tests/Content/test.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: A Test Document
3 | icon: book
4 | summary: This is a summary that will be used by search
5 | index: 1
6 | image: image/image.png
7 | category: tests
8 | tags:
9 | - fun
10 | - test
11 | - asp
12 | ---
13 |
14 | ## Title
15 |
16 | Ut incididunt pariatur cillum voluptate velit ipsum. Reprehenderit voluptate culpa laboris amet veniam ullamco nulla. Sit excepteur fugiat do esse irure veniam officia ad labore laboris laborum.
17 |
18 | - list
19 | - more
20 | - stuff
--------------------------------------------------------------------------------
/templates/vue/app/vite.config.js:
--------------------------------------------------------------------------------
1 | import { fileURLToPath, URL } from 'node:url'
2 |
3 | import { defineConfig } from 'vite'
4 | import vue from '@vitejs/plugin-vue'
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig({
8 | plugins: [vue()],
9 | resolve: {
10 | alias: {
11 | '@': fileURLToPath(new URL('./src', import.meta.url))
12 | }
13 | },
14 | server:{
15 | port: 3000
16 | },
17 | // build: {
18 | // outDir: "../server/wwwroot/",
19 | // emptyOutDir: true
20 | // }
21 | })
22 |
--------------------------------------------------------------------------------
/templates/vue/server/Deployment/Azure/zip.sh:
--------------------------------------------------------------------------------
1 | rm ./Deployment/Azure/deploy.zip
2 | rm -R bin/Release
3 | dotnet publish --configuration Release
4 | cd bin/Release/net7.0/publish/
5 | zip -r ../../../../Deployment/Azure/deploy.zip . -q
6 | cd -
7 | az webapp deployment source config-zip --resource-group vue-starter --name vue-starter-2298 --src ./Deployment/Azure/deploy.zip
8 | open https://vue-starter-2298.azurewebsites.net
9 | echo 'Site is published 🎉 watching logs. It takes 60 seconds or so to refresh...'
10 | az webapp log tail -n vue-starter-2298 -g vue-starter
11 |
--------------------------------------------------------------------------------
/templates/vue/app/src/views/AboutView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
21 |
--------------------------------------------------------------------------------
/templates/vue/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | The Minimal CS | Vue 3 Starter
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/About.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: About This Site
3 | icon: fa-solid fa-screwdriver-wrench
4 | ---
5 |
6 | ## Lorem Ipsum
7 | Consectetur aliquip duis eu et est. Exercitation duis ad excepteur sunt magna veniam.
8 |
9 | ## Irure et Velit
10 | Irure et velit ut sint pariatur duis magna deserunt ad proident exercitation culpa.
11 |
12 | ## Anim Exceptur
13 | Anim excepteur qui excepteur ipsum irure dolore ea ipsum sint veniam. Amet cupidatat proident sunt in eiusmod Lorem velit culpa consequat amet labore consequat.
14 |
15 | ## Sit Lorem
16 | Sit Lorem pariatur ea laboris et esse officia. Id laboris deserunt ut enim deserunt.
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Privacy.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Our Privacy Policy
3 | icon: fa-solid fa-screwdriver-wrench
4 | ---
5 |
6 | ## Lorem Ipsum
7 | Consectetur aliquip duis eu et est. Exercitation duis ad excepteur sunt magna veniam.
8 |
9 | ## Irure et Velit
10 | Irure et velit ut sint pariatur duis magna deserunt ad proident exercitation culpa.
11 |
12 | ## Anim Exceptur
13 | Anim excepteur qui excepteur ipsum irure dolore ea ipsum sint veniam. Amet cupidatat proident sunt in eiusmod Lorem velit culpa consequat amet labore consequat.
14 |
15 | ## Sit Lorem
16 | Sit Lorem pariatur ea laboris et esse officia. Id laboris deserunt ut enim deserunt.
--------------------------------------------------------------------------------
/templates/vue/server/wwwroot/Content/Terms.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Terms and Conditions
3 | icon: fa-solid fa-screwdriver-wrench
4 | ---
5 |
6 | ## Lorem Ipsum
7 | Consectetur aliquip duis eu et est. Exercitation duis ad excepteur sunt magna veniam.
8 |
9 | ## Irure et Velit
10 | Irure et velit ut sint pariatur duis magna deserunt ad proident exercitation culpa.
11 |
12 | ## Anim Exceptur
13 | Anim excepteur qui excepteur ipsum irure dolore ea ipsum sint veniam. Amet cupidatat proident sunt in eiusmod Lorem velit culpa consequat amet labore consequat.
14 |
15 | ## Sit Lorem
16 | Sit Lorem pariatur ea laboris et esse officia. Id laboris deserunt ut enim deserunt.
--------------------------------------------------------------------------------
/templates/vue/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app2",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vite build",
8 | "preview": "vite preview",
9 | "test:e2e": "playwright test"
10 | },
11 | "dependencies": {
12 | "@vueuse/head": "^1.1.15",
13 | "pinia": "^2.0.26",
14 | "vue": "^3.2.45",
15 | "vue-router": "^4.1.6"
16 | },
17 | "devDependencies": {
18 | "@playwright/test": "^1.28.1",
19 | "@vitejs/plugin-vue": "^3.2.0",
20 | "autoprefixer": "^10.4.13",
21 | "postcss": "^8.4.21",
22 | "tailwindcss": "^3.2.7",
23 | "vite": "^3.2.4"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/templates/vue/server/Program.cs:
--------------------------------------------------------------------------------
1 | using Vue.Starter.Data;
2 |
3 | var builder = WebApplication.CreateBuilder(args);
4 | builder.Services.AddCors();
5 |
6 | var app = builder.Build();
7 | app.UseStaticFiles();
8 | app.MapFallbackToFile("index.html");
9 |
10 | var libPath = Path.Combine(app.Environment.WebRootPath, "Content");
11 | var contentLibrary = new ContentLibrary(libPath).Load();
12 |
13 | app.UseCors(builder => builder
14 | .AllowAnyOrigin()
15 | .AllowAnyMethod()
16 | .AllowAnyHeader()
17 | );
18 |
19 | //load the routes
20 | Vue.Starter.Api.Content.MapRoutes(app, contentLibrary);
21 | app.Run();
22 |
23 | //this is for tests
24 | public partial class Program { }
--------------------------------------------------------------------------------
/templates/vue/app/src/router/index.js:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHistory } from 'vue-router'
2 | import HomeView from '../views/HomeView.vue'
3 |
4 | const router = createRouter({
5 | history: createWebHistory(import.meta.env.BASE_URL),
6 | routes: [
7 | {
8 | path: '/',
9 | name: 'home',
10 | component: HomeView
11 | },
12 | {
13 | path: '/about',
14 | name: 'about',
15 | // route level code-splitting
16 | // this generates a separate chunk (About.[hash].js) for this route
17 | // which is lazy-loaded when the route is visited.
18 | component: () => import('../views/AboutView.vue')
19 | }
20 | ]
21 | })
22 |
23 | export default router
24 |
--------------------------------------------------------------------------------
/templates/vue/server/Api/Content.cs:
--------------------------------------------------------------------------------
1 | namespace Vue.Starter.Api;
2 | using Vue.Starter.Data;
3 |
4 | public static class Content{
5 |
6 | public static void MapRoutes(IEndpointRouteBuilder app, ContentLibrary lib)
7 | {
8 |
9 | app.MapGet("api/about/", () => lib.Documents.First(d => d.Slug == "About"));
10 | app.MapGet("api/terms/", () => lib.Documents.First(d => d.Slug == "Terms"));
11 | app.MapGet("api/privacy/", () => lib.Documents.First(d => d.Slug == "Privacy"));
12 |
13 | //you can separate these into their own methods if you need to
14 | //the / route launches the SPA Proxy so you won't see it
15 | app.MapGet("api/content/{dir}", (string dir) => {
16 | var docs = lib.Documents.Where(d => d.Directory.ToLower() == dir.ToLower());
17 | return docs;
18 | });
19 |
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## The ASP.NET Vue Starter Template
2 |
3 | This is the starter template for ASP.NET and Vue, which will hopefully get you off the ground quickly. Further instructions for how to use this template are in `templates/README.md`.
4 |
5 | To install this template, simply:
6 |
7 | ```
8 | dotnet new install Vue.Web.Starter
9 | ```
10 |
11 | Which will allow you to:
12 |
13 | ```
14 | dotnet new vue
15 | ```
16 |
17 | ## Documentation and Help
18 |
19 | There are READMEs throughout the codebase and, hopefully, enough to go on there. At the end of the day it's a Minimal API + Vue 3 application and you can find links to the documentation for those in the READMEs.
20 |
21 | ## Questions?
22 |
23 | I haven't created a discussion board for this app just yet but I can if people are interested. Otherwise feel free to leave an issue.
24 |
--------------------------------------------------------------------------------
/templates/vue/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "description": "An ASP.NET Minimal API with Vue 3",
4 | "defaultName" : "Vue.Starter",
5 | "repository": {
6 | "url": "https://github.com/robconery/Vue.Starter",
7 | "type": "GitHub"
8 | },
9 | "projectURL": "https://github.com/robconery/Vue.Starter",
10 | "releaseNotes": "Separated client and server projects, added Minimal API with a simple Markdown CMS",
11 | "author": "Rob Conery",
12 | "classifications": [ "Web Application" ],
13 | "name": "ASP.NET Minimal API with Vue 3",
14 | "identity": "Microsoft.Web.Vue3",
15 | "shortName": "vue",
16 | "tags": {
17 | "language": "Web",
18 | "type":"project"
19 | },
20 | "sourceName": "Vue.Starter",
21 | "preferNameDirectory":true
22 | }
--------------------------------------------------------------------------------
/templates/vue/app/src/views/HomeView.vue:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
25 |
28 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/templates/vue/server/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "iisSettings": {
3 | "windowsAuthentication": false,
4 | "anonymousAuthentication": true,
5 | "iisExpress": {
6 | "applicationUrl": "http://localhost:8000",
7 | "sslPort": 44305
8 | }
9 | },
10 | "profiles": {
11 | "http": {
12 | "commandName": "Project",
13 | "dotnetRunMessages": true,
14 | "launchBrowser": true,
15 | "applicationUrl": "http://localhost:8000",
16 | "environmentVariables": {
17 | "ASPNETCORE_ENVIRONMENT": "Development",
18 | "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
19 | }
20 | },
21 | "IIS Express": {
22 | "commandName": "IISExpress",
23 | "launchBrowser": true,
24 | "environmentVariables": {
25 | "ASPNETCORE_ENVIRONMENT": "Development",
26 | "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/templates/vue/Dockerfile:
--------------------------------------------------------------------------------
1 | # This is a multi-stage build so we'll start with a Node image
2 | FROM node:latest AS node_base
3 | RUN echo "NODE Version:" && node --version
4 | RUN echo "NPM Version:" && npm --version
5 |
6 | # Now create a .NET image
7 | FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
8 |
9 | # Copy the node into the .NET image
10 | COPY --from=node_base . .
11 |
12 | # The default app directory for Linux and .NET
13 | # this is not the same as our project's /app
14 | WORKDIR /App
15 |
16 | # Copy everything - both /app and /server
17 | COPY . ./
18 |
19 | # change into the server directory we need to run a few commands
20 | WORKDIR /App/server
21 |
22 | # Restore as distinct layers
23 | RUN dotnet restore
24 |
25 | # Build and publish a release
26 | RUN dotnet publish -c Release -o out
27 |
28 | # Build runtime image
29 | FROM mcr.microsoft.com/dotnet/aspnet:7.0
30 |
31 | WORKDIR /App
32 | COPY --from=build-env /App/server/out .
33 | EXPOSE 80
34 |
35 | ENTRYPOINT ["dotnet", "Vue.Starter.dll"]
36 |
37 |
--------------------------------------------------------------------------------
/templates/vue/server/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "build",
6 | "command": "dotnet",
7 | "type": "process",
8 | "args": [
9 | "build",
10 | "${workspaceFolder}/Contoso.csproj",
11 | "/property:GenerateFullPaths=true",
12 | "/consoleloggerparameters:NoSummary"
13 | ],
14 | "problemMatcher": "$msCompile"
15 | },
16 | {
17 | "label": "publish",
18 | "command": "dotnet",
19 | "type": "process",
20 | "args": [
21 | "publish",
22 | "${workspaceFolder}/Contoso.csproj",
23 | "/property:GenerateFullPaths=true",
24 | "/consoleloggerparameters:NoSummary"
25 | ],
26 | "problemMatcher": "$msCompile"
27 | },
28 | {
29 | "label": "watch",
30 | "command": "dotnet",
31 | "type": "process",
32 | "args": [
33 | "watch",
34 | "run",
35 | "--project",
36 | "${workspaceFolder}/Contoso.csproj"
37 | ],
38 | "problemMatcher": "$msCompile"
39 | }
40 | ]
41 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Vue Starter Template
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.
--------------------------------------------------------------------------------
/templates/vue/app/src/components/Nav/Global.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
--------------------------------------------------------------------------------
/VueStarterTemplate.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | MIT
5 | true
6 | content/templates/vue/README.md
7 | content/templates/vue/icon.png
8 | Template
9 | 1.1.8
10 | Vue.Web.Starter
11 | ASP.NET Core with Vue 3
12 | Rob Conery
13 | ASP.NET Core Web Application with Vue 3
14 | dotnet-new;templates;mvc;web;vue
15 | net7.0
16 | true
17 | false
18 | content
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/templates/vue/app/src/composables/seo.js:
--------------------------------------------------------------------------------
1 | import { useHead } from 'unhead'
2 | export function useSeo({title, description, image}){
3 |
4 | const bits = [
5 | {hid: "title", name: "title", content: title},
6 | {hid: "description", name: "description", content: description},
7 | {hid: "og:title", name: "og:title", content: title},
8 | {hid: "og:description", name: "og:description", content: description},
9 | {hid: "og:image", name: "og:image", content: `https://localhost:3000/images/${image}`},
10 | //set this when you know your site's root
11 | // {hid: "og:url", name: "og:url", content: `https://localhost:3000/${route.path}`},
12 | {hid: "twitter:title", name: "twitter:title", content: title},
13 | {hid: "twitter:description", name: "twitter:description", content: description},
14 | {hid: "twitter:image", name: "twitter:image", content: `https://localhost:3000/images/${image}`},
15 | {hid: "twitter:creator", name: "twitter:creator", content: "@robconery"},
16 | {hid: "twitter:site", name: "twitter:site", content: "@robconery"},
17 | {hid: "twitter:card", name: "twitter:card", content: "summary_large_image"}
18 | ]
19 |
20 | useHead({title: `${title} | Vue Starter`, description: description}, bits);
21 | }
--------------------------------------------------------------------------------
/templates/vue/server/Data/Models/Document.cs:
--------------------------------------------------------------------------------
1 |
2 | using YamlDotNet.Serialization;
3 | namespace Vue.Starter.Data.Models
4 | {
5 | public class Document
6 | {
7 | public Document()
8 | {
9 |
10 | }
11 | public string Directory { get; set; }
12 | public string Path { get; set; }
13 | public string Slug { get; set; }
14 | public DateTime CreatedAt { get; set; }
15 | public string HTML { get; set; }
16 | public string RawText { get; set; }
17 | [YamlMember(Alias = "title")]
18 | public string Title{ get; set; }
19 | [YamlMember(Alias = "summary")]
20 | public string Summary{ get; set; }
21 | [YamlMember(Alias = "index")]
22 | public int Index{ get; set; }
23 | [YamlMember(Alias = "icon")]
24 | public string Icon{ get; set; }
25 | [YamlMember(Alias = "image")]
26 | public string Image { get; set; }
27 | [YamlMember(Alias = "category")]
28 | public string Category { get; set; }
29 | [YamlMember(Alias = "tags")]
30 | public string[] Tags { get; set; }
31 | [YamlMember(Alias = "lede")]
32 | public string Lede { get; set; }
33 | [YamlMember(Alias = "cta")]
34 | public string CallToAction { get; set; }
35 | [YamlMember(Alias = "link")]
36 | public string Link { get; set; }
37 | }
38 | }
--------------------------------------------------------------------------------
/templates/vue/app/src/components/Blocks/Hero.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
{{ doc.title }}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/templates/vue/server/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | // Use IntelliSense to find out which attributes exist for C# debugging
6 | // Use hover for the description of the existing attributes
7 | // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
8 | "name": ".NET Core Launch (web)",
9 | "type": "coreclr",
10 | "request": "launch",
11 | "preLaunchTask": "build",
12 | // If you have changed target frameworks, make sure to update the program path.
13 | "program": "${workspaceFolder}/bin/Debug/net7.0/Contoso.dll",
14 | "args": [],
15 | "cwd": "${workspaceFolder}",
16 | "stopAtEntry": false,
17 | // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
18 | "serverReadyAction": {
19 | "action": "openExternally",
20 | "pattern": "\\bNow listening on:\\s+(https?://\\S+)"
21 | },
22 | "env": {
23 | "ASPNETCORE_ENVIRONMENT": "Development"
24 | },
25 | "sourceFileMap": {
26 | "/Views": "${workspaceFolder}/Views"
27 | }
28 | },
29 | {
30 | "name": ".NET Core Attach",
31 | "type": "coreclr",
32 | "request": "attach"
33 | }
34 | ]
35 | }
--------------------------------------------------------------------------------
/templates/vue/app/src/stores/content.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 |
3 | export const useContentStore = defineStore('content', {
4 | state(){
5 | return {
6 | documents: {},
7 | document: null,
8 | }
9 | },
10 | getters:{
11 | dummyDocument(){
12 | return {
13 | title: "Lorem Ipsum",
14 | html: "Velit tempor ea laboris velit anim ad exercitation do qui veniam. In anim laborum qui duis ullamco sit reprehenderit adipisicing ullamco reprehenderit dolore dolore. Duis veniam ullamco commodo reprehenderit laboris sit. Et incididunt ea magna excepteur ullamco dolore culpa in. Deserunt minim voluptate culpa Lorem nulla in velit.",
15 | image: `https://dummyimage.com/540x460`,
16 | link: "#"
17 | }
18 | }
19 | },
20 | actions:{
21 | async getDocuments(path){
22 | const endpoint = location.hostname.indexOf("localhost") >=0 ? "http://localhost:8000/api/content" : "/api/content"
23 | try{
24 | this.documents.length = 0;
25 | const url = `${endpoint}/${path}`;
26 | //TODO: Change this for production
27 | const res = await fetch(url);
28 | const docs = await res.json();
29 | //keep things reactive
30 | docs.forEach(d => {
31 | this.documents[d.slug.toLowerCase()] = d;
32 | });
33 | }catch(err){
34 | console.error(err);
35 | }
36 |
37 | }
38 | }
39 | });
40 |
--------------------------------------------------------------------------------
/templates/vue/app/README.md:
--------------------------------------------------------------------------------
1 | # The ASP.NET/Vue Client Application
2 |
3 | This template should help get you started developing with Vue 3, Vite and ASP.NET. You can run this application in isolation (from the API) using `npm run dev` in this directory.
4 |
5 | You can run it alongside the API if you run `npm run dev` in the root.
6 |
7 | ## Recommended IDE Setup
8 |
9 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
10 |
11 | ## Customize configuration
12 |
13 | See [Vite Configuration Reference](https://vitejs.dev/config/).
14 |
15 | ## Project Setup
16 |
17 | ```sh
18 | npm install
19 | ```
20 |
21 | ### Compile and Hot-Reload for Development
22 |
23 | ```sh
24 | npm run dev
25 | ```
26 |
27 | ## Build and Deployment
28 |
29 | The ASP.NET Minimal API project has build settings configured to build your client app for production when you run `dotnet publish` or `dotnet build`. This client app will be compiled and the output in `/dist` will be copied over to `wwwroot` of the API.
30 |
31 | Deployment scripts are setup for you in `/Deployment` and come preconfigured for Azure deployment or Docker deployment.
32 |
33 | ## Questions? Issues?
34 |
35 | Please visit the GitHub repo if you have any questions or concerns. As always, we would love an Issue report if you've found a bug or, better yet, a PR with a fix!
36 |
37 | Issue first, please, so we can be sure the PR will fit.
--------------------------------------------------------------------------------
/templates/vue/app/src/components/Blocks/Features.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ title }}
5 |
6 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/templates/vue/app/src/stores/site.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 |
3 | export const useSiteStore = defineStore('site', {
4 | state(){
5 | return {
6 | topNav: [
7 | {name: "Home", url: "/"},
8 | {name: "About", url: "/about/"},
9 | ],
10 | social: [
11 | {name: "Mastodon", url: "https://hachyderm.io/@robconery", icon: "fa fa-mastodon"},
12 | {name: "Blog", url: "https://asp.net", icon: ""},
13 | {name: "Docs", url: "https://hachyderm.io/@robconery", icon: "fa fa-book"},
14 | {name: "GitHub", url: "https://hachyderm.io/@robconery", icon: "fa fa-github"},
15 | ],
16 | footerNav: {
17 | categories: [
18 | {
19 | name: "Categories", links: [
20 | {name: "First", url: "#"},
21 | {name: "Second", url: "#"},
22 | {name: "Third", url: "#"},
23 | {name: "Fourth", url: "#"},
24 | ],
25 | },{
26 | name: "Categories", links: [
27 | {name: "First", url: "#"},
28 | {name: "Second", url: "#"},
29 | {name: "Third", url: "#"},
30 | {name: "Fourth", url: "#"},
31 | ],
32 | },{
33 | name: "Categories", links: [
34 | {name: "First", url: "#"},
35 | {name: "Second", url: "#"},
36 | {name: "Third", url: "#"},
37 | {name: "Fourth", url: "#"},
38 | ],
39 | }
40 | ]
41 | }
42 | }
43 | },
44 | getters : {
45 | contentEndpoint(){
46 | return location.hostname.indexOf("localhost") >=0 ? "http://localhost:8000/api/content" : "/api/content"
47 | }
48 | }
49 | });
--------------------------------------------------------------------------------
/templates/vue/server/Tests/ContentTests.cs:
--------------------------------------------------------------------------------
1 | using Xunit;
2 | using Vue.Starter.Data;
3 | using Vue.Starter.Data.Models;
4 | namespace Contoso.Tests;
5 |
6 | public class ContentTests {
7 | ContentLibrary _lib;
8 | Document _doc;
9 | public ContentTests()
10 | {
11 | _lib = new ContentLibrary("../../../Tests/Content").Load();
12 | _doc = _lib.Documents.First();
13 | }
14 | [Fact]
15 | public void The_libray_loads_up_docs()
16 | {
17 | //there should be one doc in there
18 | Assert.Equal(_lib.Documents.Count, 1);
19 | }
20 | [Fact]
21 | public void The_test_doc_has_html()
22 | {
23 | Assert.NotNull(_doc.HTML);
24 | }
25 | [Fact]
26 | public void Doc_directory_is_Content()
27 | {
28 | Assert.Equal("Content",_doc.Directory);
29 | }
30 | [Fact]
31 | public void Doc_slug_is_test()
32 | {
33 | Assert.Equal("test",_doc.Slug);
34 | }
35 | [Fact]
36 | public void Doc_title_is_A_Test_Document()
37 | {
38 | Assert.Equal("A Test Document",_doc.Title);
39 | }
40 | [Fact]
41 | public void Doc_icon_is_book()
42 | {
43 | Assert.Equal("book",_doc.Icon);
44 | }
45 | [Fact]
46 | public void Doc_image_is_image_png()
47 | {
48 | Assert.Equal("image/image.png",_doc.Image);
49 | }
50 | [Fact]
51 | public void Doc_category_is_tests()
52 | {
53 | Assert.Equal("tests",_doc.Category);
54 | }
55 | [Fact]
56 | public void Doc_has_three_tags()
57 | {
58 | Assert.Equal(3,_doc.Tags.Count());
59 | }
60 | [Fact]
61 | public void Doc_has_summary()
62 | {
63 | Assert.True(_doc.Summary.Contains("This is a summary"));
64 | }
65 | [Fact]
66 | public void FuzzySearch_returns_our_document()
67 | {
68 | var found = _lib.FuzzySearch("summary");
69 | Assert.Equal(1, found.Count());
70 | }
71 |
72 | }
--------------------------------------------------------------------------------
/templates/vue/server/Deployment/Azure/README.md:
--------------------------------------------------------------------------------
1 | # Azure Deployment Scripts
2 |
3 | In this directory are deployment scripts ready to use. This requires that you have the Azure CLI installed (`az`) and are logged in to the account you want to deploy with.
4 |
5 | ## Setting up your Azure Resources
6 |
7 | To run this application you need a web server that runs .NET 7, that's it. Node is not required as all of the front end components are built during `dotnet build`, which happens when you `dotnet publish`.
8 |
9 | For convenience, we've added a setup script in this here directory called `app_service.sh`, which is a script that creates the necessary services on Azure for you.
10 |
11 | From the server project root:
12 |
13 | ```
14 | source ./Deployment/Azure/app_service.sh
15 | ```
16 |
17 | Please have a read and change things as you need **before you run this script**. It will run in Powershell as well as bash and the only thing you need to do is **change the variables at the top**.
18 |
19 | ## Deploying
20 |
21 | When you run the `app_service.sh` script, a second script will be created for you called `zip.sh`. This is how your code will end up on Azure hardware: it's zipped up and pushed:
22 |
23 | ```
24 | source ./Deployment/Azure/zip.sh
25 | ```
26 |
27 | For fun and convenience we've added a Makefile which will execute this for you:
28 |
29 | ```
30 | make app_service && make
31 | ```
32 |
33 | Yay for Make!
34 |
35 | ## What's going on during deployment
36 |
37 | Once everything is ready to go (after `dotnet publish`) your deployment artifacts will be located in `/bin/Release/net7.0/publish`, which includes the Vue application, which is built along with the ASP.NET application.
38 |
39 | The built Vue application is located in `wwwroot` in that directory which is where it needs to live.
40 |
41 | This entire directory is being zipped up and pushed to Azure and once that's done, a browser will open to your site's directory and the logs for the application will be streamed for you so you know what's going on.
42 |
43 | If there are any problems you can drop all of your resources using `az group delete -n [NAME]` where `NAME` is the resource group name you came up with (`RG` in the script).
44 |
45 | Have fun!
46 |
47 |
--------------------------------------------------------------------------------
/templates/vue/app/src/components/Nav/Footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
15 |
16 |
17 |
SUBSCRIBE
18 |
19 |
20 | Placeholder
21 |
22 |
23 |
Button
24 |
25 |
Bitters chicharrones fanny pack
26 | waistcoat green juice
27 |
28 |
29 |
30 |
31 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/templates/vue/server/Vue.Starter.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net7.0
5 | enable
6 | enable
7 | ../app/
8 | $(DefaultItemExcludes);$(SpaRoot)node_modules\**
9 | http://localhost:3000
10 | npm run dev
11 | enable
12 | true
13 |
14 |
15 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | runtime; build; native; contentfiles; analyzers; buildtransitive
31 | all
32 |
33 |
34 | runtime; build; native; contentfiles; analyzers; buildtransitive
35 | all
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | wwwroot\%(RecursiveDir)%(FileName)%(Extension)
56 | PreserveNewest
57 | true
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/templates/vue/server/Data/ContentLibrary.cs:
--------------------------------------------------------------------------------
1 | using Markdig;
2 | using Markdig.Parsers;
3 | using Markdig.Renderers;
4 | using Vue.Starter.Data.Models;
5 | using YamlDotNet.Serialization;
6 | using YamlDotNet.Core;
7 | using YamlDotNet.Core.Events;
8 |
9 | namespace Vue.Starter.Data;
10 | // ...
11 | // This is a simple in-memory Markdown "server", if you will.
12 | public class ContentLibrary
13 | {
14 | public IList Documents { get; set; } = new List();
15 | //The location of the document directory on disk, releative to the root
16 | public string Library { get; set; }
17 | //override the default library location
18 | public ContentLibrary(string library)
19 | {
20 | this.Library = library;
21 | }
22 | //Only runs a fuzzy wildcard on summary
23 | public IEnumerable FuzzySearch(string term){
24 | if(term.Count() < 3){
25 | throw new InvalidOperationException("The term should be more than three characters");
26 | }
27 | return this.Documents.Where(d => d.Summary.ToLower().Contains(term.ToLower()));
28 | }
29 | //Reads the documents on disk, parses and loads the IList
30 | public ContentLibrary Load(){
31 | var result = new List();
32 | //HACK: figure out how to make this less hard-codey
33 | foreach (string file in Directory.EnumerateFiles(this.Library, "*.md", SearchOption.AllDirectories))
34 | {
35 |
36 | var text = File.ReadAllText(file);
37 |
38 | Document doc;
39 | var yamler = new DeserializerBuilder().IgnoreUnmatchedProperties().Build();
40 |
41 | using (var input = new StringReader(text))
42 | {
43 | var parser = new Parser(input);
44 | parser.Consume();
45 | parser.Consume();
46 | doc = yamler.Deserialize(parser);
47 | parser.Consume();
48 | }
49 |
50 |
51 | var pipe = new MarkdownPipelineBuilder()
52 | .UseYamlFrontMatter()
53 | .UseCustomContainers()
54 | .UseEmphasisExtras()
55 | .UseGridTables()
56 | .UseMediaLinks()
57 | .UsePipeTables()
58 | .UseGenericAttributes() // Must be last as it is one parser that is modifying other parsers
59 | .Build();
60 |
61 | //TODO: Refactor and separate
62 | var writer = new StringWriter();
63 | var renderer = new HtmlRenderer(writer);
64 | pipe.Setup(renderer);
65 |
66 | var parsed = MarkdownParser.Parse(text,pipe);
67 | var rendered = renderer.Render(parsed);
68 | writer.Flush();
69 |
70 | doc.HTML = writer.ToString();
71 | doc.CreatedAt = DateTime.Now;
72 | doc.Directory = Directory.GetParent(file).Name;
73 | doc.Slug = Path.GetFileNameWithoutExtension(file);
74 |
75 | //add it!
76 | this.Documents.Add(doc);
77 | }
78 | return this;
79 | }
80 |
81 | }
--------------------------------------------------------------------------------
/templates/vue/server/Deployment/Azure/app_service.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ###### CHANGE THESE AS NEEDED #######
4 | RG="vue-starter"
5 | APPNAME="$RG-$RANDOM"
6 | #You can get a list of locations by running
7 | #az account list-locations --query [].name
8 | LOCATION="westus"
9 | RUNTIME="DOTNETCORE:7.0"
10 | ZIPSCRIPT="./Deployment/Azure/zip.sh"
11 | ENVFILE="./Deployment/.env"
12 | LOGSCRIPT="./Deployment/Azure/logs.sh"
13 |
14 | #Pricing for Linux Service Plans changes from time to time given the location you choose
15 | #and parameters of your subscription. You can review the pricing for Linux Service Plans here:
16 | #https://azure.microsoft.com/en-us/pricing/details/app-service/linux/
17 |
18 | #The sku should be one of:
19 | #F1(Free), D1(Shared), B1(Basic Small), B2(Basic Medium), B3(Basic Large),
20 | #S1(Standard Small), P1(Premium Small), P1V2(Premium V2 Small),
21 | #PC2 (Premium Container Small), PC3 (Premium Container Medium),
22 | #PC4 (Premium Container Large).
23 |
24 | #accepted values: B1, B2, B3, D1, F1, FREE, P1, P1V2, P2, P2V2, P3, P3V2, PC2, PC3, PC4, S1, S2, S3, SHARED
25 | SKU=B1
26 |
27 | rm $ENVFILE
28 | rm $ZIPSCRIPT
29 |
30 | echo "Creating .env"
31 |
32 | # Adding these to the .env file for convenience
33 | echo "RG=$RG" > $ENVFILE
34 | echo "APPNAME=$APPNAME" >> $ENVFILE
35 | echo "LOCATION=$LOCATION" >> $ENVFILE
36 |
37 | echo "Creating a resource group"
38 |
39 | #this can be run safely even if the group exists
40 | az group create -n $RG -l $LOCATION
41 |
42 | echo "Creating AppService Plan"
43 | az appservice plan create --name $APPNAME \
44 | --resource-group $RG \
45 | --sku $SKU \
46 | --is-linux
47 |
48 |
49 | echo "Creating Web app"
50 | az webapp create --resource-group $RG \
51 | --plan $APPNAME \
52 | --name $APPNAME \
53 | --runtime $RUNTIME
54 |
55 | az webapp config appsettings set --resource-group $RG --name $APPNAME --settings WEBSITE_RUN_FROM_PACKAGE="1"
56 |
57 | echo "Setting up logging"
58 | #setup logging and monitoring
59 | az webapp log config --application-logging filesystem \
60 | --detailed-error-messages true \
61 | --web-server-logging filesystem \
62 | --level information \
63 | --name $APPNAME \
64 | --resource-group $RG
65 |
66 | echo "Adding logs alias to .env. Invoking this will allow you to see the application logs realtime-ish."
67 | #set an alias for convenience - add to .env
68 | echo "alias logs='az webapp log tail -n $APPNAME -g $RG'" >> $ENVFILE
69 |
70 | echo "az webapp log tail -n $APPNAME -g $RG" > $LOGSCRIPT
71 |
72 |
73 | echo "rm ./Deployment/Azure/deploy.zip" >> $ZIPSCRIPT
74 | echo "rm -R bin/Release" >> $ZIPSCRIPT
75 | echo "dotnet publish --configuration Release" >> $ZIPSCRIPT
76 |
77 |
78 | echo "cd bin/Release/net7.0/publish/" >>$ZIPSCRIPT
79 | echo "zip -r ../../../../Deployment/Azure/deploy.zip . -q" >> $ZIPSCRIPT
80 | echo "cd -" >> $ZIPSCRIPT
81 |
82 |
83 | echo "az webapp deployment source config-zip --resource-group vue-starter --name $APPNAME --src ./Deployment/Azure/deploy.zip" >> $ZIPSCRIPT
84 |
85 | echo "open https://$APPNAME.azurewebsites.net" >> $ZIPSCRIPT
86 |
87 | echo "echo 'Site is published 🎉 watching logs. It takes 60 seconds or so to refresh...'" >> $ZIPSCRIPT
88 | echo "az webapp log tail -n $APPNAME -g $RG" >> $ZIPSCRIPT
89 |
90 | source $ZIPSCRIPT
91 |
92 | echo "If there were no errors you should be able to view your site at https://$APPNAME.azurewebsites.net"
--------------------------------------------------------------------------------
/templates/vue/README.md:
--------------------------------------------------------------------------------
1 | # The ASP.NET Vue Starter
2 |
3 | Hello and welcome to the ASP.NET Vue Starter Template with ASP.NET Minimal API and Vue 3.0. The only things this template contains are:
4 |
5 | - A starter ASP.NET Minimal API in `/server`. It has been setup to serve...
6 | - A starter Vue 3 app generated using `npm init vue@latest` in the `/app` directory.
7 |
8 | Before you get started, however, be sure to navigate into the `/app` directory and:
9 |
10 | ```
11 | npm init
12 | ```
13 |
14 | This will pull down the packages you need for Vue to run.
15 |
16 | ## Running Things
17 |
18 | To get up and running for development, you can run this right from the root:
19 |
20 | ```
21 | npm run dev
22 | ```
23 |
24 | If you only want to do Vue work you can run `npm run dev` in the `/app` directory but do keep in mind the backend API won't be running.
25 |
26 | ## Up and Running
27 |
28 | To get you started quickly we've integrated Tailwind CSS, which is quickly becoming the default CSS library for projects such as Rails and Phoenix. If you don't know Tailwind, it can be a little intimidating at first but if you spend just 30 minutes on the basics, it will change the way you do things.
29 |
30 | To find out more, you can [head to the docs](https://tailwindcss.com/docs/installation).
31 |
32 | ### Starter Components
33 |
34 | We've added a few starter components for you in `/app/src/components` which were built using the elements from [Tailblocks](https://tailblocks.cc/), a free, open-source block library for Tailwind.
35 |
36 | ## Simple CMS API
37 |
38 | We love Markdown and we love using it with Vue. We also love the way Vue pushes you away from hardcoding data and markup in your components so, to that end, we've created a super simple CMS system for you to use via the Minimal API which is based on [Nuxt Content](https://content.nuxtjs.org/).
39 |
40 | The idea is simple: your documents are loaded at startup, parsed and added to a `Document` collection. These documents can then be queried using LINQ via the API. Have a look in the `/Content` directory to see the documents.
41 |
42 | ## Minimal API
43 |
44 | [ASP.NET Minimal API](https://minimal-apis.github.io/) is a new effort from Microsoft's ASP.NET team to help you rapidly build your application:
45 |
46 | > Rapidly move from idea to a functioning application. All the features of C# web applications without the ceremony.
47 |
48 | As you'll hopefully see, Minimal API *feels* like lightweight web frameworks in other platforms, such as Flask (Python), Sinatra (Ruby) and Express (Node). Lightweight, easy to use and blazingly fast.
49 |
50 |
51 | ## Deployment
52 |
53 | When you create Vue applications, you do so with the help of a web server so you can see what you're creating as you create it. When it comes time to deploy, however, what you've created needs to be "transpiled" into individual JavaScript files and a static HTML page from which to serve them.
54 |
55 | This entire process is handled by [Vite](https://vitejs.dev/) (pronounced "veet"), and you don't need to think about it. All you need to remember is the the command you would normally use to take your application live:
56 |
57 | ```
58 | dotnet publish
59 | ```
60 |
61 | Running that will trigger the Vue build process (using Vite), which will optimize your view application, which includes:
62 |
63 | - Minification of assets, including CSS and JavaScript
64 | - Code-splitting or "chunking" your application code based on routes
65 | - Adding the built files to `/wwwroot` where it will be served as a static application, backed by your Minimal API
66 |
67 | It's important that this step is run prior to deployment, otherwise you won't see your assets.
68 |
69 | ## Azure Deployment
70 |
71 | In the `/server/Deployment/Azure` directory you'll see two script files:
72 |
73 | - `app_service.sh` is the script file that will help you create the resource on Azure that you need. It will also create a...
74 | - `zip.sh` file, which will push your site up using a direct zip push. This file is generated, but if you need to reproduce it manually, it looks something like this:
75 |
76 | ```sh
77 | rm ./Deployment/Azure/deploy.zip
78 | rm -R bin/Release
79 | dotnet publish --configuration Release
80 | cd bin/Release/net7.0/publish/
81 | zip -r ../../../../Deployment/Azure/deploy.zip . -q
82 | cd -
83 | az webapp deployment source config-zip --resource-group $RG --name $APPNAME --src ./Deployment/Azure/deploy.zip
84 | open https://$APPNAME.azurewebsites.net
85 | echo 'Site's been pushed, watching logs...'
86 | az webapp log tail -n $APPNAME -g $RG
87 | ```
88 |
89 | ## Using Make
90 |
91 | If you're a CLI person we've created a Makefile for you in the root of the `/server` application. You can use this to spin up your Azure resources using `make app_service` and to deploy your app using just `make`.
92 |
93 | In the long term you'll obviously want to use a more structured deployment process and we're currently working on a simple way to "upgrade" to a GitHub based deployment.
94 |
95 | ## Docker
96 |
97 | There is a Dockerfile in the root of the project that will build and package everything for you when you need it. This is _only_ the deployable application, not meant for development. To use it, just...
98 |
99 | ```sh
100 | docker build -t Vue.Starter .
101 | docker run -p 8080:80 Vue.Starter
102 | # open http://localhost:8080
103 | ```
104 |
105 | ## Questions? Issues?
106 |
107 | The [GitHub repo for this template is here](https://github.com/robconery/Vue.Starter). I don't have discussions enabled, but feel free to pop an issue if you like or, better yet, a PR!
108 |
109 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/node
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node
3 |
4 | ### Node ###
5 | # Logs
6 | logs
7 | *.log
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | lerna-debug.log*
12 | .pnpm-debug.log*
13 | videos/
14 |
15 |
16 | ## Ignore Visual Studio temporary files, build results, and
17 | ## files generated by popular Visual Studio add-ons.
18 | ##
19 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
20 |
21 | # User-specific files
22 | *.rsuser
23 | *.suo
24 | *.user
25 | *.userosscache
26 | *.sln.docstates
27 | .DS_Store
28 | .env
29 | # User-specific files (MonoDevelop/Xamarin Studio)
30 | *.userprefs
31 | app.zip
32 | # Mono auto generated files
33 | mono_crash.*
34 | dist/
35 | # Build results
36 | [Dd]ebug/
37 | [Dd]ebugPublic/
38 | [Rr]elease/
39 | [Rr]eleases/
40 | x64/
41 | x86/
42 | [Ww][Ii][Nn]32/
43 | [Aa][Rr][Mm]/
44 | [Aa][Rr][Mm]64/
45 | bld/
46 | [Bb]in/
47 | [Oo]bj/
48 | [Ll]og/
49 | [Ll]ogs/
50 |
51 | # Visual Studio 2015/2017 cache/options directory
52 | .vs/
53 | # Uncomment if you have tasks that create the project's static files in wwwroot
54 | #wwwroot/
55 |
56 | # Visual Studio 2017 auto generated files
57 | Generated\ Files/
58 |
59 | # MSTest test Results
60 | [Tt]est[Rr]esult*/
61 | [Bb]uild[Ll]og.*
62 |
63 | # NUnit
64 | *.VisualState.xml
65 | TestResult.xml
66 | nunit-*.xml
67 |
68 | # Build Results of an ATL Project
69 | [Dd]ebugPS/
70 | [Rr]eleasePS/
71 | dlldata.c
72 |
73 | # Benchmark Results
74 | BenchmarkDotNet.Artifacts/
75 |
76 | # .NET
77 | project.lock.json
78 | project.fragment.lock.json
79 | artifacts/
80 |
81 | # Tye
82 | .tye/
83 |
84 | # ASP.NET Scaffolding
85 | ScaffoldingReadMe.txt
86 |
87 | # StyleCop
88 | StyleCopReport.xml
89 |
90 | # Files built by Visual Studio
91 | *_i.c
92 | *_p.c
93 | *_h.h
94 | *.ilk
95 | *.meta
96 | *.obj
97 | *.iobj
98 | *.pch
99 | *.pdb
100 | *.ipdb
101 | *.pgc
102 | *.pgd
103 | *.rsp
104 | *.sbr
105 | *.tlb
106 | *.tli
107 | *.tlh
108 | *.tmp
109 | *.tmp_proj
110 | *_wpftmp.csproj
111 | *.log
112 | *.vspscc
113 | *.vssscc
114 | .builds
115 | *.pidb
116 | *.svclog
117 | *.scc
118 |
119 | # Chutzpah Test files
120 | _Chutzpah*
121 |
122 | # Visual C++ cache files
123 | ipch/
124 | *.aps
125 | *.ncb
126 | *.opendb
127 | *.opensdf
128 | *.sdf
129 | *.cachefile
130 | *.VC.db
131 | *.VC.VC.opendb
132 |
133 | # Visual Studio profiler
134 | *.psess
135 | *.vsp
136 | *.vspx
137 | *.sap
138 |
139 | # Visual Studio Trace Files
140 | *.e2e
141 |
142 | # TFS 2012 Local Workspace
143 | $tf/
144 |
145 | # Guidance Automation Toolkit
146 | *.gpState
147 |
148 | # ReSharper is a .NET coding add-in
149 | _ReSharper*/
150 | *.[Rr]e[Ss]harper
151 | *.DotSettings.user
152 |
153 | # TeamCity is a build add-in
154 | _TeamCity*
155 |
156 | # DotCover is a Code Coverage Tool
157 | *.dotCover
158 |
159 | # AxoCover is a Code Coverage Tool
160 | .axoCover/*
161 | !.axoCover/settings.json
162 |
163 | # Coverlet is a free, cross platform Code Coverage Tool
164 | coverage*.json
165 | coverage*.xml
166 | coverage*.info
167 |
168 | # Visual Studio code coverage results
169 | *.coverage
170 | *.coveragexml
171 |
172 | # NCrunch
173 | _NCrunch_*
174 | .*crunch*.local.xml
175 | nCrunchTemp_*
176 |
177 | # MightyMoose
178 | *.mm.*
179 | AutoTest.Net/
180 |
181 | # Web workbench (sass)
182 | .sass-cache/
183 |
184 | # Installshield output folder
185 | [Ee]xpress/
186 |
187 | # DocProject is a documentation generator add-in
188 | DocProject/buildhelp/
189 | DocProject/Help/*.HxT
190 | DocProject/Help/*.HxC
191 | DocProject/Help/*.hhc
192 | DocProject/Help/*.hhk
193 | DocProject/Help/*.hhp
194 | DocProject/Help/Html2
195 | DocProject/Help/html
196 |
197 | # Click-Once directory
198 | publish/
199 |
200 | # Publish Web Output
201 | *.[Pp]ublish.xml
202 | *.azurePubxml
203 | # Note: Comment the next line if you want to checkin your web deploy settings,
204 | # but database connection strings (with potential passwords) will be unencrypted
205 | *.pubxml
206 | *.publishproj
207 |
208 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
209 | # checkin your Azure Web App publish settings, but sensitive information contained
210 | # in these scripts will be unencrypted
211 | PublishScripts/
212 |
213 | # NuGet Packages
214 | *.nupkg
215 | # NuGet Symbol Packages
216 | *.snupkg
217 | # The packages folder can be ignored because of Package Restore
218 | **/[Pp]ackages/*
219 | # except build/, which is used as an MSBuild target.
220 | !**/[Pp]ackages/build/
221 | # Uncomment if necessary however generally it will be regenerated when needed
222 | #!**/[Pp]ackages/repositories.config
223 | # NuGet v3's project.json files produces more ignorable files
224 | *.nuget.props
225 | *.nuget.targets
226 |
227 | # Microsoft Azure Build Output
228 | csx/
229 | *.build.csdef
230 |
231 | # Microsoft Azure Emulator
232 | ecf/
233 | rcf/
234 |
235 | # Windows Store app package directories and files
236 | AppPackages/
237 | BundleArtifacts/
238 | Package.StoreAssociation.xml
239 | _pkginfo.txt
240 | *.appx
241 | *.appxbundle
242 | *.appxupload
243 |
244 | # Visual Studio cache files
245 | # files ending in .cache can be ignored
246 | *.[Cc]ache
247 | # but keep track of directories ending in .cache
248 | !?*.[Cc]ache/
249 |
250 | # Others
251 | ClientBin/
252 | ~$*
253 | *~
254 | *.dbmdl
255 | *.dbproj.schemaview
256 | *.jfm
257 | *.pfx
258 | *.publishsettings
259 | orleans.codegen.cs
260 |
261 | # Including strong name files can present a security risk
262 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
263 | #*.snk
264 |
265 | # Since there are multiple workflows, uncomment next line to ignore bower_components
266 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
267 | #bower_components/
268 |
269 | # RIA/Silverlight projects
270 | Generated_Code/
271 |
272 | # Backup & report files from converting an old project file
273 | # to a newer Visual Studio version. Backup files are not needed,
274 | # because we have git ;-)
275 | _UpgradeReport_Files/
276 | Backup*/
277 | UpgradeLog*.XML
278 | UpgradeLog*.htm
279 | ServiceFabricBackup/
280 | *.rptproj.bak
281 |
282 | # SQL Server files
283 | *.mdf
284 | *.ldf
285 | *.ndf
286 |
287 | # Business Intelligence projects
288 | *.rdl.data
289 | *.bim.layout
290 | *.bim_*.settings
291 | *.rptproj.rsuser
292 | *- [Bb]ackup.rdl
293 | *- [Bb]ackup ([0-9]).rdl
294 | *- [Bb]ackup ([0-9][0-9]).rdl
295 |
296 | # Microsoft Fakes
297 | FakesAssemblies/
298 |
299 | # GhostDoc plugin setting file
300 | *.GhostDoc.xml
301 |
302 | # Node.js Tools for Visual Studio
303 | .ntvs_analysis.dat
304 | node_modules/
305 |
306 | # Visual Studio 6 build log
307 | *.plg
308 |
309 | # Visual Studio 6 workspace options file
310 | *.opt
311 |
312 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
313 | *.vbw
314 |
315 | # Visual Studio LightSwitch build output
316 | **/*.HTMLClient/GeneratedArtifacts
317 | **/*.DesktopClient/GeneratedArtifacts
318 | **/*.DesktopClient/ModelManifest.xml
319 | **/*.Server/GeneratedArtifacts
320 | **/*.Server/ModelManifest.xml
321 | _Pvt_Extensions
322 |
323 | # Paket dependency manager
324 | .paket/paket.exe
325 | paket-files/
326 |
327 | # FAKE - F# Make
328 | .fake/
329 |
330 | # CodeRush personal settings
331 | .cr/personal
332 |
333 | # Python Tools for Visual Studio (PTVS)
334 | __pycache__/
335 | *.pyc
336 |
337 | # Cake - Uncomment if you are using it
338 | # tools/**
339 | # !tools/packages.config
340 |
341 | # Tabs Studio
342 | *.tss
343 |
344 | # Telerik's JustMock configuration file
345 | *.jmconfig
346 |
347 | # BizTalk build output
348 | *.btp.cs
349 | *.btm.cs
350 | *.odx.cs
351 | *.xsd.cs
352 |
353 | # OpenCover UI analysis results
354 | OpenCover/
355 |
356 | # Azure Stream Analytics local run output
357 | ASALocalRun/
358 |
359 | # MSBuild Binary and Structured Log
360 | *.binlog
361 |
362 | # NVidia Nsight GPU debugger configuration file
363 | *.nvuser
364 |
365 | # MFractors (Xamarin productivity tool) working folder
366 | .mfractor/
367 |
368 | # Local History for Visual Studio
369 | .localhistory/
370 |
371 | # BeatPulse healthcheck temp database
372 | healthchecksdb
373 |
374 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
375 | MigrationBackup/
376 |
377 | # Ionide (cross platform F# VS Code tools) working folder
378 | .ionide/
379 |
380 | # Fody - auto-generated XML schema
381 | FodyWeavers.xsd
382 |
383 | ##
384 | ## Visual studio for Mac
385 | ##
386 |
387 |
388 | # globs
389 | Makefile.in
390 | *.userprefs
391 | *.usertasks
392 | config.make
393 | config.status
394 | aclocal.m4
395 | install-sh
396 | autom4te.cache/
397 | *.tar.gz
398 | tarballs/
399 | test-results/
400 |
401 | # Mac bundle stuff
402 | *.dmg
403 | *.app
404 |
405 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
406 | # General
407 | .DS_Store
408 | .AppleDouble
409 | .LSOverride
410 |
411 | # Icon must end with two \r
412 | Icon
413 |
414 |
415 | # Thumbnails
416 | ._*
417 |
418 | # Files that might appear in the root of a volume
419 | .DocumentRevisions-V100
420 | .fseventsd
421 | .Spotlight-V100
422 | .TemporaryItems
423 | .Trashes
424 | .VolumeIcon.icns
425 | .com.apple.timemachine.donotpresent
426 |
427 | # Directories potentially created on remote AFP share
428 | .AppleDB
429 | .AppleDesktop
430 | Network Trash Folder
431 | Temporary Items
432 | .apdisk
433 |
434 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
435 | # Windows thumbnail cache files
436 | Thumbs.db
437 | ehthumbs.db
438 | ehthumbs_vista.db
439 |
440 | # Dump file
441 | *.stackdump
442 |
443 | # Folder config file
444 | [Dd]esktop.ini
445 |
446 | # Recycle Bin used on file shares
447 | $RECYCLE.BIN/
448 |
449 | # Windows Installer files
450 | *.cab
451 | *.msi
452 | *.msix
453 | *.msm
454 | *.msp
455 |
456 | # Windows shortcuts
457 | *.lnk
458 |
459 | # JetBrains Rider
460 | .idea/
461 | *.sln.iml
462 |
463 | ##
464 | ## Visual Studio Code
465 | ##
466 | .vscode/*
467 | !.vscode/settings.json
468 | !.vscode/tasks.json
469 | !.vscode/launch.json
470 | !.vscode/extensions.json
471 |
--------------------------------------------------------------------------------
/templates/vue/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/node
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node
3 |
4 | ### Node ###
5 | # Logs
6 | logs
7 | *.log
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | lerna-debug.log*
12 | .pnpm-debug.log*
13 | deploy.zip
14 |
15 |
16 | ## Ignore Visual Studio temporary files, build results, and
17 | ## files generated by popular Visual Studio add-ons.
18 | ##
19 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
20 |
21 | # User-specific files
22 | *.rsuser
23 | *.suo
24 | *.user
25 | *.userosscache
26 | *.sln.docstates
27 | .DS_Store
28 | .env
29 | # User-specific files (MonoDevelop/Xamarin Studio)
30 | *.userprefs
31 |
32 | # Mono auto generated files
33 | mono_crash.*
34 | dist/
35 | # Build results
36 | [Dd]ebug/
37 | [Dd]ebugPublic/
38 | [Rr]elease/
39 | [Rr]eleases/
40 | x64/
41 | x86/
42 | [Ww][Ii][Nn]32/
43 | [Aa][Rr][Mm]/
44 | [Aa][Rr][Mm]64/
45 | bld/
46 | [Bb]in/
47 | [Oo]bj/
48 | [Ll]og/
49 | [Ll]ogs/
50 |
51 | # Visual Studio 2015/2017 cache/options directory
52 | .vs/
53 | # Uncomment if you have tasks that create the project's static files in wwwroot
54 | #wwwroot/
55 |
56 | # Visual Studio 2017 auto generated files
57 | Generated\ Files/
58 |
59 | # MSTest test Results
60 | [Tt]est[Rr]esult*/
61 | [Bb]uild[Ll]og.*
62 |
63 | # NUnit
64 | *.VisualState.xml
65 | TestResult.xml
66 | nunit-*.xml
67 |
68 | # Build Results of an ATL Project
69 | [Dd]ebugPS/
70 | [Rr]eleasePS/
71 | dlldata.c
72 |
73 | # Benchmark Results
74 | BenchmarkDotNet.Artifacts/
75 |
76 | # .NET
77 | project.lock.json
78 | project.fragment.lock.json
79 | artifacts/
80 |
81 | # Tye
82 | .tye/
83 |
84 | # ASP.NET Scaffolding
85 | ScaffoldingReadMe.txt
86 |
87 | # StyleCop
88 | StyleCopReport.xml
89 |
90 | # Files built by Visual Studio
91 | *_i.c
92 | *_p.c
93 | *_h.h
94 | *.ilk
95 | *.meta
96 | *.obj
97 | *.iobj
98 | *.pch
99 | *.pdb
100 | *.ipdb
101 | *.pgc
102 | *.pgd
103 | *.rsp
104 | *.sbr
105 | *.tlb
106 | *.tli
107 | *.tlh
108 | *.tmp
109 | *.tmp_proj
110 | *_wpftmp.csproj
111 | *.log
112 | *.vspscc
113 | *.vssscc
114 | .builds
115 | *.pidb
116 | *.svclog
117 | *.scc
118 |
119 | # Chutzpah Test files
120 | _Chutzpah*
121 |
122 | # Visual C++ cache files
123 | ipch/
124 | *.aps
125 | *.ncb
126 | *.opendb
127 | *.opensdf
128 | *.sdf
129 | *.cachefile
130 | *.VC.db
131 | *.VC.VC.opendb
132 |
133 | # Visual Studio profiler
134 | *.psess
135 | *.vsp
136 | *.vspx
137 | *.sap
138 |
139 | # Visual Studio Trace Files
140 | *.e2e
141 |
142 | # TFS 2012 Local Workspace
143 | $tf/
144 |
145 | # Guidance Automation Toolkit
146 | *.gpState
147 |
148 | # ReSharper is a .NET coding add-in
149 | _ReSharper*/
150 | *.[Rr]e[Ss]harper
151 | *.DotSettings.user
152 |
153 | # TeamCity is a build add-in
154 | _TeamCity*
155 |
156 | # DotCover is a Code Coverage Tool
157 | *.dotCover
158 |
159 | # AxoCover is a Code Coverage Tool
160 | .axoCover/*
161 | !.axoCover/settings.json
162 |
163 | # Coverlet is a free, cross platform Code Coverage Tool
164 | coverage*.json
165 | coverage*.xml
166 | coverage*.info
167 |
168 | # Visual Studio code coverage results
169 | *.coverage
170 | *.coveragexml
171 |
172 | # NCrunch
173 | _NCrunch_*
174 | .*crunch*.local.xml
175 | nCrunchTemp_*
176 |
177 | # MightyMoose
178 | *.mm.*
179 | AutoTest.Net/
180 |
181 | # Web workbench (sass)
182 | .sass-cache/
183 |
184 | # Installshield output folder
185 | [Ee]xpress/
186 |
187 | # DocProject is a documentation generator add-in
188 | DocProject/buildhelp/
189 | DocProject/Help/*.HxT
190 | DocProject/Help/*.HxC
191 | DocProject/Help/*.hhc
192 | DocProject/Help/*.hhk
193 | DocProject/Help/*.hhp
194 | DocProject/Help/Html2
195 | DocProject/Help/html
196 |
197 | # Click-Once directory
198 | publish/
199 |
200 | # Publish Web Output
201 | *.[Pp]ublish.xml
202 | *.azurePubxml
203 | # Note: Comment the next line if you want to checkin your web deploy settings,
204 | # but database connection strings (with potential passwords) will be unencrypted
205 | *.pubxml
206 | *.publishproj
207 |
208 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
209 | # checkin your Azure Web App publish settings, but sensitive information contained
210 | # in these scripts will be unencrypted
211 | PublishScripts/
212 |
213 | # NuGet Packages
214 | *.nupkg
215 | # NuGet Symbol Packages
216 | *.snupkg
217 | # The packages folder can be ignored because of Package Restore
218 | **/[Pp]ackages/*
219 | # except build/, which is used as an MSBuild target.
220 | !**/[Pp]ackages/build/
221 | # Uncomment if necessary however generally it will be regenerated when needed
222 | #!**/[Pp]ackages/repositories.config
223 | # NuGet v3's project.json files produces more ignorable files
224 | *.nuget.props
225 | *.nuget.targets
226 |
227 | # Microsoft Azure Build Output
228 | csx/
229 | *.build.csdef
230 |
231 | # Microsoft Azure Emulator
232 | ecf/
233 | rcf/
234 |
235 | # Windows Store app package directories and files
236 | AppPackages/
237 | BundleArtifacts/
238 | Package.StoreAssociation.xml
239 | _pkginfo.txt
240 | *.appx
241 | *.appxbundle
242 | *.appxupload
243 |
244 | # Visual Studio cache files
245 | # files ending in .cache can be ignored
246 | *.[Cc]ache
247 | # but keep track of directories ending in .cache
248 | !?*.[Cc]ache/
249 |
250 | # Others
251 | ClientBin/
252 | ~$*
253 | *~
254 | *.dbmdl
255 | *.dbproj.schemaview
256 | *.jfm
257 | *.pfx
258 | *.publishsettings
259 | orleans.codegen.cs
260 |
261 | # Including strong name files can present a security risk
262 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
263 | #*.snk
264 |
265 | # Since there are multiple workflows, uncomment next line to ignore bower_components
266 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
267 | #bower_components/
268 |
269 | # RIA/Silverlight projects
270 | Generated_Code/
271 |
272 | # Backup & report files from converting an old project file
273 | # to a newer Visual Studio version. Backup files are not needed,
274 | # because we have git ;-)
275 | _UpgradeReport_Files/
276 | Backup*/
277 | UpgradeLog*.XML
278 | UpgradeLog*.htm
279 | ServiceFabricBackup/
280 | *.rptproj.bak
281 |
282 | # SQL Server files
283 | *.mdf
284 | *.ldf
285 | *.ndf
286 |
287 | # Business Intelligence projects
288 | *.rdl.data
289 | *.bim.layout
290 | *.bim_*.settings
291 | *.rptproj.rsuser
292 | *- [Bb]ackup.rdl
293 | *- [Bb]ackup ([0-9]).rdl
294 | *- [Bb]ackup ([0-9][0-9]).rdl
295 |
296 | # Microsoft Fakes
297 | FakesAssemblies/
298 |
299 | # GhostDoc plugin setting file
300 | *.GhostDoc.xml
301 |
302 | # Node.js Tools for Visual Studio
303 | .ntvs_analysis.dat
304 | node_modules/
305 |
306 | # Visual Studio 6 build log
307 | *.plg
308 |
309 | # Visual Studio 6 workspace options file
310 | *.opt
311 |
312 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
313 | *.vbw
314 |
315 | # Visual Studio LightSwitch build output
316 | **/*.HTMLClient/GeneratedArtifacts
317 | **/*.DesktopClient/GeneratedArtifacts
318 | **/*.DesktopClient/ModelManifest.xml
319 | **/*.Server/GeneratedArtifacts
320 | **/*.Server/ModelManifest.xml
321 | _Pvt_Extensions
322 |
323 | # Paket dependency manager
324 | .paket/paket.exe
325 | paket-files/
326 |
327 | # FAKE - F# Make
328 | .fake/
329 |
330 | # CodeRush personal settings
331 | .cr/personal
332 |
333 | # Python Tools for Visual Studio (PTVS)
334 | __pycache__/
335 | *.pyc
336 |
337 | # Cake - Uncomment if you are using it
338 | # tools/**
339 | # !tools/packages.config
340 |
341 | # Tabs Studio
342 | *.tss
343 |
344 | # Telerik's JustMock configuration file
345 | *.jmconfig
346 |
347 | # BizTalk build output
348 | *.btp.cs
349 | *.btm.cs
350 | *.odx.cs
351 | *.xsd.cs
352 |
353 | # OpenCover UI analysis results
354 | OpenCover/
355 |
356 | # Azure Stream Analytics local run output
357 | ASALocalRun/
358 |
359 | # MSBuild Binary and Structured Log
360 | *.binlog
361 |
362 | # NVidia Nsight GPU debugger configuration file
363 | *.nvuser
364 |
365 | # MFractors (Xamarin productivity tool) working folder
366 | .mfractor/
367 |
368 | # Local History for Visual Studio
369 | .localhistory/
370 |
371 | # BeatPulse healthcheck temp database
372 | healthchecksdb
373 |
374 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
375 | MigrationBackup/
376 |
377 | # Ionide (cross platform F# VS Code tools) working folder
378 | .ionide/
379 |
380 | # Fody - auto-generated XML schema
381 | FodyWeavers.xsd
382 |
383 | ##
384 | ## Visual studio for Mac
385 | ##
386 |
387 |
388 | # globs
389 | Makefile.in
390 | *.userprefs
391 | *.usertasks
392 | config.make
393 | config.status
394 | aclocal.m4
395 | install-sh
396 | autom4te.cache/
397 | *.tar.gz
398 | tarballs/
399 | test-results/
400 |
401 | # Mac bundle stuff
402 | *.dmg
403 | *.app
404 |
405 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
406 | # General
407 | .DS_Store
408 | .AppleDouble
409 | .LSOverride
410 |
411 | # Icon must end with two \r
412 | Icon
413 |
414 |
415 | # Thumbnails
416 | ._*
417 |
418 | # Files that might appear in the root of a volume
419 | .DocumentRevisions-V100
420 | .fseventsd
421 | .Spotlight-V100
422 | .TemporaryItems
423 | .Trashes
424 | .VolumeIcon.icns
425 | .com.apple.timemachine.donotpresent
426 |
427 | # Directories potentially created on remote AFP share
428 | .AppleDB
429 | .AppleDesktop
430 | Network Trash Folder
431 | Temporary Items
432 | .apdisk
433 |
434 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
435 | # Windows thumbnail cache files
436 | Thumbs.db
437 | ehthumbs.db
438 | ehthumbs_vista.db
439 |
440 | # Dump file
441 | *.stackdump
442 |
443 | # Folder config file
444 | [Dd]esktop.ini
445 |
446 | # Recycle Bin used on file shares
447 | $RECYCLE.BIN/
448 |
449 | # Windows Installer files
450 | *.cab
451 | *.msi
452 | *.msix
453 | *.msm
454 | *.msp
455 |
456 | # Windows shortcuts
457 | *.lnk
458 |
459 | # JetBrains Rider
460 | .idea/
461 | *.sln.iml
462 |
463 | ##
464 | ## Visual Studio Code
465 | ##
466 | .vscode/*
467 | !.vscode/settings.json
468 | !.vscode/tasks.json
469 | !.vscode/launch.json
470 | !.vscode/extensions.json
471 | /test-results/
472 | /playwright-report/
473 | /playwright/.cache/
474 |
--------------------------------------------------------------------------------
/templates/vue/app/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app2",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "app2",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "@vueuse/head": "^1.1.15",
12 | "pinia": "^2.0.26",
13 | "vue": "^3.2.45",
14 | "vue-router": "^4.1.6"
15 | },
16 | "devDependencies": {
17 | "@playwright/test": "^1.28.1",
18 | "@vitejs/plugin-vue": "^3.2.0",
19 | "autoprefixer": "^10.4.13",
20 | "postcss": "^8.4.21",
21 | "tailwindcss": "^3.2.7",
22 | "vite": "^3.2.4"
23 | }
24 | },
25 | "node_modules/@babel/parser": {
26 | "version": "7.21.1",
27 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz",
28 | "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==",
29 | "bin": {
30 | "parser": "bin/babel-parser.js"
31 | },
32 | "engines": {
33 | "node": ">=6.0.0"
34 | }
35 | },
36 | "node_modules/@esbuild/android-arm": {
37 | "version": "0.15.18",
38 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
39 | "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
40 | "cpu": [
41 | "arm"
42 | ],
43 | "dev": true,
44 | "optional": true,
45 | "os": [
46 | "android"
47 | ],
48 | "engines": {
49 | "node": ">=12"
50 | }
51 | },
52 | "node_modules/@esbuild/linux-loong64": {
53 | "version": "0.15.18",
54 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
55 | "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
56 | "cpu": [
57 | "loong64"
58 | ],
59 | "dev": true,
60 | "optional": true,
61 | "os": [
62 | "linux"
63 | ],
64 | "engines": {
65 | "node": ">=12"
66 | }
67 | },
68 | "node_modules/@nodelib/fs.scandir": {
69 | "version": "2.1.5",
70 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
71 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
72 | "dev": true,
73 | "dependencies": {
74 | "@nodelib/fs.stat": "2.0.5",
75 | "run-parallel": "^1.1.9"
76 | },
77 | "engines": {
78 | "node": ">= 8"
79 | }
80 | },
81 | "node_modules/@nodelib/fs.stat": {
82 | "version": "2.0.5",
83 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
84 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
85 | "dev": true,
86 | "engines": {
87 | "node": ">= 8"
88 | }
89 | },
90 | "node_modules/@nodelib/fs.walk": {
91 | "version": "1.2.8",
92 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
93 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
94 | "dev": true,
95 | "dependencies": {
96 | "@nodelib/fs.scandir": "2.1.5",
97 | "fastq": "^1.6.0"
98 | },
99 | "engines": {
100 | "node": ">= 8"
101 | }
102 | },
103 | "node_modules/@playwright/test": {
104 | "version": "1.31.0",
105 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.31.0.tgz",
106 | "integrity": "sha512-Ys5s/06Dg9g3zAIdCIb/UOBYim3U7Zjb3DvC6XBtnRmnglH5O47iwYzmtxXu9fhSyzI2Jn28apkXIOD81GgCdw==",
107 | "dev": true,
108 | "dependencies": {
109 | "@types/node": "*",
110 | "playwright-core": "1.31.0"
111 | },
112 | "bin": {
113 | "playwright": "cli.js"
114 | },
115 | "engines": {
116 | "node": ">=14"
117 | },
118 | "optionalDependencies": {
119 | "fsevents": "2.3.2"
120 | }
121 | },
122 | "node_modules/@types/node": {
123 | "version": "18.14.0",
124 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz",
125 | "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==",
126 | "dev": true
127 | },
128 | "node_modules/@unhead/dom": {
129 | "version": "1.1.15",
130 | "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.1.15.tgz",
131 | "integrity": "sha512-b1S8avVokif15pankINlFrKrxW2pEJ4R4vt/IEDLhjsAq4oDeLpbFUQNvFeEQafaXBdryCTWICJX8MQrzs9INA==",
132 | "dependencies": {
133 | "@unhead/schema": "1.1.15",
134 | "@unhead/shared": "1.1.15"
135 | },
136 | "funding": {
137 | "url": "https://github.com/sponsors/harlan-zw"
138 | }
139 | },
140 | "node_modules/@unhead/schema": {
141 | "version": "1.1.15",
142 | "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.1.15.tgz",
143 | "integrity": "sha512-331yP1JrJfvaa2TvfiVGLlgwl9bVgFVJ0pMy1hPBM/0+J09d6SKy4khZb2j0WtgVofY6FnThmKWDNCngCzRZhg==",
144 | "dependencies": {
145 | "hookable": "^5.4.2",
146 | "zhead": "^2.0.4"
147 | },
148 | "funding": {
149 | "url": "https://github.com/sponsors/harlan-zw"
150 | }
151 | },
152 | "node_modules/@unhead/shared": {
153 | "version": "1.1.15",
154 | "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.1.15.tgz",
155 | "integrity": "sha512-s41AbZFeTAV982pP5+MUno3UlKcSxziMjs+D6TAKP+OdNhyN/W557TUVKbBY/4EWWYl5c0wJhjeuVduJBQpSSQ==",
156 | "dependencies": {
157 | "@unhead/schema": "1.1.15"
158 | },
159 | "funding": {
160 | "url": "https://github.com/sponsors/harlan-zw"
161 | }
162 | },
163 | "node_modules/@unhead/ssr": {
164 | "version": "1.1.15",
165 | "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.1.15.tgz",
166 | "integrity": "sha512-ZDj3lJuMOTrhDrNFQLETC1xQN2z53GzXV4kRQ6Baeqb9uDR+3q1yeHV+eL7DEqR8aPCHt26gs5c8OYJsfE1HFQ==",
167 | "dependencies": {
168 | "@unhead/schema": "1.1.15",
169 | "@unhead/shared": "1.1.15"
170 | },
171 | "funding": {
172 | "url": "https://github.com/sponsors/harlan-zw"
173 | }
174 | },
175 | "node_modules/@unhead/vue": {
176 | "version": "1.1.15",
177 | "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.1.15.tgz",
178 | "integrity": "sha512-EX8zsb3dNhC72tpz6BExK3oIpy2t6f2QbpYsr6gthgtLMJqe8SPjgJlKGcVEegZhPw4bmMzMk72Dak3qomb98A==",
179 | "dependencies": {
180 | "@unhead/schema": "1.1.15",
181 | "@unhead/shared": "1.1.15",
182 | "hookable": "^5.4.2",
183 | "unhead": "1.1.15"
184 | },
185 | "funding": {
186 | "url": "https://github.com/sponsors/harlan-zw"
187 | },
188 | "peerDependencies": {
189 | "vue": ">=2.7 || >=3"
190 | }
191 | },
192 | "node_modules/@vitejs/plugin-vue": {
193 | "version": "3.2.0",
194 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz",
195 | "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==",
196 | "dev": true,
197 | "engines": {
198 | "node": "^14.18.0 || >=16.0.0"
199 | },
200 | "peerDependencies": {
201 | "vite": "^3.0.0",
202 | "vue": "^3.2.25"
203 | }
204 | },
205 | "node_modules/@vue/compiler-core": {
206 | "version": "3.2.47",
207 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
208 | "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
209 | "dependencies": {
210 | "@babel/parser": "^7.16.4",
211 | "@vue/shared": "3.2.47",
212 | "estree-walker": "^2.0.2",
213 | "source-map": "^0.6.1"
214 | }
215 | },
216 | "node_modules/@vue/compiler-dom": {
217 | "version": "3.2.47",
218 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
219 | "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
220 | "dependencies": {
221 | "@vue/compiler-core": "3.2.47",
222 | "@vue/shared": "3.2.47"
223 | }
224 | },
225 | "node_modules/@vue/compiler-sfc": {
226 | "version": "3.2.47",
227 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
228 | "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
229 | "dependencies": {
230 | "@babel/parser": "^7.16.4",
231 | "@vue/compiler-core": "3.2.47",
232 | "@vue/compiler-dom": "3.2.47",
233 | "@vue/compiler-ssr": "3.2.47",
234 | "@vue/reactivity-transform": "3.2.47",
235 | "@vue/shared": "3.2.47",
236 | "estree-walker": "^2.0.2",
237 | "magic-string": "^0.25.7",
238 | "postcss": "^8.1.10",
239 | "source-map": "^0.6.1"
240 | }
241 | },
242 | "node_modules/@vue/compiler-ssr": {
243 | "version": "3.2.47",
244 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
245 | "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
246 | "dependencies": {
247 | "@vue/compiler-dom": "3.2.47",
248 | "@vue/shared": "3.2.47"
249 | }
250 | },
251 | "node_modules/@vue/devtools-api": {
252 | "version": "6.5.0",
253 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
254 | "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
255 | },
256 | "node_modules/@vue/reactivity": {
257 | "version": "3.2.47",
258 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz",
259 | "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
260 | "dependencies": {
261 | "@vue/shared": "3.2.47"
262 | }
263 | },
264 | "node_modules/@vue/reactivity-transform": {
265 | "version": "3.2.47",
266 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
267 | "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
268 | "dependencies": {
269 | "@babel/parser": "^7.16.4",
270 | "@vue/compiler-core": "3.2.47",
271 | "@vue/shared": "3.2.47",
272 | "estree-walker": "^2.0.2",
273 | "magic-string": "^0.25.7"
274 | }
275 | },
276 | "node_modules/@vue/runtime-core": {
277 | "version": "3.2.47",
278 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
279 | "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
280 | "dependencies": {
281 | "@vue/reactivity": "3.2.47",
282 | "@vue/shared": "3.2.47"
283 | }
284 | },
285 | "node_modules/@vue/runtime-dom": {
286 | "version": "3.2.47",
287 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
288 | "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
289 | "dependencies": {
290 | "@vue/runtime-core": "3.2.47",
291 | "@vue/shared": "3.2.47",
292 | "csstype": "^2.6.8"
293 | }
294 | },
295 | "node_modules/@vue/server-renderer": {
296 | "version": "3.2.47",
297 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
298 | "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
299 | "dependencies": {
300 | "@vue/compiler-ssr": "3.2.47",
301 | "@vue/shared": "3.2.47"
302 | },
303 | "peerDependencies": {
304 | "vue": "3.2.47"
305 | }
306 | },
307 | "node_modules/@vue/shared": {
308 | "version": "3.2.47",
309 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
310 | "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
311 | },
312 | "node_modules/@vueuse/head": {
313 | "version": "1.1.15",
314 | "resolved": "https://registry.npmjs.org/@vueuse/head/-/head-1.1.15.tgz",
315 | "integrity": "sha512-LJqvb7dpSqnsdn6YWUxv97vWCnn/s6IfBrE4ih5kRlh8XQXr/HjXJ8IyIxxp0X7QDr3FhOsjRDpJSiQbDYbBdQ==",
316 | "dependencies": {
317 | "@unhead/dom": "^1.1.15",
318 | "@unhead/schema": "^1.1.15",
319 | "@unhead/ssr": "^1.1.15",
320 | "@unhead/vue": "^1.1.15"
321 | },
322 | "peerDependencies": {
323 | "vue": ">=2.7 || >=3"
324 | }
325 | },
326 | "node_modules/acorn": {
327 | "version": "7.4.1",
328 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
329 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
330 | "dev": true,
331 | "bin": {
332 | "acorn": "bin/acorn"
333 | },
334 | "engines": {
335 | "node": ">=0.4.0"
336 | }
337 | },
338 | "node_modules/acorn-node": {
339 | "version": "1.8.2",
340 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
341 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
342 | "dev": true,
343 | "dependencies": {
344 | "acorn": "^7.0.0",
345 | "acorn-walk": "^7.0.0",
346 | "xtend": "^4.0.2"
347 | }
348 | },
349 | "node_modules/acorn-walk": {
350 | "version": "7.2.0",
351 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
352 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
353 | "dev": true,
354 | "engines": {
355 | "node": ">=0.4.0"
356 | }
357 | },
358 | "node_modules/anymatch": {
359 | "version": "3.1.3",
360 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
361 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
362 | "dev": true,
363 | "dependencies": {
364 | "normalize-path": "^3.0.0",
365 | "picomatch": "^2.0.4"
366 | },
367 | "engines": {
368 | "node": ">= 8"
369 | }
370 | },
371 | "node_modules/arg": {
372 | "version": "5.0.2",
373 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
374 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
375 | "dev": true
376 | },
377 | "node_modules/autoprefixer": {
378 | "version": "10.4.13",
379 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
380 | "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
381 | "dev": true,
382 | "funding": [
383 | {
384 | "type": "opencollective",
385 | "url": "https://opencollective.com/postcss/"
386 | },
387 | {
388 | "type": "tidelift",
389 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
390 | }
391 | ],
392 | "dependencies": {
393 | "browserslist": "^4.21.4",
394 | "caniuse-lite": "^1.0.30001426",
395 | "fraction.js": "^4.2.0",
396 | "normalize-range": "^0.1.2",
397 | "picocolors": "^1.0.0",
398 | "postcss-value-parser": "^4.2.0"
399 | },
400 | "bin": {
401 | "autoprefixer": "bin/autoprefixer"
402 | },
403 | "engines": {
404 | "node": "^10 || ^12 || >=14"
405 | },
406 | "peerDependencies": {
407 | "postcss": "^8.1.0"
408 | }
409 | },
410 | "node_modules/binary-extensions": {
411 | "version": "2.2.0",
412 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
413 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
414 | "dev": true,
415 | "engines": {
416 | "node": ">=8"
417 | }
418 | },
419 | "node_modules/braces": {
420 | "version": "3.0.2",
421 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
422 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
423 | "dev": true,
424 | "dependencies": {
425 | "fill-range": "^7.0.1"
426 | },
427 | "engines": {
428 | "node": ">=8"
429 | }
430 | },
431 | "node_modules/browserslist": {
432 | "version": "4.21.5",
433 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
434 | "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
435 | "dev": true,
436 | "funding": [
437 | {
438 | "type": "opencollective",
439 | "url": "https://opencollective.com/browserslist"
440 | },
441 | {
442 | "type": "tidelift",
443 | "url": "https://tidelift.com/funding/github/npm/browserslist"
444 | }
445 | ],
446 | "dependencies": {
447 | "caniuse-lite": "^1.0.30001449",
448 | "electron-to-chromium": "^1.4.284",
449 | "node-releases": "^2.0.8",
450 | "update-browserslist-db": "^1.0.10"
451 | },
452 | "bin": {
453 | "browserslist": "cli.js"
454 | },
455 | "engines": {
456 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
457 | }
458 | },
459 | "node_modules/camelcase-css": {
460 | "version": "2.0.1",
461 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
462 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
463 | "dev": true,
464 | "engines": {
465 | "node": ">= 6"
466 | }
467 | },
468 | "node_modules/caniuse-lite": {
469 | "version": "1.0.30001457",
470 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz",
471 | "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==",
472 | "dev": true,
473 | "funding": [
474 | {
475 | "type": "opencollective",
476 | "url": "https://opencollective.com/browserslist"
477 | },
478 | {
479 | "type": "tidelift",
480 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
481 | }
482 | ]
483 | },
484 | "node_modules/chokidar": {
485 | "version": "3.5.3",
486 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
487 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
488 | "dev": true,
489 | "funding": [
490 | {
491 | "type": "individual",
492 | "url": "https://paulmillr.com/funding/"
493 | }
494 | ],
495 | "dependencies": {
496 | "anymatch": "~3.1.2",
497 | "braces": "~3.0.2",
498 | "glob-parent": "~5.1.2",
499 | "is-binary-path": "~2.1.0",
500 | "is-glob": "~4.0.1",
501 | "normalize-path": "~3.0.0",
502 | "readdirp": "~3.6.0"
503 | },
504 | "engines": {
505 | "node": ">= 8.10.0"
506 | },
507 | "optionalDependencies": {
508 | "fsevents": "~2.3.2"
509 | }
510 | },
511 | "node_modules/chokidar/node_modules/glob-parent": {
512 | "version": "5.1.2",
513 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
514 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
515 | "dev": true,
516 | "dependencies": {
517 | "is-glob": "^4.0.1"
518 | },
519 | "engines": {
520 | "node": ">= 6"
521 | }
522 | },
523 | "node_modules/color-name": {
524 | "version": "1.1.4",
525 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
526 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
527 | "dev": true
528 | },
529 | "node_modules/cssesc": {
530 | "version": "3.0.0",
531 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
532 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
533 | "dev": true,
534 | "bin": {
535 | "cssesc": "bin/cssesc"
536 | },
537 | "engines": {
538 | "node": ">=4"
539 | }
540 | },
541 | "node_modules/csstype": {
542 | "version": "2.6.21",
543 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
544 | "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
545 | },
546 | "node_modules/defined": {
547 | "version": "1.0.1",
548 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
549 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
550 | "dev": true,
551 | "funding": {
552 | "url": "https://github.com/sponsors/ljharb"
553 | }
554 | },
555 | "node_modules/detective": {
556 | "version": "5.2.1",
557 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
558 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
559 | "dev": true,
560 | "dependencies": {
561 | "acorn-node": "^1.8.2",
562 | "defined": "^1.0.0",
563 | "minimist": "^1.2.6"
564 | },
565 | "bin": {
566 | "detective": "bin/detective.js"
567 | },
568 | "engines": {
569 | "node": ">=0.8.0"
570 | }
571 | },
572 | "node_modules/didyoumean": {
573 | "version": "1.2.2",
574 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
575 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
576 | "dev": true
577 | },
578 | "node_modules/dlv": {
579 | "version": "1.1.3",
580 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
581 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
582 | "dev": true
583 | },
584 | "node_modules/electron-to-chromium": {
585 | "version": "1.4.308",
586 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz",
587 | "integrity": "sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==",
588 | "dev": true
589 | },
590 | "node_modules/esbuild": {
591 | "version": "0.15.18",
592 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
593 | "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
594 | "dev": true,
595 | "hasInstallScript": true,
596 | "bin": {
597 | "esbuild": "bin/esbuild"
598 | },
599 | "engines": {
600 | "node": ">=12"
601 | },
602 | "optionalDependencies": {
603 | "@esbuild/android-arm": "0.15.18",
604 | "@esbuild/linux-loong64": "0.15.18",
605 | "esbuild-android-64": "0.15.18",
606 | "esbuild-android-arm64": "0.15.18",
607 | "esbuild-darwin-64": "0.15.18",
608 | "esbuild-darwin-arm64": "0.15.18",
609 | "esbuild-freebsd-64": "0.15.18",
610 | "esbuild-freebsd-arm64": "0.15.18",
611 | "esbuild-linux-32": "0.15.18",
612 | "esbuild-linux-64": "0.15.18",
613 | "esbuild-linux-arm": "0.15.18",
614 | "esbuild-linux-arm64": "0.15.18",
615 | "esbuild-linux-mips64le": "0.15.18",
616 | "esbuild-linux-ppc64le": "0.15.18",
617 | "esbuild-linux-riscv64": "0.15.18",
618 | "esbuild-linux-s390x": "0.15.18",
619 | "esbuild-netbsd-64": "0.15.18",
620 | "esbuild-openbsd-64": "0.15.18",
621 | "esbuild-sunos-64": "0.15.18",
622 | "esbuild-windows-32": "0.15.18",
623 | "esbuild-windows-64": "0.15.18",
624 | "esbuild-windows-arm64": "0.15.18"
625 | }
626 | },
627 | "node_modules/esbuild-android-64": {
628 | "version": "0.15.18",
629 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
630 | "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
631 | "cpu": [
632 | "x64"
633 | ],
634 | "dev": true,
635 | "optional": true,
636 | "os": [
637 | "android"
638 | ],
639 | "engines": {
640 | "node": ">=12"
641 | }
642 | },
643 | "node_modules/esbuild-android-arm64": {
644 | "version": "0.15.18",
645 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
646 | "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
647 | "cpu": [
648 | "arm64"
649 | ],
650 | "dev": true,
651 | "optional": true,
652 | "os": [
653 | "android"
654 | ],
655 | "engines": {
656 | "node": ">=12"
657 | }
658 | },
659 | "node_modules/esbuild-darwin-64": {
660 | "version": "0.15.18",
661 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
662 | "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
663 | "cpu": [
664 | "x64"
665 | ],
666 | "dev": true,
667 | "optional": true,
668 | "os": [
669 | "darwin"
670 | ],
671 | "engines": {
672 | "node": ">=12"
673 | }
674 | },
675 | "node_modules/esbuild-darwin-arm64": {
676 | "version": "0.15.18",
677 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
678 | "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
679 | "cpu": [
680 | "arm64"
681 | ],
682 | "dev": true,
683 | "optional": true,
684 | "os": [
685 | "darwin"
686 | ],
687 | "engines": {
688 | "node": ">=12"
689 | }
690 | },
691 | "node_modules/esbuild-freebsd-64": {
692 | "version": "0.15.18",
693 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
694 | "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
695 | "cpu": [
696 | "x64"
697 | ],
698 | "dev": true,
699 | "optional": true,
700 | "os": [
701 | "freebsd"
702 | ],
703 | "engines": {
704 | "node": ">=12"
705 | }
706 | },
707 | "node_modules/esbuild-freebsd-arm64": {
708 | "version": "0.15.18",
709 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
710 | "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
711 | "cpu": [
712 | "arm64"
713 | ],
714 | "dev": true,
715 | "optional": true,
716 | "os": [
717 | "freebsd"
718 | ],
719 | "engines": {
720 | "node": ">=12"
721 | }
722 | },
723 | "node_modules/esbuild-linux-32": {
724 | "version": "0.15.18",
725 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
726 | "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
727 | "cpu": [
728 | "ia32"
729 | ],
730 | "dev": true,
731 | "optional": true,
732 | "os": [
733 | "linux"
734 | ],
735 | "engines": {
736 | "node": ">=12"
737 | }
738 | },
739 | "node_modules/esbuild-linux-64": {
740 | "version": "0.15.18",
741 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
742 | "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
743 | "cpu": [
744 | "x64"
745 | ],
746 | "dev": true,
747 | "optional": true,
748 | "os": [
749 | "linux"
750 | ],
751 | "engines": {
752 | "node": ">=12"
753 | }
754 | },
755 | "node_modules/esbuild-linux-arm": {
756 | "version": "0.15.18",
757 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
758 | "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
759 | "cpu": [
760 | "arm"
761 | ],
762 | "dev": true,
763 | "optional": true,
764 | "os": [
765 | "linux"
766 | ],
767 | "engines": {
768 | "node": ">=12"
769 | }
770 | },
771 | "node_modules/esbuild-linux-arm64": {
772 | "version": "0.15.18",
773 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
774 | "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
775 | "cpu": [
776 | "arm64"
777 | ],
778 | "dev": true,
779 | "optional": true,
780 | "os": [
781 | "linux"
782 | ],
783 | "engines": {
784 | "node": ">=12"
785 | }
786 | },
787 | "node_modules/esbuild-linux-mips64le": {
788 | "version": "0.15.18",
789 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
790 | "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
791 | "cpu": [
792 | "mips64el"
793 | ],
794 | "dev": true,
795 | "optional": true,
796 | "os": [
797 | "linux"
798 | ],
799 | "engines": {
800 | "node": ">=12"
801 | }
802 | },
803 | "node_modules/esbuild-linux-ppc64le": {
804 | "version": "0.15.18",
805 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
806 | "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
807 | "cpu": [
808 | "ppc64"
809 | ],
810 | "dev": true,
811 | "optional": true,
812 | "os": [
813 | "linux"
814 | ],
815 | "engines": {
816 | "node": ">=12"
817 | }
818 | },
819 | "node_modules/esbuild-linux-riscv64": {
820 | "version": "0.15.18",
821 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
822 | "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
823 | "cpu": [
824 | "riscv64"
825 | ],
826 | "dev": true,
827 | "optional": true,
828 | "os": [
829 | "linux"
830 | ],
831 | "engines": {
832 | "node": ">=12"
833 | }
834 | },
835 | "node_modules/esbuild-linux-s390x": {
836 | "version": "0.15.18",
837 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
838 | "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
839 | "cpu": [
840 | "s390x"
841 | ],
842 | "dev": true,
843 | "optional": true,
844 | "os": [
845 | "linux"
846 | ],
847 | "engines": {
848 | "node": ">=12"
849 | }
850 | },
851 | "node_modules/esbuild-netbsd-64": {
852 | "version": "0.15.18",
853 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
854 | "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
855 | "cpu": [
856 | "x64"
857 | ],
858 | "dev": true,
859 | "optional": true,
860 | "os": [
861 | "netbsd"
862 | ],
863 | "engines": {
864 | "node": ">=12"
865 | }
866 | },
867 | "node_modules/esbuild-openbsd-64": {
868 | "version": "0.15.18",
869 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
870 | "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
871 | "cpu": [
872 | "x64"
873 | ],
874 | "dev": true,
875 | "optional": true,
876 | "os": [
877 | "openbsd"
878 | ],
879 | "engines": {
880 | "node": ">=12"
881 | }
882 | },
883 | "node_modules/esbuild-sunos-64": {
884 | "version": "0.15.18",
885 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
886 | "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
887 | "cpu": [
888 | "x64"
889 | ],
890 | "dev": true,
891 | "optional": true,
892 | "os": [
893 | "sunos"
894 | ],
895 | "engines": {
896 | "node": ">=12"
897 | }
898 | },
899 | "node_modules/esbuild-windows-32": {
900 | "version": "0.15.18",
901 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
902 | "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
903 | "cpu": [
904 | "ia32"
905 | ],
906 | "dev": true,
907 | "optional": true,
908 | "os": [
909 | "win32"
910 | ],
911 | "engines": {
912 | "node": ">=12"
913 | }
914 | },
915 | "node_modules/esbuild-windows-64": {
916 | "version": "0.15.18",
917 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
918 | "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
919 | "cpu": [
920 | "x64"
921 | ],
922 | "dev": true,
923 | "optional": true,
924 | "os": [
925 | "win32"
926 | ],
927 | "engines": {
928 | "node": ">=12"
929 | }
930 | },
931 | "node_modules/esbuild-windows-arm64": {
932 | "version": "0.15.18",
933 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
934 | "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
935 | "cpu": [
936 | "arm64"
937 | ],
938 | "dev": true,
939 | "optional": true,
940 | "os": [
941 | "win32"
942 | ],
943 | "engines": {
944 | "node": ">=12"
945 | }
946 | },
947 | "node_modules/escalade": {
948 | "version": "3.1.1",
949 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
950 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
951 | "dev": true,
952 | "engines": {
953 | "node": ">=6"
954 | }
955 | },
956 | "node_modules/estree-walker": {
957 | "version": "2.0.2",
958 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
959 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
960 | },
961 | "node_modules/fast-glob": {
962 | "version": "3.2.12",
963 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
964 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
965 | "dev": true,
966 | "dependencies": {
967 | "@nodelib/fs.stat": "^2.0.2",
968 | "@nodelib/fs.walk": "^1.2.3",
969 | "glob-parent": "^5.1.2",
970 | "merge2": "^1.3.0",
971 | "micromatch": "^4.0.4"
972 | },
973 | "engines": {
974 | "node": ">=8.6.0"
975 | }
976 | },
977 | "node_modules/fast-glob/node_modules/glob-parent": {
978 | "version": "5.1.2",
979 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
980 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
981 | "dev": true,
982 | "dependencies": {
983 | "is-glob": "^4.0.1"
984 | },
985 | "engines": {
986 | "node": ">= 6"
987 | }
988 | },
989 | "node_modules/fastq": {
990 | "version": "1.15.0",
991 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
992 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
993 | "dev": true,
994 | "dependencies": {
995 | "reusify": "^1.0.4"
996 | }
997 | },
998 | "node_modules/fill-range": {
999 | "version": "7.0.1",
1000 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1001 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1002 | "dev": true,
1003 | "dependencies": {
1004 | "to-regex-range": "^5.0.1"
1005 | },
1006 | "engines": {
1007 | "node": ">=8"
1008 | }
1009 | },
1010 | "node_modules/fraction.js": {
1011 | "version": "4.2.0",
1012 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
1013 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
1014 | "dev": true,
1015 | "engines": {
1016 | "node": "*"
1017 | },
1018 | "funding": {
1019 | "type": "patreon",
1020 | "url": "https://www.patreon.com/infusion"
1021 | }
1022 | },
1023 | "node_modules/fsevents": {
1024 | "version": "2.3.2",
1025 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1026 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1027 | "dev": true,
1028 | "hasInstallScript": true,
1029 | "optional": true,
1030 | "os": [
1031 | "darwin"
1032 | ],
1033 | "engines": {
1034 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1035 | }
1036 | },
1037 | "node_modules/function-bind": {
1038 | "version": "1.1.1",
1039 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1040 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1041 | "dev": true
1042 | },
1043 | "node_modules/glob-parent": {
1044 | "version": "6.0.2",
1045 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1046 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1047 | "dev": true,
1048 | "dependencies": {
1049 | "is-glob": "^4.0.3"
1050 | },
1051 | "engines": {
1052 | "node": ">=10.13.0"
1053 | }
1054 | },
1055 | "node_modules/has": {
1056 | "version": "1.0.3",
1057 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1058 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1059 | "dev": true,
1060 | "dependencies": {
1061 | "function-bind": "^1.1.1"
1062 | },
1063 | "engines": {
1064 | "node": ">= 0.4.0"
1065 | }
1066 | },
1067 | "node_modules/hookable": {
1068 | "version": "5.4.2",
1069 | "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.4.2.tgz",
1070 | "integrity": "sha512-6rOvaUiNKy9lET1X0ECnyZ5O5kSV0PJbtA5yZUgdEF7fGJEVwSLSislltyt7nFwVVALYHQJtfGeAR2Y0A0uJkg=="
1071 | },
1072 | "node_modules/is-binary-path": {
1073 | "version": "2.1.0",
1074 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1075 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1076 | "dev": true,
1077 | "dependencies": {
1078 | "binary-extensions": "^2.0.0"
1079 | },
1080 | "engines": {
1081 | "node": ">=8"
1082 | }
1083 | },
1084 | "node_modules/is-core-module": {
1085 | "version": "2.11.0",
1086 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
1087 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
1088 | "dev": true,
1089 | "dependencies": {
1090 | "has": "^1.0.3"
1091 | },
1092 | "funding": {
1093 | "url": "https://github.com/sponsors/ljharb"
1094 | }
1095 | },
1096 | "node_modules/is-extglob": {
1097 | "version": "2.1.1",
1098 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1099 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1100 | "dev": true,
1101 | "engines": {
1102 | "node": ">=0.10.0"
1103 | }
1104 | },
1105 | "node_modules/is-glob": {
1106 | "version": "4.0.3",
1107 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1108 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1109 | "dev": true,
1110 | "dependencies": {
1111 | "is-extglob": "^2.1.1"
1112 | },
1113 | "engines": {
1114 | "node": ">=0.10.0"
1115 | }
1116 | },
1117 | "node_modules/is-number": {
1118 | "version": "7.0.0",
1119 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1120 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1121 | "dev": true,
1122 | "engines": {
1123 | "node": ">=0.12.0"
1124 | }
1125 | },
1126 | "node_modules/lilconfig": {
1127 | "version": "2.0.6",
1128 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
1129 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
1130 | "dev": true,
1131 | "engines": {
1132 | "node": ">=10"
1133 | }
1134 | },
1135 | "node_modules/magic-string": {
1136 | "version": "0.25.9",
1137 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
1138 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
1139 | "dependencies": {
1140 | "sourcemap-codec": "^1.4.8"
1141 | }
1142 | },
1143 | "node_modules/merge2": {
1144 | "version": "1.4.1",
1145 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1146 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1147 | "dev": true,
1148 | "engines": {
1149 | "node": ">= 8"
1150 | }
1151 | },
1152 | "node_modules/micromatch": {
1153 | "version": "4.0.5",
1154 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1155 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1156 | "dev": true,
1157 | "dependencies": {
1158 | "braces": "^3.0.2",
1159 | "picomatch": "^2.3.1"
1160 | },
1161 | "engines": {
1162 | "node": ">=8.6"
1163 | }
1164 | },
1165 | "node_modules/minimist": {
1166 | "version": "1.2.8",
1167 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1168 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1169 | "dev": true,
1170 | "funding": {
1171 | "url": "https://github.com/sponsors/ljharb"
1172 | }
1173 | },
1174 | "node_modules/nanoid": {
1175 | "version": "3.3.4",
1176 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
1177 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
1178 | "bin": {
1179 | "nanoid": "bin/nanoid.cjs"
1180 | },
1181 | "engines": {
1182 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1183 | }
1184 | },
1185 | "node_modules/node-releases": {
1186 | "version": "2.0.10",
1187 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
1188 | "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
1189 | "dev": true
1190 | },
1191 | "node_modules/normalize-path": {
1192 | "version": "3.0.0",
1193 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1194 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1195 | "dev": true,
1196 | "engines": {
1197 | "node": ">=0.10.0"
1198 | }
1199 | },
1200 | "node_modules/normalize-range": {
1201 | "version": "0.1.2",
1202 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
1203 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
1204 | "dev": true,
1205 | "engines": {
1206 | "node": ">=0.10.0"
1207 | }
1208 | },
1209 | "node_modules/object-hash": {
1210 | "version": "3.0.0",
1211 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1212 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1213 | "dev": true,
1214 | "engines": {
1215 | "node": ">= 6"
1216 | }
1217 | },
1218 | "node_modules/path-parse": {
1219 | "version": "1.0.7",
1220 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1221 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1222 | "dev": true
1223 | },
1224 | "node_modules/picocolors": {
1225 | "version": "1.0.0",
1226 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1227 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1228 | },
1229 | "node_modules/picomatch": {
1230 | "version": "2.3.1",
1231 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1232 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1233 | "dev": true,
1234 | "engines": {
1235 | "node": ">=8.6"
1236 | },
1237 | "funding": {
1238 | "url": "https://github.com/sponsors/jonschlinkert"
1239 | }
1240 | },
1241 | "node_modules/pify": {
1242 | "version": "2.3.0",
1243 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1244 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1245 | "dev": true,
1246 | "engines": {
1247 | "node": ">=0.10.0"
1248 | }
1249 | },
1250 | "node_modules/pinia": {
1251 | "version": "2.0.32",
1252 | "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.32.tgz",
1253 | "integrity": "sha512-8Tw4OrpCSJ028UUyp0gYPP/wyjigLoEceuO/x1G+FlHVf73337e5vLm4uDmrRIoBG1hvaed/eSHnrCFjOc4nkA==",
1254 | "dependencies": {
1255 | "@vue/devtools-api": "^6.5.0",
1256 | "vue-demi": "*"
1257 | },
1258 | "funding": {
1259 | "url": "https://github.com/sponsors/posva"
1260 | },
1261 | "peerDependencies": {
1262 | "@vue/composition-api": "^1.4.0",
1263 | "typescript": ">=4.4.4",
1264 | "vue": "^2.6.14 || ^3.2.0"
1265 | },
1266 | "peerDependenciesMeta": {
1267 | "@vue/composition-api": {
1268 | "optional": true
1269 | },
1270 | "typescript": {
1271 | "optional": true
1272 | }
1273 | }
1274 | },
1275 | "node_modules/pinia/node_modules/vue-demi": {
1276 | "version": "0.13.11",
1277 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
1278 | "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
1279 | "hasInstallScript": true,
1280 | "bin": {
1281 | "vue-demi-fix": "bin/vue-demi-fix.js",
1282 | "vue-demi-switch": "bin/vue-demi-switch.js"
1283 | },
1284 | "engines": {
1285 | "node": ">=12"
1286 | },
1287 | "funding": {
1288 | "url": "https://github.com/sponsors/antfu"
1289 | },
1290 | "peerDependencies": {
1291 | "@vue/composition-api": "^1.0.0-rc.1",
1292 | "vue": "^3.0.0-0 || ^2.6.0"
1293 | },
1294 | "peerDependenciesMeta": {
1295 | "@vue/composition-api": {
1296 | "optional": true
1297 | }
1298 | }
1299 | },
1300 | "node_modules/playwright-core": {
1301 | "version": "1.31.0",
1302 | "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.31.0.tgz",
1303 | "integrity": "sha512-/KquBjS5DcASCh8cGeNVHuC0kyb7c9plKTwaKxgOGtxT7+DZO2fjmFvPDBSXslEIK5CeOO/2kk5rOCktFXKEdA==",
1304 | "dev": true,
1305 | "bin": {
1306 | "playwright": "cli.js"
1307 | },
1308 | "engines": {
1309 | "node": ">=14"
1310 | }
1311 | },
1312 | "node_modules/postcss": {
1313 | "version": "8.4.21",
1314 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
1315 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
1316 | "funding": [
1317 | {
1318 | "type": "opencollective",
1319 | "url": "https://opencollective.com/postcss/"
1320 | },
1321 | {
1322 | "type": "tidelift",
1323 | "url": "https://tidelift.com/funding/github/npm/postcss"
1324 | }
1325 | ],
1326 | "dependencies": {
1327 | "nanoid": "^3.3.4",
1328 | "picocolors": "^1.0.0",
1329 | "source-map-js": "^1.0.2"
1330 | },
1331 | "engines": {
1332 | "node": "^10 || ^12 || >=14"
1333 | }
1334 | },
1335 | "node_modules/postcss-import": {
1336 | "version": "14.1.0",
1337 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
1338 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
1339 | "dev": true,
1340 | "dependencies": {
1341 | "postcss-value-parser": "^4.0.0",
1342 | "read-cache": "^1.0.0",
1343 | "resolve": "^1.1.7"
1344 | },
1345 | "engines": {
1346 | "node": ">=10.0.0"
1347 | },
1348 | "peerDependencies": {
1349 | "postcss": "^8.0.0"
1350 | }
1351 | },
1352 | "node_modules/postcss-js": {
1353 | "version": "4.0.1",
1354 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
1355 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
1356 | "dev": true,
1357 | "dependencies": {
1358 | "camelcase-css": "^2.0.1"
1359 | },
1360 | "engines": {
1361 | "node": "^12 || ^14 || >= 16"
1362 | },
1363 | "funding": {
1364 | "type": "opencollective",
1365 | "url": "https://opencollective.com/postcss/"
1366 | },
1367 | "peerDependencies": {
1368 | "postcss": "^8.4.21"
1369 | }
1370 | },
1371 | "node_modules/postcss-load-config": {
1372 | "version": "3.1.4",
1373 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
1374 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
1375 | "dev": true,
1376 | "dependencies": {
1377 | "lilconfig": "^2.0.5",
1378 | "yaml": "^1.10.2"
1379 | },
1380 | "engines": {
1381 | "node": ">= 10"
1382 | },
1383 | "funding": {
1384 | "type": "opencollective",
1385 | "url": "https://opencollective.com/postcss/"
1386 | },
1387 | "peerDependencies": {
1388 | "postcss": ">=8.0.9",
1389 | "ts-node": ">=9.0.0"
1390 | },
1391 | "peerDependenciesMeta": {
1392 | "postcss": {
1393 | "optional": true
1394 | },
1395 | "ts-node": {
1396 | "optional": true
1397 | }
1398 | }
1399 | },
1400 | "node_modules/postcss-nested": {
1401 | "version": "6.0.0",
1402 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
1403 | "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
1404 | "dev": true,
1405 | "dependencies": {
1406 | "postcss-selector-parser": "^6.0.10"
1407 | },
1408 | "engines": {
1409 | "node": ">=12.0"
1410 | },
1411 | "funding": {
1412 | "type": "opencollective",
1413 | "url": "https://opencollective.com/postcss/"
1414 | },
1415 | "peerDependencies": {
1416 | "postcss": "^8.2.14"
1417 | }
1418 | },
1419 | "node_modules/postcss-selector-parser": {
1420 | "version": "6.0.11",
1421 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
1422 | "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
1423 | "dev": true,
1424 | "dependencies": {
1425 | "cssesc": "^3.0.0",
1426 | "util-deprecate": "^1.0.2"
1427 | },
1428 | "engines": {
1429 | "node": ">=4"
1430 | }
1431 | },
1432 | "node_modules/postcss-value-parser": {
1433 | "version": "4.2.0",
1434 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
1435 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
1436 | "dev": true
1437 | },
1438 | "node_modules/queue-microtask": {
1439 | "version": "1.2.3",
1440 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1441 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1442 | "dev": true,
1443 | "funding": [
1444 | {
1445 | "type": "github",
1446 | "url": "https://github.com/sponsors/feross"
1447 | },
1448 | {
1449 | "type": "patreon",
1450 | "url": "https://www.patreon.com/feross"
1451 | },
1452 | {
1453 | "type": "consulting",
1454 | "url": "https://feross.org/support"
1455 | }
1456 | ]
1457 | },
1458 | "node_modules/quick-lru": {
1459 | "version": "5.1.1",
1460 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
1461 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
1462 | "dev": true,
1463 | "engines": {
1464 | "node": ">=10"
1465 | },
1466 | "funding": {
1467 | "url": "https://github.com/sponsors/sindresorhus"
1468 | }
1469 | },
1470 | "node_modules/read-cache": {
1471 | "version": "1.0.0",
1472 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
1473 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
1474 | "dev": true,
1475 | "dependencies": {
1476 | "pify": "^2.3.0"
1477 | }
1478 | },
1479 | "node_modules/readdirp": {
1480 | "version": "3.6.0",
1481 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1482 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1483 | "dev": true,
1484 | "dependencies": {
1485 | "picomatch": "^2.2.1"
1486 | },
1487 | "engines": {
1488 | "node": ">=8.10.0"
1489 | }
1490 | },
1491 | "node_modules/resolve": {
1492 | "version": "1.22.1",
1493 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1494 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1495 | "dev": true,
1496 | "dependencies": {
1497 | "is-core-module": "^2.9.0",
1498 | "path-parse": "^1.0.7",
1499 | "supports-preserve-symlinks-flag": "^1.0.0"
1500 | },
1501 | "bin": {
1502 | "resolve": "bin/resolve"
1503 | },
1504 | "funding": {
1505 | "url": "https://github.com/sponsors/ljharb"
1506 | }
1507 | },
1508 | "node_modules/reusify": {
1509 | "version": "1.0.4",
1510 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1511 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1512 | "dev": true,
1513 | "engines": {
1514 | "iojs": ">=1.0.0",
1515 | "node": ">=0.10.0"
1516 | }
1517 | },
1518 | "node_modules/rollup": {
1519 | "version": "2.79.1",
1520 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
1521 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
1522 | "dev": true,
1523 | "bin": {
1524 | "rollup": "dist/bin/rollup"
1525 | },
1526 | "engines": {
1527 | "node": ">=10.0.0"
1528 | },
1529 | "optionalDependencies": {
1530 | "fsevents": "~2.3.2"
1531 | }
1532 | },
1533 | "node_modules/run-parallel": {
1534 | "version": "1.2.0",
1535 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1536 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1537 | "dev": true,
1538 | "funding": [
1539 | {
1540 | "type": "github",
1541 | "url": "https://github.com/sponsors/feross"
1542 | },
1543 | {
1544 | "type": "patreon",
1545 | "url": "https://www.patreon.com/feross"
1546 | },
1547 | {
1548 | "type": "consulting",
1549 | "url": "https://feross.org/support"
1550 | }
1551 | ],
1552 | "dependencies": {
1553 | "queue-microtask": "^1.2.2"
1554 | }
1555 | },
1556 | "node_modules/source-map": {
1557 | "version": "0.6.1",
1558 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1559 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1560 | "engines": {
1561 | "node": ">=0.10.0"
1562 | }
1563 | },
1564 | "node_modules/source-map-js": {
1565 | "version": "1.0.2",
1566 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1567 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1568 | "engines": {
1569 | "node": ">=0.10.0"
1570 | }
1571 | },
1572 | "node_modules/sourcemap-codec": {
1573 | "version": "1.4.8",
1574 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1575 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
1576 | "deprecated": "Please use @jridgewell/sourcemap-codec instead"
1577 | },
1578 | "node_modules/supports-preserve-symlinks-flag": {
1579 | "version": "1.0.0",
1580 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1581 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1582 | "dev": true,
1583 | "engines": {
1584 | "node": ">= 0.4"
1585 | },
1586 | "funding": {
1587 | "url": "https://github.com/sponsors/ljharb"
1588 | }
1589 | },
1590 | "node_modules/tailwindcss": {
1591 | "version": "3.2.7",
1592 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz",
1593 | "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==",
1594 | "dev": true,
1595 | "dependencies": {
1596 | "arg": "^5.0.2",
1597 | "chokidar": "^3.5.3",
1598 | "color-name": "^1.1.4",
1599 | "detective": "^5.2.1",
1600 | "didyoumean": "^1.2.2",
1601 | "dlv": "^1.1.3",
1602 | "fast-glob": "^3.2.12",
1603 | "glob-parent": "^6.0.2",
1604 | "is-glob": "^4.0.3",
1605 | "lilconfig": "^2.0.6",
1606 | "micromatch": "^4.0.5",
1607 | "normalize-path": "^3.0.0",
1608 | "object-hash": "^3.0.0",
1609 | "picocolors": "^1.0.0",
1610 | "postcss": "^8.0.9",
1611 | "postcss-import": "^14.1.0",
1612 | "postcss-js": "^4.0.0",
1613 | "postcss-load-config": "^3.1.4",
1614 | "postcss-nested": "6.0.0",
1615 | "postcss-selector-parser": "^6.0.11",
1616 | "postcss-value-parser": "^4.2.0",
1617 | "quick-lru": "^5.1.1",
1618 | "resolve": "^1.22.1"
1619 | },
1620 | "bin": {
1621 | "tailwind": "lib/cli.js",
1622 | "tailwindcss": "lib/cli.js"
1623 | },
1624 | "engines": {
1625 | "node": ">=12.13.0"
1626 | },
1627 | "peerDependencies": {
1628 | "postcss": "^8.0.9"
1629 | }
1630 | },
1631 | "node_modules/to-regex-range": {
1632 | "version": "5.0.1",
1633 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1634 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1635 | "dev": true,
1636 | "dependencies": {
1637 | "is-number": "^7.0.0"
1638 | },
1639 | "engines": {
1640 | "node": ">=8.0"
1641 | }
1642 | },
1643 | "node_modules/unhead": {
1644 | "version": "1.1.15",
1645 | "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.1.15.tgz",
1646 | "integrity": "sha512-rpOTD35CDz9KFvBKt42KRKZRsYIDY7Sjh5XhBL2SH6XUHdRdqTDIVjHtrxIwRQkfnMdUAZUSy6KYaiAMQFUOiw==",
1647 | "dependencies": {
1648 | "@unhead/dom": "1.1.15",
1649 | "@unhead/schema": "1.1.15",
1650 | "@unhead/shared": "1.1.15",
1651 | "hookable": "^5.4.2"
1652 | },
1653 | "funding": {
1654 | "url": "https://github.com/sponsors/harlan-zw"
1655 | }
1656 | },
1657 | "node_modules/update-browserslist-db": {
1658 | "version": "1.0.10",
1659 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
1660 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
1661 | "dev": true,
1662 | "funding": [
1663 | {
1664 | "type": "opencollective",
1665 | "url": "https://opencollective.com/browserslist"
1666 | },
1667 | {
1668 | "type": "tidelift",
1669 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1670 | }
1671 | ],
1672 | "dependencies": {
1673 | "escalade": "^3.1.1",
1674 | "picocolors": "^1.0.0"
1675 | },
1676 | "bin": {
1677 | "browserslist-lint": "cli.js"
1678 | },
1679 | "peerDependencies": {
1680 | "browserslist": ">= 4.21.0"
1681 | }
1682 | },
1683 | "node_modules/util-deprecate": {
1684 | "version": "1.0.2",
1685 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1686 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
1687 | "dev": true
1688 | },
1689 | "node_modules/vite": {
1690 | "version": "3.2.5",
1691 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz",
1692 | "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==",
1693 | "dev": true,
1694 | "dependencies": {
1695 | "esbuild": "^0.15.9",
1696 | "postcss": "^8.4.18",
1697 | "resolve": "^1.22.1",
1698 | "rollup": "^2.79.1"
1699 | },
1700 | "bin": {
1701 | "vite": "bin/vite.js"
1702 | },
1703 | "engines": {
1704 | "node": "^14.18.0 || >=16.0.0"
1705 | },
1706 | "optionalDependencies": {
1707 | "fsevents": "~2.3.2"
1708 | },
1709 | "peerDependencies": {
1710 | "@types/node": ">= 14",
1711 | "less": "*",
1712 | "sass": "*",
1713 | "stylus": "*",
1714 | "sugarss": "*",
1715 | "terser": "^5.4.0"
1716 | },
1717 | "peerDependenciesMeta": {
1718 | "@types/node": {
1719 | "optional": true
1720 | },
1721 | "less": {
1722 | "optional": true
1723 | },
1724 | "sass": {
1725 | "optional": true
1726 | },
1727 | "stylus": {
1728 | "optional": true
1729 | },
1730 | "sugarss": {
1731 | "optional": true
1732 | },
1733 | "terser": {
1734 | "optional": true
1735 | }
1736 | }
1737 | },
1738 | "node_modules/vue": {
1739 | "version": "3.2.47",
1740 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz",
1741 | "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
1742 | "dependencies": {
1743 | "@vue/compiler-dom": "3.2.47",
1744 | "@vue/compiler-sfc": "3.2.47",
1745 | "@vue/runtime-dom": "3.2.47",
1746 | "@vue/server-renderer": "3.2.47",
1747 | "@vue/shared": "3.2.47"
1748 | }
1749 | },
1750 | "node_modules/vue-router": {
1751 | "version": "4.1.6",
1752 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
1753 | "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==",
1754 | "dependencies": {
1755 | "@vue/devtools-api": "^6.4.5"
1756 | },
1757 | "funding": {
1758 | "url": "https://github.com/sponsors/posva"
1759 | },
1760 | "peerDependencies": {
1761 | "vue": "^3.2.0"
1762 | }
1763 | },
1764 | "node_modules/xtend": {
1765 | "version": "4.0.2",
1766 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
1767 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
1768 | "dev": true,
1769 | "engines": {
1770 | "node": ">=0.4"
1771 | }
1772 | },
1773 | "node_modules/yaml": {
1774 | "version": "1.10.2",
1775 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
1776 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
1777 | "dev": true,
1778 | "engines": {
1779 | "node": ">= 6"
1780 | }
1781 | },
1782 | "node_modules/zhead": {
1783 | "version": "2.0.4",
1784 | "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.0.4.tgz",
1785 | "integrity": "sha512-V4R94t3ifk9AURym6OskbKcnowzgp5Z88tkoL/NF67vyryNxC62u6mx5F1Ux4oh4+YN7FFmKYEyWy6m5kfPH6g==",
1786 | "funding": {
1787 | "url": "https://github.com/sponsors/harlan-zw"
1788 | }
1789 | }
1790 | }
1791 | }
1792 |
--------------------------------------------------------------------------------