mirror of
https://github.com/element-plus/element-plus.git
synced 2024-12-27 03:01:14 +08:00
101 lines
2.9 KiB
TypeScript
101 lines
2.9 KiB
TypeScript
import path from 'path'
|
|
import helper from 'components-helper'
|
|
import { epPackage, epOutput, projRoot } from './utils/paths'
|
|
import { getPackageManifest } from './utils/pkg'
|
|
import type { TaskFunction } from 'gulp'
|
|
import type { InstallOptions } from 'components-helper/lib/type'
|
|
|
|
const reComponentName: InstallOptions['reComponentName'] = (title: string) =>
|
|
`el-${title
|
|
.replace(/\B([A-Z])/g, '-$1')
|
|
.replace(/[ ]+/g, '-')
|
|
.toLowerCase()}`
|
|
|
|
const reDocUrl: InstallOptions['reDocUrl'] = (fileName, header) => {
|
|
const docs = 'https://element-plus.org/en-US/component/'
|
|
const _header = header ? header.replaceAll(/\s+/g, '-').toLowerCase() : ''
|
|
|
|
return `${docs}${fileName}.html${_header ? '#' : ''}${_header}`
|
|
}
|
|
|
|
const reWebTypesSource: InstallOptions['reWebTypesSource'] = (title) => {
|
|
const symbol = `El${title
|
|
.replaceAll(/-/g, ' ')
|
|
.replaceAll(/^\w|\s+\w/g, (item) => {
|
|
return item.trim().toUpperCase()
|
|
})}`
|
|
|
|
return { symbol }
|
|
}
|
|
|
|
const reAttribute: InstallOptions['reAttribute'] = (value, key) => {
|
|
const _value = value.match(/^\*\*(.*)\*\*$/)
|
|
const str = _value ? _value[1] : value
|
|
|
|
if (key === 'Name' && /^(-|—)$/.test(str)) {
|
|
return 'default'
|
|
} else if (str === '' || /^(-|—)$/.test(str)) {
|
|
return undefined
|
|
} else if (key === 'Attribute' && /v-model:(.+)/.test(str)) {
|
|
const _str = str.match(/v-model:(.+)/)
|
|
return _str ? _str[1] : undefined
|
|
} else if (key === 'Attribute' && /v-model/.test(str)) {
|
|
return 'model-value'
|
|
} else if (key === 'Attribute') {
|
|
return str.replace(/\B([A-Z])/g, '-$1').toLowerCase()
|
|
} else if (key === 'Type') {
|
|
return str
|
|
.replace(/\s*\/\s*/g, '|')
|
|
.replace(/\s*,\s*/g, '|')
|
|
.replace(/\(.*\)/g, '')
|
|
.toLowerCase()
|
|
} else if (key === 'Accepted Values') {
|
|
return /\[.+\]\(.+\)/.test(str) || /^\*$/.test(str)
|
|
? undefined
|
|
: str.replace(/`/g, '')
|
|
} else if (key === 'Subtags') {
|
|
return str
|
|
? `el-${str
|
|
.replaceAll(/\s*\/\s*/g, '/el-')
|
|
.replaceAll(/\B([A-Z])/g, '-$1')
|
|
.replaceAll(/\s+/g, '-')
|
|
.toLowerCase()}`
|
|
: undefined
|
|
} else {
|
|
return str
|
|
}
|
|
}
|
|
|
|
export const buildHelper: TaskFunction = (done) => {
|
|
const { name, version } = getPackageManifest(epPackage)
|
|
|
|
const tagVer = process.env.TAG_VERSION
|
|
const _version = tagVer
|
|
? tagVer.startsWith('v')
|
|
? tagVer.slice(1)
|
|
: tagVer
|
|
: version!
|
|
|
|
helper({
|
|
name: name!,
|
|
version: _version,
|
|
entry: `${path.resolve(
|
|
projRoot,
|
|
'docs/en-US/component'
|
|
)}/!(datetime-picker|message-box|message).md`,
|
|
outDir: epOutput,
|
|
reComponentName,
|
|
reDocUrl,
|
|
reWebTypesSource,
|
|
reAttribute,
|
|
props: 'Attributes',
|
|
propsName: 'Attribute',
|
|
propsOptions: 'Accepted Values',
|
|
eventsName: 'Event Name',
|
|
tableRegExp:
|
|
'#+\\s+(.*\\s*Attributes|.*\\s*Events|.*\\s*Slots|.*\\s*Directives)\\s*\\n+(\\|?.+\\|.+)\\n\\|?\\s*:?-+:?\\s*\\|.+((\\n\\|?.+\\|.+)+)',
|
|
})
|
|
|
|
done()
|
|
}
|