eslint-plugin-jsdoc 39.2.9 → 39.3.0

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 (63) hide show
  1. package/dist/WarnSettings.js.map +1 -1
  2. package/dist/alignTransform.js.map +1 -1
  3. package/dist/bin/generateRule.js.map +1 -1
  4. package/dist/defaultTagOrder.js.map +1 -1
  5. package/dist/exportParser.js.map +1 -1
  6. package/dist/generateRule.js.map +1 -1
  7. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/iterateJsdoc.js +57 -16
  10. package/dist/iterateJsdoc.js.map +1 -1
  11. package/dist/jsdocUtils.js +5 -1
  12. package/dist/jsdocUtils.js.map +1 -1
  13. package/dist/rules/checkAccess.js.map +1 -1
  14. package/dist/rules/checkAlignment.js.map +1 -1
  15. package/dist/rules/checkExamples.js.map +1 -1
  16. package/dist/rules/checkIndentation.js.map +1 -1
  17. package/dist/rules/checkLineAlignment.js.map +1 -1
  18. package/dist/rules/checkParamNames.js.map +1 -1
  19. package/dist/rules/checkPropertyNames.js.map +1 -1
  20. package/dist/rules/checkSyntax.js.map +1 -1
  21. package/dist/rules/checkTagNames.js.map +1 -1
  22. package/dist/rules/checkTypes.js.map +1 -1
  23. package/dist/rules/checkValues.js.map +1 -1
  24. package/dist/rules/emptyTags.js.map +1 -1
  25. package/dist/rules/implementsOnClasses.js.map +1 -1
  26. package/dist/rules/matchDescription.js.map +1 -1
  27. package/dist/rules/matchName.js.map +1 -1
  28. package/dist/rules/multilineBlocks.js.map +1 -1
  29. package/dist/rules/newlineAfterDescription.js.map +1 -1
  30. package/dist/rules/noBadBlocks.js.map +1 -1
  31. package/dist/rules/noDefaults.js.map +1 -1
  32. package/dist/rules/noMissingSyntax.js.map +1 -1
  33. package/dist/rules/noMultiAsterisks.js.map +1 -1
  34. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  35. package/dist/rules/noTypes.js.map +1 -1
  36. package/dist/rules/noUndefinedTypes.js.map +1 -1
  37. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  38. package/dist/rules/requireDescription.js.map +1 -1
  39. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  40. package/dist/rules/requireExample.js.map +1 -1
  41. package/dist/rules/requireFileOverview.js.map +1 -1
  42. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  43. package/dist/rules/requireJsdoc.js.map +1 -1
  44. package/dist/rules/requireParam.js.map +1 -1
  45. package/dist/rules/requireParamDescription.js.map +1 -1
  46. package/dist/rules/requireParamName.js.map +1 -1
  47. package/dist/rules/requireParamType.js.map +1 -1
  48. package/dist/rules/requireProperty.js.map +1 -1
  49. package/dist/rules/requirePropertyDescription.js.map +1 -1
  50. package/dist/rules/requirePropertyName.js.map +1 -1
  51. package/dist/rules/requirePropertyType.js.map +1 -1
  52. package/dist/rules/requireReturns.js.map +1 -1
  53. package/dist/rules/requireReturnsCheck.js.map +1 -1
  54. package/dist/rules/requireReturnsDescription.js.map +1 -1
  55. package/dist/rules/requireReturnsType.js.map +1 -1
  56. package/dist/rules/requireThrows.js.map +1 -1
  57. package/dist/rules/requireYields.js.map +1 -1
  58. package/dist/rules/requireYieldsCheck.js.map +1 -1
  59. package/dist/rules/sortTags.js.map +1 -1
  60. package/dist/rules/tagLines.js.map +1 -1
  61. package/dist/rules/validTypes.js.map +1 -1
  62. package/dist/tagNames.js.map +1 -1
  63. package/package.json +15 -15
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["configs","recommended","plugins","rules","checkAccess","checkAlignment","checkExamples","checkIndentation","checkLineAlignment","checkParamNames","checkPropertyNames","checkSyntax","checkTagNames","checkTypes","checkValues","emptyTags","implementsOnClasses","matchDescription","matchName","multilineBlocks","newlineAfterDescription","noBadBlocks","noDefaults","noMissingSyntax","noMultiAsterisks","noRestrictedSyntax","noTypes","noUndefinedTypes","requireAsteriskPrefix","requireDescription","requireDescriptionCompleteSentence","requireExample","requireFileOverview","requireHyphenBeforeParamDescription","requireJsdoc","requireParam","requireParamDescription","requireParamName","requireParamType","requireProperty","requirePropertyDescription","requirePropertyName","requirePropertyType","requireReturns","requireReturnsCheck","requireReturnsDescription","requireReturnsType","requireThrows","requireYields","requireYieldsCheck","sortTags","tagLines","validTypes"],"mappings":"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","sourcesContent":["import checkAccess from './rules/checkAccess';\nimport checkAlignment from './rules/checkAlignment';\nimport checkExamples from './rules/checkExamples';\nimport checkIndentation from './rules/checkIndentation';\nimport checkLineAlignment from './rules/checkLineAlignment';\nimport checkParamNames from './rules/checkParamNames';\nimport checkPropertyNames from './rules/checkPropertyNames';\nimport checkSyntax from './rules/checkSyntax';\nimport checkTagNames from './rules/checkTagNames';\nimport checkTypes from './rules/checkTypes';\nimport checkValues from './rules/checkValues';\nimport emptyTags from './rules/emptyTags';\nimport implementsOnClasses from './rules/implementsOnClasses';\nimport matchDescription from './rules/matchDescription';\nimport matchName from './rules/matchName';\nimport multilineBlocks from './rules/multilineBlocks';\nimport newlineAfterDescription from './rules/newlineAfterDescription';\nimport noBadBlocks from './rules/noBadBlocks';\nimport noDefaults from './rules/noDefaults';\nimport noMissingSyntax from './rules/noMissingSyntax';\nimport noMultiAsterisks from './rules/noMultiAsterisks';\nimport noRestrictedSyntax from './rules/noRestrictedSyntax';\nimport noTypes from './rules/noTypes';\nimport noUndefinedTypes from './rules/noUndefinedTypes';\nimport requireAsteriskPrefix from './rules/requireAsteriskPrefix';\nimport requireDescription from './rules/requireDescription';\nimport requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence';\nimport requireExample from './rules/requireExample';\nimport requireFileOverview from './rules/requireFileOverview';\nimport requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription';\nimport requireJsdoc from './rules/requireJsdoc';\nimport requireParam from './rules/requireParam';\nimport requireParamDescription from './rules/requireParamDescription';\nimport requireParamName from './rules/requireParamName';\nimport requireParamType from './rules/requireParamType';\nimport requireProperty from './rules/requireProperty';\nimport requirePropertyDescription from './rules/requirePropertyDescription';\nimport requirePropertyName from './rules/requirePropertyName';\nimport requirePropertyType from './rules/requirePropertyType';\nimport requireReturns from './rules/requireReturns';\nimport requireReturnsCheck from './rules/requireReturnsCheck';\nimport requireReturnsDescription from './rules/requireReturnsDescription';\nimport requireReturnsType from './rules/requireReturnsType';\nimport requireThrows from './rules/requireThrows';\nimport requireYields from './rules/requireYields';\nimport requireYieldsCheck from './rules/requireYieldsCheck';\nimport sortTags from './rules/sortTags';\nimport tagLines from './rules/tagLines';\nimport validTypes from './rules/validTypes';\n\nexport default {\n configs: {\n recommended: {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': 'warn',\n 'jsdoc/check-alignment': 'warn',\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': 'warn',\n 'jsdoc/check-property-names': 'warn',\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': 'warn',\n 'jsdoc/check-types': 'warn',\n 'jsdoc/check-values': 'warn',\n 'jsdoc/empty-tags': 'warn',\n 'jsdoc/implements-on-classes': 'warn',\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': 'warn',\n 'jsdoc/newline-after-description': 'warn',\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': 'warn',\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': 'warn',\n 'jsdoc/require-asterisk-prefix': 'off',\n 'jsdoc/require-description': 'off',\n 'jsdoc/require-description-complete-sentence': 'off',\n 'jsdoc/require-example': 'off',\n 'jsdoc/require-file-overview': 'off',\n 'jsdoc/require-hyphen-before-param-description': 'off',\n 'jsdoc/require-jsdoc': 'warn',\n 'jsdoc/require-param': 'warn',\n 'jsdoc/require-param-description': 'warn',\n 'jsdoc/require-param-name': 'warn',\n 'jsdoc/require-param-type': 'warn',\n 'jsdoc/require-property': 'warn',\n 'jsdoc/require-property-description': 'warn',\n 'jsdoc/require-property-name': 'warn',\n 'jsdoc/require-property-type': 'warn',\n 'jsdoc/require-returns': 'warn',\n 'jsdoc/require-returns-check': 'warn',\n 'jsdoc/require-returns-description': 'warn',\n 'jsdoc/require-returns-type': 'warn',\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': 'warn',\n 'jsdoc/require-yields-check': 'warn',\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': 'warn',\n 'jsdoc/valid-types': 'warn',\n },\n },\n },\n rules: {\n 'check-access': checkAccess,\n 'check-alignment': checkAlignment,\n 'check-examples': checkExamples,\n 'check-indentation': checkIndentation,\n 'check-line-alignment': checkLineAlignment,\n 'check-param-names': checkParamNames,\n 'check-property-names': checkPropertyNames,\n 'check-syntax': checkSyntax,\n 'check-tag-names': checkTagNames,\n 'check-types': checkTypes,\n 'check-values': checkValues,\n 'empty-tags': emptyTags,\n 'implements-on-classes': implementsOnClasses,\n 'match-description': matchDescription,\n 'match-name': matchName,\n 'multiline-blocks': multilineBlocks,\n 'newline-after-description': newlineAfterDescription,\n 'no-bad-blocks': noBadBlocks,\n 'no-defaults': noDefaults,\n 'no-missing-syntax': noMissingSyntax,\n 'no-multi-asterisks': noMultiAsterisks,\n 'no-restricted-syntax': noRestrictedSyntax,\n 'no-types': noTypes,\n 'no-undefined-types': noUndefinedTypes,\n 'require-asterisk-prefix': requireAsteriskPrefix,\n 'require-description': requireDescription,\n 'require-description-complete-sentence': requireDescriptionCompleteSentence,\n 'require-example': requireExample,\n 'require-file-overview': requireFileOverview,\n 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription,\n 'require-jsdoc': requireJsdoc,\n 'require-param': requireParam,\n 'require-param-description': requireParamDescription,\n 'require-param-name': requireParamName,\n 'require-param-type': requireParamType,\n 'require-property': requireProperty,\n 'require-property-description': requirePropertyDescription,\n 'require-property-name': requirePropertyName,\n 'require-property-type': requirePropertyType,\n 'require-returns': requireReturns,\n 'require-returns-check': requireReturnsCheck,\n 'require-returns-description': requireReturnsDescription,\n 'require-returns-type': requireReturnsType,\n 'require-throws': requireThrows,\n 'require-yields': requireYields,\n 'require-yields-check': requireYieldsCheck,\n 'sort-tags': sortTags,\n 'tag-lines': tagLines,\n 'valid-types': validTypes,\n },\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["configs","recommended","plugins","rules","checkAccess","checkAlignment","checkExamples","checkIndentation","checkLineAlignment","checkParamNames","checkPropertyNames","checkSyntax","checkTagNames","checkTypes","checkValues","emptyTags","implementsOnClasses","matchDescription","matchName","multilineBlocks","newlineAfterDescription","noBadBlocks","noDefaults","noMissingSyntax","noMultiAsterisks","noRestrictedSyntax","noTypes","noUndefinedTypes","requireAsteriskPrefix","requireDescription","requireDescriptionCompleteSentence","requireExample","requireFileOverview","requireHyphenBeforeParamDescription","requireJsdoc","requireParam","requireParamDescription","requireParamName","requireParamType","requireProperty","requirePropertyDescription","requirePropertyName","requirePropertyType","requireReturns","requireReturnsCheck","requireReturnsDescription","requireReturnsType","requireThrows","requireYields","requireYieldsCheck","sortTags","tagLines","validTypes"],"sources":["../src/index.js"],"sourcesContent":["import checkAccess from './rules/checkAccess';\nimport checkAlignment from './rules/checkAlignment';\nimport checkExamples from './rules/checkExamples';\nimport checkIndentation from './rules/checkIndentation';\nimport checkLineAlignment from './rules/checkLineAlignment';\nimport checkParamNames from './rules/checkParamNames';\nimport checkPropertyNames from './rules/checkPropertyNames';\nimport checkSyntax from './rules/checkSyntax';\nimport checkTagNames from './rules/checkTagNames';\nimport checkTypes from './rules/checkTypes';\nimport checkValues from './rules/checkValues';\nimport emptyTags from './rules/emptyTags';\nimport implementsOnClasses from './rules/implementsOnClasses';\nimport matchDescription from './rules/matchDescription';\nimport matchName from './rules/matchName';\nimport multilineBlocks from './rules/multilineBlocks';\nimport newlineAfterDescription from './rules/newlineAfterDescription';\nimport noBadBlocks from './rules/noBadBlocks';\nimport noDefaults from './rules/noDefaults';\nimport noMissingSyntax from './rules/noMissingSyntax';\nimport noMultiAsterisks from './rules/noMultiAsterisks';\nimport noRestrictedSyntax from './rules/noRestrictedSyntax';\nimport noTypes from './rules/noTypes';\nimport noUndefinedTypes from './rules/noUndefinedTypes';\nimport requireAsteriskPrefix from './rules/requireAsteriskPrefix';\nimport requireDescription from './rules/requireDescription';\nimport requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence';\nimport requireExample from './rules/requireExample';\nimport requireFileOverview from './rules/requireFileOverview';\nimport requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription';\nimport requireJsdoc from './rules/requireJsdoc';\nimport requireParam from './rules/requireParam';\nimport requireParamDescription from './rules/requireParamDescription';\nimport requireParamName from './rules/requireParamName';\nimport requireParamType from './rules/requireParamType';\nimport requireProperty from './rules/requireProperty';\nimport requirePropertyDescription from './rules/requirePropertyDescription';\nimport requirePropertyName from './rules/requirePropertyName';\nimport requirePropertyType from './rules/requirePropertyType';\nimport requireReturns from './rules/requireReturns';\nimport requireReturnsCheck from './rules/requireReturnsCheck';\nimport requireReturnsDescription from './rules/requireReturnsDescription';\nimport requireReturnsType from './rules/requireReturnsType';\nimport requireThrows from './rules/requireThrows';\nimport requireYields from './rules/requireYields';\nimport requireYieldsCheck from './rules/requireYieldsCheck';\nimport sortTags from './rules/sortTags';\nimport tagLines from './rules/tagLines';\nimport validTypes from './rules/validTypes';\n\nexport default {\n configs: {\n recommended: {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': 'warn',\n 'jsdoc/check-alignment': 'warn',\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': 'warn',\n 'jsdoc/check-property-names': 'warn',\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': 'warn',\n 'jsdoc/check-types': 'warn',\n 'jsdoc/check-values': 'warn',\n 'jsdoc/empty-tags': 'warn',\n 'jsdoc/implements-on-classes': 'warn',\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': 'warn',\n 'jsdoc/newline-after-description': 'warn',\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': 'warn',\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': 'warn',\n 'jsdoc/require-asterisk-prefix': 'off',\n 'jsdoc/require-description': 'off',\n 'jsdoc/require-description-complete-sentence': 'off',\n 'jsdoc/require-example': 'off',\n 'jsdoc/require-file-overview': 'off',\n 'jsdoc/require-hyphen-before-param-description': 'off',\n 'jsdoc/require-jsdoc': 'warn',\n 'jsdoc/require-param': 'warn',\n 'jsdoc/require-param-description': 'warn',\n 'jsdoc/require-param-name': 'warn',\n 'jsdoc/require-param-type': 'warn',\n 'jsdoc/require-property': 'warn',\n 'jsdoc/require-property-description': 'warn',\n 'jsdoc/require-property-name': 'warn',\n 'jsdoc/require-property-type': 'warn',\n 'jsdoc/require-returns': 'warn',\n 'jsdoc/require-returns-check': 'warn',\n 'jsdoc/require-returns-description': 'warn',\n 'jsdoc/require-returns-type': 'warn',\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': 'warn',\n 'jsdoc/require-yields-check': 'warn',\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': 'warn',\n 'jsdoc/valid-types': 'warn',\n },\n },\n },\n rules: {\n 'check-access': checkAccess,\n 'check-alignment': checkAlignment,\n 'check-examples': checkExamples,\n 'check-indentation': checkIndentation,\n 'check-line-alignment': checkLineAlignment,\n 'check-param-names': checkParamNames,\n 'check-property-names': checkPropertyNames,\n 'check-syntax': checkSyntax,\n 'check-tag-names': checkTagNames,\n 'check-types': checkTypes,\n 'check-values': checkValues,\n 'empty-tags': emptyTags,\n 'implements-on-classes': implementsOnClasses,\n 'match-description': matchDescription,\n 'match-name': matchName,\n 'multiline-blocks': multilineBlocks,\n 'newline-after-description': newlineAfterDescription,\n 'no-bad-blocks': noBadBlocks,\n 'no-defaults': noDefaults,\n 'no-missing-syntax': noMissingSyntax,\n 'no-multi-asterisks': noMultiAsterisks,\n 'no-restricted-syntax': noRestrictedSyntax,\n 'no-types': noTypes,\n 'no-undefined-types': noUndefinedTypes,\n 'require-asterisk-prefix': requireAsteriskPrefix,\n 'require-description': requireDescription,\n 'require-description-complete-sentence': requireDescriptionCompleteSentence,\n 'require-example': requireExample,\n 'require-file-overview': requireFileOverview,\n 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription,\n 'require-jsdoc': requireJsdoc,\n 'require-param': requireParam,\n 'require-param-description': requireParamDescription,\n 'require-param-name': requireParamName,\n 'require-param-type': requireParamType,\n 'require-property': requireProperty,\n 'require-property-description': requirePropertyDescription,\n 'require-property-name': requirePropertyName,\n 'require-property-type': requirePropertyType,\n 'require-returns': requireReturns,\n 'require-returns-check': requireReturnsCheck,\n 'require-returns-description': requireReturnsDescription,\n 'require-returns-type': requireReturnsType,\n 'require-throws': requireThrows,\n 'require-yields': requireYields,\n 'require-yields-check': requireYieldsCheck,\n 'sort-tags': sortTags,\n 'tag-lines': tagLines,\n 'valid-types': validTypes,\n },\n};\n"],"mappings":"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"}
@@ -23,7 +23,26 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
23
23
  const {
24
24
  rewireSpecs,
25
25
  seedTokens
26
- } = _commentParser.util;
26
+ } = _commentParser.util; // todo: Change these `any` types once importing types properly.
27
+
28
+ /**
29
+ * Should use ESLint rule's typing.
30
+ *
31
+ * @typedef {any} EslintRuleMeta
32
+ */
33
+
34
+ /**
35
+ * A plain object for tracking state as needed by rules across iterations.
36
+ *
37
+ * @typedef {any} StateObject
38
+ */
39
+
40
+ /**
41
+ * The Node AST as supplied by the parser.
42
+ *
43
+ * @typedef {any} Node
44
+ */
45
+
27
46
  /*
28
47
  const {
29
48
  align as commentAlign,
@@ -783,7 +802,7 @@ const makeReport = (context, commentNode) => {
783
802
 
784
803
  return report;
785
804
  };
786
- /* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */
805
+ /* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */
787
806
 
