Advanced

Hooks

Modify your content using Nuxt build time hooks

content:file:beforeParse

This hook is called before the content is parsed.

It can be used to modify the raw content from a file before it is transformed or modify the transform options.

export default defineNuxtConfig({
  hooks: {
    'content:file:beforeParse'(ctx) {
      // ...
    }
  }
})

content:file:afterParse

This hook is called after the content is parsed and before it is saved to the database.

export default defineNuxtConfig({
  hooks: {
    'content:file:afterParse'(ctx) {
      // ...
    }
  }
})

Example Usage

nuxt.config.ts
export default defineNuxtConfig({
  // ...
  hooks: {
    'content:file:beforeParse'(ctx) {
      const { file } = ctx;

      if (file.id.endsWith(".md")) {
        file.body = file.body.replace(/react/gi, "Vue");
      }
    },
    'content:file:afterParse'(ctx) {
      const { file, content } = ctx;

      const wordsPerMinute = 180;
      const text = typeof file.body === 'string' ? file.body : '';
      const wordCount = text.split(/\s+/).length;

      content.readingTime = Math.ceil(wordCount / wordsPerMinute);
    }
  }
})
In the content:file:afterParse hook, we added a custom property to our content object. To be able to access that property within our pages using queryCollection(), we first need to define it in our content schema.
content.config.ts
export default defineContentConfig({
  collections: {
    content: defineCollection({
      type: 'page',
      source: '**/*.md',
      schema: z.object({
        readingTime: z.number().optional()
      })
    })
  }
});