remark-github
!Buildbuild-badgebuild
!Coveragecoverage-badgecoverage
!Downloadsdownloads-badgedownloads
!Sizesize-badgesize
!Sponsorssponsors-badgecollective
!Backersbackers-badgecollective
!Chatchat-badgechatremark plugin to link references to commits, issues, and users, in the same way that GitHub does in comments, issues, PRs, and releases (see Writing on GitHubgithub-writing).
Contents
* [`defaultBuildUrl(values)`](#defaultbuildurlvalues)
* [`unified().use(remarkGithub[, options])`](#unifieduseremarkgithub-options)
* [`BuildUrl`](#buildurl)
* [`BuildUrlCommitValues`](#buildurlcommitvalues)
* [`BuildUrlCompareValues`](#buildurlcomparevalues)
* [`BuildUrlIssueValues`](#buildurlissuevalues)
* [`BuildUrlMentionValues`](#buildurlmentionvalues)
* [`BuildUrlValues`](#buildurlvalues)
* [`Options`](#options)
* [Example: `buildUrl`](#example-buildurl)
What is this?
This package is a unified (remark) plugin to link references to commits, issues, and users:@wooorm
-> [**@wooorm**](https://github.com/wooorm)
.When should I use this?
This project is useful if you want to emulate how markdown would work in GitHub comments, issues, PRs, or releases, but it’s actually displayed somewhere else (on a website, or in other places on GitHub which don’t link references, such as markdown in a repo or Gist). This plugin does not support other platforms such as GitLab or Bitbucket and their custom features.A different plugin,
remark-gfm
remark-gfm, adds support for GFM (GitHub
Flavored Markdown).
GFM is a set of extensions (autolink literals, footnotes, strikethrough, tables,
and tasklists) to markdown that are supported everywhere on GitHub.Another plugin,
remark-breaks
remark-breaks, turns soft line endings
(enters) into hard breaks (<br>
s).
GitHub does this in a few places (comments, issues, PRs, and releases), but it’s
not semantic according to HTML and not compliant to markdown.Yet another plugin,
remark-frontmatter
remark-frontmatter, adds support
for YAML frontmatter.
GitHub supports frontmatter for files in Gists and repos.Install
This package is ESM onlyesm. In Node.js (version 16+), install with npm:npm install remark-github
In Deno with
esm.sh
esmsh:import remarkGithub, {defaultBuildUrl} from 'https://esm.sh/remark-github@12'
In browsers with
esm.sh
esmsh:<script type="module">
import remarkGithub, {defaultBuildUrl} from 'https://esm.sh/remark-github@12?bundle'
</script>
Use
Say we have the following fileexample.md
:Some references:
* Commit: f8083175fe890cbf14f41d0a06e7aa35d4989587
* Commit (fork): foo@f8083175fe890cbf14f41d0a06e7aa35d4989587
* Commit (repo): remarkjs/remark@e1aa9f6c02de18b9459b7d269712bcb50183ce89
* Issue or PR (`#`): #1
* Issue or PR (`GH-`): GH-1
* Issue or PR (fork): foo#1
* Issue or PR (project): remarkjs/remark#1
* Mention: @wooorm
Some links:
* Commit: <https://github.com/remarkjs/remark/commit/e1aa9f6c02de18b9459b7d269712bcb50183ce89>
* Commit comment: <https://github.com/remarkjs/remark/commit/ac63bc3abacf14cf08ca5e2d8f1f8e88a7b9015c#commitcomment-16372693>
* Issue or PR: <https://github.com/remarkjs/remark/issues/182>
* Issue or PR comment: <https://github.com/remarkjs/remark-github/issues/3#issue-151160339>
* Mention: <https://github.com/ben-eb>
…and a module
example.js
:import {remark} from 'remark'
import remarkGfm from 'remark-gfm'
import remarkGithub from 'remark-github'
import {read} from 'to-vfile'
const file = await remark()
.use(remarkGfm)
.use(remarkGithub)
.process(await read('example.md'))
console.log(String(file))
…then running
node example.js
yields:Some references:
* Commit: [`f808317`](https://github.com/remarkjs/remark-github/commit/f8083175fe890cbf14f41d0a06e7aa35d4989587)
* Commit (fork): [foo@`f808317`](https://github.com/foo/remark-github/commit/f8083175fe890cbf14f41d0a06e7aa35d4989587)
* Commit (repo): [remarkjs/remark@`e1aa9f6`](https://github.com/remarkjs/remark/commit/e1aa9f6c02de18b9459b7d269712bcb50183ce89)
* Issue or PR (`#`): [#1](https://github.com/remarkjs/remark-github/issues/1)
* Issue or PR (`GH-`): [GH-1](https://github.com/remarkjs/remark-github/issues/1)
* Issue or PR (fork): [foo#1](https://github.com/foo/remark-github/issues/1)
* Issue or PR (project): [remarkjs/remark#1](https://github.com/remarkjs/remark/issues/1)
* Mention: [**@wooorm**](https://github.com/wooorm)
Some links:
* Commit: [remarkjs/remark@`e1aa9f6`](https://github.com/remarkjs/remark/commit/e1aa9f6c02de18b9459b7d269712bcb50183ce89)
* Commit comment: [remarkjs/remark@`ac63bc3` (comment)](https://github.com/remarkjs/remark/commit/ac63bc3abacf14cf08ca5e2d8f1f8e88a7b9015c#commitcomment-16372693)
* Issue or PR: [remarkjs/remark#182](https://github.com/remarkjs/remark/issues/182)
* Issue or PR comment: [#3 (comment)](https://github.com/remarkjs/remark-github/issues/3#issue-151160339)
* Mention: <https://github.com/ben-eb>
API
This package exports the identifierdefaultBuildUrl
api-default-build-url.
The default export is remarkGithub
api-remark-github.defaultBuildUrl(values)
Create a URL to GH.Parameters
values
(BuildUrlValues
api-build-url-values)
— info on the link to build
Returns
URL to use (string
).unified().use(remarkGithub[, options])
Link references to users, commits, and issues, in the same way that GitHub does
in comments, issues, PRs, and releases.Parameters
options
(Options
api-options, optional)
— configuration
Returns
Transform (Transformer
unified-transformer).BuildUrl
Create a URL (TypeScript type).Parameters
values
(BuildUrlValues
api-build-url-values)
— info on the link to build
Returns
URL to use orfalse
to not link (string | false
).BuildUrlCommitValues
Info for commit hash (TypeScript type).Fields
hash
(string
)
— commit hash value
project
(string
)
— project name
type
('commit'
)
— kind
user
(string
)
— owner of repo
BuildUrlCompareValues
Info for commit hash ranges (TypeScript type).Fields
base
(string
)
— SHA of the range start
compare
(string
)
— SHA of the range end
project
(string
)
— project name
type
('compare'
)
— kind
user
(string
)
— owner of repo
BuildUrlIssueValues
Info for issues (TypeScript type).Fields
no
(string
)
— issue number
project
(string
)
— project name
type
('issue'
)
— kind
user
(string
)
— owner of repo
BuildUrlMentionValues
Info for mentions (TypeScript type).Fields
type
('mention'
)
— kind
user
(string
)
— user name
BuildUrlValues
Info (TypeScript type).Type
type BuildUrlValues =
| BuildUrlCommitValues
| BuildUrlCompareValues
| BuildUrlIssueValues
| BuildUrlMentionValues
Options
Configuration (TypeScript type).Fields
buildUrl
(BuildUrl
api-build-url, default:
[`defaultBuildUrl`][api-default-build-url])
— change how things are linked
mentionStrong
(boolean
, default:true
)
— wrap mentions in `strong`;
this makes them render more like how GitHub styles them, but GH itself
uses CSS instead of `strong`
repository
(string
, default:repository
frompackag.json
in CWD in
Node, otherwise required)
— repository to link against;
should point to a GitHub repository (such as `'user/project'`)
Examples
Example: buildUrl
A buildUrl
can be passed to not link mentions.
For example, by changing example.js
from before like so:@@ -1,11 +1,15 @@
import {remark} from 'remark'
import remarkGfm from 'remark-gfm'
-import remarkGithub from 'remark-github'
+import remarkGithub, {defaultBuildUrl} from 'remark-github'
import {read} from 'to-vfile'
const file = await remark()
.use(remarkGfm)
- .use(remarkGithub)
+ .use(remarkGithub, {
+ buildUrl(values) {
+ return values.type === 'mention' ? false : defaultBuildUrl(values)
+ }
+ })
.process(await read('example.md'))
console.log(String(file))
To instead point mentions to a different place, change
example.js
like so:@@ -1,11 +1,17 @@
import {remark} from 'remark'
import remarkGfm from 'remark-gfm'
-import remarkGithub from 'remark-github'
+import remarkGithub, {defaultBuildUrl} from 'remark-github'
import {read} from 'to-vfile'
const file = await remark()
.use(remarkGfm)
- .use(remarkGithub)
+ .use(remarkGithub, {
+ buildUrl(values) {
+ return values.type === 'mention'
+ ? `https://yourwebsite.com/${values.user}/`
+ : defaultBuildUrl(values)
+ }
+ })
.process(await read('example.md'))
console.log(String(file))
Syntax
The following references are supported:- Commits:
`1f2a4fb` →
[`1f2a4fb`][github-sha]
- Commits across forks:
`remarkjs@1f2a4fb` →
[remarkjs@`1f2a4fb`][github-sha]
- Commits across projects:
`remarkjs/remark-github@1f2a4fb` →
[remarkjs/remark-github@`1f2a4fb`][github-sha]
- Compare ranges:
`e2acebc...2aa9311` →
[`e2acebc...2aa9311`][github-sha-range]
- Compare ranges across forks:
`remarkjs@e2acebc...2aa9311` →
[remarkjs/remark-github@`e2acebc...2aa9311`][github-sha-range]
- Compare ranges across projects:
`remarkjs/remark-github@e2acebc...2aa9311` →
[remarkjs/remark-github@`e2acebc...2aa9311`][github-sha-range]
- Prefix issues:
`GH-1` →
[GH-1][github-issue]
- Hash issues:
`#1` →
[#1][github-issue]
- Issues across forks:
`remarkjs#1` →
[remarkjs#1][github-issue]
- Issues across projects:
`remarkjs/remark-github#1` →
[remarkjs/remark-github#1][github-issue]
- At-mentions:
`@wooorm` →
[**@wooorm**][github-mention]
Autolinks to these references are also transformed:
https://github.com/wooorm
-> [**@wooorm**](https://github.com/wooorm)
Types
This package is fully typed with TypeScript. It exports the additional typesBuildUrl
api-build-url,
BuildUrlCommitValues
api-build-url-commit-values,
BuildUrlCompareValues
api-build-url-compare-values,
BuildUrlIssueValues
api-build-url-issue-values,
BuildUrlMentionValues
api-build-url-mention-values,
BuildUrlValues
api-build-url-values,
DefaultBuildUrl
api-default-build-url,
Options
api-options.Compatibility
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,
remark-github@^12
,
compatible with Node.js 16.This plugin works with
unified
version 6+ and remark
version 7+.Security
Use ofremark-github
does not involve rehype (hast).
It does inject links based on user content, but those links only go to GitHub.
There are no openings for cross-site scripting (XSS)wiki-xss attacks.Related
— support GFM (autolink literals, footnotes, strikethrough, tables,
tasklists)
— support breaks without needing spaces or escapes (enters to `<br>`)
— support frontmatter (YAML, TOML, and more)
Contribute
Seecontributing.md
contributing in remarkjs/.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.