788
807
  /**
789
808
  * @typedef {ReturnType<typeof getUtils>} Utils
@@ -795,7 +814,7 @@ const makeReport = (context, commentNode) => {
795
814
  * indent: string,
796
815
  * jsdoc: object,
797
816
  * jsdocNode: object,
798
- * node: object | null,
817
+ * node: Node | null,
799
818
  * report: ReturnType<typeof makeReport>,
800
819
  * settings: Settings,
801
820
  * utils: Utils,
@@ -803,7 +822,7 @@ const makeReport = (context, commentNode) => {
803
822
  * ) => any } JsdocVisitor
804
823
  */
805
824
 
806
- /* eslint-enable jsdoc/no-undefined-types -- Need to build this in */
825
+ /* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */
807
826
 
808
827
 
809
828
  const iterate = (info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state, iteratingAll) => {
@@ -849,18 +868,45 @@ const getIndentAndJSDoc = function (lines, jsdocNode) {
849
868
  const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, '');
850
869
  return [indnt, jsdc];
851
870
  };
871
+ /**
872
+ *
873
+ * @typedef {{node: Node, state: StateObject}} NonCommentArgs
874
+ */
875
+
876
+ /**
877
+ * Our internal dynamic set of utilities.
878
+ *
879
+ * @todo Document
880
+ * @typedef {any} Utils
881
+ */
882
+
883
+ /**
884
+ * @typedef {object} RuleConfig
885
+ * @property {EslintRuleMeta} meta ESLint rule meta
886
+ * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts
887
+ * @property {true} [contextSelected] Whether to force a `contexts` check
888
+ * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default
889
+ * regardless of context
890
+ * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed
891
+ * upon exiting iteration of program AST
892
+ * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes
893
+ * to be supplied nodes without comments
894
+ */
895
+
852
896
  /**
853
897
  * Create an eslint rule that iterates over all JSDocs, regardless of whether
854
898
  * they are attached to a function-like node.
855
899
  *
856
900
  * @param {JsdocVisitor} iterator
857
- * @param {{meta: any}} ruleConfig
858
- * @param contexts
859
- * @param {boolean} additiveContexts
901
+ * @param {RuleConfig} ruleConfig The rule's configuration
902
+ * @param contexts The `contexts` containing relevant `comment` info.
903
+ * @param {boolean} additiveCommentContexts If true, will have a separate
904
+ * iteration for each matching comment context. Otherwise, will iterate
905
+ * once if there is a single matching comment context.
860
906
  */
861
907
 
862
908
 
