diff --git a/src/utils/parse.ts b/src/utils/parse.ts index 66732b9..f8bf49d 100644 --- a/src/utils/parse.ts +++ b/src/utils/parse.ts @@ -53,7 +53,7 @@ export function parseMdContent(md: string): TutorialFrame | never { // Identify each part of the content parts.forEach((section: string) => { // match level - const levelRegex = /^(#{2}\s(?L\d+)\s(?.*)[\n\r]*(>\s*(?.*))?[\n\r]+(?[^]*))/; + const levelRegex = /^(#{2}\s(?L\d+)\s(?.*)[\n\r]*(>\s(?.*))?[\n\r]+(?[^]*))/; const levelMatch: RegExpMatchArray | null = section.match(levelRegex); if (levelMatch && levelMatch.groups) { const { @@ -67,12 +67,13 @@ export function parseMdContent(md: string): TutorialFrame | never { mdContent.levels[levelId] = { id: levelId, title: levelTitle.trim(), - summary: levelSummary - ? levelSummary.trim() - : truncate(levelContent.split(/[\n\r]+/)[0].trim(), { - length: 80, - omission: "...", - }), + summary: + levelSummary && levelSummary.trim().length + ? levelSummary.trim() + : truncate(levelContent.split(/[\n\r]+/)[0].trim(), { + length: 80, + omission: "...", + }), content: levelContent.trim(), }; current = { level: levelId, step: "0" }; diff --git a/tests/parse.test.ts b/tests/parse.test.ts index 57ea528..c4d6ca9 100644 --- a/tests/parse.test.ts +++ b/tests/parse.test.ts @@ -191,10 +191,45 @@ But not including this line. title: "Put Level's title here", summary: "Some text.", content: "Some text.\n\nBut not including this line.", + steps: [], + }, + ], + }; + expect(result.levels[0]).toEqual(expected.levels[0]); + }); + + it("should truncate a level with an empty summary", () => { + const md = `# Title + +Description. + +## L1 Put Level's title here + +> + +Some text. + +But not including this line. +`; + + const skeleton = { levels: [{ id: "L1" }] }; + const result = parse({ + text: md, + skeleton, + commits: {}, + }); + const expected = { + levels: [ + { + id: "L1", + title: "Put Level's title here", + summary: "Some text.", + content: "Some text.\n\nBut not including this line.", + steps: [], }, ], }; - expect(result.levels[0].summary).toEqual("Some text."); + expect(result.levels[0]).toEqual(expected.levels[0]); }); it("should match line breaks with double line breaks for proper spacing", () => {