eslint-plugin-jsdoc 36.1.0 → 37.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +37 -16
  2. package/dist/alignTransform.js +3 -1
  3. package/dist/alignTransform.js.map +1 -1
  4. package/dist/bin/generateRule.js.map +1 -1
  5. package/dist/exportParser.js +29 -17
  6. package/dist/exportParser.js.map +1 -1
  7. package/dist/generateRule.js.map +1 -1
  8. package/dist/iterateJsdoc.js +43 -35
  9. package/dist/iterateJsdoc.js.map +1 -1
  10. package/dist/jsdocUtils.js +26 -13
  11. package/dist/jsdocUtils.js.map +1 -1
  12. package/dist/rules/checkAccess.js.map +1 -1
  13. package/dist/rules/checkExamples.js +19 -7
  14. package/dist/rules/checkExamples.js.map +1 -1
  15. package/dist/rules/checkIndentation.js +2 -2
  16. package/dist/rules/checkIndentation.js.map +1 -1
  17. package/dist/rules/checkLineAlignment.js +6 -4
  18. package/dist/rules/checkLineAlignment.js.map +1 -1
  19. package/dist/rules/checkParamNames.js +17 -12
  20. package/dist/rules/checkParamNames.js.map +1 -1
  21. package/dist/rules/checkPropertyNames.js.map +1 -1
  22. package/dist/rules/checkTagNames.js +4 -4
  23. package/dist/rules/checkTagNames.js.map +1 -1
  24. package/dist/rules/checkTypes.js +9 -7
  25. package/dist/rules/checkTypes.js.map +1 -1
  26. package/dist/rules/checkValues.js.map +1 -1
  27. package/dist/rules/emptyTags.js +3 -2
  28. package/dist/rules/emptyTags.js.map +1 -1
  29. package/dist/rules/matchDescription.js +1 -1
  30. package/dist/rules/matchDescription.js.map +1 -1
  31. package/dist/rules/matchName.js +6 -4
  32. package/dist/rules/matchName.js.map +1 -1
  33. package/dist/rules/multilineBlocks.js +4 -2
  34. package/dist/rules/multilineBlocks.js.map +1 -1
  35. package/dist/rules/newlineAfterDescription.js +1 -1
  36. package/dist/rules/newlineAfterDescription.js.map +1 -1
  37. package/dist/rules/noBadBlocks.js +3 -3
  38. package/dist/rules/noBadBlocks.js.map +1 -1
  39. package/dist/rules/noDefaults.js +9 -6
  40. package/dist/rules/noDefaults.js.map +1 -1
  41. package/dist/rules/noMissingSyntax.js.map +1 -1
  42. package/dist/rules/noMultiAsterisks.js +1 -1
  43. package/dist/rules/noMultiAsterisks.js.map +1 -1
  44. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  45. package/dist/rules/noTypes.js +6 -3
  46. package/dist/rules/noTypes.js.map +1 -1
  47. package/dist/rules/noUndefinedTypes.js +5 -4
  48. package/dist/rules/noUndefinedTypes.js.map +1 -1
  49. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  50. package/dist/rules/requireDescription.js +2 -2
  51. package/dist/rules/requireDescription.js.map +1 -1
  52. package/dist/rules/requireDescriptionCompleteSentence.js +4 -3
  53. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  54. package/dist/rules/requireExample.js +2 -2
  55. package/dist/rules/requireExample.js.map +1 -1
  56. package/dist/rules/requireFileOverview.js.map +1 -1
  57. package/dist/rules/requireHyphenBeforeParamDescription.js +10 -7
  58. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  59. package/dist/rules/requireJsdoc.js +10 -6
  60. package/dist/rules/requireJsdoc.js.map +1 -1
  61. package/dist/rules/requireParam.js +34 -28
  62. package/dist/rules/requireParam.js.map +1 -1
  63. package/dist/rules/requireProperty.js +3 -3
  64. package/dist/rules/requireProperty.js.map +1 -1
  65. package/dist/rules/requireReturns.js.map +1 -1
  66. package/dist/rules/requireReturnsCheck.js.map +1 -1
  67. package/dist/rules/tagLines.js +11 -8
  68. package/dist/rules/tagLines.js.map +1 -1
  69. package/dist/rules/validTypes.js +15 -13
  70. package/dist/rules/validTypes.js.map +1 -1
  71. package/dist/tagNames.js +1 -1
  72. package/package.json +52 -49
