comment-parser 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -2
- package/browser/index.js +31 -10
- package/es6/parser/tokenizers/name.js +11 -3
- package/es6/parser/tokenizers/tag.js +3 -0
- package/es6/parser/tokenizers/type.d.ts +1 -1
- package/es6/parser/tokenizers/type.js +15 -3
- package/es6/primitives.js +1 -1
- package/jest.config.cjs +5 -7
- package/lib/index.cjs +2 -22
- package/lib/index.cjs.map +1 -1
- package/lib/parser/block-parser.cjs +1 -9
- package/lib/parser/block-parser.cjs.map +1 -1
- package/lib/parser/index.cjs +1 -14
- package/lib/parser/index.cjs.map +1 -1
- package/lib/parser/source-parser.cjs +1 -13
- package/lib/parser/source-parser.cjs.map +1 -1
- package/lib/parser/spec-parser.cjs +1 -7
- package/lib/parser/spec-parser.cjs.map +1 -1
- package/lib/parser/tokenizers/description.cjs +8 -19
- package/lib/parser/tokenizers/description.cjs.map +1 -1
- package/lib/parser/tokenizers/index.cjs.map +1 -1
- package/lib/parser/tokenizers/name.cjs +20 -26
- package/lib/parser/tokenizers/name.cjs.map +1 -1
- package/lib/parser/tokenizers/tag.cjs +4 -5
- package/lib/parser/tokenizers/tag.cjs.map +1 -1
- package/lib/parser/tokenizers/type.cjs +16 -20
- package/lib/parser/tokenizers/type.cjs.map +1 -1
- package/lib/parser/tokenizers/type.d.ts +1 -1
- package/lib/primitives.cjs +1 -3
- package/lib/primitives.cjs.map +1 -1
- package/lib/stringifier/index.cjs +1 -4
- package/lib/stringifier/index.cjs.map +1 -1
- package/lib/stringifier/inspect.cjs +1 -17
- package/lib/stringifier/inspect.cjs.map +1 -1
- package/lib/transforms/align.cjs +6 -29
- package/lib/transforms/align.cjs.map +1 -1
- package/lib/transforms/crlf.cjs +4 -13
- package/lib/transforms/crlf.cjs.map +1 -1
- package/lib/transforms/indent.cjs +4 -17
- package/lib/transforms/indent.cjs.map +1 -1
- package/lib/transforms/index.cjs +1 -4
- package/lib/transforms/index.cjs.map +1 -1
- package/lib/util.cjs +10 -33
- package/lib/util.cjs.map +1 -1
- package/package.json +17 -11
- package/src/parser/tokenizers/name.ts +13 -3
- package/src/parser/tokenizers/tag.ts +4 -0
- package/src/parser/tokenizers/type.ts +16 -3
- package/tests/unit/parser.spec.ts +234 -0
- package/tests/unit/spec-tag-tokenizer.spec.ts +30 -0
- package/tsconfig.node.json +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,63 +1,95 @@
|
|
|
1
1
|
# v1.4.1
|
|
2
|
+
|
|
3
|
+
## 1.4.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Add prepare and prepublishOnly scripts to ensure build runs before publishing
|
|
8
|
+
|
|
9
|
+
## 1.4.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- npm audit
|
|
14
|
+
- ensure type, name and description on subsequent lines are properly parsed. @brettz9
|
|
15
|
+
- ensure type, name and description on subsequent lines are properly parsed. @brettz9
|
|
2
16
|
- fix .prettierignore
|
|
3
17
|
- add source trasformation example
|
|
4
18
|
|
|
5
19
|
# v1.4.0
|
|
20
|
+
|
|
6
21
|
- ESM compatibility improvements; fixes #159, #161
|
|
7
22
|
|
|
8
23
|
# v1.3.1
|
|
24
|
+
|
|
9
25
|
- allow for valid empty jsdoc; fixes #128
|
|
10
26
|
|
|
11
27
|
# v1.3.0
|
|
28
|
+
|
|
12
29
|
- add support for custom block markers
|
|
13
30
|
|
|
14
31
|
# v1.2.4
|
|
32
|
+
|
|
15
33
|
- reverting engine constraint back to ^12.0.0
|
|
16
34
|
|
|
17
35
|
# v1.2.3
|
|
36
|
+
|
|
18
37
|
- publishing missing fix: point package's main to .cjs file
|
|
19
38
|
|
|
20
39
|
# v1.2.2
|
|
40
|
+
|
|
21
41
|
- re-export ./util on the top-level for compatibility with older Node
|
|
22
42
|
- point package's main to .cjs file
|
|
23
43
|
|
|
24
44
|
# v1.2.1
|
|
45
|
+
|
|
25
46
|
- bump `engines` per `exports` issues in earlier Node versions
|
|
26
47
|
|
|
27
48
|
# v1.2.0
|
|
49
|
+
|
|
28
50
|
- keep and handle appropriately CR line endings
|
|
29
51
|
|
|
30
52
|
# v1.1.6-beta.3
|
|
53
|
+
|
|
31
54
|
- process CRs as a separate .lineEnd toke
|
|
32
55
|
|
|
33
56
|
# v1.1.6-beta.2
|
|
57
|
+
|
|
34
58
|
- ESM/CJS compatibility fixes
|
|
35
59
|
|
|
36
60
|
# v1.1.6-beta.1
|
|
61
|
+
|
|
37
62
|
- support native ESM
|
|
38
63
|
|
|
39
64
|
# v1.1.6-beta.0
|
|
65
|
+
|
|
40
66
|
- keep original CR line endings
|
|
41
67
|
- allow to normalize line endings with `crlf` transform
|
|
42
68
|
|
|
43
69
|
# v1.1.5
|
|
70
|
+
|
|
44
71
|
- drop unused variables
|
|
45
72
|
- add .editorconfig
|
|
46
73
|
|
|
47
74
|
# v1.1.4
|
|
75
|
+
|
|
48
76
|
- `bugfix` fix unsynced lib/
|
|
49
77
|
|
|
50
78
|
# v1.1.3
|
|
79
|
+
|
|
51
80
|
- export primitive type on the top level: Markers, Block, Spec, Line, Tokens, Problem
|
|
52
81
|
|
|
53
82
|
# v1.1.2
|
|
83
|
+
|
|
54
84
|
- `bugfix` Allow to build nested tags from `name.subname` even if `name` wasn't d
|
|
55
85
|
- `bugfix` Preserve indentation when extracting comments
|
|
56
86
|
|
|
57
87
|
# v1.1.1
|
|
88
|
+
|
|
58
89
|
- add helpers for rewiring Spec.source <-> Spec.tags.source
|
|
59
90
|
|
|
60
91
|
# v1.1.0
|
|
92
|
+
|
|
61
93
|
- split tokenizers into separate modules
|
|
62
94
|
- allow multiline {type} definitions - issue #109
|
|
63
95
|
- allow using "=>" in [name=default] defaults – issue #112
|
|
@@ -65,75 +97,97 @@
|
|
|
65
97
|
- add tokenizers usage example - issue #111
|
|
66
98
|
|
|
67
99
|
# v1.0.0
|
|
100
|
+
|
|
68
101
|
- complete rewrite in TS with more flexible API
|
|
69
102
|
|
|
70
103
|
# v0.7.6
|
|
104
|
+
|
|
71
105
|
- distinct non-critical errors by providing `err.warning`
|
|
72
106
|
|
|
73
107
|
# v0.7.5
|
|
108
|
+
|
|
74
109
|
- name parsing fixes
|
|
75
110
|
|
|
76
111
|
# v0.7.4
|
|
112
|
+
|
|
77
113
|
- node 8 backward compatibility fixes
|
|
78
114
|
|
|
79
115
|
# v0.7.3
|
|
116
|
+
|
|
80
117
|
- make stringify result more close to the source
|
|
81
118
|
|
|
82
119
|
# v0.7.2
|
|
83
|
-
|
|
120
|
+
|
|
121
|
+
- make stringify to start each line with \* in multiline comments
|
|
84
122
|
|
|
85
123
|
# v0.7.1
|
|
124
|
+
|
|
86
125
|
- ensure non-space characters after asterisk are included in source
|
|
87
126
|
|
|
88
127
|
# v0.7.0
|
|
128
|
+
|
|
89
129
|
- allow fenced blocks in tag description, see opts.fence
|
|
90
130
|
|
|
91
131
|
# v0.6.2
|
|
132
|
+
|
|
92
133
|
- document TypeScript definitions
|
|
93
134
|
|
|
94
135
|
# v0.6.1
|
|
136
|
+
|
|
95
137
|
- adjust strigifier indentation
|
|
96
138
|
|
|
97
139
|
# v0.6.0
|
|
140
|
+
|
|
98
141
|
- soft-drop node@6 support
|
|
99
142
|
- migrate to ES6 syntax
|
|
100
143
|
- allow to generate comments out of parsed data
|
|
101
144
|
|
|
102
145
|
# v0.5.5
|
|
146
|
+
|
|
103
147
|
- allow loose tag names, e.g. @.tag, @-tag
|
|
104
148
|
|
|
105
149
|
# v0.5.4
|
|
150
|
+
|
|
106
151
|
- allow quoted literal names, e.g. `@tag "My Var" description`
|
|
107
152
|
|
|
108
153
|
# v0.5.3
|
|
154
|
+
|
|
109
155
|
- corrected TypeScript definitions
|
|
110
156
|
|
|
111
157
|
# v0.5.2
|
|
158
|
+
|
|
112
159
|
- added TypeScript definitions
|
|
113
160
|
- removed `readable-stream` dependency
|
|
114
161
|
|
|
115
162
|
# v0.5.1
|
|
163
|
+
|
|
116
164
|
- Support for tab as separator between tag components.
|
|
117
165
|
- Docs: Indicate when `optional` is `true`; `default` property
|
|
118
166
|
|
|
119
167
|
# v0.5.0
|
|
168
|
+
|
|
120
169
|
- line wrapping control with `opts.join`
|
|
121
170
|
|
|
122
171
|
# v0.4.2
|
|
172
|
+
|
|
123
173
|
- tolerate inconsistent lines alignment within block
|
|
124
174
|
|
|
125
175
|
# v0.4.1
|
|
126
|
-
|
|
176
|
+
|
|
177
|
+
- refactored parsing, allow to not start lines with "\* " inside block
|
|
127
178
|
|
|
128
179
|
# v0.3.2
|
|
180
|
+
|
|
129
181
|
- fix RegExp for `description` extraction to allow $ char
|
|
130
182
|
|
|
131
183
|
# v0.3.1
|
|
184
|
+
|
|
132
185
|
- use `readable-stream` fro Node 0.8 comatibility
|
|
133
186
|
- allow to pass optional parameters to `parse.file(path [,opts], done)`
|
|
134
187
|
- allow `parse.stream` to work with Buffers in addition to strings
|
|
135
188
|
|
|
136
189
|
# v0.3.0
|
|
190
|
+
|
|
137
191
|
- `feature` allow to use custom parsers
|
|
138
192
|
- `feature` always include source, no `raw_value` option needed
|
|
139
193
|
- `bugfix` always provide `optional` tag property
|
package/browser/index.js
CHANGED
|
@@ -8,7 +8,7 @@ var CommentParser = (function (exports) {
|
|
|
8
8
|
Markers["nostart"] = "/***";
|
|
9
9
|
Markers["delim"] = "*";
|
|
10
10
|
Markers["end"] = "*/";
|
|
11
|
-
})(exports.Markers
|
|
11
|
+
})(exports.Markers || (exports.Markers = {}));
|
|
12
12
|
|
|
13
13
|
function isSpace(source) {
|
|
14
14
|
return /^\s+$/.test(source);
|
|
@@ -165,6 +165,9 @@ var CommentParser = (function (exports) {
|
|
|
165
165
|
});
|
|
166
166
|
return spec;
|
|
167
167
|
}
|
|
168
|
+
if (match[1].includes('/')) {
|
|
169
|
+
return spec;
|
|
170
|
+
}
|
|
168
171
|
tokens.tag = match[1];
|
|
169
172
|
tokens.postTag = match[3];
|
|
170
173
|
tokens.description = tokens.description.slice(match[0].length);
|
|
@@ -174,7 +177,7 @@ var CommentParser = (function (exports) {
|
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
/**
|
|
177
|
-
* Sets splits remaining `Spec.lines[].
|
|
180
|
+
* Sets splits remaining `Spec.lines[].tokens.description` into `type` and `description`
|
|
178
181
|
* tokens and populates Spec.type`
|
|
179
182
|
*
|
|
180
183
|
* @param {Spacing} spacing tells how to deal with a whitespace
|
|
@@ -185,10 +188,19 @@ var CommentParser = (function (exports) {
|
|
|
185
188
|
return (spec) => {
|
|
186
189
|
let curlies = 0;
|
|
187
190
|
let lines = [];
|
|
188
|
-
|
|
191
|
+
let descriptionBegun = false;
|
|
192
|
+
let firstTypeIteration = true;
|
|
193
|
+
for (const { tokens } of spec.source.values()) {
|
|
189
194
|
let type = '';
|
|
190
|
-
if (
|
|
195
|
+
if (!descriptionBegun && tokens.description.trim()) {
|
|
196
|
+
descriptionBegun = true;
|
|
197
|
+
}
|
|
198
|
+
else if (!descriptionBegun) {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (firstTypeIteration && tokens.description[0] !== '{')
|
|
191
202
|
return spec;
|
|
203
|
+
firstTypeIteration = false;
|
|
192
204
|
for (const ch of tokens.description) {
|
|
193
205
|
if (ch === '{')
|
|
194
206
|
curlies++;
|
|
@@ -202,6 +214,9 @@ var CommentParser = (function (exports) {
|
|
|
202
214
|
if (curlies === 0)
|
|
203
215
|
break;
|
|
204
216
|
}
|
|
217
|
+
if (!descriptionBegun) {
|
|
218
|
+
return spec;
|
|
219
|
+
}
|
|
205
220
|
if (curlies !== 0) {
|
|
206
221
|
spec.problems.push({
|
|
207
222
|
code: 'spec:type:unpaired-curlies',
|
|
@@ -246,9 +261,17 @@ var CommentParser = (function (exports) {
|
|
|
246
261
|
function nameTokenizer() {
|
|
247
262
|
const typeEnd = (num, { tokens }, i) => tokens.type === '' ? num : i;
|
|
248
263
|
return (spec) => {
|
|
249
|
-
// look for the name in the line where {type} ends
|
|
250
|
-
|
|
251
|
-
|
|
264
|
+
// look for the name starting in the line where {type} ends
|
|
265
|
+
let finalTypeLine = spec.source.reduce(typeEnd, 0);
|
|
266
|
+
let tokens;
|
|
267
|
+
do {
|
|
268
|
+
({ tokens } = spec.source[finalTypeLine]);
|
|
269
|
+
if (tokens.description.trim()) {
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
finalTypeLine++;
|
|
273
|
+
} while (spec.source[finalTypeLine]);
|
|
274
|
+
const source = tokens.description.trimStart();
|
|
252
275
|
const quotedGroups = source.split('"');
|
|
253
276
|
// if it starts with quoted group, assume it is a literal
|
|
254
277
|
if (quotedGroups.length > 1 &&
|
|
@@ -643,8 +666,6 @@ var CommentParser = (function (exports) {
|
|
|
643
666
|
exports.transforms = transforms;
|
|
644
667
|
exports.util = util;
|
|
645
668
|
|
|
646
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
647
|
-
|
|
648
669
|
return exports;
|
|
649
670
|
|
|
650
|
-
}({})
|
|
671
|
+
})({});
|
|
@@ -7,9 +7,17 @@ const isQuoted = (s) => s && s.startsWith('"') && s.endsWith('"');
|
|
|
7
7
|
export default function nameTokenizer() {
|
|
8
8
|
const typeEnd = (num, { tokens }, i) => tokens.type === '' ? num : i;
|
|
9
9
|
return (spec) => {
|
|
10
|
-
// look for the name in the line where {type} ends
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
// look for the name starting in the line where {type} ends
|
|
11
|
+
let finalTypeLine = spec.source.reduce(typeEnd, 0);
|
|
12
|
+
let tokens;
|
|
13
|
+
do {
|
|
14
|
+
({ tokens } = spec.source[finalTypeLine]);
|
|
15
|
+
if (tokens.description.trim()) {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
finalTypeLine++;
|
|
19
|
+
} while (spec.source[finalTypeLine]);
|
|
20
|
+
const source = tokens.description.trimStart();
|
|
13
21
|
const quotedGroups = source.split('"');
|
|
14
22
|
// if it starts with quoted group, assume it is a literal
|
|
15
23
|
if (quotedGroups.length > 1 &&
|
|
@@ -18,7 +18,7 @@ export type Joiner = (parts: string[]) => string;
|
|
|
18
18
|
*/
|
|
19
19
|
export type Spacing = 'compact' | 'preserve' | Joiner;
|
|
20
20
|
/**
|
|
21
|
-
* Sets splits remaining `Spec.lines[].
|
|
21
|
+
* Sets splits remaining `Spec.lines[].tokens.description` into `type` and `description`
|
|
22
22
|
* tokens and populates Spec.type`
|
|
23
23
|
*
|
|
24
24
|
* @param {Spacing} spacing tells how to deal with a whitespace
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { splitSpace } from '../../util.js';
|
|
2
2
|
/**
|
|
3
|
-
* Sets splits remaining `Spec.lines[].
|
|
3
|
+
* Sets splits remaining `Spec.lines[].tokens.description` into `type` and `description`
|
|
4
4
|
* tokens and populates Spec.type`
|
|
5
5
|
*
|
|
6
6
|
* @param {Spacing} spacing tells how to deal with a whitespace
|
|
@@ -11,10 +11,19 @@ export default function typeTokenizer(spacing = 'compact') {
|
|
|
11
11
|
return (spec) => {
|
|
12
12
|
let curlies = 0;
|
|
13
13
|
let lines = [];
|
|
14
|
-
|
|
14
|
+
let descriptionBegun = false;
|
|
15
|
+
let firstTypeIteration = true;
|
|
16
|
+
for (const { tokens } of spec.source.values()) {
|
|
15
17
|
let type = '';
|
|
16
|
-
if (
|
|
18
|
+
if (!descriptionBegun && tokens.description.trim()) {
|
|
19
|
+
descriptionBegun = true;
|
|
20
|
+
}
|
|
21
|
+
else if (!descriptionBegun) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (firstTypeIteration && tokens.description[0] !== '{')
|
|
17
25
|
return spec;
|
|
26
|
+
firstTypeIteration = false;
|
|
18
27
|
for (const ch of tokens.description) {
|
|
19
28
|
if (ch === '{')
|
|
20
29
|
curlies++;
|
|
@@ -28,6 +37,9 @@ export default function typeTokenizer(spacing = 'compact') {
|
|
|
28
37
|
if (curlies === 0)
|
|
29
38
|
break;
|
|
30
39
|
}
|
|
40
|
+
if (!descriptionBegun) {
|
|
41
|
+
return spec;
|
|
42
|
+
}
|
|
31
43
|
if (curlies !== 0) {
|
|
32
44
|
spec.problems.push({
|
|
33
45
|
code: 'spec:type:unpaired-curlies',
|
package/es6/primitives.js
CHANGED
package/jest.config.cjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
1
3
|
// For a detailed explanation regarding each configuration property, visit:
|
|
2
4
|
// https://jestjs.io/docs/en/configuration.html
|
|
3
5
|
|
|
@@ -6,12 +8,6 @@ const { compilerOptions: tsconfig } = JSON.parse(
|
|
|
6
8
|
);
|
|
7
9
|
|
|
8
10
|
module.exports = {
|
|
9
|
-
globals: {
|
|
10
|
-
'ts-jest': {
|
|
11
|
-
tsconfig,
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
|
|
15
11
|
// All imported modules in your tests should be mocked automatically
|
|
16
12
|
// automock: false,
|
|
17
13
|
|
|
@@ -186,7 +182,9 @@ module.exports = {
|
|
|
186
182
|
|
|
187
183
|
// A map from regular expressions to paths to transformers
|
|
188
184
|
transform: {
|
|
189
|
-
'^.+\\.ts$': 'ts-jest',
|
|
185
|
+
'^.+\\.ts$': ['ts-jest', {
|
|
186
|
+
tsconfig
|
|
187
|
+
}],
|
|
190
188
|
},
|
|
191
189
|
|
|
192
190
|
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
|
package/lib/index.cjs
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
|
|
4
4
|
if (k2 === undefined) k2 = k;
|
|
5
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
|
|
7
6
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
7
|
desc = {
|
|
9
8
|
enumerable: true,
|
|
@@ -12,55 +11,36 @@ var __createBinding = this && this.__createBinding || (Object.create ? function
|
|
|
12
11
|
}
|
|
13
12
|
};
|
|
14
13
|
}
|
|
15
|
-
|
|
16
14
|
Object.defineProperty(o, k2, desc);
|
|
17
15
|
} : function (o, m, k, k2) {
|
|
18
16
|
if (k2 === undefined) k2 = k;
|
|
19
17
|
o[k2] = m[k];
|
|
20
18
|
});
|
|
21
|
-
|
|
22
19
|
var __exportStar = this && this.__exportStar || function (m, exports) {
|
|
23
20
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
21
|
};
|
|
25
|
-
|
|
26
22
|
Object.defineProperty(exports, "__esModule", {
|
|
27
23
|
value: true
|
|
28
24
|
});
|
|
29
|
-
exports.util = exports.tokenizers = exports.transforms = exports.inspect = exports.stringify =
|
|
30
|
-
|
|
25
|
+
exports.util = exports.tokenizers = exports.transforms = exports.inspect = exports.stringify = void 0;
|
|
26
|
+
exports.parse = parse;
|
|
31
27
|
const index_js_1 = require("./parser/index.cjs");
|
|
32
|
-
|
|
33
28
|
const description_js_1 = require("./parser/tokenizers/description.cjs");
|
|
34
|
-
|
|
35
29
|
const name_js_1 = require("./parser/tokenizers/name.cjs");
|
|
36
|
-
|
|
37
30
|
const tag_js_1 = require("./parser/tokenizers/tag.cjs");
|
|
38
|
-
|
|
39
31
|
const type_js_1 = require("./parser/tokenizers/type.cjs");
|
|
40
|
-
|
|
41
32
|
const index_js_2 = require("./stringifier/index.cjs");
|
|
42
|
-
|
|
43
33
|
const align_js_1 = require("./transforms/align.cjs");
|
|
44
|
-
|
|
45
34
|
const indent_js_1 = require("./transforms/indent.cjs");
|
|
46
|
-
|
|
47
35
|
const crlf_js_1 = require("./transforms/crlf.cjs");
|
|
48
|
-
|
|
49
36
|
const index_js_3 = require("./transforms/index.cjs");
|
|
50
|
-
|
|
51
37
|
const util_js_1 = require("./util.cjs");
|
|
52
|
-
|
|
53
38
|
__exportStar(require("./primitives.cjs"), exports);
|
|
54
|
-
|
|
55
39
|
function parse(source, options = {}) {
|
|
56
40
|
return (0, index_js_1.default)(options)(source);
|
|
57
41
|
}
|
|
58
|
-
|
|
59
|
-
exports.parse = parse;
|
|
60
42
|
exports.stringify = (0, index_js_2.default)();
|
|
61
|
-
|
|
62
43
|
var inspect_js_1 = require("./stringifier/inspect.cjs");
|
|
63
|
-
|
|
64
44
|
Object.defineProperty(exports, "inspect", {
|
|
65
45
|
enumerable: true,
|
|
66
46
|
get: function () {
|
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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":[]}
|
|
@@ -3,40 +3,32 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = getParser;
|
|
6
7
|
const reTag = /^@\S+/;
|
|
7
8
|
/**
|
|
8
9
|
* Creates configured `Parser`
|
|
9
10
|
* @param {Partial<Options>} options
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
12
|
function getParser({
|
|
13
13
|
fence = '```'
|
|
14
14
|
} = {}) {
|
|
15
15
|
const fencer = getFencer(fence);
|
|
16
|
-
|
|
17
16
|
const toggleFence = (source, isFenced) => fencer(source) ? !isFenced : isFenced;
|
|
18
|
-
|
|
19
17
|
return function parseBlock(source) {
|
|
20
18
|
// start with description section
|
|
21
19
|
const sections = [[]];
|
|
22
20
|
let isFenced = false;
|
|
23
|
-
|
|
24
21
|
for (const line of source) {
|
|
25
22
|
if (reTag.test(line.tokens.description) && !isFenced) {
|
|
26
23
|
sections.push([line]);
|
|
27
24
|
} else {
|
|
28
25
|
sections[sections.length - 1].push(line);
|
|
29
26
|
}
|
|
30
|
-
|
|
31
27
|
isFenced = toggleFence(line.tokens.description, isFenced);
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
return sections;
|
|
35
30
|
};
|
|
36
31
|
}
|
|
37
|
-
|
|
38
|
-
exports.default = getParser;
|
|
39
|
-
|
|
40
32
|
function getFencer(fence) {
|
|
41
33
|
if (typeof fence === 'string') return source => source.split(fence).length % 2 === 0;
|
|
42
34
|
return fence;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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":[]}
|
package/lib/parser/index.cjs
CHANGED
|
@@ -3,25 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = getParser;
|
|
7
7
|
const primitives_js_1 = require("../primitives.cjs");
|
|
8
|
-
|
|
9
8
|
const util_js_1 = require("../util.cjs");
|
|
10
|
-
|
|
11
9
|
const block_parser_js_1 = require("./block-parser.cjs");
|
|
12
|
-
|
|
13
10
|
const source_parser_js_1 = require("./source-parser.cjs");
|
|
14
|
-
|
|
15
11
|
const spec_parser_js_1 = require("./spec-parser.cjs");
|
|
16
|
-
|
|
17
12
|
const tag_js_1 = require("./tokenizers/tag.cjs");
|
|
18
|
-
|
|
19
13
|
const type_js_1 = require("./tokenizers/type.cjs");
|
|
20
|
-
|
|
21
14
|
const name_js_1 = require("./tokenizers/name.cjs");
|
|
22
|
-
|
|
23
15
|
const description_js_1 = require("./tokenizers/description.cjs");
|
|
24
|
-
|
|
25
16
|
function getParser({
|
|
26
17
|
startLine = 0,
|
|
27
18
|
fence = '```',
|
|
@@ -43,7 +34,6 @@ function getParser({
|
|
|
43
34
|
const joinDescription = (0, description_js_1.getJoiner)(spacing);
|
|
44
35
|
return function (source) {
|
|
45
36
|
const blocks = [];
|
|
46
|
-
|
|
47
37
|
for (const line of (0, util_js_1.splitLines)(source)) {
|
|
48
38
|
const lines = parseSource(line);
|
|
49
39
|
if (lines === null) continue;
|
|
@@ -56,10 +46,7 @@ function getParser({
|
|
|
56
46
|
problems: specs.reduce((acc, spec) => acc.concat(spec.problems), [])
|
|
57
47
|
});
|
|
58
48
|
}
|
|
59
|
-
|
|
60
49
|
return blocks;
|
|
61
50
|
};
|
|
62
51
|
}
|
|
63
|
-
|
|
64
|
-
exports.default = getParser;
|
|
65
52
|
//# sourceMappingURL=index.cjs.map
|
package/lib/parser/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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":[]}
|