feat: transform utils to js by detype

This commit is contained in:
Dunqing 2023-09-18 11:38:48 +08:00
parent 6550eab823
commit d588ce03fb
5 changed files with 17 additions and 35 deletions

View File

@ -152,16 +152,15 @@ export const add = new Command()
file.name, file.name,
) )
if (!config.typescript)
filePath = filePath.replace(/\.ts$/, '.js')
// Run transformers. // Run transformers.
let content = await transformSFC(file, config) const content = await transformSFC(file, config)
content = transformImport(content, config)
if (!existsSync(componentDir)) if (!existsSync(componentDir))
await fs.mkdir(componentDir, { recursive: true }) await fs.mkdir(componentDir, { recursive: true })
if (!config.typescript)
filePath = filePath.replace(/\.ts$/, '.js')
await fs.writeFile(filePath, content) await fs.writeFile(filePath, content)
} }

View File

@ -28,6 +28,7 @@ import {
rawConfigSchema, rawConfigSchema,
resolveConfigPaths, resolveConfigPaths,
} from '../utils/get-config' } from '../utils/get-config'
import { transformByDetype } from '../utils/transformers/transform-sfc'
const PROJECT_DEPENDENCIES = { const PROJECT_DEPENDENCIES = {
base: [ base: [
@ -267,7 +268,7 @@ export async function runInit(cwd: string, config: Config) {
// Write cn file. // Write cn file.
await fs.writeFile( await fs.writeFile(
`${config.resolvedPaths.utils}.${extension}`, `${config.resolvedPaths.utils}.${extension}`,
extension === 'ts' ? templates.UTILS : templates.UTILS_JS, extension === 'ts' ? templates.UTILS : await transformByDetype(templates.UTILS, '.ts'),
'utf8', 'utf8',
) )

View File

@ -25,31 +25,6 @@ export function useEmitAsProps<Name extends string>(
return result return result
}` }`
export const UTILS_JS = `import { clsx } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs) {
return twMerge(clsx(inputs))
}
export function useEmitAsProps(emit) {
const vm = getCurrentInstance()
const events = vm?.type.emits
const result = {}
if (!events?.length) {
console.warn(
'No emitted event found. Please check component: \${vm?.type.__name}',
)
}
events?.forEach((ev) => {
result[toHandlerKey(camelize(ev))] = (...arg) => emit(ev, ...arg)
})
return result
}
`
export const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */ export const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
darkMode: ["class"], darkMode: ["class"],

View File

@ -1,19 +1,25 @@
import { createRequire } from 'node:module' import { createRequire } from 'node:module'
import type { Config } from '../get-config' import type { Config } from '../get-config'
import { transformImport } from './transform-import'
const require = createRequire(import.meta.url) const require = createRequire(import.meta.url)
const { transform } = require('detype') const { transform } = require('detype')
export async function transformByDetype(content: string, filename: string) {
return await transform(content, filename, {
removeTsComments: true,
})
}
interface File { interface File {
name: string name: string
content: string content: string
} }
export async function transformSFC(file: File, config: Config) { export async function transformSFC(file: File, config: Config) {
let content = transformImport(file.content, config)
if (config.typescript) if (config.typescript)
return file.content content = await transformByDetype(content, file.name)
return await transform(file.content, file.name, { return content
removeTsComments: true,
})
} }

View File

@ -4,6 +4,7 @@
"compilerOptions": { "compilerOptions": {
"isolatedModules": false, "isolatedModules": false,
"baseUrl": ".", "baseUrl": ".",
"module": "ES2020",
"paths": { "paths": {
"@/*": ["./*"] "@/*": ["./*"]
} }