package/README.md CHANGED
@@ -250,10 +250,8 @@ how many line breaks to add when a block is missing.
250
250
  types/namepaths (Closure allows types on some tags which the others do not,
251
251
  so these tags will additionally be checked in "closure" mode)
252
252
  - For type-checking rules, impacts parsing of types (through
253
- [jsdoctypeparser](https://github.com/jsdoctypeparser/jsdoctypeparser)
254
- dependency); note that some TypeScript features are
255
- [not yet](https://github.com/gajus/eslint-plugin-jsdoc/issues/145)
256
- [supported](https://github.com/jsdoctypeparser/jsdoctypeparser/issues/50)
253
+ [jsdoc-type-pratt-parser](https://github.com/simonseyock/jsdoc-type-pratt-parser)
254
+ dependency)
257
255
  - Check preferred tag names
258
256
  - Disallows namepath on `@interface` for "closure" mode in `valid-types` (and
259
257
  avoids checking in other rules)
@@ -579,7 +577,7 @@ properties:
579
577
  declaration of the function expression for
580
578
  `const quux = function () {}`, the associated comment would,
581
579
  in both cases, generally be expected to be on the line above both, rather
582
- than to be immediately preceding the funciton (in the case of the
580
+ than to be immediately preceding the function (in the case of the
583
581
  function). See [@es-joy/jsdoccomment](https://github.com/es-joy/jsdoccomment)
584
582
  for the precise structure of the comment (and comment type) nodes.
585
583
 
@@ -947,6 +945,9 @@ function quux (foo) {
947
945
  <a name="eslint-plugin-jsdoc-rules-check-examples"></a>
948
946
  ### <code>check-examples</code>
949
947
 
948
+ > **NOTE**: This rule currently does not work in ESLint 8 (we are waiting for
949
+ > [issue 14745](https://github.com/eslint/eslint/issues/14745)).
950
+
950
951
  Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules. Also
951
952
  has options to lint the default values of optional `@param`/`@arg`/`@argument`
952
953
  and `@property`/`@prop` tags or the values of `@default`/`@defaultvalue` tags.
@@ -1934,6 +1935,20 @@ function quux () {
1934
1935
  * ```
1935
1936
  */
1936
1937
  // "jsdoc/check-indentation": ["error"|"warn", {"excludeTags":[]}]
1938
+
1939
+ /**
1940
+ * @example
1941
+ * ```
1942
+ * @MyDecorator({
1943
+ * myOptions: 42
1944
+ * })
1945
+ * export class MyClass {}
1946
+ * ```
1947
+ */
1948
+ function MyDecorator(options: { myOptions: number }) {
1949
+ return (Base: Function) => {};
1950
+ }
1951
+ // "jsdoc/check-indentation": ["error"|"warn", {"excludeTags":["example","MyDecorator"]}]
1937
1952
  ````
1938
1953
 
1939
1954
 
@@ -4753,7 +4768,7 @@ behavior.
4753
4768
  See also the documentation on `settings.jsdoc.preferredTypes` which impacts
4754
4769
  the behavior of `check-types`.
4755
4770
 
4756
- Note that if there is an error [parsing](https://github.com/jsdoctypeparser/jsdoctypeparser)
4771
+ Note that if there is an error [parsing](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser)
4757
4772
  types for a tag, the function will silently ignore that tag, leaving it to
4758
4773
  the `valid-types` rule to report parsing errors.
4759
4774
 
@@ -6902,7 +6917,7 @@ class MyClass {
6902
6917
  */
6903
6918
  myClassField = 1
6904
6919
  }
6905
- // "jsdoc/match-description": ["error"|"warn", {"contexts":["ClassProperty"]}]
6920
+ // "jsdoc/match-description": ["error"|"warn", {"contexts":["PropertyDefinition"]}]
6906
6921
  // Message: JSDoc description does not satisfy the regex pattern.
6907
6922
 
6908
6923
  /**
@@ -7170,7 +7185,7 @@ class MyClass {
7170
7185
  */
7171
7186
  myClassField = 1
7172
7187
  }
7173
- // "jsdoc/match-description": ["error"|"warn", {"contexts":["ClassProperty"]}]
7188
+ // "jsdoc/match-description": ["error"|"warn", {"contexts":["PropertyDefinition"]}]
7174
7189
 
7175
7190
  /**
7176
7191
  * Foo.
@@ -7349,7 +7364,7 @@ be applied, however.
7349
7364
  |||
7350
7365
  |---|---|
7351
7366
  |Context|everywhere|
7352
- |Tags|(The tags specifie by `tags`, including any tag if `*` is set)|
7367
+ |Tags|(The tags specified by `tags`, including any tag if `*` is set)|
7353
7368
  |Recommended|false|
7354
7369
  |Settings|`structuredTags`|
7355
7370
  |Options|`match`|
@@ -9155,7 +9170,7 @@ The following types are always considered defined.
9155
9170
  Note that preferred types indicated within `settings.jsdoc.preferredTypes` will
9156
9171
  also be assumed to be defined.
9157
9172
 
9158
- Also note that if there is an error [parsing](https://github.com/jsdoctypeparser/jsdoctypeparser)
9173
+ Also note that if there is an error [parsing](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser)
9159
9174
  types for a tag, the function will silently ignore that tag, leaving it to
9160
9175
  the `valid-types` rule to report parsing errors.
9161
9176
 
@@ -12801,7 +12816,7 @@ class Animal {
12801
12816
  @SomeAnnotation('optionalParameter')
12802
12817
  tail: boolean;
12803
12818
  }
12804
- // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["ClassProperty"]}]
12819
+ // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["PropertyDefinition"]}]
12805
12820
  // Message: Missing JSDoc comment.
12806
12821
 
12807
12822
  @Entity('users')
@@ -12895,7 +12910,7 @@ export class MyComponentComponent {
12895
12910
  @Input()
12896
12911
  public value = new EventEmitter();
12897
12912
  }
12898
- // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["ClassProperty:has(Decorator[expression.callee.name=\"Input\"])"]}]
12913
+ // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["PropertyDefinition > Decorator[expression.callee.name=\"Input\"]"]}]
12899
12914
  // Message: Missing JSDoc comment.
12900
12915
 
12901
12916
  requestAnimationFrame(draw)
@@ -12939,6 +12954,12 @@ function comment () {
12939
12954
  }
12940
12955
  // "jsdoc/require-jsdoc": ["error"|"warn", {"enableFixer":false,"fixerMessage":" TODO: add comment"}]
12941
12956
  // Message: Missing JSDoc comment.
12957
+
12958
+ export class InovaAutoCompleteComponent {
12959
+ public disabled = false;
12960
+ }
12961
+ // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["PropertyDefinition"],"publicOnly":true}]
12962
+ // Message: Missing JSDoc comment.
12942
12963
  ````
12943
12964
 
12944
12965
  The following patterns are not considered problems:
@@ -12966,7 +12987,7 @@ export class Foo {
12966
12987
  // "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["TSInterfaceDeclaration","TSMethodSignature","TSPropertySignature"],"publicOnly":{"ancestorsOnly":true}}]
12967
12988
 
12968
12989
  /** This is comment */
12969
- function someFunciton() {
12990
+ function someFunction() {
12970
12991
  interface FooBar {
12971
12992
  fooBar: string;
12972
12993
  }
@@ -19986,10 +20007,10 @@ The following patterns are not considered problems:
19986
20007
 
19987
20008
  Requires all types to be valid JSDoc, Closure, or TypeScript compiler types
19988
20009
  without syntax errors. Note that what determines a valid type is handled by
19989
- our type parsing engine, [jsdoctypeparser](https://github.com/jsdoctypeparser/jsdoctypeparser),
20010
+ our type parsing engine, [jsdoc-type-pratt-parser](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser),
19990
20011
  using [`settings.jsdoc.mode`](#eslint-plugin-jsdoc-settings-mode) to
19991
- determine whether to use jsdoctypeparser's "permissive" mode or the stricter
19992
- "jsdoc", "typescript", "closure" modes.
20012
+ determine whether to use jsdoc-type-pratt-parser's "permissive" parsing or
20013
+ the stricter "jsdoc", "typescript", "closure" modes.
19993
20014
 
19994
20015
  The following tags have their "type" portions (the segment within brackets)
19995
20016
  checked (though those portions may sometimes be confined to namepaths,
@@ -203,7 +203,9 @@ const alignTransform = ({
203
203
  width = source.reduce(getWidth(tags), { ...zeroWidth
204
204
  });
205
205
  return rewireSource({ ...fields,
206
- source: source.map(update)
206
+ source: source.map((line, index) => {
207
+ return update(line, index, source);
208
+ })
207
209
  });
208
210
  };
209
211
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/alignTransform.js"],"names":["rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","intoTags","alignTokens","nothingAfter","delim","description","postName","postType","postTag","spacings","postDelimiter","update","line","isEmpty","end","fields","reduce","map"],"mappings":"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","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 {rewireSource} = 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, {tokens}, 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 space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens) => {\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 // 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 if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType);\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);\n }\n\n return tokens;\n };\n\n const update = (line, index, source) => {\n const tokens = {...line.tokens};\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 /* eslint-disable indent */\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 /* eslint-enable */\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 // Not align.\n if (!shouldAlign(tags, index, source)) {\n return {\n ...line,\n tokens,\n };\n }\n\n return {\n ...line,\n tokens: alignTokens(tokens),\n };\n };\n\n return ({source, ...fields}) => {\n width = source.reduce(getWidth(tags), {...zeroWidth});\n\n return rewireSource({\n ...fields,\n source: source.map(update),\n });\n };\n};\n\nexport default alignTransform;\n"],"file":"alignTransform.js"}
1
+ {"version":3,"sources":["../src/alignTransform.js"],"names":["rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","intoTags","alignTokens","nothingAfter","delim","description","postName","postType","postTag","spacings","postDelimiter","update","line","isEmpty","end","fields","reduce","map"],"mappings":"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","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 {rewireSource} = 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, {tokens}, 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 space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens) => {\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 // 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);\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);\n }\n\n return tokens;\n };\n\n const update = (line, index, source) => {\n const tokens = {...line.tokens};\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 /* eslint-disable indent */\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 /* eslint-enable */\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 // Not align.\n if (!shouldAlign(tags, index, source)) {\n return {\n ...line,\n tokens,\n };\n }\n\n return {\n ...line,\n tokens: alignTokens(tokens),\n };\n };\n\n return ({source, ...fields}) => {\n width = source.reduce(getWidth(tags), {...zeroWidth});\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n return update(line, index, source);\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"file":"alignTransform.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","_","camelCase","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport _ from 'lodash';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = _.camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [{\n line: '',\n message: '',\n }],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n if (!item) {\n item = offsets.pop();\n item.offset += item.matchedLine.length;\n }\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n await replaceInOrder({\n checkName: 'README',\n newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"file":"generateRule.js"}
1
+ {"version":3,"sources":["../../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","_","camelCase","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport _ from 'lodash';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = _.camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [{\n line: '',\n message: '',\n }],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = offsets.pop();\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n await replaceInOrder({\n checkName: 'README',\n newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"file":"generateRule.js"}
@@ -66,11 +66,12 @@ const getIdentifier = function (node, globals, scope, opts) {
66
66
  return null;
67
67
  };
68
68
 
69
- let createSymbol = null;
69
+ let createSymbol = null; // eslint-disable-next-line complexity
70
70
 
71
71
  const getSymbol = function (node, globals, scope, opt) {
72
72
  const opts = opt || {};
73
73
  /* istanbul ignore next */
74
+ // eslint-disable-next-line default-case
74
75
 
75
76
  switch (node.type) {
76
77
  case 'Identifier':
@@ -132,11 +133,13 @@ const getSymbol = function (node, globals, scope, opt) {
132
133
  case 'ClassBody':
133
134
  {
134
135
  const val = createNode();
135
- node.body.forEach(method => {
136
+
137
+ for (const method of node.body) {
136
138
  val.props[method.key.name] = createNode();
137
139
  val.props[method.key.name].type = 'object';
138
140
  val.props[method.key.name].value = method.value;
139
- });
141
+ }
142
+
140
143
  val.type = 'object';
141
144
  val.value = node;
142
145
  return val;
@@ -146,11 +149,12 @@ const getSymbol = function (node, globals, scope, opt) {
146
149
  {
147
150
  const val = createNode();
148
151
  val.type = 'object';
149
- node.properties.forEach(prop => {
152
+
153
+ for (const prop of node.properties) {
150
154
  if ([// @typescript-eslint/parser, espree, acorn, etc.
151
155
  'SpreadElement', // @babel/eslint-parser
152
156
  'ExperimentalSpreadProperty'].includes(prop.type)) {
153
- return;
157
+ continue;
154
158
  }
155
159
 
156
160
  const propVal = getSymbol(prop.value, globals, scope, opts);
@@ -159,7 +163,8 @@ const getSymbol = function (node, globals, scope, opt) {
159
163
  if (propVal) {
160
164
  val.props[prop.key.name] = propVal;
161
165
  }
162
- });
166
+ }
167
+
163
168
  return val;
164
169
  }
165
170
 
@@ -187,7 +192,7 @@ const createBlockSymbol = function (block, name, value, globals, isGlobal) {
187
192
 
188
193
  createSymbol = function (node, globals, value, scope, isGlobal) {
189
194
  const block = scope || globals;
190
- let symbol;
195
+ let symbol; // eslint-disable-next-line default-case
191
196
 
192
197
  switch (node.type) {
193
198
  case 'FunctionDeclaration':
@@ -261,12 +266,14 @@ createSymbol = function (node, globals, value, scope, isGlobal) {
261
266
 
262
267
 
263
268
  const initVariables = function (node, globals, opts) {
269
+ // eslint-disable-next-line default-case
264
270
  switch (node.type) {
265
271
  case 'Program':
266
272
  {
267
- node.body.forEach(childNode => {
273
+ for (const childNode of node.body) {
268
274
  initVariables(childNode, globals, opts);
269
- });
275
+ }
276
+
270
277
  break;
271
278
  }
272
279
 
@@ -278,7 +285,7 @@ const initVariables = function (node, globals, opts) {
278
285
 
279
286
  case 'VariableDeclaration':
280
287
  {
281
- node.declarations.forEach(declaration => {
288
+ for (const declaration of node.declarations) {
282
289
  // let and const
283
290
  const symbol = createSymbol(declaration.id, globals, null, globals);
284
291
 
@@ -286,7 +293,8 @@ const initVariables = function (node, globals, opts) {
286
293
  // If var, also add to window
287
294
  globals.props.window.props[declaration.id.name] = symbol;
288
295
  }
289
- });
296
+ }
297
+
290
298
  break;
291
299
  }
292
300
 
@@ -300,6 +308,7 @@ const initVariables = function (node, globals, opts) {
300
308
  }
301
309
  }
302
310
  }; // Populates variable maps using AST
311
+ // eslint-disable-next-line complexity
303
312
 
304
313
 
305
314
  const mapVariables = function (node, globals, opt, isExport) {
@@ -314,9 +323,10 @@ const mapVariables = function (node, globals, opt, isExport) {
314
323
  return false;
315
324
  }
316
325
 
317
- node.body.forEach(childNode => {
326
+ for (const childNode of node.body) {
318
327
  mapVariables(childNode, globals, opts);
319
- });
328
+ }
329
+
320
330
  break;
321
331
  }
322
332
 
@@ -334,14 +344,15 @@ const mapVariables = function (node, globals, opt, isExport) {
334
344
 
335
345
  case 'VariableDeclaration':
336
346
  {
337
- node.declarations.forEach(declaration => {
347
+ for (const declaration of node.declarations) {
338
348
  const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;
339
349
  const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);
340
350
 
341
351
  if (symbol && isExport) {
342
352
  symbol.exported = true;
343
353
  }
344
- });
354
+ }
355
+
345
356
  break;
346
357
  }
347
358
 
@@ -383,9 +394,10 @@ const mapVariables = function (node, globals, opt, isExport) {
383
394
  }
384
395
  }
385
396
 
386
- node.specifiers.forEach(specifier => {
397
+ for (const specifier of node.specifiers) {
387
398
  mapVariables(specifier, globals, opts);
388
- });
399
+ }
400
+
389
401
  break;
390
402
  }
391
403
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","body","forEach","method","key","properties","prop","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declarations","declaration","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifiers","specifier","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","getExportAncestor","nde","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","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 /* 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 = {value: node.name};\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;\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n } case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});\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 case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\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 } case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n } case 'ClassBody': {\n const val = createNode();\n node.body.forEach((method) => {\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 val.type = 'object';\n val.value = node;\n\n return val;\n } case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n node.properties.forEach((prop) => {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n return;\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 } 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 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 /* istanbul ignore next */\n break;\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 /* 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 /* istanbul ignore next */\n break;\n } case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});\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 /* 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 switch (node.type) {\n case 'Program': {\n node.body.forEach((childNode) => {\n initVariables(childNode, globals, opts);\n });\n break;\n } case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n } case 'VariableDeclaration': {\n node.declarations.forEach((declaration) => {\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 break;\n } case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n break;\n }\n }\n};\n\n// Populates variable maps using AST\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 node.body.forEach((childNode) => {\n mapVariables(childNode, globals, opts);\n });\n break;\n } case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n } case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n } case 'VariableDeclaration': {\n node.declarations.forEach((declaration) => {\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 break;\n } case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n break;\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 break;\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 node.specifiers.forEach((specifier) => {\n mapVariables(specifier, globals, opts);\n });\n break;\n } case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n break;\n } case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\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 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 {props = block.body} = 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(['ExportNamedDeclaration', 'ExportDefaultDeclaration']);\nconst getExportAncestor = function (nde) {\n let node = nde;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n node = node.parent;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.has(nde.type)) {\n return false;\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 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 const blockCache = cache || [];\n const {props} = 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 if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\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 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 /** Some typescript types are not in variable map, but inherit exported (interface property and method)*/\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"],"file":"exportParser.js"}
1
+ {"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","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","getExportAncestor","nde","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","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 = {value: node.name};\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, {simpleIdentifier: !node.computed});\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 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\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;\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, {simpleIdentifier: !node.computed});\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 {props = block.body} = 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(['ExportNamedDeclaration', 'ExportDefaultDeclaration']);\nconst getExportAncestor = function (nde) {\n let node = nde;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.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 {props} = 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 if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\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 /** Some typescript types are not in variable map, but inherit exported (interface property and method)*/\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"],"file":"exportParser.js"}