Skip to content

Commit 1f0303b

Browse files
committed
refactor: migrate the codebase to typescript
1 parent 9b2b1e4 commit 1f0303b

13 files changed

+81
-30
lines changed

Diff for: index.js renamed to index.ts

+23-12
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
#!/usr/bin/env node
2-
// @ts-check
32

4-
import fs from 'fs'
5-
import path from 'path'
3+
import * as fs from 'fs'
4+
import * as path from 'path'
65

76
import minimist from 'minimist'
87
import prompts from 'prompts'
98
import { red, green, bold } from 'kolorist'
109

11-
import renderTemplate from './utils/renderTemplate.js'
12-
import { postOrderDirectoryTraverse, preOrderDirectoryTraverse } from './utils/directoryTraverse.js'
13-
import generateReadme from './utils/generateReadme.js'
14-
import getCommand from './utils/getCommand.js'
15-
import renderEslint from './utils/renderEslint.js'
16-
import banner from './utils/banner.js'
10+
import renderTemplate from './utils/renderTemplate'
11+
import { postOrderDirectoryTraverse, preOrderDirectoryTraverse } from './utils/directoryTraverse'
12+
import generateReadme from './utils/generateReadme'
13+
import getCommand from './utils/getCommand'
14+
import renderEslint from './utils/renderEslint'
15+
import banner from './utils/banner'
1716

1817
function isValidPackageName(projectName) {
1918
return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(projectName)
@@ -89,7 +88,19 @@ async function init() {
8988

9089
const forceOverwrite = argv.force
9190

92-
let result = {}
91+
let result: {
92+
projectName?: string
93+
shouldOverwrite?: boolean
94+
packageName?: string
95+
needsTypeScript?: boolean
96+
needsJsx?: boolean
97+
needsRouter?: boolean
98+
needsPinia?: boolean
99+
needsVitest?: boolean
100+
needsCypress?: boolean
101+
needsEslint?: boolean
102+
needsPrettier?: boolean
103+
} = {}
93104

94105
try {
95106
// Prompts:
@@ -124,7 +135,7 @@ async function init() {
124135
},
125136
{
126137
name: 'overwriteChecker',
127-
type: (prev, values = {}) => {
138+
type: (prev, values) => {
128139
if (values.shouldOverwrite === false) {
129140
throw new Error(red('✖') + ' Operation cancelled')
130141
}
@@ -199,7 +210,7 @@ async function init() {
199210
},
200211
{
201212
name: 'needsPrettier',
202-
type: (prev, values = {}) => {
213+
type: (prev, values) => {
203214
if (isFeatureFlagsUsed || !values.needsEslint) {
204215
return null
205216
}

Diff for: package.json

+3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
},
3535
"homepage": "https://github.com/vuejs/create-vue#readme",
3636
"devDependencies": {
37+
"@types/eslint": "^8.4.1",
38+
"@types/prompts": "^2.0.14",
39+
"@vue/tsconfig": "^0.1.3",
3740
"esbuild": "^0.14.23",
3841
"esbuild-plugin-license": "^1.2.2",
3942
"husky": "^7.0.4",

Diff for: pnpm-lock.yaml

+27
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: scripts/build.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ SOFTWARE.
2626

2727
await esbuild.build({
2828
bundle: true,
29-
entryPoints: ['index.js'],
29+
entryPoints: ['index.ts'],
3030
outfile: 'outfile.cjs',
3131
format: 'cjs',
3232
platform: 'node',

Diff for: tsconfig.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "@vue/tsconfig/tsconfig.node.json",
3+
"include": ["index.ts", "utils/**/*"],
4+
"compilerOptions": {
5+
"strict": false
6+
}
7+
}

Diff for: utils/banner.js renamed to utils/banner.ts

File renamed without changes.

Diff for: utils/deepMerge.js renamed to utils/deepMerge.ts

File renamed without changes.

Diff for: utils/directoryTraverse.js renamed to utils/directoryTraverse.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import fs from 'fs'
2-
import path from 'path'
1+
import * as fs from 'fs'
2+
import * as path from 'path'
33

44
export function preOrderDirectoryTraverse(dir, dirCallback, fileCallback) {
55
for (const filename of fs.readdirSync(dir)) {

Diff for: utils/generateReadme.js renamed to utils/generateReadme.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import fs from 'fs'
2-
3-
import getCommand from './getCommand.js'
1+
import getCommand from './getCommand'
42

53
const sfcTypeSupportDoc = [
64
'',
File renamed without changes.

Diff for: utils/renderEslint.js renamed to utils/renderEslint.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import fs from 'fs'
2-
import path from 'path'
1+
import * as fs from 'fs'
2+
import * as path from 'path'
3+
4+
import type { ESLint, Linter } from 'eslint'
35

46
import { devDependencies as allEslintDeps } from '../template/eslint/package.json'
5-
import deepMerge from './deepMerge.js'
6-
import sortDependencies from './sortDependencies.js'
7+
import deepMerge from './deepMerge'
8+
import sortDependencies from './sortDependencies'
79

810
const dependencies = {}
911
function addEslintDependency(name) {
@@ -13,7 +15,10 @@ function addEslintDependency(name) {
1315
addEslintDependency('eslint')
1416
addEslintDependency('eslint-plugin-vue')
1517

16-
const config = {
18+
interface ESLintConfig extends Linter.Config {
19+
extends: string[]
20+
}
21+
const config: ESLintConfig = {
1722
root: true,
1823
extends: ['plugin:vue/vue3-essential'],
1924
env: {
@@ -83,7 +88,7 @@ export default function renderEslint(
8388

8489
// update package.json
8590
const packageJsonPath = path.resolve(rootDir, 'package.json')
86-
const existingPkg = JSON.parse(fs.readFileSync(packageJsonPath))
91+
const existingPkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
8792
const pkg = sortDependencies(
8893
deepMerge(existingPkg, {
8994
scripts: {

Diff for: utils/renderTemplate.js renamed to utils/renderTemplate.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import fs from 'fs'
2-
import path from 'path'
1+
import * as fs from 'fs'
2+
import * as path from 'path'
33

4-
import deepMerge from './deepMerge.js'
5-
import sortDependencies from './sortDependencies.js'
4+
import deepMerge from './deepMerge'
5+
import sortDependencies from './sortDependencies'
66

77
/**
88
* Renders a template folder/file to the file system,
@@ -34,8 +34,8 @@ function renderTemplate(src, dest) {
3434

3535
if (filename === 'package.json' && fs.existsSync(dest)) {
3636
// merge instead of overwriting
37-
const existing = JSON.parse(fs.readFileSync(dest))
38-
const newPackage = JSON.parse(fs.readFileSync(src))
37+
const existing = JSON.parse(fs.readFileSync(dest, 'utf8'))
38+
const newPackage = JSON.parse(fs.readFileSync(src, 'utf8'))
3939
const pkg = sortDependencies(deepMerge(existing, newPackage))
4040
fs.writeFileSync(dest, JSON.stringify(pkg, null, 2) + '\n')
4141
return
File renamed without changes.

0 commit comments

Comments
 (0)