From 23c777e70f90cdab7a9a2a1a824d5246a8804246 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 4 Jan 2022 17:51:06 +0800 Subject: [PATCH 1/5] fix: prefix relative URLs with "user-content-" for npmjs compatibility --- src/gitdown.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gitdown.js b/src/gitdown.js index 93c652d..15aaaa8 100644 --- a/src/gitdown.js +++ b/src/gitdown.js @@ -39,6 +39,8 @@ Gitdown.read = (input) => { markdown = Gitdown.nestHeadingIds(markdown); } + markdown = Gitdown.prefixRelativeUrls(markdown); + await gitdown.resolveURLs(markdown); return markdown.replace(//g, ''); @@ -260,6 +262,19 @@ Gitdown.readFile = (fileName) => { return gitdown; }; +/** + * Prefixes "user-content-" to each Markdown internal link. + * + * @private + * @param {string} inputMarkdown + * @returns {string} + */ +Gitdown.prefixRelativeUrls = (inputMarkdown) => { + return inputMarkdown.replace(/\[(.*?)]\(#(.*?)\)/gm, (match, text, anchor) => { + return `[${text}](#user-content-${anchor})`; + }); +}; + /** * Iterates through each heading in the document (defined using markdown) * and prefixes heading ID using parent heading ID. From 27ba7efba90c21bc5ab83171491211043e9aa2e2 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 4 Jan 2022 18:02:56 +0800 Subject: [PATCH 2/5] fix: as have now prefixed relative URL links, ensure "user-content-" anchors exist for any non-prefixing environments --- src/gitdown.js | 6 ++++-- tests/gitdown.js | 12 ++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/gitdown.js b/src/gitdown.js index 15aaaa8..4cfad9b 100644 --- a/src/gitdown.js +++ b/src/gitdown.js @@ -321,7 +321,9 @@ Gitdown.nestHeadingIds = (inputMarkdown) => { // test - return '\n' + _.repeat('#', normalizedLevel) + ' ' + normalizedName; + return ` + +${_.repeat('#', normalizedLevel)} ${normalizedName}`; }); outputMarkdown = outputMarkdown.replace(/^⊂⊂⊂C:(\d+)⊃⊃⊃/gm, () => { @@ -331,7 +333,7 @@ Gitdown.nestHeadingIds = (inputMarkdown) => { const tree = contents.nestIds(MarkdownContents.tree(articles)); Gitdown.nestHeadingIds.iterateTree(tree, (index, article) => { - outputMarkdown = outputMarkdown.replace('⊂⊂⊂H:' + index + '⊃⊃⊃', article.id); + outputMarkdown = outputMarkdown.replace(new RegExp('⊂⊂⊂H:' + index + '⊃⊃⊃', 'g'), article.id); }); return outputMarkdown; diff --git a/tests/gitdown.js b/tests/gitdown.js index a311592..7b0952a 100644 --- a/tests/gitdown.js +++ b/tests/gitdown.js @@ -31,10 +31,18 @@ describe('Gitdown', () => { describe('.nestHeadingIds()', () => { it('replaces heading markup with HTML', () => { - expect(Gitdown.nestHeadingIds('# Foo\n# Bar')).to.equal('\n# Foo\n\n# Bar'); + expect( + Gitdown.nestHeadingIds('# Foo\n# Bar'), + ).to.equal( + '\n\n# Foo\n\n\n# Bar', + ); }); it('nests heading ids', () => { - expect(Gitdown.nestHeadingIds('# Foo\n## Bar')).to.equal('\n# Foo\n\n## Bar'); + expect( + Gitdown.nestHeadingIds('# Foo\n## Bar'), + ).to.equal( + '\n\n# Foo\n\n\n## Bar', + ); }); }); describe('.nestHeadingIds.iterateTree()', () => { From e2c00119f76d452acf06a1d653ee90e6968ce5ee Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 5 Jan 2022 04:05:42 +0800 Subject: [PATCH 3/5] test: add test to redress coverage --- tests/gitdown.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/gitdown.js b/tests/gitdown.js index 7b0952a..aa11018 100644 --- a/tests/gitdown.js +++ b/tests/gitdown.js @@ -29,6 +29,12 @@ describe('Gitdown', () => { }); }); + describe('prefixRelativeUrls', () => { + it('replaces relative links', () => { + expect(Gitdown.prefixRelativeUrls('A [relative](#link) test')).to.equal('A [relative](#user-content-link) test'); + }); + }); + describe('.nestHeadingIds()', () => { it('replaces heading markup with HTML', () => { expect( From 7694d208300ab6e9f7effe076b13eda5397184a1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Wed, 5 Jan 2022 04:22:30 +0800 Subject: [PATCH 4/5] chore: fix linting problems --- src/gitdown.js | 6 +++--- src/index.js | 4 ++-- src/parser.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gitdown.js b/src/gitdown.js index 4cfad9b..46e9d6e 100644 --- a/src/gitdown.js +++ b/src/gitdown.js @@ -8,9 +8,9 @@ const _ = require('lodash'); const MarkdownContents = require('markdown-contents'); const marked = require('marked'); const StackTrace = require('stack-trace'); -const contents = require('./helpers/contents.js'); -const gitinfo = require('./helpers/gitinfo.js'); -const Parser = require('./parser.js'); +const contents = require('./helpers/contents'); +const gitinfo = require('./helpers/gitinfo'); +const Parser = require('./parser'); /** * @param {string} input Gitdown flavored markdown. diff --git a/src/index.js b/src/index.js index 08006f1..3344d2e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ -const Gitdown = require('./gitdown.js'); +const Gitdown = require('./gitdown'); -Gitdown.Parser = require('./parser.js'); +Gitdown.Parser = require('./parser'); module.exports = Gitdown; diff --git a/src/parser.js b/src/parser.js index bef6c36..c3edf45 100644 --- a/src/parser.js +++ b/src/parser.js @@ -2,7 +2,7 @@ const Path = require('path'); const Promise = require('bluebird'); const glob = require('glob'); const _ = require('lodash'); -const Locator = require('./locator.js'); +const Locator = require('./locator'); /** * Parser is responsible for matching all of the instances of the Gitdown JSON and invoking From 059525c09abfdf3091d83e60ea6912a24b529bc4 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Sat, 8 Jan 2022 19:51:37 +0800 Subject: [PATCH 5/5] chore: allow pnpm-lock.yaml --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6b3ec36..b4ae1ae 100755 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ coverage dist node_modules package-lock.json +pnpm-lock.yaml *.log .* !.babelrc.json