Commit 3792814
Changed files (2)
src/update-readme.test.ts
@@ -9,7 +9,7 @@ describe('generateReadme()', () => {
const readme = `
<!-- my-badges start -->
<!-- my-badges end -->
-`
+# readme`
const badges: Badge[] = []
const grant = badgeCollection(badges)
@@ -27,8 +27,33 @@ describe('generateReadme()', () => {
<a href="my-badges/abcde-commit.md"><img src="" alt="test" title="test" width="64"></a>
<a href="my-badges/abcdef-commit.md"><img src="" alt="test" title="test" width="64"></a>
<!-- my-badges end -->
+# readme`,
+ )
+ })
+
+ test('prepends badges if no marks found', () => {
+ const readme = '# Readme'
+ const badges: Badge[] = []
+ const grant = badgeCollection(badges)
+
+ abcPresenter.badges.forEach((badge) => grant(badge, 'test'))
+ expect(badges.length).toEqual(6)
+
+ const contents = generateReadme(readme, badges, 64)
+
+ console.log('contents', contents)
+
+ expect(contents).toEqual(
+ `<!-- my-badges start -->
+<a href="my-badges/a-commit.md"><img src="" alt="test" title="test" width="64"></a>
+<a href="my-badges/ab-commit.md"><img src="" alt="test" title="test" width="64"></a>
+<a href="my-badges/abc-commit.md"><img src="" alt="test" title="test" width="64"></a>
+<a href="my-badges/abcd-commit.md"><img src="" alt="test" title="test" width="64"></a>
+<a href="my-badges/abcde-commit.md"><img src="" alt="test" title="test" width="64"></a>
+<a href="my-badges/abcdef-commit.md"><img src="" alt="test" title="test" width="64"></a>
+<!-- my-badges end -->
-`,
+${readme}`,
)
})
})
src/update-readme.ts
@@ -3,6 +3,10 @@ import path from 'node:path'
import { Badge } from './badges.js'
import { quoteAttr } from './utils.js'
+const START_MARK = '<!-- my-badges start -->'
+const END_MARK = '<!-- my-badges end -->'
+const BADGE_SIZE = 64
+
export function updateReadme(
badges: Badge[],
size: number | string,
@@ -25,38 +29,37 @@ function detectReadmeFilename(cwd: string): string {
}
export function generateReadme(
- readmeContent: string,
+ content: string,
badges: Badge[],
- size: number | string = 64,
+ size: number | string = BADGE_SIZE,
) {
- const startString = '<!-- my-badges start -->'
- const endString = '<!-- my-badges end -->'
-
- let content = readmeContent
-
- const start = content.indexOf(startString)
- const end = content.indexOf(endString)
- const needToAddNewLine = content[end + endString.length + 1] !== '\n'
-
- if (start !== -1 && end !== -1) {
- content = content.slice(0, start) + content.slice(end + endString.length)
-
- const badgesHtml = badges
- .map((badge) => {
- const desc = quoteAttr(badge.desc)
- // prettier-ignore
- return `<a href="my-badges/${badge.id}.md"><img src="${badge.image}" alt="${desc}" title="${desc}" width="${parseInt(size + '')}"></a>`
- })
- .join('\n')
-
- content =
- content.slice(0, start) +
- `${startString}\n` +
- badgesHtml +
- `\n${endString}` +
- (needToAddNewLine ? '\n' : '') +
- content.slice(start)
- }
-
- return content
+ const start = content.indexOf(START_MARK)
+ const end = content.indexOf(END_MARK)
+ console.log('start', start, 'end', end)
+ if ((start === -1 && end !== -1) || (start !== -1 && end === -1))
+ throw new Error(
+ 'Invalid README.md: both or none of the marks should be present',
+ )
+
+ if (start > end)
+ throw new Error('Invalid README.md: start mark should be before end mark')
+
+ const badgesHtml = badges
+ .map((badge) => {
+ const desc = quoteAttr(badge.desc)
+ // prettier-ignore
+ return `<a href="my-badges/${badge.id}.md"><img src="${badge.image}" alt="${desc}" title="${desc}" width="${parseInt(size + '')}"></a>`
+ })
+ .join('\n')
+
+ if (end === -1 && start === -1)
+ return `${START_MARK}
+${badgesHtml}
+${END_MARK}
+
+${content}`
+
+ return `${content.slice(0, start)}${START_MARK}
+${badgesHtml}
+${END_MARK}${content.slice(end + END_MARK.length)}`
}