unified plugin to infer file metadata from Git of a document.
This package is a unified plugin to infer when content was first published, last modified, and who contributed to it, from Git.
unified is a project that transforms content with abstract syntax trees (ASTs). vfile is the virtual file interface used in unified. This is a unified plugin that extracts metadata from Git and exposes it on the vfile.
This plugin is particularly useful in combination with rehype-meta
. When both are used together, output such as the following is generated:
<meta name="copyright" content="© 2019 Jane"> <meta name="author" content="Jane"> <!-- … --> <meta property="article:published_time" content="2019-12-02T10:00:00.000Z"> <meta property="article:modified_time" content="2019-12-03T19:13:00.000Z">
The downside is that Git might be sparesely cloned when building a website, meaning that only the last commit is available, which means that this plugin cannot find all data.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install unified-infer-git-meta
In Deno with esm.sh
:
import unifiedInferGitMeta from 'https://esm.sh/unified-infer-git-meta@2'
In browsers with esm.sh
:
<script type="module"> import unifiedInferGitMeta from 'https://esm.sh/unified-infer-git-meta@2?bundle' </script>
Say our module example.js
looks as follows:
import rehypeDocument from 'rehype-document' import rehypeFormat from 'rehype-format' import rehypeMeta from 'rehype-meta' import rehypeStringify from 'rehype-stringify' import remarkParse from 'remark-parse' import remarkRehype from 'remark-rehype' import {read} from 'to-vfile' import {unified} from 'unified' import unifiedInferGitMeta from 'unified-infer-git-meta' const file = await unified() .use(remarkParse) .use(unifiedInferGitMeta) .use(remarkRehype) .use(rehypeDocument) .use(rehypeMeta, { // Published and modified are only added if these two are also defined: og: true, type: 'article' }) .use(rehypeFormat) .use(rehypeStringify) .process(await read('readme.md')) console.log(file.data) console.log(String(file))
…now running node example.js
yields:
{ meta: { author: 'Titus Wormer', modified: new Date('2023-08-24T10:13:50.000Z'), published: new Date('2021-09-09T11:22:32.000Z') } }
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>readme</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="author" content="Titus Wormer"> <meta property="og:type" content="article"> <meta property="article:published_time" content="2021-09-09T11:22:32.000Z"> <meta property="article:modified_time" content="2023-08-24T10:13:50.000Z"> </head> …
This package exports no identifiers. The default export is unifiedInferGitMeta
.
unified().use(unifiedInferGitMeta, options?)
Plugin to infer some meta
from Git.
This plugin sets file.data.meta.published
to the date a file was first committed, file.data.meta.modified
to the date a file was last committed, and file.data.meta.author
to an abbreviated list of top authors of the file.
options
(Options
, optional) — configurationTransform (Transformer
).
Format function (TypeScript type).
authors
(Iterable<string>
) — list of authorsFormatted authors (string
).
Configuration (TypeScript type).
authorRest
(string
, default: 'others'
) — text to use to label more authors when abbreviatingformat
(Format
, default: format
of Intl.ListFormat(locales)
) — alternative format function to use; if the authors had to be abbreviated, the last author is instead replaced by authorRest
; set limit: -1
to receive all author nameslimit
(number
, default: 3
) — max number of authors to include; set to -1
to not limit authorslocales
(Array<string>
or string
, default: 'en'
) — locale(s) to use to join authors and sort their namesThis package is fully typed with TypeScript. It exports the additional types Format
and Options
.
It also registers the file.data.meta
fields with vfile
. If you’re working with the file, make sure to import this plugin somewhere in your types, as that registers the new fields on the file.
/** * @typedef {import('unified-infer-git-meta')} */ import {VFile} from 'vfile' const file = new VFile() console.log(file.data.meta.published) //=> TS now knows that this is a `Date?`.
Projects maintained by the unified collective are compatible with maintained versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of Node. This means we try to keep the current release line, unified-infer-git-meta@^2
, compatible with Node.js 16.
rehype-meta
— add metadata to the head of a documentrehype-infer-title-meta
— infer file metadata from the title of a documentrehype-infer-description-meta
— infer file metadata from the description of a documentrehype-infer-reading-time-meta
— infer file metadata from the reading time of a documentSee contributing.md
in unifiedjs/.github
for ways to get started. See support.md
for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4