Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 新增创建函数的脚本,调整创建子包的脚本 #56

Merged
merged 5 commits into from
Jul 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading