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/*"
|
"packages/*"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"_release": "yarn lint && yarn build && lerna publish --registry https://registry.npmjs.org/",
|
||||||
"build": "yarn build:package",
|
"build": "yarn build:package",
|
||||||
"build:package": "lerna run build --stream",
|
"build:package": "lerna run build --stream",
|
||||||
"commit": "cz",
|
"commit": "cz",
|
||||||
@ -19,11 +20,11 @@
|
|||||||
"docs:webpack-build": "vuepress-webpack build docs",
|
"docs:webpack-build": "vuepress-webpack build docs",
|
||||||
"docs:webpack-serve": "vuepress-webpack dev docs",
|
"docs:webpack-serve": "vuepress-webpack dev docs",
|
||||||
"lerna": "lerna clean && lerna bootstrap",
|
"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 .",
|
"lint": "eslint --ext .js,.ts,.vue .",
|
||||||
"package:clean": "lerna run clean",
|
"package:clean": "lerna run clean",
|
||||||
"prepare": "husky install",
|
"prepare": "husky install",
|
||||||
"release": "yarn lint && yarn build && lerna publish --registry https://registry.npmjs.org/"
|
"release": "yarn lint && yarn lerna:publish"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*.{js,ts,vue}": "eslint --fix",
|
"*.{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'
|
import { themePlume } from './theme'
|
||||||
export * from './theme'
|
export * from './theme'
|
||||||
export * from '../shared'
|
export * from '../shared'
|
||||||
|
export * from './define'
|
||||||
|
|
||||||
export default themePlume
|
export default themePlume
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { release } from './release'
|
import { release } from './release.mjs'
|
||||||
|
|
||||||
release().catch((err) => {
|
release().catch((err) => {
|
||||||
console.error(err)
|
console.error(err)
|
||||||
@ -1,27 +1,28 @@
|
|||||||
import chalk from 'chalk'
|
import chalk from 'chalk'
|
||||||
import { prompt } from 'inquirer'
|
import inquirer from 'inquirer'
|
||||||
import type { ReleaseType } from 'semver'
|
import inc from 'semver/functions/inc.js'
|
||||||
import { inc } from 'semver'
|
import { getNpmTags, getVersion, versions } from './version.mjs'
|
||||||
import { version as currentVersion } from '../../lerna.json'
|
import { execa } from 'execa'
|
||||||
import { sync } from './sync'
|
import ora from 'ora'
|
||||||
import { getNpmTags, getVersion, versions } from './version'
|
import fs from 'fs'
|
||||||
import type { Answers } from './version'
|
import path from 'path'
|
||||||
const execa = require('execa')
|
|
||||||
const ora = require('ora')
|
|
||||||
|
|
||||||
const { green, red } = chalk
|
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()
|
const buildSpinner = ora('Building project').start()
|
||||||
|
await execa('yarn', ['run', 'lint'])
|
||||||
await execa('yarn', ['run', 'clean'])
|
|
||||||
await execa('yarn', ['run', 'build'])
|
await execa('yarn', ['run', 'build'])
|
||||||
|
|
||||||
buildSpinner.succeed()
|
buildSpinner.succeed()
|
||||||
|
|
||||||
ora(`Current version: ${green(currentVersion)}`).info()
|
ora(`Current version: ${green(currentVersion)}`).info()
|
||||||
|
|
||||||
const bumps: ReleaseType[] = [
|
const bumps = [
|
||||||
'prerelease',
|
'prerelease',
|
||||||
'patch',
|
'patch',
|
||||||
'minor',
|
'minor',
|
||||||
@ -30,7 +31,7 @@ export const release = async (): Promise<void> => {
|
|||||||
]
|
]
|
||||||
|
|
||||||
bumps.forEach((bump) => {
|
bumps.forEach((bump) => {
|
||||||
versions[bump] = inc(currentVersion, bump) as string
|
versions[bump] = inc(currentVersion, bump)
|
||||||
})
|
})
|
||||||
|
|
||||||
const bumpChoices = bumps.map((bump) => ({
|
const bumpChoices = bumps.map((bump) => ({
|
||||||
@ -38,7 +39,7 @@ export const release = async (): Promise<void> => {
|
|||||||
value: bump,
|
value: bump,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const { bump, customVersion, npmTag } = await prompt<Answers>([
|
const { bump, customVersion, npmTag } = await prompt([
|
||||||
{
|
{
|
||||||
name: 'bump',
|
name: 'bump',
|
||||||
message: 'Select release type:',
|
message: 'Select release type:',
|
||||||
@ -49,20 +50,20 @@ export const release = async (): Promise<void> => {
|
|||||||
name: 'customVersion',
|
name: 'customVersion',
|
||||||
message: 'Input version:',
|
message: 'Input version:',
|
||||||
type: 'input',
|
type: 'input',
|
||||||
when: (answers): boolean => answers.bump === 'custom',
|
when: (answers) => answers.bump === 'custom',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'npmTag',
|
name: 'npmTag',
|
||||||
message: 'Input npm tag:',
|
message: 'Input npm tag:',
|
||||||
type: 'list',
|
type: 'list',
|
||||||
default: (answers: Answers): string => getNpmTags(getVersion(answers))[0],
|
default: answers => getNpmTags(getVersion(answers))[0],
|
||||||
choices: (answers: Answers): string[] => getNpmTags(getVersion(answers)),
|
choices: answers => getNpmTags(getVersion(answers)),
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
const version = customVersion || versions[bump]
|
const version = customVersion || versions[bump]
|
||||||
|
|
||||||
const { confirm } = await prompt<{ confirm: 'Y' | 'N' }>([
|
const { confirm } = await prompt([
|
||||||
{
|
{
|
||||||
name: 'confirm',
|
name: 'confirm',
|
||||||
message: `Confirm releasing ${version} (${npmTag})?`,
|
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