From 349e8af73443a68277b8dc4fec026ecd103b023d Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou <sk.katherine@gmail.com> Date: Mon, 30 Oct 2023 11:26:15 +0200 Subject: [PATCH] feat(nuxt): added nuxt to create-nx-workspace --- e2e/nuxt/src/nuxt.test.ts | 2 +- package.json | 3 - .../bin/create-nx-workspace.ts | 88 ++++- .../src/utils/preset/preset-options.ts | 4 + .../src/utils/preset/preset.ts | 2 + packages/nuxt/.eslintrc.json | 7 +- packages/nuxt/index.ts | 1 - packages/nuxt/package.json | 8 +- packages/nuxt/plugins/with-nuxt.ts | 49 --- .../__snapshots__/application.spec.ts.snap | 6 +- .../application/files/nuxt.config.ts__tmpl__ | 8 +- .../generate-workspace-files.spec.ts.snap | 130 +++++++ .../src/generators/new/generate-preset.ts | 12 + .../new/generate-workspace-files.spec.ts | 2 + .../new/generate-workspace-files.ts | 2 + .../workspace/src/generators/new/new.spec.ts | 19 + .../preset/__snapshots__/preset.spec.ts.snap | 14 + .../src/generators/preset/preset.spec.ts | 24 ++ .../workspace/src/generators/preset/preset.ts | 26 ++ .../workspace/src/generators/utils/presets.ts | 2 + pnpm-lock.yaml | 334 +----------------- 21 files changed, 353 insertions(+), 390 deletions(-) delete mode 100644 packages/nuxt/plugins/with-nuxt.ts diff --git a/e2e/nuxt/src/nuxt.test.ts b/e2e/nuxt/src/nuxt.test.ts index 4944e5b610ac9..f00ff3bfd2282 100644 --- a/e2e/nuxt/src/nuxt.test.ts +++ b/e2e/nuxt/src/nuxt.test.ts @@ -32,7 +32,7 @@ describe('Nuxt Plugin', () => { it('should build storybook for app', () => { runCLI( - `generate @nx/vue:storybook-configuration ${app} --generateStories --no-interactive` + `generate @nx/nuxt:storybook-configuration ${app} --generateStories --no-interactive` ); runCLI(`run ${app}:build-storybook --verbose`); checkFilesExist(`dist/storybook/${app}/index.html`); diff --git a/package.json b/package.json index 4360d6425879c..73bfcc20b8409 100644 --- a/package.json +++ b/package.json @@ -64,8 +64,6 @@ "@ngrx/router-store": "~16.0.0", "@ngrx/store": "~16.0.0", "@nguniversal/builders": "~16.2.0", - "@nuxt/kit": "^3.7.4", - "@nuxt/schema": "^3.7.4", "@nx/angular": "17.0.0-rc.2", "@nx/cypress": "17.0.0-rc.2", "@nx/devkit": "17.0.0-rc.2", @@ -158,7 +156,6 @@ "cytoscape-popper": "^2.0.0", "cz-git": "^1.4.0", "czg": "^1.4.0", - "defu": "^6.1.2", "detect-port": "^1.5.1", "dotenv": "~16.3.1", "dotenv-expand": "^10.0.0", diff --git a/packages/create-nx-workspace/bin/create-nx-workspace.ts b/packages/create-nx-workspace/bin/create-nx-workspace.ts index 712a477d7b15e..b50abb7d9e12c 100644 --- a/packages/create-nx-workspace/bin/create-nx-workspace.ts +++ b/packages/create-nx-workspace/bin/create-nx-workspace.ts @@ -66,7 +66,14 @@ interface VueArguments extends BaseArguments { stack: 'vue'; workspaceType: 'standalone' | 'integrated'; appName: string; - // framework: 'none' | 'nuxt'; + style: string; + e2eTestRunner: 'none' | 'cypress' | 'playwright'; +} + +interface NuxtArguments extends BaseArguments { + stack: 'nuxt'; + workspaceType: 'standalone' | 'integrated'; + appName: string; style: string; e2eTestRunner: 'none' | 'cypress' | 'playwright'; } @@ -88,6 +95,7 @@ type Arguments = | ReactArguments | AngularArguments | VueArguments + | NuxtArguments | NodeArguments | UnknownStackArguments; @@ -112,6 +120,8 @@ export const commandsObject: yargs.Argv<Arguments> = yargs describe: chalk.dim`Customizes the initial content of your workspace. Default presets include: [${Object.values( Preset ) + // TODO(katerina): Remove this option when @nx/nuxt is released. + .filter((p) => p !== Preset.NuxtStandalone && p !== Preset.Nuxt) .map((p) => `"${p}"`) .join( ', ' @@ -357,7 +367,7 @@ async function determineFolder( async function determineStack( parsedArgs: yargs.Arguments<Arguments> -): Promise<'none' | 'react' | 'angular' | 'vue' | 'node' | 'unknown'> { +): Promise<'none' | 'react' | 'angular' | 'vue' | 'node' | 'nuxt' | 'unknown'> { if (parsedArgs.preset) { switch (parsedArgs.preset) { case Preset.Angular: @@ -373,6 +383,9 @@ async function determineStack( case Preset.VueStandalone: case Preset.VueMonorepo: return 'vue'; + case Preset.NuxtStandalone: + case Preset.Nuxt: + return 'nuxt'; case Preset.Nest: case Preset.NodeStandalone: case Preset.Express: @@ -437,6 +450,8 @@ async function determinePresetOptions( return determineAngularOptions(parsedArgs); case 'vue': return determineVueOptions(parsedArgs); + case 'nuxt': + return determineNuxtOptions(parsedArgs); case 'node': return determineNodeOptions(parsedArgs); default: @@ -670,6 +685,69 @@ async function determineVueOptions( return { preset, style, appName, e2eTestRunner }; } +async function determineNuxtOptions( + parsedArgs: yargs.Arguments<NuxtArguments> +): Promise<Partial<Arguments>> { + let preset: Preset; + let style: undefined | string = undefined; + let appName: string; + let e2eTestRunner: undefined | 'none' | 'cypress' | 'playwright' = undefined; + + if (parsedArgs.preset) { + preset = parsedArgs.preset; + } else { + const workspaceType = await determineStandaloneOrMonorepo(); + + if (workspaceType === 'standalone') { + preset = Preset.NuxtStandalone; + } else { + preset = Preset.Nuxt; + } + } + + if (preset === Preset.NuxtStandalone) { + appName = parsedArgs.appName ?? parsedArgs.name; + } else { + appName = await determineAppName(parsedArgs); + } + + e2eTestRunner = await determineE2eTestRunner(parsedArgs); + + if (parsedArgs.style) { + style = parsedArgs.style; + } else { + const reply = await enquirer.prompt<{ style: string }>([ + { + name: 'style', + message: `Default stylesheet format`, + initial: 'css' as any, + type: 'autocomplete', + choices: [ + { + name: 'css', + message: 'CSS', + }, + { + name: 'scss', + message: 'SASS(.scss) [ http://sass-lang.com ]', + }, + { + name: 'less', + message: 'LESS [ http://lesscss.org ]', + }, + { + name: 'none', + message: 'None', + }, + ], + }, + ]); + style = reply.style; + } + + return { preset, style, appName, e2eTestRunner }; +} + async function determineAngularOptions( parsedArgs: yargs.Arguments<AngularArguments> ): Promise<Partial<Arguments>> { @@ -929,7 +1007,11 @@ async function determineStandaloneOrMonorepo(): Promise< async function determineAppName( parsedArgs: yargs.Arguments< - ReactArguments | AngularArguments | NodeArguments | VueArguments + | ReactArguments + | AngularArguments + | NodeArguments + | VueArguments + | NuxtArguments > ): Promise<string> { if (parsedArgs.appName) return parsedArgs.appName; diff --git a/packages/create-nx-workspace/src/utils/preset/preset-options.ts b/packages/create-nx-workspace/src/utils/preset/preset-options.ts index b79c5020db927..29282480b11c1 100644 --- a/packages/create-nx-workspace/src/utils/preset/preset-options.ts +++ b/packages/create-nx-workspace/src/utils/preset/preset-options.ts @@ -23,6 +23,10 @@ export const presetOptions: { name: Preset; message: string }[] = [ name: Preset.VueMonorepo, message: 'vue [a monorepo with a single Vue application]', }, + { + name: Preset.Nuxt, + message: 'nuxt [a monorepo with a single Nuxt application]', + }, { name: Preset.NextJs, message: 'next.js [a monorepo with a single Next.js application]', diff --git a/packages/create-nx-workspace/src/utils/preset/preset.ts b/packages/create-nx-workspace/src/utils/preset/preset.ts index 198e58fb7702d..d9ee05393a120 100644 --- a/packages/create-nx-workspace/src/utils/preset/preset.ts +++ b/packages/create-nx-workspace/src/utils/preset/preset.ts @@ -11,6 +11,8 @@ export enum Preset { ReactStandalone = 'react-standalone', VueMonorepo = 'vue-monorepo', VueStandalone = 'vue-standalone', + Nuxt = 'nuxt', + NuxtStandalone = 'nuxt-standalone', NextJs = 'next', NextJsStandalone = 'nextjs-standalone', ReactNative = 'react-native', diff --git a/packages/nuxt/.eslintrc.json b/packages/nuxt/.eslintrc.json index 379043e4b42a9..de85e34ac952c 100644 --- a/packages/nuxt/.eslintrc.json +++ b/packages/nuxt/.eslintrc.json @@ -29,7 +29,12 @@ "error", { "buildTargets": ["build-base"], - "ignoredDependencies": ["nx", "typescript"] + "ignoredDependencies": [ + "nx", + "typescript", + "@nx/cypress", + "@nx/playwright" + ] } ] } diff --git a/packages/nuxt/index.ts b/packages/nuxt/index.ts index 832621779a608..acd7ab941d36f 100644 --- a/packages/nuxt/index.ts +++ b/packages/nuxt/index.ts @@ -2,4 +2,3 @@ export * from './src/utils/versions'; export { applicationGenerator } from './src/generators/application/application'; export { type InitSchema } from './src/generators/init/schema'; export { nuxtInitGenerator } from './src/generators/init/init'; -export * from './plugins/with-nuxt'; diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index e53639262b7e2..7cbf5f04142b0 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -28,17 +28,11 @@ "migrations": "./migrations.json" }, "dependencies": { - "defu": "^6.1.2", - "fs-extra": "^11.1.0", "tslib": "^2.3.0", "@nx/devkit": "file:../devkit", "@nx/js": "file:../js", "@nx/eslint": "file:../eslint", - "@nx/vue": "file:../vue", - "@nx/cypress": "file:../cypress", - "@nx/playwright": "file:../playwright", - "@nuxt/kit": "^3.7.4", - "@nuxt/schema": "^3.7.4" + "@nx/vue": "file:../vue" }, "publishConfig": { "access": "public" diff --git a/packages/nuxt/plugins/with-nuxt.ts b/packages/nuxt/plugins/with-nuxt.ts deleted file mode 100644 index 798e31ad7c8f8..0000000000000 --- a/packages/nuxt/plugins/with-nuxt.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { join, resolve } from 'path'; -import { workspaceRoot } from '@nx/devkit'; -import { existsSync } from 'fs-extra'; -import { defineNuxtModule } from '@nuxt/kit'; -import { defu } from 'defu'; -import { NuxtModule } from '@nuxt/schema'; - -export const NxNuxtModule: NuxtModule = defineNuxtModule({ - meta: { name: '@nx/nuxt/module', configKey: 'nx' }, - setup(_options, nuxt) { - nuxt.options.alias = defu(nuxt.options.alias, nxTsPaths()); - }, -}); - -/** - * read the compilerOptions.paths option from a tsconfig and return as aliases for Nuxt - **/ -function nxTsPaths() { - const tsConfigPath = getTsConfig(join(workspaceRoot, 'tsconfig.base.json')); - const tsPaths = require(tsConfigPath)?.compilerOptions?.paths as Record< - string, - string[] - >; - - const alias: Record<string, string> = {}; - if (tsPaths) { - for (const p in tsPaths) { - // '@org/something/*': ['libs/something/src/*'] => '@org/something': '{pathToWorkspaceRoot}/libs/something/src' - alias[p.replace(/\/\*$/, '')] = join( - workspaceRoot, - tsPaths[p][0].replace(/\/\*$/, '') - ); - } - } - - return alias; -} - -function getTsConfig(preferredTsConfigPath: string): string { - return [ - resolve(preferredTsConfigPath), - resolve(join(workspaceRoot, 'tsconfig.base.json')), - resolve(join(workspaceRoot, 'tsconfig.json')), - ].find((tsPath) => { - if (existsSync(tsPath)) { - return tsPath; - } - }); -} diff --git a/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap b/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap index 41463a5277152..1b975fb0e6680 100644 --- a/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap +++ b/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap @@ -27,14 +27,16 @@ exports[`app generated files content - as-provided should configure eslint corre `; exports[`app generated files content - as-provided should configure nuxt correctly 1`] = ` -"import { NxNuxtModule } from '@nx/nuxt'; +"import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - modules: [NxNuxtModule], srcDir: 'src', devtools: { enabled: true }, css: ['~/assets/css/styles.css'], + vite: { + plugins: [nxViteTsPaths()], + }, }); " `; diff --git a/packages/nuxt/src/generators/application/files/nuxt.config.ts__tmpl__ b/packages/nuxt/src/generators/application/files/nuxt.config.ts__tmpl__ index 455c9b4f74a43..f56ef98de5e3c 100644 --- a/packages/nuxt/src/generators/application/files/nuxt.config.ts__tmpl__ +++ b/packages/nuxt/src/generators/application/files/nuxt.config.ts__tmpl__ @@ -1,9 +1,13 @@ -import { NxNuxtModule } from '@nx/nuxt'; +import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - modules: [NxNuxtModule], srcDir: 'src', devtools: { enabled: true }, css: ['~/assets/css/styles.css'], + vite: { + plugins: [ + nxViteTsPaths() + ], + } }); diff --git a/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap b/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap index 4b8bbcc6a1271..e0b92df5b9f9d 100644 --- a/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap +++ b/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap @@ -821,6 +821,136 @@ Nx comes with local caching already built-in (check your \`nx.json\`). On CI you " `; +exports[`@nx/workspace:generateWorkspaceFiles README.md should be created for Nuxt preset 1`] = ` +"# Proj + +<a alt="Nx logo" href="https://nx.dev" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-logo.png" width="45"></a> + +✨ **This workspace has been generated by [Nx, a Smart, fast and extensible build system.](https://nx.dev)** ✨ + +## Start the app + +To start the development server run \`nx serve app1\`. Open your browser and navigate to http://localhost:4200/. Happy coding! + +## Generate code + +If you happen to use Nx plugins, you can leverage code generators that might come with it. + +Run \`nx list\` to get a list of available plugins and whether they have generators. Then run \`nx list <plugin-name>\` to see what generators are available. + +Learn more about [Nx generators on the docs](https://nx.dev/plugin-features/use-code-generators). + +## Running tasks + +To execute tasks with Nx use the following syntax: + +\`\`\` +nx <target> <project> <...options> +\`\`\` + +You can also run multiple targets: + +\`\`\` +nx run-many -t <target1> <target2> +\`\`\` + +..or add \`-p\` to filter specific projects + +\`\`\` +nx run-many -t <target1> <target2> -p <proj1> <proj2> +\`\`\` + +Targets can be defined in the \`package.json\` or \`projects.json\`. Learn more [in the docs](https://nx.dev/core-features/run-tasks). + +## Want better Editor Integration? + +Have a look at the [Nx Console extensions](https://nx.dev/nx-console). It provides autocomplete support, a UI for exploring and running tasks & generators, and more! Available for VSCode, IntelliJ and comes with a LSP for Vim users. + +## Ready to deploy? + +Just run \`nx build demoapp\` to build the application. The build artifacts will be stored in the \`dist/\` directory, ready to be deployed. + +## Set up CI! + +Nx comes with local caching already built-in (check your \`nx.json\`). On CI you might want to go a step further. + +- [Set up remote caching](https://nx.dev/core-features/share-your-cache) +- [Set up task distribution across multiple machines](https://nx.dev/core-features/distribute-task-execution) +- [Learn more how to setup CI](https://nx.dev/recipes/ci) + +## Connect with us! + +- [Join the community](https://nx.dev/community) +- [Subscribe to the Nx Youtube Channel](https://www.youtube.com/@nxdevtools) +- [Follow us on Twitter](https://twitter.com/nxdevtools) +" +`; + +exports[`@nx/workspace:generateWorkspaceFiles README.md should be created for NuxtStandalone preset 1`] = ` +"# Proj + +<a alt="Nx logo" href="https://nx.dev" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-logo.png" width="45"></a> + +✨ **This workspace has been generated by [Nx, a Smart, fast and extensible build system.](https://nx.dev)** ✨ + +## Start the app + +To start the development server run \`nx serve app1\`. Open your browser and navigate to http://localhost:4200/. Happy coding! + +## Generate code + +If you happen to use Nx plugins, you can leverage code generators that might come with it. + +Run \`nx list\` to get a list of available plugins and whether they have generators. Then run \`nx list <plugin-name>\` to see what generators are available. + +Learn more about [Nx generators on the docs](https://nx.dev/plugin-features/use-code-generators). + +## Running tasks + +To execute tasks with Nx use the following syntax: + +\`\`\` +nx <target> <project> <...options> +\`\`\` + +You can also run multiple targets: + +\`\`\` +nx run-many -t <target1> <target2> +\`\`\` + +..or add \`-p\` to filter specific projects + +\`\`\` +nx run-many -t <target1> <target2> -p <proj1> <proj2> +\`\`\` + +Targets can be defined in the \`package.json\` or \`projects.json\`. Learn more [in the docs](https://nx.dev/core-features/run-tasks). + +## Want better Editor Integration? + +Have a look at the [Nx Console extensions](https://nx.dev/nx-console). It provides autocomplete support, a UI for exploring and running tasks & generators, and more! Available for VSCode, IntelliJ and comes with a LSP for Vim users. + +## Ready to deploy? + +Just run \`nx build demoapp\` to build the application. The build artifacts will be stored in the \`dist/\` directory, ready to be deployed. + +## Set up CI! + +Nx comes with local caching already built-in (check your \`nx.json\`). On CI you might want to go a step further. + +- [Set up remote caching](https://nx.dev/core-features/share-your-cache) +- [Set up task distribution across multiple machines](https://nx.dev/core-features/distribute-task-execution) +- [Learn more how to setup CI](https://nx.dev/recipes/ci) + +## Connect with us! + +- [Join the community](https://nx.dev/community) +- [Subscribe to the Nx Youtube Channel](https://www.youtube.com/@nxdevtools) +- [Follow us on Twitter](https://twitter.com/nxdevtools) +" +`; + exports[`@nx/workspace:generateWorkspaceFiles README.md should be created for ReactMonorepo preset 1`] = ` "# Proj diff --git a/packages/workspace/src/generators/new/generate-preset.ts b/packages/workspace/src/generators/new/generate-preset.ts index ba89673a28a7c..3f15271b8d032 100644 --- a/packages/workspace/src/generators/new/generate-preset.ts +++ b/packages/workspace/src/generators/new/generate-preset.ts @@ -132,6 +132,18 @@ function getPresetDependencies({ }, }; + case Preset.Nuxt: + case Preset.NuxtStandalone: + return { + dependencies: {}, + dev: { + '@nx/nuxt': nxVersion, + '@nx/cypress': e2eTestRunner === 'cypress' ? nxVersion : undefined, + '@nx/playwright': + e2eTestRunner === 'playwright' ? nxVersion : undefined, + }, + }; + case Preset.ReactMonorepo: case Preset.ReactStandalone: return { diff --git a/packages/workspace/src/generators/new/generate-workspace-files.spec.ts b/packages/workspace/src/generators/new/generate-workspace-files.spec.ts index a18db7f54b2cc..fcf8a01ee25e2 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.spec.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.spec.ts @@ -38,6 +38,8 @@ describe('@nx/workspace:generateWorkspaceFiles', () => { Preset.ReactStandalone, Preset.VueMonorepo, Preset.VueStandalone, + Preset.Nuxt, + Preset.NuxtStandalone, Preset.AngularMonorepo, Preset.AngularStandalone, Preset.Nest, diff --git a/packages/workspace/src/generators/new/generate-workspace-files.ts b/packages/workspace/src/generators/new/generate-workspace-files.ts index 9d6d16168190f..da1a5f1bd958f 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.ts @@ -105,6 +105,7 @@ function createFiles(tree: Tree, options: NormalizedSchema) { options.preset === Preset.AngularStandalone || options.preset === Preset.ReactStandalone || options.preset === Preset.VueStandalone || + options.preset === Preset.NuxtStandalone || options.preset === Preset.NodeStandalone || options.preset === Preset.NextJsStandalone || options.preset === Preset.TsStandalone @@ -160,6 +161,7 @@ function addNpmScripts(tree: Tree, options: NormalizedSchema) { options.preset === Preset.AngularStandalone || options.preset === Preset.ReactStandalone || options.preset === Preset.VueStandalone || + options.preset === Preset.NuxtStandalone || options.preset === Preset.NodeStandalone || options.preset === Preset.NextJsStandalone ) { diff --git a/packages/workspace/src/generators/new/new.spec.ts b/packages/workspace/src/generators/new/new.spec.ts index 324d19deeeaed..38cfdb33bcd69 100644 --- a/packages/workspace/src/generators/new/new.spec.ts +++ b/packages/workspace/src/generators/new/new.spec.ts @@ -99,6 +99,25 @@ describe('new', () => { }); }); + it('should generate necessary npm dependencies for nuxt preset', async () => { + await newGenerator(tree, { + ...defaultOptions, + name: 'my-workspace', + directory: 'my-workspace', + appName: 'app', + e2eTestRunner: 'cypress', + preset: Preset.Nuxt, + }); + + const { devDependencies } = readJson(tree, 'my-workspace/package.json'); + expect(devDependencies).toStrictEqual({ + '@nx/nuxt': nxVersion, + '@nx/cypress': nxVersion, + '@nx/workspace': nxVersion, + nx: nxVersion, + }); + }); + it('should generate necessary npm dependencies for angular preset', async () => { await newGenerator(tree, { ...defaultOptions, diff --git a/packages/workspace/src/generators/preset/__snapshots__/preset.spec.ts.snap b/packages/workspace/src/generators/preset/__snapshots__/preset.spec.ts.snap index cf9dd101d19f3..6016dd635d5e2 100644 --- a/packages/workspace/src/generators/preset/__snapshots__/preset.spec.ts.snap +++ b/packages/workspace/src/generators/preset/__snapshots__/preset.spec.ts.snap @@ -36,6 +36,20 @@ exports[`preset should create files (preset = angular-monorepo) 3`] = ` ] `; +exports[`preset should create files (preset = nuxt-standalone) 1`] = ` +{ + "executor": "nx:run-commands", + "options": { + "command": "npx nuxi dev --port=4200", + "cwd": ".", + }, + "outputs": [ + "{workspaceRoot}/{projectRoot}/.output", + "{workspaceRoot}/{projectRoot}/.nuxt", + ], +} +`; + exports[`preset should create files (preset = react-standalone bundler = vite) 1`] = ` { "configurations": { diff --git a/packages/workspace/src/generators/preset/preset.spec.ts b/packages/workspace/src/generators/preset/preset.spec.ts index e599fc83a0578..5fba722743f47 100644 --- a/packages/workspace/src/generators/preset/preset.spec.ts +++ b/packages/workspace/src/generators/preset/preset.spec.ts @@ -52,6 +52,17 @@ describe('preset', () => { expect(readProjectConfiguration(tree, 'proj').targets.serve).toBeDefined(); }); + it(`should create files (preset = ${Preset.Nuxt})`, async () => { + await presetGenerator(tree, { + name: 'proj', + preset: Preset.Nuxt, + style: 'css', + linter: 'eslint', + }); + expect(tree.exists('apps/proj/src/app.vue')).toBe(true); + expect(readProjectConfiguration(tree, 'proj').targets.serve).toBeDefined(); + }); + it(`should create files (preset = ${Preset.NextJs})`, async () => { await presetGenerator(tree, { name: 'proj', @@ -123,4 +134,17 @@ describe('preset', () => { readProjectConfiguration(tree, 'proj').targets.serve ).toMatchSnapshot(); }); + + it(`should create files (preset = ${Preset.NuxtStandalone})`, async () => { + await presetGenerator(tree, { + name: 'proj', + preset: Preset.NuxtStandalone, + style: 'css', + e2eTestRunner: 'cypress', + }); + expect(tree.exists('nuxt.config.ts')).toBe(true); + expect( + readProjectConfiguration(tree, 'proj').targets.serve + ).toMatchSnapshot(); + }); }); diff --git a/packages/workspace/src/generators/preset/preset.ts b/packages/workspace/src/generators/preset/preset.ts index f37e14bf1e349..fc564215002d4 100644 --- a/packages/workspace/src/generators/preset/preset.ts +++ b/packages/workspace/src/generators/preset/preset.ts @@ -102,6 +102,32 @@ async function createPreset(tree: Tree, options: Schema) { e2eTestRunner: options.e2eTestRunner ?? 'cypress', unitTestRunner: 'vitest', }); + } else if (options.preset === Preset.Nuxt) { + const { applicationGenerator: nuxtApplicationGenerator } = require('@nx' + + '/nuxt'); + + return nuxtApplicationGenerator(tree, { + name: options.name, + directory: join('apps', options.name), + projectNameAndRootFormat: 'as-provided', + style: options.style, + linter: options.linter, + e2eTestRunner: options.e2eTestRunner ?? 'cypress', + }); + } else if (options.preset === Preset.NuxtStandalone) { + const { applicationGenerator: nuxtApplicationGenerator } = require('@nx' + + '/nuxt'); + + return nuxtApplicationGenerator(tree, { + name: options.name, + directory: '.', + projectNameAndRootFormat: 'as-provided', + style: options.style, + linter: options.linter, + rootProject: true, + e2eTestRunner: options.e2eTestRunner ?? 'cypress', + unitTestRunner: 'vitest', + }); } else if (options.preset === Preset.NextJs) { const { applicationGenerator: nextApplicationGenerator } = require('@nx' + '/next'); diff --git a/packages/workspace/src/generators/utils/presets.ts b/packages/workspace/src/generators/utils/presets.ts index a0bcf9a76928b..af482e900aa5f 100644 --- a/packages/workspace/src/generators/utils/presets.ts +++ b/packages/workspace/src/generators/utils/presets.ts @@ -18,6 +18,8 @@ export enum Preset { ReactNative = 'react-native', VueMonorepo = 'vue-monorepo', VueStandalone = 'vue-standalone', + Nuxt = 'nuxt', + NuxtStandalone = 'nuxt-standalone', Expo = 'expo', NextJs = 'next', Nest = 'nest', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7786872fd88af..bade028c22f06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - overrides: minimist: ^1.2.6 underscore: ^1.12.1 @@ -250,7 +246,7 @@ devDependencies: version: 9.1.6(@nestjs/common@9.1.6)(@nestjs/core@9.1.6) '@nestjs/schematics': specifier: ^9.1.0 - version: 9.1.0(typescript@5.1.3) + version: 9.1.0(chokidar@3.5.3)(typescript@4.9.4) '@nestjs/swagger': specifier: ^6.0.0 version: 6.1.3(@nestjs/common@9.1.6)(@nestjs/core@9.1.6)(reflect-metadata@0.1.13) @@ -269,12 +265,6 @@ devDependencies: '@nguniversal/builders': specifier: ~16.2.0 version: 16.2.0(@angular-devkit/build-angular@16.2.0)(@angular/common@16.2.0)(@angular/core@16.2.0)(@types/express@4.17.14)(typescript@5.1.3) - '@nuxt/kit': - specifier: ^3.7.4 - version: 3.7.4(rollup@2.79.0) - '@nuxt/schema': - specifier: ^3.7.4 - version: 3.7.4(rollup@2.79.0) '@nx/angular': specifier: 17.0.0-rc.2 version: 17.0.0-rc.2(@angular-devkit/build-angular@16.2.0)(@angular-devkit/core@16.2.0)(@angular-devkit/schematics@16.2.0)(@nguniversal/builders@16.2.0)(@schematics/angular@16.2.0)(@swc-node/register@1.6.8)(@swc/core@1.3.86)(@types/node@18.16.9)(cypress@13.0.0)(esbuild@0.19.5)(eslint@8.46.0)(html-webpack-plugin@5.5.0)(nx@17.0.0-rc.2)(rxjs@7.8.1)(ts-node@10.9.1)(typescript@5.1.3)(verdaccio@5.15.4) @@ -554,9 +544,6 @@ devDependencies: czg: specifier: ^1.4.0 version: 1.4.0 - defu: - specifier: ^6.1.2 - version: 6.1.2 detect-port: specifier: ^1.5.1 version: 1.5.1 @@ -3624,11 +3611,6 @@ packages: dependencies: regenerator-runtime: 0.13.11 - /@babel/standalone@7.23.1: - resolution: {integrity: sha512-a4muOYz1qUaSoybuUKwK90mRG4sf5rBeUbuzpuGLzG32ZDE/Y2YEebHDODFJN+BtyOKi19hrLfq2qbNyKMx0TA==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} @@ -5301,20 +5283,6 @@ packages: - chokidar dev: true - /@nestjs/schematics@9.1.0(typescript@5.1.3): - resolution: {integrity: sha512-/7CyMTnPJSK9/xD9CkCqwuHPOlHVlLC2RDnbdCJ7mIO07SdbBbY14msTqtYW9VRQtsjZPLh1GTChf7ryJUImwA==} - peerDependencies: - typescript: '>=4.3.5' - dependencies: - '@angular-devkit/core': 15.2.4(chokidar@3.5.3) - '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) - jsonc-parser: 3.2.0 - pluralize: 8.0.0 - typescript: 5.1.3 - transitivePeerDependencies: - - chokidar - dev: true - /@nestjs/swagger@6.1.3(@nestjs/common@9.1.6)(@nestjs/core@9.1.6)(reflect-metadata@0.1.13): resolution: {integrity: sha512-H9C/yRgLFb5QrAt6iGrYmIX9X7Q0zXkgZaTNUATljUBra+RCWrEUbLHBcGjTAOtcIyGV/vmyCLv68YSVcZoE0Q==} peerDependencies: @@ -5847,42 +5815,6 @@ packages: - typescript dev: true - /@nrwl/js@15.8.0(@swc-node/register@1.6.8)(@swc/core@1.3.86)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3): - resolution: {integrity: sha512-l2Q7oFpzx6ul7G0nKpMkrvnIEaOY+X8fc2g2Db5WqpnnBdfkrtWXZPg/O4DQ1p9O6BXrZ+Q2AK9bfgnliiwyEg==} - dependencies: - '@babel/core': 7.22.9 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-proposal-decorators': 7.21.0(@babel/core@7.22.9) - '@babel/plugin-transform-runtime': 7.22.9(@babel/core@7.22.9) - '@babel/preset-env': 7.22.5(@babel/core@7.22.9) - '@babel/preset-typescript': 7.22.5(@babel/core@7.22.9) - '@babel/runtime': 7.22.6 - '@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3) - '@nrwl/workspace': 15.8.0(@swc-node/register@1.6.8)(@swc/core@1.3.86)(eslint@8.46.0)(prettier@2.7.1)(typescript@5.1.3) - '@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3) - babel-plugin-const-enum: 1.2.0(@babel/core@7.22.9) - babel-plugin-macros: 2.8.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.22.9) - chalk: 4.1.2 - fast-glob: 3.2.7 - fs-extra: 11.1.1 - ignore: 5.2.0 - js-tokens: 4.0.0 - minimatch: 3.0.5 - source-map-support: 0.5.19 - tree-kill: 1.2.2 - tslib: 2.6.1 - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx - - prettier - - supports-color - - typescript - dev: true - /@nrwl/js@17.0.0-rc.2(@swc-node/register@1.6.8)(@swc/core@1.3.86)(@types/node@18.16.9)(nx@17.0.0-rc.2)(typescript@5.1.3)(verdaccio@5.15.4): resolution: {integrity: sha512-2SZu4KiiXmyjezB8j3+GrgQj2LopzYxp6hO9hIe+DE6N1eo1Dxq7cmOsX+q/w14eRurVNcvDoZxHJB63UjDSUQ==} dependencies: @@ -5909,7 +5841,7 @@ packages: optional: true dependencies: '@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3) - '@nrwl/js': 15.8.0(@swc-node/register@1.6.8)(@swc/core@1.3.86)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3) + '@nrwl/js': 15.8.0(@swc-node/register@1.6.8)(@swc/core@1.3.86)(eslint@8.46.0)(nx@17.0.0-rc.2)(prettier@2.7.1)(typescript@5.1.3) '@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3) eslint: 8.46.0 tmp: 0.2.1 @@ -6189,57 +6121,6 @@ packages: - debug dev: true - /@nuxt/kit@3.7.4(rollup@2.79.0): - resolution: {integrity: sha512-/S5abZL62BITCvC/TY3KWA6N721U1Osln3cQdBb56XHIeafZCBVqTi92Xb0o7ovl72mMRhrKwRu7elzvz9oT/g==} - engines: {node: ^14.18.0 || >=16.10.0} - dependencies: - '@nuxt/schema': 3.7.4(rollup@2.79.0) - c12: 1.4.2 - consola: 3.2.3 - defu: 6.1.2 - globby: 13.2.2 - hash-sum: 2.0.0 - ignore: 5.2.4 - jiti: 1.20.0 - knitwork: 1.0.0 - mlly: 1.4.2 - pathe: 1.1.1 - pkg-types: 1.0.3 - scule: 1.0.0 - semver: 7.5.4 - ufo: 1.3.1 - unctx: 2.3.1 - unimport: 3.4.0(rollup@2.79.0) - untyped: 1.4.0 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /@nuxt/schema@3.7.4(rollup@2.79.0): - resolution: {integrity: sha512-q6js+97vDha4Fa2x2kDVEuokJr+CGIh1TY2wZp2PLZ7NhG3XEeib7x9Hq8XE8B6pD0GKBRy3eRPPOY69gekBCw==} - engines: {node: ^14.18.0 || >=16.10.0} - dependencies: - '@nuxt/ui-templates': 1.3.1 - consola: 3.2.3 - defu: 6.1.2 - hookable: 5.5.3 - pathe: 1.1.1 - pkg-types: 1.0.3 - postcss-import-resolver: 2.0.0 - std-env: 3.4.3 - ufo: 1.3.1 - unimport: 3.4.0(rollup@2.79.0) - untyped: 1.4.0 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /@nuxt/ui-templates@1.3.1: - resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==} - dev: true - /@nuxtjs/opencollective@0.3.2: resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} engines: {node: '>=8.0.0', npm: '>=5.0.0'} @@ -7896,21 +7777,6 @@ packages: rollup: 2.79.0 dev: true - /@rollup/pluginutils@5.0.5(rollup@2.79.0): - resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.1 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 2.79.0 - dev: true - /@rollup/pluginutils@5.0.5(rollup@3.21.0): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} @@ -11142,15 +11008,6 @@ packages: - supports-color dev: true - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /agentkeepalive@4.2.1: resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} engines: {node: '>= 8.0.0'} @@ -12470,24 +12327,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /c12@1.4.2: - resolution: {integrity: sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==} - dependencies: - chokidar: 3.5.3 - defu: 6.1.2 - dotenv: 16.3.1 - giget: 1.1.3 - jiti: 1.20.0 - mlly: 1.4.2 - ohash: 1.1.3 - pathe: 1.1.1 - perfect-debounce: 1.0.0 - pkg-types: 1.0.3 - rc9: 2.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /c8@7.13.0: resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} engines: {node: '>=10.12.0'} @@ -12987,10 +12826,6 @@ packages: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true - /colors@1.1.2: resolution: {integrity: sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==} engines: {node: '>=0.1.90'} @@ -13156,11 +12991,6 @@ packages: resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} dev: true - /consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true - /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true @@ -14253,10 +14083,6 @@ packages: /defined@1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - /defu@6.1.2: - resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} - dev: true - /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -14292,10 +14118,6 @@ packages: engines: {node: '>=6'} dev: true - /destr@2.0.1: - resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==} - dev: true - /destroy@1.0.4: resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} @@ -14666,15 +14488,6 @@ packages: - utf-8-validate dev: true - /enhanced-resolve@4.5.0: - resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} - engines: {node: '>=6.9.0'} - dependencies: - graceful-fs: 4.2.11 - memory-fs: 0.5.0 - tapable: 1.1.3 - dev: true - /enhanced-resolve@5.10.0: resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} engines: {node: '>=10.13.0'} @@ -14735,6 +14548,7 @@ packages: requiresBuild: true dependencies: prr: 1.0.1 + optional: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -16344,21 +16158,6 @@ packages: assert-plus: 1.0.0 dev: true - /giget@1.1.3: - resolution: {integrity: sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==} - hasBin: true - dependencies: - colorette: 2.0.20 - defu: 6.1.2 - https-proxy-agent: 7.0.2 - mri: 1.2.0 - node-fetch-native: 1.4.0 - pathe: 1.1.1 - tar: 6.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /git-raw-commits@2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} @@ -16709,10 +16508,6 @@ packages: dependencies: function-bind: 1.1.1 - /hash-sum@2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - dev: true - /hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} dev: false @@ -16782,10 +16577,6 @@ packages: react-is: 16.13.1 dev: true - /hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - dev: true - /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -17070,16 +16861,6 @@ packages: - supports-color dev: true - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} @@ -18696,10 +18477,6 @@ packages: engines: {node: '>= 8'} dev: true - /knitwork@1.0.0: - resolution: {integrity: sha512-dWl0Dbjm6Xm+kDxhPQJsCBTxrJzuGl0aP9rhr+TG8D3l+GL90N8O8lYUi7dTSAN2uuDqCtNgb6aEuQH5wsiV8Q==} - dev: true - /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true @@ -18927,6 +18704,7 @@ packages: /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} + dev: false /localtunnel@2.0.2: resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==} @@ -19463,14 +19241,6 @@ packages: map-or-similar: 1.5.0 dev: true - /memory-fs@0.5.0: - resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} - engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} - dependencies: - errno: 0.1.8 - readable-stream: 2.3.8 - dev: true - /meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -20230,6 +20000,7 @@ packages: pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.3.1 + dev: false /modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} @@ -20521,10 +20292,6 @@ packages: lodash: 4.17.21 dev: true - /node-fetch-native@1.4.0: - resolution: {integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==} - dev: true - /node-fetch@2.6.12: resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} engines: {node: 4.x || >=6.0.0} @@ -21003,10 +20770,6 @@ packages: - encoding dev: true - /ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} - dev: true - /on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -21507,6 +21270,7 @@ packages: /pathe@1.1.1: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: false /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -21526,10 +21290,6 @@ packages: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true - /perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - dev: true - /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true @@ -21638,6 +21398,7 @@ packages: jsonc-parser: 3.2.0 mlly: 1.4.2 pathe: 1.1.1 + dev: false /pkginfo@0.4.1: resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} @@ -21989,12 +21750,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-import-resolver@2.0.0: - resolution: {integrity: sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==} - dependencies: - enhanced-resolve: 4.5.0 - dev: true - /postcss-import@14.1.0(postcss@8.4.19): resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} engines: {node: '>=10.0.0'} @@ -23006,6 +22761,7 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} requiresBuild: true + optional: true /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -23127,14 +22883,6 @@ packages: webpack: 5.88.0(@swc/core@1.3.86)(esbuild@0.19.5) dev: true - /rc9@2.1.1: - resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} - dependencies: - defu: 6.1.2 - destr: 2.0.1 - flat: 5.0.2 - dev: true - /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: @@ -24202,10 +23950,6 @@ packages: ajv-keywords: 5.1.0(ajv@8.12.0) dev: true - /scule@1.0.0: - resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} - dev: true - /secure-compare@3.0.1: resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} dev: true @@ -24935,10 +24679,6 @@ packages: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: false - /std-env@3.4.3: - resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} - dev: true - /steno@0.4.4: resolution: {integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==} dependencies: @@ -25120,12 +24860,6 @@ packages: acorn: 8.10.0 dev: false - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - dependencies: - acorn: 8.10.0 - dev: true - /strip-outer@2.0.0: resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -25436,11 +25170,6 @@ packages: transitivePeerDependencies: - ts-node - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: true - /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -26200,6 +25929,7 @@ packages: /ufo@1.3.1: resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + dev: false /uglify-es@3.3.9: resolution: {integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==} @@ -26228,15 +25958,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unctx@2.3.1: - resolution: {integrity: sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==} - dependencies: - acorn: 8.10.0 - estree-walker: 3.0.3 - magic-string: 0.30.4 - unplugin: 1.5.0 - dev: true - /underscore.string@2.4.0: resolution: {integrity: sha512-yxkabuCaIBnzfIvX3kBxQqCs0ar/bfJwDnFEHJUm/ZrRVhT3IItdRF5cZjARLzEnyQYtIUhsZ2LG2j3HidFOFQ==} dev: true @@ -26280,24 +26001,6 @@ packages: vfile: 5.3.7 dev: true - /unimport@3.4.0(rollup@2.79.0): - resolution: {integrity: sha512-M/lfFEgufIT156QAr/jWHLUn55kEmxBBiQsMxvRSIbquwmeJEyQYgshHDEvQDWlSJrVOOTAgnJ3FvlsrpGkanA==} - dependencies: - '@rollup/pluginutils': 5.0.5(rollup@2.79.0) - escape-string-regexp: 5.0.0 - fast-glob: 3.3.1 - local-pkg: 0.4.3 - magic-string: 0.30.4 - mlly: 1.4.2 - pathe: 1.1.1 - pkg-types: 1.0.3 - scule: 1.0.0 - strip-literal: 1.3.0 - unplugin: 1.5.0 - transitivePeerDependencies: - - rollup - dev: true - /union@0.5.0: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} engines: {node: '>= 0.8.0'} @@ -26444,21 +26147,6 @@ packages: engines: {node: '>=8'} dev: true - /untyped@1.4.0: - resolution: {integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==} - hasBin: true - dependencies: - '@babel/core': 7.22.9 - '@babel/standalone': 7.23.1 - '@babel/types': 7.22.5 - defu: 6.1.2 - jiti: 1.20.0 - mri: 1.2.0 - scule: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /unzipper@0.10.11: resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==} dependencies: @@ -27956,3 +27644,7 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: true + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false