From d588ce03fbc9034c5ee639fb995ca80d367f7a4b Mon Sep 17 00:00:00 2001 From: Dunqing Date: Mon, 18 Sep 2023 11:38:48 +0800 Subject: [PATCH] feat: transform utils to js by detype --- packages/cli/src/commands/add.ts | 9 +++---- packages/cli/src/commands/init.ts | 3 ++- packages/cli/src/utils/templates.ts | 25 ------------------- .../src/utils/transformers/transform-sfc.ts | 14 ++++++++--- packages/cli/tsconfig.json | 1 + 5 files changed, 17 insertions(+), 35 deletions(-) diff --git a/packages/cli/src/commands/add.ts b/packages/cli/src/commands/add.ts index 862785ca..98cda4ea 100644 --- a/packages/cli/src/commands/add.ts +++ b/packages/cli/src/commands/add.ts @@ -152,16 +152,15 @@ export const add = new Command() file.name, ) - if (!config.typescript) - filePath = filePath.replace(/\.ts$/, '.js') - // Run transformers. - let content = await transformSFC(file, config) - content = transformImport(content, config) + const content = await transformSFC(file, config) if (!existsSync(componentDir)) await fs.mkdir(componentDir, { recursive: true }) + if (!config.typescript) + filePath = filePath.replace(/\.ts$/, '.js') + await fs.writeFile(filePath, content) } diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index 17b9d40e..bc69f2e3 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -28,6 +28,7 @@ import { rawConfigSchema, resolveConfigPaths, } from '../utils/get-config' +import { transformByDetype } from '../utils/transformers/transform-sfc' const PROJECT_DEPENDENCIES = { base: [ @@ -267,7 +268,7 @@ export async function runInit(cwd: string, config: Config) { // Write cn file. await fs.writeFile( `${config.resolvedPaths.utils}.${extension}`, - extension === 'ts' ? templates.UTILS : templates.UTILS_JS, + extension === 'ts' ? templates.UTILS : await transformByDetype(templates.UTILS, '.ts'), 'utf8', ) diff --git a/packages/cli/src/utils/templates.ts b/packages/cli/src/utils/templates.ts index 1ef07f4c..fa74ccbe 100644 --- a/packages/cli/src/utils/templates.ts +++ b/packages/cli/src/utils/templates.ts @@ -25,31 +25,6 @@ export function useEmitAsProps( 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} */ module.exports = { darkMode: ["class"], diff --git a/packages/cli/src/utils/transformers/transform-sfc.ts b/packages/cli/src/utils/transformers/transform-sfc.ts index 1d52a181..2065a205 100644 --- a/packages/cli/src/utils/transformers/transform-sfc.ts +++ b/packages/cli/src/utils/transformers/transform-sfc.ts @@ -1,19 +1,25 @@ import { createRequire } from 'node:module' import type { Config } from '../get-config' +import { transformImport } from './transform-import' const require = createRequire(import.meta.url) const { transform } = require('detype') +export async function transformByDetype(content: string, filename: string) { + return await transform(content, filename, { + removeTsComments: true, + }) +} + interface File { name: string content: string } export async function transformSFC(file: File, config: Config) { + let content = transformImport(file.content, config) if (config.typescript) - return file.content + content = await transformByDetype(content, file.name) - return await transform(file.content, file.name, { - removeTsComments: true, - }) + return content } diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index c1afb195..cae6a9dd 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -4,6 +4,7 @@ "compilerOptions": { "isolatedModules": false, "baseUrl": ".", + "module": "ES2020", "paths": { "@/*": ["./*"] }