unified-infer-git-meta
!Buildbuild-badgebuild
!Coveragecoverage-badgecoverage
!Downloadsdownloads-badgedownloads
!Sponsorssponsors-badgecollective
!Backersbackers-badgecollective
!Chatchat-badgechatunified plugin to infer file metadata from Git of a document.
Contents
* [`unified().use(unifiedInferGitMeta, options?)`](#unifieduseunifiedinfergitmeta-options)
What is this?
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.
When should I use this?
This plugin is particularly useful in combination withrehype-meta
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">
Install
This package is ESM onlyesm. In Node.js (version 12.20+, 14.14+, 16.0+, or 18.0+), install with npm:npm install unified-infer-git-meta
In Deno with
esm.sh
esmsh:import unifiedInferGitMeta from 'https://esm.sh/unified-infer-git-meta@1'
In browsers with
esm.sh
esmsh:<script type="module">
import unifiedInferGitMeta from 'https://esm.sh/unified-infer-git-meta@1?bundle'
</script>
Use
Say our moduleexample.js
looks as follows:import {read} from 'to-vfile'
import {unified} from 'unified'
import remarkParse from 'remark-parse'
import unifiedInferGitMeta from 'unified-infer-git-meta'
import remarkRehype from 'remark-rehype'
import rehypeDocument from 'rehype-document'
import rehypeMeta from 'rehype-meta'
import rehypeFormat from 'rehype-format'
import rehypeStringify from 'rehype-stringify'
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: {
published: new Date('2021-09-09T11:12:34.000Z'),
modified: new Date('2021-09-09T11:23:45.000Z'),
author: 'Titus Wormer'
}
}
<!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:12:34.000Z">
<meta property="article:modified_time" content="2021-09-09T11:23:45.000Z">
</head>
…
API
This package exports no identifiers. The default export isunifiedInferGitMeta
.unified().use(unifiedInferGitMeta, options?)
Infer some metadata from a document tracked with Git.
Infer some meta
from Git.This plugin sets
file.data.meta.published
meta-published to the date a
file was first committed, file.data.meta.modified
meta-modified to the
date a file was last committed, and file.data.meta.author
meta-author to
an abbreviated list of top authors of the file.options
Configuration (optional).options.locales
Locale(s) to use to join authors and sort their names (string
or
Array<string>
, default: 'en'
).options.limit
Maximum number of authors to include (number
, default: 3
).
Set to -1
to not limit authors.options.authorRest
Text to use to label more authors when abbreviating (string
, default:
'others'
).options.format
Alternative format function to use ((authors: Array<string>) => string
).
Is given a list of abbreviated author names.
If the list of authors had to be abbreviated, the last author is instead
replaced by authorRest
.
Set limit: -1
to receive all author names.Types
This package is fully typed with TypeScript. The additional typesFormat
and Options
are exported.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?`.
Compatibility
Projects maintained by the unified collective are compatible with all maintained versions of Node.js. As of now, that is Node.js 12.20+, 14.14+, 16.0+, and 18.0+. Our projects sometimes work with older versions, but this is not guaranteed.Related
— add metadata to the head of a document
— infer file metadata from the title of a document
— infer file metadata from the description of a document
— infer file metadata from the reading time of a document
Contribute
Seecontributing.md
contributing in unifiedjs/.github
health for ways
to get started.
See support.md
support for ways to get help.This project has a code of conductcoc. By interacting with this repository, organization, or community you agree to abide by its terms.