Skip to content

Commit b06bff8

Browse files
committed
feat: handle file creation extensions
1 parent 66560ec commit b06bff8

File tree

10 files changed

+33
-26
lines changed

10 files changed

+33
-26
lines changed

src/commands/Component.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir } from '../utils'
3-
import { generateVueFileBasicTemplate } from '../utils/files'
2+
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir, generateVueFileBasicTemplate, normalizeFileExtension } from '../utils'
43

54
const createComponent = () => {
65
window

src/commands/Composable.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir } from '../utils'
2+
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir, normalizeFileExtension } from '../utils'
33
import { composableTemplate } from '../templates'
44

55
const createComposable = () => {
@@ -37,7 +37,7 @@ const directCreateComposable = (path: string) => {
3737
.then((name) => {
3838
if (!name) { return }
3939

40-
let filePath = `${path}/${name}.ts`
40+
let filePath = `${path}/${normalizeFileExtension(name, '.ts')}.ts`
4141

4242
createFile({
4343
fileName: `${name}.ts`,

src/commands/Layout.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, createFile, createDir } from '../utils'
2+
import { projectSrcDirectory, createFile, createDir, normalizeFileExtension } from '../utils'
33

44

55
import { generateVueFileTemplate } from '../utils/files'
@@ -18,7 +18,7 @@ const createLayout = () => {
1818

1919
createDir('layouts')
2020

21-
let filePath = `${projectSrcDirectory()}/layouts/${name}.vue`
21+
let filePath = `${projectSrcDirectory()}/layouts/${normalizeFileExtension(name, '.vue')}.vue`
2222

2323
createFile({
2424
fileName: `${name}.vue`,
@@ -37,7 +37,7 @@ const directCreateLayout = (path: string) => {
3737
.then((name) => {
3838
if (!name) { return }
3939

40-
let filePath = `${path}/${name}.vue`
40+
let filePath = `${path}/${normalizeFileExtension(name, '.vue')}.vue`
4141

4242
createFile({
4343
fileName: `${name}.vue`,

src/commands/Middleware.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir, hasServerDir } from '../utils'
2+
import {
3+
projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir, hasServerDir,
4+
normalizeFileExtension} from '../utils'
35
import { nuxtMiddlewareTemplate, nitroDefaultTemplate } from '../templates'
46

57
const createMiddleware = () => {
@@ -40,7 +42,7 @@ const directCreateMiddleware = (path: string) => {
4042
.then((name) => {
4143
if (!name) { return }
4244

43-
let filePath = `${path}/${name}.ts`
45+
let filePath = `${path}/${normalizeFileExtension(name, '.ts')}.ts`
4446

4547
createFile({
4648
fileName: `${name}.ts`,

src/commands/Nitro.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, hasServerDir, createDir } from '../utils'
2+
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, hasServerDir, createDir, normalizeFileExtension } from '../utils'
33
import { nitroDefaultTemplate, nitroPluginTemplate, nitroUtilTemplate } from '../templates'
44

55
let serverDir = `${projectSrcDirectory()}/${hasServerDir()}/`
@@ -148,7 +148,7 @@ const directCreateNitroAPI = (path: string) => {
148148
createDir('server')
149149
createDir('server/api')
150150

151-
let filePath = `${path}/${name}.ts`
151+
let filePath = `${path}/${normalizeFileExtension(name, '.ts')}.ts`
152152
createFile({
153153
fileName: `${name}.ts`,
154154
content: nitroDefaultTemplate,
@@ -169,7 +169,7 @@ const directCreateNitroRoute = (path: string) => {
169169
createDir('server')
170170
createDir('server/routes')
171171

172-
let filePath = `${path}/${name}.ts`
172+
let filePath = `${path}/${normalizeFileExtension(name, '.ts')}.ts`
173173

174174
createFile({
175175
fileName: `${name}.ts`,

src/commands/Page.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window } from 'vscode'
2-
import { createSubFolders, showSubFolderQuickPick, createFile, projectSrcDirectory, createDir } from '../utils'
2+
import { createSubFolders, showSubFolderQuickPick, createFile, projectSrcDirectory, createDir, normalizeFileExtension } from '../utils'
33

44
import { generateVueFileTemplate } from '../utils/files'
55

@@ -36,7 +36,7 @@ function directCreatePage(path: string) {
3636
.then((name) => {
3737
if (!name) {return}
3838

39-
let filePath = `${path}/${name}.vue`
39+
let filePath = `${path}/${normalizeFileExtension(name, '.vue')}.vue`
4040

4141
createFile({
4242
fileName: `${name}.vue`,

src/commands/Plugin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir, hasServerDir } from '../utils'
2+
import { projectSrcDirectory, createSubFolders, showSubFolderQuickPick, createFile, createDir, hasServerDir, normalizeFileExtension } from '../utils'
33
import { nuxtPluginTemplate, nitroPluginTemplate } from '../templates'
44

55
const createPlugin = () => {
@@ -39,7 +39,7 @@ const directCreatePlugin = (path: string) => {
3939
.then((name) => {
4040
if (!name) { return }
4141

42-
let filePath = `${path}/${name}.ts`
42+
let filePath = `${path}/${normalizeFileExtension(name, '.ts')}.ts`
4343

4444

4545
createFile({

src/commands/Store.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window } from 'vscode'
2-
import { projectSrcDirectory, isNuxtTwo, createFile, generatePiniaTemplates } from '../utils'
2+
import { projectSrcDirectory, isNuxtTwo, createFile, generatePiniaTemplates, normalizeFileExtension } from '../utils'
33
import { vuexContent } from '../templates'
44

55
const createStore = () => {
@@ -37,7 +37,7 @@ const directCreateStore = (path: string) => {
3737
.then((name) => {
3838
if (!name) { return }
3939

40-
let filePath = `${path}/${name}.${isNuxtTwo() ? 'js' : 'ts'}`
40+
let filePath = `${path}/${normalizeFileExtension(name, isNuxtTwo() ? '.js' : '.ts' )}.${isNuxtTwo() ? 'js' : 'ts'}`
4141

4242
if (isNuxtTwo()) {
4343
createFile({

src/utils/file.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { window, workspace, Uri } from 'vscode';
2-
import { trim, capitalize, replace, split } from 'string-ts';
2+
import { trim, capitalize, replace, split, endsWith } from 'string-ts';
33
import { existsSync, mkdirSync, readdirSync } from 'fs';
44
import { join } from 'pathe';
55
import { TextEncoder } from 'util';
@@ -36,7 +36,7 @@ export const createDirectoryAndFile = (componentName: any, commandType: string,
3636
createFile({
3737
fileName: componentName,
3838
content,
39-
fullPath: `${projectSrcDirectory()}/${type.path}/${name}/${componentName}${type.extension}`,
39+
fullPath: `${projectSrcDirectory()}/${type.path}/${name}/${normalizeFileExtension(componentName, type.extension)}${type.extension}`,
4040
});
4141
} else {
4242
window.showWarningMessage(
@@ -88,8 +88,10 @@ export const showSubFolderQuickPick = (args: {
8888
content: any
8989
}) => {
9090

91+
9192
const { type } = getCommandType(args.commandType);
9293

94+
9395
window
9496
.showQuickPick(args.subFolders, { placeHolder: 'Select a subfolder' })
9597
.then((selection) => {
@@ -98,18 +100,19 @@ export const showSubFolderQuickPick = (args: {
98100
}
99101
switch (selection) {
100102
case `Main ${type.name.toLocaleLowerCase()} folder`:
101-
const path = `${args.name}${type.extension}`;
103+
const path = `${normalizeFileExtension(args.name, type.extension)}${type.extension}`;
102104
createFile({
103105
fileName: args.name,
104106
content: args.content,
105107
fullPath: `${projectSrcDirectory()}/${type.path}/${path}`,
106108
});
107109
break;
108110
case 'Create new folder...':
109-
createDirectoryAndFile(args.name, type.name, args.content);
111+
createDirectoryAndFile(normalizeFileExtension(args.name, type.extension), type.name, args.content);
110112
break;
111113
default:
112-
const fileNameAndPath = `${selection}/${args.name}${type.extension}`;
114+
const fileNameAndPath = `${selection}/${normalizeFileExtension(args.name, type.extension)}${type.extension}`;
115+
113116
createFile({
114117
fileName: args.name,
115118
content: args.content,
@@ -171,4 +174,6 @@ export const createVueTemplate = (content: string, type: string) => {
171174

172175
};
173176

174-
export const normalizeName = (name: string, capital?: boolean) => split(trim(name), "-").map(capitalize).join('');
177+
export const normalizeName = (name: string, capital?: boolean) => split(trim(split(name, '.')[0]), "-").map(capitalize).join('');
178+
179+
export const normalizeFileExtension = (name: string, extension: string) => endsWith(name, extension) ? replace(name, extension, '') : name

src/utils/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {
3737
updateDependencies
3838
} from './dependency'
3939

40-
import { createDirectoryAndFile, createFile, createSubFolders, showSubFolderQuickPick, createDir, createVueTemplate, normalizeName } from './file'
40+
import { createDirectoryAndFile, createFile, createSubFolders, showSubFolderQuickPick, createDir, createVueTemplate, normalizeName, normalizeFileExtension } from './file'
4141

4242
import { getCommandType } from './commands'
4343

@@ -102,5 +102,6 @@ export {
102102
managePackageVersion,
103103
createConfigWatcher,
104104
isNuxiInstalled,
105-
normalizeName
105+
normalizeName,
106+
normalizeFileExtension
106107
}

0 commit comments

Comments
 (0)