{"fileId":"e05e445fb74924b7edaa172ea87786ed827ef7792473dcd442da7f808c23394b","type":"Contented","path":"/api","modifiedDate":1696943516077,"sections":[],"fields":{"title":"API Reference","description":"To ease the authoring process, content write creates a preview of your content on localhost:3000. The preview comes with a basic content navigation tree (left), table of contents (right), and prose formatting (center).","editOnGitHubLink":"https://github.com/levaintech/contented/edit/main/packages/contented-example/docs/03-api.md"},"headings":[{"depth":1,"headingId":"api-reference","title":"API Reference","children":[{"depth":2,"headingId":"contented-write","title":"contented write","children":[]},{"depth":2,"headingId":"contented-generate","title":"contented generate","children":[]},{"depth":2,"headingId":"contented-build","title":"contented build","children":[]},{"depth":2,"headingId":"contented-configuration","title":"Contented Configuration","children":[{"depth":3,"headingId":"contentedconfigmjs","title":"contented.config.mjs","children":[]}]}]}],"html":"<nav class=\"toc\"><ol class=\"toc-level toc-level-1\"><li class=\"toc-item toc-item-h1\"><a class=\"toc-link toc-link-h1\" href=\"#api-reference\">API Reference</a><ol class=\"toc-level toc-level-2\"><li class=\"toc-item toc-item-h2\"><a class=\"toc-link toc-link-h2\" href=\"#contented-write\">contented write</a></li><li class=\"toc-item toc-item-h2\"><a class=\"toc-link toc-link-h2\" href=\"#contented-generate\">contented generate</a></li><li class=\"toc-item toc-item-h2\"><a class=\"toc-link toc-link-h2\" href=\"#contented-build\">contented build</a></li><li class=\"toc-item toc-item-h2\"><a class=\"toc-link toc-link-h2\" href=\"#contented-configuration\">Contented Configuration</a><ol class=\"toc-level toc-level-3\"><li class=\"toc-item toc-item-h3\"><a class=\"toc-link toc-link-h3\" href=\"#contentedconfigmjs\">contented.config.mjs</a><ol class=\"toc-level toc-level-4\"><li class=\"toc-item toc-item-h4\"><a class=\"toc-link toc-link-h4\" href=\"#example\">Example</a></li></ol></li></ol></li></ol></li></ol></nav><h1 id=\"api-reference\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#api-reference\"><span class=\"icon icon-link\"></span></a>API Reference</h1>\n<h2 id=\"contented-write\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#contented-write\"><span class=\"icon icon-link\"></span></a>contented write</h2>\n<p>To ease the authoring process, <code>content write</code> creates a preview of your content on <code>localhost:3000</code>. The preview comes\nwith a basic content navigation tree (left), table of contents (right), and prose formatting (center).</p>\n<p>This website, the current one <strong>you're looking at right now</strong> is the result of <code>contented write</code>.</p>\n<h2 id=\"contented-generate\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#contented-generate\"><span class=\"icon icon-link\"></span></a>contented generate</h2>\n<p>Generates the static preview website that can be published to GitHub Pages, Netlify, or Vercel! Minimally, you need to\nconfigure your <code>package.json</code> with these fields:</p>\n<p><strong><code>package.json</code>:</strong></p>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-color-text)\">{</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"scripts\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-keyword)\">\"generate\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"contented generate\"</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"devDependencies\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-keyword)\">\"@contentedjs/contented\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"latest\"</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">}</span></span></code></pre></div>\n<p><strong><code>contented.config.mjs</code>:</strong></p>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">/** </span><span style=\"color: var(--shiki-token-keyword)\">@type</span><span style=\"color: var(--shiki-token-comment)\"> </span><span style=\"color: var(--shiki-token-function)\">{import('@contentedjs/contented').ContentedConfig}</span><span style=\"color: var(--shiki-token-comment)\"> */</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-keyword)\">const</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">config</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  preview</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    url</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'https://contented.dev'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    name</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'Contented'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    github</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      url</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'https://github.com/levaintech/contented'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    pipelines</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> [</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'Doc'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        pattern</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'**/*.md'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'md'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    ]</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">};</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-keyword)\">export</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-keyword)\">default</span><span style=\"color: var(--shiki-color-text)\"> config;</span></span></code></pre></div>\n<p><strong>Netlify TOML:</strong></p>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-color-text)\">[build]</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">publish </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\".contented/.preview/out\"</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">command </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"npm run generate\"</span></span></code></pre></div>\n<p><strong>Vercel Settings:</strong></p>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-color-text)\">FRAMEWORK PRESET    = Next.js</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">BUILD COMMAND       = npm run generate</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">OUTPUT DIRECTORY    = .contented/.preview/out</span></span></code></pre></div>\n<h2 id=\"contented-build\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#contented-build\"><span class=\"icon icon-link\"></span></a>contented build</h2>\n<p>Generates the <code>./dist</code> output that can be published into the NPM registry for creating a derivative site. Minimally, you\nneed to configure your <code>package.json</code> with these fields:</p>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-color-text)\">{</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"name\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"@your-scope/your-npm-package\"</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"files\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> [</span><span style=\"color: var(--shiki-token-string-expression)\">\"dist\"</span><span style=\"color: var(--shiki-color-text)\">]</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"main\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"dist/index.js\"</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"scripts\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-keyword)\">\"build\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"contented build\"</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-keyword)\">\"devDependencies\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-keyword)\">\"@contentedjs/contented\"</span><span style=\"color: var(--shiki-token-punctuation)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">\"latest\"</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">}</span></span></code></pre></div>\n<p>Run <code>contented build</code> to compiled your markdown into <code>index.js</code> and <code>*.json</code>, output to the dir: <code>./dist</code>.\nYou can <code>npm publish</code> into any registry of your choice. You can easily <code>npm i @your-scope/your-npm-package</code> and use the\nprocessed content on any downstream site.</p>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-token-keyword)\">import</span><span style=\"color: var(--shiki-color-text)\"> { Index } </span><span style=\"color: var(--shiki-token-keyword)\">from</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'@your-scope/your-npm-package'</span><span style=\"color: var(--shiki-color-text)\">;</span></span></code></pre></div>\n<h2 id=\"contented-configuration\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#contented-configuration\"><span class=\"icon icon-link\"></span></a>Contented Configuration</h2>\n<p>The anatomy of a contented package, with just 2 configuration files, and you are good from the get-go! Contented\nautomatically ignore files in your <code>.gitignore</code> and <code>.contentedignore</code>.</p>\n<blockquote>\n<p>You should also add a <code>.gitignore</code> too with <code>echo \"dist\\n.contented\" > .gitignore</code>. (Okay fine! 3 files it is. Ughhhh)</p>\n</blockquote>\n<h3 id=\"contentedconfigmjs\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#contentedconfigmjs\"><span class=\"icon icon-link\"></span></a><code>contented.config.mjs</code></h3>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-token-keyword)\">export</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-keyword)\">interface</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-function)\">ContentedConfig</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  preview</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    url</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    name</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    github</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      url</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    };</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  };</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-comment)\">/**</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">     * The root directory of your contented markdown.</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">     */</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    rootDir</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-comment)\">/**</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">     * Customize the output path. Editing this will cause contented-preview to break.</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">     */</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    outDir</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    </span><span style=\"color: var(--shiki-token-comment)\">/**</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">     * Contented processing pipeline</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">     */</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    pipelines</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-function)\">Pipeline</span><span style=\"color: var(--shiki-color-text)\">[];</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  };</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-keyword)\">export</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-keyword)\">interface</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-function)\">Pipeline</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  pattern</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'md'</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  fields</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    [name</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">string</span><span style=\"color: var(--shiki-color-text)\">]</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-function)\">PipelineField</span><span style=\"color: var(--shiki-color-text)\">;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  };</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  </span><span style=\"color: var(--shiki-token-function)\">transform</span><span style=\"color: var(--shiki-token-keyword)\">?:</span><span style=\"color: var(--shiki-color-text)\"> (file</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-function)\">FileContent</span><span style=\"color: var(--shiki-color-text)\">) </span><span style=\"color: var(--shiki-token-keyword)\">=></span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-function)\">Promise</span><span style=\"color: var(--shiki-color-text)\">&#x3C;</span><span style=\"color: var(--shiki-token-function)\">FileContent</span><span style=\"color: var(--shiki-color-text)\">>;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">}</span></span></code></pre></div>\n<h4 id=\"example\"><a aria-hidden=\"true\" tabindex=\"-1\" href=\"#example\"><span class=\"icon icon-link\"></span></a>Example</h4>\n<div class=\"rehype-shiki\"><pre class=\"shiki css-variable\" style=\"background-color: var(--shiki-color-background)\"><code><span class=\"line\"><span style=\"color: var(--shiki-token-comment)\">/** </span><span style=\"color: var(--shiki-token-keyword)\">@type</span><span style=\"color: var(--shiki-token-comment)\"> </span><span style=\"color: var(--shiki-token-function)\">{import('@contentedjs/contented').ContentedConfig}</span><span style=\"color: var(--shiki-token-comment)\"> */</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-token-constant)\">module</span><span style=\"color: var(--shiki-color-text)\">.</span><span style=\"color: var(--shiki-token-constant)\">exports</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  preview</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    url</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'https://contented.dev'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    name</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'Contented'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    github</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      url</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'https://github.com/levaintech/contented'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    pipelines</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> [</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'Docs'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        pattern</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'docs/**/*.md'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'md'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        fields</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          title</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">            type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'string'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">            required</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">true</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">            </span><span style=\"color: var(--shiki-token-function)\">resolve</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> (s) </span><span style=\"color: var(--shiki-token-keyword)\">=></span><span style=\"color: var(--shiki-color-text)\"> s </span><span style=\"color: var(--shiki-token-keyword)\">??</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'Contented'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          description</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">            type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'string'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          tags</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">            type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'string[]'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        </span><span style=\"color: var(--shiki-token-function)\">transform</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> (file) </span><span style=\"color: var(--shiki-token-keyword)\">=></span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          </span><span style=\"color: var(--shiki-token-constant)\">file</span><span style=\"color: var(--shiki-color-text)\">.path </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">file</span><span style=\"color: var(--shiki-token-function)\">.</span><span style=\"color: var(--shiki-token-constant)\">path</span><span style=\"color: var(--shiki-token-function)\">.replaceAll</span><span style=\"color: var(--shiki-color-text)\">(</span><span style=\"color: var(--shiki-token-string-expression)\">/</span><span style=\"color: var(--shiki-token-keyword)\">^</span><span style=\"color: var(--shiki-token-string-expression)\">\\/docs\\/</span><span style=\"color: var(--shiki-token-keyword)\">?</span><span style=\"color: var(--shiki-token-string-expression)\">/</span><span style=\"color: var(--shiki-token-keyword)\">g</span><span style=\"color: var(--shiki-token-punctuation)\">,</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'/'</span><span style=\"color: var(--shiki-color-text)\">);</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          </span><span style=\"color: var(--shiki-token-constant)\">file</span><span style=\"color: var(--shiki-color-text)\">.sections </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">file</span><span style=\"color: var(--shiki-token-function)\">.</span><span style=\"color: var(--shiki-token-constant)\">sections</span><span style=\"color: var(--shiki-token-function)\">.slice</span><span style=\"color: var(--shiki-color-text)\">(</span><span style=\"color: var(--shiki-token-constant)\">1</span><span style=\"color: var(--shiki-color-text)\">);</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          </span><span style=\"color: var(--shiki-token-keyword)\">return</span><span style=\"color: var(--shiki-color-text)\"> file;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'Lorem'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        pattern</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'lorem/**/*.md'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        processor</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'md'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        fields</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          title</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">            type</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-string-expression)\">'string'</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        </span><span style=\"color: var(--shiki-token-function)\">transform</span><span style=\"color: var(--shiki-token-keyword)\">:</span><span style=\"color: var(--shiki-color-text)\"> (file) </span><span style=\"color: var(--shiki-token-keyword)\">=></span><span style=\"color: var(--shiki-color-text)\"> {</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          </span><span style=\"color: var(--shiki-token-constant)\">file</span><span style=\"color: var(--shiki-color-text)\">.sections </span><span style=\"color: var(--shiki-token-keyword)\">=</span><span style=\"color: var(--shiki-color-text)\"> </span><span style=\"color: var(--shiki-token-constant)\">file</span><span style=\"color: var(--shiki-token-function)\">.</span><span style=\"color: var(--shiki-token-constant)\">sections</span><span style=\"color: var(--shiki-token-function)\">.slice</span><span style=\"color: var(--shiki-color-text)\">(</span><span style=\"color: var(--shiki-token-constant)\">1</span><span style=\"color: var(--shiki-color-text)\">);</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">          </span><span style=\"color: var(--shiki-token-keyword)\">return</span><span style=\"color: var(--shiki-color-text)\"> file;</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">        }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">      }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">    ]</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">  }</span><span style=\"color: var(--shiki-token-punctuation)\">,</span></span>\n<span class=\"line\"><span style=\"color: var(--shiki-color-text)\">};</span></span></code></pre></div>"}