Skip to content

Commit

Permalink
feat: 新增创建函数的脚本,调整创建子包的脚本 (#56)
Browse files Browse the repository at this point in the history
* feat: 新增创建函数脚本,优化创建使用体验

* feat: 调整create脚本的实现方式

* fix: 修复无法执行子命令的问题

* feat: 调整忽略文件

* feat: 修改贡献者指南文档
  • Loading branch information
vtrbo committed Jul 1, 2024
1 parent f2f4ff8 commit 28cf194
Show file tree
Hide file tree
Showing 14 changed files with 386 additions and 197 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,5 @@ dist-*
**/types/auto-*.d.ts

# build runtime
**/rollup.config*.*
**/vite.config.ts*.*
**/rollup.config-*
**/vite.config.ts.*
11 changes: 6 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# xparcai-utils

<p><b>小趴菜,你是否想在你的简历上添上一笔开源项目的记录?</b></p>
<p>跟进我的步伐,手摸手教你如何加入小趴菜工具的开发</p>
<p>跟紧我的步伐,手摸手教你如何加入小趴菜工具的开发</p>
<p>这也基本是所有的开源项目加入的必须步骤</p>

# 操作步骤
Expand All @@ -34,17 +34,18 @@
找到代码的位置,通常是在packages目录下,不同的轮子有不同的目录,举个栗子,如果你想优化或者是想修复深拷贝方法(deepCopy)。你可以根据使用文档找到它在哪个工具类下,找到对应的目录:packages => object => src => deepCopy.ts
找到后,在你的编辑器内进行修改
```
- 方法添加
- 工具类添加
- 有工具类
```
进入到该工具类下的目录,这里还以深拷贝举例,找到对应的目录:packages => object => src =>
在src目录下创建你的方法名称文件,然后进入文件内编辑
```
- 无工具类
```
如果小趴菜没有你要添加的方法或者工具的类,你可以到根目录下,执行 pnpm run create命令,不过要加上你要创建的类的名字。
比如:pnpm run create object
这就是创建了一个对象工具集合的类
如果小趴菜没有你要添加的方法或者工具的类,你可以到根目录下,执行 pnpm run create,执行后可以交互式的添加工具类或者方法。
当然你也可以直接使用命令行
比如:pnpm run create object deepCopy
这就是创建了一个object工具集合的类和一个deepCopy方法
```
- 方法验证:
- 你写完了一个方法,肯定要验证这个方法是否正确的,怎么验证呢?来,跟上我的脚步。
Expand Down
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
"node": ">=18.0.0"
},
"scripts": {
"create": "esno scripts/create-subpackage.ts",
"create:subpackage": "esno scripts/create-subpackage.ts",
"create:function": "esno scripts/create-function.ts",
"create": "esno scripts/create.ts",
"build": "pnpm -r --filter=./packages/* run build",
"docs": "pnpm -F xparcai-utils-docs run docs:dev",
"docs:build": "pnpm -F xparcai-utils-docs run docs:build",
Expand All @@ -48,6 +50,7 @@
"devDependencies": {
"@antfu/eslint-config": "^2.21.1",
"@babel/preset-env": "^7.24.7",
"@posva/prompts": "^2.4.4",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-eslint": "^9.0.5",
Expand All @@ -59,6 +62,7 @@
"bumpp": "^9.4.1",
"eslint-plugin-format": "^0.1.1",
"esno": "^4.7.0",
"fast-glob": "^3.3.2",
"jsdom": "^24.1.0",
"lint-staged": "^15.2.7",
"magic-string": "^0.30.10",
Expand Down
44 changes: 22 additions & 22 deletions packages/is/index.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
export * from './src/isType'
export * from './src/isString'
export * from './src/isNull'
export * from './src/isRegExp'
export * from './src/isUndefined'
export * from './src/isDate'
export * from './src/isNumber'
export * from './src/isPromise'
export * from './src/isFunction'
export * from './src/isArray'
export * from './src/isBigInt'
export * from './src/isSymbol'
export * from './src/isFalse'
export * from './src/isTrue'
export * from './src/isNaN'
export * from './src/isMap'
export * from './src/isBoolean'
export * from './src/isSet'
export * from './src/isArray'
export * from './src/isObject'
export * from './src/isMobile'
export * from './src/isEmail'
export * from './src/isDate'
export * from './src/isElement'
export * from './src/isHttp'
export * from './src/isLowerCase'
export * from './src/isEmptyObject'
export * from './src/isEmail'
export * from './src/isEmptyArray'
export * from './src/isEmptyObject'
export * from './src/isError'
export * from './src/isFalse'
export * from './src/isFunction'
export * from './src/isHttp'
export * from './src/isIDCard'
export * from './src/isLowerCase'
export * from './src/isMap'
export * from './src/isMobile'
export * from './src/isNaN'
export * from './src/isNull'
export * from './src/isNumber'
export * from './src/isNumberString'
export * from './src/isObject'
export * from './src/isPromise'
export * from './src/isRegExp'
export * from './src/isSet'
export * from './src/isString'
export * from './src/isSymbol'
export * from './src/isTrue'
export * from './src/isType'
export * from './src/isUndefined'
64 changes: 24 additions & 40 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 66 additions & 0 deletions scripts/create-function.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import process from 'node:process'
import fs from 'node:fs'
import prompts from '@posva/prompts'
import ora from 'ora'
import { loadFunction, loadSubpackage, packagePrefix, resolveRealPath, spinnersPrefixText, toCamelCase, writeSubpackageFunction, writeSubpackageFunctionTest } from './utils'

const [, , ...args] = process.argv

// 写子包的index.ts - 这里侧重的是增加导出
function writeSubpackageIndex(subpackageName: string, functionName: string) {
const exportPath = resolveRealPath(`../packages/${subpackageName}/index.ts`)
let exportContent = fs.readFileSync(exportPath, 'utf-8').trim().split('\n').sort().join('\n')
exportContent += '\n' + `export * from './src/${functionName}'` + '\n'
fs.writeFileSync(exportPath, exportContent)
}

// 创建函数
export async function createFunction() {
let subpackageName = args[0]
let functionName = args[1]
const { choices } = loadSubpackage()
if (!subpackageName || !functionName) {
// 无参调起交互式命令行
const response = await prompts([
{
name: 'subpackage',
type: 'select',
message: '请选择子包',
choices,
},
{
name: 'name',
type: 'text',
message: '请输入函数名称',
validate: (value) => {
if (!value.trim()) {
return '请输入函数名称'
}
return true
},
},
])
subpackageName = response.subpackage.trim()
functionName = response.name.trim()
}

// 转换为小驼峰
functionName = toCamelCase(functionName!)

const { dirNames: functionDirNames } = loadFunction(subpackageName!)

// 校验方法是否存在
if (functionDirNames.includes(functionName)) {
return console.error(`方法${functionName}已存在`)
}

const spinners = ora()
spinners.text = `${spinnersPrefixText}创建[${packagePrefix}/${subpackageName}] => ${functionName}中...`
spinners.start()
writeSubpackageIndex(subpackageName!, functionName)
writeSubpackageFunction(subpackageName!, functionName)
writeSubpackageFunctionTest(subpackageName!, functionName)
spinners.succeed(`${spinnersPrefixText}创建[${packagePrefix}/${subpackageName}] => ${functionName}成功`)
}

await createFunction()
Loading

0 comments on commit 28cf194

Please sign in to comment.