1
0
mirror of synced 2026-02-03 09:01:57 -05:00

Merge pull request #26656 from github/repo-sync

Repo sync
This commit is contained in:
docs-bot
2023-07-12 14:29:05 -07:00
committed by GitHub
12 changed files with 629 additions and 324 deletions

503
package-lock.json generated
View File

@@ -2043,6 +2043,18 @@
"node": "*"
}
},
"node_modules/@eslint/eslintrc/node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
"dev": true,
@@ -7166,8 +7178,9 @@
}
},
"node_modules/decode-named-character-reference": {
"version": "1.0.1",
"license": "MIT",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
"integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
"dependencies": {
"character-entities": "^2.0.0"
},
@@ -8463,6 +8476,18 @@
"node": ">=8"
}
},
"node_modules/eslint/node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/type-fest": {
"version": "0.20.2",
"dev": true,
@@ -11362,6 +11387,18 @@
"node": ">=8"
}
},
"node_modules/jest-config/node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/jest-diff": {
"version": "29.5.0",
"dev": true,
@@ -13642,64 +13679,6 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
"integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w=="
},
"node_modules/mdast-util-from-markdown/node_modules/micromark-util-character": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
"integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
}
},
"node_modules/mdast-util-from-markdown/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
"integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/mdast-util-from-markdown/node_modules/micromark-util-decode-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
"integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^2.0.0",
"micromark-util-decode-numeric-character-reference": "^2.0.0",
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/mdast-util-from-markdown/node_modules/micromark-util-normalize-identifier": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
@@ -13847,6 +13826,45 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
"integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-decode-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
"integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0",
"micromark-util-decode-numeric-character-reference": "^1.0.0",
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm-footnote/node_modules/unist-util-visit": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
@@ -13930,6 +13948,45 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
"integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-decode-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
"integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0",
"micromark-util-decode-numeric-character-reference": "^1.0.0",
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-visit": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
@@ -13967,7 +14024,7 @@
"devlop": "^1.0.0",
"markdown-table": "^3.0.0",
"mdast-util-from-markdown": "^2.0.0",
"mdast-util-to-markdown": "2.0.0"
"mdast-util-to-markdown": "^2.0.0"
},
"funding": {
"type": "opencollective",
@@ -13983,12 +14040,6 @@
"@types/unist": "*"
}
},
"node_modules/mdast-util-gfm-table/node_modules/@types/unist": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
"integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==",
"dev": true
},
"node_modules/mdast-util-gfm-task-list-item": {
"version": "1.0.0",
"license": "MIT",
@@ -14045,6 +14096,45 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
"integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-decode-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
"integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0",
"micromark-util-decode-numeric-character-reference": "^1.0.0",
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-visit": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
@@ -14188,6 +14278,45 @@
"uvu": "^0.5.0"
}
},
"node_modules/mdast-util-gfm/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
"integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm/node_modules/micromark-util-decode-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
"integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0",
"micromark-util-decode-numeric-character-reference": "^1.0.0",
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/mdast-util-gfm/node_modules/unist-util-visit": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
@@ -14331,94 +14460,6 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
"integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w=="
},
"node_modules/mdast-util-to-markdown/node_modules/micromark-util-character": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
"integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
}
},
"node_modules/mdast-util-to-markdown/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
"integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/mdast-util-to-markdown/node_modules/micromark-util-decode-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
"integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^2.0.0",
"micromark-util-decode-numeric-character-reference": "^2.0.0",
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/mdast-util-to-markdown/node_modules/micromark-util-symbol": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
"integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
]
},
"node_modules/mdast-util-to-markdown/node_modules/micromark-util-types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
"integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
]
},
"node_modules/mdast-util-to-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
@@ -14909,7 +14950,9 @@
}
},
"node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.0.0",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
"integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -14920,13 +14963,29 @@
"url": "https://opencollective.com/unified"
}
],
"license": "MIT",
"dependencies": {
"micromark-util-symbol": "^1.0.0"
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
"integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
]
},
"node_modules/micromark-util-decode-string": {
"version": "1.0.1",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
"integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
"funding": [
{
"type": "GitHub Sponsors",
@@ -14937,14 +14996,62 @@
"url": "https://opencollective.com/unified"
}
],
"license": "MIT",
"dependencies": {
"micromark-util-character": "^1.0.0",
"micromark-util-decode-numeric-character-reference": "^1.0.0",
"micromark-util-symbol": "^1.0.0",
"parse-entities": "^3.0.0"
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^2.0.0",
"micromark-util-decode-numeric-character-reference": "^2.0.0",
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-decode-string/node_modules/micromark-util-character": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
"integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
"integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
]
},
"node_modules/micromark-util-decode-string/node_modules/micromark-util-types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
"integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
]
},
"node_modules/micromark-util-encode": {
"version": "1.0.0",
"funding": [
@@ -15286,24 +15393,6 @@
"micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
"integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark/node_modules/micromark-util-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
@@ -17585,6 +17674,45 @@
"uvu": "^0.5.0"
}
},
"node_modules/remark-parse/node_modules/micromark-util-decode-numeric-character-reference": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
"integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/remark-parse/node_modules/micromark-util-decode-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
"integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
"funding": [
{
"type": "GitHub Sponsors",
"url": "https://github.com/sponsors/unifiedjs"
},
{
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
"micromark-util-character": "^1.0.0",
"micromark-util-decode-numeric-character-reference": "^1.0.0",
"micromark-util-symbol": "^1.0.0"
}
},
"node_modules/remark-rehype": {
"version": "10.1.0",
"license": "MIT",
@@ -18613,17 +18741,6 @@
"version": "1.0.0",
"license": "MIT"
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/strnum": {
"version": "1.0.5",
"license": "MIT"

View File

@@ -4,37 +4,38 @@
We are using the [markdownlint](https://github.com/DavidAnson/markdownlint) framework to implement custom and existing markdown linter rules to check the markdown content in our `content` and `data` directory files. Here is the list of our current rules implemented in our [markdownlint.js script](./scripts/markdownlint.js):
| **Rule ID** | **Description** | **Severity** |
Each rule listed below is configured in a src/content-linter/style file, which is where the rule's severity is defined. The goal is to get to a point where all rules have a severity of `error` and we can set them to `warning` until the occurrences are handled in the content.
| **Rule ID** | **Description** |
|---|---|---|
| [MD001](https://github.com/DavidAnson/markdownlint/blob/main/doc/md001.md) | Header levels can only increments by one level at a time. | error |
| [MD002](https://github.com/DavidAnson/markdownlint/blob/main/doc/md002.md) | Ensure that headings start with an H2 heading. | error |
| [MD004](https://github.com/DavidAnson/markdownlint/blob/main/doc/md004.md) | Unordered list style must be a dash. | error |
| [MD009](https://github.com/DavidAnson/markdownlint/blob/main/doc/md009.md) | No unnecessary whitespace from the end of the line. | warning |
| [MD012](https://github.com/DavidAnson/markdownlint/blob/main/doc/md012.md) | No unnecessary blank lines. | warning |
| [MD014](https://github.com/DavidAnson/markdownlint/blob/main/doc/md014.md) | Dollar signs should not be used before commands without showing output. | error |
| [MD018](https://github.com/DavidAnson/markdownlint/blob/main/doc/md018.md) | Must have one space after a hash style heading. | error |
| [MD019](https://github.com/DavidAnson/markdownlint/blob/main/doc/md019.md) | Must not have spaces after a hash style heading. | error |
| [MD022](https://github.com/DavidAnson/markdownlint/blob/main/doc/md022.md) | Headings must be surrounded by a blank line. | warning |
| [MD023](https://github.com/DavidAnson/markdownlint/blob/main/doc/md023.md) | Headings must start at the beginning of the line. | error |
| [MD024](https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md) | Disallow headings with the same content. | error |
| [MD027](https://github.com/DavidAnson/markdownlint/blob/main/doc/md027.md) | Catches multiple spaces after blockquote symbol. | warning |
| [MD029](https://github.com/DavidAnson/markdownlint/blob/main/doc/md029.md) | All ordered lists should be prefixed with `1.`. | error |
| [MD030](https://github.com/DavidAnson/markdownlint/blob/main/doc/md030.md) | Only allow one space after list markers. | error |
| [MD031](https://github.com/DavidAnson/markdownlint/blob/main/doc/md031.md) | Fenced code blocks must be surrounded by blank lines. | warning |
| [MD037](https://github.com/DavidAnson/markdownlint/blob/main/doc/md037.md) | Remove extra spacing inside emphasis markers. | warning |
| [MD039](https://github.com/DavidAnson/markdownlint/blob/main/doc/md039.md) | Remove spacing around image text. | warning |
| [MD040](https://github.com/DavidAnson/markdownlint/blob/main/doc/md040.md) | Code fences must have a language specified. | warning |
| [MD042](https://github.com/DavidAnson/markdownlint/blob/main/doc/md042.md) | Do not allow empty links. | error |
| [MD047](https://github.com/DavidAnson/markdownlint/blob/main/doc/md047.md) | All files should end with a new line character. | warning |
| [MD049](https://github.com/DavidAnson/markdownlint/blob/main/doc/md049.md) | All emphasis styling should use underscores. | warning |
| [MD050](https://github.com/DavidAnson/markdownlint/blob/main/doc/md050.md) | All strong styling should use asterisks. | warning |
| [MD011](https://github.com/DavidAnson/markdownlint/blob/main/doc/md011.md) | Make sure that link syntax is not reversed. | error |
| [MD111](./linting-rules/image-alt-text-length.js) | Images alternate text should be between 40-150 characters. | warning |
| [MD112](./linting-rules/image-alt-text-end-punctuation.js) | Images alternate text should end with a punctuation. | error |
| [MD113](./linting-rules/internal-links-slash.js) | Internal links must start with a `/`. | error |
| [MD114](./linting-rules/internal-links-lang.js) | Internal links must not have a hardcoded language code. | error |
| [MD115](./linting-rules/image-file-kebab.js) | Image file names should be lowercase kebab case. | error |
| [MD117](./linting-rules/code-fence-line-length.js) | Code fence content should be 60 lines or less in length. | warning |
| [MD001](https://github.com/DavidAnson/markdownlint/blob/main/doc/md001.md) | Header levels can only increments by one level at a time. |
| [MD002](https://github.com/DavidAnson/markdownlint/blob/main/doc/md002.md) | Ensure that headings start with an H2 heading. |
| [MD004](https://github.com/DavidAnson/markdownlint/blob/main/doc/md004.md) | Unordered list style must be a dash. |
| [MD009](https://github.com/DavidAnson/markdownlint/blob/main/doc/md009.md) | No unnecessary whitespace from the end of the line. |
| [MD012](https://github.com/DavidAnson/markdownlint/blob/main/doc/md012.md) | No unnecessary blank lines. |
| [MD014](https://github.com/DavidAnson/markdownlint/blob/main/doc/md014.md) | Dollar signs should not be used before commands without showing output. |
| [MD018](https://github.com/DavidAnson/markdownlint/blob/main/doc/md018.md) | Must have one space after a hash style heading. |
| [MD019](https://github.com/DavidAnson/markdownlint/blob/main/doc/md019.md) | Must not have spaces after a hash style heading. |
| [MD022](https://github.com/DavidAnson/markdownlint/blob/main/doc/md022.md) | Headings must be surrounded by a blank line. |
| [MD023](https://github.com/DavidAnson/markdownlint/blob/main/doc/md023.md) | Headings must start at the beginning of the line. |
| [MD027](https://github.com/DavidAnson/markdownlint/blob/main/doc/md027.md) | Catches multiple spaces after blockquote symbol. |
| [MD029](https://github.com/DavidAnson/markdownlint/blob/main/doc/md029.md) | All ordered lists should be prefixed with `1.`. |
| [MD030](https://github.com/DavidAnson/markdownlint/blob/main/doc/md030.md) | Only allow one space after list markers. |
| [MD031](https://github.com/DavidAnson/markdownlint/blob/main/doc/md031.md) | Fenced code blocks must be surrounded by blank lines. |
| [MD037](https://github.com/DavidAnson/markdownlint/blob/main/doc/md037.md) | Remove extra spacing inside emphasis markers. |
| [MD039](https://github.com/DavidAnson/markdownlint/blob/main/doc/md039.md) | Remove spacing around image text. |
| [MD040](https://github.com/DavidAnson/markdownlint/blob/main/doc/md040.md) | Code fences must have a language specified. |
| [MD042](https://github.com/DavidAnson/markdownlint/blob/main/doc/md042.md) | Do not allow empty links. |
| [MD047](https://github.com/DavidAnson/markdownlint/blob/main/doc/md047.md) | All files should end with a new line character. |
| [MD049](https://github.com/DavidAnson/markdownlint/blob/main/doc/md049.md) | All emphasis styling should use underscores. |
| [MD050](https://github.com/DavidAnson/markdownlint/blob/main/doc/md050.md) | All strong styling should use asterisks. |
| [MD011](https://github.com/DavidAnson/markdownlint/blob/main/doc/md011.md) | Make sure that link syntax is not reversed. |
| [GHD001](./linting-rules/code-fence-line-length.js) | Code fence content should be 60 lines or less in length. |
| [GHD002](./linting-rules/image-alt-text-end-punctuation.js) | Images alternate text should end with a punctuation. |
| [GHD003](./linting-rules/image-alt-text-length.js) | Images alternate text should be between 40-150 characters. |
| [GHD004](./linting-rules/internal-links-slash.js) | Internal links must start with a `/`. |
| [GHD005](./linting-rules/internal-links-lang.js) | Internal links must not have a hardcoded language code. |
| [GHD006](./linting-rules/image-file-kebab.js) | Image file names should be lowercase kebab case. |
## Linting Tests

View File

@@ -3,11 +3,11 @@ import { addError } from 'markdownlint-rule-helpers'
import { getCodeFenceTokens, getCodeFenceLines } from '../markdownlint-helpers.js'
export const codeFenceLineLength = {
names: ['MD117', 'code-fence-line-length'],
names: ['GHD001', 'code-fence-line-length'],
description: 'Code fence lines should not exceed a maximum length',
tags: ['code'],
severity: 'warning',
function: function MD117(params, onError) {
function: function GHD001(params, onError) {
const MAX_LINE_LENGTH = String(params.config.maxLength || 60)
const codeFenceTokens = getCodeFenceTokens(params)
codeFenceTokens.forEach((token) => {
@@ -24,7 +24,6 @@ export const codeFenceLineLength = {
`Code fence line exceeds ${MAX_LINE_LENGTH} characters.`,
undefined, // N/A
undefined, // N/A
undefined, // N/A
)
}
})

View File

@@ -1,11 +1,11 @@
import { addError, forEachInlineChild } from 'markdownlint-rule-helpers'
export const imageAltTextEndPunctuation = {
names: ['MD112', 'image-alt-text-end-punctuation'],
names: ['GHD002', 'image-alt-text-end-punctuation'],
description: 'Images alternate text should end with a punctuation.',
severity: 'error',
tags: ['accessibility', 'images'],
function: function MD112(params, onError) {
function: function GHD003(params, onError) {
forEachInlineChild(params, 'image', function forToken(token) {
const quoteRegex = /[.?!]['"]$/
const endRegex = /[.?!]$/

View File

@@ -2,11 +2,11 @@ import { addError, forEachInlineChild } from 'markdownlint-rule-helpers'
import { liquid } from '#src/content-render/index.js'
export const incorrectAltTextLength = {
names: ['MD111', 'incorrect-alt-text-length'],
names: ['GHD003', 'incorrect-alt-text-length'],
severity: 'warning',
description: 'Images alternate text should be between 40-150 characters',
tags: ['accessibility', 'images'],
function: function MD111(params, onError) {
function: function GHD004(params, onError) {
forEachInlineChild(params, 'image', async function forToken(token) {
let renderedString = token.content
if (token.content.includes('{%') || token.content.includes('{{')) {

View File

@@ -1,11 +1,11 @@
import { addError, forEachInlineChild } from 'markdownlint-rule-helpers'
export const imageFileKebab = {
names: ['MD115', 'image-file-kebab'],
names: ['GHD004', 'image-file-kebab'],
description: 'Image file names should always be lowercase kebab case',
severity: 'PLACEHOLDER',
severity: 'warning',
tags: ['accessibility', 'images'],
function: function MD115(params, onError) {
function: function GHD005(params, onError) {
forEachInlineChild(params, 'image', async function forToken(token) {
const imageFileName = token.attrs[0][1].split('/').pop().split('.')[0]
const nonKebabRegex = /([A-Z]|_)/

View File

@@ -0,0 +1,17 @@
import { codeFenceLineLength } from './code-fence-line-length.js'
import { imageAltTextEndPunctuation } from './image-alt-text-end-punctuation.js'
import { imageFileKebab } from './image-file-kebab.js'
import { incorrectAltTextLength } from './image-alt-text-length.js'
import { internalLinksLang } from './internal-links-lang.js'
import { internalLinksSlash } from './internal-links-slash.js'
export const gitHubDocsMarkdownlint = {
rules: [
codeFenceLineLength,
imageAltTextEndPunctuation,
imageFileKebab,
incorrectAltTextLength,
internalLinksLang,
internalLinksSlash,
],
}

View File

@@ -3,11 +3,11 @@ import { addError, filterTokens } from 'markdownlint-rule-helpers'
import { languageKeys } from '../../../../lib/languages.js'
export const internalLinksLang = {
names: ['MD114', 'internal-links-lang'],
names: ['GHD005', 'internal-links-lang'],
description: 'Internal links must not have a hardcoded language code',
severity: 'error',
tags: ['links', 'url'],
function: function MD114(params, onError) {
function: function GHD006(params, onError) {
filterTokens(params, 'inline', (token) => {
let linkHref = ''
let internalLinkHasLang = false

View File

@@ -1,11 +1,11 @@
import { addError, filterTokens } from 'markdownlint-rule-helpers'
export const internalLinksSlash = {
names: ['MD113', 'internal-links-slash'],
names: ['GHD006', 'internal-links-slash'],
description: 'Internal links must start with a /',
severity: 'error',
tags: ['links', 'url'],
function: function MD113(params, onError) {
function: function GHD007(params, onError) {
filterTokens(params, 'inline', (token) => {
let linkHref = ''
let internalLinkHasSlash = true

View File

@@ -1,121 +1,140 @@
#!/usr/bin/env node
import { program } from 'commander'
import { program, Option } from 'commander'
import markdownlint from 'markdownlint'
import { applyFixes } from 'markdownlint-rule-helpers'
import { readFile, writeFile } from 'fs/promises'
import walkFiles from '../../../script/helpers/walk-files.js'
import { incorrectAltTextLength } from '../lib/linting-rules/image-alt-text-length.js'
import { internalLinksLang } from '../lib/linting-rules/internal-links-lang.js'
import { internalLinksSlash } from '../lib/linting-rules/internal-links-slash.js'
import { imageAltTextEndPunctuation } from '../lib/linting-rules/image-alt-text-end-punctuation.js'
import { imageFileKebab } from '../lib/linting-rules/image-file-kebab.js'
import { gitHubDocsMarkdownlint } from '../lib/linting-rules/index.js'
import { baseConfig } from '../style/base.js'
import { githubDocsConfig } from '../style/github-docs.js'
program
.description('Run markdownlint.')
.option('-p, --path <path>', 'Specify filepaths to include.')
.option('-f, --fix', 'Fix linting errors.')
.description('Run GitHub Docs Markdownlint rules.')
.addOption(
new Option('-p, --paths [paths...]', 'Specify filepaths to include.').conflicts('files'),
)
.addOption(new Option('-f, --files [files...]', 'A list of files to lint.').conflicts('paths'))
.addOption(
new Option('-e, --error', 'Only report rules that have the severity of error.').conflicts(
'rules',
),
)
.addOption(
new Option(
'-r, --rules [rules...]',
'Specify rules to run. For example code-fence-line-length.',
).conflicts('error'),
)
.option('--fix', 'Fix linting errors.')
.option('--summary-by-rule', 'Summarize the number of errors for each rule.')
.parse(process.argv)
const { path, fix } = program.opts()
const { files, fix, paths, error, rules, summaryByRule } = program.opts()
const DEFAULT_LINT_DIRS = ['content', 'data']
main()
async function main() {
const start = Date.now()
const config = {
default: false,
MD001: true,
MD002: { level: 2 },
MD004: { style: 'dash' },
MD009: true,
MD011: true,
MD012: true,
MD018: true,
MD019: true,
MD014: true,
MD022: true,
MD023: true,
MD027: true,
MD029: { style: 'one' },
MD030: true,
MD031: true,
MD037: true,
MD039: true,
MD040: {
allowed_languages: [
'bash',
'csharp',
'geojson',
'go',
'golang',
'graphql',
'groovy',
'html',
'http',
'java',
'javascript',
'json',
'markdown',
'math',
'md',
'mermaid',
'powershell',
'python',
'ruby',
'scss',
'shell',
'sh',
'stl',
'tasklist',
'text',
'topojson',
'xml',
'yaml',
'yml',
],
},
MD047: true,
MD049: { style: 'underscore' },
MD050: { style: 'asterisk' },
MD111: true,
MD112: true,
MD113: true,
MD114: true,
MD115: true,
MD117: true,
const config = {}
const allConfig = { ...baseConfig, ...githubDocsConfig }
if (error) {
const errorConfig = Object.keys(baseConfig).reduce(
(acc, key) => {
if (allConfig[key].severity === 'error') acc[key] = allConfig[key]
return acc
},
{ default: false },
)
Object.assign(config, errorConfig)
} else if (rules) {
config.default = false
for (const rule of rules) {
config[rule] = allConfig[rule]
}
} else {
Object.assign(config, allConfig)
}
const files = walkFiles(path, ['.md'], { includeBasePath: true })
// If paths or files have not been specified, lint all files
const filesToLint = files || getFilesToLint(paths || DEFAULT_LINT_DIRS)
const options = {
files,
customRules: [
incorrectAltTextLength,
imageAltTextEndPunctuation,
internalLinksLang,
internalLinksSlash,
imageFileKebab,
],
files: filesToLint,
config,
customRules: gitHubDocsMarkdownlint.rules,
}
const result = await markdownlint.promises.markdownlint(options)
if (fix) {
for (const file of files) {
for (const file of filesToLint) {
const content = await readFile(file, 'utf8')
const applied = applyFixes(content, result[file])
await writeFile(file, applied)
}
}
Object.keys(result).forEach((key) => {
if (result[key].length > 0) {
console.log(key, result[key])
}
})
// Used for a temporary way to allow us to see how many errors currently
// exist for each rule in the content directory.
if (summaryByRule) {
reportSummaryByRule(result, config)
} else {
reportResults(result)
}
const end = Date.now()
console.log(`markdownlint finished in ${(end - start) / 1000} s`)
const errorFileCount = getErrorCountByFile(result)
if (errorFileCount > 0) {
console.log(`Found ${errorFileCount} file(s) with error(s).`)
process.exit(1)
}
}
function getFilesToLint(paths) {
const fileList = []
for (const path of paths) {
fileList.push(...walkFiles(path, ['.md'], { includeBasePath: true }))
}
return fileList
}
function reportSummaryByRule(result, config) {
const ruleCount = {}
// populate the list of rules with 0 occurrences
for (const rule of Object.keys(config)) {
ruleCount[rule] = 0
}
// the default property is not acutally a rule
delete ruleCount.default
Object.keys(result).forEach((key) => {
if (result[key].length > 0) {
for (const flaw of result[key]) {
const ruleName = flaw.ruleNames[1]
const count = ruleCount[ruleName]
ruleCount[ruleName] = count + 1
}
}
})
console.log(JSON.stringify(ruleCount, null, 2))
}
function reportResults(results) {
Object.entries(results)
// each result key always has an array value, but it may be empty
.filter(([key, result]) => result.length)
.forEach(([key, result]) => {
console.log(key, result)
})
}
function getErrorCountByFile(result) {
return Object.values(result).filter((value) => value.length).length
}

View File

@@ -0,0 +1,126 @@
export const baseConfig = {
// Don't run all rules by default. This must be done first to
// enable a specific set of rules.
default: false,
'heading-increment': {
// MD001
severity: 'warning',
},
'first-heading-h1': {
// MD002
severity: 'warning',
level: 2,
noPartialFileChecks: true,
},
'ul-style': {
// MD004
severity: 'error',
style: 'dash',
},
'no-trailing-spaces': {
// MD009
severity: 'warning',
},
'no-reversed-links': {
// MD011
severity: 'error',
},
'no-multiple-blanks': {
// MD012
severity: 'error',
},
'commands-show-output': {
// MD014
severity: 'error',
},
'no-missing-space-atx': {
// MD018
severity: 'error',
},
'no-multiple-space-atx': {
// MD019
severity: 'error',
},
'blanks-around-headings': {
// MD022
severity: 'error',
},
'heading-start-left': {
// MD023
severity: 'error',
},
'no-multiple-space-blockquote': {
// MD027
severity: 'error',
},
'ol-prefix': {
// MD029
severity: 'error',
style: 'one',
},
'list-marker-space': {
// MD030
severity: 'error',
},
'blanks-around-fences': {
// MD031
severity: 'warning',
},
'no-space-in-emphasis': {
// MD037
severity: 'error',
},
'no-space-in-links': {
// MD039
severity: 'error',
},
'fenced-code-language': {
// MD040
severity: 'warning',
allowed_languages: [
'bash',
'csharp',
'geojson',
'go',
'golang',
'graphql',
'groovy',
'html',
'http',
'java',
'javascript',
'json',
'markdown',
'math',
'md',
'mermaid',
'powershell',
'python',
'ruby',
'scss',
'shell',
'sh',
'stl',
'tasklist',
'text',
'topojson',
'xml',
'yaml',
'yml',
],
},
'single-trailing-newline': {
// MD047
severity: 'warning',
},
'emphasis-style': {
// MD049
severity: 'warning',
style: 'underscore',
},
'strong-style': {
// MD050
severity: 'error',
style: 'asterisk',
},
}

View File

@@ -0,0 +1,26 @@
export const githubDocsConfig = {
'code-fence-line-length': {
// GHD001
severity: 'warning',
},
'image-alt-text-end-punctuation': {
// GHD002
severity: 'error',
},
'incorrect-alt-text-length': {
// GHD003
severity: 'warning',
},
'image-file-kebab': {
// GHD004
severity: 'warning',
},
'internal-links-lang': {
// GHD005
severity: 'error',
},
'internal-links-slash': {
// GHD006
severity: 'error',
},
}