Display lists of pages

If you want to get a list of all .markdoc files in a directory, for example in a blog you want to list all posts, you can use the import.meta.glob function.

---
title: My Blog Post
description: This is a blog post and it is awesome.
date: 2021-01-01
---

# My Blog Post

...
// +page.server.js
export function load() {
    const modules = import.meta.glob('./blog/*.markdoc', {
        eager: true
    });

    const posts = Object.entries(modules).map(([filepath, module]) => {
        const { frontmatter } = module;
        return {
            filepath,
            title: frontmatter.title,
            description: frontmatter.description,
            date: frontmatter.date
        };
    });

    return {
        posts
    };
}

Visual Studio Code experimental

The preprocessor automatically generates a schema file at .svelte-kit/markdoc_schema.js which can be used with the official Visual Studio Code Extension.

In the markdoc.config.json configuration file point to the schema file:

[
  {
    "id": "my-site",
    "path": "docs/content",
    "schema": {
      "path": ".svelte-kit/markdoc_schema.js",
      "type": "esm",
      "property": "default",
      "watch": true
    }
  }
]

Markdoc configuration

You can configure the underlying Markdoc compiler by passing a configuration object.

// svelte.config.js
markdoc({
    config: {
      variables: {
        name: 'Dr. Mark',
        frontmatter: {
          title: 'Configuration options'
        }
      },
      functions: {
        includes: {
          transform(parameters, config) {
            const [array, value] = Object.values(parameters);

            return Array.isArray(array) ? array.includes(value) : false;
          }
        }
      }
    }
})