Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions playground/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ export default defineNuxtConfig({
componentMeta: {
debug: 2,
exclude: [/node_modules/i],
overrides: {
TestComponent: {
props: {
name: {
name: 'name',
type: 'number'
}
}
}
},
metaSources: [
{
TestExternalMeta: {
Expand Down
1 change: 1 addition & 0 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ export default defineNuxtModule<ModuleOptions>({
components: [],
metaSources: {},
transformers,
overrides: options.overrides || {},
beforeWrite: async (schema: NuxtComponentMeta) => {
return await nuxt.callHook('component-meta:schema' as any, schema) || schema
}
Expand Down
3 changes: 2 additions & 1 deletion src/parser/meta-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export function useComponentMetaParser (
componentDirs = [],
checkerOptions,
exclude = [],
overrides = {},
transformers = [],
debug = false,
metaFields,
Expand Down Expand Up @@ -201,7 +202,7 @@ export function useComponentMetaParser (

Object.assign(
component.meta,
refineMeta(meta, metaFields),
refineMeta(meta, metaFields, overrides[component.pascalName] || {}),
{
hash: codeHash
}
Expand Down
15 changes: 14 additions & 1 deletion src/parser/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { camelCase } from "scule"
import type { ComponentMeta } from 'vue-component-meta'
import type { ModuleOptions } from '../types/module'

export function refineMeta(meta: ComponentMeta, fields: ModuleOptions['metaFields'] = { type: true, props: true, slots: true, events: true, exposed: true }): ComponentMeta {
export function refineMeta(meta: ComponentMeta, fields: ModuleOptions['metaFields'] = { type: true, props: true, slots: true, events: true, exposed: true }, overrides: ModuleOptions['overrides'][string] = {}): ComponentMeta {
const eventProps = new Set<string>(meta.events.map((event :any) => camelCase(`on_${event.name}`)))
const props = (fields.props ? meta.props : [])
.filter((prop: any) => !prop.global && !eventProps.has(prop.name as string))
Expand Down Expand Up @@ -49,6 +49,19 @@ export function refineMeta(meta: ComponentMeta, fields: ModuleOptions['metaField
removeFields(refinedMeta.props, ['schema'])
}

for (const meta in overrides) {
const metaOverrides = overrides[meta as keyof typeof overrides]
const metaFields = refinedMeta[meta as keyof ComponentMeta]
if (Array.isArray(metaFields)) {
for (const fieldName in metaOverrides) {
const override = metaOverrides[fieldName]
const index = metaFields.findIndex((field: any) => field.name === fieldName)
if (index !== -1) {
metaFields[index] = override
}
}
}
}
return refinedMeta
}

Expand Down
26 changes: 26 additions & 0 deletions src/types/module.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { MetaCheckerOptions } from 'vue-component-meta'
import type { ComponentsDir, ComponentsOptions } from '@nuxt/schema'
import type { TransformersHookData, ExtendHookData, NuxtComponentMeta } from '.'
import type { JsonSchema } from './schema'

export interface ModuleOptions {
/**
Expand Down Expand Up @@ -51,6 +52,31 @@ export interface ModuleOptions {
* Filter all components that are not global.
*/
globalsOnly?: boolean,
overrides: {
[componentName: string]: {
props?: {
[propName: string]: {
"name": string,
"global"?: boolean,
"description"?: string,
"tags"?: Array<{ "name": string, "text": string }>,
"required"?: boolean,
"type": string,
"schema"?: JsonSchema,
"default"?: string
}
}
slots?: {
[slotName: string]: any
}
events?: {
[eventName: string]: any
}
exposed?: {
[exposedName: string]: any
}
}
}
/**
* Filter meta properties to be included in the output.
*/
Expand Down
Loading