From e2108c38f42bbb74a062d5403b09b81923651b96 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Sun, 27 Mar 2022 13:11:41 +0000 Subject: [PATCH 01/20] fix(nuxi): prevent double extension --- packages/nuxi/src/commands/add.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/nuxi/src/commands/add.ts b/packages/nuxi/src/commands/add.ts index 7f82536e51d..dfab867f0c1 100644 --- a/packages/nuxi/src/commands/add.ts +++ b/packages/nuxi/src/commands/add.ts @@ -15,7 +15,7 @@ export default defineNuxtCommand({ const cwd = resolve(args.cwd || '.') const template = args._[0] - const name = args._[1] + let name = args._[1] // Validate template name if (!templates[template]) { @@ -33,6 +33,13 @@ export default defineNuxtCommand({ const kit = await loadKit(cwd) const config = await kit.loadNuxtConfig({ cwd }) + const extRegex = /\.[a-z]+$/ + const extProvided = name.match(extRegex)?.[0] + + if (extProvided && extProvided !== name.match(/\.(client|server)/g)?.[0]) { + name = name.replace(extRegex, '') + } + // Resolve template const res = templates[template]({ name }) From 5d3db5a275a10d7b02dac9a8fb01f687f2c49b75 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Sun, 27 Mar 2022 13:16:44 +0000 Subject: [PATCH 02/20] feat(nuxi): support mode flags for `add` command --- docs/content/3.docs/1.usage/8.cli.md | 4 +++- packages/nuxi/src/commands/add.ts | 11 +++++++++-- packages/nuxi/src/utils/templates.ts | 27 +++++++++++++++++---------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/docs/content/3.docs/1.usage/8.cli.md b/docs/content/3.docs/1.usage/8.cli.md index 9db5ad83d30..3c6daa9c050 100644 --- a/docs/content/3.docs/1.usage/8.cli.md +++ b/docs/content/3.docs/1.usage/8.cli.md @@ -115,6 +115,8 @@ Option | Default | Description `NAME` | - | Specify a name of the file that will be created. `--cwd` | `.` | The directory of the target application. `--force` | `false` | Force override file if already exsits. +`--client` | - | Indicate that this entity is client only. +`--server` | - | Indicate that this entity is server only. **Example:** @@ -127,7 +129,7 @@ The `add` command generates new elements: * **component**: `npx nuxi add component TheHeader` * **composable**: `npx nuxi add composable foo` * **layout**: `npx nuxi add layout custom` -* **plugin**: `npx nuxi add plugin analytics` +* **plugin**: `npx nuxi add plugin firebase --client` (generates `/plugins/firebase.client.ts`) * **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` * **middleware**: `npx nuxi add middleware auth` * **api**: `npx nuxi add api hello` (CLI will generate file under `/server/api`) diff --git a/packages/nuxi/src/commands/add.ts b/packages/nuxi/src/commands/add.ts index dfab867f0c1..1d02d2f8b5a 100644 --- a/packages/nuxi/src/commands/add.ts +++ b/packages/nuxi/src/commands/add.ts @@ -16,6 +16,7 @@ export default defineNuxtCommand({ const template = args._[0] let name = args._[1] + let mode = (args.client && 'client') || (args.server && 'server') // Validate template name if (!templates[template]) { @@ -35,13 +36,19 @@ export default defineNuxtCommand({ const extRegex = /\.[a-z]+$/ const extProvided = name.match(extRegex)?.[0] + const modeProvided = name.match(/\.(client|server)/g)?.[0] - if (extProvided && extProvided !== name.match(/\.(client|server)/g)?.[0]) { + if (extProvided && extProvided !== modeProvided) { name = name.replace(extRegex, '') } + if (modeProvided) { + name = name.replace(modeProvided, '') + if (!mode) { mode = modeProvided.replace(/\./, '') } + } + // Resolve template - const res = templates[template]({ name }) + const res = templates[template]({ name, mode }) // Resolve full path to generated file const path = resolve(config.srcDir, res.path) diff --git a/packages/nuxi/src/utils/templates.ts b/packages/nuxi/src/utils/templates.ts index 24c58db9e38..469cadfa1e3 100644 --- a/packages/nuxi/src/utils/templates.ts +++ b/packages/nuxi/src/utils/templates.ts @@ -1,7 +1,7 @@ import { upperFirst } from 'scule' interface Template { - (options: { name: string }): { path: string, contents: string } + (options: { name: string, mode?: string }): { path: string, contents: string } } const api: Template = ({ name }) => ({ @@ -15,27 +15,34 @@ export default defineHandle((req, res) => { ` }) -const plugin: Template = ({ name }) => ({ - path: `plugins/${name}.ts`, - contents: ` +const plugin: Template = (opts) => { + opts.name = opts.mode ? `${opts.name}.${opts.mode}` : opts.name + return { + path: `plugins/${opts.name}.ts`, + contents: ` export default defineNuxtPlugin((nuxtApp) => {}) ` -}) + } +} -const component: Template = ({ name }) => ({ - path: `components/${name}.vue`, - contents: ` +const component: Template = (opts) => { + // Enable when https://github.com/nuxt/framework/pull/1919 is merged + // opts.name = opts.mode ? `${opts.name}.${opts.mode}` : opts.name + return { + path: `components/${opts.name}.vue`, + contents: ` ` -}) + } +} const composable: Template = ({ name }) => { const nameWithUsePrefix = name.startsWith('use') ? name : `use${upperFirst(name)}` From 46c8674d9e73ecdd17136bfc0665acd88f59fd57 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Sun, 27 Mar 2022 13:46:00 +0000 Subject: [PATCH 03/20] remove global flag --- packages/nuxi/src/commands/add.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxi/src/commands/add.ts b/packages/nuxi/src/commands/add.ts index 1d02d2f8b5a..ef12ca06da1 100644 --- a/packages/nuxi/src/commands/add.ts +++ b/packages/nuxi/src/commands/add.ts @@ -36,7 +36,7 @@ export default defineNuxtCommand({ const extRegex = /\.[a-z]+$/ const extProvided = name.match(extRegex)?.[0] - const modeProvided = name.match(/\.(client|server)/g)?.[0] + const modeProvided = name.match(/\.(client|server)/)?.[0] if (extProvided && extProvided !== modeProvided) { name = name.replace(extRegex, '') From 6bdc666b55a8acf66ba49f0f4c90c2fb486da4c8 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Sun, 27 Mar 2022 13:57:41 +0000 Subject: [PATCH 04/20] fix(docs): clarify behavior --- docs/content/3.docs/1.usage/8.cli.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/content/3.docs/1.usage/8.cli.md b/docs/content/3.docs/1.usage/8.cli.md index 3c6daa9c050..08ddcd1fceb 100644 --- a/docs/content/3.docs/1.usage/8.cli.md +++ b/docs/content/3.docs/1.usage/8.cli.md @@ -115,8 +115,8 @@ Option | Default | Description `NAME` | - | Specify a name of the file that will be created. `--cwd` | `.` | The directory of the target application. `--force` | `false` | Force override file if already exsits. -`--client` | - | Indicate that this entity is client only. -`--server` | - | Indicate that this entity is server only. +`--client` | - | When applicable, this flag indicates that the entity is client only. +`--server` | - | When applicable, this flag indicates that the entity is server only. **Example:** From 818fa1228b26ba84ee1b1baf72ac113818b2eff6 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Mon, 28 Mar 2022 08:46:43 -0400 Subject: [PATCH 05/20] provide `mode` types Co-authored-by: pooya parsa --- packages/nuxi/src/utils/templates.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxi/src/utils/templates.ts b/packages/nuxi/src/utils/templates.ts index 469cadfa1e3..a316e06f3bc 100644 --- a/packages/nuxi/src/utils/templates.ts +++ b/packages/nuxi/src/utils/templates.ts @@ -1,7 +1,7 @@ import { upperFirst } from 'scule' interface Template { - (options: { name: string, mode?: string }): { path: string, contents: string } + (options: { name: string, mode?: 'client' | 'server' }): { path: string, contents: string } } const api: Template = ({ name }) => ({ From a5bd655f6c08904c98f62541035472394a871850 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Mon, 28 Mar 2022 09:33:31 -0400 Subject: [PATCH 06/20] improve example Co-authored-by: pooya parsa --- docs/content/3.docs/1.usage/8.cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/3.docs/1.usage/8.cli.md b/docs/content/3.docs/1.usage/8.cli.md index 08ddcd1fceb..8a4d58a5ff5 100644 --- a/docs/content/3.docs/1.usage/8.cli.md +++ b/docs/content/3.docs/1.usage/8.cli.md @@ -129,7 +129,7 @@ The `add` command generates new elements: * **component**: `npx nuxi add component TheHeader` * **composable**: `npx nuxi add composable foo` * **layout**: `npx nuxi add layout custom` -* **plugin**: `npx nuxi add plugin firebase --client` (generates `/plugins/firebase.client.ts`) +* **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin firebase --client` (generates `/plugins/firebase.client.ts`) * **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` * **middleware**: `npx nuxi add middleware auth` * **api**: `npx nuxi add api hello` (CLI will generate file under `/server/api`) From 030119d006e413f0cb28b65d2a302d926db251c0 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Mon, 28 Mar 2022 17:21:13 +0000 Subject: [PATCH 07/20] apply component template mode in `#1919` --- packages/nuxi/src/utils/templates.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/nuxi/src/utils/templates.ts b/packages/nuxi/src/utils/templates.ts index a316e06f3bc..e04fb083723 100644 --- a/packages/nuxi/src/utils/templates.ts +++ b/packages/nuxi/src/utils/templates.ts @@ -25,24 +25,20 @@ export default defineNuxtPlugin((nuxtApp) => {}) } } -const component: Template = (opts) => { - // Enable when https://github.com/nuxt/framework/pull/1919 is merged - // opts.name = opts.mode ? `${opts.name}.${opts.mode}` : opts.name - return { - path: `components/${opts.name}.vue`, - contents: ` +const component: Template = ({ name }) => ({ + path: `components/${name}.vue`, + contents: ` ` - } -} +}) const composable: Template = ({ name }) => { const nameWithUsePrefix = name.startsWith('use') ? name : `use${upperFirst(name)}` From 95110a0c5e014c8ef07b95bee50d92438a31ba03 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Mon, 28 Mar 2022 17:24:23 +0000 Subject: [PATCH 08/20] improve mode handling --- packages/nuxi/src/commands/add.ts | 24 ++++++++++-------------- packages/nuxi/src/utils/templates.ts | 23 +++++++++++++++-------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/packages/nuxi/src/commands/add.ts b/packages/nuxi/src/commands/add.ts index ef12ca06da1..09a793e3d3f 100644 --- a/packages/nuxi/src/commands/add.ts +++ b/packages/nuxi/src/commands/add.ts @@ -2,7 +2,7 @@ import { existsSync, promises as fsp } from 'fs' import { resolve, dirname } from 'pathe' import consola from 'consola' import { loadKit } from '../utils/kit' -import { templates } from '../utils/templates' +import { templates, modeSupported } from '../utils/templates' import { defineNuxtCommand } from './index' export default defineNuxtCommand({ @@ -16,7 +16,7 @@ export default defineNuxtCommand({ const template = args._[0] let name = args._[1] - let mode = (args.client && 'client') || (args.server && 'server') + const mode = (args.client && 'client') || (args.server && 'server') || name?.match(/\.(client|server)/)?.[1] as 'client' | 'server' // Validate template name if (!templates[template]) { @@ -30,22 +30,18 @@ export default defineNuxtCommand({ process.exit(1) } + if (mode && !modeSupported(template)) { + consola.error(`Template \`${template}\` does not support modes.`) + process.exit(1) + } + // Load config in order to respect srcDir const kit = await loadKit(cwd) const config = await kit.loadNuxtConfig({ cwd }) - const extRegex = /\.[a-z]+$/ - const extProvided = name.match(extRegex)?.[0] - const modeProvided = name.match(/\.(client|server)/)?.[0] - - if (extProvided && extProvided !== modeProvided) { - name = name.replace(extRegex, '') - } - - if (modeProvided) { - name = name.replace(modeProvided, '') - if (!mode) { mode = modeProvided.replace(/\./, '') } - } + const extRegex = /\.[a-z]+/g + const extProvided = name.match(extRegex) + if (extProvided) { name = name.replaceAll(extRegex, '') } // Resolve template const res = templates[template]({ name, mode }) diff --git a/packages/nuxi/src/utils/templates.ts b/packages/nuxi/src/utils/templates.ts index e04fb083723..63581c60414 100644 --- a/packages/nuxi/src/utils/templates.ts +++ b/packages/nuxi/src/utils/templates.ts @@ -1,7 +1,15 @@ import { upperFirst } from 'scule' +interface TemplateOptions { + name: string + mode?: 'client' | 'server' +} interface Template { - (options: { name: string, mode?: 'client' | 'server' }): { path: string, contents: string } + (options: TemplateOptions): { path: string, contents: string } +} + +const suffixMode = (opts: TemplateOptions): string => { + return !opts.mode ? opts.name : `${opts.name}.${opts.mode}` } const api: Template = ({ name }) => ({ @@ -15,15 +23,12 @@ export default defineHandle((req, res) => { ` }) -const plugin: Template = (opts) => { - opts.name = opts.mode ? `${opts.name}.${opts.mode}` : opts.name - return { - path: `plugins/${opts.name}.ts`, - contents: ` +const plugin: Template = opts => ({ + path: `plugins/${suffixMode(opts)}.ts`, + contents: ` export default defineNuxtPlugin((nuxtApp) => {}) ` - } -} +}) const component: Template = ({ name }) => ({ path: `components/${name}.vue`, @@ -99,3 +104,5 @@ export const templates = { layout, page } as Record + +export const modeSupported = (template: string) => ['plugin'].includes(template) From bbd17f1696ef5abe7de7bd8198cada103b9f4d28 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Tue, 29 Mar 2022 11:06:28 +0200 Subject: [PATCH 09/20] Update docs/content/3.docs/1.usage/8.cli.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Chopin --- docs/content/3.docs/1.usage/8.cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/3.docs/1.usage/8.cli.md b/docs/content/3.docs/1.usage/8.cli.md index 8a4d58a5ff5..63cd6e3bd5b 100644 --- a/docs/content/3.docs/1.usage/8.cli.md +++ b/docs/content/3.docs/1.usage/8.cli.md @@ -129,7 +129,7 @@ The `add` command generates new elements: * **component**: `npx nuxi add component TheHeader` * **composable**: `npx nuxi add composable foo` * **layout**: `npx nuxi add layout custom` -* **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin firebase --client` (generates `/plugins/firebase.client.ts`) +* **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin sockets --client` (generates `/plugins/sockets.client.ts`) * **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` * **middleware**: `npx nuxi add middleware auth` * **api**: `npx nuxi add api hello` (CLI will generate file under `/server/api`) From 1da4d41949642e59a64e8837b0f0cfeacf360913 Mon Sep 17 00:00:00 2001 From: Dizzy Rogers <19627670+Diizzayy@users.noreply.github.com> Date: Tue, 29 Mar 2022 10:20:06 +0000 Subject: [PATCH 10/20] retain naming --- packages/nuxi/src/commands/add.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/nuxi/src/commands/add.ts b/packages/nuxi/src/commands/add.ts index 09a793e3d3f..676f8131965 100644 --- a/packages/nuxi/src/commands/add.ts +++ b/packages/nuxi/src/commands/add.ts @@ -15,8 +15,8 @@ export default defineNuxtCommand({ const cwd = resolve(args.cwd || '.') const template = args._[0] - let name = args._[1] - const mode = (args.client && 'client') || (args.server && 'server') || name?.match(/\.(client|server)/)?.[1] as 'client' | 'server' + const name = args._[1] + const mode = (args.client && 'client') || (args.server && 'server') as 'client' | 'server' // Validate template name if (!templates[template]) { @@ -39,10 +39,6 @@ export default defineNuxtCommand({ const kit = await loadKit(cwd) const config = await kit.loadNuxtConfig({ cwd }) - const extRegex = /\.[a-z]+/g - const extProvided = name.match(extRegex) - if (extProvided) { name = name.replaceAll(extRegex, '') } - // Resolve template const res = templates[template]({ name, mode }) From 5f712cc7d502cbbb6287e1da485ac897527583e1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 21:12:36 +0200 Subject: [PATCH 11/20] chore(deps): update all non-major dependencies (#6880) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/nuxt/package.json | 2 +- packages/test-utils/package.json | 2 +- yarn.lock | 30 +++++++++++++++--------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index de91c0d0e52..093e86b8973 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -48,7 +48,7 @@ "globby": "^13.1.2", "h3": "^0.7.16", "hash-sum": "^2.0.0", - "hookable": "^5.1.2", + "hookable": "^5.2.0", "knitwork": "^0.1.2", "magic-string": "^0.26.2", "mlly": "^0.5.14", diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 48dfcde3c33..837794b82b8 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -22,7 +22,7 @@ "ohmyfetch": "^0.4.18" }, "devDependencies": { - "playwright": "^1.25.0", + "playwright": "^1.25.1", "unbuild": "latest", "vitest": "~0.19.1" }, diff --git a/yarn.lock b/yarn.lock index 15aa0106694..4bce8fb9241 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1812,7 +1812,7 @@ __metadata: get-port-please: ^2.6.1 jiti: ^1.14.0 ohmyfetch: ^0.4.18 - playwright: ^1.25.0 + playwright: ^1.25.1 unbuild: latest vitest: ~0.19.1 peerDependencies: @@ -7870,10 +7870,10 @@ __metadata: languageName: node linkType: hard -"hookable@npm:^5.1.2": - version: 5.1.2 - resolution: "hookable@npm:5.1.2" - checksum: 1b3fb622a26d34c9befe8991cf9ffcb575334ef66e151291bc4b3161e1a609365983d258020571bce4b52226d9b5880150d27ba9f4e4029734e5cd37ac31aa39 +"hookable@npm:^5.2.0": + version: 5.2.0 + resolution: "hookable@npm:5.2.0" + checksum: d39c7a22d7a48572bb644b69df8ec9ef72a180ce5118b3f6447d46c41de8c413624162549b356112fdcb7c69c00dec9359ffacba2540f3ccf071806000e38bb1 languageName: node linkType: hard @@ -10294,7 +10294,7 @@ __metadata: globby: ^13.1.2 h3: ^0.7.16 hash-sum: ^2.0.0 - hookable: ^5.1.2 + hookable: ^5.2.0 knitwork: ^0.1.2 magic-string: ^0.26.2 mlly: ^0.5.14 @@ -10972,23 +10972,23 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.25.0": - version: 1.25.0 - resolution: "playwright-core@npm:1.25.0" +"playwright-core@npm:1.25.1": + version: 1.25.1 + resolution: "playwright-core@npm:1.25.1" bin: playwright: cli.js - checksum: 78a9c8857428c8e9fe3a2061672a2e9ce0106afec473281d3a6389ec29918fd1d29c9d2792edde90bfd92c4477151fbd2d8f9f5061fbddaf8c6995a91c9cf2de + checksum: 34d5602816f73d68de3c022423ef64f0214f5e9827c584bffa608ecf66a9058f2f578e037bd7cbe7f98be53d5b01602f1f98aec73db5b475d8ab22417c803db5 languageName: node linkType: hard -"playwright@npm:^1.25.0": - version: 1.25.0 - resolution: "playwright@npm:1.25.0" +"playwright@npm:^1.25.1": + version: 1.25.1 + resolution: "playwright@npm:1.25.1" dependencies: - playwright-core: 1.25.0 + playwright-core: 1.25.1 bin: playwright: cli.js - checksum: f2a0c32d463dbc4a36c1c5e56f67a4daa3a9ab7cf4267453b561d677654cc69e6c8e18ae739cd112fd765e51311cf273c8c1d26d90d9880ff21c2b24c1edccae + checksum: 39745f159bac378234aa1ec9a3ebbc474876fc5907256f5365a5c844a990164c2ebf8a721bc0e738d74e83a789e5043af6a07e08f8a5be15a7cf905dd0dbc4f0 languageName: node linkType: hard From d5a5d37b003992bfcc205866c1ea3da13273262d Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 21:39:26 +0200 Subject: [PATCH 12/20] feat: support more modifiers via generic args --- packages/nuxi/src/commands/add.ts | 10 ++----- packages/nuxi/src/utils/templates.ts | 43 ++++++++++++++++++---------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/packages/nuxi/src/commands/add.ts b/packages/nuxi/src/commands/add.ts index 699d3bf9276..5a8e93f537e 100644 --- a/packages/nuxi/src/commands/add.ts +++ b/packages/nuxi/src/commands/add.ts @@ -2,7 +2,7 @@ import { existsSync, promises as fsp } from 'node:fs' import { resolve, dirname } from 'pathe' import consola from 'consola' import { loadKit } from '../utils/kit' -import { templates, modeSupported } from '../utils/templates' +import { templates } from '../utils/templates' import { defineNuxtCommand } from './index' export default defineNuxtCommand({ @@ -16,7 +16,6 @@ export default defineNuxtCommand({ const template = args._[0] const name = args._[1] - const mode = (args.client && 'client') || (args.server && 'server') as 'client' | 'server' // Validate template name if (!templates[template]) { @@ -30,17 +29,12 @@ export default defineNuxtCommand({ process.exit(1) } - if (mode && !modeSupported(template)) { - consola.error(`Template \`${template}\` does not support modes.`) - process.exit(1) - } - // Load config in order to respect srcDir const kit = await loadKit(cwd) const config = await kit.loadNuxtConfig({ cwd }) // Resolve template - const res = templates[template]({ name, mode }) + const res = templates[template]({ name, args }) // Resolve full path to generated file const path = resolve(config.srcDir, res.path) diff --git a/packages/nuxi/src/utils/templates.ts b/packages/nuxi/src/utils/templates.ts index 6e5637beadc..11c89820e71 100644 --- a/packages/nuxi/src/utils/templates.ts +++ b/packages/nuxi/src/utils/templates.ts @@ -1,19 +1,17 @@ import { upperFirst } from 'scule' interface TemplateOptions { - name: string - mode?: 'client' | 'server' + name: string, + args: Record } + interface Template { (options: TemplateOptions): { path: string, contents: string } } -const suffixMode = (opts: TemplateOptions): string => { - return !opts.mode ? opts.name : `${opts.name}.${opts.mode}` -} - -const api: Template = ({ name }) => ({ - path: `server/api/${name}.ts`, +const httpMethods = ['connect', 'delete', 'get', 'head', 'options', 'post', 'put', 'trace', 'patch'] +const api: Template = ({ name, args }) => ({ + path: `server/api/${name}${applySuffix(args, httpMethods, 'method')}.ts`, contents: ` export default defineEventHandler((event) => { return 'Hello ${name}' @@ -21,15 +19,15 @@ export default defineEventHandler((event) => { ` }) -const plugin: Template = opts => ({ - path: `plugins/${suffixMode(opts)}.ts`, +const plugin: Template = ({ name, args }) => ({ + path: `plugins/${name}${applySuffix(args, ['client', 'server'], 'mode')}.ts`, contents: ` export default defineNuxtPlugin((nuxtApp) => {}) ` }) -const component: Template = ({ name }) => ({ - path: `components/${name}.vue`, +const component: Template = ({ name, args }) => ({ + path: `components/${name}${applySuffix(args, ['client', 'server'], 'mode')}.vue`, contents: ` @@ -55,8 +53,8 @@ export const ${nameWithUsePrefix} = () => { } } -const middleware: Template = ({ name }) => ({ - path: `middleware/${name}.ts`, +const middleware: Template = ({ name, args }) => ({ + path: `middleware/${name}${applySuffix(args, ['global'])}.ts`, contents: ` export default defineNuxtRouteMiddleware((to, from) => {}) ` @@ -103,4 +101,19 @@ export const templates = { page } as Record -export const modeSupported = (template: string) => ['plugin'].includes(template) +// -- internal utils -- + +function applySuffix (args: TemplateOptions['args'], suffixes: string[], unwrapFrom?: string): string { + let suffix = '' + // --client + for (const s of suffixes) { + if (args[s]) { + suffix += '.' + s + } + } + // --mode=server + if (unwrapFrom && args[unwrapFrom] && suffixes.includes(args[unwrapFrom])) { + suffix += '.' + args[unwrapFrom] + } + return suffix +} From 4b1616777c08541b82ee0c32c5d6c97244e8dc83 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 21:44:10 +0200 Subject: [PATCH 13/20] update docs --- docs/content/3.api/5.commands/add.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/content/3.api/5.commands/add.md b/docs/content/3.api/5.commands/add.md index 2de3e45ffc7..467207e0da1 100644 --- a/docs/content/3.api/5.commands/add.md +++ b/docs/content/3.api/5.commands/add.md @@ -12,8 +12,6 @@ Option | Default | Description `NAME` | - | Specify a name of the file that will be created. `--cwd` | `.` | The directory of the target application. `--force` | `false` | Force override file if it already exists. -`--client` | - | When applicable, this flag indicates that the entity is client only. -`--server` | - | When applicable, this flag indicates that the entity is server only. **Example:** @@ -24,9 +22,13 @@ npx nuxi add component TheHeader The `add` command generates new elements: * **component**: `npx nuxi add component TheHeader` + * Extra flags: `--mode client|server` or `--client`, `--server` * **composable**: `npx nuxi add composable foo` * **layout**: `npx nuxi add layout custom` * **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin sockets --client` (generates `/plugins/sockets.client.ts`) + * Extra flags: `--mode client|server` or `--client`, `--server` * **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` * **middleware**: `npx nuxi add middleware auth` + * Extra flags: `--global` * **api**: `npx nuxi add api hello` (CLI will generate file under `/server/api`) + * Extra flags: `--method=connect|delete|get|head|options|patch|post|put|trace` or `--get`, `--post`, etc. From 3fe8218bbf44daa10a93eca88a411a9a337689c7 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 21:45:08 +0200 Subject: [PATCH 14/20] docs: add note about modifier --- docs/content/3.api/5.commands/add.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/content/3.api/5.commands/add.md b/docs/content/3.api/5.commands/add.md index 467207e0da1..a4dacd0614d 100644 --- a/docs/content/3.api/5.commands/add.md +++ b/docs/content/3.api/5.commands/add.md @@ -13,6 +13,8 @@ Option | Default | Description `--cwd` | `.` | The directory of the target application. `--force` | `false` | Force override file if it already exists. +Some templates support additional modifer flags to add a suffix (like `.client` or `.get`) to their name. + **Example:** ```{bash} @@ -22,13 +24,13 @@ npx nuxi add component TheHeader The `add` command generates new elements: * **component**: `npx nuxi add component TheHeader` - * Extra flags: `--mode client|server` or `--client`, `--server` + * Modifier flags: `--mode client|server` or `--client`, `--server` * **composable**: `npx nuxi add composable foo` * **layout**: `npx nuxi add layout custom` * **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin sockets --client` (generates `/plugins/sockets.client.ts`) - * Extra flags: `--mode client|server` or `--client`, `--server` + * Modifier flags: `--mode client|server` or `--client`, `--server` * **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` * **middleware**: `npx nuxi add middleware auth` - * Extra flags: `--global` + * Modifier flags: `--global` * **api**: `npx nuxi add api hello` (CLI will generate file under `/server/api`) - * Extra flags: `--method=connect|delete|get|head|options|patch|post|put|trace` or `--get`, `--post`, etc. + * Modifier flags: `--method=connect|delete|get|head|options|patch|post|put|trace` or `--get`, `--post`, etc. From 48fe8e7c835c95398c51134a6c173f4b445b95c8 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 21:45:42 +0200 Subject: [PATCH 15/20] use or --- docs/content/3.api/5.commands/add.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/content/3.api/5.commands/add.md b/docs/content/3.api/5.commands/add.md index a4dacd0614d..d1afd3f5d3e 100644 --- a/docs/content/3.api/5.commands/add.md +++ b/docs/content/3.api/5.commands/add.md @@ -24,11 +24,11 @@ npx nuxi add component TheHeader The `add` command generates new elements: * **component**: `npx nuxi add component TheHeader` - * Modifier flags: `--mode client|server` or `--client`, `--server` + * Modifier flags: `--mode client|server` or `--client` or `--server` * **composable**: `npx nuxi add composable foo` * **layout**: `npx nuxi add layout custom` * **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin sockets --client` (generates `/plugins/sockets.client.ts`) - * Modifier flags: `--mode client|server` or `--client`, `--server` + * Modifier flags: `--mode client|server` or `--client`or `--server` * **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` * **middleware**: `npx nuxi add middleware auth` * Modifier flags: `--global` From 93632ce6fe3cb29e182f4a2b98e9c61a92fb8a96 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 22:01:29 +0200 Subject: [PATCH 16/20] improve docs --- docs/content/3.api/5.commands/add.md | 89 +++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 14 deletions(-) diff --git a/docs/content/3.api/5.commands/add.md b/docs/content/3.api/5.commands/add.md index d1afd3f5d3e..0113f633aaf 100644 --- a/docs/content/3.api/5.commands/add.md +++ b/docs/content/3.api/5.commands/add.md @@ -13,24 +13,85 @@ Option | Default | Description `--cwd` | `.` | The directory of the target application. `--force` | `false` | Force override file if it already exists. +**Modifiers:** + Some templates support additional modifer flags to add a suffix (like `.client` or `.get`) to their name. -**Example:** +**Example:** `npx nuxi add plugin sockets --client` generates `/plugins/sockets.client.ts`. -```{bash} +## `nuxi add component` + +* Modifier flags: `--mode client|server` or `--client` or `--server` + +Example: + +```bash +# Generates `components/TheHeader.vue` npx nuxi add component TheHeader ``` -The `add` command generates new elements: +## `nuxi add composable` + +Example: + +```bash +# Generates `composables/foo.ts` +npx nuxi add composable foo +``` + +## `nuxi add layout` + +Example: + +```bash +# Generates `layouts/custom.ts` +npx nuxi add layout custom +``` + +## `nuxi add plugin` + +- Modifier flags: `--mode client|server` or `--client`or `--server` + +Example: + +```bash +# Generates `plugins/analytics.ts` +npx nuxi add plugin analytics +``` -* **component**: `npx nuxi add component TheHeader` - * Modifier flags: `--mode client|server` or `--client` or `--server` -* **composable**: `npx nuxi add composable foo` -* **layout**: `npx nuxi add layout custom` -* **plugin**: `npx nuxi add plugin analytics` or `npx nuxi add plugin sockets --client` (generates `/plugins/sockets.client.ts`) - * Modifier flags: `--mode client|server` or `--client`or `--server` -* **page**: `npx nuxi add page about` or `npx nuxi add page "category/[id]"` -* **middleware**: `npx nuxi add middleware auth` - * Modifier flags: `--global` -* **api**: `npx nuxi add api hello` (CLI will generate file under `/server/api`) - * Modifier flags: `--method=connect|delete|get|head|options|patch|post|put|trace` or `--get`, `--post`, etc. +## `nuxi add page` + +Example: + +```bash +# Generates `pages/about.vue` +npx nuxi add page about +``` + +```bash +# Generates `pages/category/[id].vue` +npx nuxi add page "category/[id]" +``` + + +## `nuxi add middleware` + +* Modifier flags: `--global` + +Example: + +```bash +# Generates `middleware/auth.ts` +npx nuxi add middleware auth +``` + +## `nuxi add api` + +* Modifier flags: `--method=connect|delete|get|head|options|patch|post|put|trace` or `--get`, `--post`, etc. + +Example: + +```bash +# Generates `server/api/hello.ts` +npx nuxi add api hello +``` From 031e9842e72bdbe935fe58a8b751301e62ac4dac Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 22:02:02 +0200 Subject: [PATCH 17/20] fix lint --- docs/content/3.api/5.commands/add.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/content/3.api/5.commands/add.md b/docs/content/3.api/5.commands/add.md index 0113f633aaf..28bc166433c 100644 --- a/docs/content/3.api/5.commands/add.md +++ b/docs/content/3.api/5.commands/add.md @@ -50,7 +50,7 @@ npx nuxi add layout custom ## `nuxi add plugin` -- Modifier flags: `--mode client|server` or `--client`or `--server` +* Modifier flags: `--mode client|server` or `--client`or `--server` Example: @@ -73,7 +73,6 @@ npx nuxi add page about npx nuxi add page "category/[id]" ``` - ## `nuxi add middleware` * Modifier flags: `--global` From c2dca8a367e66a8bcd1787a0337b510b2c103cb2 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 22:13:57 +0200 Subject: [PATCH 18/20] chore: update hookable fixing type issues --- packages/nuxt/package.json | 2 +- packages/nuxt/src/imports/module.ts | 1 - yarn.lock | 10 +++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 093e86b8973..a14b55c63f9 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -48,7 +48,7 @@ "globby": "^13.1.2", "h3": "^0.7.16", "hash-sum": "^2.0.0", - "hookable": "^5.2.0", + "hookable": "^5.2.1", "knitwork": "^0.1.2", "magic-string": "^0.26.2", "mlly": "^0.5.14", diff --git a/packages/nuxt/src/imports/module.ts b/packages/nuxt/src/imports/module.ts index 2200e0bb328..ef6387adc8a 100644 --- a/packages/nuxt/src/imports/module.ts +++ b/packages/nuxt/src/imports/module.ts @@ -30,7 +30,6 @@ export default defineNuxtModule>({ options = defu(nuxt.options.autoImports, options) } - // @ts-expect-error nuxt.hooks.deprecateHooks({ 'autoImports:sources': { to: 'imports:sources' }, 'autoImports:dirs': { to: 'imports:dirs' }, diff --git a/yarn.lock b/yarn.lock index 4bce8fb9241..504de0a0435 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7870,10 +7870,10 @@ __metadata: languageName: node linkType: hard -"hookable@npm:^5.2.0": - version: 5.2.0 - resolution: "hookable@npm:5.2.0" - checksum: d39c7a22d7a48572bb644b69df8ec9ef72a180ce5118b3f6447d46c41de8c413624162549b356112fdcb7c69c00dec9359ffacba2540f3ccf071806000e38bb1 +"hookable@npm:^5.2.1": + version: 5.2.1 + resolution: "hookable@npm:5.2.1" + checksum: 6ad7f67733a083634ef7ba367b40fe9057dbc6e614a00ba88d84b718e49d67d83e5f4bf81759777b39afafa1fe043f56faffe7aabd590c8a9ea6dd0f0c4af53b languageName: node linkType: hard @@ -10294,7 +10294,7 @@ __metadata: globby: ^13.1.2 h3: ^0.7.16 hash-sum: ^2.0.0 - hookable: ^5.2.0 + hookable: ^5.2.1 knitwork: ^0.1.2 magic-string: ^0.26.2 mlly: ^0.5.14 From 64402e24adb8a0cec474585d33960ccf638b5e46 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 22:36:53 +0200 Subject: [PATCH 19/20] manually revert rebase issues --- packages/nuxt/package.json | 2 +- packages/nuxt/src/imports/module.ts | 1 + packages/test-utils/package.json | 2 +- yarn.lock | 14 +++++++------- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index a14b55c63f9..de91c0d0e52 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -48,7 +48,7 @@ "globby": "^13.1.2", "h3": "^0.7.16", "hash-sum": "^2.0.0", - "hookable": "^5.2.1", + "hookable": "^5.1.2", "knitwork": "^0.1.2", "magic-string": "^0.26.2", "mlly": "^0.5.14", diff --git a/packages/nuxt/src/imports/module.ts b/packages/nuxt/src/imports/module.ts index ef6387adc8a..2200e0bb328 100644 --- a/packages/nuxt/src/imports/module.ts +++ b/packages/nuxt/src/imports/module.ts @@ -30,6 +30,7 @@ export default defineNuxtModule>({ options = defu(nuxt.options.autoImports, options) } + // @ts-expect-error nuxt.hooks.deprecateHooks({ 'autoImports:sources': { to: 'imports:sources' }, 'autoImports:dirs': { to: 'imports:dirs' }, diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 837794b82b8..48dfcde3c33 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -22,7 +22,7 @@ "ohmyfetch": "^0.4.18" }, "devDependencies": { - "playwright": "^1.25.1", + "playwright": "^1.25.0", "unbuild": "latest", "vitest": "~0.19.1" }, diff --git a/yarn.lock b/yarn.lock index 504de0a0435..8788ccd5be8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1812,7 +1812,7 @@ __metadata: get-port-please: ^2.6.1 jiti: ^1.14.0 ohmyfetch: ^0.4.18 - playwright: ^1.25.1 + playwright: ^1.25.0 unbuild: latest vitest: ~0.19.1 peerDependencies: @@ -7870,10 +7870,10 @@ __metadata: languageName: node linkType: hard -"hookable@npm:^5.2.1": - version: 5.2.1 - resolution: "hookable@npm:5.2.1" - checksum: 6ad7f67733a083634ef7ba367b40fe9057dbc6e614a00ba88d84b718e49d67d83e5f4bf81759777b39afafa1fe043f56faffe7aabd590c8a9ea6dd0f0c4af53b +"hookable@npm:^5.1.2": + version: 5.2.2 + resolution: "hookable@npm:5.2.2" + checksum: fb4b3104a62ecf47f1743e8ea1a573656ee8d0601903fafa6a5c7247bc18a007be603e58a302400576f3b4c358b641372b073adf649018db00294d8c34123dbc languageName: node linkType: hard @@ -10294,7 +10294,7 @@ __metadata: globby: ^13.1.2 h3: ^0.7.16 hash-sum: ^2.0.0 - hookable: ^5.2.1 + hookable: ^5.1.2 knitwork: ^0.1.2 magic-string: ^0.26.2 mlly: ^0.5.14 @@ -10981,7 +10981,7 @@ __metadata: languageName: node linkType: hard -"playwright@npm:^1.25.1": +"playwright@npm:^1.25.0": version: 1.25.1 resolution: "playwright@npm:1.25.1" dependencies: From f25a09450a680bbd6b1c1f1cd6f2a7e887f8d22b Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 23 Aug 2022 22:37:40 +0200 Subject: [PATCH 20/20] also revert yarn.lock --- yarn.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8788ccd5be8..15aa0106694 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7871,9 +7871,9 @@ __metadata: linkType: hard "hookable@npm:^5.1.2": - version: 5.2.2 - resolution: "hookable@npm:5.2.2" - checksum: fb4b3104a62ecf47f1743e8ea1a573656ee8d0601903fafa6a5c7247bc18a007be603e58a302400576f3b4c358b641372b073adf649018db00294d8c34123dbc + version: 5.1.2 + resolution: "hookable@npm:5.1.2" + checksum: 1b3fb622a26d34c9befe8991cf9ffcb575334ef66e151291bc4b3161e1a609365983d258020571bce4b52226d9b5880150d27ba9f4e4029734e5cd37ac31aa39 languageName: node linkType: hard @@ -10972,23 +10972,23 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.25.1": - version: 1.25.1 - resolution: "playwright-core@npm:1.25.1" +"playwright-core@npm:1.25.0": + version: 1.25.0 + resolution: "playwright-core@npm:1.25.0" bin: playwright: cli.js - checksum: 34d5602816f73d68de3c022423ef64f0214f5e9827c584bffa608ecf66a9058f2f578e037bd7cbe7f98be53d5b01602f1f98aec73db5b475d8ab22417c803db5 + checksum: 78a9c8857428c8e9fe3a2061672a2e9ce0106afec473281d3a6389ec29918fd1d29c9d2792edde90bfd92c4477151fbd2d8f9f5061fbddaf8c6995a91c9cf2de languageName: node linkType: hard "playwright@npm:^1.25.0": - version: 1.25.1 - resolution: "playwright@npm:1.25.1" + version: 1.25.0 + resolution: "playwright@npm:1.25.0" dependencies: - playwright-core: 1.25.1 + playwright-core: 1.25.0 bin: playwright: cli.js - checksum: 39745f159bac378234aa1ec9a3ebbc474876fc5907256f5365a5c844a990164c2ebf8a721bc0e738d74e83a789e5043af6a07e08f8a5be15a7cf905dd0dbc4f0 + checksum: f2a0c32d463dbc4a36c1c5e56f67a4daa3a9ab7cf4267453b561d677654cc69e6c8e18ae739cd112fd765e51311cf273c8c1d26d90d9880ff21c2b24c1edccae languageName: node linkType: hard