Skip to content

Commit 27b39a1

Browse files
authored
refactor: update module (#22)
1 parent 237b16f commit 27b39a1

File tree

4 files changed

+237
-366
lines changed

4 files changed

+237
-366
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ jobs:
2424
- run: yarn dev:prepare
2525
- run: yarn lint
2626
- run: yarn prepack
27+
- run: yarn dev:generate
2728
- run: yarn test

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"prepack": "nuxt-module-build",
1919
"dev": "nuxi dev playground",
2020
"dev:build": "nuxi build playground",
21+
"dev:generate": "nuxi generate playground",
2122
"dev:prepare": "nuxt-module-build --stub && nuxi prepare playground",
2223
"lint": "eslint --ext .js,.ts,.vue .",
2324
"test": "vitest",

src/module.ts

Lines changed: 44 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,64 @@
11
import { fileURLToPath } from 'url'
22
import fsp from 'fs/promises'
3-
import { defineNuxtModule, addPlugin, resolveModule, addServerMiddleware } from '@nuxt/kit'
3+
import { defineNuxtModule, resolveModule, createResolver } from '@nuxt/kit'
44
import { parse, compileScript, compileTemplate } from '@vue/compiler-sfc'
55
import type { SFCDescriptor } from '@vue/compiler-sfc'
6-
import type { Nitro } from 'nitropack'
76

8-
export interface ModuleOptions {
9-
addPlugin: boolean
10-
}
7+
export interface ModuleOptions {}
118

129
export default defineNuxtModule<ModuleOptions>({
1310
meta: {
1411
name: 'nuxt-component-meta',
1512
configKey: 'componentMeta'
1613
},
17-
defaults: {
18-
addPlugin: true
19-
},
20-
setup (options, nuxt) {
21-
if (options.addPlugin) {
22-
const runtimeDir = fileURLToPath(new URL('./runtime', import.meta.url))
23-
let nitro: Nitro
24-
nuxt.hook('components:extend', async (components) => {
25-
const componentMeta = await Promise.all(
26-
components.map(async (component) => {
27-
const name = (component as any).pascalName
28-
const path = resolveModule((component as any).filePath, { paths: nuxt.options.rootDir })
29-
const source = await fsp.readFile(path, { encoding: 'utf-8' })
30-
31-
// Parse component source
32-
const { descriptor } = parse(source)
33-
34-
// Parse script
35-
const { props } = descriptor.scriptSetup
36-
? parseSetupScript(name, descriptor)
37-
: {
38-
props: []
39-
}
40-
41-
const { slots } = parseTemplate(name, descriptor)
42-
43-
return {
44-
name,
45-
props,
46-
slots
47-
}
48-
})
49-
)
50-
nitro.options.virtual['#meta/virtual/meta'] = `export const components = ${JSON.stringify(componentMeta)}`
51-
})
14+
setup (_options, nuxt) {
15+
const resolver = createResolver(import.meta.url)
5216

53-
nuxt.hook('nitro:init', (_nitro) => {
54-
nitro = _nitro
55-
})
17+
let componentMeta
18+
nuxt.hook('components:extend', async (components) => {
19+
componentMeta = await Promise.all(
20+
components.map(async (component) => {
21+
const name = (component as any).pascalName
22+
const path = resolveModule((component as any).filePath, { paths: nuxt.options.rootDir })
23+
const source = await fsp.readFile(path, { encoding: 'utf-8' })
24+
25+
// Parse component source
26+
const { descriptor } = parse(source)
27+
28+
// Parse script
29+
const { props } = descriptor.scriptSetup
30+
? parseSetupScript(name, descriptor)
31+
: {
32+
props: []
33+
}
5634

57-
addServerMiddleware({
35+
const { slots } = parseTemplate(name, descriptor)
36+
37+
return {
38+
name,
39+
props,
40+
slots
41+
}
42+
})
43+
)
44+
})
45+
46+
nuxt.hook('nitro:config', (nitroConfig) => {
47+
nitroConfig.handlers = nitroConfig.handlers || []
48+
nitroConfig.virtual = nitroConfig.virtual || {}
49+
50+
nitroConfig.virtual['#meta/virtual/meta'] = () => `export const components = ${JSON.stringify(componentMeta)}`
51+
52+
nitroConfig.handlers.push({
5853
route: '/api/component-meta',
59-
handler: resolveModule('./server/api/component-meta.get', { paths: runtimeDir })
54+
handler: resolver.resolve('./runtime/server/api/component-meta.get')
6055
})
61-
addServerMiddleware({
56+
57+
nitroConfig.handlers.push({
6258
route: '/api/component-meta/:component?',
63-
handler: resolveModule('./server/api/component-meta.get', { paths: runtimeDir })
59+
handler: resolver.resolve('./runtime/server/api/component-meta.get')
6460
})
65-
}
61+
})
6662
}
6763
})
6864

0 commit comments

Comments
 (0)