UNPKG

markdown-doctest

Version:
85 lines (84 loc) 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var isStartOfSnippet = function (line) { return line.trim().match(/```\W*(JavaScript|js|es6)\s?$/i); }; var isEndOfSnippet = function (line) { return line.trim() === "```"; }; var isSkip = function (line) { return line.trim() === "<!-- skip-example -->"; }; var isCodeSharedInFile = function (line) { return line.trim() === "<!-- share-code-between-examples -->"; }; function startNewSnippet(snippets, fileName, lineNumber) { var skip = snippets.skip; snippets.skip = false; return Object.assign(snippets, { snippets: snippets.snippets.concat([ { code: "", fileName: fileName, lineNumber: lineNumber, complete: false, skip: skip } ]) }); } function addLineToLastSnippet(line) { return function addLine(snippets) { var lastSnippet = snippets.snippets[snippets.snippets.length - 1]; if (lastSnippet && !lastSnippet.complete) { lastSnippet.code += line + "\n"; } return snippets; }; } function endSnippet(snippets, fileName, lineNumber) { var lastSnippet = snippets.snippets[snippets.snippets.length - 1]; if (lastSnippet) { lastSnippet.complete = true; } return snippets; } function skip(snippets) { snippets.skip = true; return snippets; } function shareCodeInFile(snippets) { snippets.shareCodeInFile = true; return snippets; } function parseLine(line) { if (isStartOfSnippet(line)) { return startNewSnippet; } if (isEndOfSnippet(line)) { return endSnippet; } if (isSkip(line)) { return skip; } if (isCodeSharedInFile(line)) { return shareCodeInFile; } return addLineToLastSnippet(line); } function parseCodeSnippets(args) { var contents = args.contents; var fileName = args.fileName; var initialState = { snippets: [], shareCodeInFile: false, complete: false }; var results = contents .split("\n") .map(parseLine) .reduce(function (snippets, lineAction, index) { return lineAction(snippets, fileName, index + 1); }, initialState); var codeSnippets = results.snippets; var lastSnippet = codeSnippets[codeSnippets.length - 1]; if (lastSnippet && !lastSnippet.complete) { throw new Error("Snippet parsing was incomplete"); } return { fileName: fileName, codeSnippets: codeSnippets, shareCodeInFile: results.shareCodeInFile }; } exports.default = parseCodeSnippets;