From 67e19e63901c6ed86aae2bd683ecb4a120b46ae1 Mon Sep 17 00:00:00 2001 From: Stefan E-K Date: Tue, 1 Oct 2024 23:00:25 +0200 Subject: [PATCH] CLI Update (#108) * add getPackageInfo() * small index update * removed all cli stuff for clean restart * init: added config creation * rename config schema * feat(cli): rework of init command finished & fix #137 * fix: add darkmode fixes also to other files * feat(cli): rework of add command finished --- .changeset/selfish-penguins-cover.md | 5 + .changeset/warm-cheetahs-leave.md | 5 + .eslintrc.json | 12 +- .prettierrc.json | 7 +- apps/docs/public/registry/index.json | 3 + apps/docs/public/registry/ui/pagination.json | 3 + apps/docs/src/__registry__/index.tsx | 2 +- apps/docs/src/registry/registry.ts | 1 + .../src/routes/docs/installation/manual.mdx | 2 +- .../routes/docs/installation/solid-start.mdx | 2 +- apps/docs/src/styles/app.css | 4 + packages/cli/package.json | 34 +- packages/cli/src/commands/add.ts | 246 +-- packages/cli/src/commands/init.ts | 294 ++-- packages/cli/src/index.ts | 35 +- packages/cli/src/lib/transformImports.ts | 8 - packages/cli/src/lib/types.ts | 40 - packages/cli/src/lib/utils.ts | 60 - packages/cli/src/utils/config.ts | 85 ++ packages/cli/src/utils/get-package-info.ts | 22 + packages/cli/src/utils/get-package-manager.ts | 13 + packages/cli/src/utils/logger.ts | 25 + packages/cli/src/utils/registry.ts | 89 ++ packages/cli/src/utils/resolve-import.ts | 11 + .../{lib/constants.ts => utils/templates.ts} | 262 ++-- packages/cli/src/utils/transformers/index.ts | 41 + .../utils/transformers/transform-import.ts | 20 + .../transformers/transform-jsx.ts} | 16 +- .../utils/transformers/transform-tw-prefix.ts | 138 ++ pnpm-lock.yaml | 1331 +++++++---------- tailwind.config.cjs | 8 +- 31 files changed, 1542 insertions(+), 1282 deletions(-) create mode 100644 .changeset/selfish-penguins-cover.md create mode 100644 .changeset/warm-cheetahs-leave.md delete mode 100644 packages/cli/src/lib/transformImports.ts delete mode 100644 packages/cli/src/lib/types.ts delete mode 100644 packages/cli/src/lib/utils.ts create mode 100644 packages/cli/src/utils/config.ts create mode 100644 packages/cli/src/utils/get-package-info.ts create mode 100644 packages/cli/src/utils/get-package-manager.ts create mode 100644 packages/cli/src/utils/logger.ts create mode 100644 packages/cli/src/utils/registry.ts create mode 100644 packages/cli/src/utils/resolve-import.ts rename packages/cli/src/{lib/constants.ts => utils/templates.ts} (80%) create mode 100644 packages/cli/src/utils/transformers/index.ts create mode 100644 packages/cli/src/utils/transformers/transform-import.ts rename packages/cli/src/{lib/transpileTS.ts => utils/transformers/transform-jsx.ts} (82%) create mode 100644 packages/cli/src/utils/transformers/transform-tw-prefix.ts diff --git a/.changeset/selfish-penguins-cover.md b/.changeset/selfish-penguins-cover.md new file mode 100644 index 00000000..1642509f --- /dev/null +++ b/.changeset/selfish-penguins-cover.md @@ -0,0 +1,5 @@ +--- +"solidui-cli": minor +--- + +complete rework of the add command to be more inline with shadcn/ui & others diff --git a/.changeset/warm-cheetahs-leave.md b/.changeset/warm-cheetahs-leave.md new file mode 100644 index 00000000..bc6a04f3 --- /dev/null +++ b/.changeset/warm-cheetahs-leave.md @@ -0,0 +1,5 @@ +--- +"solidui-cli": minor +--- + +complete rework of the init command to be more inline with shadcn/ui & others diff --git a/.eslintrc.json b/.eslintrc.json index 701b5719..f3b93fb4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,8 +10,16 @@ "plugins": ["solid", "tailwindcss"], "rules": { "@typescript-eslint/consistent-type-imports": "error", - "tailwindcss/no-custom-classname": "off", - "tailwindcss/classnames-order": "error" + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ], + "tailwindcss/classnames-order": "error", + "tailwindcss/no-custom-classname": "off" }, "settings": { "tailwindcss": { diff --git a/.prettierrc.json b/.prettierrc.json index f237def6..752696de 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -13,12 +13,7 @@ "", "", "^types$", - "^~/config/(.*)$", - "^~/lib/(.*)$", - "^~/hooks/(.*)$", - "^~/components/ui/(.*)$", - "^~/components/(.*)$", - "^~/registry/(.*)$", + "^~/(.*)$", "", "^[./]" ], diff --git a/apps/docs/public/registry/index.json b/apps/docs/public/registry/index.json index 046fcbe9..fd473e24 100644 --- a/apps/docs/public/registry/index.json +++ b/apps/docs/public/registry/index.json @@ -292,6 +292,9 @@ "dependencies": [ "@kobalte/core" ], + "registryDependencies": [ + "button" + ], "files": [ "ui/pagination.tsx" ], diff --git a/apps/docs/public/registry/ui/pagination.json b/apps/docs/public/registry/ui/pagination.json index 250ef59f..e4c45559 100644 --- a/apps/docs/public/registry/ui/pagination.json +++ b/apps/docs/public/registry/ui/pagination.json @@ -3,6 +3,9 @@ "dependencies": [ "@kobalte/core" ], + "registryDependencies": [ + "button" + ], "files": [ { "name": "pagination.tsx", diff --git a/apps/docs/src/__registry__/index.tsx b/apps/docs/src/__registry__/index.tsx index 209b664d..793aea9a 100644 --- a/apps/docs/src/__registry__/index.tsx +++ b/apps/docs/src/__registry__/index.tsx @@ -226,7 +226,7 @@ export const Index: Record = { "pagination": { name: "pagination", type: "ui", - registryDependencies: undefined, + registryDependencies: ["button"], component: lazy(() => import("~/registry/ui/pagination")), files: ["registry/ui/pagination.tsx"], }, diff --git a/apps/docs/src/registry/registry.ts b/apps/docs/src/registry/registry.ts index 80e82edd..a8912c9d 100644 --- a/apps/docs/src/registry/registry.ts +++ b/apps/docs/src/registry/registry.ts @@ -183,6 +183,7 @@ const ui: Registry = [ name: "pagination", type: "ui", dependencies: ["@kobalte/core"], + registryDependencies: ["button"], files: ["ui/pagination.tsx"] }, { diff --git a/apps/docs/src/routes/docs/installation/manual.mdx b/apps/docs/src/routes/docs/installation/manual.mdx index 8ffe26b0..2a75ba90 100644 --- a/apps/docs/src/routes/docs/installation/manual.mdx +++ b/apps/docs/src/routes/docs/installation/manual.mdx @@ -67,7 +67,7 @@ Here's what my `tailwind.config.js` file looks like: ```js /**@type {import("tailwindcss").Config} */ module.exports = { - darkMode: ["class", '[data-kb-theme="dark"]'], + darkMode: ["variant", [".dark &", '[data-kb-theme="dark"] &']], content: ["./src/**/*.{ts,tsx}"], theme: { container: { diff --git a/apps/docs/src/routes/docs/installation/solid-start.mdx b/apps/docs/src/routes/docs/installation/solid-start.mdx index c7bfa212..928414ec 100644 --- a/apps/docs/src/routes/docs/installation/solid-start.mdx +++ b/apps/docs/src/routes/docs/installation/solid-start.mdx @@ -86,7 +86,7 @@ const { fontFamily } = require("tailwindcss/defaultTheme") /** @type {import('tailwindcss').Config} */ export default { - darkMode: ["class", '[data-kb-theme="dark"]'], + darkMode: ["variant", [".dark &", '[data-kb-theme="dark"] &']], content: ["./src/**/*.{ts,tsx}"], theme: { extend: { diff --git a/apps/docs/src/styles/app.css b/apps/docs/src/styles/app.css index 21b03e6d..0863c6ef 100644 --- a/apps/docs/src/styles/app.css +++ b/apps/docs/src/styles/app.css @@ -134,3 +134,7 @@ background-clip: content-box; @apply bg-accent; } + +::-webkit-scrollbar-corner { + display: none; +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 40183b59..88328298 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -29,9 +29,11 @@ "ui", "tailwind", "kobalte", + "corvu", "solid", "solidjs", - "shadcn" + "shadcn", + "tremor" ], "scripts": { "build": "tsup", @@ -40,24 +42,22 @@ "pub:release": "pnpm build && pnpm publish --access public" }, "dependencies": { - "@antfu/ni": "^0.21.12", - "@babel/core": "^7.22.20", - "@babel/parser": "^7.22.16", - "@babel/plugin-transform-typescript": "^7.22.15", - "@clack/core": "^0.3.2", - "@clack/prompts": "^0.6.3", - "@types/babel__core": "^7.20.2", + "@antfu/ni": "^0.23.0", + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.6", + "@babel/plugin-transform-typescript": "^7.25.2", + "@clack/prompts": "^0.7.0", "chalk": "^5.3.0", - "commander": "^11.0.0", - "json5": "^2.2.3", - "prompts": "^2.4.2", - "recast": "^0.23.4", - "ts-morph": "^20.0.0" + "commander": "^12.1.0", + "execa": "^9.4.0", + "recast": "^0.23.9", + "ts-morph": "^18.0.0", + "tsconfig-paths": "^4.2.0" }, "devDependencies": { - "@types/node": "^18.14.0", - "@types/prompts": "^2.4.5", - "tsup": "^7.2.0", - "typescript": "^5.1.6" + "@types/babel__core": "^7.20.5", + "@types/node": "^20.14.12", + "tsup": "^8.3.0", + "typescript": "^5.6.2" } } diff --git a/packages/cli/src/commands/add.ts b/packages/cli/src/commands/add.ts index fb49b9e0..3aefdc9a 100644 --- a/packages/cli/src/commands/add.ts +++ b/packages/cli/src/commands/add.ts @@ -1,110 +1,158 @@ -import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs" -import path from "path" -import { cwd } from "process" - -import { log, spinner } from "@clack/prompts" -import chalk from "chalk" -import prompts from "prompts" -import { parse } from "valibot" - -import { registryIndexUrl, registryUIUrl } from "~/lib/constants" -import { transformImports } from "~/lib/transformImports" -import { transpileTS } from "~/lib/transpileTS" -import { - configSchema, - type RegistryComponentResponse, - type RegistryComponentsList -} from "~/lib/types" -import { installPackages, removeExtension } from "~/lib/utils" - -async function getComponent(componentName: string): Promise { - const componentUri = `${registryUIUrl}/${componentName}.json` - const res = await (await fetch(componentUri)).json() - - return res -} - -async function componentSelectionPrompt() { - try { - const componentList: RegistryComponentsList = await (await fetch(registryIndexUrl)).json() - - const selectedComponents = await prompts({ - name: "Selected Components", - type: "multiselect", - message: "Which components would you like to add?", - choices: componentList.map((component) => ({ title: component.name, value: component.name })) - }) - - await add(selectedComponents["Selected Components"]) - } catch (error) { - log.info(`Error: ${error}`) - log.error("Command terminated.") - process.exit(1) - } -} - -export async function add(componentNames: string[]) { - if (componentNames.length === 0) await componentSelectionPrompt() - - const activityIndicator = spinner() - activityIndicator.start("Creating components...") - - try { - const readUIConfig = readFileSync(path.resolve(cwd(), "ui.config.json")) - const uiConfig = parse(configSchema, JSON.parse(readUIConfig.toString())) - const isTypescriptEnabled = uiConfig.tsx - const componentFolderDir = path.resolve(cwd(), uiConfig.componentDir) - const dirExists = existsSync(componentFolderDir) - - if (!dirExists) mkdirSync(componentFolderDir, { recursive: true }) - - const components = await Promise.all( - componentNames.map(async (name) => await getComponent(name)) - ) - +import { existsSync } from "node:fs" +import { mkdir, writeFile } from "node:fs/promises" +import path from "node:path" + +import * as p from "@clack/prompts" +import { Command } from "commander" +import { execa } from "execa" +import * as v from "valibot" + +import { getConfig } from "~/utils/config" +import { getPackageManager } from "~/utils/get-package-manager" +import { handleError, highlight } from "~/utils/logger" +import { fetchTree, getRegistryIndex, resolveTree } from "~/utils/registry" +import { transform } from "~/utils/transformers" + +const addOptionsSchema = v.object({ + components: v.optional(v.array(v.string()), []), + cwd: v.string(), + overwrite: v.boolean(), + all: v.boolean() +}) + +export const add = new Command() + .name("add") + .description("add components to your project") + .argument("[components...]", "the components to add") + .option("-c, --cwd ", "the working directory", process.cwd()) + .option("-o --overwrite", "overwrite existing files", false) + .option("-a, --all", "add all available components", false) + .action(async (components, opts) => { try { - for (const component of components) { - log.message(`Adding ${component.name} component`) + const options = v.parse(addOptionsSchema, { components, ...opts }) - if (component.dependencies?.length > 0) { - log.step(`Installing ${component.name} component dependencies`) - await installPackages(...component.dependencies) - } + const cwd = path.resolve(options.cwd) + if (!existsSync(cwd)) { + throw new Error(`The path ${cwd} does not exist. Please try again.`) + } - if (component.registryDependencies?.length > 0) { - log.step("Installing any other required components") - await add(component.registryDependencies) - } + const config = await getConfig(cwd) + if (!config) { + p.log.warning( + `Configuration is missing. Please run ${highlight(`init`)} to create a components.json file.` + ) + process.exit(1) + } - for (const file of component.files) { - log.step(`Creating ${file.name}`) + const registryIndex = await getRegistryIndex() + + let selectedComponents = options.all ? registryIndex.map((v) => v.name) : options.components + if (!selectedComponents.length) { + const prompts = await p.group( + { + components: () => + p.multiselect<{ label: string; value: string }[], string>({ + message: `Which ${highlight("components")} would you like to add?`, + options: registryIndex.map((v) => ({ label: v.name, value: v.name })) + }) + }, + { + onCancel: () => { + p.cancel("Cancelled.") + process.exit(0) + } + } + ) + selectedComponents = prompts.components + } - const content = transformImports(file.content, uiConfig) + if (!selectedComponents.length) { + p.log.warn(`No components selected. Exiting.`) + process.exit(0) + } - if (isTypescriptEnabled) { - writeFileSync(componentFolderDir + "/" + `${file.name}`, content) - } else { - writeFileSync( - componentFolderDir + "/" + `${removeExtension(file.name)}.jsx`, - transpileTS(content) + const tree = await resolveTree(registryIndex, selectedComponents) + const payload = await fetchTree(tree) + + if (!payload.length) { + p.log.warn(`Selected components not found. Exiting.`) + process.exit(0) + } + + const spinner = p.spinner() + spinner.start("Installing...") + + const targetDir = config.resolvedPaths.components + if (!existsSync(targetDir)) { + await mkdir(targetDir, { recursive: true }) + } + + for (const item of payload) { + spinner.message(`Installing ${highlight(item.name)}...`) + + const existingComponent = item.files.filter((file) => + existsSync(path.resolve(targetDir, file.name)) + ) + if (existingComponent.length && !options.overwrite) { + if (selectedComponents.includes(item.name)) { + spinner.stop() + + const prompts = await p.group( + { + overwrite: () => + p.confirm({ + message: `Component ${item.name} already exists. Would you like to overwrite?`, + initialValue: false + }) + }, + { + onCancel: () => { + p.cancel("Cancelled.") + process.exit(0) + } + } ) + const overwrite = prompts.overwrite + if (!overwrite) { + p.log.info( + `Skipped ${item.name}. To overwrite, run with the ${highlight("--overwrite")} flag.` + ) + continue + } + + spinner.start(`Installing ${highlight(item.name)}...`) + } else { + continue } } + + for (const file of item.files) { + let filePath = path.resolve(targetDir, file.name) + + // run transformers + const content = await transform({ + filename: file.name, + raw: file.content, + config: config + }) + + if (!config.tsx) { + filePath = filePath.replace(/\.tsx$/, ".jsx") + filePath = filePath.replace(/\.ts$/, ".js") + } + + await writeFile(filePath, content, "utf-8") + } + + // install dependencies + if (item.dependencies?.length) { + const packageManager = await getPackageManager(cwd) + await execa(packageManager, ["add", ...item.dependencies], { cwd }) + } } - } catch (error) { - log.error(`Something went wrong: ${error}`) - process.exit(1) - } - activityIndicator.stop("Successfully created components! 🎉") - return - } catch (error) { - activityIndicator.stop() - log.error( - `Something went wrong while creating your components. Have you ran ${chalk.green( - "solidui-cli init" - )}?` - ) - process.exit(1) - } -} + spinner.stop("Done.") + } catch (e) { + handleError(e) + } + }) diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index f87ce560..f2524b63 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -1,155 +1,167 @@ -import { existsSync, mkdirSync, writeFile, writeFileSync } from "fs" -import { cwd } from "process" - -import { confirm, log, select, spinner, text } from "@clack/prompts" -import { parse } from "valibot" - -import { PROJECT_DEPS, ROOT_CSS, TAILWIND_CONFIG, UTILS } from "~/lib/constants" -import { configSchema, type Config } from "~/lib/types" -import { readJsonFile, runCommand } from "~/lib/utils" - -export default async function init() { - const isTypescript = await confirm({ - message: "Would you like to use TypeScript? (recommended)", - initialValue: true - }) - const globalCssDir = await text({ - message: "Where is your global CSS file?", - initialValue: "src/app.css" - }) - const tailwindConfigDir = await text({ - message: "Where is your tailwind.config.js located?", - initialValue: "tailwind.config.cjs" - }) - const pathAlias = await text({ - message: "Configure the import alias for the src directory:", - initialValue: "~/*" - }) - - const config = parse(configSchema, { - tsx: isTypescript, - componentDir: "./src/components/ui", - tailwind: { - config: tailwindConfigDir, - css: globalCssDir - }, - aliases: { - path: pathAlias - } - }) - - saveConfig(config) - writeTsconfig(config.aliases.path) - writeUtils() - await writeTailwindConfig(config.tailwind.config) - await writeCSS(config.tailwind.css) - - log.success("Project configuration completed.") - - await installDeps() - - log.success("Success! Try 'npx solidui-cli add button' to add a button component to your project") - process.exit(0) -} - -function writeUtils() { - const doesLibPathExist = existsSync(cwd() + "/src/lib") - - const indicator = spinner() - indicator.start("Creating utils.ts file...") - - if (!doesLibPathExist) mkdirSync(cwd() + "/src/lib") - - writeFileSync(cwd() + "/src/lib/utils.ts", UTILS) - indicator.stop("Done creating utils.ts file!") -} - -async function writeCSS(cssPath: string) { - const indicator = spinner() - - indicator.start("Writing CSS styles...") - - writeFile( - cssPath, - ROOT_CSS, - (error) => error && log.error(error.message || "Something went wrong") - ) - - indicator.stop("Done Writing CSS styles!") -} - -async function installDeps() { - const shouldInstallDeps = await confirm({ - message: "Would you like to install the required dependencies? (recommended)", - initialValue: true - }) - - if (shouldInstallDeps) { - const packageManager = await select({ - message: "Which package manager would you like to use?", - options: [ - { label: "npm", value: "npm" }, - { label: "yarn", value: "yarn" }, - { label: "pnpm", value: "pnpm" }, - { label: "bun", value: "bun" } - ], - initialValue: "npm" - }) - - runCommand( - `${packageManager as string} ${ - packageManager === "yarn" ? "add" : "install" - } ${PROJECT_DEPS.join(" ")}`, - "Installing Solid UI Component dependencies", - "Dependencies installed" - ) - } -} +import { existsSync } from "node:fs" +import { mkdir, writeFile } from "node:fs/promises" +import path from "node:path" + +import * as p from "@clack/prompts" +import { Command } from "commander" +import { execa } from "execa" +import * as v from "valibot" + +import type { RawConfig } from "~/utils/config" +import { + DEFAULT_COMPONENTS, + DEFAULT_CSS_FILE, + DEFAULT_TAILWIND_CONFIG, + DEFAULT_TAILWIND_PREFIX, + DEFAULT_UTILS, + RawConfigSchema, + resolveConfigPaths +} from "~/utils/config" +import { getPackageInfo } from "~/utils/get-package-info" +import { getPackageManager } from "~/utils/get-package-manager" +import { handleError, headline, highlight, subtle } from "~/utils/logger" +import * as templates from "~/utils/templates" + +const PROJECT_DEPENDENCIES = [ + "tailwindcss-animate", + "class-variance-authority", + "clsx", + "tailwind-merge" +] + +const initOptionsSchema = v.object({ + cwd: v.string() +}) + +export const init = new Command() + .name("init") + .description("initialize your project and install dependencies") + .option("-c, --cwd ", "the working directory", process.cwd()) + .action(async (opts) => { + try { + const options = v.parse(initOptionsSchema, opts) + + const cwd = path.resolve(options.cwd) + if (!existsSync(cwd)) { + throw new Error(`The path ${cwd} does not exist. Please try again.`) + } + + const info = getPackageInfo() + p.intro(headline(` ${info.name} - ${info.version} `)) + + const rawConfig = await promptForConfig() + + const spinner = p.spinner() + spinner.start(`Creating ui.config.json...`) + + const targetPath = path.resolve(cwd, "ui.config.json") + await writeFile(targetPath, JSON.stringify(rawConfig, null, 2), "utf-8") + + spinner.stop(`ui.config.json created.`) + + const config = await resolveConfigPaths(cwd, rawConfig) + + spinner.start(`Initializing project...`) + + // make sure all the directories exist + for (const [key, resolvedPath] of Object.entries(config.resolvedPaths)) { + let dirname = path.extname(resolvedPath) ? path.dirname(resolvedPath) : resolvedPath + + if (key === "utils" && resolvedPath.endsWith("/utils")) { + dirname = dirname.replace(/\/utils$/, "") // remove /utils at the end + } + + if (!existsSync(dirname)) { + await mkdir(dirname, { recursive: true }) + } + } + + const extension = config.tsx ? "ts" : "js" + + await writeFile( + config.resolvedPaths.tailwindConfig, + templates.TAILWIND_CONFIG.replace("<%- prefix %>", config.tailwind.prefix), + "utf-8" + ) -function saveConfig(config: Config) { - const indicator = spinner() - indicator.start("Writing ui.config.json...") + await writeFile(config.resolvedPaths.tailwindCss, templates.TAILWIND_CSS, "utf-8") - writeFile("ui.config.json", JSON.stringify(config, null, 2), (error) => { - if (error) log.error("There was an error while saving your preferences") - }) - indicator.stop("ui.config.json successfully created!") -} + await writeFile( + `${config.resolvedPaths.utils}.${extension}`, + extension === "ts" ? templates.UTILS : templates.UTILS_JS, + "utf-8" + ) -async function writeTailwindConfig(tailwindConfigDir: string) { - const indicator = spinner() - indicator.start("Configuring tailwind.config.cjs to support Solid UI Components...") + spinner.stop(`Project initialized.`) - writeFile(tailwindConfigDir, TAILWIND_CONFIG, (error) => { - if (error) log.error(`Something went wrong while writing your tailwind.config.cjs: ${error}`) - }) + spinner.start(`Installing dependencies...`) - indicator.stop("Done done configuring your tailwind.config.cjs") -} + const packageManager = await getPackageManager(cwd) + await execa(packageManager, ["add", ...PROJECT_DEPENDENCIES], { cwd }) -function writeTsconfig(alias: string) { - const indicator = spinner() - indicator.start("Configuring your tsconfig.json") + spinner.stop(`Dependencies installed.`) - readJsonFile(process.cwd() + "/tsconfig.json", (error, data) => { - if (error) { - log.error( - "Something went wrong while configuring your tsconfig.json. Please make sure it is formatted correctly and doesn't contain any comments." + p.outro( + `${highlight("Success!")} Project initialization completed. You may now add components.` ) - process.exit(1) + } catch (e) { + handleError(e) } + }) - const tsconfigData = data as Record }> - - if (!tsconfigData.compilerOptions.paths) { - tsconfigData.compilerOptions.paths = {} +async function promptForConfig(): Promise { + const options = await p.group( + { + typescript: () => + p.confirm({ + message: `Would you like to use ${highlight("Typescript")} (recommended)?`, + initialValue: true + }), + cssFile: () => + p.text({ + message: `Where is your ${highlight("global CSS")} file? ${subtle("(this file will be overwritten)")}`, + initialValue: DEFAULT_CSS_FILE + }), + tailwindConfig: () => + p.text({ + message: `Where is your ${highlight("Tailwind config")} located? ${subtle("(this file will be overwritten)")}`, + initialValue: DEFAULT_TAILWIND_CONFIG + }), + tailwindPrefix: () => + p.text({ + message: `Are you using a custom ${highlight("tailwind prefix eg. tw-")}? (Leave blank if not)`, + initialValue: DEFAULT_TAILWIND_PREFIX + }), + components: () => + p.text({ + message: `Configure the import alias for ${highlight("components")}:`, + initialValue: DEFAULT_COMPONENTS + }), + utils: () => + p.text({ + message: `Configure the import alias for ${highlight("utils")}:`, + initialValue: DEFAULT_UTILS + }) + }, + { + onCancel: () => { + p.cancel("Cancelled.") + process.exit(0) + } } - tsconfigData.compilerOptions.paths[alias] = ["./src/*"] + ) - writeFile("tsconfig.json", JSON.stringify(tsconfigData, null, 2), (error) => { - if (error) log.error(`Something went wrong while configuring your tsconfig.json: ${error}`) - }) + return v.parse(RawConfigSchema, { + $schema: "https://solid-ui.com/schema.json", + tsx: options.typescript, + tailwind: { + css: options.cssFile, + config: options.tailwindConfig, + prefix: options.tailwindPrefix + }, + aliases: { + components: options.components, + utils: options.utils + } }) - - indicator.stop("Done configuring your tsconfig.json") } diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index b45abdb6..948e0755 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,26 +1,25 @@ #! /usr/bin/env node - import { Command } from "commander" -import { add } from "./commands/add" -import init from "./commands/init" +import { add } from "~/commands/add" +import { init } from "~/commands/init" +import { getPackageInfo } from "~/utils/get-package-info" -const program = new Command() +process.on("SIGINT", () => process.exit(0)) +process.on("SIGTERM", () => process.exit(0)) -program - .name("solidui-cli") - .description("A CLI used for the Solid-UI components library") - .version("0.1") +async function main() { + console.clear() -program - .command("init") - .description("Initialize and install the necessary things to make use of Solid-UI") - .action(async () => await init()) + const packageInfo = getPackageInfo() -program - .command("add") - .argument("[components...]", "Components to be added to your project") - .description("Add a component to your project") - .action(async (component: string[]) => await add(component)) + new Command() + .name("solidui-cli") + .description("add SolidUI components to your project") + .version(packageInfo.version || "0.0.0", "-v, --version", "display the version number") + .addCommand(init) + .addCommand(add) + .parse() +} -program.parse() +main() diff --git a/packages/cli/src/lib/transformImports.ts b/packages/cli/src/lib/transformImports.ts deleted file mode 100644 index 4198b993..00000000 --- a/packages/cli/src/lib/transformImports.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Config } from "./types" - -export function transformImports(source: string, config: Config) { - const pathAlias = config.aliases.path.replace("/*", "") - return source - .replaceAll(/~\/registry\/ui/g, `${pathAlias}/components/ui`) - .replaceAll(/~\/lib\/utils/g, `${pathAlias}/lib/utils`) -} diff --git a/packages/cli/src/lib/types.ts b/packages/cli/src/lib/types.ts deleted file mode 100644 index 6db8b144..00000000 --- a/packages/cli/src/lib/types.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Output } from "valibot" -import { boolean, object, string } from "valibot" - -export enum CommandTypes { - "init", - "add" -} - -export interface ComponentFile { - name: string - content: string -} - -export interface RegistryComponentResponse { - name: string - dependencies: string[] - registryDependencies: string[] - files: ComponentFile[] - type: string -} - -export type RegistryComponentsList = { - name: string - files: string[] - dependencies: string[] - type: string -}[] - -export const configSchema = object({ - tsx: boolean(), - componentDir: string(), - tailwind: object({ - config: string(), - css: string() - }), - aliases: object({ - path: string() - }) -}) -export type Config = Output diff --git a/packages/cli/src/lib/utils.ts b/packages/cli/src/lib/utils.ts deleted file mode 100644 index b67a9378..00000000 --- a/packages/cli/src/lib/utils.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { execSync } from "child_process" -import { readFile } from "fs" - -import { detect } from "@antfu/ni" -import { log, spinner } from "@clack/prompts" -import JSON5 from "json5" - -export function readJsonFile( - filePath: string, - callback: (error: Error | null, data: unknown | null) => void -): void { - readFile(filePath, "utf8", (err, data) => { - if (err) { - callback(err, null) - return - } - - try { - const jsonObject = JSON5.parse(data) - callback(null, jsonObject) - } catch (parseError) { - callback(parseError as Error, null) - } - }) -} - -export function runCommand(command: string, message?: string, endMessage?: string) { - try { - const indicator = spinner() - indicator.start(message) - - execSync(command) - - indicator.stop(endMessage ?? "Done") - } catch (error) { - log.error(`${error}`) - } -} - -export function removeExtension(value: string) { - const splitWords = value.split(".") - - return splitWords[0] -} - -export async function installPackages(...packages: string[]) { - const packageManager = await detect({ programmatic: true }) - - switch (packageManager) { - case "bun": - case "pnpm": - case "pnpm@6": - case "yarn": - case "yarn@berry": - runCommand(`${packageManager} add ${packages.join(" ")}`, "Installing dependencies") - break - default: - runCommand(`${packageManager} install ${packages.join(" ")}`, "Installing dependencies") - } -} diff --git a/packages/cli/src/utils/config.ts b/packages/cli/src/utils/config.ts new file mode 100644 index 00000000..2fc13ebe --- /dev/null +++ b/packages/cli/src/utils/config.ts @@ -0,0 +1,85 @@ +import { existsSync, readFileSync } from "node:fs" +import path from "node:path" + +import { loadConfig } from "tsconfig-paths" +import * as v from "valibot" + +import { resolveImport } from "~/utils/resolve-import" + +export const DEFAULT_COMPONENTS = "~/components/ui" +export const DEFAULT_UTILS = "~/lib/utils" +export const DEFAULT_CSS_FILE = "src/app.css" +export const DEFAULT_TAILWIND_CONFIG = "tailwind.config.cjs" +export const DEFAULT_TAILWIND_PREFIX = "" + +export const RawConfigSchema = v.object({ + $schema: v.optional(v.string()), + tsx: v.boolean(), + tailwind: v.object({ + css: v.string(), + config: v.string(), + prefix: v.optional(v.string(), "") + }), + aliases: v.object({ + components: v.string(), + utils: v.string() + }) +}) + +export type RawConfig = v.InferOutput + +export const ConfigSchema = v.object({ + ...RawConfigSchema.entries, + resolvedPaths: v.object({ + tailwindConfig: v.string(), + tailwindCss: v.string(), + utils: v.string(), + components: v.string() + }) +}) + +export type Config = v.InferOutput + +export async function resolveConfigPaths(cwd: string, config: RawConfig) { + const tsConfig = await loadConfig(cwd) + + if (tsConfig.resultType === "failed") { + throw new Error( + `Failed to load ${config.tsx ? "tsconfig" : "jsconfig"}.json. ${tsConfig.message ?? ""}`.trim() + ) + } + + return v.parse(ConfigSchema, { + ...config, + resolvedPaths: { + tailwindConfig: path.resolve(cwd, config.tailwind.config), + tailwindCss: path.resolve(cwd, config.tailwind.css), + utils: await resolveImport(config.aliases.utils, tsConfig), + components: await resolveImport(config.aliases.components, tsConfig) + } + }) +} + +export function getRawConfig(cwd: string) { + try { + const configPath = path.resolve(cwd, "ui.config.json") + + if (!existsSync(configPath)) { + return null + } + + const config = JSON.parse(readFileSync(configPath).toString()) + + return v.parse(RawConfigSchema, config) + } catch (error) { + throw new Error(`Invalid configuration found in ${cwd}/ui.config.json.`) + } +} + +export async function getConfig(cwd: string) { + const config = getRawConfig(cwd) + if (!config) { + return null + } + return await resolveConfigPaths(cwd, config) +} diff --git a/packages/cli/src/utils/get-package-info.ts b/packages/cli/src/utils/get-package-info.ts new file mode 100644 index 00000000..14a37ef1 --- /dev/null +++ b/packages/cli/src/utils/get-package-info.ts @@ -0,0 +1,22 @@ +import fs from "node:fs" +import { dirname, resolve } from "node:path" +import { fileURLToPath } from "node:url" + +type PackageJSON = { + name: string + description: string + version: string +} + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +export function getPackageInfo() { + const location = resolve(__dirname, "..", "package.json") + return readJSONSync(location) as PackageJSON +} + +function readJSONSync(path: string) { + const content = fs.readFileSync(path, { encoding: "utf-8" }) + return JSON.parse(content) +} diff --git a/packages/cli/src/utils/get-package-manager.ts b/packages/cli/src/utils/get-package-manager.ts new file mode 100644 index 00000000..91efb416 --- /dev/null +++ b/packages/cli/src/utils/get-package-manager.ts @@ -0,0 +1,13 @@ +import { detect } from "@antfu/ni" + +export async function getPackageManager( + targetDir: string +): Promise<"yarn" | "pnpm" | "bun" | "npm"> { + const packageManager = await detect({ programmatic: true, cwd: targetDir }) + + if (packageManager === "yarn@berry") return "yarn" + if (packageManager === "pnpm@6") return "pnpm" + if (packageManager === "bun") return "bun" + + return packageManager ?? "npm" +} diff --git a/packages/cli/src/utils/logger.ts b/packages/cli/src/utils/logger.ts new file mode 100644 index 00000000..c199991b --- /dev/null +++ b/packages/cli/src/utils/logger.ts @@ -0,0 +1,25 @@ +import * as p from "@clack/prompts" +import chalk from "chalk" + +export const headline = (text: string) => chalk.bgGreen.bold.black(text) +export const highlight = (text: string) => chalk.bold.green(text) +export const subtle = (text: string) => chalk.grey(text) + +export function handleError(error: unknown) { + // provide a newline gap + p.log.message() + + if (typeof error === "string") { + p.cancel(error) + process.exit(1) + } + + // unexpected error + if (error instanceof Error) { + p.cancel(error.stack) + process.exit(1) + } + + p.cancel("Something went wrong. Please try again.") + process.exit(1) +} diff --git a/packages/cli/src/utils/registry.ts b/packages/cli/src/utils/registry.ts new file mode 100644 index 00000000..337487e3 --- /dev/null +++ b/packages/cli/src/utils/registry.ts @@ -0,0 +1,89 @@ +import * as v from "valibot" + +const BASE_URL = "https://www.solid-ui.com" + +export const RegistryIndexSchema = v.array( + v.object({ + name: v.string(), + dependencies: v.optional(v.array(v.string())), + registryDependencies: v.optional(v.array(v.string())), + files: v.array(v.string()), + type: v.picklist(["ui", "example"]) + }) +) + +export type RegistryIndex = v.InferOutput + +export const RegistryItemSchema = v.object({ + name: v.string(), + dependencies: v.optional(v.array(v.string())), + files: v.array( + v.object({ + name: v.string(), + content: v.string() + }) + ), + type: v.picklist(["ui", "example"]) +}) + +export type RegistryItem = v.InferOutput + +async function fetchRegistry(paths: string[]) { + try { + const results = await Promise.all( + paths.map(async (path) => { + const url = `${BASE_URL}/registry/${path}` + console.log("fetch", url) + const response = await fetch(`${BASE_URL}/registry/${path}`) + return await response.json() + }) + ) + return results + } catch (e) { + console.log(e) + throw new Error(`Failed to fetch registry from ${BASE_URL}.`) + } +} + +export async function getRegistryIndex() { + try { + const [result] = await fetchRegistry(["index.json"]) + return v.parse(RegistryIndexSchema, result).filter((item) => item.type === "ui") + } catch (e) { + throw new Error(`Failed to fetch components from registry.`) + } +} + +export async function resolveTree(index: RegistryIndex, names: string[]) { + const tree: RegistryIndex = [] + + for (const name of names) { + const entry = index.find((entry) => entry.name === name) + if (!entry) { + continue + } + + tree.push(entry) + + if (entry.registryDependencies) { + const dependencies = await resolveTree(index, entry.registryDependencies) + tree.push(...dependencies) + } + } + + // filter out duplicates + return tree.filter( + (component, idx, self) => self.findIndex((c) => c.name === component.name) === idx + ) +} + +export async function fetchTree(tree: RegistryIndex) { + try { + const paths = tree.map((item) => `ui/${item.name}.json`) + const results = await fetchRegistry(paths) + + return v.parse(v.array(RegistryItemSchema), results) + } catch (e) { + throw new Error(`Failed to fetch components from registry.`) + } +} diff --git a/packages/cli/src/utils/resolve-import.ts b/packages/cli/src/utils/resolve-import.ts new file mode 100644 index 00000000..b79f28dd --- /dev/null +++ b/packages/cli/src/utils/resolve-import.ts @@ -0,0 +1,11 @@ +import { createMatchPath, type ConfigLoaderSuccessResult } from "tsconfig-paths" + +export async function resolveImport( + importPath: string, + config: Pick +) { + return createMatchPath(config.absoluteBaseUrl, config.paths)(importPath, undefined, () => true, [ + ".ts", + ".tsx" + ]) +} diff --git a/packages/cli/src/lib/constants.ts b/packages/cli/src/utils/templates.ts similarity index 80% rename from packages/cli/src/lib/constants.ts rename to packages/cli/src/utils/templates.ts index 5450b41d..d351a1ec 100644 --- a/packages/cli/src/lib/constants.ts +++ b/packages/cli/src/utils/templates.ts @@ -1,25 +1,126 @@ -export const PROJECT_DEPS = [ - "tailwindcss", - "tailwindcss-animate", - "tailwind-merge", - "class-variance-authority", - "clsx", - "@kobalte/core" -] - -export const registryUrl = "https://www.solid-ui.com/registry" -export const registryUIUrl = "https://www.solid-ui.com/registry/ui" -export const registryIndexUrl = "https://www.solid-ui.com/registry/index.json" - -export const UTILS = `import type { ClassValue } from "clsx" -import { clsx } from "clsx" +export const UTILS = `import { type ClassValue, clsx } from "clsx" import { twMerge } from "tailwind-merge" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) -}` +} +` + +export const UTILS_JS = `import { clsx } from "clsx" +import { twMerge } from "tailwind-merge" -export const ROOT_CSS = `@tailwind base; +export function cn(...inputs) { + return twMerge(clsx(inputs)) +} +` + +export const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ["variant", [".dark &", '[data-kb-theme="dark"] &']], + content: ["./src/**/*.{ts,tsx}"], + prefix: "<%- prefix %>", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px" + } + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))" + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))" + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))" + }, + info: { + DEFAULT: "hsl(var(--info))", + foreground: "hsl(var(--info-foreground))" + }, + success: { + DEFAULT: "hsl(var(--success))", + foreground: "hsl(var(--success-foreground))" + }, + warning: { + DEFAULT: "hsl(var(--warning))", + foreground: "hsl(var(--warning-foreground))" + }, + error: { + DEFAULT: "hsl(var(--error))", + foreground: "hsl(var(--error-foreground))" + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))" + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))" + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))" + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))" + } + }, + borderRadius: { + xl: "calc(var(--radius) + 4px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--kb-accordion-content-height)" } + }, + "accordion-up": { + from: { height: "var(--kb-accordion-content-height)" }, + to: { height: 0 } + }, + "content-show": { + from: { opacity: 0, transform: "scale(0.96)" }, + to: { opacity: 1, transform: "scale(1)" } + }, + "content-hide": { + from: { opacity: 1, transform: "scale(1)" }, + to: { opacity: 0, transform: "scale(0.96)" } + }, + "caret-blink": { + "0%,70%,100%": { opacity: "1" }, + "20%,50%": { opacity: "0" } + } + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + "content-show": "content-show 0.2s ease-out", + "content-hide": "content-hide 0.2s ease-out", + "caret-blink": "caret-blink 1.25s ease-out infinite" + } + } + }, + plugins: [require("tailwindcss-animate")] +} +` + +export const TAILWIND_CSS = `@tailwind base; @tailwind components; @tailwind utilities; @@ -128,107 +229,36 @@ export const ROOT_CSS = `@tailwind base; } } +@layer utilities { + .step { + counter-increment: step; + } + + .step:before { + @apply absolute w-9 h-9 bg-muted rounded-full font-mono font-medium text-center text-base inline-flex items-center justify-center -indent-px border-4 border-background; + @apply ml-[-50px] mt-[-4px]; + content: counter(step); + } +} + @media (max-width: 640px) { .container { @apply px-4; } -}` +} -export const TAILWIND_CONFIG = `/**@type {import("tailwindcss").Config} */ -module.exports = { - darkMode: ["class", '[data-kb-theme="dark"]'], - content: ["./src/**/*.{ts,tsx}"], - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px" - } - }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))" - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))" - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))" - }, - info: { - DEFAULT: "hsl(var(--info))", - foreground: "hsl(var(--info-foreground))" - }, - success: { - DEFAULT: "hsl(var(--success))", - foreground: "hsl(var(--success-foreground))" - }, - warning: { - DEFAULT: "hsl(var(--warning))", - foreground: "hsl(var(--warning-foreground))" - }, - error: { - DEFAULT: "hsl(var(--error))", - foreground: "hsl(var(--error-foreground))" - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))" - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))" - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))" - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))" - } - }, - borderRadius: { - xl: "calc(var(--radius) + 4px)", - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)" - }, - keyframes: { - "accordion-down": { - from: { height: 0 }, - to: { height: "var(--kb-accordion-content-height)" } - }, - "accordion-up": { - from: { height: "var(--kb-accordion-content-height)" }, - to: { height: 0 } - }, - "content-show": { - from: { opacity: 0, transform: "scale(0.96)" }, - to: { opacity: 1, transform: "scale(1)" } - }, - "content-hide": { - from: { opacity: 1, transform: "scale(1)" }, - to: { opacity: 0, transform: "scale(0.96)" } - } - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - "content-show": "content-show 0.2s ease-out", - "content-hide": "content-hide 0.2s ease-out" - } - } - }, - plugins: [require("tailwindcss-animate")] -}` +::-webkit-scrollbar { + width: 16px; +} + +::-webkit-scrollbar-thumb { + border-radius: 9999px; + border: 4px solid transparent; + background-clip: content-box; + @apply bg-accent; +} + +::-webkit-scrollbar-corner { + display: none; +} +` diff --git a/packages/cli/src/utils/transformers/index.ts b/packages/cli/src/utils/transformers/index.ts new file mode 100644 index 00000000..7c6c0766 --- /dev/null +++ b/packages/cli/src/utils/transformers/index.ts @@ -0,0 +1,41 @@ +import { mkdtemp } from "node:fs/promises" +import { tmpdir } from "node:os" +import path from "node:path" + +import { Project, ScriptKind, type SourceFile } from "ts-morph" + +import type { Config } from "~/utils/config" +import { transformImport } from "~/utils/transformers/transform-import" +import { transformJsx } from "~/utils/transformers/transform-jsx" +import { transformTwPrefix } from "~/utils/transformers/transform-tw-prefix" + +export type TransformProps = { + filename: string + raw: string + config: Config +} + +export type Transformer = ( + props: TransformProps & { + sourceFile: SourceFile + } +) => Promise + +const project = new Project({ + compilerOptions: {} +}) + +async function createTempSourceFile(filename: string) { + const dir = await mkdtemp(path.join(tmpdir(), "solidui-")) + return path.join(dir, filename) +} + +export async function transform(props: TransformProps) { + const tempFile = await createTempSourceFile(props.filename) + const sourceFile = project.createSourceFile(tempFile, props.raw, { scriptKind: ScriptKind.TSX }) + + transformImport({ sourceFile, ...props }) + transformTwPrefix({ sourceFile, ...props }) + + return await transformJsx({ sourceFile, ...props }) +} diff --git a/packages/cli/src/utils/transformers/transform-import.ts b/packages/cli/src/utils/transformers/transform-import.ts new file mode 100644 index 00000000..a8b2c52d --- /dev/null +++ b/packages/cli/src/utils/transformers/transform-import.ts @@ -0,0 +1,20 @@ +import type { Transformer } from "~/utils/transformers" + +export const transformImport: Transformer = async ({ sourceFile, config }) => { + const importDeclarations = sourceFile.getImportDeclarations() + + for (const importDeclaration of importDeclarations) { + const moduleSpecifier = importDeclaration.getModuleSpecifierValue() + + if (moduleSpecifier.startsWith("~/registry/")) { + importDeclaration.setModuleSpecifier( + moduleSpecifier.replace(/^~\/registry\/ui/, config.aliases.components) + ) + } else if (moduleSpecifier === "~/lib/utils") { + importDeclaration.setModuleSpecifier( + moduleSpecifier.replace(/^~\/lib\/utils/, config.aliases.utils) + ) + } + } + return sourceFile +} diff --git a/packages/cli/src/lib/transpileTS.ts b/packages/cli/src/utils/transformers/transform-jsx.ts similarity index 82% rename from packages/cli/src/lib/transpileTS.ts rename to packages/cli/src/utils/transformers/transform-jsx.ts index b702fd8f..e3a34bef 100644 --- a/packages/cli/src/lib/transpileTS.ts +++ b/packages/cli/src/utils/transformers/transform-jsx.ts @@ -1,9 +1,11 @@ import { transformFromAstSync } from "@babel/core" -import { type ParserOptions, parse } from "@babel/parser" +import { parse, type ParserOptions } from "@babel/parser" // @ts-ignore import transformTypescript from "@babel/plugin-transform-typescript" import * as recast from "recast" +import type { Transformer } from "~/utils/transformers" + // TODO. // I'm using recast for the AST here. // Figure out if ts-morph AST is compatible with Babel. @@ -60,8 +62,14 @@ const PARSE_OPTIONS: ParserOptions = { ] } -export const transpileTS = (source: string) => { - const ast = recast.parse(source, { +export const transformJsx: Transformer = async ({ sourceFile, config }) => { + const output = sourceFile.getFullText() + + if (config.tsx) { + return output + } + + const ast = recast.parse(output, { parser: { parse: (code: string) => { return parse(code, PARSE_OPTIONS) @@ -69,7 +77,7 @@ export const transpileTS = (source: string) => { } }) - const result = transformFromAstSync(ast, source, { + const result = transformFromAstSync(ast, output, { cloneInputAst: false, code: false, ast: true, diff --git a/packages/cli/src/utils/transformers/transform-tw-prefix.ts b/packages/cli/src/utils/transformers/transform-tw-prefix.ts new file mode 100644 index 00000000..0cf6f388 --- /dev/null +++ b/packages/cli/src/utils/transformers/transform-tw-prefix.ts @@ -0,0 +1,138 @@ +import { SyntaxKind } from "ts-morph" + +import type { Transformer } from "~/utils/transformers" + +export const transformTwPrefix: Transformer = async ({ sourceFile, config }) => { + if (!config.tailwind.prefix) { + return sourceFile + } + + // Find the cva function calls. + sourceFile + .getDescendantsOfKind(SyntaxKind.CallExpression) + .filter((node) => node.getExpression().getText() === "cva") + .forEach((node) => { + // cva(base, ...) + if (node.getArguments()[0]?.isKind(SyntaxKind.StringLiteral)) { + const defaultClassNames = node.getArguments()[0] + if (defaultClassNames) { + defaultClassNames.replaceWithText( + `"${applyPrefix(defaultClassNames.getText()?.replace(/"/g, ""), config.tailwind.prefix)}"` + ) + } + } + + // cva(..., { variants: { ... } }) + if (node.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)) { + node + .getArguments()[1] + ?.getDescendantsOfKind(SyntaxKind.PropertyAssignment) + .find((node) => node.getName() === "variants") + ?.getDescendantsOfKind(SyntaxKind.PropertyAssignment) + .forEach((node) => { + node.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach((node) => { + const classNames = node.getInitializerIfKind(SyntaxKind.StringLiteral) + if (classNames) { + classNames?.replaceWithText( + `"${applyPrefix(classNames.getText()?.replace(/"/g, ""), config.tailwind.prefix)}"` + ) + } + }) + }) + } + }) + + // Find all jsx attributes with the name class. + sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach((node) => { + if (node.getName() === "class") { + // class="..." + if (node.getInitializer()?.isKind(SyntaxKind.StringLiteral)) { + const value = node.getInitializer() + if (value) { + value.replaceWithText( + `"${applyPrefix(value.getText()?.replace(/"/g, ""), config.tailwind.prefix)}"` + ) + } + } + + // class={...} + if (node.getInitializer()?.isKind(SyntaxKind.JsxExpression)) { + // Check if it's a call to cn(). + const callExpression = node + .getInitializer() + ?.getDescendantsOfKind(SyntaxKind.CallExpression) + .find((node) => node.getExpression().getText() === "cn") + if (callExpression) { + // Loop through the arguments. + callExpression.getArguments().forEach((node) => { + if ( + node.isKind(SyntaxKind.ConditionalExpression) || + node.isKind(SyntaxKind.BinaryExpression) + ) { + node.getChildrenOfKind(SyntaxKind.StringLiteral).forEach((node) => { + node.replaceWithText( + `"${applyPrefix(node.getText()?.replace(/"/g, ""), config.tailwind.prefix)}"` + ) + }) + } + + if (node.isKind(SyntaxKind.StringLiteral)) { + node.replaceWithText( + `"${applyPrefix(node.getText()?.replace(/"/g, ""), config.tailwind.prefix)}"` + ) + } + }) + } + } + } + }) + + return sourceFile +} + +export function applyPrefix(input: string, prefix: string = "") { + const classNames = input.split(" ") + const prefixed: string[] = [] + for (const className of classNames) { + const [variant, value, modifier] = splitClassName(className) + if (variant) { + modifier + ? prefixed.push(`${variant}:${prefix}${value}/${modifier}`) + : prefixed.push(`${variant}:${prefix}${value}`) + } else { + modifier ? prefixed.push(`${prefix}${value}/${modifier}`) : prefixed.push(`${prefix}${value}`) + } + } + return prefixed.join(" ") +} + +// Splits a class into variant-name-alpha. +// eg. hover:bg-primary-100 -> [hover, bg-primary, 100] +export function splitClassName(className: string): (string | null)[] { + if (!className.includes("/") && !className.includes(":")) { + return [null, className, null] + } + + const parts: (string | null)[] = [] + // First we split to find the alpha. + const [rest, alpha] = className.split("/") + + // Check if rest has a colon. + if (!rest?.includes(":")) { + return [null, rest!, alpha!] + } + + // Next we split the rest by the colon. + const split = rest?.split(":") + + // We take the last item from the split as the name. + const name = split.pop() + + // We glue back the rest of the split. + const variant = split.join(":") + + // Finally we push the variant, name and alpha. + parts.push(variant ?? null, name ?? null, alpha ?? null) + + return parts +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d05db85..65367bf0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.17.0 - version: 7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.5.4) + version: 7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.6.2) valibot: specifier: ^0.36.0 version: 0.36.0 @@ -26,7 +26,7 @@ importers: version: 4.3.1(prettier@3.3.3) '@typescript-eslint/parser': specifier: ^7.17.0 - version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) + version: 7.17.0(eslint@8.57.0)(typescript@5.6.2) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.39) @@ -35,7 +35,7 @@ importers: version: 8.57.0 eslint-plugin-solid: specifier: ^0.14.1 - version: 0.14.1(eslint@8.57.0)(typescript@5.5.4) + version: 0.14.1(eslint@8.57.0)(typescript@5.6.2) eslint-plugin-tailwindcss: specifier: ^3.17.4 version: 3.17.4(tailwindcss@3.4.6) @@ -191,57 +191,51 @@ importers: packages/cli: dependencies: '@antfu/ni': - specifier: ^0.21.12 - version: 0.21.12 + specifier: ^0.23.0 + version: 0.23.0 '@babel/core': - specifier: ^7.22.20 - version: 7.23.0 + specifier: ^7.25.2 + version: 7.25.2 '@babel/parser': - specifier: ^7.22.16 - version: 7.23.0 + specifier: ^7.25.6 + version: 7.25.6 '@babel/plugin-transform-typescript': - specifier: ^7.22.15 - version: 7.22.15(@babel/core@7.23.0) - '@clack/core': - specifier: ^0.3.2 - version: 0.3.3 + specifier: ^7.25.2 + version: 7.25.2(@babel/core@7.25.2) '@clack/prompts': - specifier: ^0.6.3 - version: 0.6.3 - '@types/babel__core': - specifier: ^7.20.2 - version: 7.20.2 + specifier: ^0.7.0 + version: 0.7.0 chalk: specifier: ^5.3.0 version: 5.3.0 commander: - specifier: ^11.0.0 - version: 11.0.0 - json5: - specifier: ^2.2.3 - version: 2.2.3 - prompts: - specifier: ^2.4.2 - version: 2.4.2 + specifier: ^12.1.0 + version: 12.1.0 + execa: + specifier: ^9.4.0 + version: 9.4.0 recast: - specifier: ^0.23.4 - version: 0.23.4 + specifier: ^0.23.9 + version: 0.23.9 ts-morph: - specifier: ^20.0.0 - version: 20.0.0 + specifier: ^18.0.0 + version: 18.0.0 + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 devDependencies: + '@types/babel__core': + specifier: ^7.20.5 + version: 7.20.5 '@types/node': - specifier: ^18.14.0 - version: 18.17.3 - '@types/prompts': - specifier: ^2.4.5 - version: 2.4.5 + specifier: ^20.14.12 + version: 20.14.12 tsup: - specifier: ^7.2.0 - version: 7.2.0(postcss@8.4.39)(typescript@5.1.6) + specifier: ^8.3.0 + version: 8.3.0(postcss@8.4.39)(typescript@5.6.2) typescript: - specifier: ^5.1.6 - version: 5.1.6 + specifier: ^5.6.2 + version: 5.6.2 packages: @@ -249,14 +243,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - dev: false - /@ampproject/remapping@2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -264,8 +250,8 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@antfu/ni@0.21.12: - resolution: {integrity: sha512-2aDL3WUv8hMJb2L3r/PIQWsTLyq7RQr3v9xD16fiz6O8ys1xEyLhhTOv8gxtZvJiTzjTF5pHoArvRdesGL1DMQ==} + /@antfu/ni@0.23.0: + resolution: {integrity: sha512-R5/GkA3PfGewAXLzz6lN5XagunF6PKeDtWt8dbZQXvHfebLS0qEczV+Azg/d+tKgSh6kRBpxvu8oSjARdPtw0A==} hasBin: true dev: false @@ -279,14 +265,7 @@ packages: dependencies: '@babel/highlight': 7.22.20 chalk: 2.4.2 - - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.1 - dev: false + dev: true /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -295,36 +274,13 @@ packages: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - /@babel/compat-data@7.22.9: - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} - engines: {node: '>=6.9.0'} - dev: false - /@babel/compat-data@7.24.9: resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.0: - resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) - '@babel/helpers': 7.23.1 - '@babel/parser': 7.23.0 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.0 - '@babel/types': 7.23.0 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color dev: false /@babel/core@7.24.9: @@ -349,24 +305,27 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - dev: false - - /@babel/generator@7.24.1: - resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: false /@babel/generator@7.24.10: @@ -378,22 +337,21 @@ packages: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 dev: false - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + /@babel/helper-annotate-as-pure@7.24.7: + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 + '@babel/types': 7.25.6 dev: false /@babel/helper-compilation-targets@7.24.8: @@ -406,32 +364,33 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.23.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.2 + lru-cache: 5.1.1 semver: 6.3.1 dev: false - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + /@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-environment-visitor@7.24.7: @@ -440,22 +399,6 @@ packages: dependencies: '@babel/types': 7.24.9 - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.22.5 - dev: false - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - dev: false - /@babel/helper-function-name@7.24.7: resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} @@ -463,24 +406,20 @@ packages: '@babel/template': 7.24.7 '@babel/types': 7.24.9 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: false - /@babel/helper-hoist-variables@7.24.7: resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.9 - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + /@babel/helper-member-expression-to-functions@7.24.8: + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-module-imports@7.18.6: @@ -490,13 +429,6 @@ packages: '@babel/types': 7.24.9 dev: false - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - dev: false - /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} @@ -506,20 +438,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: false - /@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9): resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} engines: {node: '>=6.9.0'} @@ -535,16 +453,26 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: false - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-optimise-call-expression@7.24.7: + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 dev: false /@babel/helper-plugin-utils@7.24.8: @@ -552,23 +480,18 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/helper-replace-supers@7.22.9(@babel/core@7.23.0): - resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + /@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: false - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-simple-access@7.24.7: @@ -580,18 +503,14 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 - dev: false - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-split-export-declaration@7.24.7: @@ -600,16 +519,6 @@ packages: dependencies: '@babel/types': 7.24.9 - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-string-parser@7.24.8: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} @@ -617,36 +526,16 @@ packages: /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} - dev: false + dev: true /@babel/helper-validator-identifier@7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-validator-option@7.24.8: resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.23.1: - resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.0 - '@babel/types': 7.23.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/helpers@7.24.8: resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} engines: {node: '>=6.9.0'} @@ -654,23 +543,22 @@ packages: '@babel/template': 7.24.7 '@babel/types': 7.24.9 - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + dev: false - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 - dev: false + dev: true /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} @@ -681,28 +569,19 @@ packages: js-tokens: 4.0.0 picocolors: 1.0.1 - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + /@babel/parser@7.24.8: + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.5 - dev: false + '@babel/types': 7.24.9 - /@babel/parser@7.24.1: - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.0 - dev: false - - /@babel/parser@7.24.8: - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.6 /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.9): resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} @@ -714,37 +593,40 @@ packages: '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.9): + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.9): + /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 dev: false - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + /@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: false /@babel/runtime@7.22.6: @@ -754,24 +636,6 @@ packages: regenerator-runtime: 0.13.11 dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - dev: false - - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 - dev: false - /@babel/template@7.24.7: resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} @@ -780,22 +644,13 @@ packages: '@babel/parser': 7.24.8 '@babel/types': 7.24.9 - /@babel/traverse@7.23.0: - resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.24.1 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 dev: false /@babel/traverse@7.24.8: @@ -815,35 +670,31 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - dev: false - - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: false - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + /@babel/types@7.24.9: + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - dev: false - /@babel/types@7.24.9: - resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.8 @@ -1055,15 +906,15 @@ packages: /@clack/core@0.3.3: resolution: {integrity: sha512-5ZGyb75BUBjlll6eOa1m/IZBxwk91dooBWhPSL67sWcLS0zt9SnswRL0l26TVdBhb0wnWORRxUn//uH6n4z7+A==} dependencies: - picocolors: 1.0.0 + picocolors: 1.0.1 sisteransi: 1.0.5 dev: false - /@clack/prompts@0.6.3: - resolution: {integrity: sha512-AM+kFmAHawpUQv2q9+mcB6jLKxXGjgu/r2EQjEwujgpCdzrST6BJqYw00GRn56/L/Izw5U7ImoLmy00X/r80Pw==} + /@clack/prompts@0.7.0: + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} dependencies: '@clack/core': 0.3.3 - picocolors: 1.0.0 + picocolors: 1.0.1 sisteransi: 1.0.5 dev: false bundledDependencies: @@ -1164,11 +1015,11 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + /@esbuild/aix-ppc64@0.23.0: + resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] requiresBuild: true dev: true optional: true @@ -1199,10 +1050,10 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] + /@esbuild/android-arm64@0.23.0: + resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] requiresBuild: true dev: true @@ -1234,10 +1085,10 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] + /@esbuild/android-arm@0.23.0: + resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} + engines: {node: '>=18'} + cpu: [arm] os: [android] requiresBuild: true dev: true @@ -1269,11 +1120,11 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + /@esbuild/android-x64@0.23.0: + resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] requiresBuild: true dev: true optional: true @@ -1304,10 +1155,10 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] + /@esbuild/darwin-arm64@0.23.0: + resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] requiresBuild: true dev: true @@ -1339,11 +1190,11 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + /@esbuild/darwin-x64@0.23.0: + resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] requiresBuild: true dev: true optional: true @@ -1374,10 +1225,10 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] + /@esbuild/freebsd-arm64@0.23.0: + resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] requiresBuild: true dev: true @@ -1409,11 +1260,11 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + /@esbuild/freebsd-x64@0.23.0: + resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] requiresBuild: true dev: true optional: true @@ -1444,10 +1295,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] + /@esbuild/linux-arm64@0.23.0: + resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] requiresBuild: true dev: true @@ -1479,10 +1330,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] + /@esbuild/linux-arm@0.23.0: + resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] requiresBuild: true dev: true @@ -1514,10 +1365,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] + /@esbuild/linux-ia32@0.23.0: + resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] requiresBuild: true dev: true @@ -1549,10 +1400,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] + /@esbuild/linux-loong64@0.23.0: + resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] requiresBuild: true dev: true @@ -1584,10 +1435,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] + /@esbuild/linux-mips64el@0.23.0: + resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] requiresBuild: true dev: true @@ -1619,10 +1470,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] + /@esbuild/linux-ppc64@0.23.0: + resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] requiresBuild: true dev: true @@ -1654,10 +1505,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] + /@esbuild/linux-riscv64@0.23.0: + resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] requiresBuild: true dev: true @@ -1689,10 +1540,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] + /@esbuild/linux-s390x@0.23.0: + resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] requiresBuild: true dev: true @@ -1724,11 +1575,11 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} + /@esbuild/linux-x64@0.23.0: + resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} + engines: {node: '>=18'} cpu: [x64] - os: [netbsd] + os: [linux] requiresBuild: true dev: true optional: true @@ -1759,10 +1610,19 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} + /@esbuild/netbsd-x64@0.23.0: + resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} + engines: {node: '>=18'} cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.23.0: + resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] requiresBuild: true dev: true @@ -1794,11 +1654,11 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} + /@esbuild/openbsd-x64@0.23.0: + resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] requiresBuild: true dev: true optional: true @@ -1829,11 +1689,11 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + /@esbuild/sunos-x64@0.23.0: + resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] requiresBuild: true dev: true optional: true @@ -1864,10 +1724,10 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] + /@esbuild/win32-arm64@0.23.0: + resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] requiresBuild: true dev: true @@ -1899,10 +1759,10 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] + /@esbuild/win32-ia32@0.23.0: + resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] requiresBuild: true dev: true @@ -1934,6 +1794,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.23.0: + resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2059,14 +1928,6 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 - /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -2079,10 +1940,6 @@ packages: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} @@ -2094,9 +1951,6 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -2104,12 +1958,6 @@ packages: resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} dev: false - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: @@ -2569,7 +2417,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: false optional: true /@rollup/rollup-android-arm64@4.19.0: @@ -2577,7 +2424,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: false optional: true /@rollup/rollup-darwin-arm64@4.19.0: @@ -2585,7 +2431,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: false optional: true /@rollup/rollup-darwin-x64@4.19.0: @@ -2593,7 +2438,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-arm-gnueabihf@4.19.0: @@ -2601,7 +2445,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-arm-musleabihf@4.19.0: @@ -2609,7 +2452,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-arm64-gnu@4.19.0: @@ -2617,7 +2459,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-arm64-musl@4.19.0: @@ -2625,7 +2466,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-powerpc64le-gnu@4.19.0: @@ -2633,7 +2473,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-riscv64-gnu@4.19.0: @@ -2641,7 +2480,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-s390x-gnu@4.19.0: @@ -2649,7 +2487,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-x64-gnu@4.19.0: @@ -2657,7 +2494,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-linux-x64-musl@4.19.0: @@ -2665,7 +2501,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true /@rollup/rollup-win32-arm64-msvc@4.19.0: @@ -2673,7 +2508,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: false optional: true /@rollup/rollup-win32-ia32-msvc@4.19.0: @@ -2681,7 +2515,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: false optional: true /@rollup/rollup-win32-x64-msvc@4.19.0: @@ -2689,14 +2522,22 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: false optional: true + /@sec-ant/readable-stream@0.4.1: + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + dev: false + /@sindresorhus/merge-streams@2.3.0: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} dev: false + /@sindresorhus/merge-streams@4.0.0: + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + dev: false + /@solid-primitives/deep@0.2.9(solid-js@1.8.18): resolution: {integrity: sha512-jO8tYQ2BW4LKHLUpm/HcK6qqdH4vg1zmzHUnoUzspxZrKDqhqgBJTPl+vfmDqtt0hHCOhlEhEEV74+tCFyt3Mg==} peerDependencies: @@ -2901,10 +2742,10 @@ packages: tslib: 2.6.3 dev: false - /@ts-morph/common@0.21.0: - resolution: {integrity: sha512-ES110Mmne5Vi4ypUKrtVQfXFDtCsDXiUiGxF6ILVlE90dDD4fdpC1LSjydl/ml7xJWKSDZwUYD2zkOePMSrPBA==} + /@ts-morph/common@0.19.0: + resolution: {integrity: sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==} dependencies: - fast-glob: 3.3.1 + fast-glob: 3.3.2 minimatch: 7.4.6 mkdirp: 2.1.6 path-browserify: 1.0.1 @@ -2916,63 +2757,30 @@ packages: '@types/estree': 1.0.5 dev: false - /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} - dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.22.5 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.20.1 - dev: false - /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 - dev: false - - /@types/babel__generator@7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} - dependencies: - '@babel/types': 7.22.5 - dev: false /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.24.9 - dev: false - - /@types/babel__template@7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} - dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.22.5 - dev: false - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 - dev: false + '@babel/types': 7.25.6 - /@types/babel__traverse@7.20.1: - resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/types': 7.22.5 - dev: false + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 /@types/babel__traverse@7.20.6: resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.24.9 - dev: false + '@babel/types': 7.25.6 /@types/braces@3.0.4: resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} @@ -3035,24 +2843,19 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@18.17.3: - resolution: {integrity: sha512-2x8HWtFk0S99zqVQABU9wTpr8wPoaDHZUcAkoTKH+nL7kPv3WUI9cRi/Kk5Mz4xdqXSqTkKP7IWNoQQYCnDsTA==} - dev: true - /@types/node@18.19.41: resolution: {integrity: sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==} dependencies: undici-types: 5.26.5 - /@types/normalize-package-data@2.4.3: - resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} + /@types/node@20.14.12: + resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} + dependencies: + undici-types: 5.26.5 dev: true - /@types/prompts@2.4.5: - resolution: {integrity: sha512-TvrzGMCwARi2qqXcD7VmvMvfMP3F7JRQpeEHECK0oufRNZInoBqzd8v/1zksKFE5XW8OOGto/5FsDT8lnpvGRA==} - dependencies: - '@types/node': 18.17.3 - kleur: 3.0.3 + /@types/normalize-package-data@2.4.3: + resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} dev: true /@types/resolve@1.20.2: @@ -3070,7 +2873,7 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: true - /@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.6.2): resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3082,22 +2885,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.6.2) '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.6.2) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.6.2) '@typescript-eslint/visitor-keys': 7.17.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.6.2): resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3109,11 +2912,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.17.0 '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.6.2) '@typescript-eslint/visitor-keys': 7.17.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -3124,7 +2927,7 @@ packages: '@typescript-eslint/types': 7.17.0 '@typescript-eslint/visitor-keys': 7.17.0 - /@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.6.2): resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3134,12 +2937,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.6.2) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.6.2) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 transitivePeerDependencies: - supports-color dev: false @@ -3148,7 +2951,7 @@ packages: resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==} engines: {node: ^18.18.0 || >=20.0.0} - /@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4): + /@typescript-eslint/typescript-estree@7.17.0(typescript@5.6.2): resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3164,12 +2967,12 @@ packages: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.6.2): resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3178,7 +2981,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 7.17.0 '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.6.2) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -3501,21 +3304,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - dependencies: - call-bind: 1.0.2 - is-nan: 1.3.2 - object-is: 1.1.5 - object.assign: 4.1.4 - util: 0.12.5 - dev: false - /ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.1 + tslib: 2.6.3 dev: false /astring@1.8.6: @@ -3550,6 +3343,7 @@ packages: /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + dev: true /b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -3656,6 +3450,7 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -3678,6 +3473,7 @@ packages: electron-to-chromium: 1.4.670 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true /browserslist@4.23.2: resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} @@ -3717,13 +3513,13 @@ packages: run-applescript: 5.0.0 dev: false - /bundle-require@4.0.2(esbuild@0.18.20): - resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + /bundle-require@5.0.0(esbuild@0.23.0): + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: '>=0.17' + esbuild: '>=0.18' dependencies: - esbuild: 0.18.20 + esbuild: 0.23.0 load-tsconfig: 0.2.5 dev: true @@ -3759,6 +3555,7 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 + dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -3789,6 +3586,7 @@ packages: /caniuse-lite@1.0.30001600: resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} + dev: true /caniuse-lite@1.0.30001643: resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} @@ -3842,21 +3640,6 @@ packages: '@kurkle/color': 0.3.2 dev: false - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3985,9 +3768,9 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false - /commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} dev: false /commander@2.20.3: @@ -4023,7 +3806,6 @@ packages: /consola@3.2.3: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - dev: false /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -4152,17 +3934,6 @@ packages: ms: 2.0.0 dev: false - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.5: resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} @@ -4240,6 +4011,7 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + dev: true /defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -4340,6 +4112,7 @@ packages: /electron-to-chromium@1.4.670: resolution: {integrity: sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A==} + dev: true /electron-to-chromium@1.4.833: resolution: {integrity: sha512-aVGP9xK70Ysrzip1m5LoJjCp1EDrYzZ7Pg/O3QR1h3PAhmc8SNfSXV3kmmtkg5rNO42EcTYmLX3eFMgqALlGIA==} @@ -4482,36 +4255,6 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /esbuild@0.18.7: resolution: {integrity: sha512-46V0EFvQ/urmruUCChD1e0SZJWM0Ulny5F+uf5QkBry97HfvgvZTnjpTrwmw0+CGRhqTh9zpFeB+W8WGIEXOAQ==} engines: {node: '>=12'} @@ -4603,6 +4346,38 @@ packages: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + /esbuild@0.23.0: + resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.0 + '@esbuild/android-arm': 0.23.0 + '@esbuild/android-arm64': 0.23.0 + '@esbuild/android-x64': 0.23.0 + '@esbuild/darwin-arm64': 0.23.0 + '@esbuild/darwin-x64': 0.23.0 + '@esbuild/freebsd-arm64': 0.23.0 + '@esbuild/freebsd-x64': 0.23.0 + '@esbuild/linux-arm': 0.23.0 + '@esbuild/linux-arm64': 0.23.0 + '@esbuild/linux-ia32': 0.23.0 + '@esbuild/linux-loong64': 0.23.0 + '@esbuild/linux-mips64el': 0.23.0 + '@esbuild/linux-ppc64': 0.23.0 + '@esbuild/linux-riscv64': 0.23.0 + '@esbuild/linux-s390x': 0.23.0 + '@esbuild/linux-x64': 0.23.0 + '@esbuild/netbsd-x64': 0.23.0 + '@esbuild/openbsd-arm64': 0.23.0 + '@esbuild/openbsd-x64': 0.23.0 + '@esbuild/sunos-x64': 0.23.0 + '@esbuild/win32-arm64': 0.23.0 + '@esbuild/win32-ia32': 0.23.0 + '@esbuild/win32-x64': 0.23.0 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -4627,13 +4402,13 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - /eslint-plugin-solid@0.14.1(eslint@8.57.0)(typescript@5.5.4): + /eslint-plugin-solid@0.14.1(eslint@8.57.0)(typescript@5.6.2): resolution: {integrity: sha512-2bR21xTGhXufK5qqib0h8fQkoZbVm0Xmsgioj+D6ynLXvVq20Atf5F/qyu2WUVNukKJkpd6WsYW0JRWFo2yZvQ==} engines: {node: '>=12.0.0'} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.6.2) eslint: 8.57.0 estraverse: 5.3.0 is-html: 2.0.0 @@ -4858,6 +4633,24 @@ packages: strip-final-newline: 3.0.0 dev: false + /execa@9.4.0: + resolution: {integrity: sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==} + engines: {node: ^18.19.0 || >=20.5.0} + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.3 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.1.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + dev: false + /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -4881,16 +4674,6 @@ packages: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} dev: false - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -4912,6 +4695,24 @@ packages: dependencies: reusify: 1.0.4 + /fdir@6.4.0(picomatch@4.0.2): + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + dependencies: + picomatch: 4.0.2 + dev: true + + /figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + dependencies: + is-unicode-supported: 2.1.0 + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4927,6 +4728,7 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -4981,6 +4783,7 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + dev: true /foreground-child@3.2.1: resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} @@ -5044,6 +4847,7 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -5093,6 +4897,7 @@ packages: has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 + dev: true /get-port-please@3.1.2: resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} @@ -5107,6 +4912,14 @@ packages: engines: {node: '>=16'} dev: false + /get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + dev: false + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -5162,17 +4975,6 @@ packages: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -5218,8 +5020,8 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -5239,6 +5041,7 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.1 + dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -5312,20 +5115,24 @@ packages: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.1 + dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + dev: true /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -5336,6 +5143,7 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 + dev: true /hash-obj@4.0.0: resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} @@ -5470,6 +5278,11 @@ packages: engines: {node: '>=16.17.0'} dev: false + /human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + dev: false + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5481,10 +5294,6 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -5563,14 +5372,6 @@ packages: is-decimal: 2.0.1 dev: false - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: false - /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -5617,6 +5418,7 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + dev: true /is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} @@ -5661,13 +5463,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -5697,14 +5492,6 @@ packages: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: false - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - dev: false - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -5779,6 +5566,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + dev: false + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -5805,6 +5597,12 @@ packages: engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.11 + dev: true + + /is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} @@ -5951,10 +5749,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -6679,6 +6473,7 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 + dev: true /micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} @@ -6753,6 +6548,10 @@ packages: kind-of: 6.0.3 dev: true + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -6984,6 +6783,7 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true /node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -7027,6 +6827,14 @@ packages: path-key: 4.0.0 dev: false + /npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + dev: false + /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. @@ -7062,17 +6870,10 @@ packages: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - dev: false - /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + dev: true /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} @@ -7082,6 +6883,7 @@ packages: define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: true /ofetch@1.3.4: resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} @@ -7246,6 +7048,11 @@ packages: lines-and-columns: 1.2.4 dev: true + /parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + dev: false + /parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} dev: true @@ -7317,6 +7124,7 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -7325,6 +7133,11 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + /picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + dev: true + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -7373,8 +7186,8 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.39 - /postcss-load-config@4.0.1(postcss@8.4.39): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + /postcss-load-config@4.0.2(postcss@8.4.39): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' @@ -7385,26 +7198,31 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.1.0 + lilconfig: 3.1.2 postcss: 8.4.39 yaml: 2.4.5 - dev: true - /postcss-load-config@4.0.2(postcss@8.4.39): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + /postcss-load-config@6.0.1(postcss@8.4.39): + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: + jiti: '>=1.21.0' postcss: '>=8.0.9' - ts-node: '>=9.0.0' + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true dependencies: lilconfig: 3.1.2 postcss: 8.4.39 - yaml: 2.4.5 + dev: true /postcss-nested@6.2.0(postcss@8.4.39): resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} @@ -7464,6 +7282,13 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} dev: false + /pretty-ms@9.1.0: + resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} + engines: {node: '>=18'} + dependencies: + parse-ms: 4.0.0 + dev: false + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false @@ -7473,14 +7298,6 @@ packages: engines: {node: '>= 0.6.0'} dev: false - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: false - /property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} dev: false @@ -7605,17 +7422,6 @@ packages: dependencies: picomatch: 2.3.1 - /recast@0.23.4: - resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} - engines: {node: '>= 4'} - dependencies: - assert: 2.1.0 - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tslib: 2.6.1 - dev: false - /recast@0.23.9: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} @@ -7789,14 +7595,6 @@ packages: yargs: 17.7.2 dev: false - /rollup@3.27.2: - resolution: {integrity: sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /rollup@4.19.0: resolution: {integrity: sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -7821,7 +7619,6 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.19.0 '@rollup/rollup-win32-x64-msvc': 4.19.0 fsevents: 2.3.3 - dev: false /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} @@ -8332,7 +8129,6 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: true /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} @@ -8343,6 +8139,11 @@ packages: engines: {node: '>=12'} dev: false + /strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + dev: false + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -8372,20 +8173,6 @@ packages: inline-style-parser: 0.2.3 dev: true - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: true - /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -8536,6 +8323,14 @@ packages: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} dev: false + /tinyglobby@0.2.6: + resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + engines: {node: '>=12.0.0'} + dependencies: + fdir: 6.4.0(picomatch@4.0.2) + picomatch: 4.0.2 + dev: true + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -8598,41 +8393,49 @@ packages: /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - /ts-api-utils@1.3.0(typescript@5.5.4): + /ts-api-utils@1.3.0(typescript@5.6.2): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.5.4 + typescript: 5.6.2 /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-morph@20.0.0: - resolution: {integrity: sha512-JVmEJy2Wow5n/84I3igthL9sudQ8qzjh/6i4tmYCm6IqYyKFlNbJZi7oBdjyqcWSWYRu3CtL0xbT6fS03ESZIg==} + /ts-morph@18.0.0: + resolution: {integrity: sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==} dependencies: - '@ts-morph/common': 0.21.0 + '@ts-morph/common': 0.19.0 code-block-writer: 12.0.0 dev: false - /tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 dev: false /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} dev: false - /tsup@7.2.0(postcss@8.4.39)(typescript@5.1.6): - resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} - engines: {node: '>=16.14'} + /tsup@8.3.0(postcss@8.4.39)(typescript@5.6.2): + resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==} + engines: {node: '>=18'} hasBin: true peerDependencies: + '@microsoft/api-extractor': ^7.36.0 '@swc/core': ^1 postcss: ^8.4.12 - typescript: '>=4.1.0' + typescript: '>=4.5.0' peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true '@swc/core': optional: true postcss: @@ -8640,25 +8443,29 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.2(esbuild@0.18.20) + bundle-require: 5.0.0(esbuild@0.23.0) cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 - esbuild: 0.18.20 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.5 + esbuild: 0.23.0 execa: 5.1.1 - globby: 11.1.0 joycon: 3.1.1 + picocolors: 1.0.1 postcss: 8.4.39 - postcss-load-config: 4.0.1(postcss@8.4.39) + postcss-load-config: 6.0.1(postcss@8.4.39) resolve-from: 5.0.0 - rollup: 3.27.2 + rollup: 4.19.0 source-map: 0.8.0-beta.0 - sucrase: 3.34.0 + sucrase: 3.35.0 + tinyglobby: 0.2.6 tree-kill: 1.2.2 - typescript: 5.1.6 + typescript: 5.6.2 transitivePeerDependencies: + - jiti - supports-color - - ts-node + - tsx + - yaml dev: true /tsx@4.16.2: @@ -8824,14 +8631,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + /typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true @@ -8890,6 +8691,11 @@ packages: engines: {node: '>=18'} dev: false + /unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + dev: false + /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: @@ -9125,6 +8931,7 @@ packages: browserslist: 4.23.0 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /update-browserslist-db@1.1.0(browserslist@4.23.2): resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} @@ -9152,16 +8959,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.12 - which-typed-array: 1.1.11 - dev: false - /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -9455,6 +9252,7 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 + dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -9591,6 +9389,11 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + /yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + dev: false + /zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} diff --git a/tailwind.config.cjs b/tailwind.config.cjs index d82608e5..1585d036 100644 --- a/tailwind.config.cjs +++ b/tailwind.config.cjs @@ -2,7 +2,7 @@ const { fontFamily } = require("tailwindcss/defaultTheme") /** @type {import('tailwindcss').Config} */ export default { - darkMode: ["class", '[data-kb-theme="dark"]'], + darkMode: ["variant", [".dark &", '[data-kb-theme="dark"] &']], content: ["./src/**/*.{ts,tsx}"], theme: { container: { @@ -65,9 +65,9 @@ export default { } }, borderRadius: { - xl: `calc(var(--radius) + 4px)`, - lg: `var(--radius)`, - md: `calc(var(--radius) - 2px)`, + xl: "calc(var(--radius) + 4px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)" }, fontFamily: {