UNPKG

2.59 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var isStartOfSnippet = function (line) {
4 return line.trim().match(/```\W*(JavaScript|js|es6)\s?$/i);
5};
6var isEndOfSnippet = function (line) { return line.trim() === "```"; };
7var isSkip = function (line) { return line.trim() === "<!-- skip-example -->"; };
8var isCodeSharedInFile = function (line) {
9 return line.trim() === "<!-- share-code-between-examples -->";
10};
11function startNewSnippet(snippets, fileName, lineNumber) {
12 var skip = snippets.skip;
13 snippets.skip = false;
14 return Object.assign(snippets, {
15 snippets: snippets.snippets.concat([
16 { code: "", fileName: fileName, lineNumber: lineNumber, complete: false, skip: skip }
17 ])
18 });
19}
20function addLineToLastSnippet(line) {
21 return function addLine(snippets) {
22 var lastSnippet = snippets.snippets[snippets.snippets.length - 1];
23 if (lastSnippet && !lastSnippet.complete) {
24 lastSnippet.code += line + "\n";
25 }
26 return snippets;
27 };
28}
29function endSnippet(snippets, fileName, lineNumber) {
30 var lastSnippet = snippets.snippets[snippets.snippets.length - 1];
31 if (lastSnippet) {
32 lastSnippet.complete = true;
33 }
34 return snippets;
35}
36function skip(snippets) {
37 snippets.skip = true;
38 return snippets;
39}
40function shareCodeInFile(snippets) {
41 snippets.shareCodeInFile = true;
42 return snippets;
43}
44function parseLine(line) {
45 if (isStartOfSnippet(line)) {
46 return startNewSnippet;
47 }
48 if (isEndOfSnippet(line)) {
49 return endSnippet;
50 }
51 if (isSkip(line)) {
52 return skip;
53 }
54 if (isCodeSharedInFile(line)) {
55 return shareCodeInFile;
56 }
57 return addLineToLastSnippet(line);
58}
59function parseCodeSnippets(args) {
60 var contents = args.contents;
61 var fileName = args.fileName;
62 var initialState = {
63 snippets: [],
64 shareCodeInFile: false,
65 complete: false
66 };
67 var results = contents
68 .split("\n")
69 .map(parseLine)
70 .reduce(function (snippets, lineAction, index) {
71 return lineAction(snippets, fileName, index + 1);
72 }, initialState);
73 var codeSnippets = results.snippets;
74 var lastSnippet = codeSnippets[codeSnippets.length - 1];
75 if (lastSnippet && !lastSnippet.complete) {
76 throw new Error("Snippet parsing was incomplete");
77 }
78 return {
79 fileName: fileName,
80 codeSnippets: codeSnippets,
81 shareCodeInFile: results.shareCodeInFile
82 };
83}
84exports.default = parseCodeSnippets;