comment-parser 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -2
- package/browser/index.js +31 -10
- package/es6/parser/tokenizers/name.js +11 -3
- package/es6/parser/tokenizers/tag.js +3 -0
- package/es6/parser/tokenizers/type.d.ts +1 -1
- package/es6/parser/tokenizers/type.js +15 -3
- package/es6/primitives.js +1 -1
- package/jest.config.cjs +5 -7
- package/lib/index.cjs +2 -22
- package/lib/index.cjs.map +1 -1
- package/lib/parser/block-parser.cjs +1 -9
- package/lib/parser/block-parser.cjs.map +1 -1
- package/lib/parser/index.cjs +1 -14
- package/lib/parser/index.cjs.map +1 -1
- package/lib/parser/source-parser.cjs +1 -13
- package/lib/parser/source-parser.cjs.map +1 -1
- package/lib/parser/spec-parser.cjs +1 -7
- package/lib/parser/spec-parser.cjs.map +1 -1
- package/lib/parser/tokenizers/description.cjs +8 -19
- package/lib/parser/tokenizers/description.cjs.map +1 -1
- package/lib/parser/tokenizers/index.cjs.map +1 -1
- package/lib/parser/tokenizers/name.cjs +20 -26
- package/lib/parser/tokenizers/name.cjs.map +1 -1
- package/lib/parser/tokenizers/tag.cjs +4 -5
- package/lib/parser/tokenizers/tag.cjs.map +1 -1
- package/lib/parser/tokenizers/type.cjs +16 -20
- package/lib/parser/tokenizers/type.cjs.map +1 -1
- package/lib/parser/tokenizers/type.d.ts +1 -1
- package/lib/primitives.cjs +1 -3
- package/lib/primitives.cjs.map +1 -1
- package/lib/stringifier/index.cjs +1 -4
- package/lib/stringifier/index.cjs.map +1 -1
- package/lib/stringifier/inspect.cjs +1 -17
- package/lib/stringifier/inspect.cjs.map +1 -1
- package/lib/transforms/align.cjs +6 -29
- package/lib/transforms/align.cjs.map +1 -1
- package/lib/transforms/crlf.cjs +4 -13
- package/lib/transforms/crlf.cjs.map +1 -1
- package/lib/transforms/indent.cjs +4 -17
- package/lib/transforms/indent.cjs.map +1 -1
- package/lib/transforms/index.cjs +1 -4
- package/lib/transforms/index.cjs.map +1 -1
- package/lib/util.cjs +10 -33
- package/lib/util.cjs.map +1 -1
- package/package.json +17 -11
- package/src/parser/tokenizers/name.ts +13 -3
- package/src/parser/tokenizers/tag.ts +4 -0
- package/src/parser/tokenizers/type.ts +16 -3
- package/tests/unit/parser.spec.ts +234 -0
- package/tests/unit/spec-tag-tokenizer.spec.ts +30 -0
- package/tsconfig.node.json +0 -1
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = getParser;
|
|
7
7
|
const primitives_js_1 = require("../primitives.cjs");
|
|
8
|
-
|
|
9
8
|
const util_js_1 = require("../util.cjs");
|
|
10
|
-
|
|
11
9
|
function getParser({
|
|
12
10
|
startLine = 0,
|
|
13
11
|
markers = primitives_js_1.Markers
|
|
@@ -19,33 +17,27 @@ function getParser({
|
|
|
19
17
|
const tokens = (0, util_js_1.seedTokens)();
|
|
20
18
|
[tokens.lineEnd, rest] = (0, util_js_1.splitCR)(rest);
|
|
21
19
|
[tokens.start, rest] = (0, util_js_1.splitSpace)(rest);
|
|
22
|
-
|
|
23
20
|
if (block === null && rest.startsWith(markers.start) && !rest.startsWith(markers.nostart)) {
|
|
24
21
|
block = [];
|
|
25
22
|
tokens.delimiter = rest.slice(0, markers.start.length);
|
|
26
23
|
rest = rest.slice(markers.start.length);
|
|
27
24
|
[tokens.postDelimiter, rest] = (0, util_js_1.splitSpace)(rest);
|
|
28
25
|
}
|
|
29
|
-
|
|
30
26
|
if (block === null) {
|
|
31
27
|
num++;
|
|
32
28
|
return null;
|
|
33
29
|
}
|
|
34
|
-
|
|
35
30
|
const isClosed = rest.trimRight().endsWith(markers.end);
|
|
36
|
-
|
|
37
31
|
if (tokens.delimiter === '' && rest.startsWith(markers.delim) && !rest.startsWith(markers.end)) {
|
|
38
32
|
tokens.delimiter = markers.delim;
|
|
39
33
|
rest = rest.slice(markers.delim.length);
|
|
40
34
|
[tokens.postDelimiter, rest] = (0, util_js_1.splitSpace)(rest);
|
|
41
35
|
}
|
|
42
|
-
|
|
43
36
|
if (isClosed) {
|
|
44
37
|
const trimmed = rest.trimRight();
|
|
45
38
|
tokens.end = rest.slice(trimmed.length - markers.end.length);
|
|
46
39
|
rest = trimmed.slice(0, -markers.end.length);
|
|
47
40
|
}
|
|
48
|
-
|
|
49
41
|
tokens.description = rest;
|
|
50
42
|
block.push({
|
|
51
43
|
number: num,
|
|
@@ -53,16 +45,12 @@ function getParser({
|
|
|
53
45
|
tokens
|
|
54
46
|
});
|
|
55
47
|
num++;
|
|
56
|
-
|
|
57
48
|
if (isClosed) {
|
|
58
49
|
const result = block.slice();
|
|
59
50
|
block = null;
|
|
60
51
|
return result;
|
|
61
52
|
}
|
|
62
|
-
|
|
63
53
|
return null;
|
|
64
54
|
};
|
|
65
55
|
}
|
|
66
|
-
|
|
67
|
-
exports.default = getParser;
|
|
68
56
|
//# sourceMappingURL=source-parser.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"source-parser.cjs","names":["Object","defineProperty","exports","value","default","getParser","primitives_js_1","require","util_js_1","startLine","markers","Markers","block","num","parseSource","source","rest","tokens","seedTokens","lineEnd","splitCR","start","splitSpace","startsWith","nostart","delimiter","slice","length","postDelimiter","isClosed","trimRight","endsWith","end","delim","trimmed","description","push","number","result"],"sources":["source-parser.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = getParser;\nconst primitives_js_1 = require(\"../primitives.js\");\nconst util_js_1 = require(\"../util.js\");\nfunction getParser({ startLine = 0, markers = primitives_js_1.Markers, } = {}) {\n let block = null;\n let num = startLine;\n return function parseSource(source) {\n let rest = source;\n const tokens = (0, util_js_1.seedTokens)();\n [tokens.lineEnd, rest] = (0, util_js_1.splitCR)(rest);\n [tokens.start, rest] = (0, util_js_1.splitSpace)(rest);\n if (block === null &&\n rest.startsWith(markers.start) &&\n !rest.startsWith(markers.nostart)) {\n block = [];\n tokens.delimiter = rest.slice(0, markers.start.length);\n rest = rest.slice(markers.start.length);\n [tokens.postDelimiter, rest] = (0, util_js_1.splitSpace)(rest);\n }\n if (block === null) {\n num++;\n return null;\n }\n const isClosed = rest.trimRight().endsWith(markers.end);\n if (tokens.delimiter === '' &&\n rest.startsWith(markers.delim) &&\n !rest.startsWith(markers.end)) {\n tokens.delimiter = markers.delim;\n rest = rest.slice(markers.delim.length);\n [tokens.postDelimiter, rest] = (0, util_js_1.splitSpace)(rest);\n }\n if (isClosed) {\n const trimmed = rest.trimRight();\n tokens.end = rest.slice(trimmed.length - markers.end.length);\n rest = trimmed.slice(0, -markers.end.length);\n }\n tokens.description = rest;\n block.push({ number: num, source, tokens });\n num++;\n if (isClosed) {\n const result = block.slice();\n block = null;\n return result;\n }\n return null;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,27 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = getParser;
|
|
7
7
|
const util_js_1 = require("../util.cjs");
|
|
8
|
-
|
|
9
8
|
function getParser({
|
|
10
9
|
tokenizers
|
|
11
10
|
}) {
|
|
12
11
|
return function parseSpec(source) {
|
|
13
12
|
var _a;
|
|
14
|
-
|
|
15
13
|
let spec = (0, util_js_1.seedSpec)({
|
|
16
14
|
source
|
|
17
15
|
});
|
|
18
|
-
|
|
19
16
|
for (const tokenize of tokenizers) {
|
|
20
17
|
spec = tokenize(spec);
|
|
21
18
|
if ((_a = spec.problems[spec.problems.length - 1]) === null || _a === void 0 ? void 0 : _a.critical) break;
|
|
22
19
|
}
|
|
23
|
-
|
|
24
20
|
return spec;
|
|
25
21
|
};
|
|
26
22
|
}
|
|
27
|
-
|
|
28
|
-
exports.default = getParser;
|
|
29
23
|
//# sourceMappingURL=spec-parser.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"spec-parser.cjs","names":["Object","defineProperty","exports","value","default","getParser","util_js_1","require","tokenizers","parseSpec","source","_a","spec","seedSpec","tokenize","problems","length","critical"],"sources":["spec-parser.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = getParser;\nconst util_js_1 = require(\"../util.js\");\nfunction getParser({ tokenizers }) {\n return function parseSpec(source) {\n var _a;\n let spec = (0, util_js_1.seedSpec)({ source });\n for (const tokenize of tokenizers) {\n spec = tokenize(spec);\n if ((_a = spec.problems[spec.problems.length - 1]) === null || _a === void 0 ? void 0 : _a.critical)\n break;\n }\n return spec;\n };\n}\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,OAAO,GAAGC,SAAS;AAC3B,MAAMC,SAAS,GAAGC,OAAO,eAAc;AACvC,SAASF,SAASA,CAAC;EAAEG;AAAW,CAAC,EAAE;EAC/B,OAAO,SAASC,SAASA,CAACC,MAAM,EAAE;IAC9B,IAAIC,EAAE;IACN,IAAIC,IAAI,GAAG,CAAC,CAAC,EAAEN,SAAS,CAACO,QAAQ,EAAE;MAAEH;IAAO,CAAC,CAAC;IAC9C,KAAK,MAAMI,QAAQ,IAAIN,UAAU,EAAE;MAC/BI,IAAI,GAAGE,QAAQ,CAACF,IAAI,CAAC;MACrB,IAAI,CAACD,EAAE,GAAGC,IAAI,CAACG,QAAQ,CAACH,IAAI,CAACG,QAAQ,CAACC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,IAAIL,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,EAAE,CAACM,QAAQ,EAC/F;IACR;IACA,OAAOL,IAAI;EACf,CAAC;AACL","ignoreList":[]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
6
|
+
exports.default = descriptionTokenizer;
|
|
7
|
+
exports.getJoiner = getJoiner;
|
|
8
8
|
const primitives_js_1 = require("../../primitives.cjs");
|
|
9
9
|
/**
|
|
10
10
|
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
|
|
@@ -12,8 +12,6 @@ const primitives_js_1 = require("../../primitives.cjs");
|
|
|
12
12
|
* @param {Spacing} spacing tells how to handle the whitespace
|
|
13
13
|
* @param {BlockMarkers} markers tells how to handle comment block delimitation
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
15
|
function descriptionTokenizer(spacing = 'compact', markers = primitives_js_1.Markers) {
|
|
18
16
|
const join = getJoiner(spacing);
|
|
19
17
|
return spec => {
|
|
@@ -21,17 +19,11 @@ function descriptionTokenizer(spacing = 'compact', markers = primitives_js_1.Mar
|
|
|
21
19
|
return spec;
|
|
22
20
|
};
|
|
23
21
|
}
|
|
24
|
-
|
|
25
|
-
exports.default = descriptionTokenizer;
|
|
26
|
-
|
|
27
22
|
function getJoiner(spacing) {
|
|
28
23
|
if (spacing === 'compact') return compactJoiner;
|
|
29
24
|
if (spacing === 'preserve') return preserveJoiner;
|
|
30
25
|
return spacing;
|
|
31
26
|
}
|
|
32
|
-
|
|
33
|
-
exports.getJoiner = getJoiner;
|
|
34
|
-
|
|
35
27
|
function compactJoiner(lines, markers = primitives_js_1.Markers) {
|
|
36
28
|
return lines.map(({
|
|
37
29
|
tokens: {
|
|
@@ -39,23 +31,20 @@ function compactJoiner(lines, markers = primitives_js_1.Markers) {
|
|
|
39
31
|
}
|
|
40
32
|
}) => description.trim()).filter(description => description !== '').join(' ');
|
|
41
33
|
}
|
|
42
|
-
|
|
43
34
|
const lineNo = (num, {
|
|
44
35
|
tokens
|
|
45
36
|
}, i) => tokens.type === '' ? num : i;
|
|
46
|
-
|
|
47
37
|
const getDescription = ({
|
|
48
38
|
tokens
|
|
49
39
|
}) => (tokens.delimiter === '' ? tokens.start : tokens.postDelimiter.slice(1)) + tokens.description;
|
|
50
|
-
|
|
51
40
|
function preserveJoiner(lines, markers = primitives_js_1.Markers) {
|
|
52
|
-
if (lines.length === 0) return '';
|
|
53
|
-
|
|
54
|
-
if (lines[0].tokens.description === '' && lines[0].tokens.delimiter === markers.start) lines = lines.slice(1);
|
|
55
|
-
|
|
41
|
+
if (lines.length === 0) return '';
|
|
42
|
+
// skip the opening line with no description
|
|
43
|
+
if (lines[0].tokens.description === '' && lines[0].tokens.delimiter === markers.start) lines = lines.slice(1);
|
|
44
|
+
// skip the closing line with no description
|
|
56
45
|
const lastLine = lines[lines.length - 1];
|
|
57
|
-
if (lastLine !== undefined && lastLine.tokens.description === '' && lastLine.tokens.end.endsWith(markers.end)) lines = lines.slice(0, -1);
|
|
58
|
-
|
|
46
|
+
if (lastLine !== undefined && lastLine.tokens.description === '' && lastLine.tokens.end.endsWith(markers.end)) lines = lines.slice(0, -1);
|
|
47
|
+
// description starts at the last line of type definition
|
|
59
48
|
lines = lines.slice(lines.reduce(lineNo, 0));
|
|
60
49
|
return lines.map(getDescription).join('\n');
|
|
61
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"description.cjs","names":["Object","defineProperty","exports","value","default","descriptionTokenizer","getJoiner","primitives_js_1","require","spacing","markers","Markers","join","spec","description","source","compactJoiner","preserveJoiner","lines","map","tokens","trim","filter","lineNo","num","i","type","getDescription","delimiter","start","postDelimiter","slice","length","lastLine","undefined","end","endsWith","reduce"],"sources":["description.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = descriptionTokenizer;\nexports.getJoiner = getJoiner;\nconst primitives_js_1 = require(\"../../primitives.js\");\n/**\n * Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`\n * following given spacing srtategy\n * @param {Spacing} spacing tells how to handle the whitespace\n * @param {BlockMarkers} markers tells how to handle comment block delimitation\n */\nfunction descriptionTokenizer(spacing = 'compact', markers = primitives_js_1.Markers) {\n const join = getJoiner(spacing);\n return (spec) => {\n spec.description = join(spec.source, markers);\n return spec;\n };\n}\nfunction getJoiner(spacing) {\n if (spacing === 'compact')\n return compactJoiner;\n if (spacing === 'preserve')\n return preserveJoiner;\n return spacing;\n}\nfunction compactJoiner(lines, markers = primitives_js_1.Markers) {\n return lines\n .map(({ tokens: { description } }) => description.trim())\n .filter((description) => description !== '')\n .join(' ');\n}\nconst lineNo = (num, { tokens }, i) => tokens.type === '' ? num : i;\nconst getDescription = ({ tokens }) => (tokens.delimiter === '' ? tokens.start : tokens.postDelimiter.slice(1)) +\n tokens.description;\nfunction preserveJoiner(lines, markers = primitives_js_1.Markers) {\n if (lines.length === 0)\n return '';\n // skip the opening line with no description\n if (lines[0].tokens.description === '' &&\n lines[0].tokens.delimiter === markers.start)\n lines = lines.slice(1);\n // skip the closing line with no description\n const lastLine = lines[lines.length - 1];\n if (lastLine !== undefined &&\n lastLine.tokens.description === '' &&\n lastLine.tokens.end.endsWith(markers.end))\n lines = lines.slice(0, -1);\n // description starts at the last line of type definition\n lines = lines.slice(lines.reduce(lineNo, 0));\n return lines.map(getDescription).join('\\n');\n}\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,OAAO,GAAGC,oBAAoB;AACtCH,OAAO,CAACI,SAAS,GAAGA,SAAS;AAC7B,MAAMC,eAAe,GAAGC,OAAO,wBAAuB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,SAASH,oBAAoBA,CAACI,OAAO,GAAG,SAAS,EAAEC,OAAO,GAAGH,eAAe,CAACI,OAAO,EAAE;EAClF,MAAMC,IAAI,GAAGN,SAAS,CAACG,OAAO,CAAC;EAC/B,OAAQI,IAAI,IAAK;IACbA,IAAI,CAACC,WAAW,GAAGF,IAAI,CAACC,IAAI,CAACE,MAAM,EAAEL,OAAO,CAAC;IAC7C,OAAOG,IAAI;EACf,CAAC;AACL;AACA,SAASP,SAASA,CAACG,OAAO,EAAE;EACxB,IAAIA,OAAO,KAAK,SAAS,EACrB,OAAOO,aAAa;EACxB,IAAIP,OAAO,KAAK,UAAU,EACtB,OAAOQ,cAAc;EACzB,OAAOR,OAAO;AAClB;AACA,SAASO,aAAaA,CAACE,KAAK,EAAER,OAAO,GAAGH,eAAe,CAACI,OAAO,EAAE;EAC7D,OAAOO,KAAK,CACPC,GAAG,CAAC,CAAC;IAAEC,MAAM,EAAE;MAAEN;IAAY;EAAE,CAAC,KAAKA,WAAW,CAACO,IAAI,CAAC,CAAC,CAAC,CACxDC,MAAM,CAAER,WAAW,IAAKA,WAAW,KAAK,EAAE,CAAC,CAC3CF,IAAI,CAAC,GAAG,CAAC;AAClB;AACA,MAAMW,MAAM,GAAGA,CAACC,GAAG,EAAE;EAAEJ;AAAO,CAAC,EAAEK,CAAC,KAAKL,MAAM,CAACM,IAAI,KAAK,EAAE,GAAGF,GAAG,GAAGC,CAAC;AACnE,MAAME,cAAc,GAAGA,CAAC;EAAEP;AAAO,CAAC,KAAK,CAACA,MAAM,CAACQ,SAAS,KAAK,EAAE,GAAGR,MAAM,CAACS,KAAK,GAAGT,MAAM,CAACU,aAAa,CAACC,KAAK,CAAC,CAAC,CAAC,IAC1GX,MAAM,CAACN,WAAW;AACtB,SAASG,cAAcA,CAACC,KAAK,EAAER,OAAO,GAAGH,eAAe,CAACI,OAAO,EAAE;EAC9D,IAAIO,KAAK,CAACc,MAAM,KAAK,CAAC,EAClB,OAAO,EAAE;EACb;EACA,IAAId,KAAK,CAAC,CAAC,CAAC,CAACE,MAAM,CAACN,WAAW,KAAK,EAAE,IAClCI,KAAK,CAAC,CAAC,CAAC,CAACE,MAAM,CAACQ,SAAS,KAAKlB,OAAO,CAACmB,KAAK,EAC3CX,KAAK,GAAGA,KAAK,CAACa,KAAK,CAAC,CAAC,CAAC;EAC1B;EACA,MAAME,QAAQ,GAAGf,KAAK,CAACA,KAAK,CAACc,MAAM,GAAG,CAAC,CAAC;EACxC,IAAIC,QAAQ,KAAKC,SAAS,IACtBD,QAAQ,CAACb,MAAM,CAACN,WAAW,KAAK,EAAE,IAClCmB,QAAQ,CAACb,MAAM,CAACe,GAAG,CAACC,QAAQ,CAAC1B,OAAO,CAACyB,GAAG,CAAC,EACzCjB,KAAK,GAAGA,KAAK,CAACa,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC9B;EACAb,KAAK,GAAGA,KAAK,CAACa,KAAK,CAACb,KAAK,CAACmB,MAAM,CAACd,MAAM,EAAE,CAAC,CAAC,CAAC;EAC5C,OAAOL,KAAK,CAACC,GAAG,CAACQ,cAAc,CAAC,CAACf,IAAI,CAAC,IAAI,CAAC;AAC/C","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Object","defineProperty","exports","value"],"sources":["index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -3,48 +3,50 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = nameTokenizer;
|
|
7
7
|
const util_js_1 = require("../../util.cjs");
|
|
8
|
-
|
|
9
8
|
const isQuoted = s => s && s.startsWith('"') && s.endsWith('"');
|
|
10
9
|
/**
|
|
11
10
|
* Splits remaining `spec.lines[].tokens.description` into `name` and `descriptions` tokens,
|
|
12
11
|
* and populates the `spec.name`
|
|
13
12
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
13
|
function nameTokenizer() {
|
|
17
14
|
const typeEnd = (num, {
|
|
18
15
|
tokens
|
|
19
16
|
}, i) => tokens.type === '' ? num : i;
|
|
20
|
-
|
|
21
17
|
return spec => {
|
|
22
|
-
// look for the name in the line where {type} ends
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
// look for the name starting in the line where {type} ends
|
|
19
|
+
let finalTypeLine = spec.source.reduce(typeEnd, 0);
|
|
20
|
+
let tokens;
|
|
21
|
+
do {
|
|
22
|
+
({
|
|
23
|
+
tokens
|
|
24
|
+
} = spec.source[finalTypeLine]);
|
|
25
|
+
if (tokens.description.trim()) {
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
finalTypeLine++;
|
|
29
|
+
} while (spec.source[finalTypeLine]);
|
|
30
|
+
const source = tokens.description.trimStart();
|
|
31
|
+
const quotedGroups = source.split('"');
|
|
32
|
+
// if it starts with quoted group, assume it is a literal
|
|
29
33
|
if (quotedGroups.length > 1 && quotedGroups[0] === '' && quotedGroups.length % 2 === 1) {
|
|
30
34
|
spec.name = quotedGroups[1];
|
|
31
35
|
tokens.name = `"${quotedGroups[1]}"`;
|
|
32
36
|
[tokens.postName, tokens.description] = (0, util_js_1.splitSpace)(source.slice(tokens.name.length));
|
|
33
37
|
return spec;
|
|
34
38
|
}
|
|
35
|
-
|
|
36
39
|
let brackets = 0;
|
|
37
40
|
let name = '';
|
|
38
41
|
let optional = false;
|
|
39
|
-
let defaultValue;
|
|
40
|
-
|
|
42
|
+
let defaultValue;
|
|
43
|
+
// assume name is non-space string or anything wrapped into brackets
|
|
41
44
|
for (const ch of source) {
|
|
42
45
|
if (brackets === 0 && (0, util_js_1.isSpace)(ch)) break;
|
|
43
46
|
if (ch === '[') brackets++;
|
|
44
47
|
if (ch === ']') brackets--;
|
|
45
48
|
name += ch;
|
|
46
49
|
}
|
|
47
|
-
|
|
48
50
|
if (brackets !== 0) {
|
|
49
51
|
spec.problems.push({
|
|
50
52
|
code: 'spec:name:unpaired-brackets',
|
|
@@ -54,16 +56,13 @@ function nameTokenizer() {
|
|
|
54
56
|
});
|
|
55
57
|
return spec;
|
|
56
58
|
}
|
|
57
|
-
|
|
58
59
|
const nameToken = name;
|
|
59
|
-
|
|
60
60
|
if (name[0] === '[' && name[name.length - 1] === ']') {
|
|
61
61
|
optional = true;
|
|
62
62
|
name = name.slice(1, -1);
|
|
63
63
|
const parts = name.split('=');
|
|
64
64
|
name = parts[0].trim();
|
|
65
65
|
if (parts[1] !== undefined) defaultValue = parts.slice(1).join('=').trim();
|
|
66
|
-
|
|
67
66
|
if (name === '') {
|
|
68
67
|
spec.problems.push({
|
|
69
68
|
code: 'spec:name:empty-name',
|
|
@@ -73,7 +72,6 @@ function nameTokenizer() {
|
|
|
73
72
|
});
|
|
74
73
|
return spec;
|
|
75
74
|
}
|
|
76
|
-
|
|
77
75
|
if (defaultValue === '') {
|
|
78
76
|
spec.problems.push({
|
|
79
77
|
code: 'spec:name:empty-default',
|
|
@@ -82,9 +80,8 @@ function nameTokenizer() {
|
|
|
82
80
|
critical: true
|
|
83
81
|
});
|
|
84
82
|
return spec;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
}
|
|
84
|
+
// has "=" and is not a string, except for "=>"
|
|
88
85
|
if (!isQuoted(defaultValue) && /=(?!>)/.test(defaultValue)) {
|
|
89
86
|
spec.problems.push({
|
|
90
87
|
code: 'spec:name:invalid-default',
|
|
@@ -95,7 +92,6 @@ function nameTokenizer() {
|
|
|
95
92
|
return spec;
|
|
96
93
|
}
|
|
97
94
|
}
|
|
98
|
-
|
|
99
95
|
spec.optional = optional;
|
|
100
96
|
spec.name = name;
|
|
101
97
|
tokens.name = nameToken;
|
|
@@ -104,6 +100,4 @@ function nameTokenizer() {
|
|
|
104
100
|
return spec;
|
|
105
101
|
};
|
|
106
102
|
}
|
|
107
|
-
|
|
108
|
-
exports.default = nameTokenizer;
|
|
109
103
|
//# sourceMappingURL=name.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"name.cjs","names":["Object","defineProperty","exports","value","default","nameTokenizer","util_js_1","require","isQuoted","s","startsWith","endsWith","typeEnd","num","tokens","i","type","spec","finalTypeLine","source","reduce","description","trim","trimStart","quotedGroups","split","length","name","postName","splitSpace","slice","brackets","optional","defaultValue","ch","isSpace","problems","push","code","message","line","number","critical","nameToken","parts","undefined","join","test"],"sources":["name.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = nameTokenizer;\nconst util_js_1 = require(\"../../util.js\");\nconst isQuoted = (s) => s && s.startsWith('\"') && s.endsWith('\"');\n/**\n * Splits remaining `spec.lines[].tokens.description` into `name` and `descriptions` tokens,\n * and populates the `spec.name`\n */\nfunction nameTokenizer() {\n const typeEnd = (num, { tokens }, i) => tokens.type === '' ? num : i;\n return (spec) => {\n // look for the name starting in the line where {type} ends\n let finalTypeLine = spec.source.reduce(typeEnd, 0);\n let tokens;\n do {\n ({ tokens } = spec.source[finalTypeLine]);\n if (tokens.description.trim()) {\n break;\n }\n finalTypeLine++;\n } while (spec.source[finalTypeLine]);\n const source = tokens.description.trimStart();\n const quotedGroups = source.split('\"');\n // if it starts with quoted group, assume it is a literal\n if (quotedGroups.length > 1 &&\n quotedGroups[0] === '' &&\n quotedGroups.length % 2 === 1) {\n spec.name = quotedGroups[1];\n tokens.name = `\"${quotedGroups[1]}\"`;\n [tokens.postName, tokens.description] = (0, util_js_1.splitSpace)(source.slice(tokens.name.length));\n return spec;\n }\n let brackets = 0;\n let name = '';\n let optional = false;\n let defaultValue;\n // assume name is non-space string or anything wrapped into brackets\n for (const ch of source) {\n if (brackets === 0 && (0, util_js_1.isSpace)(ch))\n break;\n if (ch === '[')\n brackets++;\n if (ch === ']')\n brackets--;\n name += ch;\n }\n if (brackets !== 0) {\n spec.problems.push({\n code: 'spec:name:unpaired-brackets',\n message: 'unpaired brackets',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n const nameToken = name;\n if (name[0] === '[' && name[name.length - 1] === ']') {\n optional = true;\n name = name.slice(1, -1);\n const parts = name.split('=');\n name = parts[0].trim();\n if (parts[1] !== undefined)\n defaultValue = parts.slice(1).join('=').trim();\n if (name === '') {\n spec.problems.push({\n code: 'spec:name:empty-name',\n message: 'empty name',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n if (defaultValue === '') {\n spec.problems.push({\n code: 'spec:name:empty-default',\n message: 'empty default value',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n // has \"=\" and is not a string, except for \"=>\"\n if (!isQuoted(defaultValue) && /=(?!>)/.test(defaultValue)) {\n spec.problems.push({\n code: 'spec:name:invalid-default',\n message: 'invalid default value syntax',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n }\n spec.optional = optional;\n spec.name = name;\n tokens.name = nameToken;\n if (defaultValue !== undefined)\n spec.default = defaultValue;\n [tokens.postName, tokens.description] = (0, util_js_1.splitSpace)(source.slice(tokens.name.length));\n return spec;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,18 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = tagTokenizer;
|
|
6
7
|
/**
|
|
7
8
|
* Splits the `@prefix` from remaining `Spec.lines[].token.description` into the `tag` token,
|
|
8
9
|
* and populates `spec.tag`
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
11
|
function tagTokenizer() {
|
|
12
12
|
return spec => {
|
|
13
13
|
const {
|
|
14
14
|
tokens
|
|
15
15
|
} = spec.source[0];
|
|
16
16
|
const match = tokens.description.match(/\s*(@(\S+))(\s*)/);
|
|
17
|
-
|
|
18
17
|
if (match === null) {
|
|
19
18
|
spec.problems.push({
|
|
20
19
|
code: 'spec:tag:prefix',
|
|
@@ -24,7 +23,9 @@ function tagTokenizer() {
|
|
|
24
23
|
});
|
|
25
24
|
return spec;
|
|
26
25
|
}
|
|
27
|
-
|
|
26
|
+
if (match[1].includes('/')) {
|
|
27
|
+
return spec;
|
|
28
|
+
}
|
|
28
29
|
tokens.tag = match[1];
|
|
29
30
|
tokens.postTag = match[3];
|
|
30
31
|
tokens.description = tokens.description.slice(match[0].length);
|
|
@@ -32,6 +33,4 @@ function tagTokenizer() {
|
|
|
32
33
|
return spec;
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
exports.default = tagTokenizer;
|
|
37
36
|
//# sourceMappingURL=tag.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"tag.cjs","names":["Object","defineProperty","exports","value","default","tagTokenizer","spec","tokens","source","match","description","problems","push","code","message","line","number","critical","includes","tag","postTag","slice","length"],"sources":["tag.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = tagTokenizer;\n/**\n * Splits the `@prefix` from remaining `Spec.lines[].token.description` into the `tag` token,\n * and populates `spec.tag`\n */\nfunction tagTokenizer() {\n return (spec) => {\n const { tokens } = spec.source[0];\n const match = tokens.description.match(/\\s*(@(\\S+))(\\s*)/);\n if (match === null) {\n spec.problems.push({\n code: 'spec:tag:prefix',\n message: 'tag should start with \"@\" symbol',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n if (match[1].includes('/')) {\n return spec;\n }\n tokens.tag = match[1];\n tokens.postTag = match[3];\n tokens.description = tokens.description.slice(match[0].length);\n spec.tag = match[2];\n return spec;\n };\n}\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,OAAO,GAAGC,YAAY;AAC9B;AACA;AACA;AACA;AACA,SAASA,YAAYA,CAAA,EAAG;EACpB,OAAQC,IAAI,IAAK;IACb,MAAM;MAAEC;IAAO,CAAC,GAAGD,IAAI,CAACE,MAAM,CAAC,CAAC,CAAC;IACjC,MAAMC,KAAK,GAAGF,MAAM,CAACG,WAAW,CAACD,KAAK,CAAC,kBAAkB,CAAC;IAC1D,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChBH,IAAI,CAACK,QAAQ,CAACC,IAAI,CAAC;QACfC,IAAI,EAAE,iBAAiB;QACvBC,OAAO,EAAE,kCAAkC;QAC3CC,IAAI,EAAET,IAAI,CAACE,MAAM,CAAC,CAAC,CAAC,CAACQ,MAAM;QAC3BC,QAAQ,EAAE;MACd,CAAC,CAAC;MACF,OAAOX,IAAI;IACf;IACA,IAAIG,KAAK,CAAC,CAAC,CAAC,CAACS,QAAQ,CAAC,GAAG,CAAC,EAAE;MACxB,OAAOZ,IAAI;IACf;IACAC,MAAM,CAACY,GAAG,GAAGV,KAAK,CAAC,CAAC,CAAC;IACrBF,MAAM,CAACa,OAAO,GAAGX,KAAK,CAAC,CAAC,CAAC;IACzBF,MAAM,CAACG,WAAW,GAAGH,MAAM,CAACG,WAAW,CAACW,KAAK,CAACZ,KAAK,CAAC,CAAC,CAAC,CAACa,MAAM,CAAC;IAC9DhB,IAAI,CAACa,GAAG,GAAGV,KAAK,CAAC,CAAC,CAAC;IACnB,OAAOH,IAAI;EACf,CAAC;AACL","ignoreList":[]}
|
|
@@ -3,40 +3,45 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = typeTokenizer;
|
|
7
7
|
const util_js_1 = require("../../util.cjs");
|
|
8
8
|
/**
|
|
9
|
-
* Sets splits remaining `Spec.lines[].
|
|
9
|
+
* Sets splits remaining `Spec.lines[].tokens.description` into `type` and `description`
|
|
10
10
|
* tokens and populates Spec.type`
|
|
11
11
|
*
|
|
12
12
|
* @param {Spacing} spacing tells how to deal with a whitespace
|
|
13
13
|
* for type values going over multiple lines
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
15
|
function typeTokenizer(spacing = 'compact') {
|
|
18
16
|
const join = getJoiner(spacing);
|
|
19
17
|
return spec => {
|
|
20
18
|
let curlies = 0;
|
|
21
19
|
let lines = [];
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
let descriptionBegun = false;
|
|
21
|
+
let firstTypeIteration = true;
|
|
22
|
+
for (const {
|
|
24
23
|
tokens
|
|
25
|
-
}
|
|
24
|
+
} of spec.source.values()) {
|
|
26
25
|
let type = '';
|
|
27
|
-
if (
|
|
28
|
-
|
|
26
|
+
if (!descriptionBegun && tokens.description.trim()) {
|
|
27
|
+
descriptionBegun = true;
|
|
28
|
+
} else if (!descriptionBegun) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (firstTypeIteration && tokens.description[0] !== '{') return spec;
|
|
32
|
+
firstTypeIteration = false;
|
|
29
33
|
for (const ch of tokens.description) {
|
|
30
34
|
if (ch === '{') curlies++;
|
|
31
35
|
if (ch === '}') curlies--;
|
|
32
36
|
type += ch;
|
|
33
37
|
if (curlies === 0) break;
|
|
34
38
|
}
|
|
35
|
-
|
|
36
39
|
lines.push([tokens, type]);
|
|
37
40
|
if (curlies === 0) break;
|
|
38
41
|
}
|
|
39
|
-
|
|
42
|
+
if (!descriptionBegun) {
|
|
43
|
+
return spec;
|
|
44
|
+
}
|
|
40
45
|
if (curlies !== 0) {
|
|
41
46
|
spec.problems.push({
|
|
42
47
|
code: 'spec:type:unpaired-curlies',
|
|
@@ -46,33 +51,24 @@ function typeTokenizer(spacing = 'compact') {
|
|
|
46
51
|
});
|
|
47
52
|
return spec;
|
|
48
53
|
}
|
|
49
|
-
|
|
50
54
|
const parts = [];
|
|
51
55
|
const offset = lines[0][0].postDelimiter.length;
|
|
52
|
-
|
|
53
56
|
for (const [i, [tokens, type]] of lines.entries()) {
|
|
54
57
|
tokens.type = type;
|
|
55
|
-
|
|
56
58
|
if (i > 0) {
|
|
57
59
|
tokens.type = tokens.postDelimiter.slice(offset) + type;
|
|
58
60
|
tokens.postDelimiter = tokens.postDelimiter.slice(0, offset);
|
|
59
61
|
}
|
|
60
|
-
|
|
61
62
|
[tokens.postType, tokens.description] = (0, util_js_1.splitSpace)(tokens.description.slice(type.length));
|
|
62
63
|
parts.push(tokens.type);
|
|
63
64
|
}
|
|
64
|
-
|
|
65
65
|
parts[0] = parts[0].slice(1);
|
|
66
66
|
parts[parts.length - 1] = parts[parts.length - 1].slice(0, -1);
|
|
67
67
|
spec.type = join(parts);
|
|
68
68
|
return spec;
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
-
|
|
72
|
-
exports.default = typeTokenizer;
|
|
73
|
-
|
|
74
71
|
const trim = x => x.trim();
|
|
75
|
-
|
|
76
72
|
function getJoiner(spacing) {
|
|
77
73
|
if (spacing === 'compact') return t => t.map(trim).join('');else if (spacing === 'preserve') return t => t.join('\n');else return spacing;
|
|
78
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"type.cjs","names":["Object","defineProperty","exports","value","default","typeTokenizer","util_js_1","require","spacing","join","getJoiner","spec","curlies","lines","descriptionBegun","firstTypeIteration","tokens","source","values","type","description","trim","ch","push","problems","code","message","line","number","critical","parts","offset","postDelimiter","length","i","entries","slice","postType","splitSpace","x","t","map"],"sources":["type.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = typeTokenizer;\nconst util_js_1 = require(\"../../util.js\");\n/**\n * Sets splits remaining `Spec.lines[].tokens.description` into `type` and `description`\n * tokens and populates Spec.type`\n *\n * @param {Spacing} spacing tells how to deal with a whitespace\n * for type values going over multiple lines\n */\nfunction typeTokenizer(spacing = 'compact') {\n const join = getJoiner(spacing);\n return (spec) => {\n let curlies = 0;\n let lines = [];\n let descriptionBegun = false;\n let firstTypeIteration = true;\n for (const { tokens } of spec.source.values()) {\n let type = '';\n if (!descriptionBegun && tokens.description.trim()) {\n descriptionBegun = true;\n }\n else if (!descriptionBegun) {\n continue;\n }\n if (firstTypeIteration && tokens.description[0] !== '{')\n return spec;\n firstTypeIteration = false;\n for (const ch of tokens.description) {\n if (ch === '{')\n curlies++;\n if (ch === '}')\n curlies--;\n type += ch;\n if (curlies === 0)\n break;\n }\n lines.push([tokens, type]);\n if (curlies === 0)\n break;\n }\n if (!descriptionBegun) {\n return spec;\n }\n if (curlies !== 0) {\n spec.problems.push({\n code: 'spec:type:unpaired-curlies',\n message: 'unpaired curlies',\n line: spec.source[0].number,\n critical: true,\n });\n return spec;\n }\n const parts = [];\n const offset = lines[0][0].postDelimiter.length;\n for (const [i, [tokens, type]] of lines.entries()) {\n tokens.type = type;\n if (i > 0) {\n tokens.type = tokens.postDelimiter.slice(offset) + type;\n tokens.postDelimiter = tokens.postDelimiter.slice(0, offset);\n }\n [tokens.postType, tokens.description] = (0, util_js_1.splitSpace)(tokens.description.slice(type.length));\n parts.push(tokens.type);\n }\n parts[0] = parts[0].slice(1);\n parts[parts.length - 1] = parts[parts.length - 1].slice(0, -1);\n spec.type = join(parts);\n return spec;\n };\n}\nconst trim = (x) => x.trim();\nfunction getJoiner(spacing) {\n if (spacing === 'compact')\n return (t) => t.map(trim).join('');\n else if (spacing === 'preserve')\n return (t) => t.join('\\n');\n else\n return spacing;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,7 +18,7 @@ export type Joiner = (parts: string[]) => string;
|
|
|
18
18
|
*/
|
|
19
19
|
export type Spacing = 'compact' | 'preserve' | Joiner;
|
|
20
20
|
/**
|
|
21
|
-
* Sets splits remaining `Spec.lines[].
|
|
21
|
+
* Sets splits remaining `Spec.lines[].tokens.description` into `type` and `description`
|
|
22
22
|
* tokens and populates Spec.type`
|
|
23
23
|
*
|
|
24
24
|
* @param {Spacing} spacing tells how to deal with a whitespace
|
package/lib/primitives.cjs
CHANGED
|
@@ -5,13 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.Markers = void 0;
|
|
7
7
|
/** @deprecated */
|
|
8
|
-
|
|
9
8
|
var Markers;
|
|
10
|
-
|
|
11
9
|
(function (Markers) {
|
|
12
10
|
Markers["start"] = "/**";
|
|
13
11
|
Markers["nostart"] = "/***";
|
|
14
12
|
Markers["delim"] = "*";
|
|
15
13
|
Markers["end"] = "*/";
|
|
16
|
-
})(Markers
|
|
14
|
+
})(Markers || (exports.Markers = Markers = {}));
|
|
17
15
|
//# sourceMappingURL=primitives.cjs.map
|
package/lib/primitives.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"primitives.cjs","names":["Object","defineProperty","exports","value","Markers"],"sources":["primitives.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Markers = void 0;\n/** @deprecated */\nvar Markers;\n(function (Markers) {\n Markers[\"start\"] = \"/**\";\n Markers[\"nostart\"] = \"/***\";\n Markers[\"delim\"] = \"*\";\n Markers[\"end\"] = \"*/\";\n})(Markers || (exports.Markers = Markers = {}));\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,OAAO,GAAG,KAAK,CAAC;AACxB;AACA,IAAIA,OAAO;AACX,CAAC,UAAUA,OAAO,EAAE;EAChBA,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK;EACxBA,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM;EAC3BA,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG;EACtBA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;AACzB,CAAC,EAAEA,OAAO,KAAKF,OAAO,CAACE,OAAO,GAAGA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -3,16 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = getStringifier;
|
|
7
7
|
function join(tokens) {
|
|
8
8
|
return tokens.start + tokens.delimiter + tokens.postDelimiter + tokens.tag + tokens.postTag + tokens.type + tokens.postType + tokens.name + tokens.postName + tokens.description + tokens.end + tokens.lineEnd;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
10
|
function getStringifier() {
|
|
12
11
|
return block => block.source.map(({
|
|
13
12
|
tokens
|
|
14
13
|
}) => join(tokens)).join('\n');
|
|
15
14
|
}
|
|
16
|
-
|
|
17
|
-
exports.default = getStringifier;
|
|
18
15
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Object","defineProperty","exports","value","default","getStringifier","join","tokens","start","delimiter","postDelimiter","tag","postTag","type","postType","name","postName","description","end","lineEnd","block","source","map"],"sources":["index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = getStringifier;\nfunction join(tokens) {\n return (tokens.start +\n tokens.delimiter +\n tokens.postDelimiter +\n tokens.tag +\n tokens.postTag +\n tokens.type +\n tokens.postType +\n tokens.name +\n tokens.postName +\n tokens.description +\n tokens.end +\n tokens.lineEnd);\n}\nfunction getStringifier() {\n return (block) => block.source.map(({ tokens }) => join(tokens)).join('\\n');\n}\n"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,OAAO,GAAGC,cAAc;AAChC,SAASC,IAAIA,CAACC,MAAM,EAAE;EAClB,OAAQA,MAAM,CAACC,KAAK,GAChBD,MAAM,CAACE,SAAS,GAChBF,MAAM,CAACG,aAAa,GACpBH,MAAM,CAACI,GAAG,GACVJ,MAAM,CAACK,OAAO,GACdL,MAAM,CAACM,IAAI,GACXN,MAAM,CAACO,QAAQ,GACfP,MAAM,CAACQ,IAAI,GACXR,MAAM,CAACS,QAAQ,GACfT,MAAM,CAACU,WAAW,GAClBV,MAAM,CAACW,GAAG,GACVX,MAAM,CAACY,OAAO;AACtB;AACA,SAASd,cAAcA,CAAA,EAAG;EACtB,OAAQe,KAAK,IAAKA,KAAK,CAACC,MAAM,CAACC,GAAG,CAAC,CAAC;IAAEf;EAAO,CAAC,KAAKD,IAAI,CAACC,MAAM,CAAC,CAAC,CAACD,IAAI,CAAC,IAAI,CAAC;AAC/E","ignoreList":[]}
|