├── CODEOWNERS
├── pnpm-workspace.yaml
├── template
├── vue-ts
│ ├── env.d.ts
│ ├── .vscode
│ │ └── extensions.json
│ ├── public
│ │ └── favicon.ico
│ ├── vercel.json
│ ├── tsconfig.json
│ ├── src
│ │ ├── views
│ │ │ ├── HomeView.vue
│ │ │ └── AboutView.vue
│ │ ├── components
│ │ │ ├── __tests__
│ │ │ │ └── TheWelcome.spec.ts
│ │ │ └── TheWelcome.ejs
│ │ ├── stores
│ │ │ └── counter.ts
│ │ ├── router
│ │ │ └── index.ts
│ │ ├── App.ejs
│ │ ├── assets
│ │ │ └── css
│ │ │ │ ├── base.css
│ │ │ │ └── tailwind.css
│ │ └── main.ejs
│ ├── tsconfig.vitest.json
│ ├── netlify.toml
│ ├── .eslintrc.cjs
│ ├── index.html
│ ├── tsconfig.app.json
│ ├── vitest.config.ts
│ ├── .gitignore.ejs
│ ├── tsconfig.node.json
│ ├── vite.config.ejs
│ ├── package.ejs
│ └── README.md
└── vue-js
│ ├── .vscode
│ └── extensions.json
│ ├── public
│ └── favicon.ico
│ ├── jsconfig.json
│ ├── vercel.json
│ ├── src
│ ├── views
│ │ ├── HomeView.vue
│ │ └── AboutView.vue
│ ├── components
│ │ ├── __tests__
│ │ │ └── TheWelcome.spec.js
│ │ └── TheWelcome.ejs
│ ├── stores
│ │ └── counter.js
│ ├── router
│ │ └── index.js
│ ├── App.ejs
│ ├── main.ejs
│ └── assets
│ │ └── css
│ │ ├── base.css
│ │ └── tailwind.css
│ ├── .eslintrc.cjs
│ ├── netlify.toml
│ ├── index.html
│ ├── vitest.config.js
│ ├── .gitignore.ejs
│ ├── vite.config.ejs
│ ├── README.md
│ └── package.ejs
├── image
└── create-vue-next.png
├── .gitignore
├── renovate.json
├── src
├── core
│ ├── program.ts
│ ├── questions
│ │ └── vue
│ │ │ ├── eslint.ts
│ │ │ ├── initGit.ts
│ │ │ ├── tailwind.ts
│ │ │ ├── typescript.ts
│ │ │ ├── createQuestion.ts
│ │ │ ├── deploy.ts
│ │ │ ├── packageManager.ts
│ │ │ ├── prompts.ts
│ │ │ ├── projectName.ts
│ │ │ ├── createVueQuestions.ts
│ │ │ └── index.ts
│ ├── command
│ │ └── create-vue-next
│ │ │ ├── initialLog.ts
│ │ │ ├── index.ts
│ │ │ ├── copyTemplate.ts
│ │ │ └── install.ts
│ └── utils
│ │ └── vue
│ │ ├── templateFile.ts
│ │ ├── ejsMapConstant.ts
│ │ └── options.ts
├── utils
│ ├── emptyDir.ts
│ ├── emptyDirName.ts
│ ├── package-manager-executable.ts
│ ├── getOnPromptState.ts
│ ├── logger.ts
│ ├── shouldUseBun.ts
│ ├── shouldUseYarn.ts
│ ├── shouldUsePnpm.ts
│ ├── getPackageManager.ts
│ ├── validatePackageName.ts
│ ├── createSpawnCmd.ts
│ ├── getValidProjectName.ts
│ ├── directoryTraverse.ts
│ └── ejsRender.ts
├── filter
│ └── filterFiles.ts
├── index.ts
└── deps
│ └── vue
│ └── dependencies.ts
├── tsconfig.json
├── .github
├── dependabot.yml
└── ISSUE_TEMPLATE
│ ├── feature_request.md
│ └── bug_report.md
├── LICENSE
├── package.json
├── README.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CHANGELOG.md
└── pnpm-lock.yaml
/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @selemondev
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | onlyBuiltDependencies:
2 | - esbuild
3 |
--------------------------------------------------------------------------------
/template/vue-ts/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/image/create-vue-next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/selemondev/create-vue3-app/HEAD/image/create-vue-next.png
--------------------------------------------------------------------------------
/template/vue-js/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
3 | }
4 |
--------------------------------------------------------------------------------
/template/vue-ts/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
3 | }
4 |
--------------------------------------------------------------------------------
/template/vue-js/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/selemondev/create-vue3-app/HEAD/template/vue-js/public/favicon.ico
--------------------------------------------------------------------------------
/template/vue-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/selemondev/create-vue3-app/HEAD/template/vue-ts/public/favicon.ico
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .cache
2 | .DS_Store
3 | .idea
4 | *.log
5 | *.tgz
6 | coverage
7 | dist
8 | out
9 | lib-cov
10 | logs
11 | node_modules
12 | temp
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "config:recommended"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/template/vue-js/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./src/*"]
5 | }
6 | },
7 | "exclude": ["node_modules", "dist"]
8 | }
9 |
--------------------------------------------------------------------------------
/template/vue-js/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "rewrites": [
3 | {
4 | "source": "/(.*)",
5 | "destination": "/index.html"
6 | }
7 | ]
8 | }
--------------------------------------------------------------------------------
/template/vue-ts/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "rewrites": [
3 | {
4 | "source": "/(.*)",
5 | "destination": "/index.html"
6 | }
7 | ]
8 | }
--------------------------------------------------------------------------------
/src/core/program.ts:
--------------------------------------------------------------------------------
1 | import { Command } from 'commander'
2 | import packageJson from "../../package.json"
3 | const program = new Command(packageJson.name)
4 |
5 | export default program
--------------------------------------------------------------------------------
/template/vue-js/src/views/HomeView.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/template/vue-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | {
5 | "path": "./tsconfig.node.json"
6 | },
7 | {
8 | "path": "./tsconfig.app.json"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/template/vue-ts/src/views/HomeView.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/template/vue-js/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 | module.exports = {
3 | root: true,
4 | 'extends': [
5 | 'plugin:vue/vue3-essential',
6 | 'eslint:recommended'
7 | ],
8 | parserOptions: {
9 | ecmaVersion: 'latest'
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/questions/vue/eslint.ts:
--------------------------------------------------------------------------------
1 | const eslintPrompt = [
2 | {
3 | name: 'useEslint',
4 | type: () => 'toggle',
5 | message: 'Add ESLint for code quality?',
6 | initial: false,
7 | active: 'Yes',
8 | inactive: 'No'
9 | }
10 | ];
11 |
12 | export default eslintPrompt;
--------------------------------------------------------------------------------
/src/core/command/create-vue-next/initialLog.ts:
--------------------------------------------------------------------------------
1 | import { logger } from "../../../utils/logger";
2 | async function initialLog() {
3 | console.clear();
4 |
5 | logger.info('Welcome To Create Vue 3 App. The Next Generation Vue Scaffolding Tool ✨');
6 |
7 | console.log();
8 | }
9 |
10 | export default initialLog
11 |
--------------------------------------------------------------------------------
/src/core/questions/vue/initGit.ts:
--------------------------------------------------------------------------------
1 | const initializeGit = [
2 | {
3 | name: 'useGitInit',
4 | type: () => 'toggle',
5 | message: 'Initialize a new git repository?',
6 | initial: false,
7 | active: 'Yes',
8 | inactive: 'No'
9 | },
10 | ]
11 | export default initializeGit
12 |
--------------------------------------------------------------------------------
/src/core/questions/vue/tailwind.ts:
--------------------------------------------------------------------------------
1 | const tailwindPrompt = [
2 | {
3 | name: 'useTailwind',
4 | type: () => 'toggle',
5 | message: 'Add TailwindCSS for styling?',
6 | initial: true,
7 | active: 'Yes',
8 | inactive: 'No'
9 | }
10 | ];
11 |
12 | export default tailwindPrompt;
--------------------------------------------------------------------------------
/template/vue-js/src/views/AboutView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an about page
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/template/vue-ts/src/views/AboutView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
This is an about page
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/template/vue-ts/tsconfig.vitest.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.app.json",
3 | "exclude": [],
4 | "compilerOptions": {
5 | "composite": true,
6 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.vitest.tsbuildinfo",
7 |
8 | "lib": [],
9 | "types": ["node", "jsdom"]
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/core/questions/vue/typescript.ts:
--------------------------------------------------------------------------------
1 | const typeScriptPrompt = [
2 | {
3 | name: 'useTypeScript',
4 | type: () => 'toggle',
5 | message: 'Add TypeScript for type safety?',
6 | initial: true,
7 | active: 'Yes',
8 | inactive: 'No'
9 | }
10 | ];
11 |
12 | export default typeScriptPrompt;
--------------------------------------------------------------------------------
/template/vue-js/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | publish = "dist"
3 | command = "npm run build"
4 |
5 | [build.environment]
6 | NODE_VERSION = "20"
7 |
8 | [[redirects]]
9 | from = "/*"
10 | to = "/index.html"
11 | status = 200
12 |
13 | [[headers]]
14 | for = "/manifest.webmanifest"
15 |
16 | [headers.values]
17 | Content-Type = "application/manifest+json"
--------------------------------------------------------------------------------
/template/vue-ts/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | publish = "dist"
3 | command = "npm run build"
4 |
5 | [build.environment]
6 | NODE_VERSION = "20"
7 |
8 | [[redirects]]
9 | from = "/*"
10 | to = "/index.html"
11 | status = 200
12 |
13 | [[headers]]
14 | for = "/manifest.webmanifest"
15 |
16 | [headers.values]
17 | Content-Type = "application/manifest+json"
--------------------------------------------------------------------------------
/template/vue-ts/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 | require('@rushstack/eslint-patch/modern-module-resolution')
3 |
4 | module.exports = {
5 | root: true,
6 | 'extends': [
7 | 'plugin:vue/vue3-essential',
8 | 'eslint:recommended',
9 | '@vue/eslint-config-typescript'
10 | ],
11 | parserOptions: {
12 | ecmaVersion: 'latest'
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/template/vue-js/src/components/__tests__/TheWelcome.spec.js:
--------------------------------------------------------------------------------
1 | import { describe, it, expect } from 'vitest'
2 |
3 | import { mount } from '@vue/test-utils'
4 | import TheWelcome from '../TheWelcome.vue'
5 |
6 | describe('TheWelcome', () => {
7 | it('renders properly', () => {
8 | const wrapper = mount(TheWelcome)
9 | expect(wrapper.text()).toContain('Welcome')
10 | })
11 | })
12 |
--------------------------------------------------------------------------------
/template/vue-js/src/stores/counter.js:
--------------------------------------------------------------------------------
1 | import { ref, computed } from 'vue'
2 | import { defineStore } from 'pinia'
3 |
4 | export const useCounterStore = defineStore('counter', () => {
5 | const count = ref(0)
6 | const doubleCount = computed(() => count.value * 2)
7 | function increment() {
8 | count.value++
9 | }
10 |
11 | return { count, doubleCount, increment }
12 | })
13 |
--------------------------------------------------------------------------------
/template/vue-ts/src/components/__tests__/TheWelcome.spec.ts:
--------------------------------------------------------------------------------
1 | import { describe, it, expect } from 'vitest'
2 |
3 | import { mount } from '@vue/test-utils'
4 | import TheWelcome from '../TheWelcome.vue'
5 |
6 | describe('TheWelcome', () => {
7 | it('renders properly', () => {
8 | const wrapper = mount(TheWelcome)
9 | expect(wrapper.text()).toContain('Welcome')
10 | })
11 | })
12 |
--------------------------------------------------------------------------------
/template/vue-ts/src/stores/counter.ts:
--------------------------------------------------------------------------------
1 | import { ref, computed } from 'vue'
2 | import { defineStore } from 'pinia'
3 |
4 | export const useCounterStore = defineStore('counter', () => {
5 | const count = ref(0)
6 | const doubleCount = computed(() => count.value * 2)
7 | function increment() {
8 | count.value++
9 | }
10 |
11 | return { count, doubleCount, increment }
12 | })
13 |
--------------------------------------------------------------------------------
/template/vue-ts/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Create Vue 3 App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "lib": ["ESNext"],
5 | "module": "ESNext",
6 | "moduleResolution": "Bundler",
7 | "resolveJsonModule": true,
8 | "strict": true,
9 | "strictNullChecks": true,
10 | "esModuleInterop": true,
11 | "skipDefaultLibCheck": true,
12 | "skipLibCheck": true,
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/utils/emptyDir.ts:
--------------------------------------------------------------------------------
1 | import * as fs from 'fs'
2 |
3 | import { postOrderDirectoryTraverse } from './directoryTraverse'
4 |
5 | function emptyDir(dir: string) {
6 | if (!fs.existsSync(dir)) {
7 | return
8 | }
9 |
10 | postOrderDirectoryTraverse(
11 | dir,
12 | (dir: string) => fs.rmdirSync(dir),
13 | (file: string) => fs.unlinkSync(file)
14 | )
15 | }
16 | export default emptyDir
17 |
--------------------------------------------------------------------------------
/src/utils/emptyDirName.ts:
--------------------------------------------------------------------------------
1 | import fs from 'fs-extra'
2 | import path from 'path'
3 |
4 | export default function (name: string): boolean {
5 | const targetDir = path.resolve(process.cwd(), name);
6 |
7 | if (!fs.existsSync(targetDir)) {
8 | return true
9 | }
10 |
11 | const files = fs.readdirSync(targetDir)
12 | return files.length === 0 || (files.length === 1 && files[0] === '.git')
13 | }
14 |
--------------------------------------------------------------------------------
/template/vue-js/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Create Vue 3 App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/template/vue-ts/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.dom.json",
3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
4 | "exclude": ["src/**/__tests__/*"],
5 | "compilerOptions": {
6 | "composite": true,
7 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
8 |
9 | "baseUrl": ".",
10 | "paths": {
11 | "@/*": ["./src/*"]
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/core/questions/vue/createQuestion.ts:
--------------------------------------------------------------------------------
1 | import options from '../../utils/vue/options'
2 | import prompts from 'prompts'
3 |
4 | export default async function createQuestion(question: any) {
5 | const result = await prompts(question, {
6 | onCancel: () => {
7 | throw new Error('❌ ' + ' Operation cancelled')
8 | }
9 | })
10 | Object.assign(options, result)
11 |
12 | return Promise.resolve(options)
13 | };
--------------------------------------------------------------------------------
/src/core/questions/vue/deploy.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'deploy',
3 | type: 'select',
4 | message: 'Where should we deploy your project?',
5 | choices: [
6 | { title: 'I prefer manual deployment', value: 'none' },
7 | {
8 | title: 'Vercel',
9 | value: 'vercel'
10 | },
11 | {
12 | title: 'Netlify',
13 | value: 'netlify'
14 | }
15 | ]
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/template/vue-js/vitest.config.js:
--------------------------------------------------------------------------------
1 | import { fileURLToPath } from 'node:url'
2 | import { mergeConfig, defineConfig, configDefaults } from 'vitest/config'
3 | import viteConfig from './vite.config'
4 |
5 | export default mergeConfig(
6 | viteConfig,
7 | defineConfig({
8 | test: {
9 | environment: 'jsdom',
10 | exclude: [...configDefaults.exclude, 'e2e/*'],
11 | root: fileURLToPath(new URL('./', import.meta.url))
12 | }
13 | })
14 | )
15 |
--------------------------------------------------------------------------------
/template/vue-ts/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { fileURLToPath } from 'node:url'
2 | import { mergeConfig, defineConfig, configDefaults } from 'vitest/config'
3 | import viteConfig from './vite.config'
4 |
5 | export default mergeConfig(
6 | viteConfig,
7 | defineConfig({
8 | test: {
9 | environment: 'jsdom',
10 | exclude: [...configDefaults.exclude, 'e2e/*'],
11 | root: fileURLToPath(new URL('./', import.meta.url))
12 | }
13 | })
14 | )
15 |
--------------------------------------------------------------------------------
/template/vue-ts/.gitignore.ejs:
--------------------------------------------------------------------------------
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 | *.tsbuildinfo
--------------------------------------------------------------------------------
/template/vue-js/.gitignore.ejs:
--------------------------------------------------------------------------------
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 | *.tsbuildinfo
31 |
--------------------------------------------------------------------------------
/src/utils/package-manager-executable.ts:
--------------------------------------------------------------------------------
1 | import { Options } from "../core/utils/vue/options";
2 |
3 | export const packageManagerExecutable = (
4 | packageManager: Options["package"],
5 | ) => {
6 | switch (packageManager) {
7 | case "npm":
8 | return "npx";
9 |
10 | case "yarn":
11 | return "yarn dlx";
12 |
13 | case "pnpm":
14 | return "pnpx";
15 |
16 | case "bun":
17 | return "bunx";
18 |
19 | default:
20 | return "npx";
21 | }
22 | };
23 |
--------------------------------------------------------------------------------
/src/utils/getOnPromptState.ts:
--------------------------------------------------------------------------------
1 | import type { InitialReturnValue } from "prompts"
2 |
3 | export const onPromptState = (state: {
4 | value: InitialReturnValue
5 | aborted: boolean
6 | exited: boolean
7 | }) => {
8 | if (state.aborted) {
9 | // If we don't re-enable the terminal cursor before exiting
10 | // the program, the cursor will remain hidden
11 | process.stdout.write('\x1B[?25h')
12 | process.stdout.write('\n')
13 | process.exit(1)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/template/vue-ts/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@tsconfig/node20/tsconfig.json",
3 | "include": [
4 | "vite.config.*",
5 | "vitest.config.*",
6 | "cypress.config.*",
7 | "nightwatch.conf.*",
8 | "playwright.config.*"
9 | ],
10 | "compilerOptions": {
11 | "composite": true,
12 | "noEmit": true,
13 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
14 |
15 | "module": "ESNext",
16 | "moduleResolution": "Bundler",
17 | "types": ["node"]
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/core/command/create-vue-next/index.ts:
--------------------------------------------------------------------------------
1 | import createVueQuestions from '../../questions/vue/createVueQuestions'
2 | import initialLog from '../create-vue-next/initialLog'
3 | import installDeps from '../create-vue-next/install'
4 | import copyTemplate from '../create-vue-next/copyTemplate'
5 | async function createProject() {
6 | await initialLog()
7 | await createVueQuestions()
8 | await copyTemplate()
9 | await installDeps();
10 | }
11 | export default async function createVueNext() {
12 | await createProject()
13 | }
14 |
--------------------------------------------------------------------------------
/src/utils/logger.ts:
--------------------------------------------------------------------------------
1 | import pc from "picocolors";
2 |
3 | export const logger = {
4 | info: (...args: string[]) => {
5 | console.log(pc.cyan(args.map(String).join(" ")));
6 | },
7 |
8 | error: (...args: string[]) => {
9 | console.log(pc.red(args.map(String).join(" ")));
10 | },
11 |
12 | warning: (...args: string[]) => {
13 | console.log(pc.yellow(args.map(String).join(" ")));
14 | },
15 |
16 | success: (...args: string[]) => {
17 | console.log(pc.green(args.map(String).join(" ")));
18 | },
19 | };
20 |
--------------------------------------------------------------------------------
/src/core/utils/vue/templateFile.ts:
--------------------------------------------------------------------------------
1 | import options from './options'
2 |
3 | const templateFilesMap = new Map()
4 | templateFilesMap.set('vue', vueFetchTemplateFiles)
5 | export function vueFetchTemplateFiles(): string[] | any[] {
6 | const files = [
7 | 'package.json',
8 | options.useTypeScript ? 'src/main.ts' : 'src/main.js',
9 | 'src/App.vue',
10 | options.useTypeScript ? 'vite.config.ts' : 'vite.config.js',
11 | 'src/components/TheWelcome.vue'
12 | ]
13 | return files.filter(Boolean)
14 | }
15 | export { templateFilesMap }
16 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "npm" # See documentation for possible values
9 | directory: "/" # Location of package manifests
10 | schedule:
11 | interval: "weekly"
12 |
--------------------------------------------------------------------------------
/src/utils/shouldUseBun.ts:
--------------------------------------------------------------------------------
1 | import { execSync } from "child_process";
2 | import { logger } from "./logger";
3 | export const shouldUseBun = (): boolean => {
4 | try {
5 | const userAgent = process.env.config_user_agent;
6 |
7 | if (userAgent && userAgent.startsWith('bun')) {
8 | return true;
9 | };
10 |
11 | execSync('bun --version', { stdio: 'ignore' });
12 |
13 | return true;
14 | } catch(err){
15 | if(err instanceof Error) {
16 | logger.error(err.message);
17 | };
18 |
19 | return false;
20 | }
21 | }
--------------------------------------------------------------------------------
/src/utils/shouldUseYarn.ts:
--------------------------------------------------------------------------------
1 | import { execSync } from 'child_process'
2 | import { logger } from './logger'
3 |
4 | export const shouldUseYarn = (): boolean => {
5 | try {
6 | const userAgent = process.env.npm_config_user_agent
7 | if (userAgent && userAgent.startsWith('yarn')) {
8 | return true
9 | }
10 | execSync('yarnpkg --version', { stdio: 'ignore' })
11 | return true
12 | } catch (err) {
13 | if (err instanceof Error) {
14 | logger.error(err.message);
15 | };
16 |
17 | return false;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/utils/shouldUsePnpm.ts:
--------------------------------------------------------------------------------
1 | import { execSync } from "child_process";
2 | import { logger } from "./logger";
3 | export const shouldUsePnpm = (): boolean => {
4 | try {
5 | const userAgent = process.env.config_user_agent;
6 |
7 | if (userAgent && userAgent.startsWith('pnpm')) {
8 | return true;
9 | };
10 |
11 | execSync('pnpm --version', { stdio: 'ignore' });
12 |
13 | return true;
14 | } catch(err){
15 | if(err instanceof Error) {
16 | logger.error(err.message);
17 | };
18 |
19 | return false;
20 | }
21 | }
--------------------------------------------------------------------------------
/template/vue-js/vite.config.ejs:
--------------------------------------------------------------------------------
1 | import { fileURLToPath, URL } from 'node:url'
2 |
3 | import { defineConfig } from 'vite'
4 | import vue from '@vitejs/plugin-vue'
5 | <% if (useDevTool) {
6 | -%>
7 | import VueDevTools from 'vite-plugin-vue-devtools'
8 | <% } -%>
9 |
10 | // https://vitejs.dev/config/
11 | export default defineConfig({
12 | plugins: [
13 | vue(),
14 | <% if (useDevTool) {
15 | -%>
16 | VueDevTools()
17 | <% } -%>
18 | ],
19 | resolve: {
20 | alias: {
21 | '@': fileURLToPath(new URL('./src', import.meta.url))
22 | }
23 | }
24 | })
25 |
--------------------------------------------------------------------------------
/src/utils/getPackageManager.ts:
--------------------------------------------------------------------------------
1 | export type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun'
2 | export const getPackageManager = (): PackageManager => {
3 | const userAgent = process.env.npm_config_user_agent || '';
4 |
5 | if(userAgent) {
6 | if(userAgent.startsWith('npm')) {
7 | return 'npm'
8 | };
9 |
10 | if(userAgent.startsWith('yarn')) {
11 | return "yarn"
12 | }
13 |
14 | if(userAgent.startsWith('pnpm')) {
15 | return "pnpm"
16 | }
17 |
18 | if(userAgent.startsWith('bun')) {
19 | return "bun"
20 | }
21 | }
22 | return 'npm'
23 | }
--------------------------------------------------------------------------------
/src/utils/validatePackageName.ts:
--------------------------------------------------------------------------------
1 | import validateProjectName from 'validate-npm-package-name'
2 |
3 | type ValidateNpmNameResult =
4 | | {
5 | valid: true
6 | }
7 | | {
8 | valid: false
9 | problems: string[]
10 | }
11 |
12 | export function validatePackageName(name: string): ValidateNpmNameResult {
13 | const nameValidation = validateProjectName(name)
14 | if (nameValidation.validForNewPackages) {
15 | return { valid: true }
16 | }
17 |
18 | return {
19 | valid: false,
20 | problems: [
21 | ...(nameValidation.errors || []),
22 | ...(nameValidation.warnings || []),
23 | ],
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/template/vue-js/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 |
--------------------------------------------------------------------------------
/template/vue-ts/src/router/index.ts:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/src/utils/createSpawnCmd.ts:
--------------------------------------------------------------------------------
1 | import type { StdioOptions } from "child_process";
2 | import { spawn } from "child_process";
3 |
4 | export const createSpawnCmd = (dest: string | undefined, stdio: StdioOptions = 'inherit') => {
5 | return function (cmd: string, args: string[]): Promise {
6 | const ls = spawn(cmd, args, {
7 | cwd: dest,
8 | stdio: stdio,
9 | shell: true
10 | });
11 |
12 | return new Promise((resolve, reject) => {
13 | ls.on('close', (code: number) => {
14 | code === 0 ? resolve(true) : reject(false);
15 | })
16 | }).catch((err) => {
17 | return err;
18 | })
19 | }
20 | }
--------------------------------------------------------------------------------
/src/utils/getValidProjectName.ts:
--------------------------------------------------------------------------------
1 | import validate from "validate-npm-package-name";
2 |
3 | type validateProjectName =
4 | {
5 | valid: true
6 | }
7 | |
8 |
9 | {
10 | valid: false,
11 | problems: string[]
12 | }
13 |
14 | export const isValidProjectName = (projectName: string): validateProjectName => {
15 | const isProjectNameValid = validate(projectName);
16 |
17 | if (isProjectNameValid.validForNewPackages) {
18 | return { valid: true }
19 | }
20 |
21 | return {
22 | valid: false,
23 | problems: [
24 | ...(isProjectNameValid.errors || []),
25 | ...(isProjectNameValid.warnings || [])
26 | ]
27 | }
28 | }
--------------------------------------------------------------------------------
/template/vue-js/README.md:
--------------------------------------------------------------------------------
1 | # vue-js
2 |
3 | This template should help get you started developing with Vue 3 in Vite.
4 |
5 | ## Recommended IDE Setup
6 |
7 | [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).
8 |
9 | ## Customize configuration
10 |
11 | See [Vite Configuration Reference](https://vitejs.dev/config/).
12 |
13 | ## Project Setup
14 |
15 | ```sh
16 | npm install
17 | ```
18 |
19 | ### Compile and Hot-Reload for Development
20 |
21 | ```sh
22 | npm run dev
23 | ```
24 |
25 | ### Compile and Minify for Production
26 |
27 | ```sh
28 | npm run build
29 | ```
30 |
--------------------------------------------------------------------------------
/template/vue-ts/vite.config.ejs:
--------------------------------------------------------------------------------
1 | import { fileURLToPath, URL } from 'node:url'
2 |
3 | import { defineConfig } from 'vite'
4 | <% if (useTailwind) {
5 | -%>
6 | import tailwindcss from '@tailwindcss/vite'
7 | <% } -%>
8 | import vue from '@vitejs/plugin-vue'
9 | <% if (useDevTool) {
10 | -%>
11 | import VueDevTools from 'vite-plugin-vue-devtools'
12 | <% } -%>
13 |
14 | // https://vitejs.dev/config/
15 | export default defineConfig({
16 | plugins: [
17 | vue(),
18 | <% if (useDevTool) {
19 | -%>
20 | VueDevTools(),
21 | <% } -%>
22 | <% if (useTailwind) {
23 | -%>
24 | tailwindcss()
25 | <% } -%>
26 | ],
27 | resolve: {
28 | alias: {
29 | '@': fileURLToPath(new URL('./src', import.meta.url))
30 | }
31 | }
32 | })
33 |
--------------------------------------------------------------------------------
/template/vue-ts/src/App.ejs:
--------------------------------------------------------------------------------
1 | <% if (useTypeScript) { -%>
2 |
12 | <% } -%>
13 |
14 | <% if (useJavaScript) { -%>
15 |
21 | <% } -%>
22 |
23 |
24 |
25 | <% if (!useRouter) { -%>
26 |
27 | <% } -%>
28 | <% if (useRouter) { -%>
29 |
30 | <% } -%>
31 | <% if (useTanStackVueQuery) { -%>
32 |
33 | <% } -%>
34 |
--------------------------------------------------------------------------------
/template/vue-js/src/App.ejs:
--------------------------------------------------------------------------------
1 | <% if (useTypeScript) { -%>
2 |
12 | <% } -%>
13 |
14 | <% if (useJavaScript) { -%>
15 |
21 | <% } -%>
22 |
23 |
24 |
25 | <% if (!useRouter) { -%>
26 |
27 | <% } -%>
28 | <% if (useRouter) { -%>
29 |
30 | <% } -%>
31 | <% if (useTanStackVueQuery) { -%>
32 |
33 | <% } -%>
34 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/src/utils/directoryTraverse.ts:
--------------------------------------------------------------------------------
1 | import * as fs from 'fs'
2 | import * as path from 'path'
3 |
4 | export function preOrderDirectoryTraverse(dir: string, dirCallback: Function, fileCallback: Function) {
5 | for (const filename of fs.readdirSync(dir)) {
6 | const fullpath = path.resolve(dir, filename)
7 | if (fs.lstatSync(fullpath).isDirectory()) {
8 | dirCallback(fullpath)
9 | // in case the dirCallback removes the directory entirely
10 | if (fs.existsSync(fullpath)) {
11 | preOrderDirectoryTraverse(fullpath, dirCallback, fileCallback)
12 | }
13 | continue
14 | }
15 | fileCallback(fullpath)
16 | }
17 | }
18 |
19 | export function postOrderDirectoryTraverse(dir: string, dirCallback: Function, fileCallback: Function) {
20 | for (const filename of fs.readdirSync(dir)) {
21 | const fullpath = path.resolve(dir, filename)
22 | if (fs.lstatSync(fullpath).isDirectory()) {
23 | postOrderDirectoryTraverse(fullpath, dirCallback, fileCallback)
24 | dirCallback(fullpath)
25 | continue
26 | }
27 | fileCallback(fullpath)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/template/vue-js/src/main.ejs:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | <% if ( useTailwind ) { -%>
3 | import './assets/css/tailwind.css'
4 | <% } -%>
5 | <% if (!useTailwind ) { -%>
6 | import './assets/css/base.css'
7 | <% } -%>
8 | <% if (useTanStackVueQuery) { -%>
9 | import { VueQueryPlugin } from '@tanstack/vue-query'
10 | <% } -%>
11 | import App from './App.vue'
12 | <% if ( usePinia ) { -%>
13 | import { createPinia } from 'pinia';
14 | <% } -%>
15 | <% if (useRouter) { -%>
16 | import router from "./router";
17 | <% } -%>
18 | const app = createApp(App)
19 | <% if ( usePinia ) { -%>
20 | app.use(createPinia())
21 | <% } -%>
22 |
23 | <% if (useRouter) { -%>
24 | app.use(router)
25 | <% } -%>
26 | <% if (useTanStackVueQuery) { -%>
27 | app.use(VueQueryPlugin)
28 | <% } -%>
29 | app.mount('#app')
--------------------------------------------------------------------------------
/src/core/questions/vue/packageManager.ts:
--------------------------------------------------------------------------------
1 | import { shouldUseYarn } from '../../../utils/shouldUseYarn'
2 | import { shouldUsePnpm } from '../../../utils/shouldUsePnpm'
3 | import { shouldUseBun } from '../../../utils/shouldUseBun'
4 | const isYarnInstalled = shouldUseYarn()
5 | const isPnpmInstalled = shouldUsePnpm()
6 | const isBunInstalled = shouldUseBun();
7 | export default {
8 | name: 'package',
9 | type: 'select',
10 | message: 'Which package manager do you prefer to use?',
11 | choices: [
12 | { title: 'I prefer manual installation', value: 'none' },
13 | {
14 | title: isBunInstalled ? 'Bun' : 'Bun is not installed',
15 | value: 'bun',
16 | disabled: isBunInstalled ? false : true
17 | },
18 | {
19 | title: isPnpmInstalled ? 'Pnpm' : 'Pnpm is not installed',
20 | value: 'pnpm',
21 | disabled: isPnpmInstalled ? false : true
22 | },
23 | {
24 | title: isYarnInstalled ? 'Yarn' : 'Yarn is not installed',
25 | value: 'yarn',
26 | disabled: isYarnInstalled ? false : true
27 | },
28 | { title: 'Npm', value: 'npm' }
29 | ]
30 | }
31 |
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Create-Vue3-App CLI and Selemondev
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.
--------------------------------------------------------------------------------
/src/core/utils/vue/ejsMapConstant.ts:
--------------------------------------------------------------------------------
1 | import * as dependencies from '../../../deps/vue/dependencies'
2 | interface Dependency {
3 | name: string | string[],
4 | version: string | string[]
5 | };
6 |
7 | interface Dependencies {
8 | [key: string]: Dependency
9 | }
10 | const packageJsonMap = new Map();
11 | const deps: Dependencies = dependencies;
12 | Object.keys(deps).forEach((item: string) => {
13 | const name = deps[item].name;
14 | if (Array.isArray(name)) {
15 | let res = ''
16 | name.forEach((cur: string, index: number) => {
17 | res += `"${cur}":"${deps[item].version[index]}",`
18 | })
19 | packageJsonMap.set(item, res)
20 | } else {
21 | packageJsonMap.set(
22 | item,
23 | `"${deps[item].name}":"${deps[item].version}",`
24 | )
25 | }
26 | })
27 |
28 | const lintMap = new Map([
29 | [
30 | 'EslintScript',
31 | '"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",'
32 | ],
33 |
34 | [
35 | 'VitestScript',
36 | '"test:unit": "vitest",'
37 | ],
38 |
39 | [
40 | 'TypeScriptScript',
41 | '"type-check": "vue-tsc --noEmit"'
42 | ]
43 | ])
44 |
45 |
46 | export {
47 | lintMap,
48 | packageJsonMap
49 | }
50 |
--------------------------------------------------------------------------------
/src/core/utils/vue/options.ts:
--------------------------------------------------------------------------------
1 | export interface Options {
2 | templatePath?: string
3 | Router?: string
4 | Tailwind?: string
5 | TypeScript?: string
6 | JavaScript?: string
7 | VueUse?: string
8 | Pinia?: string
9 | DevTool?: string
10 | Eslint?: string
11 | Vitest?: string
12 | VercelCLI?: string
13 | NetlifyCLI?: string
14 | TanStackVueQuery?: string
15 | name?: string
16 | version?: string
17 | src?: string
18 | dest?: string
19 | allPackages?: any[]
20 | package?: 'bun' | 'pnpm' | 'npm' | 'yarn' | 'none'
21 | deploy?: 'netlify' | 'vercel' | 'none',
22 | useEslint?: boolean
23 | useEslintTs?: boolean
24 | useRouter?: boolean
25 | useVercelCLI?: boolean
26 | useNetlifyCLI?: boolean
27 | useVueQuery?: boolean
28 | useTailwind?: boolean
29 | useTypeScript?: boolean
30 | useVueUse?: boolean
31 | useJavaScript?: boolean
32 | useTanStackVueQuery?: string
33 | useVitest?: string
34 | useDevTool?: boolean
35 | useGitInit?: boolean
36 | usePinia?: boolean
37 | EslintScript?: string
38 | constantDevDeps?: string
39 | constantProDeps?: string
40 | }
41 |
42 | const options: Options = {}
43 | export default options
--------------------------------------------------------------------------------
/src/core/questions/vue/prompts.ts:
--------------------------------------------------------------------------------
1 | const prompt = [
2 | {
3 | name: "useRouter",
4 | type: () => "toggle",
5 | message: "Add Vue Router for Single Page Application development?",
6 | initial: true,
7 | active: "Yes",
8 | inactive: "No",
9 | },
10 | {
11 | name: "usePinia",
12 | type: () => "toggle",
13 | message: "Add Pinia for state management?",
14 | initial: true,
15 | active: "Yes",
16 | inactive: "No",
17 | },
18 |
19 | {
20 | name: "useVueUse",
21 | type: () => "toggle",
22 | message:
23 | "Add VueUse for a collection of essential Vue composition utilities?",
24 | initial: false,
25 | active: "Yes",
26 | inactive: "No",
27 | },
28 |
29 | {
30 | name: "useTanStackVueQuery",
31 | type: () => "toggle",
32 | message: "Add TanStack Vue Query for server state management?",
33 | initial: true,
34 | active: "Yes",
35 | inactive: "No",
36 | },
37 |
38 | {
39 | name: "useDevTool",
40 | type: () => "toggle",
41 | message: "Add Vue DevTools to enhance the development experience?",
42 | initial: true,
43 | active: "Yes",
44 | inactive: "No",
45 | },
46 |
47 | {
48 | name: "useVitest",
49 | type: () => "toggle",
50 | message: "Add Vitest for unit testing?",
51 | initial: true,
52 | active: "Yes",
53 | inactive: "No",
54 | },
55 | ];
56 | export default prompt;
57 |
--------------------------------------------------------------------------------
/src/core/questions/vue/projectName.ts:
--------------------------------------------------------------------------------
1 | import options from '../../../core/utils/vue/options'
2 | import emptyDirName from '../../../utils/emptyDirName'
3 | import { validatePackageName } from "../../../utils/validatePackageName"
4 | const defaultProjectName = 'create-vue3-app'
5 |
6 | const packageName = [
7 | {
8 | name: 'name',
9 | type: 'text',
10 | message: 'What should we call your project?',
11 | initial: defaultProjectName,
12 | validate: (name: string) => {
13 | const validation = validatePackageName(name)
14 | if (validation.valid) {
15 | options.name = name;
16 | return true
17 | }
18 | return 'Invalid project name: ' + validation.problems[0]
19 | },
20 | active: 'Yes',
21 | inactive: 'No'
22 | },
23 | {
24 | name: 'overwrite',
25 | type: () => (options.name && emptyDirName(options.name) ? null : 'confirm'),
26 | message: () => {
27 | return `Directory "${options.name}" is not empty. Do you want to overwrite it?`
28 | }
29 | },
30 | {
31 | name: 'overwrite',
32 | type: (prev: string, values: { overwrite: boolean }) => {
33 | if (values.overwrite === false) {
34 | throw new Error('Operation cancelled')
35 | }
36 | return null
37 | }
38 | }
39 | ]
40 | export default packageName
41 |
--------------------------------------------------------------------------------
/template/vue-js/src/assets/css/base.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | width: 100vw;
9 | position: relative;
10 | background: black;
11 | height: 100vh;
12 | font-family: sans-serif;
13 | }
14 |
15 | .gradient-border {
16 | position: relative;
17 | border-radius: 0.5rem;
18 | -webkit-backdrop-filter: blur(10px);
19 | backdrop-filter: blur(10px);
20 | width: full;
21 | }
22 |
23 | .gradient-border {
24 | background-color: rgba(20, 20, 20, 0.3);
25 | }
26 | .gradient-border::before {
27 | background: linear-gradient(
28 | 90deg,
29 | #303030 0%,
30 | #303030 25%,
31 | #00dc82 50%,
32 | #36e4da 75%,
33 | #0047e1 100%
34 | );
35 | }
36 | .gradient-border::before {
37 | content: "";
38 | position: absolute;
39 | top: 0;
40 | left: 0;
41 | right: 0;
42 | bottom: 0;
43 | border-radius: 0.5rem;
44 | padding: 2px;
45 | width: 100%;
46 | background-size: 400% auto;
47 | background-position: 0 0;
48 | opacity: 0.5;
49 | transition:
50 | background-position 0.3s ease-in-out,
51 | opacity 0.2s ease-in-out;
52 | -webkit-mask:
53 | linear-gradient(#fff 0 0) content-box,
54 | linear-gradient(#fff 0 0);
55 | mask:
56 | linear-gradient(#fff 0 0) content-box,
57 | linear-gradient(#fff 0 0);
58 | -webkit-mask-composite: xor;
59 | mask-composite: exclude;
60 | z-index: -1;
61 | }
62 | .gradient-border:hover::before {
63 | background-position: -50% 0;
64 | opacity: 1;
65 | }
66 |
--------------------------------------------------------------------------------
/template/vue-ts/src/assets/css/base.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | width: 100vw;
9 | position: relative;
10 | background: black;
11 | height: 100vh;
12 | font-family: sans-serif;
13 | }
14 |
15 | .gradient-border {
16 | position: relative;
17 | border-radius: 0.5rem;
18 | -webkit-backdrop-filter: blur(10px);
19 | backdrop-filter: blur(10px);
20 | width: full;
21 | }
22 |
23 | .gradient-border {
24 | background-color: rgba(20, 20, 20, 0.3);
25 | }
26 | .gradient-border::before {
27 | background: linear-gradient(
28 | 90deg,
29 | #303030 0%,
30 | #303030 25%,
31 | #00dc82 50%,
32 | #36e4da 75%,
33 | #0047e1 100%
34 | );
35 | }
36 | .gradient-border::before {
37 | content: "";
38 | position: absolute;
39 | top: 0;
40 | left: 0;
41 | right: 0;
42 | bottom: 0;
43 | border-radius: 0.5rem;
44 | padding: 2px;
45 | width: 100%;
46 | background-size: 400% auto;
47 | background-position: 0 0;
48 | opacity: 0.5;
49 | transition:
50 | background-position 0.3s ease-in-out,
51 | opacity 0.2s ease-in-out;
52 | -webkit-mask:
53 | linear-gradient(#fff 0 0) content-box,
54 | linear-gradient(#fff 0 0);
55 | mask:
56 | linear-gradient(#fff 0 0) content-box,
57 | linear-gradient(#fff 0 0);
58 | -webkit-mask-composite: xor;
59 | mask-composite: exclude;
60 | z-index: -1;
61 | }
62 | .gradient-border:hover::before {
63 | background-position: -50% 0;
64 | opacity: 1;
65 | }
66 |
--------------------------------------------------------------------------------
/template/vue-ts/src/main.ejs:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | <% if ( useTailwind ) { -%>
3 | import './assets/css/tailwind.css'
4 | <% } -%>
5 | <% if (!useTailwind ) { -%>
6 | import './assets/css/base.css'
7 | <% } -%>
8 | <% if (useTanStackVueQuery) { -%>
9 | import { VueQueryPlugin } from '@tanstack/vue-query'
10 | <% } -%>
11 | import App from './App.vue'
12 | <% if ( usePinia ) { -%>
13 | import { createPinia } from 'pinia';
14 | <% } -%>
15 | <% if (useRouter) { -%>
16 | import router from "./router";
17 | <% } -%>
18 | const app = createApp(App)
19 | <% if ( usePinia ) { -%>
20 | app.use(createPinia())
21 | <% } -%>
22 |
23 | <% if (useRouter) { -%>
24 | app.use(router)
25 | <% } -%>
26 | <% if (useTanStackVueQuery) { -%>
27 | app.use(VueQueryPlugin)
28 | <% } -%>
29 | app.mount('#app')
--------------------------------------------------------------------------------
/template/vue-js/package.ejs:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-template",
3 | "private": true,
4 | "version": "1.0.0",
5 | <% if (package === 'pnpm') { -%>
6 | "packageManager": "pnpm@8.15.4",
7 | <% } -%>
8 | "type": "module",
9 | "scripts": {
10 | "dev": "vite",
11 | "build": "vite build",
12 | "preview": "vite preview",
13 | <% if (useEslint) { -%>
14 | <%- EslintScript %>
15 | <% } -%>
16 | <% if (useVitest) { -%>
17 | <%- VitestScript %>
18 | <% } -%>
19 | <% if (useTypeScript) { -%>
20 | <%- TypeScriptScript %>
21 | <% } -%>
22 | },
23 | "dependencies": {
24 | <%- constantProDeps %>
25 | <% if (useRouter) { -%>
26 | <%- Router %>
27 | <% } -%>
28 | <% if (useVueUse) { -%>
29 | <%- VueUse %>
30 | <% } -%>
31 | <% if (usePinia) { -%>
32 | <%- Pinia %>
33 | <% } -%>
34 | <% if (useTanStackVueQuery) { -%>
35 | <%- TanStackVueQuery %>
36 | <% } -%>
37 | },
38 | "devDependencies": {
39 | <% if (useTypeScript) { -%>
40 | <%- TypeScript %>
41 | <% } -%>
42 | <% if (useEslint) { -%>
43 | <%- Eslint %>
44 | <% } -%>
45 | <% if (useTailwind) { -%>
46 | <%- Tailwind %>
47 | <% } -%>
48 | <% if (useJavaScript) { -%>
49 | <%- JavaScript %>
50 | <% } -%>
51 | <% if (useVitest) { -%>
52 | <%- Vitest %>
53 | <% } -%>
54 | <% if (useDevTool) { -%>
55 | <%- DevTool %>
56 | <% } -%>
57 | <% if (useVercelCLI) { -%>
58 | <%- VercelCLI %>
59 | <% } -%>
60 | <% if (useNetlifyCLI) { -%>
61 | <%- NetlifyCLI %>
62 | <% } -%>
63 | <%- constantDevDeps %>
64 | "vite": "^5.0.11",
65 | "@vitejs/plugin-vue": "^5.0.3"
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/template/vue-ts/package.ejs:
--------------------------------------------------------------------------------
1 | {
2 | "name": <%- JSON.stringify(name) %>,
3 | "private": true,
4 | "version": "1.0.0",
5 | <% if (package === 'pnpm') { -%>
6 | "packageManager": "pnpm@8.15.4",
7 | <% } -%>
8 | "type": "module",
9 | "scripts": {
10 | "dev": "vite",
11 | "build": "vite build",
12 | "preview": "vite preview",
13 | <% if (useEslint) { -%>
14 | <%- EslintScript %>
15 | <% } -%>
16 | <% if (useVitest) { -%>
17 | <%- VitestScript %>
18 | <% } -%>
19 | <% if (useTypeScript) { -%>
20 | <%- TypeScriptScript %>
21 | <% } -%>
22 | },
23 | "dependencies": {
24 | <%- constantProDeps %>
25 | <% if (useRouter) { -%>
26 | <%- Router %>
27 | <% } -%>
28 | <% if (useVueUse) { -%>
29 | <%- VueUse %>
30 | <% } -%>
31 | <% if (usePinia) { -%>
32 | <%- Pinia %>
33 | <% } -%>
34 | <% if (useTanStackVueQuery) { -%>
35 | <%- TanStackVueQuery %>
36 | <% } -%>
37 | },
38 | "devDependencies": {
39 | <%- constantDevDeps %>
40 | <% if (useTypeScript) { -%>
41 | <%- TypeScript %>
42 | <% } -%>
43 | <% if (useEslint) { -%>
44 | <%- Eslint %>
45 | <% } -%>
46 | <% if (useTailwind) { -%>
47 | <%- Tailwind %>
48 | <% } -%>
49 | <% if (useJavaScript) { -%>
50 | <%- JavaScript %>
51 | <% } -%>
52 | <% if (useVitest) { -%>
53 | <%- Vitest %>
54 | <% } -%>
55 | <% if (useDevTool) { -%>
56 | <%- DevTool %>
57 | <% } -%>
58 | <% if (useVercelCLI) { -%>
59 | <%- VercelCLI %>
60 | <% } -%>
61 | <% if (useNetlifyCLI) { -%>
62 | <%- NetlifyCLI %>
63 | <% } -%>
64 | "vite": "^5.0.11",
65 | "@vitejs/plugin-vue": "^5.0.3"
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/template/vue-ts/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | This template should help get you started developing with Vue 3 in Vite.
4 |
5 | ## Recommended IDE Setup
6 |
7 | [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).
8 |
9 | ## Type Support for `.vue` Imports in TS
10 |
11 | TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
12 |
13 | If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
14 |
15 | 1. Disable the built-in TypeScript Extension
16 | 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette
17 | 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
18 | 2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
19 |
20 | ## Customize configuration
21 |
22 | See [Vite Configuration Reference](https://vitejs.dev/config/).
23 |
24 | ## Project Setup
25 |
26 | ```sh
27 | pnpm install
28 | ```
29 |
30 | ### Compile and Hot-Reload for Development
31 |
32 | ```sh
33 | pnpm dev
34 | ```
35 |
36 | ### Type-Check, Compile and Minify for Production
37 |
38 | ```sh
39 | pnpm build
40 | ```
41 |
--------------------------------------------------------------------------------
/template/vue-js/src/assets/css/tailwind.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss";
2 |
3 | @theme {
4 | --foreground-rgb: 255, 255, 255;
5 | --background-start-rgb: 0, 0, 0;
6 | --background-end-rgb: 0, 0, 0;
7 | }
8 |
9 | body {
10 | color: rgb(var(--foreground-rgb));
11 | background: linear-gradient(
12 | to bottom,
13 | transparent,
14 | rgb(var(--background-end-rgb))
15 | )
16 | rgb(var(--background-start-rgb));
17 | }
18 |
19 | @layer utilities {
20 | .text-balance {
21 | text-wrap: balance;
22 | }
23 | }
24 |
25 | .gradient-border {
26 | position: relative;
27 | border-radius: 0.5rem;
28 | -webkit-backdrop-filter: blur(10px);
29 | backdrop-filter: blur(10px);
30 | width: 100%;
31 | }
32 | .gradient-border {
33 | background-color: rgba(20, 20, 20, 0.3);
34 | }
35 | .gradient-border::before {
36 | background: linear-gradient(
37 | 90deg,
38 | #303030 0%,
39 | #303030 25%,
40 | #00dc82 50%,
41 | #36e4da 75%,
42 | #0047e1 100%
43 | );
44 | }
45 | .gradient-border::before {
46 | content: "";
47 | position: absolute;
48 | top: 0;
49 | left: 0;
50 | right: 0;
51 | bottom: 0;
52 | border-radius: 0.5rem;
53 | padding: 2px;
54 | width: 100%;
55 | background-size: 400% auto;
56 | background-position: 0 0;
57 | opacity: 0.5;
58 | transition:
59 | background-position 0.3s ease-in-out,
60 | opacity 0.2s ease-in-out;
61 | -webkit-mask:
62 | linear-gradient(#fff 0 0) content-box,
63 | linear-gradient(#fff 0 0);
64 | mask:
65 | linear-gradient(#fff 0 0) content-box,
66 | linear-gradient(#fff 0 0);
67 | -webkit-mask-composite: xor;
68 | mask-composite: exclude;
69 | z-index: -1;
70 | }
71 | .gradient-border:hover::before {
72 | background-position: -50% 0;
73 | opacity: 1;
74 | }
75 |
--------------------------------------------------------------------------------
/template/vue-ts/src/assets/css/tailwind.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss";
2 |
3 | @theme {
4 | --foreground-rgb: 255, 255, 255;
5 | --background-start-rgb: 0, 0, 0;
6 | --background-end-rgb: 0, 0, 0;
7 | }
8 |
9 | body {
10 | color: rgb(var(--foreground-rgb));
11 | background: linear-gradient(
12 | to bottom,
13 | transparent,
14 | rgb(var(--background-end-rgb))
15 | )
16 | rgb(var(--background-start-rgb));
17 | }
18 |
19 | @layer utilities {
20 | .text-balance {
21 | text-wrap: balance;
22 | }
23 | }
24 |
25 | .gradient-border {
26 | position: relative;
27 | border-radius: 0.5rem;
28 | -webkit-backdrop-filter: blur(10px);
29 | backdrop-filter: blur(10px);
30 | width: 100%;
31 | }
32 | .gradient-border {
33 | background-color: rgba(20, 20, 20, 0.3);
34 | }
35 | .gradient-border::before {
36 | background: linear-gradient(
37 | 90deg,
38 | #303030 0%,
39 | #303030 25%,
40 | #00dc82 50%,
41 | #36e4da 75%,
42 | #0047e1 100%
43 | );
44 | }
45 | .gradient-border::before {
46 | content: "";
47 | position: absolute;
48 | top: 0;
49 | left: 0;
50 | right: 0;
51 | bottom: 0;
52 | border-radius: 0.5rem;
53 | padding: 2px;
54 | width: 100%;
55 | background-size: 400% auto;
56 | background-position: 0 0;
57 | opacity: 0.5;
58 | transition:
59 | background-position 0.3s ease-in-out,
60 | opacity 0.2s ease-in-out;
61 | -webkit-mask:
62 | linear-gradient(#fff 0 0) content-box,
63 | linear-gradient(#fff 0 0);
64 | mask:
65 | linear-gradient(#fff 0 0) content-box,
66 | linear-gradient(#fff 0 0);
67 | -webkit-mask-composite: xor;
68 | mask-composite: exclude;
69 | z-index: -1;
70 | }
71 | .gradient-border:hover::before {
72 | background-position: -50% 0;
73 | opacity: 1;
74 | }
75 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@selemondev/create-vue3-app",
3 | "version": "0.0.11",
4 | "description": "The Next Generation Vue Scaffolding Tool ✨",
5 | "type": "module",
6 | "main": "./dist/index.cjs",
7 | "module": "./dist/index.js",
8 | "types": "./dist/index.d.ts",
9 | "scripts": {
10 | "dev": "esno src/index.ts",
11 | "build:package": "tsup-node src/index.ts --format cjs,esm --clean --dts --minify --shims",
12 | "generate:release": "pnpx changelogen@latest --release",
13 | "package:beta": "pnpm build:package && npm publish --tag beta",
14 | "package": "pnpm build:package && npm publish --access=public"
15 | },
16 | "exports": {
17 | ".": {
18 | "types": "./dist/index.d.ts",
19 | "require": "./dist/index.cjs",
20 | "import": "./dist/index.js"
21 | }
22 | },
23 | "bin": {
24 | "@selemondev/create-vue3-app": "./dist/index.js"
25 | },
26 | "files": [
27 | "dist",
28 | "src",
29 | "template"
30 | ],
31 | "keywords": [
32 | "@selemondev/create-vue3-app",
33 | "Vue CLI",
34 | "Vue 3 CLI",
35 | "Vite CLI",
36 | "Vite",
37 | "Vue 3",
38 | "VueUse",
39 | "TypeScript"
40 | ],
41 | "author": "Selemondev",
42 | "license": "MIT",
43 | "devDependencies": {
44 | "@types/ejs": "^3.1.5",
45 | "@types/fs-extra": "^11.0.4",
46 | "@types/node": "^24.9.0",
47 | "@types/prompts": "^2.4.9",
48 | "@types/validate-npm-package-name": "^4.0.2",
49 | "conf": "^15.0.2",
50 | "esno": "^4.0.0",
51 | "tsup": "^8.0.2",
52 | "typescript": "^5.3.3"
53 | },
54 | "dependencies": {
55 | "commander": "^12.0.0",
56 | "ejs": "^3.1.9",
57 | "fs-extra": "^11.2.0",
58 | "ora": "^8.0.1",
59 | "picocolors": "^1.1.1",
60 | "prettier": "^3.2.5",
61 | "prompts": "^2.4.2",
62 | "validate-npm-package-name": "^7.0.0"
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/filter/filterFiles.ts:
--------------------------------------------------------------------------------
1 | import options from '../core/utils/vue/options';
2 | import fs from 'fs-extra';
3 |
4 | export function getFilterFile() {
5 | async function vueFilterFileActions() {
6 | if (!options.useRouter) {
7 | fs.remove(`${options.dest}/src/views`)
8 | fs.remove(`${options.dest}/src/router`)
9 | }
10 |
11 | if (!options.useTailwind) {
12 | fs.remove(`${options.dest}/tailwind.config.js`);
13 | fs.remove(`${options.dest}/postcss.config.js`);
14 | };
15 |
16 | if (options.useTailwind) {
17 | fs.remove(`${options.dest}/src/assets/css/base.css`);
18 | }
19 |
20 | if (options.deploy === 'none') {
21 | fs.remove(`${options.dest}/netlify.toml`);
22 | fs.remove(`${options.dest}/vercel.json`);
23 | }
24 |
25 | if (options.deploy === "netlify") {
26 | fs.remove(`${options.dest}/vercel.json`);
27 | }
28 |
29 | if (options.deploy === "vercel") {
30 | fs.remove(`${options.dest}/netlify.toml`);
31 | }
32 |
33 |
34 | if (options.useTailwind === false) {
35 | fs.remove(`${options.dest}/src/assets/css/tailwind.css`);
36 | }
37 |
38 | if (options.useJavaScript) {
39 | fs.remove(`${options.dest}/src/main.ts`);
40 | }
41 |
42 | if (!options.useVitest) {
43 | fs.remove(`${options.dest}/vitest.config.ts`);
44 | fs.remove(`${options.dest}/vitest.config.js`);
45 | fs.remove(`${options.dest}/tsconfig.vitest.json`);
46 | fs.remove(`${options.dest}/src/components/__tests__`);
47 | }
48 |
49 | if (!options.usePinia) {
50 | fs.remove(`${options.dest}/src/stores`)
51 | }
52 |
53 | if (!options.useEslint) {
54 | fs.remove(`${options.dest}/.eslintrc.cjs`)
55 | }
56 | return true
57 | }
58 | const obj = new Map([
59 | ['vue', vueFilterFileActions],
60 | ])
61 | const res = obj.get('vue');
62 | return res
63 | }
64 |
--------------------------------------------------------------------------------
/src/core/questions/vue/createVueQuestions.ts:
--------------------------------------------------------------------------------
1 | import packageManager from './packageManager'
2 | import projectName from './projectName'
3 | import deploy from './deploy'
4 | import { runPrompt } from '.'
5 | import createQuestion from './createQuestion'
6 | import initializeGit from "./initGit"
7 | import { logger } from '../../../utils/logger'
8 | import options from '../../utils/vue/options'
9 | import tailwindPrompt from "./tailwind";
10 | import typeScriptPrompt from "./typescript";
11 | import eslintPrompt from "./eslint"
12 | import program from '../../program'
13 | import { packageJsonMap } from '../../utils/vue/ejsMapConstant'
14 | async function createVueQuestions(): Promise {
15 | try {
16 | options.name = program.args[0] ?? (await createQuestion(projectName)).name;
17 |
18 | if(!options.useTypeScript) {
19 | await createQuestion(typeScriptPrompt)
20 | }
21 | if(!options.useTailwind) {
22 | await createQuestion(tailwindPrompt)
23 | }
24 | await runPrompt();
25 | if(!options.useEslint) {
26 | await createQuestion(eslintPrompt)
27 | }
28 | if(!options.package) {
29 | await createQuestion(packageManager)
30 | }
31 | const VercelCLI = packageJsonMap.get('vercelCLI');
32 |
33 | const NetlifyCLI = packageJsonMap.get('netlifyCLI');
34 |
35 | const deploymentCLI = await createQuestion(deploy);
36 |
37 | options.VercelCLI = deploymentCLI?.deploy === 'vercel' && VercelCLI;
38 |
39 | options.NetlifyCLI = deploymentCLI?.deploy === 'netlify' && NetlifyCLI;
40 |
41 | options.useVercelCLI = !!options.VercelCLI;
42 |
43 | options.useNetlifyCLI = !!options.NetlifyCLI;
44 |
45 | await createQuestion(initializeGit);
46 |
47 | } catch (error) {
48 |
49 | if(error instanceof Error) {
50 |
51 | logger.error(error.message);
52 |
53 | process.exit(1);
54 |
55 | }
56 | }
57 |
58 | return Promise.resolve()
59 | }
60 |
61 | export default createVueQuestions
--------------------------------------------------------------------------------
/src/core/command/create-vue-next/copyTemplate.ts:
--------------------------------------------------------------------------------
1 | import fs from "fs-extra";
2 | import path from "node:path";
3 | import options from "../../../core/utils/vue/options";
4 | import { ejsRender } from "../../../utils/ejsRender";
5 | import pc from "picocolors";
6 | import { templateFilesMap } from "../../../core/utils/vue/templateFile";
7 | import { getFilterFile } from "../../../filter/filterFiles";
8 | import { fileURLToPath } from "node:url";
9 | import { dirname } from "node:path";
10 | import ora from "ora";
11 |
12 | async function copyTemplate() {
13 | const __filename = fileURLToPath(import.meta.url);
14 |
15 | const __dirname = dirname(__filename);
16 |
17 | const spinner = ora("Copying template...").start();
18 |
19 | const language = options.useTypeScript ? "vue-ts" : "vue-js";
20 |
21 | options.src = path.resolve(__dirname, `../template/${language}`);
22 |
23 | const dest = options.name && path.resolve(process.cwd(), options.name);
24 |
25 | options.dest = dest;
26 |
27 | const templatePath = path.resolve(
28 | __dirname,
29 | `../../../../template/${language}`,
30 | );
31 | options.templatePath = templatePath;
32 |
33 | const filterFileFn = getFilterFile();
34 |
35 | async function copy() {
36 | const targetDirectory = path.resolve(__dirname, "../");
37 | if (!dest) {
38 | return;
39 | }
40 | await fs.copy(`${targetDirectory}/template/${language}`, dest);
41 | }
42 | await copy();
43 |
44 | filterFileFn && (await filterFileFn());
45 |
46 | options.dest &&
47 | (await fs.move(
48 | path.resolve(options.dest, ".gitignore.ejs"),
49 | path.resolve(options.dest, ".gitignore"),
50 | { overwrite: true },
51 | ));
52 |
53 | await Promise.all(
54 | templateFilesMap
55 | .get("vue")()
56 | .map((file: string) => options.name && ejsRender(file, options.name)),
57 | );
58 | spinner.text = pc.green("Template successfully copied!");
59 |
60 | spinner.succeed();
61 | }
62 | export default copyTemplate;
63 |
--------------------------------------------------------------------------------
/src/core/questions/vue/index.ts:
--------------------------------------------------------------------------------
1 | import prompts from './prompts'
2 | import options from '../../utils/vue/options'
3 | import {
4 | lintMap,
5 | packageJsonMap,
6 | } from '../../utils/vue/ejsMapConstant'
7 | import createQuestion from './createQuestion';
8 |
9 | async function getVueProperty() {
10 | const Eslint = packageJsonMap.get('eslintJsVue');
11 | const EslintTs = packageJsonMap.get('eslintTsPlugin');
12 | const Vitest = packageJsonMap.get('vitest');
13 | const TanStackVueQuery = packageJsonMap.get('tanStackVueQuery');
14 | const Router = packageJsonMap.get('router');
15 | const Pinia = packageJsonMap.get('pinia');
16 | const Tailwind = packageJsonMap.get('tailwind');
17 | const TypeScript = packageJsonMap.get('typescript');
18 | const JavaScript = packageJsonMap.get('javascript');
19 | const DevTool = packageJsonMap.get('devTool');
20 | const VueUse = packageJsonMap.get('vueUse');
21 |
22 | resolveOptions(options, packageJsonMap)
23 |
24 | resolveOptions(options, lintMap)
25 |
26 | options.constantDevDeps = packageJsonMap.get('constantDevDeps')
27 |
28 | options.constantProDeps = packageJsonMap.get('constantProDeps')
29 |
30 | options.Eslint = options.useTypeScript ? EslintTs : Eslint
31 |
32 | options.Vitest = Vitest
33 |
34 | options.DevTool = DevTool;
35 |
36 | options.Router = Router;
37 |
38 | options.TanStackVueQuery = TanStackVueQuery
39 |
40 | options.Pinia = Pinia
41 |
42 | options.VueUse = VueUse;
43 |
44 | options.Tailwind = Tailwind;
45 |
46 | options.TypeScript = TypeScript
47 |
48 | options.JavaScript = JavaScript
49 |
50 | options.useEslintTs = options.useTypeScript
51 |
52 | options.useJavaScript = options.useTypeScript === false;
53 |
54 | return Promise.resolve(true)
55 | }
56 | export async function runPrompt() {
57 |
58 | await createQuestion(prompts)
59 |
60 | await getVueProperty()
61 | }
62 |
63 | function resolveOptions(originOptions: any, configMap: Map) {
64 | Array.from(configMap.keys()).forEach((item: string) => {
65 | originOptions[item] = configMap.get(item)
66 | })
67 | }
68 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import program from './core/program'
4 | import createVueNext from './core/command/create-vue-next';
5 | import packageJson from "../package.json"
6 | import options from './core/utils/vue/options';
7 |
8 | async function main() {
9 | program
10 | .version(packageJson.version)
11 | .description(`Create Vue3 App. The Next Generation Vue Scaffolding Tool ⚡`)
12 | .action((name: string) => {
13 | options.name = name;
14 | })
15 | .option(
16 | '--ts, --typescript',
17 | `
18 |
19 | Initialize as a TypeScript project.
20 | `
21 | )
22 | .option(
23 | '--tailwind',
24 | `
25 |
26 | Initialize with Tailwind CSS config. (default)
27 | `
28 | )
29 | .option(
30 | '--eslint',
31 | `
32 |
33 | Initialize with eslint config.
34 | `
35 | )
36 | .option(
37 | '--use-npm',
38 | `
39 |
40 | Explicitly tell the CLI to bootstrap the application using npm
41 | `
42 | )
43 | .option(
44 | '--use-pnpm',
45 | `
46 |
47 | Explicitly tell the CLI to bootstrap the application using pnpm
48 | `
49 | )
50 | .option(
51 | '--use-yarn',
52 | `
53 |
54 | Explicitly tell the CLI to bootstrap the application using Yarn
55 | `
56 | )
57 | .option(
58 | '--use-bun',
59 | `
60 |
61 | Explicitly tell the CLI to bootstrap the application using Bun
62 | `
63 | )
64 | .allowUnknownOption()
65 | .parse(process.argv);
66 | options.useTypeScript = program.opts().typescript;
67 | options.useTailwind = program.opts().tailwind;
68 | options.useEslint = program.opts().eslint;
69 | options.package = !!program.opts().useNpm ? 'npm' : !!program.opts().usePnpm ? 'pnpm' : !!program.opts().useYarn ? 'yarn' : !!program.opts().useBun ? 'bun' : options.package;
70 | await createVueNext();
71 |
72 | }
73 | main();
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Create Vue App
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | The Next Generation Vue Scaffolding Tool powered by Vite 🛠️
18 |
19 | ## Usage
20 |
21 | ### npx
22 |
23 | ```bash
24 | npx @selemondev/create-vue3-app@latest
25 |
26 | # OR
27 |
28 | npx @selemondev/create-vue3-app --ts --eslint --tailwind --use-pnpm
29 | ```
30 |
31 | ## Options
32 |
33 | You can also pass command line arguments to set up a new project non-interactively. Run `npx @selemondev/create-vue3-app --help` to see the available command line arguments:
34 |
35 | ```bash
36 | Usage: @selemondev/create-vue3-app [options]
37 |
38 | Options:
39 | -V, --version output the version number
40 | --ts, --typescript
41 |
42 | Initialize as a TypeScript project.
43 |
44 | --tailwind
45 |
46 | Initialize with Tailwind CSS config.
47 |
48 | --eslint
49 |
50 | Initialize with ESLint config.
51 |
52 | --use-npm
53 |
54 | Explicitly tell the CLI to bootstrap the app using npm
55 |
56 | --use-pnpm
57 |
58 | Explicitly tell the CLI to bootstrap the app using pnpm
59 |
60 | --use-yarn
61 |
62 | Explicitly tell the CLI to bootstrap the app using Yarn
63 |
64 | --use-bun
65 |
66 | Explicitly tell the CLI to bootstrap the app using Bun
67 | ```
68 |
69 | ### How to contribute?
70 |
71 | Contributions are welcome and encouraged! If you have any ideas or suggestions for new features, or if you encounter any bugs or issues, please open an issue or submit a pull request on the GitHub repository.
72 |
73 | Developers interested in contributing should read the [Code of Conduct](./CODE_OF_CONDUCT.md) and the [Contributing Guide](./CONTRIBUTING.md).
74 |
75 |
76 | Happy hacking ⚡
77 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, race, body size, disability, ethnicity, sex characteristics, and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | - Using welcoming and inclusive language
12 | - Being respectful of differing viewpoints and experiences
13 | - Gracefully accepting constructive criticism
14 | - Focusing on what is best for the community
15 | - Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | - The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | - Trolling, insulting/derogatory comments, and personal or political attacks
21 | - Public or private harassment
22 | - Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | - Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at selemondev19@gmail.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
44 |
45 | For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | Thank you for your valuable contribution and dedication to improving this project! We greatly appreciate your involvement. To ensure a smooth and cohesive collaboration, we have provided some guidelines to help you get started. Kindly take a moment to review them before submitting your contributions. Your efforts will undoubtedly make this project even better, and we look forward to working together on its success!.
4 |
5 | ## Code of Conduct
6 |
7 | This project is governed by the [Contributor Covenant Code of Conduct](./CODE_OF_CONDUCT.md). By participating, you are expected to adhere to it.
8 |
9 | ## Open Development
10 |
11 | All work happens directly on `GitHub`. Both core team members and external contributors send pull requests which go through the same `code review` process.
12 |
13 | ## Semantic Versioning
14 |
15 | This project follows semantic versioning. We release patch versions for bug fixes or other changes that do not change the behavior of the API, minor versions for new features that are backward-compatible, and major versions for any breaking changes.
16 |
17 | Every significant change is documented in the changelog file.
18 |
19 | ## Reporting Issues
20 |
21 | Welcome to Create-Vue3-App CLI! We value your feedback and contributions to make this project better. If you encounter any bugs or have feature requests, please use [Github issues](https://github.com/selemondev/create-vue3-app/issues) issues to submit them.
22 |
23 | Before reporting an issue, we ask you to:
24 |
25 | 1. `Search for Similar Issues` : Ensure you have searched through our existing issues to see if the problem or feature request has already been addressed or is under discussion.
26 |
27 | 2. `Reproduce the Bug` : If reporting a bug, please provide the minimum code required to reproduce the issue. This will help us understand and resolve the problem more efficiently.
28 |
29 | 3. `Describe Feature Requests` : For feature requests, please describe the desired functionality and any additional context that might be helpful.
30 |
31 | Your participation and attention to these guidelines will help us maintain a more organized and effective development process.
32 |
33 | ## Commit Guidelines
34 |
35 | Commit messages are required to follow the [conventional-changelog standard](https://www.conventionalcommits.org/en/v1.0.0/):
36 |
37 | ```bash
38 | [optional scope]:
39 |
40 | [optional body]
41 |
42 | [optional footer(s)]
43 | ```
44 |
45 | 👉 [Commit example](https://github.com/unocss/unocss/releases/tag/v0.39.0)
46 |
47 | ### Commit types
48 |
49 | The following is a list of commit types:
50 |
51 | ### Commit Types:
52 |
53 | - `feat`: Adding a new snippet or significant functionality to the Create-Vue3-App CLI.
54 |
55 | - `fix`: Addressing bugs or issues in existing Create-Vue3-App CLI.
56 |
57 | - `docs`: Commits related to documentation changes for Create-Vue3-App CLI.
58 |
59 | - `style`: Commits related to code formatting, styling, or theming of Create-Vue3-App CLI.
60 |
61 | - `refactor`: Code changes that enhance the library's structure without introducing new features or fixing bugs.
62 |
63 | - `perf`: Commits aimed at improving performance for Create-Vue3-App CLI.
64 |
65 | - `test`: Commits related to testing Create-Vue3-App CLI.
66 |
67 | - `chore`: Other commits not affecting source or test files directly.
68 |
69 | ## License
70 |
71 | By contributing your code to the repository, you agree to license your contribution under the [MIT license](./LICENSE).
--------------------------------------------------------------------------------
/src/core/command/create-vue-next/install.ts:
--------------------------------------------------------------------------------
1 | import options from "../../../core/utils/vue/options";
2 | import { logger } from "../../../utils/logger";
3 | import { createSpawnCmd } from "../../../utils/createSpawnCmd";
4 | import ora from "ora";
5 | import pc from "picocolors";
6 | import { packageManagerExecutable } from "../../../utils/package-manager-executable";
7 | async function installDeps() {
8 | // No output will be shown in the console
9 | const cmdIgnore = createSpawnCmd(options.dest, "ignore");
10 | const spinner = ora();
11 |
12 | const startTime: number = new Date().getTime();
13 |
14 | if (options.useGitInit) {
15 | await cmdIgnore("git", ["init"]);
16 |
17 | await cmdIgnore("git", ["add ."]);
18 |
19 | await cmdIgnore("git", ['commit -m "Initialized by create-vue3-app"']);
20 | }
21 |
22 | if (options.package && options.package !== "none") {
23 | spinner.start(`Checking for dependency updates with ${options.package}.`);
24 | await cmdIgnore(packageManagerExecutable(options.package), [
25 | "npm-check-updates",
26 | ]);
27 | spinner.text = pc.green(
28 | `Checking for dependency updates with ${options.package}.`,
29 | );
30 | spinner.succeed();
31 | spinner.start(`Updating dependencies.`);
32 | await cmdIgnore(packageManagerExecutable(options.package), [
33 | "npm-check-updates -u",
34 | ]);
35 | spinner.text = pc.green(`Updating dependencies.`);
36 | spinner.succeed();
37 | spinner.start(`Installing the latest dependencies.`);
38 | await cmdIgnore(options.package, ["install"]);
39 | spinner.text = pc.green(`Installing the latest dependencies.`);
40 | spinner.succeed();
41 | }
42 |
43 | const endTime: number = new Date().getTime();
44 | const usageTime: number = (endTime - startTime) / 1000;
45 |
46 | console.log();
47 |
48 | logger.info(`🚀 Completed in ${usageTime}s`);
49 |
50 | console.log();
51 |
52 | logger.success("✅ Project created successfully");
53 |
54 | console.log();
55 |
56 | logger.info(`cd ${options.name}`);
57 |
58 | console.log();
59 |
60 | if (options.package !== "none") {
61 | logger.info(
62 | options.package === "npm"
63 | ? `${options.package} run dev to start the dev server`
64 | : `${options.package} dev to start the dev server`,
65 | );
66 |
67 | console.log();
68 |
69 | options.useEslint &&
70 | logger.info(
71 | options.package === "npm"
72 | ? `${options.package} run lint`
73 | : `${options.package} lint`,
74 | );
75 |
76 | options.useEslint && console.log();
77 |
78 | options.useVitest &&
79 | logger.info(`${options.package} run test:unit to run tests`);
80 |
81 | options.useVitest && console.log();
82 |
83 | options.useTypeScript && logger.info(`${options.package} run type-check`);
84 | } else {
85 | logger.info(`npm install - To install dependencies`);
86 |
87 | console.log();
88 |
89 | options.useEslint && logger.info("npm run lint to format your code");
90 |
91 | options.useEslint && console.log();
92 |
93 | logger.info("npm run dev to start the dev server");
94 |
95 | options.useVitest && console.log();
96 |
97 | options.useVitest && logger.info("npm run test:unit to run tests");
98 |
99 | options.useTypeScript && console.log();
100 |
101 | options.useTypeScript && logger.info("npm run type-check");
102 | }
103 | }
104 | export default installDeps;
105 |
--------------------------------------------------------------------------------
/src/deps/vue/dependencies.ts:
--------------------------------------------------------------------------------
1 | import options from "../../core/utils/vue/options";
2 | const router = {
3 | name: "vue-router",
4 | version: "^4.3.0",
5 | stableVersion: "4.3.0",
6 | env: "pro",
7 | };
8 | const pinia = {
9 | name: "pinia",
10 | version: "^2.1.7",
11 | stableVersion: "2.1.7",
12 | env: "pro",
13 | };
14 |
15 | const eslintJsVue = {
16 | name: ["eslint-plugin-vue", "eslint"],
17 | version: ["^9.17.0", "^8.49.0"],
18 | stableVersion: ["^9.17.0", "^8.49.0"],
19 | env: ["dev", "dev"],
20 | };
21 |
22 | const eslintTsPlugin = {
23 | name: [
24 | "eslint",
25 | "eslint-plugin-vue",
26 | "@vue/eslint-config-typescript",
27 | "@rushstack/eslint-patch",
28 | ],
29 | version: ["^8.49.0", "^9.17.0", "^12.0.0", "^1.3.3"],
30 | stableVersion: ["^8.18.0", "^9.17.0", "^12.0.0", "^1.3.3"],
31 | env: ["dev", "dev", "dev", "dev"],
32 | };
33 |
34 | const tailwind = {
35 | name: ["tailwindcss", "@tailwindcss/vite"],
36 | version: ["^4.1.12", "^4.1.12"],
37 | stableVersion: ["^4.1.12", "^4.1.12"],
38 | env: ["pro", "pro"],
39 | };
40 |
41 | const vueUse = {
42 | name: "@vueuse/core",
43 | version: "^10.9.0",
44 | stableVersion: "^10.9.0",
45 | env: "pro",
46 | };
47 |
48 | const typescript = {
49 | name: [
50 | "typescript",
51 | "vue-tsc",
52 | "@tsconfig/node20",
53 | "@vue/tsconfig",
54 | "npm-run-all2",
55 | "@types/node",
56 | ],
57 | version: ["~5.3.0", "^1.8.25", "^20.1.2", "^0.5.1", "^6.1.1", "^20.11.10"],
58 | stableVersion: [
59 | "~5.3.0",
60 | "^1.8.25",
61 | "^20.1.2",
62 | "^0.5.1",
63 | "^6.1.1",
64 | "^20.11.10",
65 | ],
66 | dev: ["dev", "dev", "dev", "dev", "dev", "dev", "dev", "dev"],
67 | };
68 |
69 | const javascript = {
70 | name: [],
71 | version: [],
72 | stableVersion: [],
73 | dev: [],
74 | };
75 |
76 | const tanStackVueQuery = {
77 | name: ["@tanstack/vue-query", "@tanstack/vue-query-devtools"],
78 | version: ["^5.25.0", "^5.25.0"],
79 | stableVersion: ["^5.25.0", "^5.25.0"],
80 | dev: ["pro", "pro"],
81 | };
82 |
83 | const devTool = {
84 | name: "vite-plugin-vue-devtools",
85 | version: "^7.0.16",
86 | stableVersion: "^7.0.16",
87 | dev: "pro",
88 | };
89 |
90 | const vitest = {
91 | name: ["vitest", "jsdom", "@vue/test-utils"],
92 | version: ["^1.2.2", "^24.0.0", "^2.4.4"],
93 | stableVersion: ["^1.2.2", "^24.0.0", "^2.4.4"],
94 | dev: ["dev", "dev", "dev"],
95 | };
96 |
97 | const vercelCLI = {
98 | name: ["vercel"],
99 | version: ["^34.1.7"],
100 | stableVersion: ["^34.1.7"],
101 | dev: ["dev"],
102 | };
103 |
104 | const netlifyCLI = {
105 | name: ["netlify-cli"],
106 | version: ["^17.30.0"],
107 | stableVersion: ["^17.30.0"],
108 | dev: ["dev"],
109 | };
110 |
111 | const constantDevDeps = {
112 | name: options.useTypeScript ? typescript.name : javascript.name,
113 | version: options.useTypeScript ? typescript.version : javascript.version,
114 | stableVersion: options.useTypeScript
115 | ? typescript.stableVersion
116 | : javascript.stableVersion,
117 | dev: options.useTypeScript ? typescript.dev : javascript.dev,
118 | };
119 | const constantProDeps = {
120 | name: "vue",
121 | version: "^3.4.21",
122 | stableVersion: "^3.4.21",
123 | dev: "pro",
124 | };
125 | export {
126 | constantDevDeps,
127 | constantProDeps,
128 | devTool,
129 | tailwind,
130 | eslintTsPlugin,
131 | javascript,
132 | typescript,
133 | vitest,
134 | tanStackVueQuery,
135 | eslintJsVue,
136 | vueUse,
137 | pinia,
138 | router,
139 | vercelCLI,
140 | netlifyCLI,
141 | };
142 |
--------------------------------------------------------------------------------
/src/utils/ejsRender.ts:
--------------------------------------------------------------------------------
1 | import ejs from "ejs";
2 | import fs from 'fs-extra'
3 | import path from "path";
4 | import { format as prettierFormatter } from "prettier/standalone";
5 | import * as prettierPluginBabel from "prettier/plugins/babel";
6 | import * as prettierPluginEstree from "prettier/plugins/estree";
7 | import * as prettierPluginHtml from "prettier/plugins/html";
8 | import * as prettierPluginTypescript from "prettier/plugins/typescript";
9 | import * as prettierPluginPostcss from "prettier/plugins/postcss";
10 | import options from '../core/utils/vue/options'
11 |
12 | // formatting the code
13 | export async function ejsRender(filePath: string, name: string): Promise {
14 | try {
15 | let prettierCode: string = '';
16 |
17 | const file = path.parse(filePath);
18 |
19 | const dest = path.resolve(process.cwd(), name)
20 |
21 | const readFilePath = path.resolve(dest, file.dir, `${file.name}.ejs`)
22 |
23 | const outputFilePath = path.resolve(dest, filePath)
24 |
25 | const templateCode = await fs.readFile(readFilePath)
26 |
27 | const code = ejs.render(templateCode.toString(), options);
28 |
29 | const extname = path.extname(filePath).replace(/[.]/g, '')
30 |
31 | try {
32 | switch (extname) {
33 | case 'vue':
34 | prettierCode = await prettierFormatter(code, {
35 | parser: 'vue',
36 | plugins: [
37 | prettierPluginHtml,
38 | prettierPluginBabel,
39 | prettierPluginEstree,
40 | prettierPluginTypescript,
41 | prettierPluginPostcss
42 | ]
43 | });
44 | break;
45 | case 'ts':
46 | case 'tsx':
47 | case 'jsx':
48 | case 'js':
49 | prettierCode = await prettierFormatter(code, {
50 | parser: 'babel',
51 | plugins: [prettierPluginBabel, prettierPluginEstree]
52 | });
53 | break;
54 | case 'json':
55 | prettierCode = await prettierFormatter(code, {
56 | parser: "json",
57 | plugins: [prettierPluginBabel, prettierPluginEstree]
58 | });
59 | break;
60 | case 'cjs':
61 | prettierCode = await prettierFormatter(code, {
62 | parser: "babel",
63 | plugins: [prettierPluginBabel, prettierPluginEstree]
64 | });
65 | break;
66 | case 'html':
67 | prettierCode = await prettierFormatter(code, {
68 | parser: 'html',
69 | plugins: [prettierPluginHtml]
70 | });
71 | break;
72 | case 'css':
73 | case 'scss':
74 | case 'less':
75 | prettierCode = await prettierFormatter(code, {
76 | parser: 'css',
77 | plugins: [prettierPluginPostcss]
78 | });
79 | break;
80 | case 'toml':
81 | prettierCode = code
82 | break
83 | default:
84 | // Fallback: keep code as-is to avoid pulling extra parsers
85 | prettierCode = code
86 | break
87 | }
88 | } catch (err) {
89 | console.log(err)
90 | }
91 | await fs.outputFile(outputFilePath, prettierCode)
92 | await fs.remove(readFilePath)
93 | } catch (error) {
94 | console.log(error)
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 |
4 | ## v0.0.11
5 |
6 | [compare changes](https://github.com/selemondev/create-vue3-app/compare/v0.0.10...v0.0.11)
7 |
8 | ### 🚀 Enhancements
9 |
10 | - Check dependency updates ([60016a9](https://github.com/selemondev/create-vue3-app/commit/60016a9))
11 | - Add Tailwind v4 and update template ([94eff3d](https://github.com/selemondev/create-vue3-app/commit/94eff3d))
12 |
13 | ### 🏡 Chore
14 |
15 | - Remove unused imports ([72d4446](https://github.com/selemondev/create-vue3-app/commit/72d4446))
16 |
17 | ### ❤️ Contributors
18 |
19 | - Selemondev
20 |
21 | ## v0.0.8
22 |
23 | [compare changes](https://github.com/selemondev/create-vue3-app/compare/v0.0.7...v0.0.8)
24 |
25 | ### 🩹 Fixes
26 |
27 | - Import names from fs-extra ([520ae91](https://github.com/selemondev/create-vue3-app/commit/520ae91))
28 |
29 | ### 🏡 Chore
30 |
31 | - **release:** V0.0.8 ([c9d15e5](https://github.com/selemondev/create-vue3-app/commit/c9d15e5))
32 |
33 | ### ❤️ Contributors
34 |
35 | - Selemondev
36 |
37 | ## v0.0.8
38 |
39 | [compare changes](https://github.com/selemondev/create-vue3-app/compare/v0.0.3...v0.0.8)
40 |
41 | ### 🏡 Chore
42 |
43 | - Update version and generate release ([209469c](https://github.com/selemondev/create-vue3-app/commit/209469c))
44 |
45 | ### ❤️ Contributors
46 |
47 | - Selemondev
48 |
49 | ## v0.0.3
50 |
51 | [compare changes](https://github.com/selemondev/create-vue3-app/compare/v0.0.2...v0.0.3)
52 |
53 | ### 🚀 Enhancements
54 |
55 | - Add Vercel CLI ([f8bc9d1](https://github.com/selemondev/create-vue3-app/commit/f8bc9d1))
56 | - Add Netlify CLI ([3f9e607](https://github.com/selemondev/create-vue3-app/commit/3f9e607))
57 |
58 | ### 🔥 Performance
59 |
60 | - Reduce bundle size ([01c3e21](https://github.com/selemondev/create-vue3-app/commit/01c3e21))
61 |
62 | ### 🩹 Fixes
63 |
64 | - Logs ([f5cb146](https://github.com/selemondev/create-vue3-app/commit/f5cb146))
65 | - **app:** CSS overflow in UI ([84bdba5](https://github.com/selemondev/create-vue3-app/commit/84bdba5))
66 | - Package name ([5b74067](https://github.com/selemondev/create-vue3-app/commit/5b74067))
67 |
68 | ### 💅 Refactors
69 |
70 | - Remove 'route' based folders ([42e0ec9](https://github.com/selemondev/create-vue3-app/commit/42e0ec9))
71 | - Use named imports instead of default imports ([b8e1daa](https://github.com/selemondev/create-vue3-app/commit/b8e1daa))
72 |
73 | ### 📖 Documentation
74 |
75 | - Update ([264541e](https://github.com/selemondev/create-vue3-app/commit/264541e))
76 | - Update docs ([b6add94](https://github.com/selemondev/create-vue3-app/commit/b6add94))
77 |
78 | ### 🏡 Chore
79 |
80 | - **release:** V0.0.2 ([571f612](https://github.com/selemondev/create-vue3-app/commit/571f612))
81 | - Rename from create-vue-next to @selemondev/create-vue3-app ([9a1a878](https://github.com/selemondev/create-vue3-app/commit/9a1a878))
82 | - Rename from create-vue-next to @selemondev/create-vue3-app ([8b5957c](https://github.com/selemondev/create-vue3-app/commit/8b5957c))
83 | - Update issue templates ([05dc349](https://github.com/selemondev/create-vue3-app/commit/05dc349))
84 | - Package name ([27a52c1](https://github.com/selemondev/create-vue3-app/commit/27a52c1))
85 | - Import paths hierarchy ([47e186b](https://github.com/selemondev/create-vue3-app/commit/47e186b))
86 |
87 | ### ❤️ Contributors
88 |
89 | - Selemondev ([@selemondev](https://github.com/selemondev))
90 | - Selemondev-triply ([@selemon-dev](https://github.com/selemon-dev))
91 |
92 | ## v0.0.2
93 |
94 | [compare changes](https://github.com/selemondev/create-vue-next/compare/v0.0.1...v0.0.2)
95 |
96 | ### 📖 Documentation
97 |
98 | - Update docs ([169b8fd](https://github.com/selemondev/create-vue-next/commit/169b8fd))
99 |
100 | ### ❤️ Contributors
101 |
102 | - Selemondev
103 |
104 | ## v0.0.1
105 |
106 |
107 | ### 🚀 Enhancements
108 |
109 | - Add Eslint ([5856331](https://github.com/selemondev/create-vue-next/commit/5856331))
110 | - Add Vitest ([6e00e75](https://github.com/selemondev/create-vue-next/commit/6e00e75))
111 | - Add tanstack vue query ([a2ad6b9](https://github.com/selemondev/create-vue-next/commit/a2ad6b9))
112 | - Add deployment targets ([d515ec9](https://github.com/selemondev/create-vue-next/commit/d515ec9))
113 | - Add program ([7b6be5a](https://github.com/selemondev/create-vue-next/commit/7b6be5a))
114 | - Add flags ([bcea877](https://github.com/selemondev/create-vue-next/commit/bcea877))
115 | - Add DevTool ([60dbdef](https://github.com/selemondev/create-vue-next/commit/60dbdef))
116 | - Add VueUse dep ([8f9f57c](https://github.com/selemondev/create-vue-next/commit/8f9f57c))
117 | - Add default template styles ([39d845f](https://github.com/selemondev/create-vue-next/commit/39d845f))
118 | - Add box size CSS property ([6698b7a](https://github.com/selemondev/create-vue-next/commit/6698b7a))
119 | - Add LICENSE ([c4bb9fa](https://github.com/selemondev/create-vue-next/commit/c4bb9fa))
120 |
121 | ### 💅 Refactors
122 |
123 | - Codebase ([c9b6abe](https://github.com/selemondev/create-vue-next/commit/c9b6abe))
124 | - Codebase ([9165b39](https://github.com/selemondev/create-vue-next/commit/9165b39))
125 | - Files ([4bca287](https://github.com/selemondev/create-vue-next/commit/4bca287))
126 |
127 | ### 📖 Documentation
128 |
129 | - Update ([c7df7e7](https://github.com/selemondev/create-vue-next/commit/c7df7e7))
130 | - Add docs ([c13b1f7](https://github.com/selemondev/create-vue-next/commit/c13b1f7))
131 |
132 | ### 🏡 Chore
133 |
134 | - Cleanup ([0d0f6f3](https://github.com/selemondev/create-vue-next/commit/0d0f6f3))
135 | - Update dependencies ([3b2fd8a](https://github.com/selemondev/create-vue-next/commit/3b2fd8a))
136 | - Remove @types/ora and add @types/prompts ([eec1f96](https://github.com/selemondev/create-vue-next/commit/eec1f96))
137 | - Remove lock files from .gitignore ([6b395fc](https://github.com/selemondev/create-vue-next/commit/6b395fc))
138 |
139 | ### ❤️ Contributors
140 |
141 | - Selemondev
142 | - Selemon Dev
143 |
144 |
--------------------------------------------------------------------------------
/template/vue-ts/src/components/TheWelcome.ejs:
--------------------------------------------------------------------------------
1 |
106 |
107 | <% if (useTailwind) { -%>
108 |
109 |
110 |
111 |

112 |
113 |
114 |
115 |
116 | Welcome To Create Vue 3 App
117 |
118 |
119 |
120 |
144 |
145 |
146 | <% } -%>
147 |
148 | <% if (!useTailwind) { -%>
149 |
150 |
151 |
152 |

153 |
154 |
155 |
156 |
157 | Welcome To Create Vue 3 App
158 |
159 |
160 |
161 |
182 |
183 |
184 | <% } -%>
185 |
186 |
187 |
188 | <% if (!useTailwind) { -%>
189 |
190 |
282 | <% } -%>
--------------------------------------------------------------------------------
/template/vue-js/src/components/TheWelcome.ejs:
--------------------------------------------------------------------------------
1 |
106 |
107 | <% if (useTailwind) { -%>
108 |
109 |
110 |
111 |

112 |
113 |
114 |
115 |
116 | Welcome To Create Vue 3 App
117 |
118 |
119 |
120 |
144 |
145 |
146 | <% } -%>
147 |
148 | <% if (!useTailwind) { -%>
149 |
150 |
151 |
152 |

153 |
154 |
155 |
156 |
157 | Welcome To Create Vue 3 App
158 |
159 |
160 |
161 |
182 |
183 |
184 |
185 | <% } -%>
186 |
187 |
188 |
189 | <% if (!useTailwind) { -%>
190 |
191 |
283 | <% } -%>
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | commander:
12 | specifier: ^12.0.0
13 | version: 12.1.0
14 | ejs:
15 | specifier: ^3.1.9
16 | version: 3.1.10
17 | fs-extra:
18 | specifier: ^11.2.0
19 | version: 11.3.2
20 | ora:
21 | specifier: ^8.0.1
22 | version: 8.1.0
23 | picocolors:
24 | specifier: ^1.1.1
25 | version: 1.1.1
26 | prettier:
27 | specifier: ^3.2.5
28 | version: 3.3.3
29 | prompts:
30 | specifier: ^2.4.2
31 | version: 2.4.2
32 | validate-npm-package-name:
33 | specifier: ^7.0.0
34 | version: 7.0.0
35 | devDependencies:
36 | '@types/ejs':
37 | specifier: ^3.1.5
38 | version: 3.1.5
39 | '@types/fs-extra':
40 | specifier: ^11.0.4
41 | version: 11.0.4
42 | '@types/node':
43 | specifier: ^24.9.0
44 | version: 24.9.0
45 | '@types/prompts':
46 | specifier: ^2.4.9
47 | version: 2.4.9
48 | '@types/validate-npm-package-name':
49 | specifier: ^4.0.2
50 | version: 4.0.2
51 | conf:
52 | specifier: ^15.0.2
53 | version: 15.0.2
54 | esno:
55 | specifier: ^4.0.0
56 | version: 4.8.0
57 | tsup:
58 | specifier: ^8.0.2
59 | version: 8.2.4(tsx@4.20.6)(typescript@5.5.4)
60 | typescript:
61 | specifier: ^5.3.3
62 | version: 5.5.4
63 |
64 | packages:
65 |
66 | '@esbuild/aix-ppc64@0.23.1':
67 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
68 | engines: {node: '>=18'}
69 | cpu: [ppc64]
70 | os: [aix]
71 |
72 | '@esbuild/aix-ppc64@0.25.10':
73 | resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
74 | engines: {node: '>=18'}
75 | cpu: [ppc64]
76 | os: [aix]
77 |
78 | '@esbuild/android-arm64@0.23.1':
79 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
80 | engines: {node: '>=18'}
81 | cpu: [arm64]
82 | os: [android]
83 |
84 | '@esbuild/android-arm64@0.25.10':
85 | resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
86 | engines: {node: '>=18'}
87 | cpu: [arm64]
88 | os: [android]
89 |
90 | '@esbuild/android-arm@0.23.1':
91 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
92 | engines: {node: '>=18'}
93 | cpu: [arm]
94 | os: [android]
95 |
96 | '@esbuild/android-arm@0.25.10':
97 | resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
98 | engines: {node: '>=18'}
99 | cpu: [arm]
100 | os: [android]
101 |
102 | '@esbuild/android-x64@0.23.1':
103 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
104 | engines: {node: '>=18'}
105 | cpu: [x64]
106 | os: [android]
107 |
108 | '@esbuild/android-x64@0.25.10':
109 | resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
110 | engines: {node: '>=18'}
111 | cpu: [x64]
112 | os: [android]
113 |
114 | '@esbuild/darwin-arm64@0.23.1':
115 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
116 | engines: {node: '>=18'}
117 | cpu: [arm64]
118 | os: [darwin]
119 |
120 | '@esbuild/darwin-arm64@0.25.10':
121 | resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
122 | engines: {node: '>=18'}
123 | cpu: [arm64]
124 | os: [darwin]
125 |
126 | '@esbuild/darwin-x64@0.23.1':
127 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
128 | engines: {node: '>=18'}
129 | cpu: [x64]
130 | os: [darwin]
131 |
132 | '@esbuild/darwin-x64@0.25.10':
133 | resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
134 | engines: {node: '>=18'}
135 | cpu: [x64]
136 | os: [darwin]
137 |
138 | '@esbuild/freebsd-arm64@0.23.1':
139 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
140 | engines: {node: '>=18'}
141 | cpu: [arm64]
142 | os: [freebsd]
143 |
144 | '@esbuild/freebsd-arm64@0.25.10':
145 | resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
146 | engines: {node: '>=18'}
147 | cpu: [arm64]
148 | os: [freebsd]
149 |
150 | '@esbuild/freebsd-x64@0.23.1':
151 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
152 | engines: {node: '>=18'}
153 | cpu: [x64]
154 | os: [freebsd]
155 |
156 | '@esbuild/freebsd-x64@0.25.10':
157 | resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
158 | engines: {node: '>=18'}
159 | cpu: [x64]
160 | os: [freebsd]
161 |
162 | '@esbuild/linux-arm64@0.23.1':
163 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
164 | engines: {node: '>=18'}
165 | cpu: [arm64]
166 | os: [linux]
167 |
168 | '@esbuild/linux-arm64@0.25.10':
169 | resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
170 | engines: {node: '>=18'}
171 | cpu: [arm64]
172 | os: [linux]
173 |
174 | '@esbuild/linux-arm@0.23.1':
175 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
176 | engines: {node: '>=18'}
177 | cpu: [arm]
178 | os: [linux]
179 |
180 | '@esbuild/linux-arm@0.25.10':
181 | resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
182 | engines: {node: '>=18'}
183 | cpu: [arm]
184 | os: [linux]
185 |
186 | '@esbuild/linux-ia32@0.23.1':
187 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
188 | engines: {node: '>=18'}
189 | cpu: [ia32]
190 | os: [linux]
191 |
192 | '@esbuild/linux-ia32@0.25.10':
193 | resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
194 | engines: {node: '>=18'}
195 | cpu: [ia32]
196 | os: [linux]
197 |
198 | '@esbuild/linux-loong64@0.23.1':
199 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
200 | engines: {node: '>=18'}
201 | cpu: [loong64]
202 | os: [linux]
203 |
204 | '@esbuild/linux-loong64@0.25.10':
205 | resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
206 | engines: {node: '>=18'}
207 | cpu: [loong64]
208 | os: [linux]
209 |
210 | '@esbuild/linux-mips64el@0.23.1':
211 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
212 | engines: {node: '>=18'}
213 | cpu: [mips64el]
214 | os: [linux]
215 |
216 | '@esbuild/linux-mips64el@0.25.10':
217 | resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
218 | engines: {node: '>=18'}
219 | cpu: [mips64el]
220 | os: [linux]
221 |
222 | '@esbuild/linux-ppc64@0.23.1':
223 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
224 | engines: {node: '>=18'}
225 | cpu: [ppc64]
226 | os: [linux]
227 |
228 | '@esbuild/linux-ppc64@0.25.10':
229 | resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
230 | engines: {node: '>=18'}
231 | cpu: [ppc64]
232 | os: [linux]
233 |
234 | '@esbuild/linux-riscv64@0.23.1':
235 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
236 | engines: {node: '>=18'}
237 | cpu: [riscv64]
238 | os: [linux]
239 |
240 | '@esbuild/linux-riscv64@0.25.10':
241 | resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
242 | engines: {node: '>=18'}
243 | cpu: [riscv64]
244 | os: [linux]
245 |
246 | '@esbuild/linux-s390x@0.23.1':
247 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
248 | engines: {node: '>=18'}
249 | cpu: [s390x]
250 | os: [linux]
251 |
252 | '@esbuild/linux-s390x@0.25.10':
253 | resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
254 | engines: {node: '>=18'}
255 | cpu: [s390x]
256 | os: [linux]
257 |
258 | '@esbuild/linux-x64@0.23.1':
259 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
260 | engines: {node: '>=18'}
261 | cpu: [x64]
262 | os: [linux]
263 |
264 | '@esbuild/linux-x64@0.25.10':
265 | resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
266 | engines: {node: '>=18'}
267 | cpu: [x64]
268 | os: [linux]
269 |
270 | '@esbuild/netbsd-arm64@0.25.10':
271 | resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
272 | engines: {node: '>=18'}
273 | cpu: [arm64]
274 | os: [netbsd]
275 |
276 | '@esbuild/netbsd-x64@0.23.1':
277 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
278 | engines: {node: '>=18'}
279 | cpu: [x64]
280 | os: [netbsd]
281 |
282 | '@esbuild/netbsd-x64@0.25.10':
283 | resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
284 | engines: {node: '>=18'}
285 | cpu: [x64]
286 | os: [netbsd]
287 |
288 | '@esbuild/openbsd-arm64@0.23.1':
289 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
290 | engines: {node: '>=18'}
291 | cpu: [arm64]
292 | os: [openbsd]
293 |
294 | '@esbuild/openbsd-arm64@0.25.10':
295 | resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
296 | engines: {node: '>=18'}
297 | cpu: [arm64]
298 | os: [openbsd]
299 |
300 | '@esbuild/openbsd-x64@0.23.1':
301 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
302 | engines: {node: '>=18'}
303 | cpu: [x64]
304 | os: [openbsd]
305 |
306 | '@esbuild/openbsd-x64@0.25.10':
307 | resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
308 | engines: {node: '>=18'}
309 | cpu: [x64]
310 | os: [openbsd]
311 |
312 | '@esbuild/openharmony-arm64@0.25.10':
313 | resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
314 | engines: {node: '>=18'}
315 | cpu: [arm64]
316 | os: [openharmony]
317 |
318 | '@esbuild/sunos-x64@0.23.1':
319 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
320 | engines: {node: '>=18'}
321 | cpu: [x64]
322 | os: [sunos]
323 |
324 | '@esbuild/sunos-x64@0.25.10':
325 | resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
326 | engines: {node: '>=18'}
327 | cpu: [x64]
328 | os: [sunos]
329 |
330 | '@esbuild/win32-arm64@0.23.1':
331 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
332 | engines: {node: '>=18'}
333 | cpu: [arm64]
334 | os: [win32]
335 |
336 | '@esbuild/win32-arm64@0.25.10':
337 | resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
338 | engines: {node: '>=18'}
339 | cpu: [arm64]
340 | os: [win32]
341 |
342 | '@esbuild/win32-ia32@0.23.1':
343 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
344 | engines: {node: '>=18'}
345 | cpu: [ia32]
346 | os: [win32]
347 |
348 | '@esbuild/win32-ia32@0.25.10':
349 | resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
350 | engines: {node: '>=18'}
351 | cpu: [ia32]
352 | os: [win32]
353 |
354 | '@esbuild/win32-x64@0.23.1':
355 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
356 | engines: {node: '>=18'}
357 | cpu: [x64]
358 | os: [win32]
359 |
360 | '@esbuild/win32-x64@0.25.10':
361 | resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
362 | engines: {node: '>=18'}
363 | cpu: [x64]
364 | os: [win32]
365 |
366 | '@isaacs/cliui@8.0.2':
367 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
368 | engines: {node: '>=12'}
369 |
370 | '@jridgewell/gen-mapping@0.3.5':
371 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
372 | engines: {node: '>=6.0.0'}
373 |
374 | '@jridgewell/resolve-uri@3.1.2':
375 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
376 | engines: {node: '>=6.0.0'}
377 |
378 | '@jridgewell/set-array@1.2.1':
379 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
380 | engines: {node: '>=6.0.0'}
381 |
382 | '@jridgewell/sourcemap-codec@1.5.0':
383 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
384 |
385 | '@jridgewell/trace-mapping@0.3.25':
386 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
387 |
388 | '@nodelib/fs.scandir@2.1.5':
389 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
390 | engines: {node: '>= 8'}
391 |
392 | '@nodelib/fs.stat@2.0.5':
393 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
394 | engines: {node: '>= 8'}
395 |
396 | '@nodelib/fs.walk@1.2.8':
397 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
398 | engines: {node: '>= 8'}
399 |
400 | '@pkgjs/parseargs@0.11.0':
401 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
402 | engines: {node: '>=14'}
403 |
404 | '@rollup/rollup-android-arm-eabi@4.21.2':
405 | resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==}
406 | cpu: [arm]
407 | os: [android]
408 |
409 | '@rollup/rollup-android-arm64@4.21.2':
410 | resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==}
411 | cpu: [arm64]
412 | os: [android]
413 |
414 | '@rollup/rollup-darwin-arm64@4.21.2':
415 | resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==}
416 | cpu: [arm64]
417 | os: [darwin]
418 |
419 | '@rollup/rollup-darwin-x64@4.21.2':
420 | resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==}
421 | cpu: [x64]
422 | os: [darwin]
423 |
424 | '@rollup/rollup-linux-arm-gnueabihf@4.21.2':
425 | resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==}
426 | cpu: [arm]
427 | os: [linux]
428 |
429 | '@rollup/rollup-linux-arm-musleabihf@4.21.2':
430 | resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==}
431 | cpu: [arm]
432 | os: [linux]
433 |
434 | '@rollup/rollup-linux-arm64-gnu@4.21.2':
435 | resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==}
436 | cpu: [arm64]
437 | os: [linux]
438 |
439 | '@rollup/rollup-linux-arm64-musl@4.21.2':
440 | resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==}
441 | cpu: [arm64]
442 | os: [linux]
443 |
444 | '@rollup/rollup-linux-powerpc64le-gnu@4.21.2':
445 | resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==}
446 | cpu: [ppc64]
447 | os: [linux]
448 |
449 | '@rollup/rollup-linux-riscv64-gnu@4.21.2':
450 | resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==}
451 | cpu: [riscv64]
452 | os: [linux]
453 |
454 | '@rollup/rollup-linux-s390x-gnu@4.21.2':
455 | resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==}
456 | cpu: [s390x]
457 | os: [linux]
458 |
459 | '@rollup/rollup-linux-x64-gnu@4.21.2':
460 | resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==}
461 | cpu: [x64]
462 | os: [linux]
463 |
464 | '@rollup/rollup-linux-x64-musl@4.21.2':
465 | resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==}
466 | cpu: [x64]
467 | os: [linux]
468 |
469 | '@rollup/rollup-win32-arm64-msvc@4.21.2':
470 | resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==}
471 | cpu: [arm64]
472 | os: [win32]
473 |
474 | '@rollup/rollup-win32-ia32-msvc@4.21.2':
475 | resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==}
476 | cpu: [ia32]
477 | os: [win32]
478 |
479 | '@rollup/rollup-win32-x64-msvc@4.21.2':
480 | resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==}
481 | cpu: [x64]
482 | os: [win32]
483 |
484 | '@types/ejs@3.1.5':
485 | resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==}
486 |
487 | '@types/estree@1.0.5':
488 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
489 |
490 | '@types/fs-extra@11.0.4':
491 | resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
492 |
493 | '@types/jsonfile@6.1.4':
494 | resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
495 |
496 | '@types/node@24.9.0':
497 | resolution: {integrity: sha512-MKNwXh3seSK8WurXF7erHPJ2AONmMwkI7zAMrXZDPIru8jRqkk6rGDBVbw4mLwfqA+ZZliiDPg05JQ3uW66tKQ==}
498 |
499 | '@types/prompts@2.4.9':
500 | resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==}
501 |
502 | '@types/validate-npm-package-name@4.0.2':
503 | resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==}
504 |
505 | ajv-formats@3.0.1:
506 | resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
507 | peerDependencies:
508 | ajv: ^8.0.0
509 | peerDependenciesMeta:
510 | ajv:
511 | optional: true
512 |
513 | ajv@8.17.1:
514 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
515 |
516 | ansi-regex@5.0.1:
517 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
518 | engines: {node: '>=8'}
519 |
520 | ansi-regex@6.0.1:
521 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
522 | engines: {node: '>=12'}
523 |
524 | ansi-styles@4.3.0:
525 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
526 | engines: {node: '>=8'}
527 |
528 | ansi-styles@6.2.1:
529 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
530 | engines: {node: '>=12'}
531 |
532 | any-promise@1.3.0:
533 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
534 |
535 | anymatch@3.1.3:
536 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
537 | engines: {node: '>= 8'}
538 |
539 | array-union@2.1.0:
540 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
541 | engines: {node: '>=8'}
542 |
543 | async@3.2.6:
544 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
545 |
546 | atomically@2.0.3:
547 | resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==}
548 |
549 | balanced-match@1.0.2:
550 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
551 |
552 | binary-extensions@2.3.0:
553 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
554 | engines: {node: '>=8'}
555 |
556 | brace-expansion@1.1.11:
557 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
558 |
559 | brace-expansion@2.0.1:
560 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
561 |
562 | braces@3.0.3:
563 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
564 | engines: {node: '>=8'}
565 |
566 | bundle-require@5.0.0:
567 | resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
568 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
569 | peerDependencies:
570 | esbuild: '>=0.18'
571 |
572 | cac@6.7.14:
573 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
574 | engines: {node: '>=8'}
575 |
576 | chalk@4.1.2:
577 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
578 | engines: {node: '>=10'}
579 |
580 | chalk@5.3.0:
581 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
582 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
583 |
584 | chokidar@3.6.0:
585 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
586 | engines: {node: '>= 8.10.0'}
587 |
588 | cli-cursor@5.0.0:
589 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
590 | engines: {node: '>=18'}
591 |
592 | cli-spinners@2.9.2:
593 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
594 | engines: {node: '>=6'}
595 |
596 | color-convert@2.0.1:
597 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
598 | engines: {node: '>=7.0.0'}
599 |
600 | color-name@1.1.4:
601 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
602 |
603 | commander@12.1.0:
604 | resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
605 | engines: {node: '>=18'}
606 |
607 | commander@4.1.1:
608 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
609 | engines: {node: '>= 6'}
610 |
611 | concat-map@0.0.1:
612 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
613 |
614 | conf@15.0.2:
615 | resolution: {integrity: sha512-JBSrutapCafTrddF9dH3lc7+T2tBycGF4uPkI4Js+g4vLLEhG6RZcFi3aJd5zntdf5tQxAejJt8dihkoQ/eSJw==}
616 | engines: {node: '>=20'}
617 |
618 | consola@3.2.3:
619 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
620 | engines: {node: ^14.18.0 || >=16.10.0}
621 |
622 | cross-spawn@7.0.3:
623 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
624 | engines: {node: '>= 8'}
625 |
626 | debounce-fn@6.0.0:
627 | resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==}
628 | engines: {node: '>=18'}
629 |
630 | debug@4.3.6:
631 | resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
632 | engines: {node: '>=6.0'}
633 | peerDependencies:
634 | supports-color: '*'
635 | peerDependenciesMeta:
636 | supports-color:
637 | optional: true
638 |
639 | dir-glob@3.0.1:
640 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
641 | engines: {node: '>=8'}
642 |
643 | dot-prop@10.1.0:
644 | resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==}
645 | engines: {node: '>=20'}
646 |
647 | eastasianwidth@0.2.0:
648 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
649 |
650 | ejs@3.1.10:
651 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
652 | engines: {node: '>=0.10.0'}
653 | hasBin: true
654 |
655 | emoji-regex@10.4.0:
656 | resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
657 |
658 | emoji-regex@8.0.0:
659 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
660 |
661 | emoji-regex@9.2.2:
662 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
663 |
664 | env-paths@3.0.0:
665 | resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
666 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
667 |
668 | esbuild@0.23.1:
669 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
670 | engines: {node: '>=18'}
671 | hasBin: true
672 |
673 | esbuild@0.25.10:
674 | resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
675 | engines: {node: '>=18'}
676 | hasBin: true
677 |
678 | esno@4.8.0:
679 | resolution: {integrity: sha512-acMtooReAQGzLU0zcuEDHa8S62meh5aIyi8jboYxyvAePdmuWx2Mpwmt0xjwO0bs9/SXf+dvXJ0QJoDWw814Iw==}
680 | hasBin: true
681 |
682 | execa@5.1.1:
683 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
684 | engines: {node: '>=10'}
685 |
686 | fast-deep-equal@3.1.3:
687 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
688 |
689 | fast-glob@3.3.2:
690 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
691 | engines: {node: '>=8.6.0'}
692 |
693 | fast-uri@3.1.0:
694 | resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
695 |
696 | fastq@1.17.1:
697 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
698 |
699 | filelist@1.0.4:
700 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
701 |
702 | fill-range@7.1.1:
703 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
704 | engines: {node: '>=8'}
705 |
706 | foreground-child@3.3.0:
707 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
708 | engines: {node: '>=14'}
709 |
710 | fs-extra@11.3.2:
711 | resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
712 | engines: {node: '>=14.14'}
713 |
714 | fsevents@2.3.3:
715 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
716 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
717 | os: [darwin]
718 |
719 | get-east-asian-width@1.2.0:
720 | resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
721 | engines: {node: '>=18'}
722 |
723 | get-stream@6.0.1:
724 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
725 | engines: {node: '>=10'}
726 |
727 | get-tsconfig@4.11.0:
728 | resolution: {integrity: sha512-sNsqf7XKQ38IawiVGPOoAlqZo1DMrO7TU+ZcZwi7yLl7/7S0JwmoBMKz/IkUPhSoXM0Ng3vT0yB1iCe5XavDeQ==}
729 |
730 | glob-parent@5.1.2:
731 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
732 | engines: {node: '>= 6'}
733 |
734 | glob@10.4.5:
735 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
736 | hasBin: true
737 |
738 | globby@11.1.0:
739 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
740 | engines: {node: '>=10'}
741 |
742 | graceful-fs@4.2.11:
743 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
744 |
745 | has-flag@4.0.0:
746 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
747 | engines: {node: '>=8'}
748 |
749 | human-signals@2.1.0:
750 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
751 | engines: {node: '>=10.17.0'}
752 |
753 | ignore@5.3.2:
754 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
755 | engines: {node: '>= 4'}
756 |
757 | is-binary-path@2.1.0:
758 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
759 | engines: {node: '>=8'}
760 |
761 | is-extglob@2.1.1:
762 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
763 | engines: {node: '>=0.10.0'}
764 |
765 | is-fullwidth-code-point@3.0.0:
766 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
767 | engines: {node: '>=8'}
768 |
769 | is-glob@4.0.3:
770 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
771 | engines: {node: '>=0.10.0'}
772 |
773 | is-interactive@2.0.0:
774 | resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
775 | engines: {node: '>=12'}
776 |
777 | is-number@7.0.0:
778 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
779 | engines: {node: '>=0.12.0'}
780 |
781 | is-stream@2.0.1:
782 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
783 | engines: {node: '>=8'}
784 |
785 | is-unicode-supported@1.3.0:
786 | resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
787 | engines: {node: '>=12'}
788 |
789 | is-unicode-supported@2.0.0:
790 | resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==}
791 | engines: {node: '>=18'}
792 |
793 | isexe@2.0.0:
794 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
795 |
796 | jackspeak@3.4.3:
797 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
798 |
799 | jake@10.9.2:
800 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
801 | engines: {node: '>=10'}
802 | hasBin: true
803 |
804 | joycon@3.1.1:
805 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
806 | engines: {node: '>=10'}
807 |
808 | json-schema-traverse@1.0.0:
809 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
810 |
811 | json-schema-typed@8.0.1:
812 | resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==}
813 |
814 | jsonfile@6.2.0:
815 | resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
816 |
817 | kleur@3.0.3:
818 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
819 | engines: {node: '>=6'}
820 |
821 | lilconfig@3.1.2:
822 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
823 | engines: {node: '>=14'}
824 |
825 | lines-and-columns@1.2.4:
826 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
827 |
828 | load-tsconfig@0.2.5:
829 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
830 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
831 |
832 | lodash.sortby@4.7.0:
833 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
834 |
835 | log-symbols@6.0.0:
836 | resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
837 | engines: {node: '>=18'}
838 |
839 | lru-cache@10.4.3:
840 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
841 |
842 | merge-stream@2.0.0:
843 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
844 |
845 | merge2@1.4.1:
846 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
847 | engines: {node: '>= 8'}
848 |
849 | micromatch@4.0.8:
850 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
851 | engines: {node: '>=8.6'}
852 |
853 | mimic-fn@2.1.0:
854 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
855 | engines: {node: '>=6'}
856 |
857 | mimic-function@5.0.1:
858 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
859 | engines: {node: '>=18'}
860 |
861 | minimatch@3.1.2:
862 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
863 |
864 | minimatch@5.1.6:
865 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
866 | engines: {node: '>=10'}
867 |
868 | minimatch@9.0.5:
869 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
870 | engines: {node: '>=16 || 14 >=14.17'}
871 |
872 | minipass@7.1.2:
873 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
874 | engines: {node: '>=16 || 14 >=14.17'}
875 |
876 | ms@2.1.2:
877 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
878 |
879 | mz@2.7.0:
880 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
881 |
882 | normalize-path@3.0.0:
883 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
884 | engines: {node: '>=0.10.0'}
885 |
886 | npm-run-path@4.0.1:
887 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
888 | engines: {node: '>=8'}
889 |
890 | object-assign@4.1.1:
891 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
892 | engines: {node: '>=0.10.0'}
893 |
894 | onetime@5.1.2:
895 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
896 | engines: {node: '>=6'}
897 |
898 | onetime@7.0.0:
899 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
900 | engines: {node: '>=18'}
901 |
902 | ora@8.1.0:
903 | resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==}
904 | engines: {node: '>=18'}
905 |
906 | package-json-from-dist@1.0.0:
907 | resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
908 |
909 | path-key@3.1.1:
910 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
911 | engines: {node: '>=8'}
912 |
913 | path-scurry@1.11.1:
914 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
915 | engines: {node: '>=16 || 14 >=14.18'}
916 |
917 | path-type@4.0.0:
918 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
919 | engines: {node: '>=8'}
920 |
921 | picocolors@1.1.1:
922 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
923 |
924 | picomatch@2.3.1:
925 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
926 | engines: {node: '>=8.6'}
927 |
928 | pirates@4.0.6:
929 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
930 | engines: {node: '>= 6'}
931 |
932 | postcss-load-config@6.0.1:
933 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
934 | engines: {node: '>= 18'}
935 | peerDependencies:
936 | jiti: '>=1.21.0'
937 | postcss: '>=8.0.9'
938 | tsx: ^4.8.1
939 | yaml: ^2.4.2
940 | peerDependenciesMeta:
941 | jiti:
942 | optional: true
943 | postcss:
944 | optional: true
945 | tsx:
946 | optional: true
947 | yaml:
948 | optional: true
949 |
950 | prettier@3.3.3:
951 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
952 | engines: {node: '>=14'}
953 | hasBin: true
954 |
955 | prompts@2.4.2:
956 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
957 | engines: {node: '>= 6'}
958 |
959 | punycode@2.3.1:
960 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
961 | engines: {node: '>=6'}
962 |
963 | queue-microtask@1.2.3:
964 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
965 |
966 | readdirp@3.6.0:
967 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
968 | engines: {node: '>=8.10.0'}
969 |
970 | require-from-string@2.0.2:
971 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
972 | engines: {node: '>=0.10.0'}
973 |
974 | resolve-from@5.0.0:
975 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
976 | engines: {node: '>=8'}
977 |
978 | resolve-pkg-maps@1.0.0:
979 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
980 |
981 | restore-cursor@5.1.0:
982 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
983 | engines: {node: '>=18'}
984 |
985 | reusify@1.0.4:
986 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
987 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
988 |
989 | rollup@4.21.2:
990 | resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==}
991 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
992 | hasBin: true
993 |
994 | run-parallel@1.2.0:
995 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
996 |
997 | semver@7.7.3:
998 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
999 | engines: {node: '>=10'}
1000 | hasBin: true
1001 |
1002 | shebang-command@2.0.0:
1003 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1004 | engines: {node: '>=8'}
1005 |
1006 | shebang-regex@3.0.0:
1007 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1008 | engines: {node: '>=8'}
1009 |
1010 | signal-exit@3.0.7:
1011 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1012 |
1013 | signal-exit@4.1.0:
1014 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1015 | engines: {node: '>=14'}
1016 |
1017 | sisteransi@1.0.5:
1018 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
1019 |
1020 | slash@3.0.0:
1021 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1022 | engines: {node: '>=8'}
1023 |
1024 | source-map@0.8.0-beta.0:
1025 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
1026 | engines: {node: '>= 8'}
1027 | deprecated: The work that was done in this beta branch won't be included in future versions
1028 |
1029 | stdin-discarder@0.2.2:
1030 | resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
1031 | engines: {node: '>=18'}
1032 |
1033 | string-width@4.2.3:
1034 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1035 | engines: {node: '>=8'}
1036 |
1037 | string-width@5.1.2:
1038 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1039 | engines: {node: '>=12'}
1040 |
1041 | string-width@7.2.0:
1042 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
1043 | engines: {node: '>=18'}
1044 |
1045 | strip-ansi@6.0.1:
1046 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1047 | engines: {node: '>=8'}
1048 |
1049 | strip-ansi@7.1.0:
1050 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1051 | engines: {node: '>=12'}
1052 |
1053 | strip-final-newline@2.0.0:
1054 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
1055 | engines: {node: '>=6'}
1056 |
1057 | stubborn-fs@1.2.5:
1058 | resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==}
1059 |
1060 | sucrase@3.35.0:
1061 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1062 | engines: {node: '>=16 || 14 >=14.17'}
1063 | hasBin: true
1064 |
1065 | supports-color@7.2.0:
1066 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1067 | engines: {node: '>=8'}
1068 |
1069 | tagged-tag@1.0.0:
1070 | resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
1071 | engines: {node: '>=20'}
1072 |
1073 | thenify-all@1.6.0:
1074 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1075 | engines: {node: '>=0.8'}
1076 |
1077 | thenify@3.3.1:
1078 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1079 |
1080 | to-regex-range@5.0.1:
1081 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1082 | engines: {node: '>=8.0'}
1083 |
1084 | tr46@1.0.1:
1085 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
1086 |
1087 | tree-kill@1.2.2:
1088 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1089 | hasBin: true
1090 |
1091 | ts-interface-checker@0.1.13:
1092 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1093 |
1094 | tsup@8.2.4:
1095 | resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==}
1096 | engines: {node: '>=18'}
1097 | hasBin: true
1098 | peerDependencies:
1099 | '@microsoft/api-extractor': ^7.36.0
1100 | '@swc/core': ^1
1101 | postcss: ^8.4.12
1102 | typescript: '>=4.5.0'
1103 | peerDependenciesMeta:
1104 | '@microsoft/api-extractor':
1105 | optional: true
1106 | '@swc/core':
1107 | optional: true
1108 | postcss:
1109 | optional: true
1110 | typescript:
1111 | optional: true
1112 |
1113 | tsx@4.20.6:
1114 | resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==}
1115 | engines: {node: '>=18.0.0'}
1116 | hasBin: true
1117 |
1118 | type-fest@5.1.0:
1119 | resolution: {integrity: sha512-wQ531tuWvB6oK+pchHIu5lHe5f5wpSCqB8Kf4dWQRbOYc9HTge7JL0G4Qd44bh6QuJCccIzL3bugb8GI0MwHrg==}
1120 | engines: {node: '>=20'}
1121 |
1122 | typescript@5.5.4:
1123 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
1124 | engines: {node: '>=14.17'}
1125 | hasBin: true
1126 |
1127 | uint8array-extras@1.5.0:
1128 | resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
1129 | engines: {node: '>=18'}
1130 |
1131 | undici-types@7.16.0:
1132 | resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
1133 |
1134 | universalify@2.0.1:
1135 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
1136 | engines: {node: '>= 10.0.0'}
1137 |
1138 | validate-npm-package-name@7.0.0:
1139 | resolution: {integrity: sha512-bwVk/OK+Qu108aJcMAEiU4yavHUI7aN20TgZNBj9MR2iU1zPUl1Z1Otr7771ExfYTPTvfN8ZJ1pbr5Iklgt4xg==}
1140 | engines: {node: ^20.17.0 || >=22.9.0}
1141 |
1142 | webidl-conversions@4.0.2:
1143 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
1144 |
1145 | whatwg-url@7.1.0:
1146 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
1147 |
1148 | when-exit@2.1.4:
1149 | resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==}
1150 |
1151 | which@2.0.2:
1152 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1153 | engines: {node: '>= 8'}
1154 | hasBin: true
1155 |
1156 | wrap-ansi@7.0.0:
1157 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1158 | engines: {node: '>=10'}
1159 |
1160 | wrap-ansi@8.1.0:
1161 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1162 | engines: {node: '>=12'}
1163 |
1164 | snapshots:
1165 |
1166 | '@esbuild/aix-ppc64@0.23.1':
1167 | optional: true
1168 |
1169 | '@esbuild/aix-ppc64@0.25.10':
1170 | optional: true
1171 |
1172 | '@esbuild/android-arm64@0.23.1':
1173 | optional: true
1174 |
1175 | '@esbuild/android-arm64@0.25.10':
1176 | optional: true
1177 |
1178 | '@esbuild/android-arm@0.23.1':
1179 | optional: true
1180 |
1181 | '@esbuild/android-arm@0.25.10':
1182 | optional: true
1183 |
1184 | '@esbuild/android-x64@0.23.1':
1185 | optional: true
1186 |
1187 | '@esbuild/android-x64@0.25.10':
1188 | optional: true
1189 |
1190 | '@esbuild/darwin-arm64@0.23.1':
1191 | optional: true
1192 |
1193 | '@esbuild/darwin-arm64@0.25.10':
1194 | optional: true
1195 |
1196 | '@esbuild/darwin-x64@0.23.1':
1197 | optional: true
1198 |
1199 | '@esbuild/darwin-x64@0.25.10':
1200 | optional: true
1201 |
1202 | '@esbuild/freebsd-arm64@0.23.1':
1203 | optional: true
1204 |
1205 | '@esbuild/freebsd-arm64@0.25.10':
1206 | optional: true
1207 |
1208 | '@esbuild/freebsd-x64@0.23.1':
1209 | optional: true
1210 |
1211 | '@esbuild/freebsd-x64@0.25.10':
1212 | optional: true
1213 |
1214 | '@esbuild/linux-arm64@0.23.1':
1215 | optional: true
1216 |
1217 | '@esbuild/linux-arm64@0.25.10':
1218 | optional: true
1219 |
1220 | '@esbuild/linux-arm@0.23.1':
1221 | optional: true
1222 |
1223 | '@esbuild/linux-arm@0.25.10':
1224 | optional: true
1225 |
1226 | '@esbuild/linux-ia32@0.23.1':
1227 | optional: true
1228 |
1229 | '@esbuild/linux-ia32@0.25.10':
1230 | optional: true
1231 |
1232 | '@esbuild/linux-loong64@0.23.1':
1233 | optional: true
1234 |
1235 | '@esbuild/linux-loong64@0.25.10':
1236 | optional: true
1237 |
1238 | '@esbuild/linux-mips64el@0.23.1':
1239 | optional: true
1240 |
1241 | '@esbuild/linux-mips64el@0.25.10':
1242 | optional: true
1243 |
1244 | '@esbuild/linux-ppc64@0.23.1':
1245 | optional: true
1246 |
1247 | '@esbuild/linux-ppc64@0.25.10':
1248 | optional: true
1249 |
1250 | '@esbuild/linux-riscv64@0.23.1':
1251 | optional: true
1252 |
1253 | '@esbuild/linux-riscv64@0.25.10':
1254 | optional: true
1255 |
1256 | '@esbuild/linux-s390x@0.23.1':
1257 | optional: true
1258 |
1259 | '@esbuild/linux-s390x@0.25.10':
1260 | optional: true
1261 |
1262 | '@esbuild/linux-x64@0.23.1':
1263 | optional: true
1264 |
1265 | '@esbuild/linux-x64@0.25.10':
1266 | optional: true
1267 |
1268 | '@esbuild/netbsd-arm64@0.25.10':
1269 | optional: true
1270 |
1271 | '@esbuild/netbsd-x64@0.23.1':
1272 | optional: true
1273 |
1274 | '@esbuild/netbsd-x64@0.25.10':
1275 | optional: true
1276 |
1277 | '@esbuild/openbsd-arm64@0.23.1':
1278 | optional: true
1279 |
1280 | '@esbuild/openbsd-arm64@0.25.10':
1281 | optional: true
1282 |
1283 | '@esbuild/openbsd-x64@0.23.1':
1284 | optional: true
1285 |
1286 | '@esbuild/openbsd-x64@0.25.10':
1287 | optional: true
1288 |
1289 | '@esbuild/openharmony-arm64@0.25.10':
1290 | optional: true
1291 |
1292 | '@esbuild/sunos-x64@0.23.1':
1293 | optional: true
1294 |
1295 | '@esbuild/sunos-x64@0.25.10':
1296 | optional: true
1297 |
1298 | '@esbuild/win32-arm64@0.23.1':
1299 | optional: true
1300 |
1301 | '@esbuild/win32-arm64@0.25.10':
1302 | optional: true
1303 |
1304 | '@esbuild/win32-ia32@0.23.1':
1305 | optional: true
1306 |
1307 | '@esbuild/win32-ia32@0.25.10':
1308 | optional: true
1309 |
1310 | '@esbuild/win32-x64@0.23.1':
1311 | optional: true
1312 |
1313 | '@esbuild/win32-x64@0.25.10':
1314 | optional: true
1315 |
1316 | '@isaacs/cliui@8.0.2':
1317 | dependencies:
1318 | string-width: 5.1.2
1319 | string-width-cjs: string-width@4.2.3
1320 | strip-ansi: 7.1.0
1321 | strip-ansi-cjs: strip-ansi@6.0.1
1322 | wrap-ansi: 8.1.0
1323 | wrap-ansi-cjs: wrap-ansi@7.0.0
1324 |
1325 | '@jridgewell/gen-mapping@0.3.5':
1326 | dependencies:
1327 | '@jridgewell/set-array': 1.2.1
1328 | '@jridgewell/sourcemap-codec': 1.5.0
1329 | '@jridgewell/trace-mapping': 0.3.25
1330 |
1331 | '@jridgewell/resolve-uri@3.1.2': {}
1332 |
1333 | '@jridgewell/set-array@1.2.1': {}
1334 |
1335 | '@jridgewell/sourcemap-codec@1.5.0': {}
1336 |
1337 | '@jridgewell/trace-mapping@0.3.25':
1338 | dependencies:
1339 | '@jridgewell/resolve-uri': 3.1.2
1340 | '@jridgewell/sourcemap-codec': 1.5.0
1341 |
1342 | '@nodelib/fs.scandir@2.1.5':
1343 | dependencies:
1344 | '@nodelib/fs.stat': 2.0.5
1345 | run-parallel: 1.2.0
1346 |
1347 | '@nodelib/fs.stat@2.0.5': {}
1348 |
1349 | '@nodelib/fs.walk@1.2.8':
1350 | dependencies:
1351 | '@nodelib/fs.scandir': 2.1.5
1352 | fastq: 1.17.1
1353 |
1354 | '@pkgjs/parseargs@0.11.0':
1355 | optional: true
1356 |
1357 | '@rollup/rollup-android-arm-eabi@4.21.2':
1358 | optional: true
1359 |
1360 | '@rollup/rollup-android-arm64@4.21.2':
1361 | optional: true
1362 |
1363 | '@rollup/rollup-darwin-arm64@4.21.2':
1364 | optional: true
1365 |
1366 | '@rollup/rollup-darwin-x64@4.21.2':
1367 | optional: true
1368 |
1369 | '@rollup/rollup-linux-arm-gnueabihf@4.21.2':
1370 | optional: true
1371 |
1372 | '@rollup/rollup-linux-arm-musleabihf@4.21.2':
1373 | optional: true
1374 |
1375 | '@rollup/rollup-linux-arm64-gnu@4.21.2':
1376 | optional: true
1377 |
1378 | '@rollup/rollup-linux-arm64-musl@4.21.2':
1379 | optional: true
1380 |
1381 | '@rollup/rollup-linux-powerpc64le-gnu@4.21.2':
1382 | optional: true
1383 |
1384 | '@rollup/rollup-linux-riscv64-gnu@4.21.2':
1385 | optional: true
1386 |
1387 | '@rollup/rollup-linux-s390x-gnu@4.21.2':
1388 | optional: true
1389 |
1390 | '@rollup/rollup-linux-x64-gnu@4.21.2':
1391 | optional: true
1392 |
1393 | '@rollup/rollup-linux-x64-musl@4.21.2':
1394 | optional: true
1395 |
1396 | '@rollup/rollup-win32-arm64-msvc@4.21.2':
1397 | optional: true
1398 |
1399 | '@rollup/rollup-win32-ia32-msvc@4.21.2':
1400 | optional: true
1401 |
1402 | '@rollup/rollup-win32-x64-msvc@4.21.2':
1403 | optional: true
1404 |
1405 | '@types/ejs@3.1.5': {}
1406 |
1407 | '@types/estree@1.0.5': {}
1408 |
1409 | '@types/fs-extra@11.0.4':
1410 | dependencies:
1411 | '@types/jsonfile': 6.1.4
1412 | '@types/node': 24.9.0
1413 |
1414 | '@types/jsonfile@6.1.4':
1415 | dependencies:
1416 | '@types/node': 24.9.0
1417 |
1418 | '@types/node@24.9.0':
1419 | dependencies:
1420 | undici-types: 7.16.0
1421 |
1422 | '@types/prompts@2.4.9':
1423 | dependencies:
1424 | '@types/node': 24.9.0
1425 | kleur: 3.0.3
1426 |
1427 | '@types/validate-npm-package-name@4.0.2': {}
1428 |
1429 | ajv-formats@3.0.1(ajv@8.17.1):
1430 | optionalDependencies:
1431 | ajv: 8.17.1
1432 |
1433 | ajv@8.17.1:
1434 | dependencies:
1435 | fast-deep-equal: 3.1.3
1436 | fast-uri: 3.1.0
1437 | json-schema-traverse: 1.0.0
1438 | require-from-string: 2.0.2
1439 |
1440 | ansi-regex@5.0.1: {}
1441 |
1442 | ansi-regex@6.0.1: {}
1443 |
1444 | ansi-styles@4.3.0:
1445 | dependencies:
1446 | color-convert: 2.0.1
1447 |
1448 | ansi-styles@6.2.1: {}
1449 |
1450 | any-promise@1.3.0: {}
1451 |
1452 | anymatch@3.1.3:
1453 | dependencies:
1454 | normalize-path: 3.0.0
1455 | picomatch: 2.3.1
1456 |
1457 | array-union@2.1.0: {}
1458 |
1459 | async@3.2.6: {}
1460 |
1461 | atomically@2.0.3:
1462 | dependencies:
1463 | stubborn-fs: 1.2.5
1464 | when-exit: 2.1.4
1465 |
1466 | balanced-match@1.0.2: {}
1467 |
1468 | binary-extensions@2.3.0: {}
1469 |
1470 | brace-expansion@1.1.11:
1471 | dependencies:
1472 | balanced-match: 1.0.2
1473 | concat-map: 0.0.1
1474 |
1475 | brace-expansion@2.0.1:
1476 | dependencies:
1477 | balanced-match: 1.0.2
1478 |
1479 | braces@3.0.3:
1480 | dependencies:
1481 | fill-range: 7.1.1
1482 |
1483 | bundle-require@5.0.0(esbuild@0.23.1):
1484 | dependencies:
1485 | esbuild: 0.23.1
1486 | load-tsconfig: 0.2.5
1487 |
1488 | cac@6.7.14: {}
1489 |
1490 | chalk@4.1.2:
1491 | dependencies:
1492 | ansi-styles: 4.3.0
1493 | supports-color: 7.2.0
1494 |
1495 | chalk@5.3.0: {}
1496 |
1497 | chokidar@3.6.0:
1498 | dependencies:
1499 | anymatch: 3.1.3
1500 | braces: 3.0.3
1501 | glob-parent: 5.1.2
1502 | is-binary-path: 2.1.0
1503 | is-glob: 4.0.3
1504 | normalize-path: 3.0.0
1505 | readdirp: 3.6.0
1506 | optionalDependencies:
1507 | fsevents: 2.3.3
1508 |
1509 | cli-cursor@5.0.0:
1510 | dependencies:
1511 | restore-cursor: 5.1.0
1512 |
1513 | cli-spinners@2.9.2: {}
1514 |
1515 | color-convert@2.0.1:
1516 | dependencies:
1517 | color-name: 1.1.4
1518 |
1519 | color-name@1.1.4: {}
1520 |
1521 | commander@12.1.0: {}
1522 |
1523 | commander@4.1.1: {}
1524 |
1525 | concat-map@0.0.1: {}
1526 |
1527 | conf@15.0.2:
1528 | dependencies:
1529 | ajv: 8.17.1
1530 | ajv-formats: 3.0.1(ajv@8.17.1)
1531 | atomically: 2.0.3
1532 | debounce-fn: 6.0.0
1533 | dot-prop: 10.1.0
1534 | env-paths: 3.0.0
1535 | json-schema-typed: 8.0.1
1536 | semver: 7.7.3
1537 | uint8array-extras: 1.5.0
1538 |
1539 | consola@3.2.3: {}
1540 |
1541 | cross-spawn@7.0.3:
1542 | dependencies:
1543 | path-key: 3.1.1
1544 | shebang-command: 2.0.0
1545 | which: 2.0.2
1546 |
1547 | debounce-fn@6.0.0:
1548 | dependencies:
1549 | mimic-function: 5.0.1
1550 |
1551 | debug@4.3.6:
1552 | dependencies:
1553 | ms: 2.1.2
1554 |
1555 | dir-glob@3.0.1:
1556 | dependencies:
1557 | path-type: 4.0.0
1558 |
1559 | dot-prop@10.1.0:
1560 | dependencies:
1561 | type-fest: 5.1.0
1562 |
1563 | eastasianwidth@0.2.0: {}
1564 |
1565 | ejs@3.1.10:
1566 | dependencies:
1567 | jake: 10.9.2
1568 |
1569 | emoji-regex@10.4.0: {}
1570 |
1571 | emoji-regex@8.0.0: {}
1572 |
1573 | emoji-regex@9.2.2: {}
1574 |
1575 | env-paths@3.0.0: {}
1576 |
1577 | esbuild@0.23.1:
1578 | optionalDependencies:
1579 | '@esbuild/aix-ppc64': 0.23.1
1580 | '@esbuild/android-arm': 0.23.1
1581 | '@esbuild/android-arm64': 0.23.1
1582 | '@esbuild/android-x64': 0.23.1
1583 | '@esbuild/darwin-arm64': 0.23.1
1584 | '@esbuild/darwin-x64': 0.23.1
1585 | '@esbuild/freebsd-arm64': 0.23.1
1586 | '@esbuild/freebsd-x64': 0.23.1
1587 | '@esbuild/linux-arm': 0.23.1
1588 | '@esbuild/linux-arm64': 0.23.1
1589 | '@esbuild/linux-ia32': 0.23.1
1590 | '@esbuild/linux-loong64': 0.23.1
1591 | '@esbuild/linux-mips64el': 0.23.1
1592 | '@esbuild/linux-ppc64': 0.23.1
1593 | '@esbuild/linux-riscv64': 0.23.1
1594 | '@esbuild/linux-s390x': 0.23.1
1595 | '@esbuild/linux-x64': 0.23.1
1596 | '@esbuild/netbsd-x64': 0.23.1
1597 | '@esbuild/openbsd-arm64': 0.23.1
1598 | '@esbuild/openbsd-x64': 0.23.1
1599 | '@esbuild/sunos-x64': 0.23.1
1600 | '@esbuild/win32-arm64': 0.23.1
1601 | '@esbuild/win32-ia32': 0.23.1
1602 | '@esbuild/win32-x64': 0.23.1
1603 |
1604 | esbuild@0.25.10:
1605 | optionalDependencies:
1606 | '@esbuild/aix-ppc64': 0.25.10
1607 | '@esbuild/android-arm': 0.25.10
1608 | '@esbuild/android-arm64': 0.25.10
1609 | '@esbuild/android-x64': 0.25.10
1610 | '@esbuild/darwin-arm64': 0.25.10
1611 | '@esbuild/darwin-x64': 0.25.10
1612 | '@esbuild/freebsd-arm64': 0.25.10
1613 | '@esbuild/freebsd-x64': 0.25.10
1614 | '@esbuild/linux-arm': 0.25.10
1615 | '@esbuild/linux-arm64': 0.25.10
1616 | '@esbuild/linux-ia32': 0.25.10
1617 | '@esbuild/linux-loong64': 0.25.10
1618 | '@esbuild/linux-mips64el': 0.25.10
1619 | '@esbuild/linux-ppc64': 0.25.10
1620 | '@esbuild/linux-riscv64': 0.25.10
1621 | '@esbuild/linux-s390x': 0.25.10
1622 | '@esbuild/linux-x64': 0.25.10
1623 | '@esbuild/netbsd-arm64': 0.25.10
1624 | '@esbuild/netbsd-x64': 0.25.10
1625 | '@esbuild/openbsd-arm64': 0.25.10
1626 | '@esbuild/openbsd-x64': 0.25.10
1627 | '@esbuild/openharmony-arm64': 0.25.10
1628 | '@esbuild/sunos-x64': 0.25.10
1629 | '@esbuild/win32-arm64': 0.25.10
1630 | '@esbuild/win32-ia32': 0.25.10
1631 | '@esbuild/win32-x64': 0.25.10
1632 |
1633 | esno@4.8.0:
1634 | dependencies:
1635 | tsx: 4.20.6
1636 |
1637 | execa@5.1.1:
1638 | dependencies:
1639 | cross-spawn: 7.0.3
1640 | get-stream: 6.0.1
1641 | human-signals: 2.1.0
1642 | is-stream: 2.0.1
1643 | merge-stream: 2.0.0
1644 | npm-run-path: 4.0.1
1645 | onetime: 5.1.2
1646 | signal-exit: 3.0.7
1647 | strip-final-newline: 2.0.0
1648 |
1649 | fast-deep-equal@3.1.3: {}
1650 |
1651 | fast-glob@3.3.2:
1652 | dependencies:
1653 | '@nodelib/fs.stat': 2.0.5
1654 | '@nodelib/fs.walk': 1.2.8
1655 | glob-parent: 5.1.2
1656 | merge2: 1.4.1
1657 | micromatch: 4.0.8
1658 |
1659 | fast-uri@3.1.0: {}
1660 |
1661 | fastq@1.17.1:
1662 | dependencies:
1663 | reusify: 1.0.4
1664 |
1665 | filelist@1.0.4:
1666 | dependencies:
1667 | minimatch: 5.1.6
1668 |
1669 | fill-range@7.1.1:
1670 | dependencies:
1671 | to-regex-range: 5.0.1
1672 |
1673 | foreground-child@3.3.0:
1674 | dependencies:
1675 | cross-spawn: 7.0.3
1676 | signal-exit: 4.1.0
1677 |
1678 | fs-extra@11.3.2:
1679 | dependencies:
1680 | graceful-fs: 4.2.11
1681 | jsonfile: 6.2.0
1682 | universalify: 2.0.1
1683 |
1684 | fsevents@2.3.3:
1685 | optional: true
1686 |
1687 | get-east-asian-width@1.2.0: {}
1688 |
1689 | get-stream@6.0.1: {}
1690 |
1691 | get-tsconfig@4.11.0:
1692 | dependencies:
1693 | resolve-pkg-maps: 1.0.0
1694 |
1695 | glob-parent@5.1.2:
1696 | dependencies:
1697 | is-glob: 4.0.3
1698 |
1699 | glob@10.4.5:
1700 | dependencies:
1701 | foreground-child: 3.3.0
1702 | jackspeak: 3.4.3
1703 | minimatch: 9.0.5
1704 | minipass: 7.1.2
1705 | package-json-from-dist: 1.0.0
1706 | path-scurry: 1.11.1
1707 |
1708 | globby@11.1.0:
1709 | dependencies:
1710 | array-union: 2.1.0
1711 | dir-glob: 3.0.1
1712 | fast-glob: 3.3.2
1713 | ignore: 5.3.2
1714 | merge2: 1.4.1
1715 | slash: 3.0.0
1716 |
1717 | graceful-fs@4.2.11: {}
1718 |
1719 | has-flag@4.0.0: {}
1720 |
1721 | human-signals@2.1.0: {}
1722 |
1723 | ignore@5.3.2: {}
1724 |
1725 | is-binary-path@2.1.0:
1726 | dependencies:
1727 | binary-extensions: 2.3.0
1728 |
1729 | is-extglob@2.1.1: {}
1730 |
1731 | is-fullwidth-code-point@3.0.0: {}
1732 |
1733 | is-glob@4.0.3:
1734 | dependencies:
1735 | is-extglob: 2.1.1
1736 |
1737 | is-interactive@2.0.0: {}
1738 |
1739 | is-number@7.0.0: {}
1740 |
1741 | is-stream@2.0.1: {}
1742 |
1743 | is-unicode-supported@1.3.0: {}
1744 |
1745 | is-unicode-supported@2.0.0: {}
1746 |
1747 | isexe@2.0.0: {}
1748 |
1749 | jackspeak@3.4.3:
1750 | dependencies:
1751 | '@isaacs/cliui': 8.0.2
1752 | optionalDependencies:
1753 | '@pkgjs/parseargs': 0.11.0
1754 |
1755 | jake@10.9.2:
1756 | dependencies:
1757 | async: 3.2.6
1758 | chalk: 4.1.2
1759 | filelist: 1.0.4
1760 | minimatch: 3.1.2
1761 |
1762 | joycon@3.1.1: {}
1763 |
1764 | json-schema-traverse@1.0.0: {}
1765 |
1766 | json-schema-typed@8.0.1: {}
1767 |
1768 | jsonfile@6.2.0:
1769 | dependencies:
1770 | universalify: 2.0.1
1771 | optionalDependencies:
1772 | graceful-fs: 4.2.11
1773 |
1774 | kleur@3.0.3: {}
1775 |
1776 | lilconfig@3.1.2: {}
1777 |
1778 | lines-and-columns@1.2.4: {}
1779 |
1780 | load-tsconfig@0.2.5: {}
1781 |
1782 | lodash.sortby@4.7.0: {}
1783 |
1784 | log-symbols@6.0.0:
1785 | dependencies:
1786 | chalk: 5.3.0
1787 | is-unicode-supported: 1.3.0
1788 |
1789 | lru-cache@10.4.3: {}
1790 |
1791 | merge-stream@2.0.0: {}
1792 |
1793 | merge2@1.4.1: {}
1794 |
1795 | micromatch@4.0.8:
1796 | dependencies:
1797 | braces: 3.0.3
1798 | picomatch: 2.3.1
1799 |
1800 | mimic-fn@2.1.0: {}
1801 |
1802 | mimic-function@5.0.1: {}
1803 |
1804 | minimatch@3.1.2:
1805 | dependencies:
1806 | brace-expansion: 1.1.11
1807 |
1808 | minimatch@5.1.6:
1809 | dependencies:
1810 | brace-expansion: 2.0.1
1811 |
1812 | minimatch@9.0.5:
1813 | dependencies:
1814 | brace-expansion: 2.0.1
1815 |
1816 | minipass@7.1.2: {}
1817 |
1818 | ms@2.1.2: {}
1819 |
1820 | mz@2.7.0:
1821 | dependencies:
1822 | any-promise: 1.3.0
1823 | object-assign: 4.1.1
1824 | thenify-all: 1.6.0
1825 |
1826 | normalize-path@3.0.0: {}
1827 |
1828 | npm-run-path@4.0.1:
1829 | dependencies:
1830 | path-key: 3.1.1
1831 |
1832 | object-assign@4.1.1: {}
1833 |
1834 | onetime@5.1.2:
1835 | dependencies:
1836 | mimic-fn: 2.1.0
1837 |
1838 | onetime@7.0.0:
1839 | dependencies:
1840 | mimic-function: 5.0.1
1841 |
1842 | ora@8.1.0:
1843 | dependencies:
1844 | chalk: 5.3.0
1845 | cli-cursor: 5.0.0
1846 | cli-spinners: 2.9.2
1847 | is-interactive: 2.0.0
1848 | is-unicode-supported: 2.0.0
1849 | log-symbols: 6.0.0
1850 | stdin-discarder: 0.2.2
1851 | string-width: 7.2.0
1852 | strip-ansi: 7.1.0
1853 |
1854 | package-json-from-dist@1.0.0: {}
1855 |
1856 | path-key@3.1.1: {}
1857 |
1858 | path-scurry@1.11.1:
1859 | dependencies:
1860 | lru-cache: 10.4.3
1861 | minipass: 7.1.2
1862 |
1863 | path-type@4.0.0: {}
1864 |
1865 | picocolors@1.1.1: {}
1866 |
1867 | picomatch@2.3.1: {}
1868 |
1869 | pirates@4.0.6: {}
1870 |
1871 | postcss-load-config@6.0.1(tsx@4.20.6):
1872 | dependencies:
1873 | lilconfig: 3.1.2
1874 | optionalDependencies:
1875 | tsx: 4.20.6
1876 |
1877 | prettier@3.3.3: {}
1878 |
1879 | prompts@2.4.2:
1880 | dependencies:
1881 | kleur: 3.0.3
1882 | sisteransi: 1.0.5
1883 |
1884 | punycode@2.3.1: {}
1885 |
1886 | queue-microtask@1.2.3: {}
1887 |
1888 | readdirp@3.6.0:
1889 | dependencies:
1890 | picomatch: 2.3.1
1891 |
1892 | require-from-string@2.0.2: {}
1893 |
1894 | resolve-from@5.0.0: {}
1895 |
1896 | resolve-pkg-maps@1.0.0: {}
1897 |
1898 | restore-cursor@5.1.0:
1899 | dependencies:
1900 | onetime: 7.0.0
1901 | signal-exit: 4.1.0
1902 |
1903 | reusify@1.0.4: {}
1904 |
1905 | rollup@4.21.2:
1906 | dependencies:
1907 | '@types/estree': 1.0.5
1908 | optionalDependencies:
1909 | '@rollup/rollup-android-arm-eabi': 4.21.2
1910 | '@rollup/rollup-android-arm64': 4.21.2
1911 | '@rollup/rollup-darwin-arm64': 4.21.2
1912 | '@rollup/rollup-darwin-x64': 4.21.2
1913 | '@rollup/rollup-linux-arm-gnueabihf': 4.21.2
1914 | '@rollup/rollup-linux-arm-musleabihf': 4.21.2
1915 | '@rollup/rollup-linux-arm64-gnu': 4.21.2
1916 | '@rollup/rollup-linux-arm64-musl': 4.21.2
1917 | '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2
1918 | '@rollup/rollup-linux-riscv64-gnu': 4.21.2
1919 | '@rollup/rollup-linux-s390x-gnu': 4.21.2
1920 | '@rollup/rollup-linux-x64-gnu': 4.21.2
1921 | '@rollup/rollup-linux-x64-musl': 4.21.2
1922 | '@rollup/rollup-win32-arm64-msvc': 4.21.2
1923 | '@rollup/rollup-win32-ia32-msvc': 4.21.2
1924 | '@rollup/rollup-win32-x64-msvc': 4.21.2
1925 | fsevents: 2.3.3
1926 |
1927 | run-parallel@1.2.0:
1928 | dependencies:
1929 | queue-microtask: 1.2.3
1930 |
1931 | semver@7.7.3: {}
1932 |
1933 | shebang-command@2.0.0:
1934 | dependencies:
1935 | shebang-regex: 3.0.0
1936 |
1937 | shebang-regex@3.0.0: {}
1938 |
1939 | signal-exit@3.0.7: {}
1940 |
1941 | signal-exit@4.1.0: {}
1942 |
1943 | sisteransi@1.0.5: {}
1944 |
1945 | slash@3.0.0: {}
1946 |
1947 | source-map@0.8.0-beta.0:
1948 | dependencies:
1949 | whatwg-url: 7.1.0
1950 |
1951 | stdin-discarder@0.2.2: {}
1952 |
1953 | string-width@4.2.3:
1954 | dependencies:
1955 | emoji-regex: 8.0.0
1956 | is-fullwidth-code-point: 3.0.0
1957 | strip-ansi: 6.0.1
1958 |
1959 | string-width@5.1.2:
1960 | dependencies:
1961 | eastasianwidth: 0.2.0
1962 | emoji-regex: 9.2.2
1963 | strip-ansi: 7.1.0
1964 |
1965 | string-width@7.2.0:
1966 | dependencies:
1967 | emoji-regex: 10.4.0
1968 | get-east-asian-width: 1.2.0
1969 | strip-ansi: 7.1.0
1970 |
1971 | strip-ansi@6.0.1:
1972 | dependencies:
1973 | ansi-regex: 5.0.1
1974 |
1975 | strip-ansi@7.1.0:
1976 | dependencies:
1977 | ansi-regex: 6.0.1
1978 |
1979 | strip-final-newline@2.0.0: {}
1980 |
1981 | stubborn-fs@1.2.5: {}
1982 |
1983 | sucrase@3.35.0:
1984 | dependencies:
1985 | '@jridgewell/gen-mapping': 0.3.5
1986 | commander: 4.1.1
1987 | glob: 10.4.5
1988 | lines-and-columns: 1.2.4
1989 | mz: 2.7.0
1990 | pirates: 4.0.6
1991 | ts-interface-checker: 0.1.13
1992 |
1993 | supports-color@7.2.0:
1994 | dependencies:
1995 | has-flag: 4.0.0
1996 |
1997 | tagged-tag@1.0.0: {}
1998 |
1999 | thenify-all@1.6.0:
2000 | dependencies:
2001 | thenify: 3.3.1
2002 |
2003 | thenify@3.3.1:
2004 | dependencies:
2005 | any-promise: 1.3.0
2006 |
2007 | to-regex-range@5.0.1:
2008 | dependencies:
2009 | is-number: 7.0.0
2010 |
2011 | tr46@1.0.1:
2012 | dependencies:
2013 | punycode: 2.3.1
2014 |
2015 | tree-kill@1.2.2: {}
2016 |
2017 | ts-interface-checker@0.1.13: {}
2018 |
2019 | tsup@8.2.4(tsx@4.20.6)(typescript@5.5.4):
2020 | dependencies:
2021 | bundle-require: 5.0.0(esbuild@0.23.1)
2022 | cac: 6.7.14
2023 | chokidar: 3.6.0
2024 | consola: 3.2.3
2025 | debug: 4.3.6
2026 | esbuild: 0.23.1
2027 | execa: 5.1.1
2028 | globby: 11.1.0
2029 | joycon: 3.1.1
2030 | picocolors: 1.1.1
2031 | postcss-load-config: 6.0.1(tsx@4.20.6)
2032 | resolve-from: 5.0.0
2033 | rollup: 4.21.2
2034 | source-map: 0.8.0-beta.0
2035 | sucrase: 3.35.0
2036 | tree-kill: 1.2.2
2037 | optionalDependencies:
2038 | typescript: 5.5.4
2039 | transitivePeerDependencies:
2040 | - jiti
2041 | - supports-color
2042 | - tsx
2043 | - yaml
2044 |
2045 | tsx@4.20.6:
2046 | dependencies:
2047 | esbuild: 0.25.10
2048 | get-tsconfig: 4.11.0
2049 | optionalDependencies:
2050 | fsevents: 2.3.3
2051 |
2052 | type-fest@5.1.0:
2053 | dependencies:
2054 | tagged-tag: 1.0.0
2055 |
2056 | typescript@5.5.4: {}
2057 |
2058 | uint8array-extras@1.5.0: {}
2059 |
2060 | undici-types@7.16.0: {}
2061 |
2062 | universalify@2.0.1: {}
2063 |
2064 | validate-npm-package-name@7.0.0: {}
2065 |
2066 | webidl-conversions@4.0.2: {}
2067 |
2068 | whatwg-url@7.1.0:
2069 | dependencies:
2070 | lodash.sortby: 4.7.0
2071 | tr46: 1.0.1
2072 | webidl-conversions: 4.0.2
2073 |
2074 | when-exit@2.1.4: {}
2075 |
2076 | which@2.0.2:
2077 | dependencies:
2078 | isexe: 2.0.0
2079 |
2080 | wrap-ansi@7.0.0:
2081 | dependencies:
2082 | ansi-styles: 4.3.0
2083 | string-width: 4.2.3
2084 | strip-ansi: 6.0.1
2085 |
2086 | wrap-ansi@8.1.0:
2087 | dependencies:
2088 | ansi-styles: 6.2.1
2089 | string-width: 5.1.2
2090 | strip-ansi: 7.1.0
2091 |
--------------------------------------------------------------------------------