diff --git a/package-lock.json b/package-lock.json index 57e430fae3..8a736d2ae6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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" diff --git a/src/content-linter/README.md b/src/content-linter/README.md index e0b9ca4feb..6e74a1215e 100644 --- a/src/content-linter/README.md +++ b/src/content-linter/README.md @@ -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 diff --git a/src/content-linter/lib/linting-rules/code-fence-line-length.js b/src/content-linter/lib/linting-rules/code-fence-line-length.js index 7b6576282a..e883ae3fe7 100644 --- a/src/content-linter/lib/linting-rules/code-fence-line-length.js +++ b/src/content-linter/lib/linting-rules/code-fence-line-length.js @@ -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 ) } }) diff --git a/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js b/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js index b2abd4743b..4d106740b3 100644 --- a/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js +++ b/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js @@ -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 = /[.?!]$/ diff --git a/src/content-linter/lib/linting-rules/image-alt-text-length.js b/src/content-linter/lib/linting-rules/image-alt-text-length.js index 076428ed23..fbfef3f877 100644 --- a/src/content-linter/lib/linting-rules/image-alt-text-length.js +++ b/src/content-linter/lib/linting-rules/image-alt-text-length.js @@ -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('{{')) { diff --git a/src/content-linter/lib/linting-rules/image-file-kebab.js b/src/content-linter/lib/linting-rules/image-file-kebab.js index a63cb9f56f..112d3d52ff 100644 --- a/src/content-linter/lib/linting-rules/image-file-kebab.js +++ b/src/content-linter/lib/linting-rules/image-file-kebab.js @@ -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]|_)/ diff --git a/src/content-linter/lib/linting-rules/index.js b/src/content-linter/lib/linting-rules/index.js new file mode 100644 index 0000000000..e6ae8ca2ac --- /dev/null +++ b/src/content-linter/lib/linting-rules/index.js @@ -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, + ], +} diff --git a/src/content-linter/lib/linting-rules/internal-links-lang.js b/src/content-linter/lib/linting-rules/internal-links-lang.js index fdafbf899a..9a42337eb3 100644 --- a/src/content-linter/lib/linting-rules/internal-links-lang.js +++ b/src/content-linter/lib/linting-rules/internal-links-lang.js @@ -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 diff --git a/src/content-linter/lib/linting-rules/internal-links-slash.js b/src/content-linter/lib/linting-rules/internal-links-slash.js index ba8591cb24..81e2799be8 100644 --- a/src/content-linter/lib/linting-rules/internal-links-slash.js +++ b/src/content-linter/lib/linting-rules/internal-links-slash.js @@ -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 diff --git a/src/content-linter/scripts/markdownlint.js b/src/content-linter/scripts/markdownlint.js index 6a03b3adff..220b61ead1 100755 --- a/src/content-linter/scripts/markdownlint.js +++ b/src/content-linter/scripts/markdownlint.js @@ -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 ', '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 } diff --git a/src/content-linter/style/base.js b/src/content-linter/style/base.js new file mode 100644 index 0000000000..3c7ed55942 --- /dev/null +++ b/src/content-linter/style/base.js @@ -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', + }, +} diff --git a/src/content-linter/style/github-docs.js b/src/content-linter/style/github-docs.js new file mode 100644 index 0000000000..5b3d83e556 --- /dev/null +++ b/src/content-linter/style/github-docs.js @@ -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', + }, +}