Skip to content

Commit

Permalink
feat: 新增changelog,lint,release,clean指令
Browse files Browse the repository at this point in the history
  • Loading branch information
xuasir committed Mar 5, 2021
1 parent 5917312 commit 30fbfc4
Show file tree
Hide file tree
Showing 33 changed files with 2,013 additions and 114 deletions.
5 changes: 5 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
lib
dist
node_modules
*.md
LICENSE
3 changes: 3 additions & 0 deletions packages/cli-shared/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,15 @@
"chalk": "^4.1.0",
"debug": "^4.3.1",
"deepmerge": "^4.2.2",
"enquirer": "^2.3.6",
"execa": "^5.0.0",
"joi": "^17.4.0",
"lodash": "^4.17.21",
"log-symbols": "^4.0.0",
"ora": "^5.3.0",
"resolve": "^1.20.0",
"rimraf": "^3.0.2",
"semver": "^7.3.4",
"yargs-parser": "^20.2.5"
},
"devDependencies": {
Expand Down
16 changes: 16 additions & 0 deletions packages/cli-shared/src/file/copyDir.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { mkdirSync, readdirSync, statSync, copyFileSync } from 'fs'
import { resolve } from 'path'

export function copyDir(srcDir: string, destDir: string) {
mkdirSync(destDir, { recursive: true })
for (const file of readdirSync(srcDir)) {
const srcFile = resolve(srcDir, file)
const destFile = resolve(destDir, file)
const stat = statSync(srcFile)
if (stat.isDirectory()) {
copyDir(srcFile, destFile)
} else {
copyFileSync(srcFile, destFile)
}
}
}
17 changes: 17 additions & 0 deletions packages/cli-shared/src/file/emptyDir.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { existsSync, readdirSync, lstatSync, rmdirSync, unlinkSync } from 'fs'
import { resolve } from 'path'

export function emptyDir(dir: string) {
if (!existsSync(dir)) {
return
}
for (const file of readdirSync(dir)) {
const abs = resolve(dir, file)
if (lstatSync(abs).isDirectory()) {
emptyDir(abs)
rmdirSync(abs)
} else {
unlinkSync(abs)
}
}
}
4 changes: 4 additions & 0 deletions packages/cli-shared/src/file/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
export * from './getFileMeta'
export * from './lookUpFile'
export * from './removeDirOrFile'
export * from './writeFile'
export * from './emptyDir'
export * from './copyDir'
5 changes: 5 additions & 0 deletions packages/cli-shared/src/file/removeDirOrFile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { rimraf } from '../rimraf'

export function removeDirOrFile(dirOrFile: string[]) {
return Promise.all(dirOrFile.map(async (p) => await rimraf(p)))
}
10 changes: 10 additions & 0 deletions packages/cli-shared/src/file/writeFile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { existsSync, mkdirSync, writeFileSync } from 'fs'
import { dirname } from 'path'

export function writeFile(filename: string, content: string | Uint8Array) {
const dir = dirname(filename)
if (!existsSync(dir)) {
mkdirSync(dir, { recursive: true })
}
writeFileSync(filename, content)
}
6 changes: 5 additions & 1 deletion packages/cli-shared/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ export { default as assert } from 'assert'
export { default as deepmerge } from 'deepmerge'
export { default as resolve } from 'resolve'
export { default as lodash } from 'lodash'
export { default as rimraf } from 'rimraf'
export { default as semver } from 'semver'
export { prompt } from 'enquirer'

// custom
export { Logger } from './logger'
Expand All @@ -19,6 +20,9 @@ export * from './file'
export { loadModule } from './loadModule'
export * from './pkg'
export { BabelRegister, IBabelRegister } from './BabelRegister'
export * from './rimraf'
export * from './runCmd'
export * from './orderBy'

// types export
export type {
Expand Down
12 changes: 12 additions & 0 deletions packages/cli-shared/src/orderBy/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// ;['shared', 'core', 'cli']
// ['cli','core','shared','preset'] --> ['shared', 'core', 'cli', 'preset']

export function orderBy(target: string[], by: string[]) {
if (by.length < 1) return target
const indexMap = by
.map((by) => target.findIndex((val) => val === by))
.filter((v) => v > -1)
const pre = indexMap.map((i) => target[i])
const post = target.filter((_, i) => !indexMap.includes(i))
return [...pre, ...post]
}
13 changes: 13 additions & 0 deletions packages/cli-shared/src/rimraf/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import remove from 'rimraf'

export function rimraf(
path: string,
options: remove.Options = {}
): Promise<void> {
return new Promise((resolve, reject) => {
remove(path, options, (err) => {
if (err) reject(err)
resolve()
})
})
}
33 changes: 33 additions & 0 deletions packages/cli-shared/src/runCmd/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import execa from 'execa'
import { Spinner } from '../spinner'
import { Logger } from '../logger'

export type IRunCmdMessage = {
start: string
succeed: string
failed: string
}

const logger = new Logger(`xus:shared:runCmd`)

export function runCmd(
cmd: string,
args: string[],
message: IRunCmdMessage,
options?: execa.Options
): Promise<boolean> {
const spinner = new Spinner()
spinner.start(message.start)
return new Promise((resolve, reject) => {
execa(cmd, args, options)
.then(() => {
spinner.succeed(message.succeed)
resolve(true)
})
.catch((err) => {
spinner.failed(message.failed)
logger.error(err)
reject(false)
})
})
}
8 changes: 2 additions & 6 deletions packages/cli-shared/src/spinner/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@ import logSymbols from 'log-symbols'
type OraIns = ora.Ora | null

export class Spinner {
private oraIns: OraIns
private oraIns!: OraIns

constructor() {
this.oraIns = ora()
}

log(msg: string) {
start(msg: string) {
if (this.oraIns) {
this.oraIns.stop()
} else {
Expand Down
16 changes: 12 additions & 4 deletions packages/cli/src/exports/create.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
import type { IPlugin as IPluginBase, IProjectConfig } from '@xus/core'
import type { ILibBuildConfig } from '@xus/preset-built-in'
import type {
ILibBuildConfig,
ILintConfig,
IChangelogConfig,
IReleaseConfig
} from '@xus/preset-built-in'
import type { IPluginAPI } from './pluginAPI'

export interface IConfig extends Partial<IProjectConfig> {
libBuild: Partial<ILibBuildConfig>
export interface IConfig extends IProjectConfig {
libBuild: ILibBuildConfig
lint: ILintConfig
changelog: IChangelogConfig
release: IReleaseConfig
}

export type IPlugin = IPluginBase<(api: IPluginAPI) => void>
Expand All @@ -15,4 +23,4 @@ export interface IPreset {
export const createPlugin = (plugin: IPlugin) => plugin
export const createPreset = (preset: IPreset) => preset

export const defineConfig = (config: IConfig) => config
export const defineConfig = (config: Partial<IConfig>) => config
4 changes: 2 additions & 2 deletions packages/core/src/manager/ConfigManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export class ConfigManager {

private pluginConfigs = new Map<string, IPluginConfig>()
private projectSchema = ProjectConfigSchema
private pluginDefaults: Record<string, any> = {}
private pluginDefaults: Record<string, IPluginConfig> = {}

constructor(ops: IConfigManagerOps) {
this.service = ops.service
Expand Down Expand Up @@ -53,7 +53,7 @@ export class ConfigManager {
initPluginConfig() {
this.finalConfig = deepmerge(
{
...this.pluginConfigs
...this.pluginDefaults
},
this.finalConfig
)
Expand Down
3 changes: 3 additions & 0 deletions packages/plugin-cmd-create/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# `create`

> TODO: description
31 changes: 31 additions & 0 deletions packages/plugin-cmd-create/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"name": "@xus/preset-cmd-create",
"version": "0.1.2",
"description": "xus cli cmd create",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"keywords": [
"cli",
"create"
],
"author": "guo.xu <xuguo@outlook.it>",
"homepage": "https://github.com/xus-code/bundle-tools/tree/master/packages/cli#readme",
"license": "MIT",
"files": [
"dist"
],
"repository": {
"type": "git",
"url": "git+https://github.com/xus-code/bundle-tools.git"
},
"scripts": {
"dev:create": "tsc --watch",
"build:create": "tsc"
},
"bugs": {
"url": "https://github.com/xus-code/bundle-tools/issues"
},
"dependencies": {
"@xus/cli": "^0.1.1"
}
}
17 changes: 17 additions & 0 deletions packages/plugin-cmd-create/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { createPlugin } from '@xus/cli'

export default createPlugin({
name: 'cmd:create',
apply(api) {
api.registerCommand(
'create',
{
desc: 'create template project',
usage: 'xus create [dir]'
},
() => {
//
}
)
}
})
7 changes: 7 additions & 0 deletions packages/plugin-cmd-create/src/template/ts-lib/xus.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { defineConfig } from '@xus/cli'

export default defineConfig({
libBuild: {
targets: ['esm', 'cjs', 'browser']
}
})
8 changes: 8 additions & 0 deletions packages/plugin-cmd-create/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"compilerOptions": {
"outDir": "./dist"
},
"extends": "../../tsconfig.json",
"include": ["./src/**/*"],
"exclude": ["./src/template/**/*"]
}
7 changes: 6 additions & 1 deletion packages/preset-built-in/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
"dependencies": {
"@xus/cli": "^0.1.3",
"@xus/plugin-build-lib": "^0.1.3",
"@xus/plugin-cmd-lib": "^0.1.4"
"@xus/plugin-cmd-lib": "^0.1.4",
"conventional-changelog": "^3.1.24",
"release-it": "^14.4.1"
},
"devDependencies": {
"@types/conventional-changelog": "^3.1.0"
}
}
5 changes: 5 additions & 0 deletions packages/preset-built-in/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import presetBuiltIn from './preset'
export default presetBuiltIn

// types
export type { ILintConfig } from './plugin/config/lint'
export type { IChangelogConfig } from './plugin/config/changelog'
export type { IReleaseConfig } from './plugin/config/release'

// export
export * from '@xus/plugin-build-lib'
export * from '@xus/plugin-cmd-lib'
Loading

0 comments on commit 30fbfc4

Please sign in to comment.