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.
Files changed (57) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/browser/index.js +671 -0
  3. package/lib/index.cjs +68 -0
  4. package/lib/index.cjs.map +1 -0
  5. package/lib/index.d.ts +32 -0
  6. package/lib/parser/block-parser.cjs +36 -0
  7. package/lib/parser/block-parser.cjs.map +1 -0
  8. package/lib/parser/block-parser.d.ts +24 -0
  9. package/lib/parser/index.cjs +52 -0
  10. package/lib/parser/index.cjs.map +1 -0
  11. package/lib/parser/index.d.ts +11 -0
  12. package/lib/parser/source-parser.cjs +56 -0
  13. package/lib/parser/source-parser.cjs.map +1 -0
  14. package/lib/parser/source-parser.d.ts +7 -0
  15. package/lib/parser/spec-parser.cjs +23 -0
  16. package/lib/parser/spec-parser.cjs.map +1 -0
  17. package/lib/parser/spec-parser.d.ts +7 -0
  18. package/lib/parser/tokenizers/description.cjs +51 -0
  19. package/lib/parser/tokenizers/description.cjs.map +1 -0
  20. package/lib/parser/tokenizers/description.d.ts +20 -0
  21. package/lib/parser/tokenizers/index.cjs +6 -0
  22. package/lib/parser/tokenizers/index.cjs.map +1 -0
  23. package/lib/parser/tokenizers/index.d.ts +7 -0
  24. package/lib/parser/tokenizers/name.cjs +103 -0
  25. package/lib/parser/tokenizers/name.cjs.map +1 -0
  26. package/lib/parser/tokenizers/name.d.ts +6 -0
  27. package/lib/parser/tokenizers/tag.cjs +36 -0
  28. package/lib/parser/tokenizers/tag.cjs.map +1 -0
  29. package/lib/parser/tokenizers/tag.d.ts +6 -0
  30. package/lib/parser/tokenizers/type.cjs +75 -0
  31. package/lib/parser/tokenizers/type.cjs.map +1 -0
  32. package/lib/parser/tokenizers/type.d.ts +27 -0
  33. package/lib/primitives.cjs +15 -0
  34. package/lib/primitives.cjs.map +1 -0
  35. package/lib/primitives.d.ts +54 -0
  36. package/lib/stringifier/index.cjs +15 -0
  37. package/lib/stringifier/index.cjs.map +1 -0
  38. package/lib/stringifier/index.d.ts +3 -0
  39. package/lib/stringifier/inspect.cjs +56 -0
  40. package/lib/stringifier/inspect.cjs.map +1 -0
  41. package/lib/stringifier/inspect.d.ts +2 -0
  42. package/lib/transforms/align.cjs +104 -0
  43. package/lib/transforms/align.cjs.map +1 -0
  44. package/lib/transforms/align.d.ts +3 -0
  45. package/lib/transforms/crlf.cjs +35 -0
  46. package/lib/transforms/crlf.cjs.map +1 -0
  47. package/lib/transforms/crlf.d.ts +3 -0
  48. package/lib/transforms/indent.cjs +45 -0
  49. package/lib/transforms/indent.cjs.map +1 -0
  50. package/lib/transforms/indent.d.ts +2 -0
  51. package/lib/transforms/index.cjs +10 -0
  52. package/lib/transforms/index.cjs.map +1 -0
  53. package/lib/transforms/index.d.ts +3 -0
  54. package/lib/util.cjs +90 -0
  55. package/lib/util.cjs.map +1 -0
  56. package/lib/util.d.ts +21 -0
  57. 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":"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,SAASF,SAASA,CAAC;EAAEI,SAAS,GAAG,CAAC;EAAEC,OAAO,GAAGJ,eAAe,CAACK;AAAS,CAAC,GAAG,CAAC,CAAC,EAAE;EAC3E,IAAIC,KAAK,GAAG,IAAI;EAChB,IAAIC,GAAG,GAAGJ,SAAS;EACnB,OAAO,SAASK,WAAWA,CAACC,MAAM,EAAE;IAChC,IAAIC,IAAI,GAAGD,MAAM;IACjB,MAAME,MAAM,GAAG,CAAC,CAAC,EAAET,SAAS,CAACU,UAAU,EAAE,CAAC;IAC1C,CAACD,MAAM,CAACE,OAAO,EAAEH,IAAI,CAAC,GAAG,CAAC,CAAC,EAAER,SAAS,CAACY,OAAO,EAAEJ,IAAI,CAAC;IACrD,CAACC,MAAM,CAACI,KAAK,EAAEL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAER,SAAS,CAACc,UAAU,EAAEN,IAAI,CAAC;IACtD,IAAIJ,KAAK,KAAK,IAAI,IACdI,IAAI,CAACO,UAAU,CAACb,OAAO,CAACW,KAAK,CAAC,IAC9B,CAACL,IAAI,CAACO,UAAU,CAACb,OAAO,CAACc,OAAO,CAAC,EAAE;MACnCZ,KAAK,GAAG,EAAE;MACVK,MAAM,CAACQ,SAAS,GAAGT,IAAI,CAACU,KAAK,CAAC,CAAC,EAAEhB,OAAO,CAACW,KAAK,CAACM,MAAM,CAAC;MACtDX,IAAI,GAAGA,IAAI,CAACU,KAAK,CAAChB,OAAO,CAACW,KAAK,CAACM,MAAM,CAAC;MACvC,CAACV,MAAM,CAACW,aAAa,EAAEZ,IAAI,CAAC,GAAG,CAAC,CAAC,EAAER,SAAS,CAACc,UAAU,EAAEN,IAAI,CAAC;IAClE;IACA,IAAIJ,KAAK,KAAK,IAAI,EAAE;MAChBC,GAAG,EAAE;MACL,OAAO,IAAI;IACf;IACA,MAAMgB,QAAQ,GAAGb,IAAI,CAACc,SAAS,CAAC,CAAC,CAACC,QAAQ,CAACrB,OAAO,CAACsB,GAAG,CAAC;IACvD,IAAIf,MAAM,CAACQ,SAAS,KAAK,EAAE,IACvBT,IAAI,CAACO,UAAU,CAACb,OAAO,CAACuB,KAAK,CAAC,IAC9B,CAACjB,IAAI,CAACO,UAAU,CAACb,OAAO,CAACsB,GAAG,CAAC,EAAE;MAC/Bf,MAAM,CAACQ,SAAS,GAAGf,OAAO,CAACuB,KAAK;MAChCjB,IAAI,GAAGA,IAAI,CAACU,KAAK,CAAChB,OAAO,CAACuB,KAAK,CAACN,MAAM,CAAC;MACvC,CAACV,MAAM,CAACW,aAAa,EAAEZ,IAAI,CAAC,GAAG,CAAC,CAAC,EAAER,SAAS,CAACc,UAAU,EAAEN,IAAI,CAAC;IAClE;IACA,IAAIa,QAAQ,EAAE;MACV,MAAMK,OAAO,GAAGlB,IAAI,CAACc,SAAS,CAAC,CAAC;MAChCb,MAAM,CAACe,GAAG,GAAGhB,IAAI,CAACU,KAAK,CAACQ,OAAO,CAACP,MAAM,GAAGjB,OAAO,CAACsB,GAAG,CAACL,MAAM,CAAC;MAC5DX,IAAI,GAAGkB,OAAO,CAACR,KAAK,CAAC,CAAC,EAAE,CAAChB,OAAO,CAACsB,GAAG,CAACL,MAAM,CAAC;IAChD;IACAV,MAAM,CAACkB,WAAW,GAAGnB,IAAI;IACzBJ,KAAK,CAACwB,IAAI,CAAC;MAAEC,MAAM,EAAExB,GAAG;MAAEE,MAAM;MAAEE;IAAO,CAAC,CAAC;IAC3CJ,GAAG,EAAE;IACL,IAAIgB,QAAQ,EAAE;MACV,MAAMS,MAAM,GAAG1B,KAAK,CAACc,KAAK,CAAC,CAAC;MAC5Bd,KAAK,GAAG,IAAI;MACZ,OAAO0B,MAAM;IACjB;IACA,OAAO,IAAI;EACf,CAAC;AACL","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,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.cjs.map
@@ -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":[]}
@@ -0,0 +1,6 @@
1
+ import { Tokenizer } from './index.js';
2
+ /**
3
+ * Splits remaining `spec.lines[].tokens.description` into `name` and `descriptions` tokens,
4
+ * and populates the `spec.name`
5
+ */
6
+ export default function nameTokenizer(): Tokenizer;