wot-design-uni/build/buildThemeVars.js
不如摸鱼去 201e7a12b9
feat: typescript类型支持增强 (#192)
* refactor: ♻️  typescript支持增强

* refactor: ♻️  typescript支持增强

* refactor: ♻️  typescript支持增强

* refactor: ♻️  typescript支持增强

* refactor: ♻️  typescript支持增强

---------

Co-authored-by: xuqingkai <xuqingkai@hd123.com>
2024-03-18 22:36:12 +08:00

81 lines
2.5 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const extractSCSSVariables = (scssFilePath) => {
const scssContent = fs.readFileSync(scssFilePath, 'utf8')
const variableRegex = /\/\*\s*([a-zA-Z0-9-]+)\s*\*\/([\s\S]*?)(?=\/\*\s*([a-zA-Z0-9-]+)\s*\*\/|$)/g
const variables = {}
let match
while ((match = variableRegex.exec(scssContent)) !== null) {
const keyComment = match[1].replace(/-([a-z])/g, (match, letter) => letter.toUpperCase())
const value = match[2].trim()
variables[keyComment] = value
}
console.log(variables)
return variables
}
// const generateTSFileContent = (variables) => {
// let tsContent = ''
// for (const key in variables) {
// tsContent += `export type ${key}ThemeVars = {\n`
// tsContent += variables[key]
// .split('\n')
// .map((line) => {
// line = line.trim()
// if (line.split(':').length === 2) {
// const lines = line.split(':')
// lines[0] = lines[0].replace(/^\$-/, '').replace(/-([a-z])/g, (match, letter) => letter.toUpperCase())
// line = `${lines[0]}?:string`
// }
// return ` ${line.trim()}\n`
// })
// .join('')
// tsContent += '};\n\n'
// }
// return tsContent
// }
const generateTSFileContent = (variables) => {
let tsContent = ''
for (const key in variables) {
tsContent += `export type ${key}ThemeVars = {\n`
tsContent += variables[key]
.split('\n')
.map((line) => {
line = line.trim()
if (line.split(':').length === 2) {
const lines = line.split(':')
lines[0] = lines[0].replace(/^\$-/, '').replace(/-([a-z])/g, (match, letter) => letter.toUpperCase())
line = `${lines[0]}?:string`
}
return ` ${line.trim()}\n`
})
.join('')
tsContent += '};\n\n'
}
// Add logic to export all types as ConfigProviderThemeVars
const exportTypes = Object.keys(variables)
.map((key) => `${key}ThemeVars`)
.join(' & ')
tsContent += `export type ConfigProviderThemeVars = ${exportTypes};\n`
return tsContent
}
const tsFilePath = path.resolve(__dirname, '../src/uni_modules/wot-design-uni/components/wd-config-provider/type.ts')
const scssFilePath = path.resolve(__dirname, '../src/uni_modules/wot-design-uni/components/common/abstracts/test.scss')
const variables = extractSCSSVariables(scssFilePath)
const tsContent = generateTSFileContent(variables)
fs.writeFileSync(tsFilePath, tsContent)
console.log('TS file generated successfully!')