From 844feeae7406f5aee8edef35bce4a08e808f692e Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Mon, 25 Apr 2022 15:32:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E9=A2=98=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增主题配置函数,笔记配置函数,提供类型提示支持. --- .commitlintrc.js | 12 +++++++ package.json | 5 +-- packages/theme/src/node/define.ts | 21 +++++++++++ packages/theme/src/node/index.ts | 1 + scripts/release/{index.ts => index.mjs} | 2 +- scripts/release/{release.ts => release.mjs} | 39 +++++++++++---------- scripts/release/sync.mjs | 21 +++++++++++ scripts/release/sync.ts | 21 ----------- scripts/release/version.mjs | 17 +++++++++ scripts/release/version.ts | 21 ----------- 10 files changed, 96 insertions(+), 64 deletions(-) create mode 100644 .commitlintrc.js create mode 100644 packages/theme/src/node/define.ts rename scripts/release/{index.ts => index.mjs} (63%) rename scripts/release/{release.ts => release.mjs} (62%) create mode 100644 scripts/release/sync.mjs delete mode 100644 scripts/release/sync.ts create mode 100644 scripts/release/version.mjs delete mode 100644 scripts/release/version.ts diff --git a/.commitlintrc.js b/.commitlintrc.js new file mode 100644 index 00000000..b03ace4a --- /dev/null +++ b/.commitlintrc.js @@ -0,0 +1,12 @@ +const fs = require('fs') +const path = require('path') + +const packages = fs.readdirSync(path.resolve(__dirname, 'packages')) + +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + 'scope-enum': [2, 'always', [...packages]], + 'footer-max-line-length': [0], + }, +} diff --git a/package.json b/package.json index 8979820a..57c904c6 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "packages/*" ], "scripts": { + "_release": "yarn lint && yarn build && lerna publish --registry https://registry.npmjs.org/", "build": "yarn build:package", "build:package": "lerna run build --stream", "commit": "cz", @@ -19,11 +20,11 @@ "docs:webpack-build": "vuepress-webpack build docs", "docs:webpack-serve": "vuepress-webpack dev docs", "lerna": "lerna clean && lerna bootstrap", - "lerna:publish": "ts-node -O {\\\"module\\\":\\\"commonjs\\\"} scripts/release", + "lerna:publish": "scripts/release/index.mjs", "lint": "eslint --ext .js,.ts,.vue .", "package:clean": "lerna run clean", "prepare": "husky install", - "release": "yarn lint && yarn build && lerna publish --registry https://registry.npmjs.org/" + "release": "yarn lint && yarn lerna:publish" }, "lint-staged": { "*.{js,ts,vue}": "eslint --fix", diff --git a/packages/theme/src/node/define.ts b/packages/theme/src/node/define.ts new file mode 100644 index 00000000..494fd9b8 --- /dev/null +++ b/packages/theme/src/node/define.ts @@ -0,0 +1,21 @@ +import type { UserConfig } from '@vuepress/cli' +import type { BundlerConfig } from '@vuepress/core' +import type { + PlumeThemeNotesConfigItem, + PlumeThemeNotesOptions, + PlumeThemeOptions, +} from '../shared' + +type DefinePlumeConfig = UserConfig + +export const definePlumeConfig = ( + config: DefinePlumeConfig +): DefinePlumeConfig => config + +export const definePlumeNotesConfig = ( + notes: PlumeThemeNotesOptions +): PlumeThemeNotesOptions => notes + +export const definePlumeNotesItemConfig = ( + item: PlumeThemeNotesConfigItem +): PlumeThemeNotesConfigItem => item diff --git a/packages/theme/src/node/index.ts b/packages/theme/src/node/index.ts index 7d75f247..f2bb65f4 100644 --- a/packages/theme/src/node/index.ts +++ b/packages/theme/src/node/index.ts @@ -1,5 +1,6 @@ import { themePlume } from './theme' export * from './theme' export * from '../shared' +export * from './define' export default themePlume diff --git a/scripts/release/index.ts b/scripts/release/index.mjs similarity index 63% rename from scripts/release/index.ts rename to scripts/release/index.mjs index 3fac26c4..a9981480 100644 --- a/scripts/release/index.ts +++ b/scripts/release/index.mjs @@ -1,4 +1,4 @@ -import { release } from './release' +import { release } from './release.mjs' release().catch((err) => { console.error(err) diff --git a/scripts/release/release.ts b/scripts/release/release.mjs similarity index 62% rename from scripts/release/release.ts rename to scripts/release/release.mjs index e113870a..ae731394 100644 --- a/scripts/release/release.ts +++ b/scripts/release/release.mjs @@ -1,27 +1,28 @@ import chalk from 'chalk' -import { prompt } from 'inquirer' -import type { ReleaseType } from 'semver' -import { inc } from 'semver' -import { version as currentVersion } from '../../lerna.json' -import { sync } from './sync' -import { getNpmTags, getVersion, versions } from './version' -import type { Answers } from './version' -const execa = require('execa') -const ora = require('ora') +import inquirer from 'inquirer' +import inc from 'semver/functions/inc.js' +import { getNpmTags, getVersion, versions } from './version.mjs' +import { execa } from 'execa' +import ora from 'ora' +import fs from 'fs' +import path from 'path' const { green, red } = chalk +const { prompt } = inquirer -export const release = async (): Promise => { +const lerna = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'lerna.json'))) +const { version: currentVersion } = lerna + +export const release = async () => { const buildSpinner = ora('Building project').start() - - await execa('yarn', ['run', 'clean']) + await execa('yarn', ['run', 'lint']) await execa('yarn', ['run', 'build']) buildSpinner.succeed() ora(`Current version: ${green(currentVersion)}`).info() - const bumps: ReleaseType[] = [ + const bumps = [ 'prerelease', 'patch', 'minor', @@ -30,7 +31,7 @@ export const release = async (): Promise => { ] bumps.forEach((bump) => { - versions[bump] = inc(currentVersion, bump) as string + versions[bump] = inc(currentVersion, bump) }) const bumpChoices = bumps.map((bump) => ({ @@ -38,7 +39,7 @@ export const release = async (): Promise => { value: bump, })) - const { bump, customVersion, npmTag } = await prompt([ + const { bump, customVersion, npmTag } = await prompt([ { name: 'bump', message: 'Select release type:', @@ -49,20 +50,20 @@ export const release = async (): Promise => { name: 'customVersion', message: 'Input version:', type: 'input', - when: (answers): boolean => answers.bump === 'custom', + when: (answers) => answers.bump === 'custom', }, { name: 'npmTag', message: 'Input npm tag:', type: 'list', - default: (answers: Answers): string => getNpmTags(getVersion(answers))[0], - choices: (answers: Answers): string[] => getNpmTags(getVersion(answers)), + default: answers => getNpmTags(getVersion(answers))[0], + choices: answers => getNpmTags(getVersion(answers)), }, ]) const version = customVersion || versions[bump] - const { confirm } = await prompt<{ confirm: 'Y' | 'N' }>([ + const { confirm } = await prompt([ { name: 'confirm', message: `Confirm releasing ${version} (${npmTag})?`, diff --git a/scripts/release/sync.mjs b/scripts/release/sync.mjs new file mode 100644 index 00000000..42a780dd --- /dev/null +++ b/scripts/release/sync.mjs @@ -0,0 +1,21 @@ +import { readdirSync } from 'fs' +import { get } from 'https' +import { resolve } from 'path' + +const packages = readdirSync(resolve(__dirname, '../../packages')) + +export const sync = () => { + const promises = packages.map(packageName => { + return import(`../../packages/${packageName}/package.json`) + .then(content => + new Promise((resolve) => { + get(`https://npmmirror.com/sync/${content.name}`).on( + 'finish', + () => resolve() + ) + }) + ) + }) + + return Promise.all(promises) +} diff --git a/scripts/release/sync.ts b/scripts/release/sync.ts deleted file mode 100644 index 9fddd85e..00000000 --- a/scripts/release/sync.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { readdirSync } from 'fs' -import { get } from 'https' -import { resolve } from 'path' - -const packages = readdirSync(resolve(__dirname, '../../packages')) - -export const sync = (): Promise => { - const promises = packages.map((packageName) => { - return import(`../../packages/${packageName}/package.json`).then( - (content: Record) => - new Promise((resolve) => { - get(`https://npmmirror.com/sync/${content.name as string}`).on( - 'finish', - () => resolve() - ) - }) - ) - }) - - return Promise.all(promises) -} diff --git a/scripts/release/version.mjs b/scripts/release/version.mjs new file mode 100644 index 00000000..06fa9d86 --- /dev/null +++ b/scripts/release/version.mjs @@ -0,0 +1,17 @@ + +import prerelease from 'semver/functions/prerelease.js' + + +export const versions = {} + +export const getVersion = answers => + answers.customVersion || versions[answers.bump] + +export const isPreRelease = version => + Boolean(prerelease(version)) + +export const getNpmTags = version => { + if (isPreRelease(version)) return ['next', 'alpha', 'beta', 'latest'] + + return ['latest', 'beta', 'alpha', 'next'] +} diff --git a/scripts/release/version.ts b/scripts/release/version.ts deleted file mode 100644 index f730864a..00000000 --- a/scripts/release/version.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { prerelease } from 'semver' - -export interface Answers { - bump: string - customVersion: string - npmTag: string -} - -export const versions: Record = {} - -export const getVersion = (answers: Answers): string => - answers.customVersion || versions[answers.bump] - -export const isPreRelease = (version: string): boolean => - Boolean(prerelease(version)) - -export const getNpmTags = (version: string): string[] => { - if (isPreRelease(version)) return ['next', 'alpha', 'beta', 'latest'] - - return ['latest', 'beta', 'alpha', 'next'] -}