eslint-plugin-jsdoc 40.1.2 → 40.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4486,6 +4486,12 @@ The format is as follows:
4486
4486
  }
4487
4487
  ```
4488
4488
 
4489
+ <a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-options-6-enablefixer-2"></a>
4490
+ <a name="eslint-plugin-jsdoc-rules-check-tag-names-options-6-enablefixer-2"></a>
4491
+ ##### <code>enableFixer</code>
4492
+
4493
+ Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#user-content-typed).
4494
+
4489
4495
  <a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-jsxtags"></a>
4490
4496
  <a name="eslint-plugin-jsdoc-rules-check-tag-names-jsxtags"></a>
4491
4497
  #### <code>jsxTags</code>
@@ -4501,6 +4507,64 @@ jsxRuntime
4501
4507
 
4502
4508
  For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx).
4503
4509
 
4510
+ <a name="user-content-eslint-plugin-jsdoc-rules-check-tag-names-typed"></a>
4511
+ <a name="eslint-plugin-jsdoc-rules-check-tag-names-typed"></a>
4512
+ #### <code>typed</code>
4513
+
4514
+ If this is set to `true`, additionally checks for tag names that are redundant when using a type checker such as TypeScript.
4515
+
4516
+ These tags are always unnecessary when using TypeScript or similar:
4517
+
4518
+ ```
4519
+ augments
4520
+ callback
4521
+ class
4522
+ enum
4523
+ implements
4524
+ private
4525
+ property
4526
+ protected
4527
+ public
4528
+ readonly
4529
+ this
4530
+ type
4531
+ typedef
4532
+ ```
4533
+
4534
+ These tags are unnecessary except when inside a TypeScript `declare` context:
4535
+
4536
+ ```
4537
+ abstract
4538
+ access
4539
+ class
4540
+ constant
4541
+ constructs
4542
+ default
4543
+ enum
4544
+ export
4545
+ exports
4546
+ function
4547
+ global
4548
+ inherits
4549
+ instance
4550
+ interface
4551
+ member
4552
+ memberof
4553
+ memberOf
4554
+ method
4555
+ mixes
4556
+ mixin
4557
+ module
4558
+ name
4559
+ namespace
4560
+ override
4561
+ property
4562
+ requires
4563
+ static
4564
+ this
4565
+ ```
4566
+
4567
+ Additionally, for `@param` and `@return` tags, the rule will flag unnecessary type descriptions (e.g. `@param {string}`).
4504
4568
 
4505
4569
  |||
4506
4570
  |---|---|
@@ -4513,6 +4577,72 @@ For more information, see the [babel documentation](https://babeljs.io/docs/en/b
4513
4577
  The following patterns are considered problems:
4514
4578
 
4515
4579
  ````js
4580
+ /** @type {string} */let a;
4581
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4582
+ // Message: '@type' is redundant when using a type system.
4583
+
4584
+ /** @type {string} */let a;
4585
+ // "jsdoc/check-tag-names": ["error"|"warn", {"enableFixer":false,"typed":true}]
4586
+ // Message: '@type' is redundant when using a type system.
4587
+
4588
+ /** @type {string} */ let a;
4589
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4590
+ // Message: '@type' is redundant when using a type system.
4591
+
4592
+ /** @type {string} */
4593
+ let a;
4594
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4595
+ // Message: '@type' is redundant when using a type system.
4596
+
4597
+ /** @type {string} */
4598
+ let a;
4599
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4600
+ // Message: '@type' is redundant when using a type system.
4601
+
4602
+ /** @type {string} - extra info */
4603
+ let a;
4604
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4605
+ // Message: '@type' is redundant when using a type system.
4606
+
4607
+ /**
4608
+ * Existing comment.
4609
+ * @type {string}
4610
+ */
4611
+ let a;
4612
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4613
+ // Message: '@type' is redundant when using a type system.
4614
+
4615
+ /** @abstract */
4616
+ let a;
4617
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4618
+ // Message: '@abstract' is redundant outside of ambient (`declare`/`.d.ts`) contexts when using a type system.
4619
+
4620
+ /** @abstract */
4621
+ let a;
4622
+ // "jsdoc/check-tag-names": ["error"|"warn", {"enableFixer":false,"typed":true}]
4623
+ // Message: '@abstract' is redundant outside of ambient (`declare`/`.d.ts`) contexts when using a type system.
4624
+
4625
+ const a = {
4626
+ /** @abstract */
4627
+ b: true,
4628
+ };
4629
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4630
+ // Message: '@abstract' is redundant outside of ambient (`declare`/`.d.ts`) contexts when using a type system.
4631
+
4632
+ /** @template */
4633
+ let a;
4634
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4635
+ // Message: '@template' without a name is redundant when using a type system.
4636
+
4637
+ /**
4638
+ * Prior description.
4639
+ *
4640
+ * @template
4641
+ */
4642
+ let a;
4643
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
4644
+ // Message: '@template' without a name is redundant when using a type system.
4645
+
4516
4646
  /** @typoo {string} */
4517
4647
  let a;
4518
4648
  // Message: Invalid JSDoc tag name "typoo".
@@ -4869,6 +4999,40 @@ function Test() {
4869
4999
  The following patterns are not considered problems:
4870
5000
 
4871
5001
  ````js
5002
+ /** @default 0 */
5003
+ let a;
5004
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5005
+
5006
+ /** @default 0 */
5007
+ declare let a;
5008
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5009
+
5010
+ /** @abstract */
5011
+ let a;
5012
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5013
+
5014
+ /** @abstract */
5015
+ declare let a;
5016
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5017
+
5018
+ /** @abstract */
5019
+ { declare let a; }
5020
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5021
+
5022
+ function test() {
5023
+ /** @abstract */
5024
+ declare let a;
5025
+ }
5026
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5027
+
5028
+ /** @template name */
5029
+ let a;
5030
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5031
+
5032
+ /** @param param - takes information */
5033
+ function takesOne(param) {}
5034
+ // "jsdoc/check-tag-names": ["error"|"warn", {"typed":true}]
5035
+
4872
5036
  /**
4873
5037
  * @param foo
4874
5038
  */
@@ -5148,6 +5312,23 @@ export function transient<T>(target?: T): T {
5148
5312
  * @internal
5149
5313
  */
5150
5314
  // Settings: {"jsdoc":{"mode":"typescript"}}
5315
+
5316
+ interface WebTwain {
5317
+ /**
5318
+ * Converts the images specified by the indices to base64 synchronously.
5319
+ * @function WebTwain#ConvertToBase64
5320
+ * @returns {Base64Result}
5321
+
5322
+ ConvertToBase64(): Base64Result;
5323
+ */
5324
+
5325
+ /**
5326
+ * Converts the images specified by the indices to base64 asynchronously.
5327
+ * @function WebTwain#ConvertToBase64
5328
+ * @returns {boolean}
5329
+ */
5330
+ ConvertToBase64(): boolean;
5331
+ }
5151
5332
  ````
5152
5333
 
5153
5334
 
@@ -12620,8 +12801,8 @@ A value indicating whether getters should be checked. Defaults to `false`.
12620
12801
 
12621
12802
  A value indicating whether setters should be checked. Defaults to `false`.
12622
12803
 
12623
- <a name="user-content-eslint-plugin-jsdoc-rules-require-example-options-25-enablefixer-2"></a>
12624
- <a name="eslint-plugin-jsdoc-rules-require-example-options-25-enablefixer-2"></a>
12804
+ <a name="user-content-eslint-plugin-jsdoc-rules-require-example-options-25-enablefixer-3"></a>
12805
+ <a name="eslint-plugin-jsdoc-rules-require-example-options-25-enablefixer-3"></a>
12625
12806
  ##### <code>enableFixer</code>
12626
12807
 
12627
12808
  A boolean on whether to enable the fixer (which adds an empty `@example` block).
@@ -13559,8 +13740,8 @@ setters should be checked but only when there is no getter. This may be useful
13559
13740
  if one only wishes documentation on one of the two accessors. Defaults to
13560
13741
  `false`.
13561
13742
 
13562
- <a name="user-content-eslint-plugin-jsdoc-rules-require-jsdoc-options-28-enablefixer-3"></a>
13563
- <a name="eslint-plugin-jsdoc-rules-require-jsdoc-options-28-enablefixer-3"></a>
13743
+ <a name="user-content-eslint-plugin-jsdoc-rules-require-jsdoc-options-28-enablefixer-4"></a>
13744
+ <a name="eslint-plugin-jsdoc-rules-require-jsdoc-options-28-enablefixer-4"></a>
13564
13745
  ##### <code>enableFixer</code>
13565
13746
 
13566
13747
  A boolean on whether to enable the fixer (which adds an empty jsdoc block).
@@ -16010,8 +16191,8 @@ function signature, it may appear that there is an actual property named
16010
16191
 
16011
16192
  An options object accepts the following optional properties:
16012
16193
 
16013
- <a name="user-content-eslint-plugin-jsdoc-rules-require-param-options-32-enablefixer-4"></a>
16014
- <a name="eslint-plugin-jsdoc-rules-require-param-options-32-enablefixer-4"></a>
16194
+ <a name="user-content-eslint-plugin-jsdoc-rules-require-param-options-32-enablefixer-5"></a>
16195
+ <a name="eslint-plugin-jsdoc-rules-require-param-options-32-enablefixer-5"></a>
16015
16196
  ##### <code>enableFixer</code>
16016
16197
 
16017
16198
  Whether to enable the fixer. Defaults to `true`.
package/dist/index.js CHANGED
@@ -174,6 +174,9 @@ const createRecommendedTypeScriptRuleset = warnOrError => {
174
174
  rules: {
175
175
  ...ruleset.rules,
176
176
  /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */
177
+ 'jsdoc/check-tag-names': [warnOrError, {
178
+ typed: true
179
+ }],
177
180
  'jsdoc/no-types': warnOrError,
178
181
  'jsdoc/require-param-type': 'off',
179
182
  'jsdoc/require-property-type': 'off',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_checkAccess","_interopRequireDefault","require","_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","_textEscaping","_validTypes","obj","__esModule","default","index","configs","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","textEscaping","validTypes","createRecommendedRuleset","warnOrError","plugins","createRecommendedTypeScriptRuleset","ruleset","recommended","_default","exports","module"],"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 textEscaping from './rules/textEscaping';\nimport validTypes from './rules/validTypes';\n\nconst index = {\n configs: {},\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 'text-escaping': textEscaping,\n 'valid-types': validTypes,\n },\n};\n\nconst createRecommendedRuleset = (warnOrError) => {\n return {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': warnOrError,\n 'jsdoc/check-alignment': warnOrError,\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': warnOrError,\n 'jsdoc/check-property-names': warnOrError,\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': warnOrError,\n 'jsdoc/check-types': warnOrError,\n 'jsdoc/check-values': warnOrError,\n 'jsdoc/empty-tags': warnOrError,\n 'jsdoc/implements-on-classes': warnOrError,\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': warnOrError,\n 'jsdoc/newline-after-description': warnOrError,\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': warnOrError,\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': warnOrError,\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': warnOrError,\n 'jsdoc/require-param': warnOrError,\n 'jsdoc/require-param-description': warnOrError,\n 'jsdoc/require-param-name': warnOrError,\n 'jsdoc/require-param-type': warnOrError,\n 'jsdoc/require-property': warnOrError,\n 'jsdoc/require-property-description': warnOrError,\n 'jsdoc/require-property-name': warnOrError,\n 'jsdoc/require-property-type': warnOrError,\n 'jsdoc/require-returns': warnOrError,\n 'jsdoc/require-returns-check': warnOrError,\n 'jsdoc/require-returns-description': warnOrError,\n 'jsdoc/require-returns-type': warnOrError,\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': warnOrError,\n 'jsdoc/require-yields-check': warnOrError,\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': warnOrError,\n 'jsdoc/text-escaping': 'off',\n 'jsdoc/valid-types': warnOrError,\n },\n };\n};\n\nconst createRecommendedTypeScriptRuleset = (warnOrError) => {\n const ruleset = createRecommendedRuleset(warnOrError);\n\n return {\n ...ruleset,\n rules: {\n ...ruleset.rules,\n /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */\n 'jsdoc/no-types': warnOrError,\n 'jsdoc/require-param-type': 'off',\n 'jsdoc/require-property-type': 'off',\n 'jsdoc/require-returns-type': 'off',\n /* eslint-enable indent */\n },\n };\n};\n\nindex.configs.recommended = createRecommendedRuleset('warn');\nindex.configs['recommended-error'] = createRecommendedRuleset('error');\nindex.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');\nindex.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');\n\nexport default index;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,iBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,mBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,gBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,mBAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,YAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,cAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,WAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,YAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,UAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,oBAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,iBAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,UAAA,GAAAf,sBAAA,CAAAC,OAAA;AACA,IAAAe,gBAAA,GAAAhB,sBAAA,CAAAC,OAAA;AACA,IAAAgB,wBAAA,GAAAjB,sBAAA,CAAAC,OAAA;AACA,IAAAiB,YAAA,GAAAlB,sBAAA,CAAAC,OAAA;AACA,IAAAkB,WAAA,GAAAnB,sBAAA,CAAAC,OAAA;AACA,IAAAmB,gBAAA,GAAApB,sBAAA,CAAAC,OAAA;AACA,IAAAoB,iBAAA,GAAArB,sBAAA,CAAAC,OAAA;AACA,IAAAqB,mBAAA,GAAAtB,sBAAA,CAAAC,OAAA;AACA,IAAAsB,QAAA,GAAAvB,sBAAA,CAAAC,OAAA;AACA,IAAAuB,iBAAA,GAAAxB,sBAAA,CAAAC,OAAA;AACA,IAAAwB,sBAAA,GAAAzB,sBAAA,CAAAC,OAAA;AACA,IAAAyB,mBAAA,GAAA1B,sBAAA,CAAAC,OAAA;AACA,IAAA0B,mCAAA,GAAA3B,sBAAA,CAAAC,OAAA;AACA,IAAA2B,eAAA,GAAA5B,sBAAA,CAAAC,OAAA;AACA,IAAA4B,oBAAA,GAAA7B,sBAAA,CAAAC,OAAA;AACA,IAAA6B,oCAAA,GAAA9B,sBAAA,CAAAC,OAAA;AACA,IAAA8B,aAAA,GAAA/B,sBAAA,CAAAC,OAAA;AACA,IAAA+B,aAAA,GAAAhC,sBAAA,CAAAC,OAAA;AACA,IAAAgC,wBAAA,GAAAjC,sBAAA,CAAAC,OAAA;AACA,IAAAiC,iBAAA,GAAAlC,sBAAA,CAAAC,OAAA;AACA,IAAAkC,iBAAA,GAAAnC,sBAAA,CAAAC,OAAA;AACA,IAAAmC,gBAAA,GAAApC,sBAAA,CAAAC,OAAA;AACA,IAAAoC,2BAAA,GAAArC,sBAAA,CAAAC,OAAA;AACA,IAAAqC,oBAAA,GAAAtC,sBAAA,CAAAC,OAAA;AACA,IAAAsC,oBAAA,GAAAvC,sBAAA,CAAAC,OAAA;AACA,IAAAuC,eAAA,GAAAxC,sBAAA,CAAAC,OAAA;AACA,IAAAwC,oBAAA,GAAAzC,sBAAA,CAAAC,OAAA;AACA,IAAAyC,0BAAA,GAAA1C,sBAAA,CAAAC,OAAA;AACA,IAAA0C,mBAAA,GAAA3C,sBAAA,CAAAC,OAAA;AACA,IAAA2C,cAAA,GAAA5C,sBAAA,CAAAC,OAAA;AACA,IAAA4C,cAAA,GAAA7C,sBAAA,CAAAC,OAAA;AACA,IAAA6C,mBAAA,GAAA9C,sBAAA,CAAAC,OAAA;AACA,IAAA8C,SAAA,GAAA/C,sBAAA,CAAAC,OAAA;AACA,IAAA+C,SAAA,GAAAhD,sBAAA,CAAAC,OAAA;AACA,IAAAgD,aAAA,GAAAjD,sBAAA,CAAAC,OAAA;AACA,IAAAiD,WAAA,GAAAlD,sBAAA,CAAAC,OAAA;AAA4C,SAAAD,uBAAAmD,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE5C,MAAMG,KAAK,GAAG;EACZC,OAAO,EAAE,CAAC,CAAC;EACXC,KAAK,EAAE;IACL,cAAc,EAAEC,oBAAW;IAC3B,iBAAiB,EAAEC,uBAAc;IACjC,gBAAgB,EAAEC,sBAAa;IAC/B,mBAAmB,EAAEC,yBAAgB;IACrC,sBAAsB,EAAEC,2BAAkB;IAC1C,mBAAmB,EAAEC,wBAAe;IACpC,sBAAsB,EAAEC,2BAAkB;IAC1C,cAAc,EAAEC,oBAAW;IAC3B,iBAAiB,EAAEC,sBAAa;IAChC,aAAa,EAAEC,mBAAU;IACzB,cAAc,EAAEC,oBAAW;IAC3B,YAAY,EAAEC,kBAAS;IACvB,uBAAuB,EAAEC,4BAAmB;IAC5C,mBAAmB,EAAEC,yBAAgB;IACrC,YAAY,EAAEC,kBAAS;IACvB,kBAAkB,EAAEC,wBAAe;IACnC,2BAA2B,EAAEC,gCAAuB;IACpD,eAAe,EAAEC,oBAAW;IAC5B,aAAa,EAAEC,mBAAU;IACzB,mBAAmB,EAAEC,wBAAe;IACpC,oBAAoB,EAAEC,yBAAgB;IACtC,sBAAsB,EAAEC,2BAAkB;IAC1C,UAAU,EAAEC,gBAAO;IACnB,oBAAoB,EAAEC,yBAAgB;IACtC,yBAAyB,EAAEC,8BAAqB;IAChD,qBAAqB,EAAEC,2BAAkB;IACzC,uCAAuC,EAAEC,2CAAkC;IAC3E,iBAAiB,EAAEC,uBAAc;IACjC,uBAAuB,EAAEC,4BAAmB;IAC5C,yCAAyC,EAAEC,4CAAmC;IAC9E,eAAe,EAAEC,qBAAY;IAC7B,eAAe,EAAEC,qBAAY;IAC7B,2BAA2B,EAAEC,gCAAuB;IACpD,oBAAoB,EAAEC,yBAAgB;IACtC,oBAAoB,EAAEC,yBAAgB;IACtC,kBAAkB,EAAEC,wBAAe;IACnC,8BAA8B,EAAEC,mCAA0B;IAC1D,uBAAuB,EAAEC,4BAAmB;IAC5C,uBAAuB,EAAEC,4BAAmB;IAC5C,iBAAiB,EAAEC,uBAAc;IACjC,uBAAuB,EAAEC,4BAAmB;IAC5C,6BAA6B,EAAEC,kCAAyB;IACxD,sBAAsB,EAAEC,2BAAkB;IAC1C,gBAAgB,EAAEC,sBAAa;IAC/B,gBAAgB,EAAEC,sBAAa;IAC/B,sBAAsB,EAAEC,2BAAkB;IAC1C,WAAW,EAAEC,iBAAQ;IACrB,WAAW,EAAEC,iBAAQ;IACrB,eAAe,EAAEC,qBAAY;IAC7B,aAAa,EAAEC;EACjB;AACF,CAAC;AAED,MAAMC,wBAAwB,GAAIC,WAAW,IAAK;EAChD,OAAO;IACLC,OAAO,EAAE,CACP,OAAO,CACR;IACDrD,KAAK,EAAE;MACL,oBAAoB,EAAEoD,WAAW;MACjC,uBAAuB,EAAEA,WAAW;MACpC,sBAAsB,EAAE,KAAK;MAC7B,yBAAyB,EAAE,KAAK;MAChC,4BAA4B,EAAE,KAAK;MACnC,yBAAyB,EAAEA,WAAW;MACtC,4BAA4B,EAAEA,WAAW;MACzC,oBAAoB,EAAE,KAAK;MAC3B,uBAAuB,EAAEA,WAAW;MACpC,mBAAmB,EAAEA,WAAW;MAChC,oBAAoB,EAAEA,WAAW;MACjC,kBAAkB,EAAEA,WAAW;MAC/B,6BAA6B,EAAEA,WAAW;MAC1C,yBAAyB,EAAE,KAAK;MAChC,kBAAkB,EAAE,KAAK;MACzB,wBAAwB,EAAEA,WAAW;MACrC,iCAAiC,EAAEA,WAAW;MAC9C,qBAAqB,EAAE,KAAK;MAC5B,mBAAmB,EAAE,KAAK;MAC1B,yBAAyB,EAAE,KAAK;MAChC,0BAA0B,EAAEA,WAAW;MACvC,4BAA4B,EAAE,KAAK;MACnC,gBAAgB,EAAE,KAAK;MACvB,0BAA0B,EAAEA,WAAW;MACvC,+BAA+B,EAAE,KAAK;MACtC,2BAA2B,EAAE,KAAK;MAClC,6CAA6C,EAAE,KAAK;MACpD,uBAAuB,EAAE,KAAK;MAC9B,6BAA6B,EAAE,KAAK;MACpC,+CAA+C,EAAE,KAAK;MACtD,qBAAqB,EAAEA,WAAW;MAClC,qBAAqB,EAAEA,WAAW;MAClC,iCAAiC,EAAEA,WAAW;MAC9C,0BAA0B,EAAEA,WAAW;MACvC,0BAA0B,EAAEA,WAAW;MACvC,wBAAwB,EAAEA,WAAW;MACrC,oCAAoC,EAAEA,WAAW;MACjD,6BAA6B,EAAEA,WAAW;MAC1C,6BAA6B,EAAEA,WAAW;MAC1C,uBAAuB,EAAEA,WAAW;MACpC,6BAA6B,EAAEA,WAAW;MAC1C,mCAAmC,EAAEA,WAAW;MAChD,4BAA4B,EAAEA,WAAW;MACzC,sBAAsB,EAAE,KAAK;MAC7B,sBAAsB,EAAEA,WAAW;MACnC,4BAA4B,EAAEA,WAAW;MACzC,iBAAiB,EAAE,KAAK;MACxB,iBAAiB,EAAEA,WAAW;MAC9B,qBAAqB,EAAE,KAAK;MAC5B,mBAAmB,EAAEA;IACvB;EACF,CAAC;AACH,CAAC;AAED,MAAME,kCAAkC,GAAIF,WAAW,IAAK;EAC1D,MAAMG,OAAO,GAAGJ,wBAAwB,CAACC,WAAW,CAAC;EAErD,OAAO;IACL,GAAGG,OAAO;IACVvD,KAAK,EAAE;MACL,GAAGuD,OAAO,CAACvD,KAAK;MAChB;MACE,gBAAgB,EAAEoD,WAAW;MAC7B,0BAA0B,EAAE,KAAK;MACjC,6BAA6B,EAAE,KAAK;MACpC,4BAA4B,EAAE;MAChC;IACF;EACF,CAAC;AACH,CAAC;;AAEDtD,KAAK,CAACC,OAAO,CAACyD,WAAW,GAAGL,wBAAwB,CAAC,MAAM,CAAC;AAC5DrD,KAAK,CAACC,OAAO,CAAC,mBAAmB,CAAC,GAAGoD,wBAAwB,CAAC,OAAO,CAAC;AACtErD,KAAK,CAACC,OAAO,CAAC,wBAAwB,CAAC,GAAGuD,kCAAkC,CAAC,MAAM,CAAC;AACpFxD,KAAK,CAACC,OAAO,CAAC,8BAA8B,CAAC,GAAGuD,kCAAkC,CAAC,OAAO,CAAC;AAAC,IAAAG,QAAA,GAE7E3D,KAAK;AAAA4D,OAAA,CAAA7D,OAAA,GAAA4D,QAAA;AAAAE,MAAA,CAAAD,OAAA,GAAAA,OAAA,CAAA7D,OAAA"}
1
+ {"version":3,"file":"index.js","names":["_checkAccess","_interopRequireDefault","require","_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","_textEscaping","_validTypes","obj","__esModule","default","index","configs","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","textEscaping","validTypes","createRecommendedRuleset","warnOrError","plugins","createRecommendedTypeScriptRuleset","ruleset","typed","recommended","_default","exports","module"],"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 textEscaping from './rules/textEscaping';\nimport validTypes from './rules/validTypes';\n\nconst index = {\n configs: {},\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 'text-escaping': textEscaping,\n 'valid-types': validTypes,\n },\n};\n\nconst createRecommendedRuleset = (warnOrError) => {\n return {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': warnOrError,\n 'jsdoc/check-alignment': warnOrError,\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': warnOrError,\n 'jsdoc/check-property-names': warnOrError,\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': warnOrError,\n 'jsdoc/check-types': warnOrError,\n 'jsdoc/check-values': warnOrError,\n 'jsdoc/empty-tags': warnOrError,\n 'jsdoc/implements-on-classes': warnOrError,\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': warnOrError,\n 'jsdoc/newline-after-description': warnOrError,\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': warnOrError,\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': warnOrError,\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': warnOrError,\n 'jsdoc/require-param': warnOrError,\n 'jsdoc/require-param-description': warnOrError,\n 'jsdoc/require-param-name': warnOrError,\n 'jsdoc/require-param-type': warnOrError,\n 'jsdoc/require-property': warnOrError,\n 'jsdoc/require-property-description': warnOrError,\n 'jsdoc/require-property-name': warnOrError,\n 'jsdoc/require-property-type': warnOrError,\n 'jsdoc/require-returns': warnOrError,\n 'jsdoc/require-returns-check': warnOrError,\n 'jsdoc/require-returns-description': warnOrError,\n 'jsdoc/require-returns-type': warnOrError,\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': warnOrError,\n 'jsdoc/require-yields-check': warnOrError,\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': warnOrError,\n 'jsdoc/text-escaping': 'off',\n 'jsdoc/valid-types': warnOrError,\n },\n };\n};\n\nconst createRecommendedTypeScriptRuleset = (warnOrError) => {\n const ruleset = createRecommendedRuleset(warnOrError);\n\n return {\n ...ruleset,\n rules: {\n ...ruleset.rules,\n /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */\n 'jsdoc/check-tag-names': [\n warnOrError, {\n typed: true,\n },\n ],\n 'jsdoc/no-types': warnOrError,\n 'jsdoc/require-param-type': 'off',\n 'jsdoc/require-property-type': 'off',\n 'jsdoc/require-returns-type': 'off',\n /* eslint-enable indent */\n },\n };\n};\n\nindex.configs.recommended = createRecommendedRuleset('warn');\nindex.configs['recommended-error'] = createRecommendedRuleset('error');\nindex.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');\nindex.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');\n\nexport default index;\n"],"mappings":"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"}
@@ -111,6 +111,14 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
111
111
  report(msg, handler ? fixer => {
112
112
  handler();
113
113
  const replacement = utils.stringify(jsdoc, specRewire);
114
+ if (!replacement) {
115
+ const text = sourceCode.getText();
116
+ const lastLineBreakPos = text.slice(0, jsdocNode.range[0]).search(/\n[ \t]*$/u);
117
+ if (lastLineBreakPos > -1) {
118
+ return fixer.removeRange([lastLineBreakPos, jsdocNode.range[1]]);
119
+ }
120
+ return fixer.removeRange(/\s/u.test(text.charAt(jsdocNode.range[1])) ? [jsdocNode.range[0], jsdocNode.range[1] + 1] : jsdocNode.range);
121
+ }
114
122
  return fixer.replaceText(jsdocNode, replacement);
115
123
  } : null, tag, data);
116
124
  };
@@ -233,10 +241,10 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
233
241
  })
234
242
  }];
235
243
  };
236
- utils.removeTag = idx => {
237
- return utils.removeTagItem(idx);
238
- };
239
- utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {
244
+ utils.removeTag = (tagIndex, {
245
+ removeEmptyBlock = false,
246
+ tagSourceOffset = 0
247
+ } = {}) => {
240
248
  const {
241
249
  source: tagSource
242
250
  } = jsdoc.tags[tagIndex];
@@ -246,12 +254,9 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
246
254
  number
247
255
  }, tagIdx) => {
248
256
  const sourceIndex = jsdoc.source.findIndex(({
249
- number: srcNumber,
250
- tokens: {
251
- end
252
- }
257
+ number: srcNumber
253
258
  }) => {
254
- return number === srcNumber && !end;
259
+ return number === srcNumber;
255
260
  });
256
261
  // istanbul ignore else
257
262
  if (sourceIndex > -1) {
@@ -259,16 +264,32 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
259
264
  tagSource.slice(tagIdx + 1).some(({
260
265
  tokens: {
261
266
  tag,
262
- end
267
+ end: ending
263
268
  }
264
269
  }) => {
265
- if (!tag && !end) {
270
+ if (!tag && !ending) {
266
271
  spliceCount++;
267
272
  return false;
268
273
  }
269
274
  return true;
270
275
  });
271
- jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);
276
+ const spliceIdx = sourceIndex + tagSourceOffset;
277
+ const {
278
+ delimiter,
279
+ end
280
+ } = jsdoc.source[spliceIdx].tokens;
281
+
282
+ /* istanbul ignore if -- Currently want to clear entirely if removing tags */
283
+ if (!removeEmptyBlock && (end || delimiter === '/**')) {
284
+ const {
285
+ tokens
286
+ } = jsdoc.source[spliceIdx];
287
+ for (const item of ['tag', 'postTag', 'type', 'postType', 'name', 'postName', 'description']) {
288
+ tokens[item] = '';
289
+ }
290
+ } else {
291
+ jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset);
292
+ }
272
293
  tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);
273
294
  lastIndex = sourceIndex;
274
295
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"iterateJsdoc.js","names":["_jsdoccomment","require","_commentParser","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","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","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","setTagDescription","matcher","setter","finalIdx","idx","test","getDescription","lastDescriptionLine","length","setDescriptionLines","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","_jsdoc$tags","_jsdoc$tags$source$","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","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","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","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","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$parserPath","_context$languageOpti","_context$languageOpti2","_context$languageOpti3","_context$languageOpti4","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","languageOptions","parser","contexts","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","getText","comment","selector","lastComment","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\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, returnArray) => {\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 returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 if (!tag && description) {\n descriptions.push(description);\n }\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 descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\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 // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath?.includes('@typescript-eslint') ||\n context.languageOptions?.parser?.meta?.name?.includes('typescript') ?\n 'typescript' : 'jsdoc'),\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\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 settings,\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && 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, ruleConfig.nonGlobalSettings ? {} : settings);\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 'TSDeclareFunction',\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 settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"iterateJsdoc.js","names":["_jsdoccomment","require","_commentParser","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","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","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","length","setDescriptionLines","changeTag","src","entries","setTag","number","delimiter","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","splice","addTag","targetTagName","_jsdoc$tags","_jsdoc$tags$source$","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","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","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$parserPath","_context$languageOpti","_context$languageOpti2","_context$languageOpti3","_context$languageOpti4","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","languageOptions","parser","contexts","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","comment","selector","lastComment","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\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 if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\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, returnArray) => {\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 returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 if (!tag && description) {\n descriptions.push(description);\n }\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 descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\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 }) => {\n return number === srcNumber;\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: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\n if (!removeEmptyBlock && (end || delimiter === '/**')) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[item] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset);\n }\n\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.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\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 // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath?.includes('@typescript-eslint') ||\n context.languageOptions?.parser?.meta?.name?.includes('typescript') ?\n 'typescript' : 'jsdoc'),\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\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 settings,\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && 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, ruleConfig.nonGlobalSettings ? {} : settings);\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 'TSDeclareFunction',\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 settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAKA,IAAAC,cAAA,GAAAD,OAAA;AAIA,IAAAE,WAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,MAAM;EACJG,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,EAAE;AAE7B,MAAMC,aAAa,GAAGA,CAACC,OAAO,EAAE;EAC9BC,iBAAiB;EACjBC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG,CAAC,CAAC;EAChBA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;EAEDF,KAAK,CAACQ,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAOC,mBAAU,CAACF,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDT,KAAK,CAACW,oBAAoB,GAAGD,mBAAU,CAACC,oBAAoB;EAE5DX,KAAK,CAACY,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CAAClB,OAAO,EAAEE,IAAI,EAAEc,OAAO,EAAEf,iBAAiB,CAAC;IACrF,MAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ;IAC/C,IAAIA,GAAG,KAAK,KAAK,IAAIE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAW,EAAE;MACjD,OAAO;QACLC,OAAO,EAAE,IAAI;QACbL;MACF,CAAC;IACH;IAEA,OAAOC,GAAG;EACZ,CAAC;EAED,OAAOd,KAAK;AACd,CAAC;AAED,MAAMmB,QAAQ,GAAGA,CACfC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACP2B,YAAY,EACZC,UAAU,EACVC,MAAM,KACH;EACH,MAAMC,SAAS,GAAG9B,OAAO,CAAC+B,YAAY,EAAE;EACxC,MAAMC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;EAE1C,MAAM9B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;EAE9C,MAAM;IACJzB,iBAAiB;IACjBiC,oBAAoB;IACpBC,kBAAkB;IAClBC,sBAAsB;IACtBC,2BAA2B;IAC3BC,QAAQ;IACRC,QAAQ;IACRrC;EACF,CAAC,GAAGwB,QAAQ;EAEZvB,KAAK,CAACqC,mBAAmB,GAAG,MAAM;IAChC,OAAO,CAACb,YAAY,IAAI,CACtB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,CACrB,CAACc,QAAQ,CAAClB,IAAI,IAAIA,IAAI,CAACmB,IAAI,CAAC;EAC/B,CAAC;EAEDvC,KAAK,CAACwC,iBAAiB,GAAG,MAAM;IAC9B,OAAOhB,YAAY,IAAIxB,KAAK,CAACyC,OAAO,CAAC,CACnC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CACzC,CAAC;EACJ,CAAC;EAEDzC,KAAK,CAAC0C,SAAS,GAAG,CAACC,QAAQ,EAAEC,UAAU,KAAK;IAC1C,OAAO,IAAAC,wBAAgB,EAACD,UAAU,GAAGrD,WAAW,CAACoD,QAAQ,CAAC,GAAGA,QAAQ,CAAC;EACxE,CAAC;EAED3C,KAAK,CAAC8C,WAAW,GAAG,CAACC,GAAG,EAAEtC,GAAG,EAAEuC,OAAO,EAAEJ,UAAU,EAAEK,IAAI,KAAK;IAC3D9C,MAAM,CAAC4C,GAAG,EAAEC,OAAO,GAAIE,KAAK,IAAK;MAC/BF,OAAO,EAAE;MACT,MAAM/B,WAAW,GAAGjB,KAAK,CAAC0C,SAAS,CAACrB,KAAK,EAAEuB,UAAU,CAAC;MAEtD,IAAI,CAAC3B,WAAW,EAAE;QAChB,MAAMkC,IAAI,GAAGtB,UAAU,CAACuB,OAAO,EAAE;QACjC,MAAMC,gBAAgB,GAAGF,IAAI,CAACG,KAAK,CACjC,CAAC,EAAEhC,SAAS,CAACiC,KAAK,CAAC,CAAC,CAAC,CACtB,CAACC,MAAM,CAAC,YAAY,CAAC;QACtB,IAAIH,gBAAgB,GAAG,CAAC,CAAC,EAAE;UACzB,OAAOH,KAAK,CAACO,WAAW,CAAC,CACvBJ,gBAAgB,EAAE/B,SAAS,CAACiC,KAAK,CAAC,CAAC,CAAC,CACrC,CAAC;QACJ;QAEA,OAAOL,KAAK,CAACO,WAAW,CACrB,KAAK,CAAEC,IAAI,CAACP,IAAI,CAACQ,MAAM,CAACrC,SAAS,CAACiC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3C,CACEjC,SAAS,CAACiC,KAAK,CAAC,CAAC,CAAC,EAAEjC,SAAS,CAACiC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAC3C,GACDjC,SAAS,CAACiC,KAAK,CAClB;MACH;MAEA,OAAOL,KAAK,CAACU,WAAW,CAACtC,SAAS,EAAEL,WAAW,CAAC;IAClD,CAAC,GAAG,IAAI,EAAER,GAAG,EAAEwC,IAAI,CAAC;EACtB,CAAC;EAEDjD,KAAK,CAAC6D,kBAAkB,GAAG,CAACC,GAAG,EAAEC,aAAa,KAAK;IACjD,OAAOrD,mBAAU,CAACmD,kBAAkB,CAACC,GAAG,EAAEC,aAAa,CAAC;EAC1D,CAAC;EAED/D,KAAK,CAACgE,iBAAiB,GAAG,CAACC,EAAE,EAAEC,WAAW,KAAK;IAC7C,MAAMC,YAAY,GAAG,EAAE;IACvBF,EAAE,CAACG,MAAM,CAACC,IAAI,CAAC,CAAC;MACdC,MAAM,EAAE;QACNC,GAAG;QACHC,OAAO;QACPC,aAAa;QACbhE,GAAG;QACHiE,OAAO;QACPC,IAAI;QACJpC,IAAI;QACJqC;MACF;IACF,CAAC,KAAK;MACJ,MAAMC,IAAI,GAAG,CACXpE,GAAG,IAAIiE,OAAO,IACd,CAACjE,GAAG,IAAI,CAACkE,IAAI,IAAI,CAACpC,IAAI,IAAIkC,aAAa,IAAI;;MAE7C;MAAA,EACEnB,KAAK,CAAC,CAAC,CAAC,IACPsB,WAAW,IAAI,EAAE,CAAC,IAAIJ,OAAO,IAAI,EAAE,CAAC;MAEvC,IAAID,GAAG,EAAE;QACP,IAAIM,IAAI,EAAE;UACRV,YAAY,CAACW,IAAI,CAACD,IAAI,CAAC;QACzB;QAEA,OAAO,IAAI;MACb;MAEAV,YAAY,CAACW,IAAI,CAACD,IAAI,CAAC;MAEvB,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAOX,WAAW,GAAGC,YAAY,GAAGA,YAAY,CAACY,IAAI,CAAC,IAAI,CAAC;EAC7D,CAAC;EAED/E,KAAK,CAACgF,iBAAiB,GAAG,CAACf,EAAE,EAAEgB,OAAO,EAAEC,MAAM,KAAK;IACjD,IAAIC,QAAQ,GAAG,CAAC;IAChBlB,EAAE,CAACG,MAAM,CAACC,IAAI,CAAC,CAAC;MACdC,MAAM,EAAE;QACNM;MACF;IACF,CAAC,EAAEQ,GAAG,KAAK;MACT,IAAIR,WAAW,IAAIK,OAAO,CAACvB,IAAI,CAACkB,WAAW,CAAC,EAAE;QAC5CX,EAAE,CAACG,MAAM,CAACgB,GAAG,CAAC,CAACd,MAAM,CAACM,WAAW,GAAGM,MAAM,CAACN,WAAW,CAAC;QACvDO,QAAQ,GAAGC,GAAG;QACd,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAOD,QAAQ;EACjB,CAAC;EAEDnF,KAAK,CAACqF,cAAc,GAAG,MAAM;IAC3B,MAAMlB,YAAY,GAAG,EAAE;IACvB,IAAImB,mBAAmB,GAAG,CAAC;IAC3BjE,KAAK,CAAC+C,MAAM,CAACC,IAAI,CAAC,CAAC;MACjBC,MAAM,EAAE;QACNM,WAAW;QACXnE,GAAG;QACH8D;MACF;IACF,CAAC,EAAEa,GAAG,KAAK;MACT,IAAIA,GAAG,KAAK3E,GAAG,IAAI8D,GAAG,CAAC,EAAE;QACvBe,mBAAmB,GAAGF,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC3E,GAAG,IAAImE,WAAW,EAAE;UACvBT,YAAY,CAACW,IAAI,CAACF,WAAW,CAAC;QAChC;QAEA,OAAO,IAAI;MACb;MAEA,IAAIQ,GAAG,IAAIR,WAAW,EAAE;QACtBT,YAAY,CAACW,IAAI,CAACF,WAAW,KAAKT,YAAY,CAACoB,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;MACrE;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAO;MACLX,WAAW,EAAET,YAAY,CAACY,IAAI,CAAC,IAAI,CAAC;MACpCZ,YAAY;MACZmB;IACF,CAAC;EACH,CAAC;EAEDtF,KAAK,CAACwF,mBAAmB,GAAG,CAACP,OAAO,EAAEC,MAAM,KAAK;IAC/C,IAAIC,QAAQ,GAAG,CAAC;IAChB9D,KAAK,CAAC+C,MAAM,CAACC,IAAI,CAAC,CAAC;MACjBC,MAAM,EAAE;QACNM,WAAW;QACXnE,GAAG;QACH8D;MACF;IACF,CAAC,EAAEa,GAAG,KAAK;MACT;MACA,IAAIA,GAAG,KAAK3E,GAAG,IAAI8D,GAAG,CAAC,EAAE;QACvB,OAAO,IAAI;MACb;MAEA,IAAIK,WAAW,IAAIK,OAAO,CAACvB,IAAI,CAACkB,WAAW,CAAC,EAAE;QAC5CvD,KAAK,CAAC+C,MAAM,CAACgB,GAAG,CAAC,CAACd,MAAM,CAACM,WAAW,GAAGM,MAAM,CAACN,WAAW,CAAC;QAC1DO,QAAQ,GAAGC,GAAG;QACd,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAOD,QAAQ;EACjB,CAAC;EAEDnF,KAAK,CAACyF,SAAS,GAAG,CAAChF,GAAG,EAAE,GAAG6D,MAAM,KAAK;IACpC,KAAK,MAAM,CACTc,GAAG,EACHM,GAAG,CACJ,IAAIjF,GAAG,CAAC2D,MAAM,CAACuB,OAAO,EAAE,EAAE;MACzBD,GAAG,CAACpB,MAAM,GAAG;QACX,GAAGoB,GAAG,CAACpB,MAAM;QACb,GAAGA,MAAM,CAACc,GAAG;MACf,CAAC;IACH;EACF,CAAC;EAEDpF,KAAK,CAAC4F,MAAM,GAAG,CAACnF,GAAG,EAAE6D,MAAM,KAAK;IAC9B7D,GAAG,CAAC2D,MAAM,GAAG,CACX;MACA;MACEyB,MAAM,EAAEpF,GAAG,CAACF,IAAI;MAChB+D,MAAM,EAAE9E,UAAU,CAAC;QACjBsG,SAAS,EAAE,GAAG;QACdrB,aAAa,EAAE,GAAG;QAClBpE,KAAK,EAAEqB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAE,GAAG,GAAGA,GAAG,CAACA,GAAG;QAClB,GAAG6D;MACL,CAAC;IACH,CAAC,CACF;EACH,CAAC;EAEDtE,KAAK,CAAC+F,SAAS,GAAG,CAACC,QAAQ,EAAE;IAC3BC,gBAAgB,GAAG,KAAK;IACxBC,eAAe,GAAG;EACpB,CAAC,GAAG,CAAC,CAAC,KAAK;IACT,MAAM;MACJ9B,MAAM,EAAE+B;IACV,CAAC,GAAG9E,KAAK,CAAC+E,IAAI,CAACJ,QAAQ,CAAC;IACxB,IAAIK,SAAS;IACb,MAAMC,WAAW,GAAGjF,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAC,CAACyB,MAAM;IAC1CM,SAAS,CAAC9B,IAAI,CAAC,CAAC;MACdwB;IACF,CAAC,EAAEU,MAAM,KAAK;MACZ,MAAMC,WAAW,GAAGnF,KAAK,CAAC+C,MAAM,CAACqC,SAAS,CAAC,CAAC;QAC1CZ,MAAM,EAAEa;MACV,CAAC,KAAK;QACJ,OAAOb,MAAM,KAAKa,SAAS;MAC7B,CAAC,CAAC;MACF;MACA,IAAIF,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,IAAIG,WAAW,GAAG,CAAC;QACnBR,SAAS,CAAC7C,KAAK,CAACiD,MAAM,GAAG,CAAC,CAAC,CAAClC,IAAI,CAAC,CAAC;UAChCC,MAAM,EAAE;YACN7D,GAAG;YACH8D,GAAG,EAAEqC;UACP;QACF,CAAC,KAAK;UACJ,IAAI,CAACnG,GAAG,IAAI,CAACmG,MAAM,EAAE;YACnBD,WAAW,EAAE;YAEb,OAAO,KAAK;UACd;UAEA,OAAO,IAAI;QACb,CAAC,CAAC;QAEF,MAAME,SAAS,GAAGL,WAAW,GAAGN,eAAe;QAE/C,MAAM;UACJJ,SAAS;UACTvB;QACF,CAAC,GAAGlD,KAAK,CAAC+C,MAAM,CAACyC,SAAS,CAAC,CAACvC,MAAM;;QAElC;QACA,IAAI,CAAC2B,gBAAgB,KAAK1B,GAAG,IAAIuB,SAAS,KAAK,KAAK,CAAC,EAAE;UACrD,MAAM;YACJxB;UACF,CAAC,GAAGjD,KAAK,CAAC+C,MAAM,CAACyC,SAAS,CAAC;UAC3B,KAAK,MAAMC,IAAI,IAAI,CACjB,KAAK,EACL,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,CACd,EAAE;YACDxC,MAAM,CAACwC,IAAI,CAAC,GAAG,EAAE;UACnB;QACF,CAAC,MAAM;UACLzF,KAAK,CAAC+C,MAAM,CAAC2C,MAAM,CAACF,SAAS,EAAEF,WAAW,GAAGT,eAAe,CAAC;QAC/D;QAEAC,SAAS,CAACY,MAAM,CAACR,MAAM,GAAGL,eAAe,EAAES,WAAW,GAAGT,eAAe,CAAC;QACzEG,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;;MAEA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CACTpB,GAAG,EACHM,GAAG,CACJ,IAAIrE,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAAC+C,SAAS,CAAC,CAACV,OAAO,EAAE,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGS,WAAW,GAAGD,SAAS,GAAGjB,GAAG;IAC5C;;IAEA;IACA;IACA;EACF,CAAC;;EAEDpF,KAAK,CAACgH,MAAM,GAAG,CACbC,aAAa,EACbpB,MAAM,GAAG,CAAC;IAAA,IAAAqB,WAAA,EAAAC,mBAAA;IAAA,QAAAD,WAAA,GAAA7F,KAAK,CAAC+E,IAAI,CAAC/E,KAAK,CAAC+E,IAAI,CAACb,MAAM,GAAG,CAAC,CAAC,cAAA2B,WAAA,wBAAAC,mBAAA,GAAjCD,WAAA,CAAmC9C,MAAM,CAAC,CAAC,CAAC,cAAA+C,mBAAA,uBAA5CA,mBAAA,CAA8CtB,MAAM;EAAA,QAAIxE,KAAK,CAAC+C,MAAM,CAACqC,SAAS,CAAC,CAAC;IACxFnC,MAAM,EAAE;MACN7D;IACF;EACF,CAAC,KAAK;IACJ,OAAOA,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACX6D,MAAM,GAAG,CAAC,CAAC,KACR;IACHjD,KAAK,CAAC+C,MAAM,CAAC2C,MAAM,CAAClB,MAAM,EAAE,CAAC,EAAE;MAC7BA,MAAM;MACNzB,MAAM,EAAE,EAAE;MACVE,MAAM,EAAE9E,UAAU,CAAC;QACjBsG,SAAS,EAAE,GAAG;QACdrB,aAAa,EAAE,GAAG;QAClBpE,KAAK,EAAEqB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAG,IAAGwG,aAAc,EAAC;QACxB,GAAG3C;MACL,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAMoB,GAAG,IAAIrE,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAACuC,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;EACF,CAAC;EAED7F,KAAK,CAACoH,YAAY,GAAG,MAAM;IACzB,IAAIC,SAAS;IACb,KAAK,MAAM;MACTxB,MAAM;MACNvB,MAAM,EAAE;QACN7D;MACF;IACF,CAAC,IAAIY,KAAK,CAAC+C,MAAM,EAAE;MACjB,IAAI3D,GAAG,EAAE;QACP4G,SAAS,GAAGxB,MAAM;QAClB;MACF;IACF;IAEA,OAAOwB,SAAS;EAClB,CAAC;EAEDrH,KAAK,CAACR,UAAU,GAAGA,UAAU;EAE7BQ,KAAK,CAACsH,WAAW,GAAIhD,MAAM,IAAK;IAC9B,KAAK,MAAMiD,IAAI,IAAI,CACjB,OAAO,EACP,eAAe,EACf,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,aAAa,EACb,KAAK,EACL,SAAS,CACV,EAAE;MACDjD,MAAM,CAACiD,IAAI,CAAC,GAAG,EAAE;IACnB;EACF,CAAC;EAEDvH,KAAK,CAACwH,OAAO,GAAG,CAAChB,WAAW,EAAElC,MAAM,KAAK;IAAA,IAAAmD,aAAA;IACvC,MAAM5B,MAAM,GAAG,CAAC,EAAA4B,aAAA,GAAApG,KAAK,CAAC+C,MAAM,CAACoC,WAAW,GAAG,CAAC,CAAC,cAAAiB,aAAA,uBAA7BA,aAAA,CAA+B5B,MAAM,KAAI,CAAC,IAAI,CAAC;IAC/DxE,KAAK,CAAC+C,MAAM,CAAC2C,MAAM,CAACP,WAAW,EAAE,CAAC,EAAE;MAClCX,MAAM;MACNzB,MAAM,EAAE,EAAE;MACVE,MAAM,EAAE9E,UAAU,CAAC8E,MAAM;IAC3B,CAAC,CAAC;IAEF,KAAK,MAAMoB,GAAG,IAAIrE,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAACuC,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;IACA;IACA;EACF,CAAC;;EAED7F,KAAK,CAAC0H,QAAQ,GAAG,CAAC1B,QAAQ,EAAEE,eAAe,EAAEyB,QAAQ,KAAK;IACxD,MAAM;MACJvD,MAAM,EAAE+B;IACV,CAAC,GAAG9E,KAAK,CAAC+E,IAAI,CAACJ,QAAQ,CAAC;IACxB,IAAIK,SAAS;IACb,MAAMC,WAAW,GAAGjF,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAC,CAACyB,MAAM;IAC1CM,SAAS,CAAC9B,IAAI,CAAC,CAAC;MACdwB;IACF,CAAC,KAAK;MACJ,MAAM+B,QAAQ,GAAGA,CAAA,KAAM;QACrB,OAAO;UACL/B,MAAM;UACNzB,MAAM,EAAE,EAAE;UACVE,MAAM,EAAE9E,UAAU,CAAC;YACjBsG,SAAS,EAAE,GAAG;YACdzF,KAAK,EAAEqB,MAAM,GAAG;UAClB,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAMmG,SAAS,GAAGA,CAAA,KAAM;QACtB,OAAOC,KAAK,CAACC,IAAI,CAAC;UAChBxC,MAAM,EAAEoC;QACV,CAAC,EAAEC,QAAQ,CAAC;MACd,CAAC;MAED,MAAMpB,WAAW,GAAGnF,KAAK,CAAC+C,MAAM,CAACqC,SAAS,CAAC,CAAC;QAC1CZ,MAAM,EAAEa,SAAS;QACjBpC,MAAM,EAAE;UACNC;QACF;MACF,CAAC,KAAK;QACJ,OAAOsB,MAAM,KAAKa,SAAS,IAAI,CAACnC,GAAG;MACrC,CAAC,CAAC;MACF;MACA,IAAIiC,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,MAAMwB,KAAK,GAAGH,SAAS,EAAE;QACzBxG,KAAK,CAAC+C,MAAM,CAAC2C,MAAM,CAACP,WAAW,GAAGN,eAAe,EAAE,CAAC,EAAE,GAAG8B,KAAK,CAAC;;QAE/D;QACA3B,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;;MAEA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CACTpB,GAAG,EACHM,GAAG,CACJ,IAAIrE,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAAC+C,SAAS,CAAC,CAACV,OAAO,EAAE,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGS,WAAW,GAAGD,SAAS,GAAGjB,GAAG;IAC5C;EACF,CAAC;EAEDpF,KAAK,CAACiI,aAAa,GAAG,MAAM;IAC1B,MAAM;MACJ7D,MAAM,EAAE,CACN;QACEE;MACF,CAAC;IAEL,CAAC,GAAGjD,KAAK;IACT,MAAM;MACJoD,aAAa;MACbG,WAAW;MACXJ,OAAO;MACP/D,GAAG;MACHkE,IAAI;MACJpC;IACF,CAAC,GAAG+B,MAAM;IAEV,IAAI;MACFA,MAAM,EAAE;QACN4D,QAAQ;QACRxD,OAAO;QACPyD;MACF;IACF,CAAC,GAAG9G,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAC;;IAEnB;IACA,IAAI,CAACQ,WAAW,EAAE;MAChB,IAAIsD,QAAQ,EAAE;QACZA,QAAQ,GAAG,EAAE;MACf,CAAC,MAAM,IAAIC,QAAQ,EAAE;QACnBA,QAAQ,GAAG,EAAE;QACf;MACA,CAAC,MAAM,yIAA0I,IAAIzD,OAAO,EAAE;UAC5JA,OAAO,GAAG,EAAE;QACd;IACF;IAEA1E,KAAK,CAACsH,WAAW,CAAChD,MAAM,CAAC;IAEzBtE,KAAK,CAACwH,OAAO,CAAC,CAAC,EAAE;MACf1B,SAAS,EAAE,GAAG;MAEd;MACA;MACAlB,WAAW,EAAEA,WAAW,CAACwD,OAAO,EAAE;MAClCzD,IAAI;MACJF,aAAa;MACbyD,QAAQ;MACRxD,OAAO;MACPyD,QAAQ;MACR9H,KAAK,EAAEqB,MAAM,GAAG,GAAG;MACnBjB,GAAG;MACH8B;IACF,CAAC,CAAC;IACFvC,KAAK,CAACwH,OAAO,CAAC,CAAC,EAAE;MACfjD,GAAG,EAAE,IAAI;MACTC,OAAO;MACPnE,KAAK,EAAEqB,MAAM,GAAG;IAClB,CAAC,CAAC;EACJ,CAAC;EAED1B,KAAK,CAACqI,YAAY,GAAIC,MAAM,IAAK;IAC/B,OAAO5H,mBAAU,CAAC2H,YAAY,CAACC,MAAM,CAAC;EACxC,CAAC;EAEDtI,KAAK,CAACuI,yBAAyB,GAAIC,0BAA0B,IAAK;IAChE,OAAO9H,mBAAU,CAAC6H,yBAAyB,CAACnH,IAAI,EAAEoH,0BAA0B,CAAC;EAC/E,CAAC;EAEDxI,KAAK,CAACyI,SAAS,GAAG,MAAM;IACtB,OAAO/H,mBAAU,CAAC+H,SAAS,CAACrH,IAAI,CAAC;EACnC,CAAC;EAEDpB,KAAK,CAAC0I,WAAW,GAAG,MAAM;IACxB,OAAOtH,IAAI,KACTA,IAAI,CAACuH,SAAS,IACdvH,IAAI,CAACmB,IAAI,KAAK,kBAAkB,IAAInB,IAAI,CAACwH,KAAK,CAACD,SAAS,IACxD,CACE,wBAAwB,EAAE,0BAA0B,CACrD,CAACrG,QAAQ,CAAClB,IAAI,CAACmB,IAAI,CAAC,IACnBnB,IAAI,CAACyH,WAAW,CAACF,SAAS,CAC7B;EACH,CAAC;EAED3I,KAAK,CAAC8I,aAAa,GAAG,MAAM;IAC1B,OAAOpI,mBAAU,CAACoI,aAAa,CAAC1H,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAAC+I,gBAAgB,GAAIlI,OAAO,IAAK;IACpC,MAAM8D,IAAI,GAAG3E,KAAK,CAACe,mBAAmB,CAAC;MACrCF;IACF,CAAC,CAAC;IACF,IAAI,CAAC8D,IAAI,EAAE;MACT,OAAO,KAAK;IACd;IAEA,OAAOjE,mBAAU,CAACqI,gBAAgB,CAAC1H,KAAK,EAAEsD,IAAI,CAAC;EACjD,CAAC;EAED3E,KAAK,CAACe,mBAAmB,GAAG,CAAC;IAC3BF,OAAO;IACPmI,uBAAuB,GAAG,KAAK;IAC/BC,iBAAiB,GAAG,KAAK;IACzBC,cAAc,GAAI,qBAAoBrI,OAAQ;EAChD,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGJ,mBAAU,CAACK,mBAAmB,CAAClB,OAAO,EAAEE,IAAI,EAAEc,OAAO,EAAEf,iBAAiB,CAAC;IACrF,MAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ;IAC/C,IAAId,KAAK,CAACmJ,MAAM,CAACtI,OAAO,CAAC,KAAKC,GAAG,KAAK,KAAK,IAAIE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAW,CAAC,EAAE;MAC5E,IAAI+H,uBAAuB,EAAE;QAC3B,OAAO;UACL9H,OAAO,EAAE,IAAI;UACbL;QACF,CAAC;MACH;MAEA,MAAMX,OAAO,GAAGc,QAAQ,IAAIF,GAAG,CAACZ,OAAO,IAAIgJ,cAAc;MACzD/I,MAAM,CAACD,OAAO,EAAE,IAAI,EAAEF,KAAK,CAACoJ,OAAO,CAACvI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;MAEhD,OAAO,KAAK;IACd;IAEA,OAAOG,QAAQ,IAAI,CAACiI,iBAAiB,GAAGnI,GAAG,CAACG,WAAW,GAAGH,GAAG;EAC/D,CAAC;EAEDd,KAAK,CAACqJ,UAAU,GAAG,CAAC1E,IAAI,EAAE2E,WAAW,KAAK;IACxC,OAAO5I,mBAAU,CAAC2I,UAAU,CAACxJ,OAAO,EAAEE,IAAI,EAAE4E,IAAI,EAAE2E,WAAW,CAAC;EAChE,CAAC;EAEDtJ,KAAK,CAACyC,OAAO,GAAI8G,KAAK,IAAK;IACzB,OAAO7I,mBAAU,CAAC+B,OAAO,CAACpB,KAAK,EAAEkI,KAAK,CAAC;EACzC,CAAC;EAEDvJ,KAAK,CAACmJ,MAAM,GAAIxE,IAAI,IAAK;IACvB,OAAOjE,mBAAU,CAACyI,MAAM,CAAC9H,KAAK,EAAEsD,IAAI,CAAC;EACvC,CAAC;EAED3E,KAAK,CAACwJ,YAAY,GAAI7E,IAAI,IAAK;IAC7B,OAAOjE,mBAAU,CAAC8I,YAAY,CAAC7E,IAAI,CAAC;EACtC,CAAC;EAED3E,KAAK,CAACyJ,qBAAqB,GAAI9E,IAAI,IAAK;IACtC,OAAOjE,mBAAU,CAAC+I,qBAAqB,CAAC9E,IAAI,CAAC;EAC/C,CAAC;EAED3E,KAAK,CAAC0J,SAAS,GAAG,MAAM;IAAA,IAAAC,iBAAA;IACtB,IACE3H,kBAAkB,KAAK,KAAK,KACzBhC,KAAK,CAACmJ,MAAM,CAAC,QAAQ,CAAC,IAAInJ,KAAK,CAAC4J,WAAW,CAAC,QAAQ,CAAC,CAAC,IACzD7H,oBAAoB,KAAK,KAAK,KAC3B/B,KAAK,CAACmJ,MAAM,CAAC,UAAU,CAAC,IAAInJ,KAAK,CAAC4J,WAAW,CAAC,UAAU,CAAC,CAAC,IAC7D3H,sBAAsB,KAAK,KAAK,KAC7BjC,KAAK,CAACmJ,MAAM,CAAC,YAAY,CAAC,IAAInJ,KAAK,CAAC4J,WAAW,CAAC,YAAY,CAAC,CAAC,IAEjE1H,2BAA2B,KACxBlC,KAAK,CAACyC,OAAO,CAAC,CACb,UAAU,EAAE,SAAS,CACtB,CAAC,IACAzC,KAAK,CAAC4J,WAAW,CAAC,UAAU,CAAC,IAC3B5J,KAAK,CAAC4J,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IAEA,IAAIlJ,mBAAU,CAACmJ,mBAAmB,CAChCxI,KAAK,EAAED,IAAI,EAAEvB,OAAO,EAAE4B,UAAU,CAACqI,IAAI,CAACC,MAAM,CAC7C,EAAE;MACD,OAAO,IAAI;IACb;IAEA,MAAMC,UAAU,GAAG,EAAAL,iBAAA,GAAA9J,OAAO,CAACoK,OAAO,CAAC,CAAC,CAAC,cAAAN,iBAAA,uBAAlBA,iBAAA,CAAoBK,UAAU,KAAI,CACnD,YAAY,EACZ,IAAGjK,IAAI,KAAK,SAAS,GAAG,EAAE,GAAG,CAC3B,YAAY,CACb,EACF;IACD,IAAIiK,UAAU,CAACzE,MAAM,IAAIvF,KAAK,CAACkK,cAAc,CAACF,UAAU,CAAC,CAACzE,MAAM,EAAE;MAChE,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC;EAED,KAAK,MAAM4E,MAAM,IAAI,CACnB,0BAA0B,EAC1B,0BAA0B,CAC3B,EAAE;IACDnK,KAAK,CAACmK,MAAM,CAAC,GAAG,CAACtJ,OAAO,EAAEuJ,aAAa,KAAK;MAC1C,MAAMC,MAAM,GAAG3J,mBAAU,CAACyJ,MAAM,CAAC,CAACtJ,OAAO,CAAC;MAC1C,IAAIwJ,MAAM,EAAE;QACV,OAAO,IAAI;MACb;MAEA,IAAI,CAACD,aAAa,EAAE;QAClB,OAAO,KAAK;MACd;MAEA,MAAME,WAAW,GAAGF,aAAa,CAAC/F,IAAI,CAAEkG,YAAY,IAAK;QACvD,OAAO7J,mBAAU,CAACyJ,MAAM,CAAC,CAACtJ,OAAO,EAAE0J,YAAY,CAAC;MAClD,CAAC,CAAC;MAEF,OAAOD,WAAW,GAAG;QACnBE,SAAS,EAAE;MACb,CAAC,GAAG,KAAK;IACX,CAAC;EACH;EAEA,KAAK,MAAML,MAAM,IAAI,CACnB,yBAAyB,EACzB,yBAAyB,EACzB,kCAAkC,CACnC,EAAE;IACDnK,KAAK,CAACmK,MAAM,CAAC,GAAG,CAACtJ,OAAO,EAAEuJ,aAAa,KAAK;MAC1C,MAAMC,MAAM,GAAG3J,mBAAU,CAACyJ,MAAM,CAAC,CAACtJ,OAAO,CAAC;MAC1C,IAAI,CAACwJ,MAAM,EAAE;QACX,OAAO,KAAK;MACd;;MAEA;;MAEA,MAAMC,WAAW,GAAGF,aAAa,CAACK,KAAK,CAAEF,YAAY,IAAK;QACxD,OAAO7J,mBAAU,CAACyJ,MAAM,CAAC,CAACtJ,OAAO,EAAE0J,YAAY,CAAC;MAClD,CAAC,CAAC;MAEF,OAAOD,WAAW,GAAG,IAAI,GAAG;QAC1BE,SAAS,EAAE;MACb,CAAC;IACH,CAAC;EACH;EAEA,KAAK,MAAML,MAAM,IAAI,CACnB,uBAAuB,EACvB,sBAAsB,CACvB,EAAE;IACDnK,KAAK,CAACmK,MAAM,CAAC,GAAItJ,OAAO,IAAK;MAC3B,OAAOH,mBAAU,CAACyJ,MAAM,CAAC,CAACtJ,OAAO,CAAC;IACpC,CAAC;EACH;EAEAb,KAAK,CAAC0K,sBAAsB,GAAIC,GAAG,IAAK;IACtC,OAAOjK,mBAAU,CAACgK,sBAAsB,CAACC,GAAG,EAAEpJ,QAAQ,CAACqJ,cAAc,CAAC;EACxE,CAAC;EAED5K,KAAK,CAAC6K,qBAAqB,GAAIpK,GAAG,IAAK;IACrC,OAAOC,mBAAU,CAACmK,qBAAqB,CAACpK,GAAG,EAAEc,QAAQ,CAACxB,IAAI,CAAC;EAC7D,CAAC;EAEDC,KAAK,CAAC8K,yCAAyC,GAAG,CAACC,kBAAkB,EAAEC,WAAW,KAAK;IACrF,OAAOtK,mBAAU,CAACoK,yCAAyC,CAAC1J,IAAI,EAAE2J,kBAAkB,EAAEC,WAAW,CAAC;EACpG,CAAC;EAEDhL,KAAK,CAACiL,aAAa,GAAG,MAAM;IAC1B,IAAI,CACF,wBAAwB,EAAE,0BAA0B,CACrD,CAAC3I,QAAQ,CAAClB,IAAI,CAACmB,IAAI,CAAC,EAAE;MACrB,OAAO7B,mBAAU,CAACuK,aAAa,CAAC7J,IAAI,CAACyH,WAAW,CAAC;IACnD;IAEA,OAAOnI,mBAAU,CAACuK,aAAa,CAAC7J,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAACkL,mBAAmB,GAAG,MAAM;IAChC,OAAOxK,mBAAU,CAACuK,aAAa,CAAC7J,IAAI,EAAE,IAAI,CAAC;EAC7C,CAAC;EAEDpB,KAAK,CAACmL,aAAa,GAAG,MAAM;IAC1B,OAAOzK,mBAAU,CAACyK,aAAa,CAAC/J,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAACoL,OAAO,GAAG,MAAM;IACpB,OAAOhK,IAAI,CAACiK,KAAK;EACnB,CAAC;EAEDrL,KAAK,CAACoJ,OAAO,GAAIvI,OAAO,IAAK;IAC3B,OAAOb,KAAK,CAACsL,UAAU,CAAExE,IAAI,IAAK;MAChC,OAAOA,IAAI,CAACrG,GAAG,KAAKI,OAAO;IAC7B,CAAC,CAAC;EACJ,CAAC;EAEDb,KAAK,CAACkK,cAAc,GAAIqB,OAAO,IAAK;IAClC,OAAOvL,KAAK,CAACsL,UAAU,CAAE7K,GAAG,IAAK;MAC/B,OAAO8K,OAAO,CAACjJ,QAAQ,CAAC7B,GAAG,CAACA,GAAG,CAAC;IAClC,CAAC,CAAC;EACJ,CAAC;EAEDT,KAAK,CAACsL,UAAU,GAAIE,MAAM,IAAK;IAC7B,OAAO9K,mBAAU,CAAC4K,UAAU,CAACjK,KAAK,CAAC+E,IAAI,EAAEoF,MAAM,CAAC;EAClD,CAAC;EAEDxL,KAAK,CAACyL,aAAa,GAAIrF,IAAI,IAAK;IAC9B,OAAO1F,mBAAU,CAAC+K,aAAa,CAAC5L,OAAO,EAAEE,IAAI,EAAEqG,IAAI,EAAEtG,iBAAiB,CAAC;EACzE,CAAC;EAEDE,KAAK,CAAC0L,YAAY,GAAI7K,OAAO,IAAK;IAChC,MAAM;MACJuF;IACF,CAAC,GAAGvG,OAAO,CAACoK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO0B,OAAO,CAACvF,IAAI,IAAIA,IAAI,CAAC9D,QAAQ,CAACzB,OAAO,CAAC,CAAC;EAChD,CAAC;EAEDb,KAAK,CAAC4L,YAAY,GAAG,MAAM;IACzB,OAAO,CACL,GAAGjK,SAAS,EAAEP,IAAI,CACnB,CAACyK,OAAO,EAAE,CAACC,IAAI,CAAEC,MAAM,IAAK;MAC3B,OAAOA,MAAM,IAAI,CACf,kBAAkB,EAAE,iBAAiB,CACtC,CAACzJ,QAAQ,CAACyJ,MAAM,CAACxJ,IAAI,CAAC;IACzB,CAAC,CAAC,IAAI,IAAI;EACZ,CAAC;EAEDvC,KAAK,CAACgM,aAAa,GAAG,MAAM;IAC1B,MAAMC,SAAS,GAAGjM,KAAK,CAAC4L,YAAY,EAAE;IAEtC,IAAI,CAACK,SAAS,EAAE;MACd,OAAO,IAAI;IACb;IAEA,MAAMC,cAAc,GAAG,IAAAC,6BAAe,EAACtK,UAAU,EAAEoK,SAAS,EAAE;MAC5D9J,QAAQ;MACRC;IACF,CAAC,CAAC;IAEF,IAAI8J,cAAc,EAAE;MAClB,OAAO,IAAAE,0BAAY,EAACF,cAAc,EAAE,EAAE,CAAC;IACzC;IAEA,OAAO,IAAI;EACb,CAAC;EAEDlM,KAAK,CAAC4J,WAAW,GAAI/I,OAAO,IAAK;IAC/B,MAAMwL,UAAU,GAAGrM,KAAK,CAACgM,aAAa,EAAE;IAExC,OAAOL,OAAO,CAACU,UAAU,CAAC,IAAI3L,mBAAU,CAACyI,MAAM,CAACkD,UAAU,EAAExL,OAAO,CAAC;EACtE,CAAC;EAEDb,KAAK,CAACsM,mBAAmB,GAAG,CAACzL,OAAO,EAAE0L,YAAY,EAAEvD,uBAAuB,GAAG,KAAK,KAAK;IACtF,MAAM/B,aAAa,GAAGjH,KAAK,CAACe,mBAAmB,CAAC;MAC9CiI,uBAAuB;MACvBnI;IACF,CAAC,CAAC;IACF,IAAI,CAACoG,aAAa,IAChB+B,uBAAuB,IAAI/B,aAAa,IAAI,OAAOA,aAAa,KAAK,QAAQ,EAC7E;MACA;IACF;IAEA,MAAMuF,iBAAiB,GAAGnL,KAAK,CAAC+E,IAAI,CAACoF,MAAM,CAAC,CAAC;MAC3C/K;IACF,CAAC,KAAK;MACJ,OAAOA,GAAG,KAAKwG,aAAa;IAC9B,CAAC,CAAC;IAEF,KAAK,MAAMwF,gBAAgB,IAAID,iBAAiB,EAAE;MAChDD,YAAY,CAACE,gBAAgB,EAAExF,aAAa,CAAC;IAC/C;EACF,CAAC;EAED,OAAOjH,KAAK;AACd,CAAC;AAED,MAAM0M,WAAW,GAAI7M,OAAO,IAAK;EAAA,IAAA8M,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,uBAAA,EAAAC,uBAAA,EAAAC,uBAAA,EAAAC,uBAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,uBAAA;EAC/B;EACA,MAAMtM,QAAQ,GAAG;IACf;IACAuM,aAAa,EAAEnC,OAAO,EAAAgB,qBAAA,GAAC9M,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAsL,qBAAA,uBAAtBA,qBAAA,CAAwBmB,aAAa,CAAC;IAC7DC,cAAc,EAAEpC,OAAO,EAAAiB,sBAAA,GAAC/M,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAuL,sBAAA,uBAAtBA,sBAAA,CAAwBmB,cAAc,CAAC;IAC/D5L,QAAQ,EAAE6L,MAAM,CAAC,EAAAnB,sBAAA,GAAAhN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAwL,sBAAA,uBAAtBA,sBAAA,CAAwB1K,QAAQ,KAAI,CAAC,CAAC;IACvDC,QAAQ,EAAE4L,MAAM,CAAC,EAAAlB,sBAAA,GAAAjN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAyL,sBAAA,uBAAtBA,sBAAA,CAAwB1K,QAAQ,KAAI,CAAC,CAAC;IAEvD;IACAtC,iBAAiB,EAAE,EAAAiN,sBAAA,GAAAlN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA0L,sBAAA,uBAAtBA,sBAAA,CAAwBjN,iBAAiB,KAAI,CAAC,CAAC;IAElE;IACAmO,cAAc,EAAE,EAAAjB,sBAAA,GAAAnN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA2L,sBAAA,uBAAtBA,sBAAA,CAAwBiB,cAAc,KAAI,CAAC,CAAC;IAE5D;IACArD,cAAc,EAAE,EAAAqC,sBAAA,GAAApN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA4L,sBAAA,uBAAtBA,sBAAA,CAAwBrC,cAAc,KAAI,CAAC,CAAC;IAE5D;IACA;IACA7I,oBAAoB,GAAAmL,sBAAA,GAAErN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA6L,sBAAA,uBAAtBA,sBAAA,CAAwBnL,oBAAoB;IAClEC,kBAAkB,GAAAmL,sBAAA,GAAEtN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA8L,sBAAA,uBAAtBA,sBAAA,CAAwBnL,kBAAkB;IAC9DC,sBAAsB,GAAAmL,uBAAA,GAAEvN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA+L,uBAAA,uBAAtBA,uBAAA,CAAwBnL,sBAAsB;IACtEC,2BAA2B,GAAAmL,uBAAA,GAAExN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAgM,uBAAA,uBAAtBA,uBAAA,CAAwBnL,2BAA2B;IAEhF;IACAgM,iCAAiC,GAAAZ,uBAAA,GAAEzN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAiM,uBAAA,uBAAtBA,uBAAA,CAAwBY,iCAAiC;IAE5F;IACAnO,IAAI,EAAE,EAAAwN,uBAAA,GAAA1N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAkM,uBAAA,uBAAtBA,uBAAA,CAAwBxN,IAAI,MAC/B,CAAAyN,mBAAA,GAAA3N,OAAO,CAACsO,UAAU,cAAAX,mBAAA,eAAlBA,mBAAA,CAAoBlL,QAAQ,CAAC,oBAAoB,CAAC,KAAAmL,qBAAA,GACnD5N,OAAO,CAACuO,eAAe,cAAAX,qBAAA,gBAAAC,sBAAA,GAAvBD,qBAAA,CAAyBY,MAAM,cAAAX,sBAAA,gBAAAC,sBAAA,GAA/BD,sBAAA,CAAiC5D,IAAI,cAAA6D,sBAAA,gBAAAC,sBAAA,GAArCD,sBAAA,CAAuChJ,IAAI,cAAAiJ,sBAAA,eAA3CA,sBAAA,CAA6CtL,QAAQ,CAAC,YAAY,CAAC,GACjE,YAAY,GAAG,OAAO,CAAC;IAE3B;IACAgM,QAAQ,GAAAT,uBAAA,GAAEhO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAwM,uBAAA,uBAAtBA,uBAAA,CAAwBS;EACpC,CAAC;EACD;;EAEA5N,mBAAU,CAAC6N,eAAe,CAAChN,QAAQ,CAACxB,IAAI,CAAC;EACzC,IAAI;IACFW,mBAAU,CAAC8N,oBAAoB,CAACjN,QAAQ,CAACqJ,cAAc,CAAC;EAC1D,CAAC,CAAC,OAAO6D,KAAK,EAAE;IACd5O,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL,OAAO,EAAEuO,KAAK,CAACvO;IACjB,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,OAAOqB,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALAmN,OAAA,CAAAhC,WAAA,GAAAA,WAAA;AAMA,MAAMiC,UAAU,GAAGA,CAAC9O,OAAO,EAAE+O,WAAW,KAAK;EAC3C,MAAMzO,MAAM,GAAGA,CAACD,OAAO,EAAE2O,GAAG,GAAG,IAAI,EAAEC,QAAQ,GAAG,IAAI,EAAE7L,IAAI,GAAG,IAAI,KAAK;IACpE,IAAI7C,GAAG;IAEP,IAAI0O,QAAQ,EAAE;MACZ,IAAI,EAAE,MAAM,IAAIA,QAAQ,CAAC,EAAE;QACzBA,QAAQ,CAACvO,IAAI,GAAGuO,QAAQ,CAAC1K,MAAM,CAAC,CAAC,CAAC,CAACyB,MAAM;MAC3C;MAEA,MAAMkJ,UAAU,GAAGH,WAAW,CAACxO,GAAG,CAACC,KAAK,CAACE,IAAI,GAAGuO,QAAQ,CAACvO,IAAI;MAE7DH,GAAG,GAAG;QACJmE,GAAG,EAAE;UACHjE,MAAM,EAAE,CAAC;UACTC,IAAI,EAAEwO;QACR,CAAC;QACD1O,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAEwO;QACR;MACF,CAAC;;MAED;MACA;MACA,IAAID,QAAQ,CAACxO,MAAM,EAAE;QACnB,MAAM0O,SAAS,GAAGJ,WAAW,CAACxO,GAAG,CAACC,KAAK,CAACC,MAAM,GAAGwO,QAAQ,CAACxO,MAAM;QAEhEF,GAAG,CAACmE,GAAG,CAACjE,MAAM,GAAG0O,SAAS;QAC1B5O,GAAG,CAACC,KAAK,CAACC,MAAM,GAAG0O,SAAS;MAC9B;IACF;IAEAnP,OAAO,CAACM,MAAM,CAAC;MACb8C,IAAI;MACJ4L,GAAG;MACHzO,GAAG;MACHF,OAAO;MACPkB,IAAI,EAAEwN;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOzO,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM8O,OAAO,GAAGA,CACdC,IAAI,EACJxN,MAAM,EAAEL,KAAK,EACbI,UAAU,EAAE5B,OAAO,EAAEmI,KAAK,EAAE1G,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EACrDM,UAAU,EAAEsN,QAAQ,EAAEC,KAAK,EAAE5N,YAAY,KACtC;EACH,MAAMrB,MAAM,GAAGwO,UAAU,CAAC9O,OAAO,EAAEyB,SAAS,CAAC;EAE7C,MAAMtB,KAAK,GAAGmB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACP2B,YAAY,EACZC,UAAU,EACVC,MAAM,CACP;EAED,IACE,CAACD,UAAU,CAAC4N,aAAa,IAAI9N,QAAQ,CAACwM,cAAc,IACpD/N,KAAK,CAACmJ,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IACE,CAAC1H,UAAU,CAAC6N,YAAY,IAAI/N,QAAQ,CAACuM,aAAa,KAEhD9N,KAAK,CAACmJ,MAAM,CAAC,SAAS,CAAC,IACvB9H,KAAK,CAAC+E,IAAI,CACPoF,MAAM,CAAC,CAAC;IACP/K;EACF,CAAC,KAAK;IACJ,OAAOA,GAAG,KAAK,QAAQ;EACzB,CAAC,CAAC,CACD4D,IAAI,CAAC,CAAC;IACLO;EACF,CAAC,KAAK;IACJ,OAAOA,WAAW,KAAK,SAAS;EAClC,CAAC,CAAC,CACL,EACD;IACA;EACF;EAEAuK,QAAQ,CAAC;IACPtP,OAAO;IACPH,WAAW;IACXgC,MAAM;IACNwN,IAAI;IACJ1N,YAAY;IACZH,KAAK;IACLC,SAAS;IACTF,IAAI;IACJjB,MAAM;IACNoB,QAAQ;IACRM,UAAU;IACVuN,KAAK;IACLpP;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAMuP,iBAAiB,GAAG,SAAAA,CAAUvH,KAAK,EAAE1G,SAAS,EAAE;EACpD,MAAMkO,UAAU,GAAGxH,KAAK,CAAC1G,SAAS,CAAClB,GAAG,CAACC,KAAK,CAACE,IAAI,GAAG,CAAC,CAAC;EACtD,MAAMkP,KAAK,GAAGD,UAAU,CAAC7L,MAAM,CAAC,CAAC,CAAC,CAAC+L,MAAM,CAACpO,SAAS,CAAClB,GAAG,CAACC,KAAK,CAACC,MAAM,CAAC;EACrE,MAAMqP,IAAI,GAAG,IAAAvD,0BAAY,EAAC9K,SAAS,EAAE,EAAE,CAAC;EAExC,OAAO,CACLmO,KAAK,EAAEE,IAAI,CACZ;AACH,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAGA,CAACT,QAAQ,EAAE1N,UAAU,EAAE6M,QAAQ,EAAEuB,uBAAuB,KAAK;EACpF,MAAMC,aAAa,GAAG,IAAIC,GAAG,EAAE;EAE/B,IAAI/M,OAAO;EACX,IAAIzB,QAAQ;EACZ,MAAMyO,YAAY,GAAGA,CAACnQ,OAAO,EAAEuB,IAAI,EAAE6O,UAAU,EAAEb,KAAK,EAAEc,QAAQ,KAAK;IACnE,MAAMrO,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;IAC1C,MAAM;MACJkG;IACF,CAAC,GAAGnG,UAAU;IAEd,MAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;IAC9C,KAAK,MAAMD,SAAS,IAAI2O,UAAU,EAAE;MAClC,IAAI,CAAE,YAAY,CAAEvM,IAAI,CAAC7B,UAAU,CAACuB,OAAO,CAAC9B,SAAS,CAAC,CAAC,EAAE;QACvD;MACF;MAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAGkO,iBAAiB,CACnBvH,KAAK,EAAE1G,SAAS,CACjB;MAED,IAAIuO,uBAAuB,EAAE;QAC3B,KAAK,MAAM,CACTzK,GAAG,EACH;UACE+K;QACF,CAAC,CACF,IAAI7B,QAAQ,CAAC3I,OAAO,EAAE,EAAE;UACvB,IAAIwK,OAAO,IAAInN,OAAO,CAACmN,OAAO,EAAE9O,KAAK,CAAC,KAAK,KAAK,EAAE;YAChD;UACF;UAEA4N,OAAO,CACL;YACEkB,OAAO;YACP9J,SAAS,EAAEjB,GAAG;YACdgL,QAAQ,EAAEhP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;UAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV5B,OAAO,EACPmI,KAAK,EACL1G,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACVsN,QAAQ,EACRC,KAAK,EACL,IAAI,CACL;QACH;QAEA;MACF;MAEA,IAAIiB,WAAW;MACf,IAAIhK,SAAS;MACb;MACA,IAAIiI,QAAQ,IAAIA,QAAQ,CAAC7D,KAAK,CAAC,CAAC;QAC9B0F;MACF,CAAC,EAAE/K,GAAG,KAAK;QACTiL,WAAW,GAAGF,OAAO;QACrB9J,SAAS,GAAGjB,GAAG;QAEf,OAAO+K,OAAO,IAAInN,OAAO,CAACmN,OAAO,EAAE9O,KAAK,CAAC,KAAK,KAAK;MACrD,CAAC,CAAC,EAAE;QACF;MACF;MAEA4N,OAAO,CACLoB,WAAW,GAAG;QACZF,OAAO,EAAEE,WAAW;QACpBhK,SAAS;QACT+J,QAAQ,EAAEhP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,GAAG;QACF8D,SAAS;QACT+J,QAAQ,EAAEhP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV5B,OAAO,EACPmI,KAAK,EACL1G,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACVsN,QAAQ,EACRC,KAAK,EACL,IAAI,CACL;IACH;IAEA,IAAIc,QAAQ,IAAIzO,UAAU,CAAC6O,IAAI,EAAE;MAC/B7O,UAAU,CAAC6O,IAAI,CAAC;QACdzQ,OAAO;QACP0B,QAAQ;QACR6N,KAAK;QACLpP;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAED,OAAO;IACLuQ,MAAMA,CAAE1Q,OAAO,EAAE;MACf,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1CP,QAAQ,GAAGmL,WAAW,CAAC7M,OAAO,CAAC;MAC/B,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAI+M,QAAQ,EAAE;QACZtL,OAAO,GAAG,IAAAwN,4BAAc,EAACjP,QAAQ,CAAC;MACpC;MAEA,MAAM6N,KAAK,GAAG,CAAC,CAAC;MAEhB,OAAO;QACL,gBAAgBqB,CAAErP,IAAI,EAAE;UACtB,MAAMwN,WAAW,GAAG,IAAAzC,6BAAe,EAACtK,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;UAC/D,IAAI,CAACE,UAAU,CAACiP,UAAU,IAAIZ,aAAa,CAACa,GAAG,CAAC/B,WAAW,CAAC,EAAE;YAC5D;UACF;UAEA,IAAI,CAACA,WAAW,EAAE;YAChB,IAAInN,UAAU,CAACmP,UAAU,EAAE;cACzBnP,UAAU,CAACmP,UAAU,CAAC;gBACpBxP,IAAI;gBACJgO;cACF,CAAC,CAAC;YACJ;YAEA;UACF;UAEAU,aAAa,CAACe,GAAG,CAACjC,WAAW,CAAC;UAC9BoB,YAAY,CAACnQ,OAAO,EAAEuB,IAAI,EAAE,CAC1BwN,WAAW,CACZ,EAAEQ,KAAK,CAAC;QACX,CAAC;QACD,cAAc0B,CAAA,EAAI;UAChB,MAAMC,WAAW,GAAGlP,UAAU,CAACmP,cAAc,EAAE;UAC/C,MAAMC,cAAc,GAAGF,WAAW,CAACvF,MAAM,CAAEpK,IAAI,IAAK;YAClD,OAAO,CAAC0O,aAAa,CAACa,GAAG,CAACvP,IAAI,CAAC;UACjC,CAAC,CAAC;UAEF4O,YAAY,CAACnQ,OAAO,EAAE,IAAI,EAAEoR,cAAc,EAAE7B,KAAK,EAAE,IAAI,CAAC;QAC1D;MACF,CAAC;IACH,CAAC;IACDtF,IAAI,EAAErI,UAAU,CAACqI;EACnB,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMoH,SAAS,GAAGA,CAAC/B,QAAQ,EAAE1N,UAAU,KAAK;EAC1C,OAAO;IACL8O,MAAMA,CAAE1Q,OAAO,EAAE;MACf,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1C,MAAMP,QAAQ,GAAGmL,WAAW,CAAC7M,OAAO,CAAC;MACrC,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,OAAO;QACL,cAAcuP,CAAA,EAAI;UAChB,MAAMC,WAAW,GAAGlP,UAAU,CAACmP,cAAc,EAAE;UAC/C,MAAM;YACJhJ;UACF,CAAC,GAAGnG,UAAU;UACd,MAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;UAE9C4N,QAAQ,CAAC;YACP4B,WAAW;YACXlR,OAAO;YACPmI,KAAK;YACL2G,UAAU;YACVpN,QAAQ;YACRM,UAAU;YACV7B;UACF,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CAAC;IACD8J,IAAI,EAAErI,UAAU,CAACqI;EACnB,CAAC;AACH,CAAC;AAQD;AACA;AACA;AACA;AACe,SAASqH,YAAYA,CAAEhC,QAAQ,EAAE1N,UAAU,EAAE;EAAA,IAAA2P,gBAAA;EAC1D,MAAMC,QAAQ,GAAG5P,UAAU,aAAVA,UAAU,wBAAA2P,gBAAA,GAAV3P,UAAU,CAAEqI,IAAI,cAAAsH,gBAAA,uBAAhBA,gBAAA,CAAkB7O,IAAI;EACvC,IAAI,CAAC8O,QAAQ,IAAI,CAAC,CAChB,SAAS,EAAE,YAAY,EAAE,QAAQ,CAClC,CAAC/O,QAAQ,CAAC+O,QAAQ,CAAC,EAAE;IACpB,MAAM,IAAIC,SAAS,CAAC,wFAAwF,CAAC;EAC/G;EAEA,IAAI,OAAOnC,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAImC,SAAS,CAAC,2CAA2C,CAAC;EAClE;EAEA,IAAI7P,UAAU,CAACyP,SAAS,EAAE;IACxB,OAAOA,SAAS,CAAC/B,QAAQ,EAAE1N,UAAU,CAAC;EACxC;EAEA,IAAIA,UAAU,CAACmO,gBAAgB,EAAE;IAC/B,OAAOA,gBAAgB,CAACT,QAAQ,EAAE1N,UAAU,CAAC;EAC/C;EAEA,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8O,MAAMA,CAAE1Q,OAAO,EAAE;MACf,MAAM0B,QAAQ,GAAGmL,WAAW,CAAC7M,OAAO,CAAC;MACrC,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAI+M,QAAQ;MACZ,IAAI7M,UAAU,CAAC8P,eAAe,IAAI9P,UAAU,CAAC+P,eAAe,IAAI/P,UAAU,CAACgQ,YAAY,EAAE;QAAA,IAAAC,kBAAA,EAAAC,SAAA,EAAAC,UAAA;QACvFtD,QAAQ,GAAG7M,UAAU,CAACgQ,YAAY,KAAAC,kBAAA,GAAI7R,OAAO,CAACoK,OAAO,CAAC,CAAC,CAAC,cAAAyH,kBAAA,eAAlBA,kBAAA,CAAoBG,KAAK,GAC7DhS,OAAO,CAACoK,OAAO,CAAC,CAAC,CAAC,CAAC4H,KAAK,GACxBnR,mBAAU,CAACoR,gBAAgB,CAACjS,OAAO,EAAE4B,UAAU,CAAC8P,eAAe,EAAE9P,UAAU,CAACsQ,iBAAiB,GAAG,CAAC,CAAC,GAAGxQ,QAAQ,CAAC;QAEhH,IAAI+M,QAAQ,EAAE;UACZA,QAAQ,GAAGA,QAAQ,CAAC0D,GAAG,CAAE5S,GAAG,IAAK;YAC/B,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAI,CAACA,GAAG,CAACS,OAAO,EAAE;cAC3C,OAAO;gBACL,GAAGT,GAAG;gBACNS,OAAO,EAAE;cACX,CAAC;YACH;YAEA,OAAOT,GAAG;UACZ,CAAC,CAAC;QACJ;QAEA,MAAM6S,WAAW,IAAAN,SAAA,GAAGrD,QAAQ,cAAAqD,SAAA,uBAARA,SAAA,CAAUrP,QAAQ,CAAC,KAAK,CAAC;QAC7C,MAAM4P,YAAY,GAAG,CAACD,WAAW,MAAAL,UAAA,GAAItD,QAAQ,cAAAsD,UAAA,uBAARA,UAAA,CAAU9F,IAAI,CAAEqG,IAAI,IAAK;UAC5D,OAAO,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEtS,OAAO,MAAK,KAAK;QAChC,CAAC,CAAC;QACF,IAAIoS,WAAW,IAAIC,YAAY,EAAE;UAC/B,OAAOtC,gBAAgB,CACrBT,QAAQ,EAAE1N,UAAU,EAAEyQ,YAAY,GAAG5D,QAAQ,GAAG,IAAI,EAAE7M,UAAU,CAACgQ,YAAY,CAC9E,CAAClB,MAAM,CAAC1Q,OAAO,CAAC;QACnB;MACF;MAEA,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1C,MAAM;QACJkG;MACF,CAAC,GAAGnG,UAAU;MAEd,MAAMuN,KAAK,GAAG,CAAC,CAAC;MAEhB,MAAMgD,UAAU,GAAGA,CAAClD,IAAI,EAAElM,OAAO,EAAE5B,IAAI,KAAK;QAC1C,MAAME,SAAS,GAAG,IAAA6K,6BAAe,EAACtK,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;QAC7D,IAAI,CAACD,SAAS,EAAE;UACd;QACF;QAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAGkO,iBAAiB,CACnBvH,KAAK,EAAE1G,SAAS,CACjB;QAED;QACE;QACA;QACA;QACA0B,OAAO,IAAIA,OAAO,CAAC3B,KAAK,CAAC,KAAK,KAAK,EACnC;UACA;QACF;QAEA4N,OAAO,CACLC,IAAI,EAAExN,MAAM,EAAEL,KAAK,EAAEI,UAAU,EAAE5B,OAAO,EAAEmI,KAAK,EAAE1G,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAAEM,UAAU,EAAEsN,QAAQ,EAAEC,KAAK,CACxG;MACH,CAAC;MAED,IAAIiD,aAAa,GAAG,CAAC,CAAC;MAEtB,IAAI/D,QAAQ,KACV7M,UAAU,CAAC8P,eAAe,IAAI9P,UAAU,CAAC+P,eAAe,IAAI/P,UAAU,CAACgQ,YAAY,CACpF,EAAE;QACDY,aAAa,GAAG3R,mBAAU,CAAC4R,gBAAgB,CACzChE,QAAQ,EACR8D,UAAU,EACV,IAAA5B,4BAAc,EAACjP,QAAQ,CAAC,CACzB;MACH,CAAC,MAAM;QACL,KAAK,MAAMgG,IAAI,IAAI,CACjB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,CACpB,EAAE;UACD8K,aAAa,CAAC9K,IAAI,CAAC,GAAG6K,UAAU,CAACG,IAAI,CAAC,IAAI,EAAE;YAC1CnC,QAAQ,EAAE7I;UACZ,CAAC,EAAE,IAAI,CAAC;QACV;MACF;MAEA,IAAI9F,UAAU,CAAC6O,IAAI,EAAE;QACnB+B,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM;UACpC5Q,UAAU,CAAC6O,IAAI,CAAC;YACdzQ,OAAO;YACP0B,QAAQ;YACR6N;UACF,CAAC,CAAC;QACJ,CAAC;MACH;MAEA,OAAOiD,aAAa;IACtB,CAAC;IACDvI,IAAI,EAAErI,UAAU,CAACqI;EACnB,CAAC;AACH"}
@@ -9,18 +9,24 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
10
  // https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/
11
11
  const jsxTagNames = new Set(['jsx', 'jsxFrag', 'jsxImportSource', 'jsxRuntime']);
12
+ const typedTagsAlwaysUnnecessary = new Set(['augments', 'callback', 'class', 'enum', 'implements', 'private', 'property', 'protected', 'public', 'readonly', 'this', 'type', 'typedef']);
13
+ const typedTagsNeedingName = new Set(['template']);
14
+ const typedTagsUnnecessaryOutsideDeclare = new Set(['abstract', 'access', 'class', 'constant', 'constructs', 'default', 'enum', 'export', 'exports', 'function', 'global', 'inherits', 'instance', 'interface', 'member', 'memberof', 'memberOf', 'method', 'mixes', 'mixin', 'module', 'name', 'namespace', 'override', 'property', 'requires', 'static', 'this']);
12
15
  var _default = (0, _iterateJsdoc.default)(({
13
16
  sourceCode,
14
17
  jsdoc,
15
18
  report,
16
19
  utils,
17
20
  context,
21
+ node,
18
22
  settings,
19
23
  jsdocNode
20
24
  }) => {
21
25
  const {
22
26
  definedTags = [],
23
- jsxTags
27
+ enableFixer = true,
28
+ jsxTags,
29
+ typed
24
30
  } = context.options[0] || {};
25
31
  let definedPreferredTags = [];
26
32
  const {
@@ -46,12 +52,69 @@ var _default = (0, _iterateJsdoc.default)(({
46
52
  return preferredType;
47
53
  });
48
54
  }
49
- for (const jsdocTag of jsdoc.tags) {
55
+ const isInAmbientContext = subNode => {
56
+ return subNode.type === 'Program' ? context.getFilename().endsWith('.d.ts') : Boolean(subNode.declare) || isInAmbientContext(subNode.parent);
57
+ };
58
+ const tagIsRedundantWhenTyped = jsdocTag => {
59
+ var _node$parent;
60
+ if (!typedTagsUnnecessaryOutsideDeclare.has(jsdocTag.tag)) {
61
+ return false;
62
+ }
63
+ if (jsdocTag.tag === 'default') {
64
+ return false;
65
+ }
66
+ if (context.getFilename().endsWith('.d.ts') && ['Program', null, undefined].includes(node === null || node === void 0 ? void 0 : (_node$parent = node.parent) === null || _node$parent === void 0 ? void 0 : _node$parent.type)) {
67
+ return false;
68
+ }
69
+ if (isInAmbientContext(node)) {
70
+ return false;
71
+ }
72
+ return true;
73
+ };
74
+ const reportWithTagRemovalFixer = (message, jsdocTag, tagIndex, additionalTagChanges) => {
75
+ utils.reportJSDoc(message, jsdocTag, enableFixer ? () => {
76
+ if (jsdocTag.description.trim()) {
77
+ utils.changeTag(jsdocTag, {
78
+ postType: '',
79
+ type: '',
80
+ ...additionalTagChanges
81
+ });
82
+ } else {
83
+ utils.removeTag(tagIndex, {
84
+ removeEmptyBlock: true
85
+ });
86
+ }
87
+ } : null, true);
88
+ };
89
+ const checkTagForTypedValidity = (jsdocTag, tagIndex) => {
90
+ if (typedTagsAlwaysUnnecessary.has(jsdocTag.tag)) {
91
+ reportWithTagRemovalFixer(`'@${jsdocTag.tag}' is redundant when using a type system.`, jsdocTag, tagIndex, {
92
+ postTag: '',
93
+ tag: ''
94
+ });
95
+ return true;
96
+ }
97
+ if (tagIsRedundantWhenTyped(jsdocTag)) {
98
+ reportWithTagRemovalFixer(`'@${jsdocTag.tag}' is redundant outside of ambient (\`declare\`/\`.d.ts\`) contexts when using a type system.`, jsdocTag, tagIndex);
99
+ return true;
100
+ }
101
+ if (typedTagsNeedingName.has(jsdocTag.tag) && !jsdocTag.name) {
102
+ reportWithTagRemovalFixer(`'@${jsdocTag.tag}' without a name is redundant when using a type system.`, jsdocTag, tagIndex);
103
+ return true;
104
+ }
105
+ return false;
106
+ };
107
+ for (let tagIndex = 0; tagIndex < jsdoc.tags.length; tagIndex += 1) {
108
+ const jsdocTag = jsdoc.tags[tagIndex];
50
109
  const tagName = jsdocTag.tag;
51
110
  if (jsxTags && jsxTagNames.has(tagName)) {
52
111
  continue;
53
112
  }
54
- if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags, ...definedStructuredTags])) {
113
+ if (typed && checkTagForTypedValidity(jsdocTag, tagIndex)) {
114
+ continue;
115
+ }
116
+ const validTags = [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags, ...definedStructuredTags, ...(typed ? typedTagsNeedingName : [])];
117
+ if (utils.isValidTag(tagName, validTags)) {
55
118
  let preferredTagName = utils.getPreferredTagName({
56
119
  allowObjectReturn: true,
57
120
  defaultMessage: `Blacklisted tag found (\`@${tagName}\`)`,
@@ -97,8 +160,14 @@ var _default = (0, _iterateJsdoc.default)(({
97
160
  },
98
161
  type: 'array'
99
162
  },
163
+ enableFixer: {
164
+ type: 'boolean'
165
+ },
100
166
  jsxTags: {
101
167
  type: 'boolean'
168
+ },
169
+ typed: {
170
+ type: 'boolean'
102
171
  }
103
172
  },
104
173
  type: 'object'
@@ -1 +1 @@
1
- {"version":3,"file":"checkTagNames.js","names":["_escapeStringRegexp","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","jsxTagNames","Set","_default","iterateJsdoc","sourceCode","jsdoc","report","utils","context","settings","jsdocNode","definedTags","jsxTags","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","jsdocTag","tags","tagName","tag","has","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","message","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","exports","module"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n jsxTags,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n for (const jsdocTag of jsdoc.tags) {\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (utils.isValidTag(tagName, [\n ...definedTags, ...definedPreferredTags, ...definedNonPreferredTags,\n ...definedStructuredTags,\n ])) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n jsxTags: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkTagNames.js","names":["_escapeStringRegexp","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","jsxTagNames","Set","typedTagsAlwaysUnnecessary","typedTagsNeedingName","typedTagsUnnecessaryOutsideDeclare","_default","iterateJsdoc","sourceCode","jsdoc","report","utils","context","node","settings","jsdocNode","definedTags","enableFixer","jsxTags","typed","options","definedPreferredTags","tagNamePreference","structuredTags","definedStructuredTags","Object","keys","definedNonPreferredTags","length","values","map","preferredTag","undefined","reportSettings","replacement","filter","preferredType","isInAmbientContext","subNode","type","getFilename","endsWith","Boolean","declare","parent","tagIsRedundantWhenTyped","jsdocTag","_node$parent","has","tag","includes","reportWithTagRemovalFixer","message","tagIndex","additionalTagChanges","reportJSDoc","description","trim","changeTag","postType","removeTag","removeEmptyBlock","checkTagForTypedValidity","postTag","name","tags","tagName","validTags","isValidTag","preferredTagName","getPreferredTagName","allowObjectReturn","defaultMessage","fixer","getText","replace","RegExp","escapeStringRegexp","replaceText","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/checkTagNames.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// https://babeljs.io/docs/en/babel-plugin-transform-react-jsx/\nconst jsxTagNames = new Set([\n 'jsx',\n 'jsxFrag',\n 'jsxImportSource',\n 'jsxRuntime',\n]);\n\nconst typedTagsAlwaysUnnecessary = new Set([\n 'augments',\n 'callback',\n 'class',\n 'enum',\n 'implements',\n 'private',\n 'property',\n 'protected',\n 'public',\n 'readonly',\n 'this',\n 'type',\n 'typedef',\n]);\n\nconst typedTagsNeedingName = new Set([\n 'template',\n]);\n\nconst typedTagsUnnecessaryOutsideDeclare = new Set([\n 'abstract',\n 'access',\n 'class',\n 'constant',\n 'constructs',\n 'default',\n 'enum',\n 'export',\n 'exports',\n 'function',\n 'global',\n 'inherits',\n 'instance',\n 'interface',\n 'member',\n 'memberof',\n 'memberOf',\n 'method',\n 'mixes',\n 'mixin',\n 'module',\n 'name',\n 'namespace',\n 'override',\n 'property',\n 'requires',\n 'static',\n 'this',\n]);\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n utils,\n context,\n node,\n settings,\n jsdocNode,\n}) => {\n const {\n definedTags = [],\n enableFixer = true,\n jsxTags,\n typed,\n } = context.options[0] || {};\n\n let definedPreferredTags = [];\n const {\n tagNamePreference,\n structuredTags,\n } = settings;\n const definedStructuredTags = Object.keys(structuredTags);\n const definedNonPreferredTags = Object.keys(tagNamePreference);\n if (definedNonPreferredTags.length) {\n definedPreferredTags = Object.values(tagNamePreference).map((preferredTag) => {\n if (typeof preferredTag === 'string') {\n // May become an empty string but will be filtered out below\n return preferredTag;\n }\n\n if (!preferredTag) {\n return undefined;\n }\n\n if (typeof preferredTag !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.',\n );\n }\n\n return preferredTag.replacement;\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const isInAmbientContext = (subNode) => {\n return subNode.type === 'Program' ?\n context.getFilename().endsWith('.d.ts') :\n Boolean(subNode.declare) || isInAmbientContext(subNode.parent);\n };\n\n const tagIsRedundantWhenTyped = (jsdocTag) => {\n if (!typedTagsUnnecessaryOutsideDeclare.has(jsdocTag.tag)) {\n return false;\n }\n\n if (jsdocTag.tag === 'default') {\n return false;\n }\n\n if (context.getFilename().endsWith('.d.ts') && [\n 'Program', null, undefined,\n ].includes(node?.parent?.type)) {\n return false;\n }\n\n if (isInAmbientContext(node)) {\n return false;\n }\n\n return true;\n };\n\n const reportWithTagRemovalFixer = (message, jsdocTag, tagIndex, additionalTagChanges) => {\n utils.reportJSDoc(message, jsdocTag, enableFixer ? () => {\n if (jsdocTag.description.trim()) {\n utils.changeTag(jsdocTag, {\n postType: '',\n type: '',\n ...additionalTagChanges,\n });\n } else {\n utils.removeTag(tagIndex, {\n removeEmptyBlock: true,\n });\n }\n } : null, true);\n };\n\n const checkTagForTypedValidity = (jsdocTag, tagIndex) => {\n if (typedTagsAlwaysUnnecessary.has(jsdocTag.tag)) {\n reportWithTagRemovalFixer(`'@${jsdocTag.tag}' is redundant when using a type system.`, jsdocTag, tagIndex, {\n postTag: '',\n tag: '',\n });\n return true;\n }\n\n if (tagIsRedundantWhenTyped(jsdocTag)) {\n reportWithTagRemovalFixer(`'@${jsdocTag.tag}' is redundant outside of ambient (\\`declare\\`/\\`.d.ts\\`) contexts when using a type system.`, jsdocTag, tagIndex);\n return true;\n }\n\n if (typedTagsNeedingName.has(jsdocTag.tag) && !jsdocTag.name) {\n reportWithTagRemovalFixer(`'@${jsdocTag.tag}' without a name is redundant when using a type system.`, jsdocTag, tagIndex);\n return true;\n }\n\n return false;\n };\n\n for (let tagIndex = 0; tagIndex < jsdoc.tags.length; tagIndex += 1) {\n const jsdocTag = jsdoc.tags[tagIndex];\n const tagName = jsdocTag.tag;\n if (jsxTags && jsxTagNames.has(tagName)) {\n continue;\n }\n\n if (typed && checkTagForTypedValidity(jsdocTag, tagIndex)) {\n continue;\n }\n\n const validTags = [\n ...definedTags,\n ...definedPreferredTags,\n ...definedNonPreferredTags,\n ...definedStructuredTags,\n ...typed ? typedTagsNeedingName : [],\n ];\n\n if (utils.isValidTag(tagName, validTags)) {\n let preferredTagName = utils.getPreferredTagName({\n allowObjectReturn: true,\n defaultMessage: `Blacklisted tag found (\\`@${tagName}\\`)`,\n tagName,\n });\n if (!preferredTagName) {\n continue;\n }\n\n let message;\n if (typeof preferredTagName === 'object') {\n ({\n message,\n replacement: preferredTagName,\n } = preferredTagName);\n }\n\n if (!message) {\n message = `Invalid JSDoc tag (preference). Replace \"${tagName}\" JSDoc tag with \"${preferredTagName}\".`;\n }\n\n if (preferredTagName !== tagName) {\n report(message, (fixer) => {\n const replacement = sourceCode.getText(jsdocNode).replace(\n new RegExp(`@${escapeStringRegexp(tagName)}\\\\b`, 'u'),\n `@${preferredTagName}`,\n );\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else {\n report(`Invalid JSDoc tag name \"${tagName}\".`, null, jsdocTag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid block tag names.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n type: 'boolean',\n },\n jsxTags: {\n type: 'boolean',\n },\n typed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -50,7 +50,9 @@ var _default = (0, _iterateJsdoc.default)(({
50
50
  }
51
51
  if (dropEndLines && lastEmpty !== null && tagIdx === jsdoc.tags.length - 1) {
52
52
  const fixer = () => {
53
- utils.removeTagItem(tagIdx, lastEmpty);
53
+ utils.removeTag(tagIdx, {
54
+ tagSourceOffset: lastEmpty
55
+ });
54
56
  };
55
57
  utils.reportJSDoc('Expected no trailing lines', {
56
58
  line: tg.source[lastEmpty].number
@@ -59,7 +61,9 @@ var _default = (0, _iterateJsdoc.default)(({
59
61
  }
60
62
  if (reportIndex !== null) {
61
63
  const fixer = () => {
62
- utils.removeTagItem(tagIdx, reportIndex);
64
+ utils.removeTag(tagIdx, {
65
+ tagSourceOffset: reportIndex
66
+ });
63
67
  };
64
68
  utils.reportJSDoc('Expected no lines between tags', {
65
69
  line: tg.source[0].number + 1
@@ -1 +1 @@
1
- {"version":3,"file":"tagLines.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","alwaysNever","count","dropEndLines","noEndLines","tags","options","some","tg","tagIdx","lastTag","lastEmpty","reportIndex","idx","tokens","tag","name","type","description","end","source","entries","_tags$lastTag$slice","_tags$lastTag$slice2","includes","slice","lines","empty","length","fixer","removeTagItem","reportJSDoc","line","number","currentTag","tagSourceIdx","splice","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","_lines2","_lines","addLines","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","patternProperties","exports","module"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n count = 1,\n dropEndLines = false,\n noEndLines = false,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n let lastEmpty = null;\n\n let reportIndex = null;\n for (const [\n idx,\n {\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n\n if (lastTag && [\n 'any', 'always',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (dropEndLines && lastEmpty !== null && tagIdx === jsdoc.tags.length - 1) {\n const fixer = () => {\n utils.removeTagItem(tagIdx, lastEmpty);\n };\n\n utils.reportJSDoc(\n 'Expected no trailing lines',\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTagItem(tagIdx, reportIndex);\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (noEndLines ? jsdoc.tags.slice(0, -1) : jsdoc.tags).some((tg, tagIdx) => {\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0, lines.length);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\n }\n }\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-tag-lines',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n dropEndLines: {\n type: 'boolean',\n },\n noEndLines: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"tagLines.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","alwaysNever","count","dropEndLines","noEndLines","tags","options","some","tg","tagIdx","lastTag","lastEmpty","reportIndex","idx","tokens","tag","name","type","description","end","source","entries","_tags$lastTag$slice","_tags$lastTag$slice2","includes","slice","lines","empty","length","fixer","removeTag","tagSourceOffset","reportJSDoc","line","number","currentTag","tagSourceIdx","splice","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","_lines2","_lines","addLines","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","patternProperties","exports","module"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n count = 1,\n dropEndLines = false,\n noEndLines = false,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n let lastEmpty = null;\n\n let reportIndex = null;\n for (const [\n idx,\n {\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n\n if (lastTag && [\n 'any', 'always',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (dropEndLines && lastEmpty !== null && tagIdx === jsdoc.tags.length - 1) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: lastEmpty,\n });\n };\n\n utils.reportJSDoc(\n 'Expected no trailing lines',\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: reportIndex,\n });\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (noEndLines ? jsdoc.tags.slice(0, -1) : jsdoc.tags).some((tg, tagIdx) => {\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0, lines.length);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\n }\n }\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-tag-lines',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n dropEndLines: {\n type: 'boolean',\n },\n noEndLines: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -120,5 +120,5 @@
120
120
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
121
121
  "test-index": "npm run test-no-cov -- test/rules/index.js"
122
122
  },
123
- "version": "40.1.2"
123
+ "version": "40.2.1"
124
124
  }