feat: use oxc-parser to get ExportNamedDeclaration node

This commit is contained in:
zernonia 2024-01-12 10:11:33 +08:00
parent 641344dcf3
commit 228b0b970e

View File

@ -1,7 +1,7 @@
import { readFileSync, readdirSync } from 'node:fs'
import { join } from 'node:path'
import { addComponent, createResolver, defineNuxtModule } from '@nuxt/kit'
import { parse } from 'recast'
import oxc from 'oxc-parser'
// Module options TypeScript interface definition
export interface ModuleOptions {
@ -40,11 +40,16 @@ export default defineNuxtModule<ModuleOptions>({
try {
readdirSync(resolve(COMPONENT_DIR_PATH))
.forEach(async (dir) => {
try {
const filePath = await resolvePath(join(COMPONENT_DIR_PATH, dir, 'index'), { extensions: ['.ts', '.js'] })
const content = readFileSync(filePath, { encoding: 'utf8' })
const ast = parse(content)
const ast = oxc.parseSync(content, {
sourceType: 'module',
sourceFilename: filePath,
})
const program = JSON.parse(ast.program)
const exportedKeys: string[] = ast.program.body
const exportedKeys: string[] = program.body
// @ts-expect-error parse return any
.filter(node => node.type === 'ExportNamedDeclaration')
// @ts-expect-error parse return any
@ -58,6 +63,11 @@ export default defineNuxtModule<ModuleOptions>({
filePath: resolve(filePath),
})
})
}
catch (err) {
if (err instanceof Error)
console.warn('Module error: ', err.message)
}
})
}
catch (err) {