863
- const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {
909
+ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {
864
910
  const trackedJsdocs = new Set();
865
911
  let handler;
866
912
  let settings;
@@ -879,7 +925,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {
879
925
 
880
926
  const [indent, jsdoc] = getIndentAndJSDoc(lines, jsdocNode);
881
927
 
882
- if (additiveContexts) {
928
+ if (additiveCommentContexts) {
883
929
  for (const [idx, {
884
930
  comment
885
931
  }] of contexts.entries()) {
@@ -991,7 +1037,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {
991
1037
  * they are attached to a function-like node.
992
1038
  *
993
1039
  * @param {JsdocVisitor} iterator
994
- * @param {{meta: any}} ruleConfig
1040
+ * @param {RuleConfig} ruleConfig
995
1041
  */
996
1042
 
997
1043
 
@@ -1032,12 +1078,7 @@ const checkFile = (iterator, ruleConfig) => {
1032
1078
 
1033
1079
  /**
1034
1080
  * @param {JsdocVisitor} iterator
1035
- * @param {{
1036
- * meta: any,
1037
- * contextDefaults?: true | string[],
1038
- * contextSelected?: true,
1039
- * iterateAllJsdocs?: true,
1040
- * }} ruleConfig
1081
+ * @param {RuleConfig} ruleConfig
1041
1082
  */
1042
1083
  function iterateJsdoc(iterator, ruleConfig) {
1043
1084
  var _ruleConfig$meta;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/iterateJsdoc.js"],"names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":";;;;;;;;;;;;;;AAAA;;AAMA;;AAIA;;;;AAEA,MAAM;AACJA,EAAAA,WADI;AAEJC,EAAAA;AAFI,IAGFC,mBAHJ;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAJ,EAApB;;AAEA,MAAMC,aAAa,GAAG,CAACC,OAAD,EAAU;AAC9BC,EAAAA,iBAD8B;AAE9BC,EAAAA;AAF8B,CAAV,KAGhB;AACJ,QAAMC,KAAK,GAAG,EAAd;;AACAA,EAAAA,KAAK,CAACC,cAAN,GAAwBC,OAAD,IAAa;AAClCL,IAAAA,OAAO,CAACM,MAAR,CAAe;AACbC,MAAAA,GAAG,EAAE;AACHC,QAAAA,KAAK,EAAE;AACLC,UAAAA,MAAM,EAAE,CADH;AAELC,UAAAA,IAAI,EAAE;AAFD;AADJ,OADQ;AAObL,MAAAA;AAPa,KAAf;AASD,GAVD;;AAYAF,EAAAA,KAAK,CAACQ,uBAAN,GAAiCC,GAAD,IAAS;AACvC,WAAOC,oBAAWF,uBAAX,CAAmCC,GAAnC,CAAP;AACD,GAFD;;AAIAT,EAAAA,KAAK,CAACW,oBAAN,GAA6BD,oBAAWC,oBAAxC;;AAEAX,EAAAA,KAAK,CAACY,yBAAN,GAAkC,CAAC;AACjCC,IAAAA;AADiC,GAAD,KAE5B;AACJ,UAAMC,GAAG,GAAGJ,oBAAWK,mBAAX,CAA+BlB,OAA/B,EAAwCE,IAAxC,EAA8Cc,OAA9C,EAAuDf,iBAAvD,CAAZ;;AACA,UAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,QAAvC;;AACA,QAAIA,GAAG,KAAK,KAAR,IAAiBE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAtC,EAAmD;AACjD,aAAO;AACLC,QAAAA,OAAO,EAAE,IADJ;AAELL,QAAAA;AAFK,OAAP;AAID;;AAED,WAAOC,GAAP;AACD,GAbD;;AAeA,SAAOd,KAAP;AACD,CAvCD;;AAyCA,MAAMmB,QAAQ,GAAG,CACfC,IADe,EAEfC,KAFe,EAGfC,SAHe,EAIfC,QAJe,EAKfpB,MALe,EAMfN,OANe,EAOf2B,YAPe,EAQfC,UARe,EASfC,MATe,KAUZ;AACH,QAAMC,SAAS,GAAG9B,OAAO,CAAC+B,YAAR,EAAlB;AACA,QAAMC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AAEA,QAAM9B,KAAK,GAAGJ,aAAa,CAACC,OAAD,EAAU0B,QAAV,CAA3B;AAEA,QAAM;AACJzB,IAAAA,iBADI;AAEJiC,IAAAA,oBAFI;AAGJC,IAAAA,kBAHI;AAIJC,IAAAA,sBAJI;AAKJC,IAAAA,2BALI;AAMJC,IAAAA,QANI;AAOJC,IAAAA,QAPI;AAQJrC,IAAAA;AARI,MASFwB,QATJ;;AAWAvB,EAAAA,KAAK,CAACqC,mBAAN,GAA4B,MAAM;AAChC,WAAO,CAACb,YAAD,IAAiB,CACtB,kBADsB,EAEtB,yBAFsB,EAGtB,qBAHsB,EAItB,oBAJsB,EAKtBc,QALsB,CAKblB,IAAI,IAAIA,IAAI,CAACmB,IALA,CAAxB;AAMD,GAPD;;AASAvC,EAAAA,KAAK,CAACwC,iBAAN,GAA0B,MAAM;AAC9B,WAAOhB,YAAY,IAAIxB,KAAK,CAACyC,OAAN,CAAc,CACnC,UADmC,EACvB,UADuB,EACX,MADW,EACH,QADG,CAAd,CAAvB;AAGD,GAJD;;AAMAzC,EAAAA,KAAK,CAAC0C,SAAN,GAAkB,CAACC,QAAD,EAAWC,UAAX,KAA0B;AAC1C,WAAO,8BAAiBA,UAAU,GAAGrD,WAAW,CAACoD,QAAD,CAAd,GAA2BA,QAAtD,CAAP;AACD,GAFD;;AAIA3C,EAAAA,KAAK,CAAC6C,WAAN,GAAoB,CAACC,GAAD,EAAMrC,GAAN,EAAWsC,OAAX,EAAoBH,UAApB,EAAgCI,IAAhC,KAAyC;AAC3D7C,IAAAA,MAAM,CAAC2C,GAAD,EAAMC,OAAO,GAAIE,KAAD,IAAW;AAC/BF,MAAAA,OAAO;AACP,YAAM9B,WAAW,GAAGjB,KAAK,CAAC0C,SAAN,CAAgBrB,KAAhB,EAAuBuB,UAAvB,CAApB;AAEA,aAAOK,KAAK,CAACC,WAAN,CAAkB5B,SAAlB,EAA6BL,WAA7B,CAAP;AACD,KALkB,GAKf,IALE,EAKIR,GALJ,EAKSuC,IALT,CAAN;AAMD,GAPD;;AASAhD,EAAAA,KAAK,CAACmD,kBAAN,GAA2B,CAACC,GAAD,EAAMC,aAAN,KAAwB;AACjD,WAAO3C,oBAAWyC,kBAAX,CAA8BC,GAA9B,EAAmCC,aAAnC,CAAP;AACD,GAFD;;AAIArD,EAAAA,KAAK,CAACsD,iBAAN,GAA2BC,EAAD,IAAQ;AAChC,UAAMC,YAAY,GAAG,EAArB;AACAD,IAAAA,EAAE,CAACE,MAAH,CAAUC,IAAV,CAAe,CAAC;AACdC,MAAAA,MAAM,EAAE;AACNC,QAAAA,GADM;AAENC,QAAAA,OAFM;AAGNC,QAAAA,aAHM;AAINrD,QAAAA,GAJM;AAKNsD,QAAAA,OALM;AAMNC,QAAAA,IANM;AAONzB,QAAAA,IAPM;AAQN0B,QAAAA;AARM;AADM,KAAD,KAWT;AACJ,YAAMC,IAAI,GAAG,CACXzD,GAAG,IAAIsD,OAAP,IACA,CAACtD,GAAD,IAAQ,CAACuD,IAAT,IAAiB,CAACzB,IAAlB,IAA0BuB,aAD1B,IAC2C,EAFhC,CAIb;AAJa,QAKXK,KALW,CAKL,CALK,KAMVF,WAAW,IAAI,EANL,KAMYJ,OAAO,IAAI,EANvB,CAAb;;AAQA,UAAID,GAAJ,EAAS;AACP,YAAIM,IAAJ,EAAU;AACRV,UAAAA,YAAY,CAACY,IAAb,CAAkBF,IAAlB;AACD;;AAED,eAAO,IAAP;AACD;;AAEDV,MAAAA,YAAY,CAACY,IAAb,CAAkBF,IAAlB;AAEA,aAAO,KAAP;AACD,KA/BD;AAiCA,WAAOV,YAAY,CAACa,IAAb,CAAkB,IAAlB,CAAP;AACD,GApCD;;AAsCArE,EAAAA,KAAK,CAACsE,cAAN,GAAuB,MAAM;AAC3B,UAAMd,YAAY,GAAG,EAArB;AACA,QAAIe,mBAAmB,GAAG,CAA1B;AACAlD,IAAAA,KAAK,CAACoC,MAAN,CAAaC,IAAb,CAAkB,CAAC;AACjBC,MAAAA,MAAM,EAAE;AACNM,QAAAA,WADM;AAENxD,QAAAA,GAFM;AAGNmD,QAAAA;AAHM;AADS,KAAD,EAMfY,GANe,KAMP;AACT,UAAIA,GAAG,KAAK/D,GAAG,IAAImD,GAAZ,CAAP,EAAyB;AACvBW,QAAAA,mBAAmB,GAAGC,GAAG,GAAG,CAA5B;AAEA,eAAO,IAAP;AACD;;AAED,UAAIA,GAAG,IAAIP,WAAX,EAAwB;AACtBT,QAAAA,YAAY,CAACY,IAAb,CAAkBH,WAAW,KAAKT,YAAY,CAACiB,MAAb,GAAsB,EAAtB,GAA2B,IAAhC,CAA7B;AACD;;AAED,aAAO,KAAP;AACD,KAlBD;AAoBA,WAAO;AACLR,MAAAA,WAAW,EAAET,YAAY,CAACa,IAAb,CAAkB,IAAlB,CADR;AAELE,MAAAA;AAFK,KAAP;AAID,GA3BD;;AA6BAvE,EAAAA,KAAK,CAAC0E,SAAN,GAAkB,CAACjE,GAAD,EAAM,GAAGkD,MAAT,KAAoB;AACpC,SAAK,MAAM,CACTa,GADS,EAETG,GAFS,CAAX,IAGKlE,GAAG,CAACgD,MAAJ,CAAWmB,OAAX,EAHL,EAG2B;AACzBD,MAAAA,GAAG,CAAChB,MAAJ,GAAa,EACX,GAAGgB,GAAG,CAAChB,MADI;AAEX,WAAGA,MAAM,CAACa,GAAD;AAFE,OAAb;AAID;AACF,GAVD;;AAYAxE,EAAAA,KAAK,CAAC6E,MAAN,GAAe,CAACpE,GAAD,EAAMkD,MAAN,KAAiB;AAC9BlD,IAAAA,GAAG,CAACgD,MAAJ,GAAa,CACX;AACA;AACEqB,MAAAA,MAAM,EAAErE,GAAG,CAACF,IAFd;AAGEoD,MAAAA,MAAM,EAAEnE,UAAU,CAAC;AACjBuF,QAAAA,SAAS,EAAE,GADM;AAEjBjB,QAAAA,aAAa,EAAE,GAFE;AAGjBzD,QAAAA,KAAK,EAAEqB,MAAM,GAAG,GAHC;AAIjBjB,QAAAA,GAAG,EAAE,MAAMA,GAAG,CAACA,GAJE;AAKjB,WAAGkD;AALc,OAAD;AAHpB,KADW,CAAb;AAaD,GAdD;;AAgBA3D,EAAAA,KAAK,CAACgF,SAAN,GAAmBR,GAAD,IAAS;AACzB,WAAOxE,KAAK,CAACiF,aAAN,CAAoBT,GAApB,CAAP;AACD,GAFD;;AAIAxE,EAAAA,KAAK,CAACiF,aAAN,GAAsB,CAACC,QAAD,EAAWC,eAAe,GAAG,CAA7B,KAAmC;AACvD,UAAM;AACJ1B,MAAAA,MAAM,EAAE2B;AADJ,QAEF/D,KAAK,CAACgE,IAAN,CAAWH,QAAX,CAFJ;AAGA,QAAII,SAAJ;AACA,UAAMC,WAAW,GAAGlE,KAAK,CAACoC,MAAN,CAAa,CAAb,EAAgBqB,MAApC;AACAM,IAAAA,SAAS,CAAC1B,IAAV,CAAe,CAAC;AACdoB,MAAAA;AADc,KAAD,EAEZU,MAFY,KAED;AACZ,YAAMC,WAAW,GAAGpE,KAAK,CAACoC,MAAN,CAAaiC,SAAb,CAAuB,CAAC;AAC1CZ,QAAAA,MAAM,EAAEa,SADkC;AAE1ChC,QAAAA,MAAM,EAAE;AACNC,UAAAA;AADM;AAFkC,OAAD,KAKrC;AACJ,eAAOkB,MAAM,KAAKa,SAAX,IAAwB,CAAC/B,GAAhC;AACD,OAPmB,CAApB,CADY,CASZ;;AACA,UAAI6B,WAAW,GAAG,CAAC,CAAnB,EAAsB;AACpB,YAAIG,WAAW,GAAG,CAAlB;AACAR,QAAAA,SAAS,CAACjB,KAAV,CAAgBqB,MAAM,GAAG,CAAzB,EAA4B9B,IAA5B,CAAiC,CAAC;AAChCC,UAAAA,MAAM,EAAE;AACNlD,YAAAA,GADM;AAENmD,YAAAA;AAFM;AADwB,SAAD,KAK3B;AACJ,cAAI,CAACnD,GAAD,IAAQ,CAACmD,GAAb,EAAkB;AAChBgC,YAAAA,WAAW;AAEX,mBAAO,KAAP;AACD;;AAED,iBAAO,IAAP;AACD,SAbD;AAcAvE,QAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBJ,WAAW,GAAGN,eAAlC,EAAmDS,WAAW,GAAGT,eAAjE;AACAC,QAAAA,SAAS,CAACS,MAAV,CAAiBL,MAAM,GAAGL,eAA1B,EAA2CS,WAAW,GAAGT,eAAzD;AACAG,QAAAA,SAAS,GAAGG,WAAZ;AAEA,eAAO,IAAP;AACD,OA/BW,CAiCZ;;;AACA,aAAO,KAAP;AACD,KArCD;;AAsCA,SAAK,MAAM,CACTjB,GADS,EAETG,GAFS,CAAX,IAGKtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBmB,SAAnB,EAA8BV,OAA9B,EAHL,EAG8C;AAC5CD,MAAAA,GAAG,CAACG,MAAJ,GAAaS,WAAW,GAAGD,SAAd,GAA0Bd,GAAvC;AACD,KAjDsD,CAmDvD;AACA;AACA;;AACD,GAtDD;;AAwDAxE,EAAAA,KAAK,CAAC8F,MAAN,GAAe,CACbC,aADa,EAEbjB,MAAM,GAAG,CAAC;AAAA;;AAAA,0BAAAzD,KAAK,CAACgE,IAAN,CAAWhE,KAAK,CAACgE,IAAN,CAAWZ,MAAX,GAAoB,CAA/B,oFAAmChB,MAAnC,CAA0C,CAA1C,6EAA8CqB,MAA9C;AAAA,UAAwDzD,KAAK,CAACoC,MAAN,CAAaiC,SAAb,CAAuB,CAAC;AACxF/B,IAAAA,MAAM,EAAE;AACNlD,MAAAA;AADM;AADgF,GAAD,KAInF;AACJ,WAAOA,GAAP;AACD,GANiE,IAM7D,CANI,IAMC,CARG,EASbkD,MAAM,GAAG,EATI,KAUV;AACHtC,IAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBf,MAApB,EAA4B,CAA5B,EAA+B;AAC7BA,MAAAA,MAD6B;AAE7BrB,MAAAA,MAAM,EAAE,EAFqB;AAG7BE,MAAAA,MAAM,EAAEnE,UAAU,CAAC;AACjBuF,QAAAA,SAAS,EAAE,GADM;AAEjBjB,QAAAA,aAAa,EAAE,GAFE;AAGjBzD,QAAAA,KAAK,EAAEqB,MAAM,GAAG,GAHC;AAIjBjB,QAAAA,GAAG,EAAG,IAAGsF,aAAc,EAJN;AAKjB,WAAGpC;AALc,OAAD;AAHW,KAA/B;;AAWA,SAAK,MAAMgB,GAAX,IAAkBtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBW,MAAM,GAAG,CAA5B,CAAlB,EAAkD;AAChDH,MAAAA,GAAG,CAACG,MAAJ;AACD;AACF,GAzBD;;AA2BA9E,EAAAA,KAAK,CAACgG,YAAN,GAAqB,MAAM;AACzB,QAAIC,SAAJ;;AACA,SAAK,MAAM;AACTnB,MAAAA,MADS;AAETnB,MAAAA,MAAM,EAAE;AACNlD,QAAAA;AADM;AAFC,KAAX,IAKKY,KAAK,CAACoC,MALX,EAKmB;AACjB,UAAIhD,GAAJ,EAAS;AACPwF,QAAAA,SAAS,GAAGnB,MAAZ;AACA;AACD;AACF;;AAED,WAAOmB,SAAP;AACD,GAfD;;AAiBAjG,EAAAA,KAAK,CAACR,UAAN,GAAmBA,UAAnB;;AAEAQ,EAAAA,KAAK,CAACkG,WAAN,GAAqBvC,MAAD,IAAY;AAC9B,SAAK,MAAMwC,IAAX,IAAmB,CACjB,OADiB,EAEjB,eAFiB,EAGjB,KAHiB,EAIjB,MAJiB,EAKjB,UALiB,EAMjB,SANiB,EAOjB,MAPiB,EAQjB,UARiB,EASjB,aATiB,EAUjB,KAViB,EAWjB,SAXiB,CAAnB,EAYG;AACDxC,MAAAA,MAAM,CAACwC,IAAD,CAAN,GAAe,EAAf;AACD;AACF,GAhBD;;AAkBAnG,EAAAA,KAAK,CAACoG,OAAN,GAAgB,CAACX,WAAD,EAAc9B,MAAd,KAAyB;AAAA;;AACvC,UAAMmB,MAAM,GAAG,CAAC,kBAAAzD,KAAK,CAACoC,MAAN,CAAagC,WAAW,GAAG,CAA3B,iEAA+BX,MAA/B,KAAyC,CAA1C,IAA+C,CAA9D;AACAzD,IAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBJ,WAApB,EAAiC,CAAjC,EAAoC;AAClCX,MAAAA,MADkC;AAElCrB,MAAAA,MAAM,EAAE,EAF0B;AAGlCE,MAAAA,MAAM,EAAEnE,UAAU,CAACmE,MAAD;AAHgB,KAApC;;AAMA,SAAK,MAAMgB,GAAX,IAAkBtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBW,MAAM,GAAG,CAA5B,CAAlB,EAAkD;AAChDH,MAAAA,GAAG,CAACG,MAAJ;AACD,KAVsC,CAWvC;AACA;;AACD,GAbD;;AAeA9E,EAAAA,KAAK,CAACqG,QAAN,GAAiB,CAACnB,QAAD,EAAWC,eAAX,EAA4BmB,QAA5B,KAAyC;AACxD,UAAM;AACJ7C,MAAAA,MAAM,EAAE2B;AADJ,QAEF/D,KAAK,CAACgE,IAAN,CAAWH,QAAX,CAFJ;AAGA,QAAII,SAAJ;AACA,UAAMC,WAAW,GAAGlE,KAAK,CAACoC,MAAN,CAAa,CAAb,EAAgBqB,MAApC;AACAM,IAAAA,SAAS,CAAC1B,IAAV,CAAe,CAAC;AACdoB,MAAAA;AADc,KAAD,KAET;AACJ,YAAMyB,QAAQ,GAAG,MAAM;AACrB,eAAO;AACLzB,UAAAA,MADK;AAELrB,UAAAA,MAAM,EAAE,EAFH;AAGLE,UAAAA,MAAM,EAAEnE,UAAU,CAAC;AACjBuF,YAAAA,SAAS,EAAE,GADM;AAEjB1E,YAAAA,KAAK,EAAEqB,MAAM,GAAG;AAFC,WAAD;AAHb,SAAP;AAQD,OATD;;AAWA,YAAM8E,SAAS,GAAG,MAAM;AACtB,eAAOC,KAAK,CAACC,IAAN,CAAW;AAChBjC,UAAAA,MAAM,EAAE6B;AADQ,SAAX,EAEJC,QAFI,CAAP;AAGD,OAJD;;AAMA,YAAMd,WAAW,GAAGpE,KAAK,CAACoC,MAAN,CAAaiC,SAAb,CAAuB,CAAC;AAC1CZ,QAAAA,MAAM,EAAEa,SADkC;AAE1ChC,QAAAA,MAAM,EAAE;AACNC,UAAAA;AADM;AAFkC,OAAD,KAKrC;AACJ,eAAOkB,MAAM,KAAKa,SAAX,IAAwB,CAAC/B,GAAhC;AACD,OAPmB,CAApB,CAlBI,CA0BJ;;AACA,UAAI6B,WAAW,GAAG,CAAC,CAAnB,EAAsB;AACpB,cAAMkB,KAAK,GAAGH,SAAS,EAAvB;AACAnF,QAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBJ,WAAW,GAAGN,eAAlC,EAAmD,CAAnD,EAAsD,GAAGwB,KAAzD,EAFoB,CAIpB;;AACArB,QAAAA,SAAS,GAAGG,WAAZ;AAEA,eAAO,IAAP;AACD,OAnCG,CAqCJ;;;AACA,aAAO,KAAP;AACD,KAzCD;;AA0CA,SAAK,MAAM,CACTjB,GADS,EAETG,GAFS,CAAX,IAGKtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBmB,SAAnB,EAA8BV,OAA9B,EAHL,EAG8C;AAC5CD,MAAAA,GAAG,CAACG,MAAJ,GAAaS,WAAW,GAAGD,SAAd,GAA0Bd,GAAvC;AACD;AACF,GAtDD;;AAwDAxE,EAAAA,KAAK,CAAC4G,aAAN,GAAsB,MAAM;AAC1B,UAAM;AACJnD,MAAAA,MAAM,EAAE,CACN;AACEE,QAAAA;AADF,OADM;AADJ,QAMFtC,KANJ;AAOA,UAAM;AACJyC,MAAAA,aADI;AAEJG,MAAAA,WAFI;AAGJJ,MAAAA,OAHI;AAIJpD,MAAAA,GAJI;AAKJuD,MAAAA,IALI;AAMJzB,MAAAA;AANI,QAOFoB,MAPJ;AASA,QAAI;AACFA,MAAAA,MAAM,EAAE;AACNkD,QAAAA,QADM;AAEN9C,QAAAA,OAFM;AAGN+C,QAAAA;AAHM;AADN,QAMAzF,KAAK,CAACoC,MAAN,CAAa,CAAb,CANJ,CAjB0B,CAyB1B;;AACA,QAAI,CAACQ,WAAL,EAAkB;AAChB,UAAI4C,QAAJ,EAAc;AACZA,QAAAA,QAAQ,GAAG,EAAX;AACD,OAFD,MAEO,IAAIC,QAAJ,EAAc;AACnBA,QAAAA,QAAQ,GAAG,EAAX,CADmB,CAErB;AACC,OAHM;AAGA;AAA0I,YAAI/C,OAAJ,EAAa;AAC5JA,UAAAA,OAAO,GAAG,EAAV;AACD;AACF;;AAED/D,IAAAA,KAAK,CAACkG,WAAN,CAAkBvC,MAAlB;AAEA3D,IAAAA,KAAK,CAACoG,OAAN,CAAc,CAAd,EAAiB;AACfrB,MAAAA,SAAS,EAAE,GADI;AAGf;AACA;AACAd,MAAAA,WAAW,EAAEA,WAAW,CAAC8C,OAAZ,EALE;AAMf/C,MAAAA,IANe;AAOfF,MAAAA,aAPe;AAQf+C,MAAAA,QARe;AASf9C,MAAAA,OATe;AAUf+C,MAAAA,QAVe;AAWfzG,MAAAA,KAAK,EAAEqB,MAAM,GAAG,GAXD;AAYfjB,MAAAA,GAZe;AAaf8B,MAAAA;AAbe,KAAjB;AAeAvC,IAAAA,KAAK,CAACoG,OAAN,CAAc,CAAd,EAAiB;AACfxC,MAAAA,GAAG,EAAE,IADU;AAEfC,MAAAA,OAFe;AAGfxD,MAAAA,KAAK,EAAEqB,MAAM,GAAG;AAHD,KAAjB;AAKD,GA3DD;;AA6DA1B,EAAAA,KAAK,CAACgH,YAAN,GAAsBC,MAAD,IAAY;AAC/B,WAAOvG,oBAAWsG,YAAX,CAAwBC,MAAxB,CAAP;AACD,GAFD;;AAIAjH,EAAAA,KAAK,CAACkH,yBAAN,GAAmCC,0BAAD,IAAgC;AAChE,WAAOzG,oBAAWwG,yBAAX,CAAqC9F,IAArC,EAA2C+F,0BAA3C,CAAP;AACD,GAFD;;AAIAnH,EAAAA,KAAK,CAACoH,SAAN,GAAkB,MAAM;AACtB,WAAO1G,oBAAW0G,SAAX,CAAqBhG,IAArB,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAACqH,WAAN,GAAoB,MAAM;AACxB,WAAOjG,IAAI,KACTA,IAAI,CAACkG,SAAL,IACAlG,IAAI,CAACmB,IAAL,KAAc,kBAAd,IAAoCnB,IAAI,CAACmG,KAAL,CAAWD,SAD/C,IAEA,CACE,wBADF,EAC4B,0BAD5B,EAEEhF,QAFF,CAEWlB,IAAI,CAACmB,IAFhB,KAGEnB,IAAI,CAACoG,WAAL,CAAiBF,SANV,CAAX;AAQD,GATD;;AAWAtH,EAAAA,KAAK,CAACyH,aAAN,GAAsB,MAAM;AAC1B,WAAO/G,oBAAW+G,aAAX,CAAyBrG,IAAzB,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAAC0H,gBAAN,GAA0B7G,OAAD,IAAa;AACpC,UAAMmD,IAAI,GAAGhE,KAAK,CAACe,mBAAN,CAA0B;AACrCF,MAAAA;AADqC,KAA1B,CAAb;;AAGA,QAAI,CAACmD,IAAL,EAAW;AACT,aAAO,KAAP;AACD;;AAED,WAAOtD,oBAAWgH,gBAAX,CAA4BrG,KAA5B,EAAmC2C,IAAnC,CAAP;AACD,GATD;;AAWAhE,EAAAA,KAAK,CAACe,mBAAN,GAA4B,CAAC;AAC3BF,IAAAA,OAD2B;AAE3B8G,IAAAA,uBAAuB,GAAG,KAFC;AAG3BC,IAAAA,iBAAiB,GAAG,KAHO;AAI3BC,IAAAA,cAAc,GAAI,qBAAoBhH,OAAQ;AAJnB,GAAD,KAKtB;AACJ,UAAMC,GAAG,GAAGJ,oBAAWK,mBAAX,CAA+BlB,OAA/B,EAAwCE,IAAxC,EAA8Cc,OAA9C,EAAuDf,iBAAvD,CAAZ;;AACA,UAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,QAAvC;;AACA,QAAId,KAAK,CAAC8H,MAAN,CAAajH,OAAb,MAA0BC,GAAG,KAAK,KAAR,IAAiBE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAA5D,CAAJ,EAA8E;AAC5E,UAAI0G,uBAAJ,EAA6B;AAC3B,eAAO;AACLzG,UAAAA,OAAO,EAAE,IADJ;AAELL,UAAAA;AAFK,SAAP;AAID;;AAED,YAAMX,OAAO,GAAGc,QAAQ,IAAIF,GAAG,CAACZ,OAAhB,IAA2B2H,cAA3C;AACA1H,MAAAA,MAAM,CAACD,OAAD,EAAU,IAAV,EAAgBF,KAAK,CAAC+H,OAAN,CAAclH,OAAd,EAAuB,CAAvB,CAAhB,CAAN;AAEA,aAAO,KAAP;AACD;;AAED,WAAOG,QAAQ,IAAI,CAAC4G,iBAAb,GAAiC9G,GAAG,CAACG,WAArC,GAAmDH,GAA1D;AACD,GAvBD;;AAyBAd,EAAAA,KAAK,CAACgI,UAAN,GAAmB,CAAChE,IAAD,EAAOiE,WAAP,KAAuB;AACxC,WAAOvH,oBAAWsH,UAAX,CAAsBnI,OAAtB,EAA+BE,IAA/B,EAAqCiE,IAArC,EAA2CiE,WAA3C,CAAP;AACD,GAFD;;AAIAjI,EAAAA,KAAK,CAACyC,OAAN,GAAiByF,KAAD,IAAW;AACzB,WAAOxH,oBAAW+B,OAAX,CAAmBpB,KAAnB,EAA0B6G,KAA1B,CAAP;AACD,GAFD;;AAIAlI,EAAAA,KAAK,CAAC8H,MAAN,GAAgB9D,IAAD,IAAU;AACvB,WAAOtD,oBAAWoH,MAAX,CAAkBzG,KAAlB,EAAyB2C,IAAzB,CAAP;AACD,GAFD;;AAIAhE,EAAAA,KAAK,CAACmI,YAAN,GAAsBnE,IAAD,IAAU;AAC7B,WAAOtD,oBAAWyH,YAAX,CAAwBnE,IAAxB,CAAP;AACD,GAFD;;AAIAhE,EAAAA,KAAK,CAACoI,qBAAN,GAA+BpE,IAAD,IAAU;AACtC,WAAOtD,oBAAW0H,qBAAX,CAAiCpE,IAAjC,CAAP;AACD,GAFD;;AAIAhE,EAAAA,KAAK,CAACqI,SAAN,GAAkB,MAAM;AAAA;;AACtB,QACErG,kBAAkB,KAAK,KAAvB,KACGhC,KAAK,CAAC8H,MAAN,CAAa,QAAb,KAA0B9H,KAAK,CAACsI,WAAN,CAAkB,QAAlB,CAD7B,KAEAvG,oBAAoB,KAAK,KAAzB,KACG/B,KAAK,CAAC8H,MAAN,CAAa,UAAb,KAA4B9H,KAAK,CAACsI,WAAN,CAAkB,UAAlB,CAD/B,CAFA,IAIArG,sBAAsB,KAAK,KAA3B,KACGjC,KAAK,CAAC8H,MAAN,CAAa,YAAb,KAA8B9H,KAAK,CAACsI,WAAN,CAAkB,YAAlB,CADjC,CAJA,IAOApG,2BAA2B,KACxBlC,KAAK,CAACyC,OAAN,CAAc,CACb,UADa,EACD,SADC,CAAd,KAGCzC,KAAK,CAACsI,WAAN,CAAkB,UAAlB,CAHD,IAIGtI,KAAK,CAACsI,WAAN,CAAkB,SAAlB,CALqB,CAR7B,EAauC;AACrC,aAAO,IAAP;AACD;;AAED,QAAI5H,oBAAW6H,mBAAX,CACFlH,KADE,EACKD,IADL,EACWvB,OADX,EACoB4B,UAAU,CAAC+G,IAAX,CAAgBC,MADpC,CAAJ,EAEG;AACD,aAAO,IAAP;AACD;;AAED,UAAMC,UAAU,GAAG,sBAAA7I,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,yEAAoBD,UAApB,KAAkC,CACnD,YADmD,EAEnD,IAAG3I,IAAI,KAAK,SAAT,GAAqB,EAArB,GAA0B,CAC3B,YAD2B,CAA7B,CAFmD,CAArD;;AAMA,QAAI2I,UAAU,CAACjE,MAAX,IAAqBzE,KAAK,CAAC4I,cAAN,CAAqBF,UAArB,EAAiCjE,MAA1D,EAAkE;AAChE,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAnCD;;AAqCA,OAAK,MAAMoE,MAAX,IAAqB,CACnB,0BADmB,EAEnB,0BAFmB,CAArB,EAGG;AACD7I,IAAAA,KAAK,CAAC6I,MAAD,CAAL,GAAgB,CAAChI,OAAD,EAAUiI,aAAV,KAA4B;AAC1C,YAAMC,MAAM,GAAGrI,oBAAWmI,MAAX,EAAmBhI,OAAnB,CAAf;;AACA,UAAIkI,MAAJ,EAAY;AACV,eAAO,IAAP;AACD;;AAED,UAAI,CAACD,aAAL,EAAoB;AAClB,eAAO,KAAP;AACD;;AAED,YAAME,WAAW,GAAGF,aAAa,CAACpF,IAAd,CAAoBuF,YAAD,IAAkB;AACvD,eAAOvI,oBAAWmI,MAAX,EAAmBhI,OAAnB,EAA4BoI,YAA5B,CAAP;AACD,OAFmB,CAApB;AAIA,aAAOD,WAAW,GAAG;AACnBE,QAAAA,SAAS,EAAE;AADQ,OAAH,GAEd,KAFJ;AAGD,KAjBD;AAkBD;;AAED,OAAK,MAAML,MAAX,IAAqB,CACnB,yBADmB,EAEnB,yBAFmB,EAGnB,kCAHmB,CAArB,EAIG;AACD7I,IAAAA,KAAK,CAAC6I,MAAD,CAAL,GAAgB,CAAChI,OAAD,EAAUiI,aAAV,KAA4B;AAC1C,YAAMC,MAAM,GAAGrI,oBAAWmI,MAAX,EAAmBhI,OAAnB,CAAf;;AACA,UAAI,CAACkI,MAAL,EAAa;AACX,eAAO,KAAP;AACD,OAJyC,CAM1C;;;AAEA,YAAMC,WAAW,GAAGF,aAAa,CAACK,KAAd,CAAqBF,YAAD,IAAkB;AACxD,eAAOvI,oBAAWmI,MAAX,EAAmBhI,OAAnB,EAA4BoI,YAA5B,CAAP;AACD,OAFmB,CAApB;AAIA,aAAOD,WAAW,GAAG,IAAH,GAAU;AAC1BE,QAAAA,SAAS,EAAE;AADe,OAA5B;AAGD,KAfD;AAgBD;;AAED,OAAK,MAAML,MAAX,IAAqB,CACnB,uBADmB,EAEnB,sBAFmB,CAArB,EAGG;AACD7I,IAAAA,KAAK,CAAC6I,MAAD,CAAL,GAAiBhI,OAAD,IAAa;AAC3B,aAAOH,oBAAWmI,MAAX,EAAmBhI,OAAnB,CAAP;AACD,KAFD;AAGD;;AAEDb,EAAAA,KAAK,CAACoJ,sBAAN,GAAgCC,GAAD,IAAS;AACtC,WAAO3I,oBAAW0I,sBAAX,CAAkCC,GAAlC,EAAuC9H,QAAQ,CAAC+H,cAAhD,CAAP;AACD,GAFD;;AAIAtJ,EAAAA,KAAK,CAACuJ,iBAAN,GAA2B9I,GAAD,IAAS;AACjC,WAAOC,oBAAW6I,iBAAX,CAA6B9I,GAA7B,CAAP;AACD,GAFD;;AAIAT,EAAAA,KAAK,CAACwJ,yCAAN,GAAmDC,kBAAD,IAAwB;AACxE,WAAO/I,oBAAW8I,yCAAX,CAAqDpI,IAArD,EAA2DqI,kBAA3D,CAAP;AACD,GAFD;;AAIAzJ,EAAAA,KAAK,CAAC0J,aAAN,GAAsB,MAAM;AAC1B,QAAI,CACF,wBADE,EACwB,0BADxB,EAEFpH,QAFE,CAEOlB,IAAI,CAACmB,IAFZ,CAAJ,EAEuB;AACrB,aAAO7B,oBAAWgJ,aAAX,CAAyBtI,IAAI,CAACoG,WAA9B,CAAP;AACD;;AAED,WAAO9G,oBAAWgJ,aAAX,CAAyBtI,IAAzB,CAAP;AACD,GARD;;AAUApB,EAAAA,KAAK,CAAC2J,mBAAN,GAA4B,MAAM;AAChC,WAAOjJ,oBAAWgJ,aAAX,CAAyBtI,IAAzB,EAA+B,IAA/B,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAAC4J,aAAN,GAAsB,MAAM;AAC1B,WAAOlJ,oBAAWkJ,aAAX,CAAyBxI,IAAzB,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAAC6J,OAAN,GAAgB,MAAM;AACpB,WAAOzI,IAAI,CAAC0I,KAAZ;AACD,GAFD;;AAIA9J,EAAAA,KAAK,CAAC+H,OAAN,GAAiBlH,OAAD,IAAa;AAC3B,WAAOb,KAAK,CAAC+J,UAAN,CAAkBC,IAAD,IAAU;AAChC,aAAOA,IAAI,CAACvJ,GAAL,KAAaI,OAApB;AACD,KAFM,CAAP;AAGD,GAJD;;AAMAb,EAAAA,KAAK,CAAC4I,cAAN,GAAwBqB,OAAD,IAAa;AAClC,WAAOjK,KAAK,CAAC+J,UAAN,CAAkBtJ,GAAD,IAAS;AAC/B,aAAOwJ,OAAO,CAAC3H,QAAR,CAAiB7B,GAAG,CAACA,GAArB,CAAP;AACD,KAFM,CAAP;AAGD,GAJD;;AAMAT,EAAAA,KAAK,CAAC+J,UAAN,GAAoBG,MAAD,IAAY;AAC7B,WAAOxJ,oBAAWqJ,UAAX,CAAsB1I,KAAK,CAACgE,IAA5B,EAAkC6E,MAAlC,CAAP;AACD,GAFD;;AAIAlK,EAAAA,KAAK,CAACmK,aAAN,GAAuB9E,IAAD,IAAU;AAC9B,WAAO3E,oBAAWyJ,aAAX,CAAyBtK,OAAzB,EAAkCE,IAAlC,EAAwCsF,IAAxC,EAA8CvF,iBAA9C,CAAP;AACD,GAFD;;AAIAE,EAAAA,KAAK,CAACoK,YAAN,GAAsBvJ,OAAD,IAAa;AAChC,UAAM;AACJwE,MAAAA;AADI,QAEFxF,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,KAAsB,EAF1B;AAIA,WAAO0B,OAAO,CAAChF,IAAI,IAAIA,IAAI,CAAC/C,QAAL,CAAczB,OAAd,CAAT,CAAd;AACD,GAND;;AAQAb,EAAAA,KAAK,CAACsK,YAAN,GAAqB,MAAM;AACzB,WAAO,CACL,GAAG3I,SADE,EACSP,IADT,EAELmJ,OAFK,GAEKC,IAFL,CAEWC,MAAD,IAAY;AAC3B,aAAOA,MAAM,IAAI,CACf,kBADe,EACK,iBADL,EAEfnI,QAFe,CAENmI,MAAM,CAAClI,IAFD,CAAjB;AAGD,KANM,KAMD,IANN;AAOD,GARD;;AAUAvC,EAAAA,KAAK,CAAC0K,aAAN,GAAsB,MAAM;AAC1B,UAAMC,SAAS,GAAG3K,KAAK,CAACsK,YAAN,EAAlB;;AAEA,QAAI,CAACK,SAAL,EAAgB;AACd,aAAO,IAAP;AACD;;AAED,UAAMC,cAAc,GAAG,mCAAgB/I,UAAhB,EAA4B8I,SAA5B,EAAuC;AAC5DxI,MAAAA,QAD4D;AAE5DC,MAAAA;AAF4D,KAAvC,CAAvB;;AAKA,QAAIwI,cAAJ,EAAoB;AAClB,aAAO,gCAAaA,cAAb,EAA6B,EAA7B,CAAP;AACD;;AAED,WAAO,IAAP;AACD,GAjBD;;AAmBA5K,EAAAA,KAAK,CAACsI,WAAN,GAAqBzH,OAAD,IAAa;AAC/B,UAAMgK,UAAU,GAAG7K,KAAK,CAAC0K,aAAN,EAAnB;AAEA,WAAOL,OAAO,CAACQ,UAAD,CAAP,IAAuBnK,oBAAWoH,MAAX,CAAkB+C,UAAlB,EAA8BhK,OAA9B,CAA9B;AACD,GAJD;;AAMAb,EAAAA,KAAK,CAAC8K,mBAAN,GAA4B,CAACjK,OAAD,EAAUkK,YAAV,EAAwBpD,uBAAuB,GAAG,KAAlD,KAA4D;AACtF,UAAM5B,aAAa,GAAG/F,KAAK,CAACe,mBAAN,CAA0B;AAC9C4G,MAAAA,uBAD8C;AAE9C9G,MAAAA;AAF8C,KAA1B,CAAtB;;AAIA,QAAI,CAACkF,aAAD,IACF4B,uBAAuB,IAAI5B,aAA3B,IAA4C,OAAOA,aAAP,KAAyB,QADvE,EAEE;AACA;AACD;;AAED,UAAMiF,iBAAiB,GAAG3J,KAAK,CAACgE,IAAN,CAAW6E,MAAX,CAAkB,CAAC;AAC3CzJ,MAAAA;AAD2C,KAAD,KAEtC;AACJ,aAAOA,GAAG,KAAKsF,aAAf;AACD,KAJyB,CAA1B;;AAMA,SAAK,MAAMkF,gBAAX,IAA+BD,iBAA/B,EAAkD;AAChDD,MAAAA,YAAY,CAACE,gBAAD,EAAmBlF,aAAnB,CAAZ;AACD;AACF,GApBD;;AAsBA,SAAO/F,KAAP;AACD,CAlsBD;;AAosBA,MAAMkL,WAAW,GAAIrL,OAAD,IAAa;AAAA;;AAC/B;AACA,QAAM0B,QAAQ,GAAG;AACf;AACA4J,IAAAA,aAAa,EAAEd,OAAO,0BAACxK,OAAO,CAAC0B,QAAR,CAAiBF,KAAlB,0DAAC,sBAAwB8J,aAAzB,CAFP;AAGfC,IAAAA,cAAc,EAAEf,OAAO,2BAACxK,OAAO,CAAC0B,QAAR,CAAiBF,KAAlB,2DAAC,uBAAwB+J,cAAzB,CAHR;AAIfjJ,IAAAA,QAAQ,EAAEkJ,MAAM,CAAC,2BAAAxL,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBc,QAAxB,KAAoC,CAArC,CAJD;AAKfC,IAAAA,QAAQ,EAAEiJ,MAAM,CAAC,2BAAAxL,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBe,QAAxB,KAAoC,CAArC,CALD;AAOf;AACAtC,IAAAA,iBAAiB,EAAE,2BAAAD,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBvB,iBAAxB,KAA6C,EARjD;AAUf;AACAwL,IAAAA,cAAc,EAAE,2BAAAzL,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBiK,cAAxB,KAA0C,EAX3C;AAaf;AACAhC,IAAAA,cAAc,EAAE,2BAAAzJ,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBiI,cAAxB,KAA0C,EAd3C;AAgBf;AACA;AACAvH,IAAAA,oBAAoB,4BAAElC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,2DAAE,uBAAwBU,oBAlB/B;AAmBfC,IAAAA,kBAAkB,4BAAEnC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,2DAAE,uBAAwBW,kBAnB7B;AAoBfC,IAAAA,sBAAsB,6BAAEpC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,4DAAE,wBAAwBY,sBApBjC;AAqBfC,IAAAA,2BAA2B,6BAAErC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,4DAAE,wBAAwBa,2BArBtC;AAuBf;AACAnC,IAAAA,IAAI,EAAE,4BAAAF,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,oFAAwBtB,IAAxB,MACHF,OAAO,CAAC0L,UAAR,CAAmBjJ,QAAnB,CAA4B,oBAA5B,IAAoD,YAApD,GAAmE,OADhE;AAxBS,GAAjB;AA2BA;;AAEA5B,sBAAW8K,eAAX,CAA2BjK,QAAQ,CAACxB,IAApC;;AACA,MAAI;AACFW,wBAAW+K,oBAAX,CAAgClK,QAAQ,CAAC+H,cAAzC;AACD,GAFD,CAEE,OAAOoC,KAAP,EAAc;AACd7L,IAAAA,OAAO,CAACM,MAAR,CAAe;AACbC,MAAAA,GAAG,EAAE;AACHC,QAAAA,KAAK,EAAE;AACLC,UAAAA,MAAM,EAAE,CADH;AAELC,UAAAA,IAAI,EAAE;AAFD;AADJ,OADQ;AAObL,MAAAA,OAAO,EAAEwL,KAAK,CAACxL;AAPF,KAAf;AAUA,WAAO,KAAP;AACD;;AAED,SAAOqB,QAAP;AACD,CAjDD;AAmDA;AACA;AACA;AACA;AACA;AACA;;;;;AACA,MAAMoK,UAAU,GAAG,CAAC9L,OAAD,EAAU+L,WAAV,KAA0B;AAC3C,QAAMzL,MAAM,GAAG,CAACD,OAAD,EAAU2L,GAAG,GAAG,IAAhB,EAAsBC,QAAQ,GAAG,IAAjC,EAAuC9I,IAAI,GAAG,IAA9C,KAAuD;AACpE,QAAI5C,GAAJ;;AAEA,QAAI0L,QAAJ,EAAc;AACZ,UAAI,EAAE,UAAUA,QAAZ,CAAJ,EAA2B;AACzBA,QAAAA,QAAQ,CAACvL,IAAT,GAAgBuL,QAAQ,CAACrI,MAAT,CAAgB,CAAhB,EAAmBqB,MAAnC;AACD;;AAED,YAAMiH,UAAU,GAAGH,WAAW,CAACxL,GAAZ,CAAgBC,KAAhB,CAAsBE,IAAtB,GAA6BuL,QAAQ,CAACvL,IAAzD;AAEAH,MAAAA,GAAG,GAAG;AACJwD,QAAAA,GAAG,EAAE;AACHtD,UAAAA,MAAM,EAAE,CADL;AAEHC,UAAAA,IAAI,EAAEwL;AAFH,SADD;AAKJ1L,QAAAA,KAAK,EAAE;AACLC,UAAAA,MAAM,EAAE,CADH;AAELC,UAAAA,IAAI,EAAEwL;AAFD;AALH,OAAN,CAPY,CAkBZ;AACA;;AACA,UAAID,QAAQ,CAACxL,MAAb,EAAqB;AACnB,cAAM0L,SAAS,GAAGJ,WAAW,CAACxL,GAAZ,CAAgBC,KAAhB,CAAsBC,MAAtB,GAA+BwL,QAAQ,CAACxL,MAA1D;AAEAF,QAAAA,GAAG,CAACwD,GAAJ,CAAQtD,MAAR,GAAiB0L,SAAjB;AACA5L,QAAAA,GAAG,CAACC,KAAJ,CAAUC,MAAV,GAAmB0L,SAAnB;AACD;AACF;;AAEDnM,IAAAA,OAAO,CAACM,MAAR,CAAe;AACb6C,MAAAA,IADa;AAEb6I,MAAAA,GAFa;AAGbzL,MAAAA,GAHa;AAIbF,MAAAA,OAJa;AAKbkB,MAAAA,IAAI,EAAEwK;AALO,KAAf;AAOD,GAtCD;;AAwCA,SAAOzL,MAAP;AACD,CA1CD;AA4CA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;;AAEA,MAAM8L,OAAO,GAAG,CACdC,IADc,EAEdxK,MAFc,EAENL,KAFM,EAGdI,UAHc,EAGF5B,OAHE,EAGO8G,KAHP,EAGcrF,SAHd,EAGyBF,IAHzB,EAG+BG,QAH/B,EAIdM,UAJc,EAIFsK,QAJE,EAIQC,KAJR,EAIe5K,YAJf,KAKX;AACH,QAAMrB,MAAM,GAAGwL,UAAU,CAAC9L,OAAD,EAAUyB,SAAV,CAAzB;AAEA,QAAMtB,KAAK,GAAGmB,QAAQ,CACpBC,IADoB,EAEpBC,KAFoB,EAGpBC,SAHoB,EAIpBC,QAJoB,EAKpBpB,MALoB,EAMpBN,OANoB,EAOpB2B,YAPoB,EAQpBC,UARoB,EASpBC,MAToB,CAAtB;;AAYA,MACE,CAACD,UAAU,CAAC4K,aAAZ,IAA6B9K,QAAQ,CAAC6J,cAAtC,IACApL,KAAK,CAAC8H,MAAN,CAAa,UAAb,CAFF,EAGE;AACA;AACD;;AAED,MACE,CAACrG,UAAU,CAAC6K,YAAZ,IAA4B/K,QAAQ,CAAC4J,aAArC,KAEEnL,KAAK,CAAC8H,MAAN,CAAa,SAAb,KACAzG,KAAK,CAACgE,IAAN,CACG6E,MADH,CACU,CAAC;AACPzJ,IAAAA;AADO,GAAD,KAEF;AACJ,WAAOA,GAAG,KAAK,QAAf;AACD,GALH,EAMGiD,IANH,CAMQ,CAAC;AACLO,IAAAA;AADK,GAAD,KAEA;AACJ,WAAOA,WAAW,KAAK,SAAvB;AACD,GAVH,CAHF,CADF,EAgBE;AACA;AACD;;AAEDkI,EAAAA,QAAQ,CAAC;AACPtM,IAAAA,OADO;AAEPH,IAAAA,WAFO;AAGPgC,IAAAA,MAHO;AAIPwK,IAAAA,IAJO;AAKP1K,IAAAA,YALO;AAMPH,IAAAA,KANO;AAOPC,IAAAA,SAPO;AAQPF,IAAAA,IARO;AASPjB,IAAAA,MATO;AAUPoB,IAAAA,QAVO;AAWPM,IAAAA,UAXO;AAYPuK,IAAAA,KAZO;AAaPpM,IAAAA;AAbO,GAAD,CAAR;AAeD,CA9DD;;AAgEA,MAAMuM,iBAAiB,GAAG,UAAU5F,KAAV,EAAiBrF,SAAjB,EAA4B;AACpD,QAAMkL,UAAU,GAAG7F,KAAK,CAACrF,SAAS,CAAClB,GAAV,CAAcC,KAAd,CAAoBE,IAApB,GAA2B,CAA5B,CAAxB;AACA,QAAMkM,KAAK,GAAGD,UAAU,CAACE,MAAX,CAAkB,CAAlB,EAAqBC,MAArB,CAA4BrL,SAAS,CAAClB,GAAV,CAAcC,KAAd,CAAoBC,MAAhD,CAAd;AACA,QAAMsM,IAAI,GAAG,gCAAatL,SAAb,EAAwB,EAAxB,CAAb;AAEA,SAAO,CACLmL,KADK,EACEG,IADF,CAAP;AAGD,CARD;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,gBAAgB,GAAG,CAACV,QAAD,EAAW1K,UAAX,EAAuBqL,QAAvB,EAAiCC,gBAAjC,KAAsD;AAC7E,QAAMC,aAAa,GAAG,IAAIC,GAAJ,EAAtB;AAEA,MAAIlK,OAAJ;AACA,MAAIxB,QAAJ;;AACA,QAAM2L,YAAY,GAAG,CAACrN,OAAD,EAAUuB,IAAV,EAAgB+L,UAAhB,EAA4Bf,KAA5B,EAAmCgB,QAAnC,KAAgD;AACnE,UAAMvL,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACA,UAAM;AACJ6E,MAAAA;AADI,QAEF9E,UAFJ;AAIA,UAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAD,EAAU0B,QAAV,CAA3B;;AACA,SAAK,MAAMD,SAAX,IAAwB6L,UAAxB,EAAoC;AAClC,UAAI,CAAE,YAAD,CAAeE,IAAf,CAAoBxL,UAAU,CAACyL,OAAX,CAAmBhM,SAAnB,CAApB,CAAL,EAAyD;AACvD;AACD;;AAED,YAAM,CACJI,MADI,EAEJL,KAFI,IAGFkL,iBAAiB,CACnB5F,KADmB,EACZrF,SADY,CAHrB;;AAOA,UAAIyL,gBAAJ,EAAsB;AACpB,aAAK,MAAM,CACTvI,GADS,EAET;AACE+I,UAAAA;AADF,SAFS,CAAX,IAKKT,QAAQ,CAAClI,OAAT,EALL,EAKyB;AACvB,cAAI2I,OAAO,IAAIxK,OAAO,CAACwK,OAAD,EAAUlM,KAAV,CAAP,KAA4B,KAA3C,EAAkD;AAChD;AACD;;AAED4K,UAAAA,OAAO,CACL;AACEsB,YAAAA,OADF;AAEEjI,YAAAA,SAAS,EAAEd,GAFb;AAGEgJ,YAAAA,QAAQ,EAAEpM,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEmB;AAHlB,WADK,EAMLb,MANK,EAOLL,KAPK,EAQLI,UARK,EASL5B,OATK,EAUL8G,KAVK,EAWLrF,SAXK,EAYLF,IAZK,EAaLG,QAbK,EAcLM,UAdK,EAeLsK,QAfK,EAgBLC,KAhBK,EAiBL,IAjBK,CAAP;AAmBD;;AAED;AACD;;AAED,UAAIqB,WAAJ;AACA,UAAInI,SAAJ,CAhDkC,CAiDlC;;AACA,UAAIwH,QAAQ,IAAIA,QAAQ,CAAC3D,KAAT,CAAe,CAAC;AAC9BoE,QAAAA;AAD8B,OAAD,EAE5B/I,GAF4B,KAEpB;AACTiJ,QAAAA,WAAW,GAAGF,OAAd;AACAjI,QAAAA,SAAS,GAAGd,GAAZ;AAEA,eAAO+I,OAAO,IAAIxK,OAAO,CAACwK,OAAD,EAAUlM,KAAV,CAAP,KAA4B,KAA9C;AACD,OAPe,CAAhB,EAOI;AACF;AACD;;AAED4K,MAAAA,OAAO,CACLwB,WAAW,GAAG;AACZF,QAAAA,OAAO,EAAEE,WADG;AAEZnI,QAAAA,SAFY;AAGZkI,QAAAA,QAAQ,EAAEpM,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEmB;AAHJ,OAAH,GAIP;AACF+C,QAAAA,SADE;AAEFkI,QAAAA,QAAQ,EAAEpM,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEmB;AAFd,OALC,EASLb,MATK,EAULL,KAVK,EAWLI,UAXK,EAYL5B,OAZK,EAaL8G,KAbK,EAcLrF,SAdK,EAeLF,IAfK,EAgBLG,QAhBK,EAiBLM,UAjBK,EAkBLsK,QAlBK,EAmBLC,KAnBK,EAoBL,IApBK,CAAP;AAsBD;;AAED,QAAIgB,QAAQ,IAAI3L,UAAU,CAACiM,IAA3B,EAAiC;AAC/BjM,MAAAA,UAAU,CAACiM,IAAX,CAAgB;AACd7N,QAAAA,OADc;AAEduM,QAAAA,KAFc;AAGdpM,QAAAA;AAHc,OAAhB;AAKD;AACF,GAnGD;;AAqGA,SAAO;AACL2N,IAAAA,MAAM,CAAE9N,OAAF,EAAW;AACf,YAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACAP,MAAAA,QAAQ,GAAG2J,WAAW,CAACrL,OAAD,CAAtB;;AACA,UAAI,CAAC0B,QAAL,EAAe;AACb,eAAO,EAAP;AACD;;AAED,UAAIuL,QAAJ,EAAc;AACZ/J,QAAAA,OAAO,GAAG,kCAAexB,QAAf,CAAV;AACD;;AAED,YAAM6K,KAAK,GAAG,EAAd;AAEA,aAAO;AACL,yBAAkBhL,IAAlB,EAAwB;AACtB,gBAAMwM,WAAW,GAAG,qCAAkBxM,IAAlB,EAAwBS,UAAxB,CAApB;;AAEA,cAAIT,IAAI,KAAKwM,WAAb,EAA0B;AACxB;AACD;;AAED,gBAAMhC,WAAW,GAAG,mCAAgB/J,UAAhB,EAA4BT,IAA5B,EAAkCG,QAAlC,CAApB;;AACA,cAAIyL,aAAa,CAACa,GAAd,CAAkBjC,WAAlB,CAAJ,EAAoC;AAClC;AACD;;AAED,cAAI,CAACA,WAAL,EAAkB;AAChB,gBAAInK,UAAU,CAACqM,UAAf,EAA2B;AACzBrM,cAAAA,UAAU,CAACqM,UAAX,CAAsB;AACpB1M,gBAAAA,IADoB;AAEpBgL,gBAAAA;AAFoB,eAAtB;AAID;;AAED;AACD;;AAEDY,UAAAA,aAAa,CAACe,GAAd,CAAkBnC,WAAlB;AACAsB,UAAAA,YAAY,CAACrN,OAAD,EAAUuB,IAAV,EAAgB,CAC1BwK,WAD0B,CAAhB,EAETQ,KAFS,CAAZ;AAGD,SA5BI;;AA6BL,yBAAkB;AAChB,gBAAM4B,WAAW,GAAGnM,UAAU,CAACoM,cAAX,EAApB;AACA,gBAAMC,cAAc,GAAGF,WAAW,CAAC9D,MAAZ,CAAoB9I,IAAD,IAAU;AAClD,mBAAO,CAAC4L,aAAa,CAACa,GAAd,CAAkBzM,IAAlB,CAAR;AACD,WAFsB,CAAvB;AAIA8L,UAAAA,YAAY,CAACrN,OAAD,EAAU,IAAV,EAAgBqO,cAAhB,EAAgC9B,KAAhC,EAAuC,IAAvC,CAAZ;AACD;;AApCI,OAAP;AAsCD,KApDI;;AAqDL5D,IAAAA,IAAI,EAAE/G,UAAU,CAAC+G;AArDZ,GAAP;AAuDD,CAjKD;AAmKA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAM2F,SAAS,GAAG,CAAChC,QAAD,EAAW1K,UAAX,KAA0B;AAC1C,SAAO;AACLkM,IAAAA,MAAM,CAAE9N,OAAF,EAAW;AACf,YAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACA,YAAMP,QAAQ,GAAG2J,WAAW,CAACrL,OAAD,CAA5B;;AACA,UAAI,CAAC0B,QAAL,EAAe;AACb,eAAO,EAAP;AACD;;AAED,aAAO;AACL,yBAAkB;AAChB,gBAAMyM,WAAW,GAAGnM,UAAU,CAACoM,cAAX,EAApB;AACA,gBAAM;AACJtH,YAAAA;AADI,cAEF9E,UAFJ;AAGA,gBAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAD,EAAU0B,QAAV,CAA3B;AAEA4K,UAAAA,QAAQ,CAAC;AACP6B,YAAAA,WADO;AAEPnO,YAAAA,OAFO;AAGP8G,YAAAA,KAHO;AAIPgF,YAAAA,UAJO;AAKPpK,YAAAA,QALO;AAMPM,YAAAA,UANO;AAOP7B,YAAAA;AAPO,WAAD,CAAR;AASD;;AAjBI,OAAP;AAmBD,KA3BI;;AA4BLwI,IAAAA,IAAI,EAAE/G,UAAU,CAAC+G;AA5BZ,GAAP;AA8BD,CA/BD;;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS4F,YAAT,CAAuBjC,QAAvB,EAAiC1K,UAAjC,EAA6C;AAAA;;AAC1D,QAAM4M,QAAQ,GAAG5M,UAAH,aAAGA,UAAH,2CAAGA,UAAU,CAAE+G,IAAf,qDAAG,iBAAkBjG,IAAnC;;AACA,MAAI,CAAC8L,QAAD,IAAa,CAAC,CAChB,SADgB,EACL,YADK,EACS,QADT,EAEhB/L,QAFgB,CAEP+L,QAFO,CAAlB,EAEsB;AACpB,UAAM,IAAIC,SAAJ,CAAc,wFAAd,CAAN;AACD;;AAED,MAAI,OAAOnC,QAAP,KAAoB,UAAxB,EAAoC;AAClC,UAAM,IAAImC,SAAJ,CAAc,2CAAd,CAAN;AACD;;AAED,MAAI7M,UAAU,CAAC0M,SAAf,EAA0B;AACxB,WAAOA,SAAS,CAAChC,QAAD,EAAW1K,UAAX,CAAhB;AACD;;AAED,MAAIA,UAAU,CAACoL,gBAAf,EAAiC;AAC/B,WAAOA,gBAAgB,CAACV,QAAD,EAAW1K,UAAX,CAAvB;AACD;;AAED,SAAO;AACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACIkM,IAAAA,MAAM,CAAE9N,OAAF,EAAW;AACf,YAAM0B,QAAQ,GAAG2J,WAAW,CAACrL,OAAD,CAA5B;;AACA,UAAI,CAAC0B,QAAL,EAAe;AACb,eAAO,EAAP;AACD;;AAED,UAAIuL,QAAJ;;AACA,UAAIrL,UAAU,CAAC8M,eAAX,IAA8B9M,UAAU,CAAC+M,eAAzC,IAA4D/M,UAAU,CAACgN,YAA3E,EAAyF;AAAA;;AACvF3B,QAAAA,QAAQ,GAAGrL,UAAU,CAACgN,YAAX,0BAA2B5O,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,CAA3B,+CAA2B,mBAAoB+F,KAA/C,GACT7O,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,EAAmB+F,KADV,GAEThO,oBAAWiO,gBAAX,CAA4B9O,OAA5B,EAAqC4B,UAAU,CAAC8M,eAAhD,CAFF;;AAIA,YAAIzB,QAAJ,EAAc;AACZA,UAAAA,QAAQ,GAAGA,QAAQ,CAAC8B,GAAT,CAAcC,GAAD,IAAS;AAC/B,gBAAI,OAAOA,GAAP,KAAe,QAAf,IAA2B,CAACA,GAAG,CAAChP,OAApC,EAA6C;AAC3C,qBAAO,EACL,GAAGgP,GADE;AAELhP,gBAAAA,OAAO,EAAE;AAFJ,eAAP;AAID;;AAED,mBAAOgP,GAAP;AACD,WATU,CAAX;AAUD;;AAED,cAAMC,WAAW,gBAAGhC,QAAH,8CAAG,UAAUxK,QAAV,CAAmB,KAAnB,CAApB;AACA,cAAMyM,YAAY,GAAG,CAACD,WAAD,mBAAgBhC,QAAhB,+CAAgB,WAAUtC,IAAV,CAAgBwE,IAAD,IAAU;AAC5D,iBAAO,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEnP,OAAN,MAAkB,KAAzB;AACD,SAFoC,CAAhB,CAArB;;AAGA,YAAIiP,WAAW,IAAIC,YAAnB,EAAiC;AAC/B,iBAAOlC,gBAAgB,CACrBV,QADqB,EACX1K,UADW,EACCsN,YAAY,GAAGjC,QAAH,GAAc,IAD3B,EACiCrL,UAAU,CAACgN,YAD5C,CAAhB,CAELd,MAFK,CAEE9N,OAFF,CAAP;AAGD;AACF;;AAED,YAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACA,YAAM;AACJ6E,QAAAA;AADI,UAEF9E,UAFJ;AAIA,YAAMuK,KAAK,GAAG,EAAd;;AAEA,YAAM6C,UAAU,GAAG,CAAC/C,IAAD,EAAOnJ,OAAP,EAAgB3B,IAAhB,KAAyB;AAC1C,cAAME,SAAS,GAAG,mCAAgBO,UAAhB,EAA4BT,IAA5B,EAAkCG,QAAlC,CAAlB;;AACA,YAAI,CAACD,SAAL,EAAgB;AACd;AACD;;AAED,cAAM,CACJI,MADI,EAEJL,KAFI,IAGFkL,iBAAiB,CACnB5F,KADmB,EACZrF,SADY,CAHrB;;AAOA,aACE;AACA;AACA;AACAyB,QAAAA,OAAO,IAAIA,OAAO,CAAC1B,KAAD,CAAP,KAAmB,KAJhC,EAKE;AACA;AACD;;AAED4K,QAAAA,OAAO,CACLC,IADK,EACCxK,MADD,EACSL,KADT,EACgBI,UADhB,EAC4B5B,OAD5B,EACqC8G,KADrC,EAC4CrF,SAD5C,EACuDF,IADvD,EAC6DG,QAD7D,EACuEM,UADvE,EACmFsK,QADnF,EAC6FC,KAD7F,CAAP;AAGD,OAzBD;;AA2BA,UAAI8C,aAAa,GAAG,EAApB;;AAEA,UAAIpC,QAAQ,KACVrL,UAAU,CAAC8M,eAAX,IAA8B9M,UAAU,CAAC+M,eAAzC,IAA4D/M,UAAU,CAACgN,YAD7D,CAAZ,EAEG;AACDS,QAAAA,aAAa,GAAGxO,oBAAWyO,gBAAX,CACdrC,QADc,EAEdmC,UAFc,EAGd,kCAAe1N,QAAf,CAHc,CAAhB;AAKD,OARD,MAQO;AACL,aAAK,MAAM4E,IAAX,IAAmB,CACjB,yBADiB,EAEjB,qBAFiB,EAGjB,oBAHiB,CAAnB,EAIG;AACD+I,UAAAA,aAAa,CAAC/I,IAAD,CAAb,GAAsB8I,UAAU,CAACG,IAAX,CAAgB,IAAhB,EAAsB;AAC1C5B,YAAAA,QAAQ,EAAErH;AADgC,WAAtB,EAEnB,IAFmB,CAAtB;AAGD;AACF;;AAED,UAAI1E,UAAU,CAACiM,IAAf,EAAqB;AACnBwB,QAAAA,aAAa,CAAC,cAAD,CAAb,GAAgC,MAAM;AACpCzN,UAAAA,UAAU,CAACiM,IAAX,CAAgB;AACd7N,YAAAA,OADc;AAEduM,YAAAA;AAFc,WAAhB;AAID,SALD;AAMD;;AAED,aAAO8C,aAAP;AACD,KAhHI;;AAiHL1G,IAAAA,IAAI,EAAE/G,UAAU,CAAC+G;AAjHZ,GAAP;AAmHD","sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
1
+ {"version":3,"file":"iterateJsdoc.js","names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","commentHandler","reducedNode","getReducedASTNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
@@ -1264,13 +1264,17 @@ const parseClosureTemplateTag = tag => {
1264
1264
  return type.trim();
1265
1265
  });
1266
1266
  };
1267
+ /**
1268
+ * @typedef {true|string[]} DefaultContexts
1269
+ */
1270
+
1267
1271
  /**
1268
1272
  * Checks user option for `contexts` array, defaulting to
1269
1273
  * contexts designated by the rule. Returns an array of
1270
1274
  * ESTree AST types, indicating allowable contexts.
1271
1275
  *
1272
1276
  * @param {*} context
1273
- * @param {true|string[]} defaultContexts
1277
+ * @param {DefaultContexts} defaultContexts
1274
1278
  * @returns {string[]}
1275
1279
  */
1276
1280