comment-parser 1.4.2 → 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 +6 -0
- package/browser/index.js +671 -0
- package/lib/index.cjs +68 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.d.ts +32 -0
- package/lib/parser/block-parser.cjs +36 -0
- package/lib/parser/block-parser.cjs.map +1 -0
- package/lib/parser/block-parser.d.ts +24 -0
- package/lib/parser/index.cjs +52 -0
- package/lib/parser/index.cjs.map +1 -0
- package/lib/parser/index.d.ts +11 -0
- package/lib/parser/source-parser.cjs +56 -0
- package/lib/parser/source-parser.cjs.map +1 -0
- package/lib/parser/source-parser.d.ts +7 -0
- package/lib/parser/spec-parser.cjs +23 -0
- package/lib/parser/spec-parser.cjs.map +1 -0
- package/lib/parser/spec-parser.d.ts +7 -0
- package/lib/parser/tokenizers/description.cjs +51 -0
- package/lib/parser/tokenizers/description.cjs.map +1 -0
- package/lib/parser/tokenizers/description.d.ts +20 -0
- package/lib/parser/tokenizers/index.cjs +6 -0
- package/lib/parser/tokenizers/index.cjs.map +1 -0
- package/lib/parser/tokenizers/index.d.ts +7 -0
- package/lib/parser/tokenizers/name.cjs +103 -0
- package/lib/parser/tokenizers/name.cjs.map +1 -0
- package/lib/parser/tokenizers/name.d.ts +6 -0
- package/lib/parser/tokenizers/tag.cjs +36 -0
- package/lib/parser/tokenizers/tag.cjs.map +1 -0
- package/lib/parser/tokenizers/tag.d.ts +6 -0
- package/lib/parser/tokenizers/type.cjs +75 -0
- package/lib/parser/tokenizers/type.cjs.map +1 -0
- package/lib/parser/tokenizers/type.d.ts +27 -0
- package/lib/primitives.cjs +15 -0
- package/lib/primitives.cjs.map +1 -0
- package/lib/primitives.d.ts +54 -0
- package/lib/stringifier/index.cjs +15 -0
- package/lib/stringifier/index.cjs.map +1 -0
- package/lib/stringifier/index.d.ts +3 -0
- package/lib/stringifier/inspect.cjs +56 -0
- package/lib/stringifier/inspect.cjs.map +1 -0
- package/lib/stringifier/inspect.d.ts +2 -0
- package/lib/transforms/align.cjs +104 -0
- package/lib/transforms/align.cjs.map +1 -0
- package/lib/transforms/align.d.ts +3 -0
- package/lib/transforms/crlf.cjs +35 -0
- package/lib/transforms/crlf.cjs.map +1 -0
- package/lib/transforms/crlf.d.ts +3 -0
- package/lib/transforms/indent.cjs +45 -0
- package/lib/transforms/indent.cjs.map +1 -0
- package/lib/transforms/indent.d.ts +2 -0
- package/lib/transforms/index.cjs +10 -0
- package/lib/transforms/index.cjs.map +1 -0
- package/lib/transforms/index.d.ts +3 -0
- package/lib/util.cjs +90 -0
- package/lib/util.cjs.map +1 -0
- package/lib/util.d.ts +21 -0
- package/package.json +4 -2
package/lib/index.cjs
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return m[k];
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
} : function (o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
});
|
|
19
|
+
var __exportStar = this && this.__exportStar || function (m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
});
|
|
25
|
+
exports.util = exports.tokenizers = exports.transforms = exports.inspect = exports.stringify = void 0;
|
|
26
|
+
exports.parse = parse;
|
|
27
|
+
const index_js_1 = require("./parser/index.cjs");
|
|
28
|
+
const description_js_1 = require("./parser/tokenizers/description.cjs");
|
|
29
|
+
const name_js_1 = require("./parser/tokenizers/name.cjs");
|
|
30
|
+
const tag_js_1 = require("./parser/tokenizers/tag.cjs");
|
|
31
|
+
const type_js_1 = require("./parser/tokenizers/type.cjs");
|
|
32
|
+
const index_js_2 = require("./stringifier/index.cjs");
|
|
33
|
+
const align_js_1 = require("./transforms/align.cjs");
|
|
34
|
+
const indent_js_1 = require("./transforms/indent.cjs");
|
|
35
|
+
const crlf_js_1 = require("./transforms/crlf.cjs");
|
|
36
|
+
const index_js_3 = require("./transforms/index.cjs");
|
|
37
|
+
const util_js_1 = require("./util.cjs");
|
|
38
|
+
__exportStar(require("./primitives.cjs"), exports);
|
|
39
|
+
function parse(source, options = {}) {
|
|
40
|
+
return (0, index_js_1.default)(options)(source);
|
|
41
|
+
}
|
|
42
|
+
exports.stringify = (0, index_js_2.default)();
|
|
43
|
+
var inspect_js_1 = require("./stringifier/inspect.cjs");
|
|
44
|
+
Object.defineProperty(exports, "inspect", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
get: function () {
|
|
47
|
+
return inspect_js_1.default;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
exports.transforms = {
|
|
51
|
+
flow: index_js_3.flow,
|
|
52
|
+
align: align_js_1.default,
|
|
53
|
+
indent: indent_js_1.default,
|
|
54
|
+
crlf: crlf_js_1.default
|
|
55
|
+
};
|
|
56
|
+
exports.tokenizers = {
|
|
57
|
+
tag: tag_js_1.default,
|
|
58
|
+
type: type_js_1.default,
|
|
59
|
+
name: name_js_1.default,
|
|
60
|
+
description: description_js_1.default
|
|
61
|
+
};
|
|
62
|
+
exports.util = {
|
|
63
|
+
rewireSpecs: util_js_1.rewireSpecs,
|
|
64
|
+
rewireSource: util_js_1.rewireSource,
|
|
65
|
+
seedBlock: util_js_1.seedBlock,
|
|
66
|
+
seedTokens: util_js_1.seedTokens
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["__createBinding","Object","create","o","m","k","k2","undefined","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","defineProperty","__exportStar","exports","p","prototype","hasOwnProperty","call","value","util","tokenizers","transforms","inspect","stringify","parse","index_js_1","require","description_js_1","name_js_1","tag_js_1","type_js_1","index_js_2","align_js_1","indent_js_1","crlf_js_1","index_js_3","util_js_1","source","options","default","inspect_js_1","flow","align","indent","crlf","tag","type","name","description","rewireSpecs","rewireSource","seedBlock","seedTokens"],"sources":["index.js"],"sourcesContent":["\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.util = exports.tokenizers = exports.transforms = exports.inspect = exports.stringify = void 0;\nexports.parse = parse;\nconst index_js_1 = require(\"./parser/index.js\");\nconst description_js_1 = require(\"./parser/tokenizers/description.js\");\nconst name_js_1 = require(\"./parser/tokenizers/name.js\");\nconst tag_js_1 = require(\"./parser/tokenizers/tag.js\");\nconst type_js_1 = require(\"./parser/tokenizers/type.js\");\nconst index_js_2 = require(\"./stringifier/index.js\");\nconst align_js_1 = require(\"./transforms/align.js\");\nconst indent_js_1 = require(\"./transforms/indent.js\");\nconst crlf_js_1 = require(\"./transforms/crlf.js\");\nconst index_js_3 = require(\"./transforms/index.js\");\nconst util_js_1 = require(\"./util.js\");\n__exportStar(require(\"./primitives.js\"), exports);\nfunction parse(source, options = {}) {\n return (0, index_js_1.default)(options)(source);\n}\nexports.stringify = (0, index_js_2.default)();\nvar inspect_js_1 = require(\"./stringifier/inspect.js\");\nObject.defineProperty(exports, \"inspect\", { enumerable: true, get: function () { return inspect_js_1.default; } });\nexports.transforms = {\n flow: index_js_3.flow,\n align: align_js_1.default,\n indent: indent_js_1.default,\n crlf: crlf_js_1.default,\n};\nexports.tokenizers = {\n tag: tag_js_1.default,\n type: type_js_1.default,\n name: name_js_1.default,\n description: description_js_1.default,\n};\nexports.util = { rewireSpecs: util_js_1.rewireSpecs, rewireSource: util_js_1.rewireSource, seedBlock: util_js_1.seedBlock, seedTokens: util_js_1.seedTokens };\n"],"mappings":"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","ignoreList":[]}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Options as ParserOptions } from './parser/index.js';
|
|
2
|
+
import descriptionTokenizer from './parser/tokenizers/description.js';
|
|
3
|
+
import nameTokenizer from './parser/tokenizers/name.js';
|
|
4
|
+
import tagTokenizer from './parser/tokenizers/tag.js';
|
|
5
|
+
import typeTokenizer from './parser/tokenizers/type.js';
|
|
6
|
+
import alignTransform from './transforms/align.js';
|
|
7
|
+
import indentTransform from './transforms/indent.js';
|
|
8
|
+
import crlfTransform from './transforms/crlf.js';
|
|
9
|
+
import { flow as flowTransform } from './transforms/index.js';
|
|
10
|
+
import { rewireSpecs, rewireSource, seedBlock, seedTokens } from './util.js';
|
|
11
|
+
export * from './primitives.js';
|
|
12
|
+
export declare function parse(source: string, options?: Partial<ParserOptions>): import("./primitives.js").Block[];
|
|
13
|
+
export declare const stringify: import("./stringifier/index.js").Stringifier;
|
|
14
|
+
export { default as inspect } from './stringifier/inspect.js';
|
|
15
|
+
export declare const transforms: {
|
|
16
|
+
flow: typeof flowTransform;
|
|
17
|
+
align: typeof alignTransform;
|
|
18
|
+
indent: typeof indentTransform;
|
|
19
|
+
crlf: typeof crlfTransform;
|
|
20
|
+
};
|
|
21
|
+
export declare const tokenizers: {
|
|
22
|
+
tag: typeof tagTokenizer;
|
|
23
|
+
type: typeof typeTokenizer;
|
|
24
|
+
name: typeof nameTokenizer;
|
|
25
|
+
description: typeof descriptionTokenizer;
|
|
26
|
+
};
|
|
27
|
+
export declare const util: {
|
|
28
|
+
rewireSpecs: typeof rewireSpecs;
|
|
29
|
+
rewireSource: typeof rewireSource;
|
|
30
|
+
seedBlock: typeof seedBlock;
|
|
31
|
+
seedTokens: typeof seedTokens;
|
|
32
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = getParser;
|
|
7
|
+
const reTag = /^@\S+/;
|
|
8
|
+
/**
|
|
9
|
+
* Creates configured `Parser`
|
|
10
|
+
* @param {Partial<Options>} options
|
|
11
|
+
*/
|
|
12
|
+
function getParser({
|
|
13
|
+
fence = '```'
|
|
14
|
+
} = {}) {
|
|
15
|
+
const fencer = getFencer(fence);
|
|
16
|
+
const toggleFence = (source, isFenced) => fencer(source) ? !isFenced : isFenced;
|
|
17
|
+
return function parseBlock(source) {
|
|
18
|
+
// start with description section
|
|
19
|
+
const sections = [[]];
|
|
20
|
+
let isFenced = false;
|
|
21
|
+
for (const line of source) {
|
|
22
|
+
if (reTag.test(line.tokens.description) && !isFenced) {
|
|
23
|
+
sections.push([line]);
|
|
24
|
+
} else {
|
|
25
|
+
sections[sections.length - 1].push(line);
|
|
26
|
+
}
|
|
27
|
+
isFenced = toggleFence(line.tokens.description, isFenced);
|
|
28
|
+
}
|
|
29
|
+
return sections;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function getFencer(fence) {
|
|
33
|
+
if (typeof fence === 'string') return source => source.split(fence).length % 2 === 0;
|
|
34
|
+
return fence;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=block-parser.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-parser.cjs","names":["Object","defineProperty","exports","value","default","getParser","reTag","fence","fencer","getFencer","toggleFence","source","isFenced","parseBlock","sections","line","test","tokens","description","push","length","split"],"sources":["block-parser.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = getParser;\nconst reTag = /^@\\S+/;\n/**\n * Creates configured `Parser`\n * @param {Partial<Options>} options\n */\nfunction getParser({ fence = '```', } = {}) {\n const fencer = getFencer(fence);\n const toggleFence = (source, isFenced) => fencer(source) ? !isFenced : isFenced;\n return function parseBlock(source) {\n // start with description section\n const sections = [[]];\n let isFenced = false;\n for (const line of source) {\n if (reTag.test(line.tokens.description) && !isFenced) {\n sections.push([line]);\n }\n else {\n sections[sections.length - 1].push(line);\n }\n isFenced = toggleFence(line.tokens.description, isFenced);\n }\n return sections;\n };\n}\nfunction getFencer(fence) {\n if (typeof fence === 'string')\n return (source) => source.split(fence).length % 2 === 0;\n return fence;\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,KAAK,GAAG,OAAO;AACrB;AACA;AACA;AACA;AACA,SAASD,SAASA,CAAC;EAAEE,KAAK,GAAG;AAAO,CAAC,GAAG,CAAC,CAAC,EAAE;EACxC,MAAMC,MAAM,GAAGC,SAAS,CAACF,KAAK,CAAC;EAC/B,MAAMG,WAAW,GAAGA,CAACC,MAAM,EAAEC,QAAQ,KAAKJ,MAAM,CAACG,MAAM,CAAC,GAAG,CAACC,QAAQ,GAAGA,QAAQ;EAC/E,OAAO,SAASC,UAAUA,CAACF,MAAM,EAAE;IAC/B;IACA,MAAMG,QAAQ,GAAG,CAAC,EAAE,CAAC;IACrB,IAAIF,QAAQ,GAAG,KAAK;IACpB,KAAK,MAAMG,IAAI,IAAIJ,MAAM,EAAE;MACvB,IAAIL,KAAK,CAACU,IAAI,CAACD,IAAI,CAACE,MAAM,CAACC,WAAW,CAAC,IAAI,CAACN,QAAQ,EAAE;QAClDE,QAAQ,CAACK,IAAI,CAAC,CAACJ,IAAI,CAAC,CAAC;MACzB,CAAC,MACI;QACDD,QAAQ,CAACA,QAAQ,CAACM,MAAM,GAAG,CAAC,CAAC,CAACD,IAAI,CAACJ,IAAI,CAAC;MAC5C;MACAH,QAAQ,GAAGF,WAAW,CAACK,IAAI,CAACE,MAAM,CAACC,WAAW,EAAEN,QAAQ,CAAC;IAC7D;IACA,OAAOE,QAAQ;EACnB,CAAC;AACL;AACA,SAASL,SAASA,CAACF,KAAK,EAAE;EACtB,IAAI,OAAOA,KAAK,KAAK,QAAQ,EACzB,OAAQI,MAAM,IAAKA,MAAM,CAACU,KAAK,CAACd,KAAK,CAAC,CAACa,MAAM,GAAG,CAAC,KAAK,CAAC;EAC3D,OAAOb,KAAK;AAChB","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Line } from '../primitives.js';
|
|
2
|
+
/**
|
|
3
|
+
* Groups source lines in sections representing tags.
|
|
4
|
+
* First section is a block description if present. Last section captures lines starting with
|
|
5
|
+
* the last tag to the end of the block, including dangling closing marker.
|
|
6
|
+
* @param {Line[]} block souce lines making a single comment block
|
|
7
|
+
*/
|
|
8
|
+
export type Parser = (block: Line[]) => Line[][];
|
|
9
|
+
/**
|
|
10
|
+
* Predicate telling if string contains opening/closing escaping sequence
|
|
11
|
+
* @param {string} source raw source line
|
|
12
|
+
*/
|
|
13
|
+
export type Fencer = (source: string) => boolean;
|
|
14
|
+
/**
|
|
15
|
+
* `Parser` configuration options
|
|
16
|
+
*/
|
|
17
|
+
export interface Options {
|
|
18
|
+
fence: string | Fencer;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates configured `Parser`
|
|
22
|
+
* @param {Partial<Options>} options
|
|
23
|
+
*/
|
|
24
|
+
export default function getParser({ fence, }?: Partial<Options>): Parser;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = getParser;
|
|
7
|
+
const primitives_js_1 = require("../primitives.cjs");
|
|
8
|
+
const util_js_1 = require("../util.cjs");
|
|
9
|
+
const block_parser_js_1 = require("./block-parser.cjs");
|
|
10
|
+
const source_parser_js_1 = require("./source-parser.cjs");
|
|
11
|
+
const spec_parser_js_1 = require("./spec-parser.cjs");
|
|
12
|
+
const tag_js_1 = require("./tokenizers/tag.cjs");
|
|
13
|
+
const type_js_1 = require("./tokenizers/type.cjs");
|
|
14
|
+
const name_js_1 = require("./tokenizers/name.cjs");
|
|
15
|
+
const description_js_1 = require("./tokenizers/description.cjs");
|
|
16
|
+
function getParser({
|
|
17
|
+
startLine = 0,
|
|
18
|
+
fence = '```',
|
|
19
|
+
spacing = 'compact',
|
|
20
|
+
markers = primitives_js_1.Markers,
|
|
21
|
+
tokenizers = [(0, tag_js_1.default)(), (0, type_js_1.default)(spacing), (0, name_js_1.default)(), (0, description_js_1.default)(spacing)]
|
|
22
|
+
} = {}) {
|
|
23
|
+
if (startLine < 0 || startLine % 1 > 0) throw new Error('Invalid startLine');
|
|
24
|
+
const parseSource = (0, source_parser_js_1.default)({
|
|
25
|
+
startLine,
|
|
26
|
+
markers
|
|
27
|
+
});
|
|
28
|
+
const parseBlock = (0, block_parser_js_1.default)({
|
|
29
|
+
fence
|
|
30
|
+
});
|
|
31
|
+
const parseSpec = (0, spec_parser_js_1.default)({
|
|
32
|
+
tokenizers
|
|
33
|
+
});
|
|
34
|
+
const joinDescription = (0, description_js_1.getJoiner)(spacing);
|
|
35
|
+
return function (source) {
|
|
36
|
+
const blocks = [];
|
|
37
|
+
for (const line of (0, util_js_1.splitLines)(source)) {
|
|
38
|
+
const lines = parseSource(line);
|
|
39
|
+
if (lines === null) continue;
|
|
40
|
+
const sections = parseBlock(lines);
|
|
41
|
+
const specs = sections.slice(1).map(parseSpec);
|
|
42
|
+
blocks.push({
|
|
43
|
+
description: joinDescription(sections[0], markers),
|
|
44
|
+
tags: specs,
|
|
45
|
+
source: lines,
|
|
46
|
+
problems: specs.reduce((acc, spec) => acc.concat(spec.problems), [])
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return blocks;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Object","defineProperty","exports","value","default","getParser","primitives_js_1","require","util_js_1","block_parser_js_1","source_parser_js_1","spec_parser_js_1","tag_js_1","type_js_1","name_js_1","description_js_1","startLine","fence","spacing","markers","Markers","tokenizers","Error","parseSource","parseBlock","parseSpec","joinDescription","getJoiner","source","blocks","line","splitLines","lines","sections","specs","slice","map","push","description","tags","problems","reduce","acc","spec","concat"],"sources":["index.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\");\nconst block_parser_js_1 = require(\"./block-parser.js\");\nconst source_parser_js_1 = require(\"./source-parser.js\");\nconst spec_parser_js_1 = require(\"./spec-parser.js\");\nconst tag_js_1 = require(\"./tokenizers/tag.js\");\nconst type_js_1 = require(\"./tokenizers/type.js\");\nconst name_js_1 = require(\"./tokenizers/name.js\");\nconst description_js_1 = require(\"./tokenizers/description.js\");\nfunction getParser({ startLine = 0, fence = '```', spacing = 'compact', markers = primitives_js_1.Markers, tokenizers = [\n (0, tag_js_1.default)(),\n (0, type_js_1.default)(spacing),\n (0, name_js_1.default)(),\n (0, description_js_1.default)(spacing),\n], } = {}) {\n if (startLine < 0 || startLine % 1 > 0)\n throw new Error('Invalid startLine');\n const parseSource = (0, source_parser_js_1.default)({ startLine, markers });\n const parseBlock = (0, block_parser_js_1.default)({ fence });\n const parseSpec = (0, spec_parser_js_1.default)({ tokenizers });\n const joinDescription = (0, description_js_1.getJoiner)(spacing);\n return function (source) {\n const blocks = [];\n for (const line of (0, util_js_1.splitLines)(source)) {\n const lines = parseSource(line);\n if (lines === null)\n continue;\n const sections = parseBlock(lines);\n const specs = sections.slice(1).map(parseSpec);\n blocks.push({\n description: joinDescription(sections[0], markers),\n tags: specs,\n source: lines,\n problems: specs.reduce((acc, spec) => acc.concat(spec.problems), []),\n });\n }\n return blocks;\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,eAAe,GAAGC,OAAO,qBAAoB;AACnD,MAAMC,SAAS,GAAGD,OAAO,eAAc;AACvC,MAAME,iBAAiB,GAAGF,OAAO,sBAAqB;AACtD,MAAMG,kBAAkB,GAAGH,OAAO,uBAAsB;AACxD,MAAMI,gBAAgB,GAAGJ,OAAO,qBAAoB;AACpD,MAAMK,QAAQ,GAAGL,OAAO,wBAAuB;AAC/C,MAAMM,SAAS,GAAGN,OAAO,yBAAwB;AACjD,MAAMO,SAAS,GAAGP,OAAO,yBAAwB;AACjD,MAAMQ,gBAAgB,GAAGR,OAAO,gCAA+B;AAC/D,SAASF,SAASA,CAAC;EAAEW,SAAS,GAAG,CAAC;EAAEC,KAAK,GAAG,KAAK;EAAEC,OAAO,GAAG,SAAS;EAAEC,OAAO,GAAGb,eAAe,CAACc,OAAO;EAAEC,UAAU,GAAG,CACpH,CAAC,CAAC,EAAET,QAAQ,CAACR,OAAO,EAAE,CAAC,EACvB,CAAC,CAAC,EAAES,SAAS,CAACT,OAAO,EAAEc,OAAO,CAAC,EAC/B,CAAC,CAAC,EAAEJ,SAAS,CAACV,OAAO,EAAE,CAAC,EACxB,CAAC,CAAC,EAAEW,gBAAgB,CAACX,OAAO,EAAEc,OAAO,CAAC;AACvC,CAAC,GAAG,CAAC,CAAC,EAAE;EACP,IAAIF,SAAS,GAAG,CAAC,IAAIA,SAAS,GAAG,CAAC,GAAG,CAAC,EAClC,MAAM,IAAIM,KAAK,CAAC,mBAAmB,CAAC;EACxC,MAAMC,WAAW,GAAG,CAAC,CAAC,EAAEb,kBAAkB,CAACN,OAAO,EAAE;IAAEY,SAAS;IAAEG;EAAQ,CAAC,CAAC;EAC3E,MAAMK,UAAU,GAAG,CAAC,CAAC,EAAEf,iBAAiB,CAACL,OAAO,EAAE;IAAEa;EAAM,CAAC,CAAC;EAC5D,MAAMQ,SAAS,GAAG,CAAC,CAAC,EAAEd,gBAAgB,CAACP,OAAO,EAAE;IAAEiB;EAAW,CAAC,CAAC;EAC/D,MAAMK,eAAe,GAAG,CAAC,CAAC,EAAEX,gBAAgB,CAACY,SAAS,EAAET,OAAO,CAAC;EAChE,OAAO,UAAUU,MAAM,EAAE;IACrB,MAAMC,MAAM,GAAG,EAAE;IACjB,KAAK,MAAMC,IAAI,IAAI,CAAC,CAAC,EAAEtB,SAAS,CAACuB,UAAU,EAAEH,MAAM,CAAC,EAAE;MAClD,MAAMI,KAAK,GAAGT,WAAW,CAACO,IAAI,CAAC;MAC/B,IAAIE,KAAK,KAAK,IAAI,EACd;MACJ,MAAMC,QAAQ,GAAGT,UAAU,CAACQ,KAAK,CAAC;MAClC,MAAME,KAAK,GAAGD,QAAQ,CAACE,KAAK,CAAC,CAAC,CAAC,CAACC,GAAG,CAACX,SAAS,CAAC;MAC9CI,MAAM,CAACQ,IAAI,CAAC;QACRC,WAAW,EAAEZ,eAAe,CAACO,QAAQ,CAAC,CAAC,CAAC,EAAEd,OAAO,CAAC;QAClDoB,IAAI,EAAEL,KAAK;QACXN,MAAM,EAAEI,KAAK;QACbQ,QAAQ,EAAEN,KAAK,CAACO,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI,KAAKD,GAAG,CAACE,MAAM,CAACD,IAAI,CAACH,QAAQ,CAAC,EAAE,EAAE;MACvE,CAAC,CAAC;IACN;IACA,OAAOX,MAAM;EACjB,CAAC;AACL","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Block, BlockMarkers } from '../primitives.js';
|
|
2
|
+
import { Tokenizer } from './tokenizers/index.js';
|
|
3
|
+
export interface Options {
|
|
4
|
+
startLine: number;
|
|
5
|
+
fence: string;
|
|
6
|
+
spacing: 'compact' | 'preserve';
|
|
7
|
+
markers: BlockMarkers;
|
|
8
|
+
tokenizers: Tokenizer[];
|
|
9
|
+
}
|
|
10
|
+
export type Parser = (source: string) => Block[];
|
|
11
|
+
export default function getParser({ startLine, fence, spacing, markers, tokenizers, }?: Partial<Options>): Parser;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = getParser;
|
|
7
|
+
const primitives_js_1 = require("../primitives.cjs");
|
|
8
|
+
const util_js_1 = require("../util.cjs");
|
|
9
|
+
function getParser({
|
|
10
|
+
startLine = 0,
|
|
11
|
+
markers = primitives_js_1.Markers
|
|
12
|
+
} = {}) {
|
|
13
|
+
let block = null;
|
|
14
|
+
let num = startLine;
|
|
15
|
+
return function parseSource(source) {
|
|
16
|
+
let rest = source;
|
|
17
|
+
const tokens = (0, util_js_1.seedTokens)();
|
|
18
|
+
[tokens.lineEnd, rest] = (0, util_js_1.splitCR)(rest);
|
|
19
|
+
[tokens.start, rest] = (0, util_js_1.splitSpace)(rest);
|
|
20
|
+
if (block === null && rest.startsWith(markers.start) && !rest.startsWith(markers.nostart)) {
|
|
21
|
+
block = [];
|
|
22
|
+
tokens.delimiter = rest.slice(0, markers.start.length);
|
|
23
|
+
rest = rest.slice(markers.start.length);
|
|
24
|
+
[tokens.postDelimiter, rest] = (0, util_js_1.splitSpace)(rest);
|
|
25
|
+
}
|
|
26
|
+
if (block === null) {
|
|
27
|
+
num++;
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const isClosed = rest.trimRight().endsWith(markers.end);
|
|
31
|
+
if (tokens.delimiter === '' && rest.startsWith(markers.delim) && !rest.startsWith(markers.end)) {
|
|
32
|
+
tokens.delimiter = markers.delim;
|
|
33
|
+
rest = rest.slice(markers.delim.length);
|
|
34
|
+
[tokens.postDelimiter, rest] = (0, util_js_1.splitSpace)(rest);
|
|
35
|
+
}
|
|
36
|
+
if (isClosed) {
|
|
37
|
+
const trimmed = rest.trimRight();
|
|
38
|
+
tokens.end = rest.slice(trimmed.length - markers.end.length);
|
|
39
|
+
rest = trimmed.slice(0, -markers.end.length);
|
|
40
|
+
}
|
|
41
|
+
tokens.description = rest;
|
|
42
|
+
block.push({
|
|
43
|
+
number: num,
|
|
44
|
+
source,
|
|
45
|
+
tokens
|
|
46
|
+
});
|
|
47
|
+
num++;
|
|
48
|
+
if (isClosed) {
|
|
49
|
+
const result = block.slice();
|
|
50
|
+
block = null;
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=source-parser.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Line, BlockMarkers } from '../primitives.js';
|
|
2
|
+
export interface Options {
|
|
3
|
+
startLine: number;
|
|
4
|
+
markers: BlockMarkers;
|
|
5
|
+
}
|
|
6
|
+
export type Parser = (source: string) => Line[] | null;
|
|
7
|
+
export default function getParser({ startLine, markers, }?: Partial<Options>): Parser;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = getParser;
|
|
7
|
+
const util_js_1 = require("../util.cjs");
|
|
8
|
+
function getParser({
|
|
9
|
+
tokenizers
|
|
10
|
+
}) {
|
|
11
|
+
return function parseSpec(source) {
|
|
12
|
+
var _a;
|
|
13
|
+
let spec = (0, util_js_1.seedSpec)({
|
|
14
|
+
source
|
|
15
|
+
});
|
|
16
|
+
for (const tokenize of tokenizers) {
|
|
17
|
+
spec = tokenize(spec);
|
|
18
|
+
if ((_a = spec.problems[spec.problems.length - 1]) === null || _a === void 0 ? void 0 : _a.critical) break;
|
|
19
|
+
}
|
|
20
|
+
return spec;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=spec-parser.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Line, Spec } from '../primitives.js';
|
|
2
|
+
import { Tokenizer } from './tokenizers/index.js';
|
|
3
|
+
export type Parser = (source: Line[]) => Spec;
|
|
4
|
+
export interface Options {
|
|
5
|
+
tokenizers: Tokenizer[];
|
|
6
|
+
}
|
|
7
|
+
export default function getParser({ tokenizers }: Options): Parser;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = descriptionTokenizer;
|
|
7
|
+
exports.getJoiner = getJoiner;
|
|
8
|
+
const primitives_js_1 = require("../../primitives.cjs");
|
|
9
|
+
/**
|
|
10
|
+
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
|
|
11
|
+
* following given spacing srtategy
|
|
12
|
+
* @param {Spacing} spacing tells how to handle the whitespace
|
|
13
|
+
* @param {BlockMarkers} markers tells how to handle comment block delimitation
|
|
14
|
+
*/
|
|
15
|
+
function descriptionTokenizer(spacing = 'compact', markers = primitives_js_1.Markers) {
|
|
16
|
+
const join = getJoiner(spacing);
|
|
17
|
+
return spec => {
|
|
18
|
+
spec.description = join(spec.source, markers);
|
|
19
|
+
return spec;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function getJoiner(spacing) {
|
|
23
|
+
if (spacing === 'compact') return compactJoiner;
|
|
24
|
+
if (spacing === 'preserve') return preserveJoiner;
|
|
25
|
+
return spacing;
|
|
26
|
+
}
|
|
27
|
+
function compactJoiner(lines, markers = primitives_js_1.Markers) {
|
|
28
|
+
return lines.map(({
|
|
29
|
+
tokens: {
|
|
30
|
+
description
|
|
31
|
+
}
|
|
32
|
+
}) => description.trim()).filter(description => description !== '').join(' ');
|
|
33
|
+
}
|
|
34
|
+
const lineNo = (num, {
|
|
35
|
+
tokens
|
|
36
|
+
}, i) => tokens.type === '' ? num : i;
|
|
37
|
+
const getDescription = ({
|
|
38
|
+
tokens
|
|
39
|
+
}) => (tokens.delimiter === '' ? tokens.start : tokens.postDelimiter.slice(1)) + tokens.description;
|
|
40
|
+
function preserveJoiner(lines, markers = primitives_js_1.Markers) {
|
|
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
|
|
45
|
+
const lastLine = lines[lines.length - 1];
|
|
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
|
|
48
|
+
lines = lines.slice(lines.reduce(lineNo, 0));
|
|
49
|
+
return lines.map(getDescription).join('\n');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=description.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Line, BlockMarkers, Markers } from '../../primitives.js';
|
|
2
|
+
import { Tokenizer } from './index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Walks over provided lines joining description token into a single string.
|
|
5
|
+
* */
|
|
6
|
+
export type Joiner = (lines: Line[], markers?: BlockMarkers) => string;
|
|
7
|
+
/**
|
|
8
|
+
* Shortcut for standard Joiners
|
|
9
|
+
* compact - strip surrounding whitespace and concat lines using a single string
|
|
10
|
+
* preserve - preserves original whitespace and line breaks as is
|
|
11
|
+
*/
|
|
12
|
+
export type Spacing = 'compact' | 'preserve' | Joiner;
|
|
13
|
+
/**
|
|
14
|
+
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
|
|
15
|
+
* following given spacing srtategy
|
|
16
|
+
* @param {Spacing} spacing tells how to handle the whitespace
|
|
17
|
+
* @param {BlockMarkers} markers tells how to handle comment block delimitation
|
|
18
|
+
*/
|
|
19
|
+
export default function descriptionTokenizer(spacing?: Spacing, markers?: typeof Markers): Tokenizer;
|
|
20
|
+
export declare function getJoiner(spacing: Spacing): Joiner;
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Spec } from '../../primitives.js';
|
|
2
|
+
/**
|
|
3
|
+
* Splits `spect.lines[].token.description` into other tokens,
|
|
4
|
+
* and populates the spec.{tag, name, type, description}. Invoked in a chaing
|
|
5
|
+
* with other tokens, operations listed above can be moved to separate tokenizers
|
|
6
|
+
*/
|
|
7
|
+
export type Tokenizer = (spec: Spec) => Spec;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = nameTokenizer;
|
|
7
|
+
const util_js_1 = require("../../util.cjs");
|
|
8
|
+
const isQuoted = s => s && s.startsWith('"') && s.endsWith('"');
|
|
9
|
+
/**
|
|
10
|
+
* Splits remaining `spec.lines[].tokens.description` into `name` and `descriptions` tokens,
|
|
11
|
+
* and populates the `spec.name`
|
|
12
|
+
*/
|
|
13
|
+
function nameTokenizer() {
|
|
14
|
+
const typeEnd = (num, {
|
|
15
|
+
tokens
|
|
16
|
+
}, i) => tokens.type === '' ? num : i;
|
|
17
|
+
return spec => {
|
|
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
|
|
33
|
+
if (quotedGroups.length > 1 && quotedGroups[0] === '' && quotedGroups.length % 2 === 1) {
|
|
34
|
+
spec.name = quotedGroups[1];
|
|
35
|
+
tokens.name = `"${quotedGroups[1]}"`;
|
|
36
|
+
[tokens.postName, tokens.description] = (0, util_js_1.splitSpace)(source.slice(tokens.name.length));
|
|
37
|
+
return spec;
|
|
38
|
+
}
|
|
39
|
+
let brackets = 0;
|
|
40
|
+
let name = '';
|
|
41
|
+
let optional = false;
|
|
42
|
+
let defaultValue;
|
|
43
|
+
// assume name is non-space string or anything wrapped into brackets
|
|
44
|
+
for (const ch of source) {
|
|
45
|
+
if (brackets === 0 && (0, util_js_1.isSpace)(ch)) break;
|
|
46
|
+
if (ch === '[') brackets++;
|
|
47
|
+
if (ch === ']') brackets--;
|
|
48
|
+
name += ch;
|
|
49
|
+
}
|
|
50
|
+
if (brackets !== 0) {
|
|
51
|
+
spec.problems.push({
|
|
52
|
+
code: 'spec:name:unpaired-brackets',
|
|
53
|
+
message: 'unpaired brackets',
|
|
54
|
+
line: spec.source[0].number,
|
|
55
|
+
critical: true
|
|
56
|
+
});
|
|
57
|
+
return spec;
|
|
58
|
+
}
|
|
59
|
+
const nameToken = name;
|
|
60
|
+
if (name[0] === '[' && name[name.length - 1] === ']') {
|
|
61
|
+
optional = true;
|
|
62
|
+
name = name.slice(1, -1);
|
|
63
|
+
const parts = name.split('=');
|
|
64
|
+
name = parts[0].trim();
|
|
65
|
+
if (parts[1] !== undefined) defaultValue = parts.slice(1).join('=').trim();
|
|
66
|
+
if (name === '') {
|
|
67
|
+
spec.problems.push({
|
|
68
|
+
code: 'spec:name:empty-name',
|
|
69
|
+
message: 'empty name',
|
|
70
|
+
line: spec.source[0].number,
|
|
71
|
+
critical: true
|
|
72
|
+
});
|
|
73
|
+
return spec;
|
|
74
|
+
}
|
|
75
|
+
if (defaultValue === '') {
|
|
76
|
+
spec.problems.push({
|
|
77
|
+
code: 'spec:name:empty-default',
|
|
78
|
+
message: 'empty default value',
|
|
79
|
+
line: spec.source[0].number,
|
|
80
|
+
critical: true
|
|
81
|
+
});
|
|
82
|
+
return spec;
|
|
83
|
+
}
|
|
84
|
+
// has "=" and is not a string, except for "=>"
|
|
85
|
+
if (!isQuoted(defaultValue) && /=(?!>)/.test(defaultValue)) {
|
|
86
|
+
spec.problems.push({
|
|
87
|
+
code: 'spec:name:invalid-default',
|
|
88
|
+
message: 'invalid default value syntax',
|
|
89
|
+
line: spec.source[0].number,
|
|
90
|
+
critical: true
|
|
91
|
+
});
|
|
92
|
+
return spec;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
spec.optional = optional;
|
|
96
|
+
spec.name = name;
|
|
97
|
+
tokens.name = nameToken;
|
|
98
|
+
if (defaultValue !== undefined) spec.default = defaultValue;
|
|
99
|
+
[tokens.postName, tokens.description] = (0, util_js_1.splitSpace)(source.slice(tokens.name.length));
|
|
100
|
+
return spec;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=name.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|