eslint-plugin-jsdoc 44.2.3 → 44.2.4
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/dist/alignTransform.js +86 -4
- package/dist/alignTransform.js.map +1 -1
- package/dist/exportParser.js +134 -4
- package/dist/exportParser.js.map +1 -1
- package/dist/iterateJsdoc.js +936 -345
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +173 -105
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAlignment.js +6 -0
- package/dist/rules/checkAlignment.js.map +1 -1
- package/dist/rules/checkExamples.js +70 -6
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +11 -1
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +68 -4
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js +12 -7
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js +13 -7
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkTagNames.js +45 -5
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +97 -36
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/checkValues.js +6 -6
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/emptyTags.js +8 -1
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/informativeDocs.js +26 -7
- package/dist/rules/informativeDocs.js.map +1 -1
- package/dist/rules/matchDescription.js +18 -1
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js +2 -2
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +12 -1
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/noBadBlocks.js +3 -5
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.js +2 -0
- package/dist/rules/noBlankBlockDescriptions.js.map +1 -1
- package/dist/rules/noMissingSyntax.js +58 -15
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +1 -6
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js +17 -4
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js +3 -0
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +61 -20
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js +20 -0
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js +6 -2
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +72 -9
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireFileOverview.js +9 -4
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +23 -6
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js +144 -28
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +46 -2
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireProperty.js +1 -1
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requireReturns.js +2 -2
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +9 -2
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireThrows.js +2 -2
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js +9 -2
- package/dist/rules/requireYields.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js +19 -5
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/dist/rules/sortTags.js +67 -9
- package/dist/rules/sortTags.js.map +1 -1
- package/dist/rules/tagLines.js +22 -3
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/textEscaping.js +16 -2
- package/dist/rules/textEscaping.js.map +1 -1
- package/dist/rules/validTypes.js +25 -8
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/utils/hasReturnValue.js +77 -43
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/docs/rules/check-tag-names.md +15 -0
- package/docs/rules/no-missing-syntax.md +6 -0
- package/docs/rules/require-description-complete-sentence.md +525 -289
- package/docs/rules/require-description.md +289 -525
- package/docs/rules/require-file-overview.md +7 -0
- package/docs/rules/require-jsdoc.md +1 -1
- package/docs/rules/require-param-description.md +116 -1694
- package/docs/rules/require-param-name.md +58 -133
- package/docs/rules/require-param-type.md +119 -55
- package/docs/rules/require-param.md +1700 -111
- package/docs/rules/require-property-description.md +39 -79
- package/docs/rules/require-property-name.md +21 -30
- package/docs/rules/require-property-type.md +21 -21
- package/docs/rules/require-property.md +82 -33
- package/docs/rules/require-returns-check.md +636 -747
- package/docs/rules/require-returns-description.md +61 -933
- package/docs/rules/require-returns-type.md +42 -79
- package/docs/rules/require-returns.md +1081 -61
- package/docs/rules/require-yields-check.md +238 -517
- package/docs/rules/require-yields.md +517 -238
- package/docs/rules/valid-types.md +1 -1
- package/docs/settings.md +1 -1
- package/package.json +5 -4
- package/tsconfig.json +2 -3
package/dist/alignTransform.js
CHANGED
|
@@ -11,15 +11,41 @@ var _commentParser = require("comment-parser");
|
|
|
11
11
|
* It contains some customizations to align based on the tags, and some custom options.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {{
|
|
16
|
+
* hasNoTypes: boolean,
|
|
17
|
+
* maxNamedTagLength: import('./iterateJsdoc.js').Integer,
|
|
18
|
+
* maxUnnamedTagLength: import('./iterateJsdoc.js').Integer
|
|
19
|
+
* }} TypelessInfo
|
|
20
|
+
*/
|
|
21
|
+
|
|
14
22
|
const {
|
|
15
23
|
rewireSource
|
|
16
24
|
} = _commentParser.util;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {{
|
|
28
|
+
* name: import('./iterateJsdoc').Integer,
|
|
29
|
+
* start: import('./iterateJsdoc').Integer,
|
|
30
|
+
* tag: import('./iterateJsdoc').Integer,
|
|
31
|
+
* type: import('./iterateJsdoc').Integer
|
|
32
|
+
* }} Width
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/** @type {Width} */
|
|
17
36
|
const zeroWidth = {
|
|
18
37
|
name: 0,
|
|
19
38
|
start: 0,
|
|
20
39
|
tag: 0,
|
|
21
40
|
type: 0
|
|
22
41
|
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param {string[]} tags
|
|
45
|
+
* @param {import('./iterateJsdoc').Integer} index
|
|
46
|
+
* @param {import('comment-parser').Line[]} source
|
|
47
|
+
* @returns {boolean}
|
|
48
|
+
*/
|
|
23
49
|
const shouldAlign = (tags, index, source) => {
|
|
24
50
|
const tag = source[index].tokens.tag.replace('@', '');
|
|
25
51
|
const includesTag = tags.includes(tag);
|
|
@@ -40,6 +66,18 @@ const shouldAlign = (tags, index, source) => {
|
|
|
40
66
|
}
|
|
41
67
|
return true;
|
|
42
68
|
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @param {string[]} tags
|
|
72
|
+
* @returns {(
|
|
73
|
+
* width: Width,
|
|
74
|
+
* line: {
|
|
75
|
+
* tokens: import('comment-parser').Tokens
|
|
76
|
+
* },
|
|
77
|
+
* index: import('./iterateJsdoc.js').Integer,
|
|
78
|
+
* source: import('comment-parser').Line[]
|
|
79
|
+
* ) => Width}
|
|
80
|
+
*/
|
|
43
81
|
const getWidth = tags => {
|
|
44
82
|
return (width, {
|
|
45
83
|
tokens
|
|
@@ -49,12 +87,21 @@ const getWidth = tags => {
|
|
|
49
87
|
}
|
|
50
88
|
return {
|
|
51
89
|
name: Math.max(width.name, tokens.name.length),
|
|
52
|
-
start: tokens.delimiter ===
|
|
90
|
+
start: tokens.delimiter === '/**' ? tokens.start.length : width.start,
|
|
53
91
|
tag: Math.max(width.tag, tokens.tag.length),
|
|
54
92
|
type: Math.max(width.type, tokens.type.length)
|
|
55
93
|
};
|
|
56
94
|
};
|
|
57
95
|
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @param {{
|
|
99
|
+
* description: string;
|
|
100
|
+
* tags: import('comment-parser').Spec[];
|
|
101
|
+
* problems: import('comment-parser').Problem[];
|
|
102
|
+
* }} fields
|
|
103
|
+
* @returns {TypelessInfo}
|
|
104
|
+
*/
|
|
58
105
|
const getTypelessInfo = fields => {
|
|
59
106
|
const hasNoTypes = fields.tags.every(({
|
|
60
107
|
type
|
|
@@ -83,9 +130,27 @@ const getTypelessInfo = fields => {
|
|
|
83
130
|
maxUnnamedTagLength
|
|
84
131
|
};
|
|
85
132
|
};
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @param {import('./iterateJsdoc.js').Integer} len
|
|
136
|
+
* @returns {string}
|
|
137
|
+
*/
|
|
86
138
|
const space = len => {
|
|
87
139
|
return ''.padStart(len, ' ');
|
|
88
140
|
};
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @param {{
|
|
144
|
+
* customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,
|
|
145
|
+
* tags: string[],
|
|
146
|
+
* indent: string,
|
|
147
|
+
* preserveMainDescriptionPostDelimiter: boolean,
|
|
148
|
+
* wrapIndent: string,
|
|
149
|
+
* }} cfg
|
|
150
|
+
* @returns {(
|
|
151
|
+
* block: import('comment-parser').Block
|
|
152
|
+
* ) => import('comment-parser').Block}
|
|
153
|
+
*/
|
|
89
154
|
const alignTransform = ({
|
|
90
155
|
customSpacings,
|
|
91
156
|
tags,
|
|
@@ -94,7 +159,14 @@ const alignTransform = ({
|
|
|
94
159
|
wrapIndent
|
|
95
160
|
}) => {
|
|
96
161
|
let intoTags = false;
|
|
162
|
+
/** @type {Width} */
|
|
97
163
|
let width;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @param {import('comment-parser').Tokens} tokens
|
|
167
|
+
* @param {TypelessInfo} typelessInfo
|
|
168
|
+
* @returns {import('comment-parser').Tokens}
|
|
169
|
+
*/
|
|
98
170
|
const alignTokens = (tokens, typelessInfo) => {
|
|
99
171
|
const nothingAfter = {
|
|
100
172
|
delim: false,
|
|
@@ -155,7 +227,17 @@ const alignTransform = ({
|
|
|
155
227
|
}
|
|
156
228
|
return tokens;
|
|
157
229
|
};
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* @param {import('comment-parser').Line} line
|
|
233
|
+
* @param {import('./iterateJsdoc.js').Integer} index
|
|
234
|
+
* @param {import('comment-parser').Line[]} source
|
|
235
|
+
* @param {TypelessInfo} typelessInfo
|
|
236
|
+
* @param {string|false} indentTag
|
|
237
|
+
* @returns {import('comment-parser').Line}
|
|
238
|
+
*/
|
|
158
239
|
const update = (line, index, source, typelessInfo, indentTag) => {
|
|
240
|
+
/** @type {import('comment-parser').Tokens} */
|
|
159
241
|
const tokens = {
|
|
160
242
|
...line.tokens
|
|
161
243
|
};
|
|
@@ -165,7 +247,7 @@ const alignTransform = ({
|
|
|
165
247
|
const isEmpty = tokens.tag === '' && tokens.name === '' && tokens.type === '' && tokens.description === '';
|
|
166
248
|
|
|
167
249
|
// dangling '*/'
|
|
168
|
-
if (tokens.end ===
|
|
250
|
+
if (tokens.end === '*/' && isEmpty) {
|
|
169
251
|
tokens.start = indent + ' ';
|
|
170
252
|
return {
|
|
171
253
|
...line,
|
|
@@ -173,10 +255,10 @@ const alignTransform = ({
|
|
|
173
255
|
};
|
|
174
256
|
}
|
|
175
257
|
switch (tokens.delimiter) {
|
|
176
|
-
case
|
|
258
|
+
case '/**':
|
|
177
259
|
tokens.start = indent;
|
|
178
260
|
break;
|
|
179
|
-
case
|
|
261
|
+
case '*':
|
|
180
262
|
tokens.start = indent + ' ';
|
|
181
263
|
break;
|
|
182
264
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alignTransform.js","names":["_commentParser","require","rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","wrapIndent","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","indentTag","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce","tagIndentMode","ret","_default","exports","default","module"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n\n // `comment-parser/primitives` export\n Markers,\n util,\n} from 'comment-parser';\n\nconst {\n rewireSource,\n} = util;\n\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === Markers.start ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n wrapIndent,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n const update = (line, index, source, typelessInfo, indentTag) => {\n const tokens = {\n ...line.tokens,\n };\n\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === Markers.end && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n switch (tokens.delimiter) {\n case Markers.start:\n tokens.start = indent;\n break;\n case Markers.delim:\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s*/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (shouldAlign(tags, index, source)) {\n alignTokens(tokens, typelessInfo);\n if (indentTag) {\n tokens.postDelimiter += wrapIndent;\n }\n }\n\n return {\n ...line,\n tokens,\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n let tagIndentMode = false;\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n const indentTag = tagIndentMode && !line.tokens.tag && line.tokens.description;\n const ret = update(line, index, source, typelessInfo, indentTag);\n\n if (line.tokens.tag) {\n tagIndentMode = true;\n }\n\n return ret;\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alignTransform.js","names":["_commentParser","require","rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","wrapIndent","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","indentTag","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce","tagIndentMode","ret","_default","exports","default","module"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n\n // `comment-parser/primitives` export\n util,\n} from 'comment-parser';\n\n/**\n * @typedef {{\n * hasNoTypes: boolean,\n * maxNamedTagLength: import('./iterateJsdoc.js').Integer,\n * maxUnnamedTagLength: import('./iterateJsdoc.js').Integer\n * }} TypelessInfo\n */\n\nconst {\n rewireSource,\n} = util;\n\n/**\n * @typedef {{\n * name: import('./iterateJsdoc').Integer,\n * start: import('./iterateJsdoc').Integer,\n * tag: import('./iterateJsdoc').Integer,\n * type: import('./iterateJsdoc').Integer\n * }} Width\n */\n\n/** @type {Width} */\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\n/**\n * @param {string[]} tags\n * @param {import('./iterateJsdoc').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @returns {boolean}\n */\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param {string[]} tags\n * @returns {(\n * width: Width,\n * line: {\n * tokens: import('comment-parser').Tokens\n * },\n * index: import('./iterateJsdoc.js').Integer,\n * source: import('comment-parser').Line[]\n * ) => Width}\n */\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === '/**' ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\n/**\n * @param {{\n * description: string;\n * tags: import('comment-parser').Spec[];\n * problems: import('comment-parser').Problem[];\n * }} fields\n * @returns {TypelessInfo}\n */\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Integer} len\n * @returns {string}\n */\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\n/**\n * @param {{\n * customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,\n * tags: string[],\n * indent: string,\n * preserveMainDescriptionPostDelimiter: boolean,\n * wrapIndent: string,\n * }} cfg\n * @returns {(\n * block: import('comment-parser').Block\n * ) => import('comment-parser').Block}\n */\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n wrapIndent,\n}) => {\n let intoTags = false;\n /** @type {Width} */\n let width;\n\n /**\n * @param {import('comment-parser').Tokens} tokens\n * @param {TypelessInfo} typelessInfo\n * @returns {import('comment-parser').Tokens}\n */\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n /**\n * @param {import('comment-parser').Line} line\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @param {TypelessInfo} typelessInfo\n * @param {string|false} indentTag\n * @returns {import('comment-parser').Line}\n */\n const update = (line, index, source, typelessInfo, indentTag) => {\n /** @type {import('comment-parser').Tokens} */\n const tokens = {\n ...line.tokens,\n };\n\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === '*/' && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n switch (tokens.delimiter) {\n case '/**':\n tokens.start = indent;\n break;\n case '*':\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s*/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (shouldAlign(tags, index, source)) {\n alignTokens(tokens, typelessInfo);\n if (indentTag) {\n tokens.postDelimiter += wrapIndent;\n }\n }\n\n return {\n ...line,\n tokens,\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n let tagIndentMode = false;\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n const indentTag = tagIndentMode && !line.tokens.tag && line.tokens.description;\n const ret = update(line, index, source, typelessInfo, indentTag);\n\n if (line.tokens.tag) {\n tagIndentMode = true;\n }\n\n return ret;\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":";;;;;;AAMA,IAAAA,cAAA,GAAAC,OAAA;AANA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJC;AACF,CAAC,GAAGC,mBAAI;;AAER;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMC,SAAS,GAAG;EAChBC,IAAI,EAAE,CAAC;EACPC,KAAK,EAAE,CAAC;EACRC,GAAG,EAAE,CAAC;EACNC,IAAI,EAAE;AACR,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,GAAGA,CAACC,IAAI,EAAEC,KAAK,EAAEC,MAAM,KAAK;EAC3C,MAAML,GAAG,GAAGK,MAAM,CAACD,KAAK,CAAC,CAACE,MAAM,CAACN,GAAG,CAACO,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;EACrD,MAAMC,WAAW,GAAGL,IAAI,CAACM,QAAQ,CAACT,GAAG,CAAC;EAEtC,IAAIQ,WAAW,EAAE;IACf,OAAO,IAAI;EACb;EAEA,IAAIR,GAAG,KAAK,EAAE,EAAE;IACd,OAAO,KAAK;EACd;EAEA,KAAK,IAAIU,QAAQ,GAAGN,KAAK,EAAEM,QAAQ,IAAI,CAAC,EAAEA,QAAQ,EAAE,EAAE;IACpD,MAAMC,WAAW,GAAGN,MAAM,CAACK,QAAQ,CAAC,CAACJ,MAAM,CAACN,GAAG,CAACO,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAEhE,IAAII,WAAW,KAAK,EAAE,EAAE;MACtB,IAAIR,IAAI,CAACM,QAAQ,CAACE,WAAW,CAAC,EAAE;QAC9B,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,QAAQ,GAAIT,IAAI,IAAK;EACzB,OAAO,CAACU,KAAK,EAAE;IACbP;EACF,CAAC,EAAEF,KAAK,EAAEC,MAAM,KAAK;IACnB,IAAI,CAACH,WAAW,CAACC,IAAI,EAAEC,KAAK,EAAEC,MAAM,CAAC,EAAE;MACrC,OAAOQ,KAAK;IACd;IAEA,OAAO;MACLf,IAAI,EAAEgB,IAAI,CAACC,GAAG,CAACF,KAAK,CAACf,IAAI,EAAEQ,MAAM,CAACR,IAAI,CAACkB,MAAM,CAAC;MAC9CjB,KAAK,EAAEO,MAAM,CAACW,SAAS,KAAK,KAAK,GAAGX,MAAM,CAACP,KAAK,CAACiB,MAAM,GAAGH,KAAK,CAACd,KAAK;MACrEC,GAAG,EAAEc,IAAI,CAACC,GAAG,CAACF,KAAK,CAACb,GAAG,EAAEM,MAAM,CAACN,GAAG,CAACgB,MAAM,CAAC;MAC3Cf,IAAI,EAAEa,IAAI,CAACC,GAAG,CAACF,KAAK,CAACZ,IAAI,EAAEK,MAAM,CAACL,IAAI,CAACe,MAAM;IAC/C,CAAC;EACH,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,eAAe,GAAIC,MAAM,IAAK;EAClC,MAAMC,UAAU,GAAGD,MAAM,CAAChB,IAAI,CAACkB,KAAK,CAAC,CAAC;IACpCpB;EACF,CAAC,KAAK;IACJ,OAAO,CAACA,IAAI;EACd,CAAC,CAAC;EACF,MAAMqB,iBAAiB,GAAGR,IAAI,CAACC,GAAG,CAAC,GAAGI,MAAM,CAAChB,IAAI,CAACoB,GAAG,CAAC,CAAC;IACrDvB,GAAG;IACHF;EACF,CAAC,KAAK;IACJ,OAAOA,IAAI,CAACkB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,GAAGhB,GAAG,CAACgB,MAAM;EAC5C,CAAC,CAAC,CAACQ,MAAM,CAAER,MAAM,IAAK;IACpB,OAAOA,MAAM,KAAK,CAAC,CAAC;EACtB,CAAC,CAAC,CAAC,GAAG,CAAC;EACP,MAAMS,mBAAmB,GAAGX,IAAI,CAACC,GAAG,CAAC,GAAGI,MAAM,CAAChB,IAAI,CAACoB,GAAG,CAAC,CAAC;IACvDvB,GAAG;IACHF;EACF,CAAC,KAAK;IACJ,OAAOA,IAAI,CAACkB,MAAM,KAAK,CAAC,GAAGhB,GAAG,CAACgB,MAAM,GAAG,CAAC,CAAC;EAC5C,CAAC,CAAC,CAACQ,MAAM,CAAER,MAAM,IAAK;IACpB,OAAOA,MAAM,KAAK,CAAC,CAAC;EACtB,CAAC,CAAC,CAAC,GAAG,CAAC;EACP,OAAO;IACLI,UAAU;IACVE,iBAAiB;IACjBG;EACF,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,KAAK,GAAIC,GAAG,IAAK;EACrB,OAAO,EAAE,CAACC,QAAQ,CAACD,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,cAAc,GAAGA,CAAC;EACtBC,cAAc;EACd3B,IAAI;EACJ4B,MAAM;EACNC,oCAAoC;EACpCC;AACF,CAAC,KAAK;EACJ,IAAIC,QAAQ,GAAG,KAAK;EACpB;EACA,IAAIrB,KAAK;;EAET;AACF;AACA;AACA;AACA;EACE,MAAMsB,WAAW,GAAGA,CAAC7B,MAAM,EAAE8B,YAAY,KAAK;IAC5C,MAAMC,YAAY,GAAG;MACnBC,KAAK,EAAE,KAAK;MACZxC,IAAI,EAAE,KAAK;MACXE,GAAG,EAAE,KAAK;MACVC,IAAI,EAAE;IACR,CAAC;IAED,IAAIK,MAAM,CAACiC,WAAW,KAAK,EAAE,EAAE;MAC7BF,YAAY,CAACvC,IAAI,GAAG,IAAI;MACxBQ,MAAM,CAACkC,QAAQ,GAAG,EAAE;MAEpB,IAAIlC,MAAM,CAACR,IAAI,KAAK,EAAE,EAAE;QACtBuC,YAAY,CAACpC,IAAI,GAAG,IAAI;QACxBK,MAAM,CAACmC,QAAQ,GAAG,EAAE;QAEpB,IAAInC,MAAM,CAACL,IAAI,KAAK,EAAE,EAAE;UACtBoC,YAAY,CAACrC,GAAG,GAAG,IAAI;UACvBM,MAAM,CAACoC,OAAO,GAAG,EAAE;;UAEnB;UACA,IAAIpC,MAAM,CAACN,GAAG,KAAK,EAAE,EAAE;YACrBqC,YAAY,CAACC,KAAK,GAAG,IAAI;UAC3B;QACF;MACF;IACF;IAEA,IAAIK,qBAAqB,GAAG,CAAC;IAC7B,IAAIC,qBAAqB,GAAG,CAAC;IAC7B,IAAIR,YAAY,CAAChB,UAAU,EAAE;MAC3BiB,YAAY,CAACrC,GAAG,GAAG,IAAI;MACvBM,MAAM,CAACoC,OAAO,GAAG,EAAE;MACnB,IAAIpC,MAAM,CAACR,IAAI,KAAK,EAAE,EAAE;QACtB6C,qBAAqB,GAAGP,YAAY,CAACd,iBAAiB,GAAGhB,MAAM,CAACN,GAAG,CAACgB,MAAM;MAC5E,CAAC,MAAM;QACL2B,qBAAqB,GAAGP,YAAY,CAACd,iBAAiB,GAAGc,YAAY,CAACX,mBAAmB,GAAG,CAAC,GAC3FX,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEqB,YAAY,CAACX,mBAAmB,IAAInB,MAAM,CAACN,GAAG,CAACgB,MAAM,GAAGV,MAAM,CAACR,IAAI,CAACkB,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9F4B,qBAAqB,GAAGR,YAAY,CAACd,iBAAiB,GAAGhB,MAAM,CAACN,GAAG,CAACgB,MAAM;MAC5E;IACF;;IAEA;IACA,IAAIV,MAAM,CAACN,GAAG,KAAK,EAAE,IAAIM,MAAM,CAACL,IAAI,EAAE;MACpC,OAAOK,MAAM;IACf;IAEA,MAAMuC,QAAQ,GAAG;MACfC,aAAa,EAAE,CAAAhB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEgB,aAAa,KAAI,CAAC;MACjDN,QAAQ,EAAE,CAAAV,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEU,QAAQ,KAAI,CAAC;MACvCE,OAAO,EAAE,CAAAZ,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEY,OAAO,KAAI,CAAC;MACrCD,QAAQ,EAAE,CAAAX,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEW,QAAQ,KAAI;IACxC,CAAC;IAEDnC,MAAM,CAACwC,aAAa,GAAGT,YAAY,CAACC,KAAK,GAAG,EAAE,GAAGZ,KAAK,CAACmB,QAAQ,CAACC,aAAa,CAAC;IAE9E,IAAI,CAACT,YAAY,CAACrC,GAAG,EAAE;MACrBM,MAAM,CAACoC,OAAO,GAAGhB,KAAK,CAACb,KAAK,CAACb,GAAG,GAAGM,MAAM,CAACN,GAAG,CAACgB,MAAM,GAAG6B,QAAQ,CAACH,OAAO,CAAC;IAC1E;IAEA,IAAI,CAACL,YAAY,CAACpC,IAAI,EAAE;MACtBK,MAAM,CAACmC,QAAQ,GAAGf,KAAK,CAACb,KAAK,CAACZ,IAAI,GAAGK,MAAM,CAACL,IAAI,CAACe,MAAM,GAAG6B,QAAQ,CAACJ,QAAQ,GAAGG,qBAAqB,CAAC;IACtG;IAEA,IAAI,CAACP,YAAY,CAACvC,IAAI,EAAE;MACtB;MACAQ,MAAM,CAACkC,QAAQ,GAAG3B,KAAK,CAACf,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG4B,KAAK,CAACb,KAAK,CAACf,IAAI,GAAGQ,MAAM,CAACR,IAAI,CAACkB,MAAM,GAAG6B,QAAQ,CAACL,QAAQ,GAAGG,qBAAqB,CAAC;IAC9H;IAEA,OAAOrC,MAAM;EACf,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMyC,MAAM,GAAGA,CAACC,IAAI,EAAE5C,KAAK,EAAEC,MAAM,EAAE+B,YAAY,EAAEa,SAAS,KAAK;IAC/D;IACA,MAAM3C,MAAM,GAAG;MACb,GAAG0C,IAAI,CAAC1C;IACV,CAAC;IAED,IAAIA,MAAM,CAACN,GAAG,KAAK,EAAE,EAAE;MACrBkC,QAAQ,GAAG,IAAI;IACjB;IAEA,MAAMgB,OAAO,GACX5C,MAAM,CAACN,GAAG,KAAK,EAAE,IACjBM,MAAM,CAACR,IAAI,KAAK,EAAE,IAClBQ,MAAM,CAACL,IAAI,KAAK,EAAE,IAClBK,MAAM,CAACiC,WAAW,KAAK,EAAE;;IAE3B;IACA,IAAIjC,MAAM,CAAC6C,GAAG,KAAK,IAAI,IAAID,OAAO,EAAE;MAClC5C,MAAM,CAACP,KAAK,GAAGgC,MAAM,GAAG,GAAG;MAE3B,OAAO;QACL,GAAGiB,IAAI;QACP1C;MACF,CAAC;IACH;IAEA,QAAQA,MAAM,CAACW,SAAS;MACxB,KAAK,KAAK;QACRX,MAAM,CAACP,KAAK,GAAGgC,MAAM;QACrB;MACF,KAAK,GAAG;QACNzB,MAAM,CAACP,KAAK,GAAGgC,MAAM,GAAG,GAAG;QAC3B;MACF;QACEzB,MAAM,CAACW,SAAS,GAAG,EAAE;;QAErB;QACAX,MAAM,CAACP,KAAK,GAAGgC,MAAM,GAAG,IAAI;IAC9B;IAEA,IAAI,CAACG,QAAQ,EAAE;MACb,IAAI5B,MAAM,CAACiC,WAAW,KAAK,EAAE,EAAE;QAC7BjC,MAAM,CAACwC,aAAa,GAAG,EAAE;MAC3B,CAAC,MAAM,IAAI,CAACd,oCAAoC,EAAE;QAChD1B,MAAM,CAACwC,aAAa,GAAG,GAAG;MAC5B;MAEA,OAAO;QACL,GAAGE,IAAI;QACP1C;MACF,CAAC;IACH;IAEA,MAAM8C,iBAAiB,GAAG,CAAAtB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEuB,UAAU,KAAI,CAAC;IACzD,MAAMC,aAAa,GAAG,WAAW;IACjChD,MAAM,CAACiC,WAAW,GAAGjC,MAAM,CAACiC,WAAW,CAAChC,OAAO,CAC7C+C,aAAa,EAAE,GAAG,GAAG,EAAE,CAAC1B,QAAQ,CAACwB,iBAAiB,EAAE,GAAG,CACzD,CAAC;;IAED;IACA,IAAIlD,WAAW,CAACC,IAAI,EAAEC,KAAK,EAAEC,MAAM,CAAC,EAAE;MACpC8B,WAAW,CAAC7B,MAAM,EAAE8B,YAAY,CAAC;MACjC,IAAIa,SAAS,EAAE;QACb3C,MAAM,CAACwC,aAAa,IAAIb,UAAU;MACpC;IACF;IAEA,OAAO;MACL,GAAGe,IAAI;MACP1C;IACF,CAAC;EACH,CAAC;EAED,OAAO,CAAC;IACND,MAAM;IACN,GAAGc;EACL,CAAC,KAAK;IACJN,KAAK,GAAGR,MAAM,CAACkD,MAAM,CAAC3C,QAAQ,CAACT,IAAI,CAAC,EAAE;MACpC,GAAGN;IACL,CAAC,CAAC;IAEF,MAAMuC,YAAY,GAAGlB,eAAe,CAACC,MAAM,CAAC;IAE5C,IAAIqC,aAAa,GAAG,KAAK;IAEzB,OAAO7D,YAAY,CAAC;MAClB,GAAGwB,MAAM;MACTd,MAAM,EAAEA,MAAM,CAACkB,GAAG,CAAC,CAACyB,IAAI,EAAE5C,KAAK,KAAK;QAClC,MAAM6C,SAAS,GAAGO,aAAa,IAAI,CAACR,IAAI,CAAC1C,MAAM,CAACN,GAAG,IAAIgD,IAAI,CAAC1C,MAAM,CAACiC,WAAW;QAC9E,MAAMkB,GAAG,GAAGV,MAAM,CAACC,IAAI,EAAE5C,KAAK,EAAEC,MAAM,EAAE+B,YAAY,EAAEa,SAAS,CAAC;QAEhE,IAAID,IAAI,CAAC1C,MAAM,CAACN,GAAG,EAAE;UACnBwD,aAAa,GAAG,IAAI;QACtB;QAEA,OAAOC,GAAG;MACZ,CAAC;IACH,CAAC,CAAC;EACJ,CAAC;AACH,CAAC;AAAC,IAAAC,QAAA,GAEa7B,cAAc;AAAA8B,OAAA,CAAAC,OAAA,GAAAF,QAAA;AAAAG,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
|
package/dist/exportParser.js
CHANGED
|
@@ -8,11 +8,22 @@ var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
|
8
8
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
10
|
const debug = (0, _debug.default)('requireExportJsdoc');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @returns {{
|
|
14
|
+
* props: object
|
|
15
|
+
* }}
|
|
16
|
+
*/
|
|
11
17
|
const createNode = function () {
|
|
12
18
|
return {
|
|
13
19
|
props: {}
|
|
14
20
|
};
|
|
15
21
|
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @param {} symbol
|
|
25
|
+
* @returns {null}
|
|
26
|
+
*/
|
|
16
27
|
const getSymbolValue = function (symbol) {
|
|
17
28
|
/* istanbul ignore next */
|
|
18
29
|
if (!symbol) {
|
|
@@ -28,6 +39,15 @@ const getSymbolValue = function (symbol) {
|
|
|
28
39
|
/* istanbul ignore next */
|
|
29
40
|
return null;
|
|
30
41
|
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
*
|
|
45
|
+
* @param {} node
|
|
46
|
+
* @param {} globals
|
|
47
|
+
* @param {} scope
|
|
48
|
+
* @param {} opts
|
|
49
|
+
* @returns {}
|
|
50
|
+
*/
|
|
31
51
|
const getIdentifier = function (node, globals, scope, opts) {
|
|
32
52
|
if (opts.simpleIdentifier) {
|
|
33
53
|
// Type is Identier for noncomputed properties
|
|
@@ -56,8 +76,18 @@ const getIdentifier = function (node, globals, scope, opts) {
|
|
|
56
76
|
};
|
|
57
77
|
let createSymbol = null;
|
|
58
78
|
|
|
59
|
-
|
|
79
|
+
/* eslint-disable complexity -- Temporary */
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
*
|
|
83
|
+
* @param {} node
|
|
84
|
+
* @param {} globals
|
|
85
|
+
* @param {} scope
|
|
86
|
+
* @param {} opt
|
|
87
|
+
* @returns {}
|
|
88
|
+
*/
|
|
60
89
|
const getSymbol = function (node, globals, scope, opt) {
|
|
90
|
+
/* eslint-enable complexity -- Temporary */
|
|
61
91
|
const opts = opt || {};
|
|
62
92
|
/* istanbul ignore next */
|
|
63
93
|
// eslint-disable-next-line default-case
|
|
@@ -159,12 +189,32 @@ const getSymbol = function (node, globals, scope, opt) {
|
|
|
159
189
|
/* istanbul ignore next */
|
|
160
190
|
return null;
|
|
161
191
|
};
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
*
|
|
195
|
+
* @param {} block
|
|
196
|
+
* @param {} name
|
|
197
|
+
* @param {} value
|
|
198
|
+
* @param {} globals
|
|
199
|
+
* @param {} isGlobal
|
|
200
|
+
* @returns {void}
|
|
201
|
+
*/
|
|
162
202
|
const createBlockSymbol = function (block, name, value, globals, isGlobal) {
|
|
163
203
|
block.props[name] = value;
|
|
164
204
|
if (isGlobal && globals.props.window && globals.props.window.special) {
|
|
165
205
|
globals.props.window.props[name] = value;
|
|
166
206
|
}
|
|
167
207
|
};
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
*
|
|
211
|
+
* @param {} node
|
|
212
|
+
* @param {} globals
|
|
213
|
+
* @param {} value
|
|
214
|
+
* @param {} scope
|
|
215
|
+
* @param {} isGlobal
|
|
216
|
+
* @returns {null}
|
|
217
|
+
*/
|
|
168
218
|
createSymbol = function (node, globals, value, scope, isGlobal) {
|
|
169
219
|
const block = scope || globals;
|
|
170
220
|
let symbol;
|
|
@@ -228,7 +278,14 @@ createSymbol = function (node, globals, value, scope, isGlobal) {
|
|
|
228
278
|
return null;
|
|
229
279
|
};
|
|
230
280
|
|
|
231
|
-
|
|
281
|
+
/**
|
|
282
|
+
* Creates variables from variable definitions
|
|
283
|
+
*
|
|
284
|
+
* @param {} node
|
|
285
|
+
* @param {} globals
|
|
286
|
+
* @param {} opts
|
|
287
|
+
* @returns {}
|
|
288
|
+
*/
|
|
232
289
|
const initVariables = function (node, globals, opts) {
|
|
233
290
|
// eslint-disable-next-line default-case
|
|
234
291
|
switch (node.type) {
|
|
@@ -266,9 +323,19 @@ const initVariables = function (node, globals, opts) {
|
|
|
266
323
|
}
|
|
267
324
|
};
|
|
268
325
|
|
|
269
|
-
|
|
270
|
-
|
|
326
|
+
/* eslint-disable complexity -- Temporary */
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Populates variable maps using AST
|
|
330
|
+
*
|
|
331
|
+
* @param {} node
|
|
332
|
+
* @param {} globals
|
|
333
|
+
* @param {} opt
|
|
334
|
+
* @param {} isExport
|
|
335
|
+
* @returns {boolean}
|
|
336
|
+
*/
|
|
271
337
|
const mapVariables = function (node, globals, opt, isExport) {
|
|
338
|
+
/* eslint-enable complexity -- Temporary */
|
|
272
339
|
/* istanbul ignore next */
|
|
273
340
|
const opts = opt || {};
|
|
274
341
|
/* istanbul ignore next */
|
|
@@ -362,6 +429,14 @@ const mapVariables = function (node, globals, opt, isExport) {
|
|
|
362
429
|
}
|
|
363
430
|
return true;
|
|
364
431
|
};
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
*
|
|
435
|
+
* @param {} node
|
|
436
|
+
* @param {} block
|
|
437
|
+
* @param {} cache
|
|
438
|
+
* @returns {boolean}
|
|
439
|
+
*/
|
|
365
440
|
const findNode = function (node, block, cache) {
|
|
366
441
|
let blockCache = cache || [];
|
|
367
442
|
/* istanbul ignore next */
|
|
@@ -392,6 +467,11 @@ const findNode = function (node, block, cache) {
|
|
|
392
467
|
};
|
|
393
468
|
const exportTypes = new Set(['ExportNamedDeclaration', 'ExportDefaultDeclaration']);
|
|
394
469
|
const ignorableNestedTypes = new Set(['FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression']);
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* @param {} nde
|
|
473
|
+
* @returns {}
|
|
474
|
+
*/
|
|
395
475
|
const getExportAncestor = function (nde) {
|
|
396
476
|
let node = nde;
|
|
397
477
|
let idx = 0;
|
|
@@ -411,6 +491,11 @@ const getExportAncestor = function (nde) {
|
|
|
411
491
|
};
|
|
412
492
|
const canBeExportedByAncestorType = new Set(['TSPropertySignature', 'TSMethodSignature', 'ClassProperty', 'PropertyDefinition', 'Method']);
|
|
413
493
|
const canExportChildrenType = new Set(['TSInterfaceBody', 'TSInterfaceDeclaration', 'TSTypeLiteral', 'TSTypeAliasDeclaration', 'ClassDeclaration', 'ClassBody', 'ClassDefinition', 'ClassExpression', 'Program']);
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* @param {} nde
|
|
497
|
+
* @returns {}
|
|
498
|
+
*/
|
|
414
499
|
const isExportByAncestor = function (nde) {
|
|
415
500
|
if (!canBeExportedByAncestorType.has(nde.type)) {
|
|
416
501
|
return false;
|
|
@@ -427,6 +512,14 @@ const isExportByAncestor = function (nde) {
|
|
|
427
512
|
}
|
|
428
513
|
return false;
|
|
429
514
|
};
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
*
|
|
518
|
+
* @param {} block
|
|
519
|
+
* @param {} node
|
|
520
|
+
* @param {} cache
|
|
521
|
+
* @returns {boolean}
|
|
522
|
+
*/
|
|
430
523
|
const findExportedNode = function (block, node, cache) {
|
|
431
524
|
/* istanbul ignore next */
|
|
432
525
|
if (block === null) {
|
|
@@ -448,6 +541,14 @@ const findExportedNode = function (block, node, cache) {
|
|
|
448
541
|
|
|
449
542
|
return false;
|
|
450
543
|
};
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
*
|
|
547
|
+
* @param {} node
|
|
548
|
+
* @param {} globals
|
|
549
|
+
* @param {} opt
|
|
550
|
+
* @returns {boolean}
|
|
551
|
+
*/
|
|
451
552
|
const isNodeExported = function (node, globals, opt) {
|
|
452
553
|
var _globals$props$module, _globals$props$module2;
|
|
453
554
|
const moduleExports = (_globals$props$module = globals.props.module) === null || _globals$props$module === void 0 ? void 0 : (_globals$props$module2 = _globals$props$module.props) === null || _globals$props$module2 === void 0 ? void 0 : _globals$props$module2.exports;
|
|
@@ -462,6 +563,14 @@ const isNodeExported = function (node, globals, opt) {
|
|
|
462
563
|
}
|
|
463
564
|
return false;
|
|
464
565
|
};
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
*
|
|
569
|
+
* @param {} node
|
|
570
|
+
* @param {} globalVars
|
|
571
|
+
* @param {} opts
|
|
572
|
+
* @returns {boolean}
|
|
573
|
+
*/
|
|
465
574
|
const parseRecursive = function (node, globalVars, opts) {
|
|
466
575
|
// Iterate from top using recursion - stop at first processed node from top
|
|
467
576
|
if (node.parent && parseRecursive(node.parent, globalVars, opts)) {
|
|
@@ -469,6 +578,18 @@ const parseRecursive = function (node, globalVars, opts) {
|
|
|
469
578
|
}
|
|
470
579
|
return mapVariables(node, globalVars, opts);
|
|
471
580
|
};
|
|
581
|
+
|
|
582
|
+
/**
|
|
583
|
+
*
|
|
584
|
+
* @param {} ast
|
|
585
|
+
* @param {} node
|
|
586
|
+
* @param {} opt
|
|
587
|
+
* @returns {{
|
|
588
|
+
* globalVars: {
|
|
589
|
+
* props: {};
|
|
590
|
+
* };
|
|
591
|
+
* }}
|
|
592
|
+
*/
|
|
472
593
|
const parse = function (ast, node, opt) {
|
|
473
594
|
/* istanbul ignore next */
|
|
474
595
|
const opts = opt || {
|
|
@@ -497,6 +618,15 @@ const parse = function (ast, node, opt) {
|
|
|
497
618
|
globalVars
|
|
498
619
|
};
|
|
499
620
|
};
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
*
|
|
624
|
+
* @param {} node
|
|
625
|
+
* @param {} sourceCode
|
|
626
|
+
* @param {} opt
|
|
627
|
+
* @param {} settings
|
|
628
|
+
* @returns {boolean}
|
|
629
|
+
*/
|
|
500
630
|
const isUncommentedExport = function (node, sourceCode, opt, settings) {
|
|
501
631
|
// console.log({node});
|
|
502
632
|
// Optimize with ancestor check for esm
|
package/dist/exportParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportParser.js","names":["_jsdoccomment","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","object","propertySymbol","property","computed","propertyValue","body","val","prototype","left","right","method","key","parent","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","_globals$props$module","_globals$props$module2","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult","_default"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'ClassExpression': {\n return getSymbol(node.body, globals, scope, opts);\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'PropertyDefinition',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeLiteral',\n 'TSTypeAliasDeclaration',\n 'ClassDeclaration',\n 'ClassBody',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAGA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAgC,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEhC,MAAMG,KAAK,GAAG,IAAAC,cAAW,EAAC,oBAAoB,CAAC;AAE/C,MAAMC,UAAU,GAAG,SAAAA,CAAA,EAAY;EAC7B,OAAO;IACLC,KAAK,EAAE,CAAC;EACV,CAAC;AACH,CAAC;AAED,MAAMC,cAAc,GAAG,SAAAA,CAAUC,MAAM,EAAE;EACvC;EACA,IAAI,CAACA,MAAM,EAAE;IACX;IACA,OAAO,IAAI;EACb;;EAEA;EACA,IAAIA,MAAM,CAACC,IAAI,KAAK,SAAS,EAAE;IAC7B,OAAOD,MAAM,CAACE,KAAK,CAACA,KAAK;EAC3B;;EAEA;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAMC,aAAa,GAAG,SAAAA,CAAUC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAE;EAC1D,IAAIA,IAAI,CAACC,gBAAgB,EAAE;IACzB;IACA,MAAMC,iBAAiB,GAAGZ,UAAU,CAAC,CAAC;IACtCY,iBAAiB,CAACR,IAAI,GAAG,SAAS;IAClCQ,iBAAiB,CAACP,KAAK,GAAG;MACxBA,KAAK,EAAEE,IAAI,CAACM;IACd,CAAC;IAED,OAAOD,iBAAiB;EAC1B;;EAEA;EACA,MAAME,KAAK,GAAGL,KAAK,IAAID,OAAO;;EAE9B;EACA,IAAIM,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC,EAAE;IAC1B,OAAOC,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;EAC/B;;EAEA;EACA;EACA,IAAIL,OAAO,CAACP,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC,EAAE;IAC5B,OAAOL,OAAO,CAACP,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;EACjC;EAEA,OAAO,IAAI;AACb,CAAC;AAED,IAAIE,YAAY,GAAG,IAAI;;AAEvB;AACA,MAAMC,SAAS,GAAG,SAAAA,CAAUT,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEQ,GAAG,EAAE;EACrD,MAAMP,IAAI,GAAGO,GAAG,IAAI,CAAC,CAAC;EACtB;EACA;EACA,QAAQV,IAAI,CAACH,IAAI;IACjB,KAAK,YAAY;MAAE;QACjB,OAAOE,aAAa,CAACC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEC,IAAI,CAAC;MAClD;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAMf,GAAG,GAAGqB,SAAS,CAACT,IAAI,CAACW,MAAM,EAAEV,OAAO,EAAEC,KAAK,EAAEC,IAAI,CAAC;QACxD,MAAMS,cAAc,GAAGH,SAAS,CAACT,IAAI,CAACa,QAAQ,EAAEZ,OAAO,EAAEC,KAAK,EAAE;UAC9DE,gBAAgB,EAAE,CAACJ,IAAI,CAACc;QAC1B,CAAC,CAAC;QACF,MAAMC,aAAa,GAAGpB,cAAc,CAACiB,cAAc,CAAC;;QAEpD;QACA,IAAIxB,GAAG,IAAI2B,aAAa,IAAI3B,GAAG,CAACM,KAAK,CAACqB,aAAa,CAAC,EAAE;UACpD,MAAMR,KAAK,GAAGnB,GAAG,CAACM,KAAK,CAACqB,aAAa,CAAC;UAEtC,OAAOR,KAAK;QACd;;QAEA;AACJ;AACA;AACA;AACA;AACA;QAEI;QACAhB,KAAK,CAAE,sCAAqCS,IAAI,CAACa,QAAQ,CAACP,IAAK,EAAC,CAAC;;QAEjE;QACA,OAAO,IAAI;MACb;IAEA,KAAK,iBAAiB;MAAE;QACtB,OAAOG,SAAS,CAACT,IAAI,CAACgB,IAAI,EAAEf,OAAO,EAAEC,KAAK,EAAEC,IAAI,CAAC;MACnD;IAEA,KAAK,wBAAwB;IAC7B,KAAK,mBAAmB;IAAE,KAAK,wBAAwB;IACvD,KAAK,kBAAkB;IACvB,KAAK,oBAAoB;IAAE,KAAK,qBAAqB;IACrD,KAAK,yBAAyB;MAAE;QAC9B,MAAMc,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxBwB,GAAG,CAACvB,KAAK,CAACwB,SAAS,GAAGzB,UAAU,CAAC,CAAC;QAClCwB,GAAG,CAACvB,KAAK,CAACwB,SAAS,CAACrB,IAAI,GAAG,QAAQ;QACnCoB,GAAG,CAACpB,IAAI,GAAG,QAAQ;QACnBoB,GAAG,CAACnB,KAAK,GAAGE,IAAI;QAEhB,OAAOiB,GAAG;MACZ;IAEA,KAAK,sBAAsB;MAAE;QAC3B,OAAOT,YAAY,CAACR,IAAI,CAACmB,IAAI,EAAElB,OAAO,EAAED,IAAI,CAACoB,KAAK,EAAElB,KAAK,EAAEC,IAAI,CAAC;MAClE;IAEA,KAAK,WAAW;MAAE;QAChB,MAAMc,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxB,KAAK,MAAM4B,MAAM,IAAIrB,IAAI,CAACgB,IAAI,EAAE;UAC9BC,GAAG,CAACvB,KAAK,CAAC2B,MAAM,CAACC,GAAG,CAAChB,IAAI,CAAC,GAAGb,UAAU,CAAC,CAAC;UACzCwB,GAAG,CAACvB,KAAK,CAAC2B,MAAM,CAACC,GAAG,CAAChB,IAAI,CAAC,CAACT,IAAI,GAAG,QAAQ;UAC1CoB,GAAG,CAACvB,KAAK,CAAC2B,MAAM,CAACC,GAAG,CAAChB,IAAI,CAAC,CAACR,KAAK,GAAGuB,MAAM,CAACvB,KAAK;QACjD;QAEAmB,GAAG,CAACpB,IAAI,GAAG,QAAQ;QACnBoB,GAAG,CAACnB,KAAK,GAAGE,IAAI,CAACuB,MAAM;QAEvB,OAAON,GAAG;MACZ;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAMA,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxBwB,GAAG,CAACpB,IAAI,GAAG,QAAQ;QACnB,KAAK,MAAM2B,IAAI,IAAIxB,IAAI,CAACyB,UAAU,EAAE;UAClC,IAAI;UACF;UACA,eAAe;UAEf;UACA,4BAA4B,CAC7B,CAACC,QAAQ,CAACF,IAAI,CAAC3B,IAAI,CAAC,EAAE;YACrB;UACF;UAEA,MAAM8B,OAAO,GAAGlB,SAAS,CAACe,IAAI,CAAC1B,KAAK,EAAEG,OAAO,EAAEC,KAAK,EAAEC,IAAI,CAAC;UAC3D;UACA,IAAIwB,OAAO,EAAE;YACXV,GAAG,CAACvB,KAAK,CAAC8B,IAAI,CAACF,GAAG,CAAChB,IAAI,CAAC,GAAGqB,OAAO;UACpC;QACF;QAEA,OAAOV,GAAG;MACZ;IAEA,KAAK,SAAS;MAAE;QACd,MAAMA,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxBwB,GAAG,CAACpB,IAAI,GAAG,SAAS;QACpBoB,GAAG,CAACnB,KAAK,GAAGE,IAAI;QAEhB,OAAOiB,GAAG;MACZ;EACA;;EAEA;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAMW,iBAAiB,GAAG,SAAAA,CAAUrB,KAAK,EAAED,IAAI,EAAER,KAAK,EAAEG,OAAO,EAAE4B,QAAQ,EAAE;EACzEtB,KAAK,CAACb,KAAK,CAACY,IAAI,CAAC,GAAGR,KAAK;EACzB,IAAI+B,QAAQ,IAAI5B,OAAO,CAACP,KAAK,CAACoC,MAAM,IAAI7B,OAAO,CAACP,KAAK,CAACoC,MAAM,CAACC,OAAO,EAAE;IACpE9B,OAAO,CAACP,KAAK,CAACoC,MAAM,CAACpC,KAAK,CAACY,IAAI,CAAC,GAAGR,KAAK;EAC1C;AACF,CAAC;AAEDU,YAAY,GAAG,SAAAA,CAAUR,IAAI,EAAEC,OAAO,EAAEH,KAAK,EAAEI,KAAK,EAAE2B,QAAQ,EAAE;EAC9D,MAAMtB,KAAK,GAAGL,KAAK,IAAID,OAAO;EAC9B,IAAIL,MAAM;EACV;EACA,QAAQI,IAAI,CAACH,IAAI;IACjB,KAAK,qBAAqB;IAC1B;IACA;IACA,KAAK,mBAAmB;IAAE,KAAK,wBAAwB;IACvD;IACA;IACA,KAAK,wBAAwB;IAAE,KAAK,kBAAkB;MAAE;QACtD;QACA,IAAIG,IAAI,CAACgC,EAAE,IAAIhC,IAAI,CAACgC,EAAE,CAACnC,IAAI,KAAK,YAAY,EAAE;UAC5C,OAAOW,YAAY,CAACR,IAAI,CAACgC,EAAE,EAAE/B,OAAO,EAAED,IAAI,EAAEC,OAAO,CAAC;QACtD;;QAEA;QACA;MACF;IAEA,KAAK,YAAY;MAAE;QACjB,IAAIH,KAAK,EAAE;UACT,MAAMmC,WAAW,GAAGxB,SAAS,CAACX,KAAK,EAAEG,OAAO,EAAEM,KAAK,CAAC;UACpD;UACA,IAAI0B,WAAW,EAAE;YACfL,iBAAiB,CAACrB,KAAK,EAAEP,IAAI,CAACM,IAAI,EAAE2B,WAAW,EAAEhC,OAAO,EAAE4B,QAAQ,CAAC;YAEnE,OAAOtB,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;UAC/B;;UAEA;UACAf,KAAK,CAAC,yCAAyC,EAAES,IAAI,CAACM,IAAI,CAAC;QAC7D,CAAC,MAAM;UACLsB,iBAAiB,CAACrB,KAAK,EAAEP,IAAI,CAACM,IAAI,EAAEb,UAAU,CAAC,CAAC,EAAEQ,OAAO,EAAE4B,QAAQ,CAAC;UAEpE,OAAOtB,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;QAC/B;;QAEA;QACA;MACF;IAEA,KAAK,kBAAkB;MAAE;QACvBV,MAAM,GAAGa,SAAS,CAACT,IAAI,CAACW,MAAM,EAAEV,OAAO,EAAEM,KAAK,CAAC;QAE/C,MAAMK,cAAc,GAAGH,SAAS,CAACT,IAAI,CAACa,QAAQ,EAAEZ,OAAO,EAAEM,KAAK,EAAE;UAC9DH,gBAAgB,EAAE,CAACJ,IAAI,CAACc;QAC1B,CAAC,CAAC;QACF,MAAMC,aAAa,GAAGpB,cAAc,CAACiB,cAAc,CAAC;QACpD,IAAIhB,MAAM,IAAImB,aAAa,EAAE;UAC3Ba,iBAAiB,CAAChC,MAAM,EAAEmB,aAAa,EAAEN,SAAS,CAACX,KAAK,EAAEG,OAAO,EAAEM,KAAK,CAAC,EAAEN,OAAO,EAAE4B,QAAQ,CAAC;UAE7F,OAAOjC,MAAM,CAACF,KAAK,CAACqB,aAAa,CAAC;QACpC;;QAEA;QACAxB,KAAK,CAAC,sCAAsC,EAAES,IAAI,CAACa,QAAQ,CAACP,IAAI,CAAC;QACjE;MACF;EACA;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA,MAAM4B,aAAa,GAAG,SAAAA,CAAUlC,IAAI,EAAEC,OAAO,EAAEE,IAAI,EAAE;EACnD;EACA,QAAQH,IAAI,CAACH,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,KAAK,MAAMsC,SAAS,IAAInC,IAAI,CAACgB,IAAI,EAAE;UACjCkB,aAAa,CAACC,SAAS,EAAElC,OAAO,EAAEE,IAAI,CAAC;QACzC;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B+B,aAAa,CAAClC,IAAI,CAACoC,UAAU,EAAEnC,OAAO,EAAEE,IAAI,CAAC;QAC7C;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B,KAAK,MAAMkC,WAAW,IAAIrC,IAAI,CAACsC,YAAY,EAAE;UAC3C;UACA,MAAM1C,MAAM,GAAGY,YAAY,CAAC6B,WAAW,CAACL,EAAE,EAAE/B,OAAO,EAAE,IAAI,EAAEA,OAAO,CAAC;UACnE,IAAIE,IAAI,CAACoC,UAAU,IAAIvC,IAAI,CAACwC,IAAI,KAAK,KAAK,IAAIvC,OAAO,CAACP,KAAK,CAACoC,MAAM,EAAE;YAClE;YACA7B,OAAO,CAACP,KAAK,CAACoC,MAAM,CAACpC,KAAK,CAAC2C,WAAW,CAACL,EAAE,CAAC1B,IAAI,CAAC,GAAGV,MAAM;UAC1D;QACF;QAEA;MACF;IAEA,KAAK,wBAAwB;MAAE;QAC7B,IAAII,IAAI,CAACqC,WAAW,EAAE;UACpBH,aAAa,CAAClC,IAAI,CAACqC,WAAW,EAAEpC,OAAO,EAAEE,IAAI,CAAC;QAChD;QAEA;MACF;EACA;AACF,CAAC;;AAED;AACA;AACA,MAAMsC,YAAY,GAAG,SAAAA,CAAUzC,IAAI,EAAEC,OAAO,EAAES,GAAG,EAAEgC,QAAQ,EAAE;EAC3D;EACA,MAAMvC,IAAI,GAAGO,GAAG,IAAI,CAAC,CAAC;EACtB;EACA,QAAQV,IAAI,CAACH,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,IAAIM,IAAI,CAACwC,aAAa,EAAE;UACtB,OAAO,KAAK;QACd;QAEA,KAAK,MAAMR,SAAS,IAAInC,IAAI,CAACgB,IAAI,EAAE;UACjCyB,YAAY,CAACN,SAAS,EAAElC,OAAO,EAAEE,IAAI,CAAC;QACxC;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1BsC,YAAY,CAACzC,IAAI,CAACoC,UAAU,EAAEnC,OAAO,EAAEE,IAAI,CAAC;QAC5C;MACF;IAEA,KAAK,sBAAsB;MAAE;QAC3BK,YAAY,CAACR,IAAI,CAACmB,IAAI,EAAElB,OAAO,EAAED,IAAI,CAACoB,KAAK,CAAC;QAC5C;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B,KAAK,MAAMiB,WAAW,IAAIrC,IAAI,CAACsC,YAAY,EAAE;UAC3C,MAAMT,QAAQ,GAAG1B,IAAI,CAACoC,UAAU,IAAIvC,IAAI,CAACwC,IAAI,KAAK,KAAK,IAAIvC,OAAO,CAACP,KAAK,CAACoC,MAAM;UAC/E,MAAMlC,MAAM,GAAGY,YAAY,CAAC6B,WAAW,CAACL,EAAE,EAAE/B,OAAO,EAAEoC,WAAW,CAACO,IAAI,EAAE3C,OAAO,EAAE4B,QAAQ,CAAC;UACzF,IAAIjC,MAAM,IAAI8C,QAAQ,EAAE;YACtB9C,MAAM,CAACiD,QAAQ,GAAG,IAAI;UACxB;QACF;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B;QACA,IAAI7C,IAAI,CAACgC,EAAE,CAACnC,IAAI,KAAK,YAAY,EAAE;UACjCW,YAAY,CAACR,IAAI,CAACgC,EAAE,EAAE/B,OAAO,EAAED,IAAI,EAAEC,OAAO,EAAE,IAAI,CAAC;QACrD;QAEA;MACF;IAEA,KAAK,0BAA0B;MAAE;QAC/B,MAAML,MAAM,GAAGY,YAAY,CAACR,IAAI,CAACqC,WAAW,EAAEpC,OAAO,EAAED,IAAI,CAACqC,WAAW,CAAC;QACxE,IAAIzC,MAAM,EAAE;UACVA,MAAM,CAACiD,QAAQ,GAAG,IAAI;QACxB,CAAC,MAAM,IAAI,CAAC7C,IAAI,CAACgC,EAAE,EAAE;UACnB/B,OAAO,CAAC6C,iBAAiB,GAAG9C,IAAI,CAACqC,WAAW;QAC9C;QAEA;MACF;IAEA,KAAK,wBAAwB;MAAE;QAC7B,IAAIrC,IAAI,CAACqC,WAAW,EAAE;UACpB,IAAIrC,IAAI,CAACqC,WAAW,CAACxC,IAAI,KAAK,qBAAqB,EAAE;YACnD4C,YAAY,CAACzC,IAAI,CAACqC,WAAW,EAAEpC,OAAO,EAAEE,IAAI,EAAE,IAAI,CAAC;UACrD,CAAC,MAAM;YACL,MAAMP,MAAM,GAAGY,YAAY,CAACR,IAAI,CAACqC,WAAW,EAAEpC,OAAO,EAAED,IAAI,CAACqC,WAAW,CAAC;YACxE;YACA,IAAIzC,MAAM,EAAE;cACVA,MAAM,CAACiD,QAAQ,GAAG,IAAI;YACxB;UACF;QACF;QAEA,KAAK,MAAME,SAAS,IAAI/C,IAAI,CAACgD,UAAU,EAAE;UACvCP,YAAY,CAACM,SAAS,EAAE9C,OAAO,EAAEE,IAAI,CAAC;QACxC;QAEA;MACF;IAEA,KAAK,iBAAiB;MAAE;QACtB,MAAMP,MAAM,GAAGa,SAAS,CAACT,IAAI,CAACiD,KAAK,EAAEhD,OAAO,EAAEA,OAAO,CAAC;QACtD;QACA,IAAIL,MAAM,EAAE;UACVA,MAAM,CAACiD,QAAQ,GAAG,IAAI;QACxB;QAEA;MACF;IAEA,KAAK,kBAAkB;MAAE;QACvBrC,YAAY,CAACR,IAAI,CAACgC,EAAE,EAAE/B,OAAO,EAAED,IAAI,CAACgB,IAAI,EAAEf,OAAO,CAAC;QAClD;MACF;IAEA;MAAS;QACP;QACA,OAAO,KAAK;MACd;EACA;EAEA,OAAO,IAAI;AACb,CAAC;AAED,MAAMiD,QAAQ,GAAG,SAAAA,CAAUlD,IAAI,EAAEO,KAAK,EAAE4C,KAAK,EAAE;EAC7C,IAAIC,UAAU,GAAGD,KAAK,IAAI,EAAE;EAC5B;EACA,IAAI,CAAC5C,KAAK,IAAI6C,UAAU,CAAC1B,QAAQ,CAACnB,KAAK,CAAC,EAAE;IACxC,OAAO,KAAK;EACd;EAEA6C,UAAU,GAAGA,UAAU,CAACC,KAAK,CAAC,CAAC;EAC/BD,UAAU,CAACE,IAAI,CAAC/C,KAAK,CAAC;EAEtB,IACE,CAACA,KAAK,CAACV,IAAI,KAAK,QAAQ,IAAIU,KAAK,CAACV,IAAI,KAAK,kBAAkB,KAC7DU,KAAK,CAACT,KAAK,KAAKE,IAAI,EACpB;IACA,OAAO,IAAI;EACb;EAEA,MAAM;IACJN,KAAK,GAAGa,KAAK,CAACS;EAChB,CAAC,GAAGT,KAAK;EACT,KAAK,MAAMgD,OAAO,IAAIC,MAAM,CAACC,MAAM,CAAC/D,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;IAChD,IAAIgE,KAAK,CAACC,OAAO,CAACJ,OAAO,CAAC,EAAE;MAC1B;MACA,IAAIA,OAAO,CAACK,IAAI,CAAE3C,GAAG,IAAK;QACxB,OAAOiC,QAAQ,CAAClD,IAAI,EAAEiB,GAAG,EAAEmC,UAAU,CAAC;MACxC,CAAC,CAAC,EAAE;QACF,OAAO,IAAI;MACb;IACF,CAAC,MAAM,IAAIF,QAAQ,CAAClD,IAAI,EAAEuD,OAAO,EAAEH,UAAU,CAAC,EAAE;MAC9C,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMS,WAAW,GAAG,IAAIC,GAAG,CAAC,CAC1B,wBAAwB,EAAE,0BAA0B,CACrD,CAAC;AACF,MAAMC,oBAAoB,GAAG,IAAID,GAAG,CAAC,CACnC,qBAAqB,EAAE,yBAAyB,EAAE,oBAAoB,CACvE,CAAC;AACF,MAAME,iBAAiB,GAAG,SAAAA,CAAUC,GAAG,EAAE;EACvC,IAAIjE,IAAI,GAAGiE,GAAG;EACd,IAAIC,GAAG,GAAG,CAAC;EACX,MAAMC,eAAe,GAAGJ,oBAAoB,CAACK,GAAG,CAACH,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEpE,IAAI,CAAC;EAC3D,OAAOG,IAAI,EAAE;IACX;IACA,IAAIkE,GAAG,IAAI,CAAC,IAAIC,eAAe,EAAE;MAC/B;IACF;IAEA,IAAIN,WAAW,CAACO,GAAG,CAACpE,IAAI,CAACH,IAAI,CAAC,EAAE;MAC9B,OAAOG,IAAI;IACb;IAEAA,IAAI,GAAGA,IAAI,CAACuB,MAAM;IAClB2C,GAAG,EAAE;EACP;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMG,2BAA2B,GAAG,IAAIP,GAAG,CAAC,CAC1C,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,QAAQ,CACT,CAAC;AAEF,MAAMQ,qBAAqB,GAAG,IAAIR,GAAG,CAAC,CACpC,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,CACV,CAAC;AAEF,MAAMS,kBAAkB,GAAG,SAAAA,CAAUN,GAAG,EAAE;EACxC,IAAI,CAACI,2BAA2B,CAACD,GAAG,CAACH,GAAG,CAACpE,IAAI,CAAC,EAAE;IAC9C,OAAO,KAAK;EACd;EAEA,IAAIG,IAAI,GAAGiE,GAAG,CAAC1C,MAAM;EACrB,OAAOvB,IAAI,EAAE;IACX,IAAI6D,WAAW,CAACO,GAAG,CAACpE,IAAI,CAACH,IAAI,CAAC,EAAE;MAC9B,OAAOG,IAAI;IACb;IAEA,IAAI,CAACsE,qBAAqB,CAACF,GAAG,CAACpE,IAAI,CAACH,IAAI,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;IAEAG,IAAI,GAAGA,IAAI,CAACuB,MAAM;EACpB;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMiD,gBAAgB,GAAG,SAAAA,CAAUjE,KAAK,EAAEP,IAAI,EAAEmD,KAAK,EAAE;EACrD;EACA,IAAI5C,KAAK,KAAK,IAAI,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,MAAM6C,UAAU,GAAGD,KAAK,IAAI,EAAE;EAC9B,MAAM;IACJzD;EACF,CAAC,GAAGa,KAAK;EACT,KAAK,MAAMgD,OAAO,IAAIC,MAAM,CAACC,MAAM,CAAC/D,KAAK,CAAC,EAAE;IAC1C0D,UAAU,CAACE,IAAI,CAACC,OAAO,CAAC;IACxB,IAAIA,OAAO,CAACV,QAAQ,KAAK7C,IAAI,KAAKuD,OAAO,CAACzD,KAAK,IAAIoD,QAAQ,CAAClD,IAAI,EAAEuD,OAAO,CAACzD,KAAK,CAAC,CAAC,EAAE;MACjF,OAAO,IAAI;IACb;;IAEA;IACA;EACF;;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAM2E,cAAc,GAAG,SAAAA,CAAUzE,IAAI,EAAEC,OAAO,EAAES,GAAG,EAAE;EAAA,IAAAgE,qBAAA,EAAAC,sBAAA;EACnD,MAAMC,aAAa,IAAAF,qBAAA,GAAGzE,OAAO,CAACP,KAAK,CAACmF,MAAM,cAAAH,qBAAA,wBAAAC,sBAAA,GAApBD,qBAAA,CAAsBhF,KAAK,cAAAiF,sBAAA,uBAA3BA,sBAAA,CAA6BG,OAAO;EAC1D,IACEpE,GAAG,CAACqE,iBAAiB,IAAIH,aAAa,IAAI1B,QAAQ,CAAClD,IAAI,EAAE4E,aAAa,CAAC,EACvE;IACA,OAAO,IAAI;EACb;EAEA,IAAIlE,GAAG,CAAC6B,UAAU,IAAItC,OAAO,CAACP,KAAK,CAACoC,MAAM,IAAIoB,QAAQ,CAAClD,IAAI,EAAEC,OAAO,CAACP,KAAK,CAACoC,MAAM,CAAC,EAAE;IAClF,OAAO,IAAI;EACb;EAEA,IAAIpB,GAAG,CAACsE,GAAG,IAAIR,gBAAgB,CAACvE,OAAO,EAAED,IAAI,CAAC,EAAE;IAC9C,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMiF,cAAc,GAAG,SAAAA,CAAUjF,IAAI,EAAEkF,UAAU,EAAE/E,IAAI,EAAE;EACvD;EACA,IAAIH,IAAI,CAACuB,MAAM,IAAI0D,cAAc,CAACjF,IAAI,CAACuB,MAAM,EAAE2D,UAAU,EAAE/E,IAAI,CAAC,EAAE;IAChE,OAAO,IAAI;EACb;EAEA,OAAOsC,YAAY,CAACzC,IAAI,EAAEkF,UAAU,EAAE/E,IAAI,CAAC;AAC7C,CAAC;AAED,MAAMgF,KAAK,GAAG,SAAAA,CAAUC,GAAG,EAAEpF,IAAI,EAAEU,GAAG,EAAE;EACtC;EACA,MAAMP,IAAI,GAAGO,GAAG,IAAI;IAClBiC,aAAa,EAAE,KAAK;IACpBqC,GAAG,EAAE,IAAI;IACTD,iBAAiB,EAAE,IAAI;IACvBxC,UAAU,EAAE;EACd,CAAC;EAED,MAAM2C,UAAU,GAAGzF,UAAU,CAAC,CAAC;EAC/B,IAAIU,IAAI,CAAC4E,iBAAiB,EAAE;IAC1BG,UAAU,CAACxF,KAAK,CAACmF,MAAM,GAAGpF,UAAU,CAAC,CAAC;IACtCyF,UAAU,CAACxF,KAAK,CAACmF,MAAM,CAACnF,KAAK,CAACoF,OAAO,GAAGrF,UAAU,CAAC,CAAC;IACpDyF,UAAU,CAACxF,KAAK,CAACoF,OAAO,GAAGI,UAAU,CAACxF,KAAK,CAACmF,MAAM,CAACnF,KAAK,CAACoF,OAAO;EAClE;EAEA,IAAI3E,IAAI,CAACoC,UAAU,EAAE;IACnB2C,UAAU,CAACxF,KAAK,CAACoC,MAAM,GAAGrC,UAAU,CAAC,CAAC;IACtCyF,UAAU,CAACxF,KAAK,CAACoC,MAAM,CAACC,OAAO,GAAG,IAAI;EACxC;EAEA,IAAI5B,IAAI,CAACwC,aAAa,EAAE;IACtBsC,cAAc,CAACjF,IAAI,EAAEkF,UAAU,EAAE/E,IAAI,CAAC;EACxC,CAAC,MAAM;IACL+B,aAAa,CAACkD,GAAG,EAAEF,UAAU,EAAE/E,IAAI,CAAC;IACpCsC,YAAY,CAAC2C,GAAG,EAAEF,UAAU,EAAE/E,IAAI,CAAC;EACrC;EAEA,OAAO;IACL+E;EACF,CAAC;AACH,CAAC;AAED,MAAMG,mBAAmB,GAAG,SAAAA,CAAUrF,IAAI,EAAEsF,UAAU,EAAE5E,GAAG,EAAE6E,QAAQ,EAAE;EACrE;EACA;EACA,IAAI7E,GAAG,CAACsE,GAAG,EAAE;IACX,MAAMQ,UAAU,GAAGxB,iBAAiB,CAAChE,IAAI,CAAC;;IAE1C;IACA,IAAIwF,UAAU,IAAI,CAAC,IAAAC,8BAAgB,EAACD,UAAU,EAAEF,UAAU,EAAEC,QAAQ,CAAC,EAAE;MACrE,OAAO,IAAI;IACb;;IAEA;AACJ;AACA;IACI,IACEhB,kBAAkB,CAACvE,IAAI,CAAC,IACxB,CAAC,IAAAyF,8BAAgB,EAACzF,IAAI,EAAEsF,UAAU,EAAEC,QAAQ,CAAC,EAC7C;MACA,OAAO,IAAI;IACb;EACF;EAEA,MAAMG,WAAW,GAAGP,KAAK,CAACG,UAAU,CAACF,GAAG,EAAEpF,IAAI,EAAEU,GAAG,CAAC;EAEpD,OAAO+D,cAAc,CAACzE,IAAI,EAAE0F,WAAW,CAACR,UAAU,EAAExE,GAAG,CAAC;AAC1D,CAAC;AAAC,IAAAiF,QAAA,GAEa;EACbN,mBAAmB;EACnBF;AACF,CAAC;AAAAL,OAAA,CAAAxF,OAAA,GAAAqG,QAAA;AAAAd,MAAA,CAAAC,OAAA,GAAAA,OAAA,CAAAxF,OAAA"}
|
|
1
|
+
{"version":3,"file":"exportParser.js","names":["_jsdoccomment","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","object","propertySymbol","property","computed","propertyValue","body","val","prototype","left","right","method","key","parent","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","_globals$props$module","_globals$props$module2","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult","_default"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @returns {{\n * props: object\n * }}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {} symbol\n * @returns {null}\n */\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\n/**\n *\n * @param {} node\n * @param {} globals\n * @param {} scope\n * @param {} opts\n * @returns {}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n *\n * @param {} node\n * @param {} globals\n * @param {} scope\n * @param {} opt\n * @returns {}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n /* eslint-enable complexity -- Temporary */\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'ClassExpression': {\n return getSymbol(node.body, globals, scope, opts);\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\n/**\n *\n * @param {} block\n * @param {} name\n * @param {} value\n * @param {} globals\n * @param {} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\n/**\n *\n * @param {} node\n * @param {} globals\n * @param {} value\n * @param {} scope\n * @param {} isGlobal\n * @returns {null}\n */\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n *\n * @param {} node\n * @param {} globals\n * @param {} opts\n * @returns {}\n */\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * Populates variable maps using AST\n *\n * @param {} node\n * @param {} globals\n * @param {} opt\n * @param {} isExport\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* eslint-enable complexity -- Temporary */\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {} node\n * @param {} block\n * @param {} cache\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\n\n/**\n * @param {} nde\n * @returns {}\n */\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'PropertyDefinition',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeLiteral',\n 'TSTypeAliasDeclaration',\n 'ClassDeclaration',\n 'ClassBody',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\n/**\n * @param {} nde\n * @returns {}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {} block\n * @param {} node\n * @param {} cache\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {} node\n * @param {} globals\n * @param {} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {} node\n * @param {} globalVars\n * @param {} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {} ast\n * @param {} node\n * @param {} opt\n * @returns {{\n * globalVars: {\n * props: {};\n * };\n * }}\n */\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\n/**\n *\n * @param {} node\n * @param {} sourceCode\n * @param {} opt\n * @param {} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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"}
|