1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var isStartOfSnippet = function (line) {
|
4 | return line.trim().match(/```\W*(JavaScript|js|es6)\s?$/i);
|
5 | };
|
6 | var isEndOfSnippet = function (line) { return line.trim() === "```"; };
|
7 | var isSkip = function (line) { return line.trim() === "<!-- skip-example -->"; };
|
8 | var isCodeSharedInFile = function (line) {
|
9 | return line.trim() === "<!-- share-code-between-examples -->";
|
10 | };
|
11 | function 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 | }
|
20 | function 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 | }
|
29 | function 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 | }
|
36 | function skip(snippets) {
|
37 | snippets.skip = true;
|
38 | return snippets;
|
39 | }
|
40 | function shareCodeInFile(snippets) {
|
41 | snippets.shareCodeInFile = true;
|
42 | return snippets;
|
43 | }
|
44 | function 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 | }
|
59 | function 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 | }
|
84 | exports.default = parseCodeSnippets;
|