feat: 主题配置函数
新增主题配置函数,笔记配置函数,提供类型提示支持.
This commit is contained in:
parent
7a2a2af562
commit
844feeae74
12
.commitlintrc.js
Normal file
12
.commitlintrc.js
Normal file
@ -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],
|
||||
},
|
||||
}
|
||||
@ -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",
|
||||
|
||||
21
packages/theme/src/node/define.ts
Normal file
21
packages/theme/src/node/define.ts
Normal file
@ -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<PlumeThemeOptions, BundlerConfig>
|
||||
|
||||
export const definePlumeConfig = (
|
||||
config: DefinePlumeConfig
|
||||
): DefinePlumeConfig => config
|
||||
|
||||
export const definePlumeNotesConfig = (
|
||||
notes: PlumeThemeNotesOptions
|
||||
): PlumeThemeNotesOptions => notes
|
||||
|
||||
export const definePlumeNotesItemConfig = (
|
||||
item: PlumeThemeNotesConfigItem
|
||||
): PlumeThemeNotesConfigItem => item
|
||||
@ -1,5 +1,6 @@
|
||||
import { themePlume } from './theme'
|
||||
export * from './theme'
|
||||
export * from '../shared'
|
||||
export * from './define'
|
||||
|
||||
export default themePlume
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { release } from './release'
|
||||
import { release } from './release.mjs'
|
||||
|
||||
release().catch((err) => {
|
||||
console.error(err)
|
||||
@ -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<void> => {
|
||||
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<void> => {
|
||||
]
|
||||
|
||||
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<void> => {
|
||||
value: bump,
|
||||
}))
|
||||
|
||||
const { bump, customVersion, npmTag } = await prompt<Answers>([
|
||||
const { bump, customVersion, npmTag } = await prompt([
|
||||
{
|
||||
name: 'bump',
|
||||
message: 'Select release type:',
|
||||
@ -49,20 +50,20 @@ export const release = async (): Promise<void> => {
|
||||
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})?`,
|
||||
21
scripts/release/sync.mjs
Normal file
21
scripts/release/sync.mjs
Normal file
@ -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)
|
||||
}
|
||||
@ -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<void[]> => {
|
||||
const promises = packages.map((packageName) => {
|
||||
return import(`../../packages/${packageName}/package.json`).then(
|
||||
(content: Record<string, unknown>) =>
|
||||
new Promise<void>((resolve) => {
|
||||
get(`https://npmmirror.com/sync/${content.name as string}`).on(
|
||||
'finish',
|
||||
() => resolve()
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
return Promise.all(promises)
|
||||
}
|
||||
17
scripts/release/version.mjs
Normal file
17
scripts/release/version.mjs
Normal file
@ -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']
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
import { prerelease } from 'semver'
|
||||
|
||||
export interface Answers {
|
||||
bump: string
|
||||
customVersion: string
|
||||
npmTag: string
|
||||
}
|
||||
|
||||
export const versions: Record<string, string> = {}
|
||||
|
||||
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']
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user