diff --git a/src/module.ts b/src/module.ts index c482b76ab..fc7565151 100644 --- a/src/module.ts +++ b/src/module.ts @@ -279,8 +279,9 @@ export default defineNuxtModule({ // TODO: remove kit usage templateUtils.importSources(contentContext.transformers), `const transformers = [${contentContext.transformers.map(templateUtils.importName).join(', ')}]`, - 'export const getParser = (ext) => transformers.find(p => ext.match(new RegExp(p.extensions.join("|"), "i")) && p.parse)', - 'export const getTransformers = (ext) => transformers.filter(p => ext.match(new RegExp(p.extensions.join("|"), "i")) && p.transform)', + 'const matchExtensionPattern = (p) => new RegExp((p.extensions || p.extentions).join("|"), "i")', + 'export const getParser = (ext) => transformers.find(p => ext.match(matchExtensionPattern(p)) && p.parse)', + 'export const getTransformers = (ext) => transformers.filter(p => ext.match(matchExtensionPattern(p)) && p.transform)', 'export default () => {}' ].join('\n') }) diff --git a/src/runtime/types.d.ts b/src/runtime/types.d.ts index f039f90ea..ad2567410 100644 --- a/src/runtime/types.d.ts +++ b/src/runtime/types.d.ts @@ -135,6 +135,10 @@ export interface MarkdownParsedContent extends ParsedContent { export interface ContentTransformer { name: string + /** + * @deprecated Misspelled, use `extensions` + */ + extentions: string[] extensions: string[] parse?(id: string, content: string): Promise | ParsedContent transform?: ((content: ParsedContent) => Promise) | ((content: ParsedContent) => ParsedContent) diff --git a/test/basic.test.ts b/test/basic.test.ts index 2064225f6..86e8168ee 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -117,7 +117,10 @@ describe('fixtures:basic', async () => { testJSONParser() testPathMetaTransformer() - + test('transformers:custom', async () => { + const index = await fetchDocument('content:index.md') + expect(index._customTransformed).toBeTruthy() + }) // testMDCComponent() testRegex() diff --git a/test/fixtures/basic/addons/custom-transformer.ts b/test/fixtures/basic/addons/custom-transformer.ts new file mode 100644 index 000000000..2cdf3e406 --- /dev/null +++ b/test/fixtures/basic/addons/custom-transformer.ts @@ -0,0 +1,11 @@ +import { ContentTransformer } from '../../../../src/runtime/types' + +export default { + name: 'custom-transformer', + // note this is using the deprecated `extentions` as a test + extentions: ['.*'], + transform (content) { + content._customTransformed = true + return content + } +} diff --git a/test/fixtures/basic/modules/content-helper.ts b/test/fixtures/basic/modules/content-helper.ts new file mode 100644 index 000000000..81d38d547 --- /dev/null +++ b/test/fixtures/basic/modules/content-helper.ts @@ -0,0 +1,13 @@ +import { createResolver, defineNuxtModule, useNuxt } from '@nuxt/kit' + +export default defineNuxtModule({ + setup () { + const nuxt = useNuxt() + + const resolver = createResolver(import.meta.url) + + nuxt.hooks.hook('content:context', (ctx) => { + ctx.transformers.push(resolver.resolve('../addons/custom-transformer')) + }) + } +}) diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index d06739c2c..dd4fe3f65 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -16,7 +16,10 @@ export default defineNuxtConfig({ } ] }, - buildModules: [contentModule], + buildModules: [ + '~/modules/content-helper', + contentModule + ], content: { locales: ['en', 'fa'], sources: [