diff --git a/.changeset/selfish-wasps-burn.md b/.changeset/selfish-wasps-burn.md new file mode 100644 index 000000000..846940052 --- /dev/null +++ b/.changeset/selfish-wasps-burn.md @@ -0,0 +1,5 @@ +--- +"@tma.js/create-mini-app": minor +--- + +Add interactive template selection diff --git a/packages/create-mini-app/package.json b/packages/create-mini-app/package.json index d86070342..ee1a50a63 100644 --- a/packages/create-mini-app/package.json +++ b/packages/create-mini-app/package.json @@ -43,9 +43,11 @@ "access": "public" }, "dependencies": { + "@inquirer/prompts": "^4.3.2", + "ansi-escapes": "^6.2.1", "chalk": "^5.3.0", "commander": "^12.0.0", - "inquirer": "^9.2.15", + "figures": "^6.1.0", "ora": "^8.0.1" } } diff --git a/packages/create-mini-app/src/cloneTemplate.ts b/packages/create-mini-app/src/cloneTemplate.ts index ca9ba3a65..30c976785 100644 --- a/packages/create-mini-app/src/cloneTemplate.ts +++ b/packages/create-mini-app/src/cloneTemplate.ts @@ -1,7 +1,7 @@ import chalk from 'chalk'; import { spawnWithSpinner } from './spawnWithSpinner.js'; -import type { TemplateRepository } from './templates.js'; +import type { TemplateRepository } from './types.js'; const { bold, blue, red } = chalk; @@ -22,6 +22,8 @@ export async function cloneTemplate( link, }: TemplateRepository, ): Promise { + const titleSuccess = bold(`Template was cloned: ${blue(link)}`); + // Clone the template using https. try { await spawnWithSpinner({ @@ -34,7 +36,7 @@ export async function cloneTemplate( : `Error code: ${red(outputOrCode)}` }`; }, - titleSuccess: `Cloned the template: ${bold(blue(link))}`, + titleSuccess, }); return; } catch (e) { /* empty */ @@ -51,6 +53,6 @@ export async function cloneTemplate( : `Error code: ${red(outputOrCode)}` }`; }, - titleSuccess: `Cloned the template: ${bold(blue(link))}`, + titleSuccess, }); } diff --git a/packages/create-mini-app/src/index.ts b/packages/create-mini-app/src/index.ts index 09263ff38..0ccb142f4 100644 --- a/packages/create-mini-app/src/index.ts +++ b/packages/create-mini-app/src/index.ts @@ -6,9 +6,9 @@ import { program } from 'commander'; import { cloneTemplate } from './cloneTemplate.js'; import { isGitInstalled } from './isGitInstalled.js'; -import { promptRootDir } from './promptRootDir.js'; +import { promptRootDir, promptTemplate } from './prompts.js'; import { spawnWithSpinner } from './spawnWithSpinner.js'; -import { filterTemplates } from './templates.js'; +import type { TemplateRepository } from './types.js'; import packageJson from '../package.json'; const { bold, green, red } = chalk; @@ -20,7 +20,7 @@ program .action(async () => { // Check if git is installed. if (!await isGitInstalled()) { - console.error('To run this CLI tool, git should be installed. Installation guide: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git'); + console.error('To run this CLI tool, git is required. Installation guide: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git'); process.exit(1); } @@ -28,10 +28,21 @@ program let rootDir: string | null = null; while (!rootDir) { console.clear(); - rootDir = await promptRootDir(); + try { + rootDir = await promptRootDir(); + } catch { + process.exit(0); + } } - const [{ repository }] = filterTemplates('ts', 'tma.js', 'react.js'); + // Prompt the target template. + let repository: TemplateRepository; + try { + const { repository: promptRepo } = await promptTemplate(); + repository = promptRepo; + } catch { + process.exit(0); + } // Clone the template. try { @@ -60,7 +71,7 @@ program console.log([ green(bold('Your project has been successfully initialized!')), - `Now, open the ${bold(rootDir)} directory and follow the instructions presented in the ${bold('README.md')} file.`, + `Now, open the ${bold(rootDir)} directory and follow the instructions presented in the ${bold('README.md')} file. ${bold('Happy coding! 🚀')}`, ].join('\n')); }); diff --git a/packages/create-mini-app/src/promptRootDir.ts b/packages/create-mini-app/src/promptRootDir.ts deleted file mode 100644 index 311eadbdf..000000000 --- a/packages/create-mini-app/src/promptRootDir.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { existsSync } from 'node:fs'; -import { basename } from 'node:path'; - -import chalk from 'chalk'; -import inquirer from 'inquirer'; - -import { toAbsolute } from './toAbsolute.js'; - -interface Answers { - rootDir: string; - confirmed: boolean; -} - -/** - * Prompts current user project root directory. - * @returns Directory name. - */ -export async function promptRootDir(): Promise { - return inquirer - .prompt([{ - type: 'input', - name: 'rootDir', - message: 'Enter the directory name:', - validate(value) { - if (value.length === 0) { - return 'Directory name should not be empty.'; - } - - const dir = toAbsolute(value); - if (existsSync(dir)) { - return `Directory already exists: ${dir}`; - } - - if (value !== basename(value)) { - return `Value "${value}" contains invalid symbols.`; - } - - return true; - }, - }, { - type: 'confirm', - name: 'confirmed', - message({ rootDir }) { - return `Is this your desired directory? ${chalk.green(toAbsolute(rootDir))}`; - }, - }]) - .then(({ rootDir, confirmed }) => (confirmed ? rootDir : null)); -} diff --git a/packages/create-mini-app/src/prompts.ts b/packages/create-mini-app/src/prompts.ts new file mode 100644 index 000000000..516f222e4 --- /dev/null +++ b/packages/create-mini-app/src/prompts.ts @@ -0,0 +1,48 @@ +import { existsSync } from 'node:fs'; +import { basename } from 'node:path'; + +import { confirm, input } from '@inquirer/prompts'; +import chalk from 'chalk'; + +import { templatePrompt } from './prompts/templatePrompt.js'; +import { toAbsolute } from './toAbsolute.js'; +import type { AnyTemplate } from './types.js'; + +/** + * Prompts current user project root directory. + * @returns Directory name. + */ +export async function promptRootDir(): Promise { + const rootDir = await input({ + message: 'Enter the directory name:', + validate(value) { + if (value.length === 0) { + return 'Directory name should not be empty.'; + } + + const dir = toAbsolute(value); + if (existsSync(dir)) { + return `Directory already exists: ${dir}`; + } + + if (value !== basename(value)) { + return `Value "${value}" contains invalid symbols.`; + } + + return true; + }, + }); + + const confirmed = await confirm({ + message: `Is this your desired directory? ${chalk.green(toAbsolute(rootDir))}`, + }); + + return confirmed ? rootDir : null; +} + +/** + * Prompts a preferred template. + */ +export async function promptTemplate(): Promise { + return templatePrompt({}); +} diff --git a/packages/create-mini-app/src/prompts/templatePrompt.ts b/packages/create-mini-app/src/prompts/templatePrompt.ts new file mode 100644 index 000000000..917e29470 --- /dev/null +++ b/packages/create-mini-app/src/prompts/templatePrompt.ts @@ -0,0 +1,212 @@ +import { + createPrompt, + isDownKey, + isEnterKey, + isSpaceKey, + isUpKey, makeTheme, + Separator, + useKeypress, + useMemo, + usePrefix, + useState, +} from '@inquirer/prompts'; +import ansiEscapes from 'ansi-escapes'; +import chalk from 'chalk'; +import figures from 'figures'; + +import { findTemplate } from '../templates.js'; +import type { AnyTemplate, KnownFramework, KnownLanguage, KnownSDK } from '../types.js'; + +interface CreateSection { + title: string; + name: N; + choices: Choice[]; +} + +interface SelectedChoices { + framework: KnownFramework; + sdk: KnownSDK; + language: KnownLanguage; +} + +interface Choice { + title: string; + value: V; + defaultChecked?: boolean; +} + +type Section = + | CreateSection<'framework', KnownFramework> + | CreateSection<'sdk', KnownSDK> + | CreateSection<'language', KnownLanguage>; + +const { + bold, + green, + blue, +} = chalk; + +function joinLines(...arr: (string | string[])[]): string { + return arr.flat(1).join('\n'); +} + +export const templatePrompt = createPrompt( + (_, done) => { + const theme = makeTheme({}, {}); + + // List of all sections to be displayed. + const sections = useMemo(() => [ + { + title: 'Language', + name: 'language', + choices: [ + { title: 'TypeScript', value: 'ts', defaultChecked: true }, + { title: 'JavaScript', value: 'js' }, + ], + }, + { + title: 'SDK', + name: 'sdk', + choices: [ + { title: 'tma.js', value: 'tma.js', defaultChecked: true }, + { title: 'Telegram SDK', value: 'telegram' }, + ], + }, + { + title: 'Framework', + name: 'framework', + choices: [ + { title: 'React.js', value: 'react.js', defaultChecked: true }, + { title: 'Solid.js', value: 'solid.js' }, + { title: 'Next.js', value: 'next.js' }, + ], + }, + ], []); + + const { + selected: selectedInitially, + choices, + } = useMemo(() => { + const result = { + selected: {} as SelectedChoices, + choices: [] as Choice[], + }; + + sections.forEach((section) => { + result.choices.push(...section.choices); + + section.choices.forEach((item) => { + if (item.defaultChecked) { + (result.selected as any)[section.name] = item.value; + } + }); + }); + + return result; + }, []); + + // Hashmap of selected items. + const [selected, setSelected] = useState(selectedInitially); + + // Currently selected item index. + const [active, setActive] = useState(0); + + // Prompt result. + const [isDone, setIsDone] = useState(false); + + const prefix = usePrefix({ theme }); + + // Currently selected template. + const template = useMemo(() => { + return findTemplate(selected.language, selected.sdk, selected.framework); + }, [selected]); + + useKeypress((key) => { + // Space bar changes current selection. + if (isSpaceKey(key)) { + const choice = choices[active]; + const choiceSection = sections.find((section) => { + return section.choices.some((sectionChoice) => sectionChoice === choice); + })!; + setSelected({ ...selected, [choiceSection.name]: choice.value }); + } + + // Key Up selects the previous element. + if (isUpKey(key)) { + setActive(active === 0 ? choices.length - 1 : active - 1); + return; + } + + // Key Down selects the next element. + if (isDownKey(key)) { + setActive(active === choices.length - 1 ? 0 : active + 1); + } + + // Key Enter confirms selection. + if (isEnterKey(key)) { + if (template) { + done(template); + setIsDone(true); + } + } + }); + + const { style } = theme; + + if (isDone) { + const lang = { + js: 'JavaScript', + ts: 'TypeScript', + }[template!.language]; + const sdk = { + telegram: 'Telegram SDK', + 'tma.js': '@tma.js', + }[template!.sdk]; + const framework = { + 'react.js': 'React.js', + 'solid.js': 'Next.js', + 'next.js': 'Solid.js', + }[template!.framework]; + + return `${green('✔')} ${style.message( + `You have selected template with technologies: ${blue(framework)}, ${blue(lang)} and ${blue(sdk)}`, + )}`; + } + + return `${ + joinLines( + // Message. + `${prefix} ${style.message( + 'Please, select preferred technologies to scaffold your application.', + )}`, + + // Selections table. + sections.map((section) => joinLines( + bold(section.title), + section.choices.map((choice) => { + const isActive = choices.indexOf(choice) === active; + const isSelected = selected[section.name] === choice.value; + const icon = isSelected ? green(figures.circleFilled) : figures.circle; + const cursor = isActive ? figures.pointer : ' '; + + return `${cursor}${icon} ${choice.title}`; + }), + )), + + new Separator().separator, + + // Help tip. + style.help(`(${[ + `${style.key('space')} to select`, + `${style.key(figures.arrowUp)} and ${style.key(figures.arrowDown)} to change cursor`, + `${style.key('enter')} to proceed`, + ].join(', ')})`), + + template + ? green( + `${bold(figures.tick)} A template utilizing these technologies was discovered. Press ${style.key('space')} to proceed.`, + ) + : style.error(`${bold(figures.warning)} Currently, no template exists that uses these technologies.`), + )}${ansiEscapes.cursorHide}`; + }, +); diff --git a/packages/create-mini-app/src/templates.ts b/packages/create-mini-app/src/templates.ts index 2ab302db8..4a81c1688 100644 --- a/packages/create-mini-app/src/templates.ts +++ b/packages/create-mini-app/src/templates.ts @@ -1,26 +1,21 @@ -interface CreateTemplate { - sdk: 'telegram' | 'tma.js'; - language: Language; - framework: Framework; - repository: TemplateRepository; -} +import type { + AnyTemplate, + KnownFramework, + KnownLanguage, + KnownSDK, + TemplateRepository, +} from './types.js'; -export interface TemplateRepository { - clone: { - https: string; - ssh: string; +function createRepository(name: string): TemplateRepository { + return { + clone: { + https: `https://github.com/Telegram-Mini-Apps/${name}.git`, + ssh: `git@github.com:Telegram-Mini-Apps/${name}.git`, + }, + link: `github.com/Telegram-Mini-Apps/${name}`, }; - link: string; } -type JsTemplate = CreateTemplate<'js', 'solid.js' | 'react.js' | 'next.js' | 'vanilla js'>; -type TsTemplate = CreateTemplate<'ts', 'solid.js' | 'react.js' | 'next.js'>; -export type AnyTemplate = JsTemplate | TsTemplate; - -type AllowedLanguage = AnyTemplate['language']; -type AllowedSDK = AnyTemplate['sdk']; -type AllowedFramework = AnyTemplate['framework']; - /** * List of templates known to the CLI. */ @@ -28,21 +23,26 @@ export const templates: AnyTemplate[] = [{ language: 'ts', sdk: 'tma.js', framework: 'react.js', - repository: { - clone: { - https: 'https://github.com/Telegram-Mini-Apps/reactjs-template.git', - ssh: 'git@github.com:Telegram-Mini-Apps/reactjs-template.git', - }, - link: 'github.com/Telegram-Mini-Apps/reactjs-template', - }, + repository: createRepository('reactjs-template'), +}, { + language: 'js', + sdk: 'tma.js', + framework: 'react.js', + repository: createRepository('reactjs-js-template'), }]; -export function filterTemplates( - language: AllowedLanguage, - sdk: AllowedSDK, - framework: AllowedFramework, -): AnyTemplate[] { - return templates.filter((t) => { +/** + * Leaves only templates with specified technologies. + * @param language + * @param sdk + * @param framework + */ +export function findTemplate( + language: KnownLanguage, + sdk: KnownSDK, + framework: KnownFramework, +): AnyTemplate | undefined { + return templates.find((t) => { return t.sdk === sdk && t.language === language && t.framework === framework; }); } diff --git a/packages/create-mini-app/src/types.ts b/packages/create-mini-app/src/types.ts new file mode 100644 index 000000000..5ce527d0d --- /dev/null +++ b/packages/create-mini-app/src/types.ts @@ -0,0 +1,22 @@ +interface CreateTemplate { + sdk: 'telegram' | 'tma.js'; + language: Language; + framework: Framework; + repository: TemplateRepository; +} + +export interface TemplateRepository { + clone: { + https: string; + ssh: string; + }; + link: string; +} + +type JsTemplate = CreateTemplate<'js', 'solid.js' | 'react.js' | 'next.js'>; +type TsTemplate = CreateTemplate<'ts', 'solid.js' | 'react.js' | 'next.js'>; +export type AnyTemplate = JsTemplate | TsTemplate; + +export type KnownLanguage = AnyTemplate['language']; +export type KnownSDK = AnyTemplate['sdk']; +export type KnownFramework = AnyTemplate['framework']; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 26dbd5679..56da24d29 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 15.2.3 '@turbo/gen': specifier: ^1.9.7 - version: 1.9.7(@types/node@20.11.25)(typescript@5.3.2) + version: 1.9.7(@types/node@20.12.5)(typescript@5.3.2) '@vitest/coverage-v8': specifier: ^0.34.6 version: 0.34.6(vitest@0.34.6) @@ -25,10 +25,10 @@ importers: version: 0.34.6(vitest@0.34.6) commitizen: specifier: ^4.3.0 - version: 4.3.0(@types/node@20.11.25)(typescript@5.3.2) + version: 4.3.0(@types/node@20.12.5)(typescript@5.3.2) cz-conventional-changelog: specifier: ^3.3.0 - version: 3.3.0(@types/node@20.11.25)(typescript@5.3.2) + version: 3.3.0(@types/node@20.12.5)(typescript@5.3.2) eslint: specifier: ^8.56.0 version: 8.56.0 @@ -49,10 +49,10 @@ importers: version: 5.3.2 vite: specifier: ^4.5.0 - version: 4.5.0(@types/node@20.11.25) + version: 4.5.0(@types/node@20.12.5) vite-plugin-dts: specifier: ^3.6.0 - version: 3.6.0(@types/node@20.11.25)(typescript@5.3.2)(vite@4.5.0) + version: 3.6.0(@types/node@20.12.5)(typescript@5.3.2)(vite@4.5.0) vite-plugin-solid: specifier: ^2.7.0 version: 2.7.0(solid-js@1.8.10)(vite@4.5.0) @@ -67,7 +67,7 @@ importers: devDependencies: vitepress: specifier: 1.0.0-rc.24 - version: 1.0.0-rc.24(@algolia/client-search@4.22.1)(@types/node@20.11.25)(search-insights@2.13.0)(typescript@5.3.2) + version: 1.0.0-rc.24(@algolia/client-search@4.22.1)(@types/node@20.12.5)(search-insights@2.13.0)(typescript@5.3.2) apps/local-playground: {} @@ -79,15 +79,21 @@ importers: packages/create-mini-app: dependencies: + '@inquirer/prompts': + specifier: ^4.3.2 + version: 4.3.2 + ansi-escapes: + specifier: ^6.2.1 + version: 6.2.1 chalk: specifier: ^5.3.0 version: 5.3.0 commander: specifier: ^12.0.0 version: 12.0.0 - inquirer: - specifier: ^9.2.15 - version: 9.2.15 + figures: + specifier: ^6.1.0 + version: 6.1.0 ora: specifier: ^8.0.1 version: 8.0.1 @@ -1028,7 +1034,7 @@ packages: dev: true optional: true - /@commitlint/load@18.4.4(@types/node@20.11.25)(typescript@5.3.2): + /@commitlint/load@18.4.4(@types/node@20.12.5)(typescript@5.3.2): resolution: {integrity: sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==} engines: {node: '>=v18'} requiresBuild: true @@ -1039,7 +1045,7 @@ packages: '@commitlint/types': 18.4.4 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.3.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.25)(cosmiconfig@8.3.6)(typescript@5.3.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.5)(cosmiconfig@8.3.6)(typescript@5.3.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -1371,6 +1377,119 @@ packages: /@humanwhocodes/object-schema@2.0.1: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@inquirer/checkbox@2.2.2: + resolution: {integrity: sha512-EyPKpHIJ4bOw7S+Gbbwdy1V/kR3L5I2lLa/b9L/lOQDhdbk7Q1d0ET2k2kU8DNPu7FgQ8xvdzEUf92tSomrpzQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + dev: false + + /@inquirer/confirm@3.1.2: + resolution: {integrity: sha512-xQeRxRpVOQdBinIyOHX9+/nTrvt84NnaP8hym5ARdLr6a5T1ckowx70sEaItgULBHlxSIJL970BoRfFxlzO2IA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + dev: false + + /@inquirer/core@7.1.2: + resolution: {integrity: sha512-ne5VhDqruYYzx8mmjDZ9F58ymrLJGxmSHJUcJGiW3tifzvl3goAm6gNX11w6+zUnGE54vgQ6ALDXL3IOSezMRw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/type': 1.2.1 + '@types/mute-stream': 0.0.4 + '@types/node': 20.12.5 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + figures: 3.2.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /@inquirer/editor@2.1.2: + resolution: {integrity: sha512-758pnVt3WTk5x7ITlOTdZ6AIcbt0fGmIMpbZKJAeAejDvFsMyN+A1ODRgPi+yzpng4OsF8p9LamCH/F+5FhtGA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + external-editor: 3.1.0 + dev: false + + /@inquirer/expand@2.1.2: + resolution: {integrity: sha512-QTcmxuKBXvsitEmHrz7Nrr30OPTYQWZf+hWrPUHoLSs1Qg1CLIUxFUfKDguiHZGubXmMydKB9m6TJZlAmU+WTA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + chalk: 4.1.2 + dev: false + + /@inquirer/input@2.1.2: + resolution: {integrity: sha512-Szr9POj/NxbKSmbOx81ZD76b6xmvXXUY56QLWBXRv8zIGTIKtj03V4zAsw3MTiL6Qoo+IaRLwTLr3bI+qIblzA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + dev: false + + /@inquirer/password@2.1.2: + resolution: {integrity: sha512-PSdF3PgYdNPLAwlIWiLyyXowZP2sNufQSTegNxnKoE/Ki5TwWphgphAGubd6X12hQAFaBrswqGpDjkwA/DOAig==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + ansi-escapes: 4.3.2 + dev: false + + /@inquirer/prompts@4.3.2: + resolution: {integrity: sha512-I5q6tK3cMI3jIzkvoirZ+hkpkrGH5i0PkIENe1V2gmmBIzJ8TVtP2EtPLVuqBKFvCyBIgKLUj1TcH23u09fN+A==} + engines: {node: '>=18'} + dependencies: + '@inquirer/checkbox': 2.2.2 + '@inquirer/confirm': 3.1.2 + '@inquirer/core': 7.1.2 + '@inquirer/editor': 2.1.2 + '@inquirer/expand': 2.1.2 + '@inquirer/input': 2.1.2 + '@inquirer/password': 2.1.2 + '@inquirer/rawlist': 2.1.2 + '@inquirer/select': 2.2.2 + dev: false + + /@inquirer/rawlist@2.1.2: + resolution: {integrity: sha512-64XUlaY3Iwes9QzfUA068MaaHNOrq8/TlNG8IK56uYAJsPVB5YRAKa3Kng07dAXTRXkMLvdXlw+qPQtpte5HOQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + chalk: 4.1.2 + dev: false + + /@inquirer/select@2.2.2: + resolution: {integrity: sha512-WaoleV3O/7iDAHFC0GArOkl7Yg/7wQ/UptxEkfM+bG67h65v0troAjkNASBbNiz9vvoNZxOGhVrug0LNDftCoQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.2 + '@inquirer/type': 1.2.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + dev: false + + /@inquirer/type@1.2.1: + resolution: {integrity: sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==} + engines: {node: '>=18'} + dev: false + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} @@ -1420,13 +1539,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@ljharb/through@2.3.12: - resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - dev: false - /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: @@ -1447,24 +1559,24 @@ packages: read-yaml-file: 1.1.0 dev: true - /@microsoft/api-extractor-model@7.28.2(@types/node@20.11.25): + /@microsoft/api-extractor-model@7.28.2(@types/node@20.12.5): resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.61.0(@types/node@20.11.25) + '@rushstack/node-core-library': 3.61.0(@types/node@20.12.5) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.37.3(@types/node@20.11.25): + /@microsoft/api-extractor@7.37.3(@types/node@20.12.5): resolution: {integrity: sha512-daC5IKZw/Qg8DYucnQVvagihKsTr5L7Bgf5VJYe/FwQhQuR9VRqKZfr2JkqoszsVqOf8C0KtFNTaqyB7chD/HQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.28.2(@types/node@20.11.25) + '@microsoft/api-extractor-model': 7.28.2(@types/node@20.12.5) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.61.0(@types/node@20.11.25) + '@rushstack/node-core-library': 3.61.0(@types/node@20.12.5) '@rushstack/rig-package': 0.5.1 '@rushstack/ts-command-line': 4.16.1 colors: 1.2.5 @@ -1548,7 +1660,7 @@ packages: picomatch: 2.3.1 dev: true - /@rushstack/node-core-library@3.61.0(@types/node@20.11.25): + /@rushstack/node-core-library@3.61.0(@types/node@20.12.5): resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} peerDependencies: '@types/node': '*' @@ -1556,7 +1668,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.11.25 + '@types/node': 20.12.5 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -1610,7 +1722,7 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@turbo/gen@1.9.7(@types/node@20.11.25)(typescript@5.3.2): + /@turbo/gen@1.9.7(@types/node@20.12.5)(typescript@5.3.2): resolution: {integrity: sha512-mjenROdRNvYxZixNfamJY/XxwKMT+01PuQby8+qdRUUa5ZLBPOv4rw11n+II1O8ZnpFpBJIGGFJcnRNY+lCddw==} hasBin: true dependencies: @@ -1621,7 +1733,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 semver: 7.3.8 - ts-node: 10.9.1(@types/node@20.11.25)(typescript@5.3.2) + ts-node: 10.9.1(@types/node@20.12.5)(typescript@5.3.2) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -1744,6 +1856,12 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true + /@types/mute-stream@0.0.4: + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + dependencies: + '@types/node': 20.12.5 + dev: false + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true @@ -1754,6 +1872,11 @@ packages: undici-types: 5.26.5 dev: true + /@types/node@20.12.5: + resolution: {integrity: sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==} + dependencies: + undici-types: 5.26.5 + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -1800,6 +1923,10 @@ packages: resolution: {integrity: sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==} dev: true + /@types/wrap-ansi@3.0.0: + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + dev: false + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.2): resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -2003,7 +2130,7 @@ packages: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@20.11.25) + vite: 4.5.0(@types/node@20.12.5) vue: 3.3.6(typescript@5.3.2) dev: true @@ -2395,6 +2522,11 @@ packages: dependencies: type-fest: 0.21.3 + /ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + dev: false + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2585,6 +2717,7 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true /better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} @@ -2599,6 +2732,7 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2639,6 +2773,7 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} @@ -2779,6 +2914,7 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 + dev: true /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} @@ -2821,6 +2957,7 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + dev: true /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2831,6 +2968,7 @@ packages: /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + requiresBuild: true dependencies: color-name: 1.1.4 @@ -2840,6 +2978,7 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + requiresBuild: true /colors@1.2.5: resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} @@ -2863,13 +3002,13 @@ packages: dev: true optional: true - /commitizen@4.3.0(@types/node@20.11.25)(typescript@5.3.2): + /commitizen@4.3.0(@types/node@20.12.5)(typescript@5.3.2): resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@20.11.25)(typescript@5.3.2) + cz-conventional-changelog: 3.3.0(@types/node@20.12.5)(typescript@5.3.2) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -2914,7 +3053,7 @@ packages: requiresBuild: true dev: true - /cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.25)(cosmiconfig@8.3.6)(typescript@5.3.2): + /cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.5)(cosmiconfig@8.3.6)(typescript@5.3.2): resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} engines: {node: '>=v16'} requiresBuild: true @@ -2923,7 +3062,7 @@ packages: cosmiconfig: '>=8.2' typescript: '>=4' dependencies: - '@types/node': 20.11.25 + '@types/node': 20.12.5 cosmiconfig: 8.3.6(typescript@5.3.2) jiti: 1.21.0 typescript: 5.3.2 @@ -3001,18 +3140,18 @@ packages: stream-transform: 2.1.3 dev: true - /cz-conventional-changelog@3.3.0(@types/node@20.11.25)(typescript@5.3.2): + /cz-conventional-changelog@3.3.0(@types/node@20.12.5)(typescript@5.3.2): resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0(@types/node@20.11.25)(typescript@5.3.2) + commitizen: 4.3.0(@types/node@20.12.5)(typescript@5.3.2) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 18.4.4(@types/node@20.11.25)(typescript@5.3.2) + '@commitlint/load': 18.4.4(@types/node@20.12.5)(typescript@5.3.2) transitivePeerDependencies: - '@types/node' - typescript @@ -3089,6 +3228,7 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -3688,6 +3828,13 @@ packages: dependencies: escape-string-regexp: 1.0.5 + /figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + dependencies: + is-unicode-supported: 2.0.0 + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4104,6 +4251,7 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} @@ -4191,27 +4339,6 @@ packages: wrap-ansi: 7.0.0 dev: true - /inquirer@9.2.15: - resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==} - engines: {node: '>=18'} - dependencies: - '@ljharb/through': 2.3.12 - ansi-escapes: 4.3.2 - chalk: 5.3.0 - cli-cursor: 3.1.0 - cli-width: 4.1.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 1.0.0 - ora: 5.4.1 - run-async: 3.0.0 - rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: false - /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} @@ -4317,6 +4444,7 @@ packages: /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + dev: true /is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} @@ -4409,6 +4537,7 @@ packages: /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + dev: true /is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} @@ -4723,6 +4852,7 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -4730,6 +4860,7 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + dev: true /log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} @@ -5103,6 +5234,7 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true /ora@8.0.1: resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} @@ -5446,6 +5578,7 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: true /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} @@ -5570,6 +5703,7 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} @@ -5608,11 +5742,6 @@ packages: engines: {node: '>=0.12.0'} dev: true - /run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - dev: false - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -5629,6 +5758,7 @@ packages: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.2 + dev: true /safe-array-concat@1.0.1: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} @@ -5641,6 +5771,7 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} @@ -5776,6 +5907,11 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: false + /sirv@2.0.3: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} @@ -5962,6 +6098,7 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -6119,7 +6256,7 @@ packages: typescript: 5.3.2 dev: false - /ts-node@10.9.1(@types/node@20.11.25)(typescript@5.3.2): + /ts-node@10.9.1(@types/node@20.12.5)(typescript@5.3.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6138,7 +6275,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 20.11.25 + '@types/node': 20.12.5 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -6182,6 +6319,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true /tty-table@4.2.1: resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} @@ -6358,7 +6496,6 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -6405,6 +6542,7 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -6464,7 +6602,7 @@ packages: - terser dev: true - /vite-plugin-dts@3.6.0(@types/node@20.11.25)(typescript@5.3.2)(vite@4.5.0): + /vite-plugin-dts@3.6.0(@types/node@20.12.5)(typescript@5.3.2)(vite@4.5.0): resolution: {integrity: sha512-doxhDRFJCZD2sGjIp4V800nm8Y19GvmwckjG5vYPuiqJ7OBjc9NlW1Vp9Gkyh2aXlUs1jTDRH/lxWfcsPLOQHg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6474,13 +6612,13 @@ packages: vite: optional: true dependencies: - '@microsoft/api-extractor': 7.37.3(@types/node@20.11.25) + '@microsoft/api-extractor': 7.37.3(@types/node@20.12.5) '@rollup/pluginutils': 5.0.2 '@vue/language-core': 1.8.15(typescript@5.3.2) debug: 4.3.4 kolorist: 1.8.0 typescript: 5.3.2 - vite: 4.5.0(@types/node@20.11.25) + vite: 4.5.0(@types/node@20.12.5) vue-tsc: 1.8.15(typescript@5.3.2) transitivePeerDependencies: - '@types/node' @@ -6501,7 +6639,7 @@ packages: merge-anything: 5.1.7 solid-js: 1.8.10 solid-refresh: 0.5.3(solid-js@1.8.10) - vite: 4.5.0(@types/node@20.11.25) + vite: 4.5.0(@types/node@20.12.5) vitefu: 0.2.4(vite@4.5.0) transitivePeerDependencies: - supports-color @@ -6518,7 +6656,7 @@ packages: debug: 4.3.4 globrex: 0.1.2 tsconfck: 2.1.2(typescript@5.3.2) - vite: 4.5.0(@types/node@20.11.25) + vite: 4.5.0(@types/node@20.12.5) transitivePeerDependencies: - supports-color - typescript @@ -6560,6 +6698,42 @@ packages: fsevents: 2.3.3 dev: true + /vite@4.5.0(@types/node@20.12.5): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.12.5 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /vitefu@0.2.4(vite@4.5.0): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -6568,10 +6742,10 @@ packages: vite: optional: true dependencies: - vite: 4.5.0(@types/node@20.11.25) + vite: 4.5.0(@types/node@20.12.5) dev: true - /vitepress@1.0.0-rc.24(@algolia/client-search@4.22.1)(@types/node@20.11.25)(search-insights@2.13.0)(typescript@5.3.2): + /vitepress@1.0.0-rc.24(@algolia/client-search@4.22.1)(@types/node@20.12.5)(search-insights@2.13.0)(typescript@5.3.2): resolution: {integrity: sha512-RpnL8cnOGwiRlBbrYQUm9sYkJbtyOt/wYXk2diTcokY4yvks/5lq9LuSt+MURWB6ZqwpSNHvTmxgaSfLoG0/OA==} hasBin: true peerDependencies: @@ -6594,7 +6768,7 @@ packages: mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.5 - vite: 4.5.0(@types/node@20.11.25) + vite: 4.5.0(@types/node@20.12.5) vue: 3.3.6(typescript@5.3.2) transitivePeerDependencies: - '@algolia/client-search' @@ -6753,6 +6927,7 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: true /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}