eslint-plugin-jsdoc 42.0.0 → 43.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22385,6 +22385,18 @@ Sorts tags by a specified sequence according to tag name.
22385
22385
 
22386
22386
  (Default order originally inspired by [`@homer0/prettier-plugin-jsdoc`](https://github.com/homer0/packages/tree/main/packages/public/prettier-plugin-jsdoc).)
22387
22387
 
22388
+ Optionally allows adding line breaks between tag groups and/or between tags
22389
+ within a tag group.
22390
+
22391
+ Please note: unless you are disabling reporting of line breaks, this rule
22392
+ should not be used with the default "never" or "always" options of
22393
+ `tag-lines` (a rule enabled by default with the recommended config) as
22394
+ that rule adds its own line breaks after tags and may interfere with any
22395
+ line break setting this rule will attempt to do when not disabled.
22396
+
22397
+ You may, however, safely set the "any" option in that rule along with
22398
+ `startLines` and/or `endLines`.
22399
+
22388
22400
  <a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40"></a>
22389
22401
  <a name="eslint-plugin-jsdoc-rules-sort-tags-options-40"></a>
22390
22402
  #### Options
@@ -22393,24 +22405,32 @@ Sorts tags by a specified sequence according to tag name.
22393
22405
  <a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-tagsequence"></a>
22394
22406
  ##### <code>tagSequence</code>
22395
22407
 
22396
- An array of tag names indicating the preferred sequence for sorting tags.
22408
+ An array of tag group objects indicating the preferred sequence for sorting tags.
22409
+
22410
+ Each item in the array should be an object with a `tags` property set to an array
22411
+ of tag names.
22397
22412
 
22398
22413
  Tag names earlier in the list will be arranged first. The relative position of
22399
22414
  tags of the same name will not be changed.
22400
22415
 
22401
- Tags not in the list will be sorted alphabetically at the end (or in place of
22402
- the pseudo-tag `-other` placed within `tagSequence`) if `alphabetizeExtras` is
22403
- enabled and in their order of appearance otherwise (so if you want all your
22404
- tags alphabetized, supply an empty array with `alphabetizeExtras` enabled).
22416
+ Earlier groups will also be arranged before later groups, but with the added
22417
+ feature that additional line breaks may be added between (or before or after)
22418
+ such groups (depending on the setting of `linesBetween`).
22419
+
22420
+ Tag names not in the list will be grouped together at the end. The pseudo-tag
22421
+ `-other` can be used to place them anywhere else if desired. The tags will be
22422
+ placed in their order of appearance, or alphabetized if `alphabetizeExtras`
22423
+ is enabled, see more below about that option.
22405
22424
 
22406
- Defaults to the array below.
22425
+ Defaults to the array below (noting that it is just a single tag group with
22426
+ no lines between groups by default).
22407
22427
 
22408
22428
  Please note that this order is still experimental, so if you want to retain
22409
22429
  a fixed order that doesn't change into the future, supply your own
22410
22430
  `tagSequence`.
22411
22431
 
22412
22432
  ```js
22413
- [
22433
+ [{tags: [
22414
22434
  // Brief descriptions
22415
22435
  'summary',
22416
22436
  'typeSummary',
@@ -22563,7 +22583,7 @@ a fixed order that doesn't change into the future, supply your own
22563
22583
  'since',
22564
22584
  'deprecated',
22565
22585
  'todo',
22566
- ];
22586
+ ]}];
22567
22587
  ```
22568
22588
 
22569
22589
  <a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-alphabetizeextras"></a>
@@ -22574,13 +22594,41 @@ Defaults to `false`. Alphabetizes any items not within `tagSequence` after any
22574
22594
  items within `tagSequence` (or in place of the special `-other` pseudo-tag)
22575
22595
  are sorted.
22576
22596
 
22597
+ If you want all your tags alphabetized, you can supply an empty array for
22598
+ `tagSequence` along with setting this option to `true`.
22599
+
22600
+ <a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-linesbetween"></a>
22601
+ <a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-linesbetween"></a>
22602
+ ##### <code>linesBetween</code>
22603
+
22604
+ Indicates the number of lines to be added between tag groups. Defaults to 1.
22605
+ Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not
22606
+ set to 1+ if you are using `tag-lines` and `"never"`.
22607
+
22608
+ <a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-reporttaggroupspacing"></a>
22609
+ <a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-reporttaggroupspacing"></a>
22610
+ ##### <code>reportTagGroupSpacing</code>
22611
+
22612
+ Whether to enable reporting and fixing of line breaks between tag groups
22613
+ as set by `linesBetween`. Defaults to `true`. Note that the very last tag
22614
+ will not have spacing applied regardless. For adding line breaks there, you
22615
+ may wish to use the `endLines` option of the `tag-lines` rule.
22616
+
22617
+ <a name="user-content-eslint-plugin-jsdoc-rules-sort-tags-options-40-reportintrataggroupspacing"></a>
22618
+ <a name="eslint-plugin-jsdoc-rules-sort-tags-options-40-reportintrataggroupspacing"></a>
22619
+ ##### <code>reportIntraTagGroupSpacing</code>
22620
+
22621
+ Whether to enable reporting and fixing of line breaks within tags of a given
22622
+ tag group. Defaults to `true` which will remove any line breaks at the end of
22623
+ such tags. Do not use with `true` if you are using `tag-lines` and `always`.
22624
+
22577
22625
  |||
22578
22626
  |---|---|
22579
22627
  |Context|everywhere|
22580
22628
  |Tags|any|
22581
22629
  |Recommended|false|
22582
22630
  |Settings||
22583
- |Options|`tagSequence`, `alphabetizeExtras`|
22631
+ |Options|`tagSequence`, `alphabetizeExtras`, `linesBetween`, `reportTagGroupSpacing`, `reportIntraTagGroupSpacing`|
22584
22632
 
22585
22633
  The following patterns are considered problems:
22586
22634
 
@@ -22645,7 +22693,16 @@ function quux () {}
22645
22693
  * @abc
22646
22694
  */
22647
22695
  function quux () {}
22648
- // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":["def","xyz","abc"]}]
22696
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["def","xyz","abc"]}]}]
22697
+ // Message: Tags are not in the prescribed order: def, xyz, abc
22698
+
22699
+ /**
22700
+ * @xyz
22701
+ * @def
22702
+ * @abc
22703
+ */
22704
+ function quux () {}
22705
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22649
22706
  // Message: Tags are not in the prescribed order: def, xyz, abc
22650
22707
 
22651
22708
  /**
@@ -22677,6 +22734,135 @@ function quux () {}
22677
22734
  */
22678
22735
  function quux () {}
22679
22736
  // Message: Tags are not in the prescribed order: summary, typeSummary, module, exports, file, fileoverview, overview, typedef, interface, record, template, name, kind, type, alias, external, host, callback, func, function, method, class, constructor, modifies, mixes, mixin, mixinClass, mixinFunction, namespace, borrows, constructs, lends, implements, requires, desc, description, classdesc, tutorial, copyright, license, internal, const, constant, final, global, readonly, abstract, virtual, var, member, memberof, memberof!, inner, instance, inheritdoc, inheritDoc, override, hideconstructor, param, arg, argument, prop, property, return, returns, async, generator, default, defaultvalue, enum, augments, extends, throws, exception, yield, yields, event, fires, emits, listens, this, static, private, protected, public, access, package, -other, see, example, closurePrimitive, customElement, expose, hidden, idGenerator, meaning, ngInject, owner, wizaction, define, dict, export, externs, implicitCast, noalias, nocollapse, nocompile, noinline, nosideeffects, polymer, polymerBehavior, preserve, struct, suppress, unrestricted, category, ignore, author, version, variation, since, deprecated, todo
22737
+
22738
+ /**
22739
+ * @def
22740
+ * @xyz
22741
+ * @abc
22742
+ */
22743
+ function quux () {}
22744
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22745
+ // Message: Tag groups do not have the expected whitespace
22746
+
22747
+ /**
22748
+ * @def
22749
+ * @xyz
22750
+ *
22751
+ *
22752
+ * @abc
22753
+ */
22754
+ function quux () {}
22755
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22756
+ // Message: Tag groups do not have the expected whitespace
22757
+
22758
+ /**
22759
+ * @def
22760
+ * @xyz A multiline
22761
+ * description
22762
+ * @abc
22763
+ */
22764
+ function quux () {}
22765
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22766
+ // Message: Tag groups do not have the expected whitespace
22767
+
22768
+ /**
22769
+ * @def
22770
+ * @xyz
22771
+ * @xyz
22772
+ *
22773
+ *
22774
+ * @abc
22775
+ */
22776
+ function quux () {}
22777
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22778
+ // Message: Tag groups do not have the expected whitespace
22779
+
22780
+ /**
22781
+ * Foo
22782
+ *
22783
+ * @param {(
22784
+ * req: express.Request,
22785
+ * done: (error: any, user?: any, info?: any) => void
22786
+ * ) => void} verify - callback to excute custom authentication logic
22787
+ * @see https://github.com/jaredhanson/passport/blob/v0.4.1/lib/middleware/authenticate.js#L217
22788
+ *
22789
+ */
22790
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["see","link","global"]},{"tags":["fires","listens"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]}]}]
22791
+ // Message: Tags are not in the prescribed order: since, access, class, augments, mixes, alias, memberof, see, link, global, fires, listens, param, yields, returns
22792
+
22793
+ /**
22794
+ * Summary. (use period)
22795
+ *
22796
+ * Description. (use period)
22797
+ *
22798
+ * @since 1.0.1
22799
+ * @access private
22800
+ *
22801
+ * @class
22802
+ * @mixes mixin
22803
+ *
22804
+ * @alias realName
22805
+ * @memberof namespace
22806
+ *
22807
+ * @see Function/class relied on
22808
+ * @global
22809
+ *
22810
+ * @tutorial Asd
22811
+ * @license MIT
22812
+ *
22813
+ * @fires eventName
22814
+ * @fires className#eventName
22815
+ * @listens event:eventName
22816
+ * @listens className~event:eventName
22817
+ *
22818
+ * @tutorial Asd
22819
+ * @license MIT
22820
+ *
22821
+ * @yields {string} Yielded value description.
22822
+ *
22823
+ * @param {string} var1 - Description.
22824
+ * @param {string} var2 - Description of optional variable.
22825
+ * @param {string} var3 - Description of optional variable with default variable.
22826
+ * @param {object} objectVar - Description.
22827
+ * @param {string} objectVar.key - Description of a key in the objectVar parameter.
22828
+ *
22829
+ * @returns {string} Return value description.
22830
+ */
22831
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["see","link","global"]},{"tags":["fires","listens"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]}]}]
22832
+ // Message: Tags are not in the prescribed order: since, access, class, augments, mixes, alias, memberof, see, link, global, fires, listens, param, yields, returns
22833
+
22834
+ /**
22835
+ * @def
22836
+ * @zzz
22837
+ * @abc
22838
+ */
22839
+ function quux () {}
22840
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","-other","xyz"]},{"tags":["abc"]}]}]
22841
+ // Message: Tag groups do not have the expected whitespace
22842
+
22843
+ /**
22844
+ * @xyz
22845
+ * @def
22846
+ * @abc
22847
+ */
22848
+ function quux () {}
22849
+ // "jsdoc/sort-tags": ["error"|"warn", {"alphabetizeExtras":true,"tagSequence":[]}]
22850
+ // Message: Tags are not in the prescribed order: (alphabetical)
22851
+
22852
+ /**
22853
+ * @example
22854
+ * enum Color { Red, Green, Blue }
22855
+ * faker.helpers.enumValue(Color) // 1 (Green)
22856
+ *
22857
+ * enum Direction { North = 'North', South = 'South'}
22858
+ * faker.helpers.enumValue(Direction) // 'South'
22859
+ *
22860
+ * enum HttpStatus { Ok = 200, Created = 201, BadRequest = 400, Unauthorized = 401 }
22861
+ * faker.helpers.enumValue(HttpStatus) // 200 (Ok)
22862
+ * @since 8.0.0
22863
+ */
22864
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}]
22865
+ // Message: Tag groups do not have the expected whitespace
22680
22866
  ````
22681
22867
 
22682
22868
  The following patterns are not considered problems:
@@ -22711,10 +22897,86 @@ function quux () {}
22711
22897
  * @abc
22712
22898
  */
22713
22899
  function quux () {}
22714
- // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":["def","xyz","abc"]}]
22900
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["def","xyz","abc"]}]}]
22715
22901
 
22716
22902
  /** @def */
22717
22903
  function quux () {}
22904
+
22905
+ /**
22906
+ * @def
22907
+ * @xyz
22908
+ *
22909
+ * @abc
22910
+ */
22911
+ function quux () {}
22912
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22913
+
22914
+ /**
22915
+ * @def
22916
+ * @xyz A multiline
22917
+ * description
22918
+ *
22919
+ * @abc
22920
+ */
22921
+ function quux () {}
22922
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":1,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22923
+
22924
+ /**
22925
+ * Foo
22926
+ *
22927
+ * @see https://github.com/jaredhanson/passport/blob/v0.4.1/lib/middleware/authenticate.js#L217
22928
+ *
22929
+ * @param {(
22930
+ * req: express.Request,
22931
+ * done: (error: any, user?: any, info?: any) => void
22932
+ * ) => void} verify - callback to excute custom authentication logic
22933
+ */
22934
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["see","link","global"]},{"tags":["fires","listens"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]}]}]
22935
+
22936
+ /**
22937
+ * Constructor.
22938
+ *
22939
+ * @public
22940
+ *
22941
+ * @param {string} [message] - Error message.
22942
+ */
22943
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["since","access"]},{"tags":["class","augments","mixes"]},{"tags":["alias","memberof"]},{"tags":["public","protected","private","override"]},{"tags":["override","async"]},{"tags":["see","link","global"]},{"tags":["param"]},{"tags":["yields"]},{"tags":["returns"]},{"tags":["fires","-other","listens"]}]}]
22944
+
22945
+ /**
22946
+ * @param options.mode The mode to generate the birthdate. Supported modes are `'age'` and `'year'` .
22947
+ *
22948
+ * There are two modes available `'age'` and `'year'`:
22949
+ * - `'age'`: The min and max options define the age of the person (e.g. `18` - `42`).
22950
+ * - `'year'`: The min and max options define the range the birthdate may be in (e.g. `1900` - `2000`).
22951
+ *
22952
+ * Defaults to `year`.
22953
+ *
22954
+ * @example
22955
+ */
22956
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}]
22957
+
22958
+ /**
22959
+ * @example
22960
+ * enum Color { Red, Green, Blue }
22961
+ * faker.helpers.enumValue(Color) // 1 (Green)
22962
+ *
22963
+ * enum Direction { North = 'North', South = 'South'}
22964
+ * faker.helpers.enumValue(Direction) // 'South'
22965
+ *
22966
+ * enum HttpStatus { Ok = 200, Created = 201, BadRequest = 400, Unauthorized = 401 }
22967
+ * faker.helpers.enumValue(HttpStatus) // 200 (Ok)
22968
+ *
22969
+ * @since 8.0.0
22970
+ */
22971
+ // "jsdoc/sort-tags": ["error"|"warn", {"tagSequence":[{"tags":["internal"]},{"tags":["template","param"]},{"tags":["returns"]},{"tags":["throws"]},{"tags":["see"]},{"tags":["example"]},{"tags":["since"]},{"tags":["deprecated"]}]}]
22972
+
22973
+ /**
22974
+ * @def
22975
+ * @xyz
22976
+ * @abc
22977
+ */
22978
+ function quux () {}
22979
+ // "jsdoc/sort-tags": ["error"|"warn", {"linesBetween":2,"reportTagGroupSpacing":false,"tagSequence":[{"tags":["qrs"]},{"tags":["def","xyz"]},{"tags":["abc"]}]}]
22718
22980
  ````
22719
22981
 
22720
22982
 
@@ -4,39 +4,41 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- const defaultTagOrder = [
8
- // Brief descriptions
9
- 'summary', 'typeSummary',
10
- // Module/file-level
11
- 'module', 'exports', 'file', 'fileoverview', 'overview',
12
- // Identifying (name, type)
13
- 'typedef', 'interface', 'record', 'template', 'name', 'kind', 'type', 'alias', 'external', 'host', 'callback', 'func', 'function', 'method', 'class', 'constructor',
14
- // Relationships
15
- 'modifies', 'mixes', 'mixin', 'mixinClass', 'mixinFunction', 'namespace', 'borrows', 'constructs', 'lends', 'implements', 'requires',
16
- // Long descriptions
17
- 'desc', 'description', 'classdesc', 'tutorial', 'copyright', 'license',
18
- // Simple annotations
7
+ const defaultTagOrder = [{
8
+ tags: [
9
+ // Brief descriptions
10
+ 'summary', 'typeSummary',
11
+ // Module/file-level
12
+ 'module', 'exports', 'file', 'fileoverview', 'overview',
13
+ // Identifying (name, type)
14
+ 'typedef', 'interface', 'record', 'template', 'name', 'kind', 'type', 'alias', 'external', 'host', 'callback', 'func', 'function', 'method', 'class', 'constructor',
15
+ // Relationships
16
+ 'modifies', 'mixes', 'mixin', 'mixinClass', 'mixinFunction', 'namespace', 'borrows', 'constructs', 'lends', 'implements', 'requires',
17
+ // Long descriptions
18
+ 'desc', 'description', 'classdesc', 'tutorial', 'copyright', 'license',
19
+ // Simple annotations
19
20
 
20
- // TypeScript
21
- 'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor',
22
- // Core function/object info
23
- 'param', 'arg', 'argument', 'prop', 'property', 'return', 'returns',
24
- // Important behavior details
25
- 'async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this',
26
- // Access
27
- 'static', 'private', 'protected', 'public', 'access', 'package', '-other',
28
- // Supplementary descriptions
29
- 'see', 'example',
30
- // METADATA
21
+ // TypeScript
22
+ 'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor',
23
+ // Core function/object info
24
+ 'param', 'arg', 'argument', 'prop', 'property', 'return', 'returns',
25
+ // Important behavior details
26
+ 'async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this',
27
+ // Access
28
+ 'static', 'private', 'protected', 'public', 'access', 'package', '-other',
29
+ // Supplementary descriptions
30
+ 'see', 'example',
31
+ // METADATA
31
32
 
32
- // Other Closure (undocumented) metadata
33
- 'closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction',
34
- // Other Closure (documented) metadata
35
- 'define', 'dict', 'export', 'externs', 'implicitCast', 'noalias', 'nocollapse', 'nocompile', 'noinline', 'nosideeffects', 'polymer', 'polymerBehavior', 'preserve', 'struct', 'suppress', 'unrestricted',
36
- // @homer0/prettier-plugin-jsdoc metadata
37
- 'category',
38
- // Non-Closure metadata
39
- 'ignore', 'author', 'version', 'variation', 'since', 'deprecated', 'todo'];
33
+ // Other Closure (undocumented) metadata
34
+ 'closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction',
35
+ // Other Closure (documented) metadata
36
+ 'define', 'dict', 'export', 'externs', 'implicitCast', 'noalias', 'nocollapse', 'nocompile', 'noinline', 'nosideeffects', 'polymer', 'polymerBehavior', 'preserve', 'struct', 'suppress', 'unrestricted',
37
+ // @homer0/prettier-plugin-jsdoc metadata
38
+ 'category',
39
+ // Non-Closure metadata
40
+ 'ignore', 'author', 'version', 'variation', 'since', 'deprecated', 'todo']
41
+ }];
40
42
  var _default = defaultTagOrder;
41
43
  exports.default = _default;
42
44
  module.exports = exports.default;
@@ -1 +1 @@
1
- {"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder","_default","exports","default","module"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n\n // TypeScript\n 'internal',\n\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n];\n\nexport default defaultTagOrder;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,GAAG;AACtB;AACA,SAAS,EACT,aAAa;AAEb;AACA,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,EACd,UAAU;AAEV;AACA,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa;AAEb;AACA,UAAU,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU;AAEV;AACA,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS;AAET;;AAEA;AACA,UAAU,EAEV,OAAO,EACP,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB;AAEjB;AACA,OAAO,EACP,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS;AAET;AACA,OAAO,EACP,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM;AAEN;AACA,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,QAAQ;AAER;AACA,KAAK,EACL,SAAS;AAET;;AAEA;AACA,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW;AAEX;AACA,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc;AAEd;AACA,UAAU;AAEV;AACA,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,MAAM,CACP;AAAC,IAAAC,QAAA,GAEaD,eAAe;AAAAE,OAAA,CAAAC,OAAA,GAAAF,QAAA;AAAAG,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
1
+ {"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder","tags","_default","exports","default","module"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n {\n tags: [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n\n // TypeScript\n 'internal',\n\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n ],\n },\n];\n\nexport default defaultTagOrder;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,GAAG,CACtB;EACEC,IAAI,EAAE;EACJ;EACA,SAAS,EACT,aAAa;EAEb;EACA,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,EACd,UAAU;EAEV;EACA,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa;EAEb;EACA,UAAU,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU;EAEV;EACA,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS;EAET;;EAEA;EACA,UAAU,EAEV,OAAO,EACP,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB;EAEjB;EACA,OAAO,EACP,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS;EAET;EACA,OAAO,EACP,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM;EAEN;EACA,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,QAAQ;EAER;EACA,KAAK,EACL,SAAS;EAET;;EAEA;EACA,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW;EAEX;EACA,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc;EAEd;EACA,UAAU;EAEV;EACA,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,MAAM;AAEV,CAAC,CACF;AAAC,IAAAC,QAAA,GAEaF,eAAe;AAAAG,OAAA,CAAAC,OAAA,GAAAF,QAAA;AAAAG,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
@@ -105,7 +105,11 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
105
105
  return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);
106
106
  };
107
107
  utils.stringify = (tagBlock, specRewire) => {
108
- return (0, _commentParser.stringify)(specRewire ? rewireSpecs(tagBlock) : tagBlock);
108
+ let block;
109
+ if (specRewire) {
110
+ block = rewireSpecs(tagBlock);
111
+ }
112
+ return (0, _commentParser.stringify)(specRewire ? block : tagBlock);
109
113
  };
110
114
  utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {
111
115
  report(msg, handler ? fixer => {
@@ -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","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","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","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","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.setBlockDescription = (setter) => {\n const descLines = [];\n let startIdx;\n let endIdx;\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n startIdx, endIdx - startIdx, ...setter(info, seedTokens, descLines),\n );\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,GAAIN,MAAM,IAAK;IACtC,MAAMO,SAAS,GAAG,EAAE;IACpB,IAAIC,QAAQ;IACZ,IAAIC,MAAM;IACV,IAAIC,IAAI;IAERvE,KAAK,CAAC+C,MAAM,CAACC,IAAI,CAAC,CAAC;MACjBC,MAAM,EAAE;QACNM,WAAW;QACXvE,KAAK;QACLwF,SAAS;QACTpB,aAAa;QACbhE,GAAG;QACH8D;MACF;IACF,CAAC,EAAEa,GAAG,KAAK;MACT,IAAIS,SAAS,KAAK,KAAK,EAAE;QACvB,OAAO,KAAK;MACd;MAEA,IAAIH,QAAQ,KAAKI,SAAS,EAAE;QAC1BJ,QAAQ,GAAGN,GAAG;QACdQ,IAAI,GAAG;UACLC,SAAS;UACTpB,aAAa;UACbpE;QACF,CAAC;MACH;MAEA,IAAII,GAAG,IAAI8D,GAAG,EAAE;QACdoB,MAAM,GAAGP,GAAG;QACZ,OAAO,IAAI;MACb;MAEAK,SAAS,CAACX,IAAI,CAACF,WAAW,CAAC;MAC3B,OAAO,KAAK;IACd,CAAC,CAAC;;IAEF;IACA,IAAIa,SAAS,CAACF,MAAM,EAAE;MACpBlE,KAAK,CAAC+C,MAAM,CAAC2B,MAAM,CACjBL,QAAQ,EAAEC,MAAM,GAAGD,QAAQ,EAAE,GAAGR,MAAM,CAACU,IAAI,EAAEpG,UAAU,EAAEiG,SAAS,CAAC,CACpE;IACH;EACF,CAAC;EAEDzF,KAAK,CAACgG,mBAAmB,GAAG,CAACf,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,CAACiG,SAAS,GAAG,CAACxF,GAAG,EAAE,GAAG6D,MAAM,KAAK;IACpC,KAAK,MAAM,CACTc,GAAG,EACHc,GAAG,CACJ,IAAIzF,GAAG,CAAC2D,MAAM,CAAC+B,OAAO,EAAE,EAAE;MACzBD,GAAG,CAAC5B,MAAM,GAAG;QACX,GAAG4B,GAAG,CAAC5B,MAAM;QACb,GAAGA,MAAM,CAACc,GAAG;MACf,CAAC;IACH;EACF,CAAC;EAEDpF,KAAK,CAACoG,MAAM,GAAG,CAAC3F,GAAG,EAAE6D,MAAM,KAAK;IAC9B7D,GAAG,CAAC2D,MAAM,GAAG,CACX;MACA;MACEiC,MAAM,EAAE5F,GAAG,CAACF,IAAI;MAChB+D,MAAM,EAAE9E,UAAU,CAAC;QACjBqG,SAAS,EAAE,GAAG;QACdpB,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,CAACsG,SAAS,GAAG,CAACC,QAAQ,EAAE;IAC3BC,gBAAgB,GAAG,KAAK;IACxBC,eAAe,GAAG;EACpB,CAAC,GAAG,CAAC,CAAC,KAAK;IACT,MAAM;MACJrC,MAAM,EAAEsC;IACV,CAAC,GAAGrF,KAAK,CAACsF,IAAI,CAACJ,QAAQ,CAAC;IACxB,IAAIK,SAAS;IACb,MAAMC,WAAW,GAAGxF,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAC,CAACiC,MAAM;IAC1CK,SAAS,CAACrC,IAAI,CAAC,CAAC;MACdgC;IACF,CAAC,EAAES,MAAM,KAAK;MACZ,MAAMC,WAAW,GAAG1F,KAAK,CAAC+C,MAAM,CAAC4C,SAAS,CAAC,CAAC;QAC1CX,MAAM,EAAEY;MACV,CAAC,KAAK;QACJ,OAAOZ,MAAM,KAAKY,SAAS;MAC7B,CAAC,CAAC;MACF;MACA,IAAIF,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,IAAIG,WAAW,GAAG,CAAC;QACnBR,SAAS,CAACpD,KAAK,CAACwD,MAAM,GAAG,CAAC,CAAC,CAACzC,IAAI,CAAC,CAAC;UAChCC,MAAM,EAAE;YACN7D,GAAG;YACH8D,GAAG,EAAE4C;UACP;QACF,CAAC,KAAK;UACJ,IAAI,CAAC1G,GAAG,IAAI,CAAC0G,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;UACJZ,SAAS;UACTtB;QACF,CAAC,GAAGlD,KAAK,CAAC+C,MAAM,CAACgD,SAAS,CAAC,CAAC9C,MAAM;;QAElC;QACA,IAAI,CAACkC,gBAAgB,KAAKjC,GAAG,IAAIsB,SAAS,KAAK,KAAK,CAAC,EAAE;UACrD,MAAM;YACJvB;UACF,CAAC,GAAGjD,KAAK,CAAC+C,MAAM,CAACgD,SAAS,CAAC;UAC3B,KAAK,MAAMC,IAAI,IAAI,CACjB,KAAK,EACL,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,CACd,EAAE;YACD/C,MAAM,CAAC+C,IAAI,CAAC,GAAG,EAAE;UACnB;QACF,CAAC,MAAM;UACLhG,KAAK,CAAC+C,MAAM,CAAC2B,MAAM,CAACqB,SAAS,EAAEF,WAAW,GAAGT,eAAe,CAAC;QAC/D;QAEAC,SAAS,CAACX,MAAM,CAACe,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,CACT3B,GAAG,EACHc,GAAG,CACJ,IAAI7E,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAACsD,SAAS,CAAC,CAACT,OAAO,EAAE,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGQ,WAAW,GAAGD,SAAS,GAAGxB,GAAG;IAC5C;;IAEA;IACA;IACA;EACF,CAAC;;EAEDpF,KAAK,CAACsH,MAAM,GAAG,CACbC,aAAa,EACblB,MAAM,GAAG,CAAC;IAAA,IAAAmB,WAAA,EAAAC,mBAAA;IAAA,QAAAD,WAAA,GAAAnG,KAAK,CAACsF,IAAI,CAACtF,KAAK,CAACsF,IAAI,CAACpB,MAAM,GAAG,CAAC,CAAC,cAAAiC,WAAA,wBAAAC,mBAAA,GAAjCD,WAAA,CAAmCpD,MAAM,CAAC,CAAC,CAAC,cAAAqD,mBAAA,uBAA5CA,mBAAA,CAA8CpB,MAAM;EAAA,QAAIhF,KAAK,CAAC+C,MAAM,CAAC4C,SAAS,CAAC,CAAC;IACxF1C,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,CAAC2B,MAAM,CAACM,MAAM,EAAE,CAAC,EAAE;MAC7BA,MAAM;MACNjC,MAAM,EAAE,EAAE;MACVE,MAAM,EAAE9E,UAAU,CAAC;QACjBqG,SAAS,EAAE,GAAG;QACdpB,aAAa,EAAE,GAAG;QAClBpE,KAAK,EAAEqB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAG,IAAG8G,aAAc,EAAC;QACxB,GAAGjD;MACL,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM4B,GAAG,IAAI7E,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAAC+C,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;EACF,CAAC;EAEDrG,KAAK,CAAC0H,YAAY,GAAG,MAAM;IACzB,IAAIC,SAAS;IACb,KAAK,MAAM;MACTtB,MAAM;MACN/B,MAAM,EAAE;QACN7D;MACF;IACF,CAAC,IAAIY,KAAK,CAAC+C,MAAM,EAAE;MACjB,IAAI3D,GAAG,EAAE;QACPkH,SAAS,GAAGtB,MAAM;QAClB;MACF;IACF;IAEA,OAAOsB,SAAS;EAClB,CAAC;EAED3H,KAAK,CAACR,UAAU,GAAGA,UAAU;EAE7BQ,KAAK,CAAC4H,WAAW,GAAItD,MAAM,IAAK;IAC9B,KAAK,MAAMuD,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;MACDvD,MAAM,CAACuD,IAAI,CAAC,GAAG,EAAE;IACnB;EACF,CAAC;EAED7H,KAAK,CAAC8H,OAAO,GAAG,CAACf,WAAW,EAAEzC,MAAM,KAAK;IAAA,IAAAyD,aAAA;IACvC,MAAM1B,MAAM,GAAG,CAAC,EAAA0B,aAAA,GAAA1G,KAAK,CAAC+C,MAAM,CAAC2C,WAAW,GAAG,CAAC,CAAC,cAAAgB,aAAA,uBAA7BA,aAAA,CAA+B1B,MAAM,KAAI,CAAC,IAAI,CAAC;IAC/DhF,KAAK,CAAC+C,MAAM,CAAC2B,MAAM,CAACgB,WAAW,EAAE,CAAC,EAAE;MAClCV,MAAM;MACNjC,MAAM,EAAE,EAAE;MACVE,MAAM,EAAE9E,UAAU,CAAC8E,MAAM;IAC3B,CAAC,CAAC;IAEF,KAAK,MAAM4B,GAAG,IAAI7E,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAAC+C,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;IACA;IACA;EACF,CAAC;;EAEDrG,KAAK,CAACgI,QAAQ,GAAG,CAACzB,QAAQ,EAAEE,eAAe,EAAEwB,QAAQ,KAAK;IACxD,MAAM;MACJ7D,MAAM,EAAEsC;IACV,CAAC,GAAGrF,KAAK,CAACsF,IAAI,CAACJ,QAAQ,CAAC;IACxB,IAAIK,SAAS;IACb,MAAMC,WAAW,GAAGxF,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAC,CAACiC,MAAM;IAC1CK,SAAS,CAACrC,IAAI,CAAC,CAAC;MACdgC;IACF,CAAC,KAAK;MACJ,MAAM6B,QAAQ,GAAGA,CAAA,KAAM;QACrB,OAAO;UACL7B,MAAM;UACNjC,MAAM,EAAE,EAAE;UACVE,MAAM,EAAE9E,UAAU,CAAC;YACjBqG,SAAS,EAAE,GAAG;YACdxF,KAAK,EAAEqB,MAAM,GAAG;UAClB,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAMyG,SAAS,GAAGA,CAAA,KAAM;QACtB,OAAOC,KAAK,CAACC,IAAI,CAAC;UAChB9C,MAAM,EAAE0C;QACV,CAAC,EAAEC,QAAQ,CAAC;MACd,CAAC;MAED,MAAMnB,WAAW,GAAG1F,KAAK,CAAC+C,MAAM,CAAC4C,SAAS,CAAC,CAAC;QAC1CX,MAAM,EAAEY,SAAS;QACjB3C,MAAM,EAAE;UACNC;QACF;MACF,CAAC,KAAK;QACJ,OAAO8B,MAAM,KAAKY,SAAS,IAAI,CAAC1C,GAAG;MACrC,CAAC,CAAC;MACF;MACA,IAAIwC,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,MAAMuB,KAAK,GAAGH,SAAS,EAAE;QACzB9G,KAAK,CAAC+C,MAAM,CAAC2B,MAAM,CAACgB,WAAW,GAAGN,eAAe,EAAE,CAAC,EAAE,GAAG6B,KAAK,CAAC;;QAE/D;QACA1B,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;;MAEA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CACT3B,GAAG,EACHc,GAAG,CACJ,IAAI7E,KAAK,CAAC+C,MAAM,CAACd,KAAK,CAACsD,SAAS,CAAC,CAACT,OAAO,EAAE,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGQ,WAAW,GAAGD,SAAS,GAAGxB,GAAG;IAC5C;EACF,CAAC;EAEDpF,KAAK,CAACuI,aAAa,GAAG,MAAM;IAC1B,MAAM;MACJnE,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;QACNkE,QAAQ;QACR9D,OAAO;QACP+D;MACF;IACF,CAAC,GAAGpH,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAC;;IAEnB;IACA,IAAI,CAACQ,WAAW,EAAE;MAChB,IAAI4D,QAAQ,EAAE;QACZA,QAAQ,GAAG,EAAE;MACf,CAAC,MAAM,IAAIC,QAAQ,EAAE;QACnBA,QAAQ,GAAG,EAAE;QACf;MACA,CAAC,MAAM,yIAA0I,IAAI/D,OAAO,EAAE;UAC5JA,OAAO,GAAG,EAAE;QACd;IACF;IAEA1E,KAAK,CAAC4H,WAAW,CAACtD,MAAM,CAAC;IAEzBtE,KAAK,CAAC8H,OAAO,CAAC,CAAC,EAAE;MACfjC,SAAS,EAAE,GAAG;MAEd;MACA;MACAjB,WAAW,EAAEA,WAAW,CAAC8D,OAAO,EAAE;MAClC/D,IAAI;MACJF,aAAa;MACb+D,QAAQ;MACR9D,OAAO;MACP+D,QAAQ;MACRpI,KAAK,EAAEqB,MAAM,GAAG,GAAG;MACnBjB,GAAG;MACH8B;IACF,CAAC,CAAC;IACFvC,KAAK,CAAC8H,OAAO,CAAC,CAAC,EAAE;MACfvD,GAAG,EAAE,IAAI;MACTC,OAAO;MACPnE,KAAK,EAAEqB,MAAM,GAAG;IAClB,CAAC,CAAC;EACJ,CAAC;EAED1B,KAAK,CAAC2I,YAAY,GAAIC,MAAM,IAAK;IAC/B,OAAOlI,mBAAU,CAACiI,YAAY,CAACC,MAAM,CAAC;EACxC,CAAC;EAED5I,KAAK,CAAC6I,yBAAyB,GAAIC,0BAA0B,IAAK;IAChE,OAAOpI,mBAAU,CAACmI,yBAAyB,CAACzH,IAAI,EAAE0H,0BAA0B,CAAC;EAC/E,CAAC;EAED9I,KAAK,CAAC+I,SAAS,GAAG,MAAM;IACtB,OAAOrI,mBAAU,CAACqI,SAAS,CAAC3H,IAAI,CAAC;EACnC,CAAC;EAEDpB,KAAK,CAACgJ,WAAW,GAAG,MAAM;IACxB,OAAO5H,IAAI,KACTA,IAAI,CAAC6H,SAAS,IACd7H,IAAI,CAACmB,IAAI,KAAK,kBAAkB,IAAInB,IAAI,CAAC8H,KAAK,CAACD,SAAS,IACxD,CACE,wBAAwB,EAAE,0BAA0B,CACrD,CAAC3G,QAAQ,CAAClB,IAAI,CAACmB,IAAI,CAAC,IACnBnB,IAAI,CAAC+H,WAAW,CAACF,SAAS,CAC7B;EACH,CAAC;EAEDjJ,KAAK,CAACoJ,aAAa,GAAG,MAAM;IAC1B,OAAO1I,mBAAU,CAAC0I,aAAa,CAAChI,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAACqJ,gBAAgB,GAAIxI,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,CAAC2I,gBAAgB,CAAChI,KAAK,EAAEsD,IAAI,CAAC;EACjD,CAAC;EAED3E,KAAK,CAACe,mBAAmB,GAAG,CAAC;IAC3BF,OAAO;IACPyI,uBAAuB,GAAG,KAAK;IAC/BC,iBAAiB,GAAG,KAAK;IACzBC,cAAc,GAAI,qBAAoB3I,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,CAACyJ,MAAM,CAAC5I,OAAO,CAAC,KAAKC,GAAG,KAAK,KAAK,IAAIE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAW,CAAC,EAAE;MAC5E,IAAIqI,uBAAuB,EAAE;QAC3B,OAAO;UACLpI,OAAO,EAAE,IAAI;UACbL;QACF,CAAC;MACH;MAEA,MAAMX,OAAO,GAAGc,QAAQ,IAAIF,GAAG,CAACZ,OAAO,IAAIsJ,cAAc;MACzDrJ,MAAM,CAACD,OAAO,EAAE,IAAI,EAAEF,KAAK,CAAC0J,OAAO,CAAC7I,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;MAEhD,OAAO,KAAK;IACd;IAEA,OAAOG,QAAQ,IAAI,CAACuI,iBAAiB,GAAGzI,GAAG,CAACG,WAAW,GAAGH,GAAG;EAC/D,CAAC;EAEDd,KAAK,CAAC2J,UAAU,GAAG,CAAChF,IAAI,EAAEiF,WAAW,KAAK;IACxC,OAAOlJ,mBAAU,CAACiJ,UAAU,CAAC9J,OAAO,EAAEE,IAAI,EAAE4E,IAAI,EAAEiF,WAAW,CAAC;EAChE,CAAC;EAED5J,KAAK,CAACyC,OAAO,GAAIoH,KAAK,IAAK;IACzB,OAAOnJ,mBAAU,CAAC+B,OAAO,CAACpB,KAAK,EAAEwI,KAAK,CAAC;EACzC,CAAC;EAED7J,KAAK,CAACyJ,MAAM,GAAI9E,IAAI,IAAK;IACvB,OAAOjE,mBAAU,CAAC+I,MAAM,CAACpI,KAAK,EAAEsD,IAAI,CAAC;EACvC,CAAC;EAED3E,KAAK,CAAC8J,YAAY,GAAInF,IAAI,IAAK;IAC7B,OAAOjE,mBAAU,CAACoJ,YAAY,CAACnF,IAAI,CAAC;EACtC,CAAC;EAED3E,KAAK,CAAC+J,qBAAqB,GAAIpF,IAAI,IAAK;IACtC,OAAOjE,mBAAU,CAACqJ,qBAAqB,CAACpF,IAAI,CAAC;EAC/C,CAAC;EAED3E,KAAK,CAACgK,SAAS,GAAG,MAAM;IAAA,IAAAC,iBAAA;IACtB,IACEjI,kBAAkB,KAAK,KAAK,KACzBhC,KAAK,CAACyJ,MAAM,CAAC,QAAQ,CAAC,IAAIzJ,KAAK,CAACkK,WAAW,CAAC,QAAQ,CAAC,CAAC,IACzDnI,oBAAoB,KAAK,KAAK,KAC3B/B,KAAK,CAACyJ,MAAM,CAAC,UAAU,CAAC,IAAIzJ,KAAK,CAACkK,WAAW,CAAC,UAAU,CAAC,CAAC,IAC7DjI,sBAAsB,KAAK,KAAK,KAC7BjC,KAAK,CAACyJ,MAAM,CAAC,YAAY,CAAC,IAAIzJ,KAAK,CAACkK,WAAW,CAAC,YAAY,CAAC,CAAC,IAEjEhI,2BAA2B,KACxBlC,KAAK,CAACyC,OAAO,CAAC,CACb,UAAU,EAAE,SAAS,CACtB,CAAC,IACAzC,KAAK,CAACkK,WAAW,CAAC,UAAU,CAAC,IAC3BlK,KAAK,CAACkK,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IAEA,IAAIxJ,mBAAU,CAACyJ,mBAAmB,CAChC9I,KAAK,EAAED,IAAI,EAAEvB,OAAO,EAAE4B,UAAU,CAAC2I,IAAI,CAACC,MAAM,CAC7C,EAAE;MACD,OAAO,IAAI;IACb;IAEA,MAAMC,UAAU,GAAG,EAAAL,iBAAA,GAAApK,OAAO,CAAC0K,OAAO,CAAC,CAAC,CAAC,cAAAN,iBAAA,uBAAlBA,iBAAA,CAAoBK,UAAU,KAAI,CACnD,YAAY,EACZ,IAAGvK,IAAI,KAAK,SAAS,GAAG,EAAE,GAAG,CAC3B,YAAY,CACb,EACF;IACD,IAAIuK,UAAU,CAAC/E,MAAM,IAAIvF,KAAK,CAACwK,cAAc,CAACF,UAAU,CAAC,CAAC/E,MAAM,EAAE;MAChE,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC;EAED,KAAK,MAAMkF,MAAM,IAAI,CACnB,0BAA0B,EAC1B,0BAA0B,CAC3B,EAAE;IACDzK,KAAK,CAACyK,MAAM,CAAC,GAAG,CAAC5J,OAAO,EAAE6J,aAAa,KAAK;MAC1C,MAAMC,MAAM,GAAGjK,mBAAU,CAAC+J,MAAM,CAAC,CAAC5J,OAAO,CAAC;MAC1C,IAAI8J,MAAM,EAAE;QACV,OAAO,IAAI;MACb;MAEA,IAAI,CAACD,aAAa,EAAE;QAClB,OAAO,KAAK;MACd;MAEA,MAAME,WAAW,GAAGF,aAAa,CAACrG,IAAI,CAAEwG,YAAY,IAAK;QACvD,OAAOnK,mBAAU,CAAC+J,MAAM,CAAC,CAAC5J,OAAO,EAAEgK,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;IACDzK,KAAK,CAACyK,MAAM,CAAC,GAAG,CAAC5J,OAAO,EAAE6J,aAAa,KAAK;MAC1C,MAAMC,MAAM,GAAGjK,mBAAU,CAAC+J,MAAM,CAAC,CAAC5J,OAAO,CAAC;MAC1C,IAAI,CAAC8J,MAAM,EAAE;QACX,OAAO,KAAK;MACd;;MAEA;;MAEA,MAAMC,WAAW,GAAGF,aAAa,CAACK,KAAK,CAAEF,YAAY,IAAK;QACxD,OAAOnK,mBAAU,CAAC+J,MAAM,CAAC,CAAC5J,OAAO,EAAEgK,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;IACDzK,KAAK,CAACyK,MAAM,CAAC,GAAI5J,OAAO,IAAK;MAC3B,OAAOH,mBAAU,CAAC+J,MAAM,CAAC,CAAC5J,OAAO,CAAC;IACpC,CAAC;EACH;EAEAb,KAAK,CAACgL,sBAAsB,GAAIC,GAAG,IAAK;IACtC,OAAOvK,mBAAU,CAACsK,sBAAsB,CAACC,GAAG,EAAE1J,QAAQ,CAAC2J,cAAc,CAAC;EACxE,CAAC;EAEDlL,KAAK,CAACmL,qBAAqB,GAAI1K,GAAG,IAAK;IACrC,OAAOC,mBAAU,CAACyK,qBAAqB,CAAC1K,GAAG,EAAEc,QAAQ,CAACxB,IAAI,CAAC;EAC7D,CAAC;EAEDC,KAAK,CAACoL,yCAAyC,GAAG,CAACC,kBAAkB,EAAEC,WAAW,KAAK;IACrF,OAAO5K,mBAAU,CAAC0K,yCAAyC,CAAChK,IAAI,EAAEiK,kBAAkB,EAAEC,WAAW,CAAC;EACpG,CAAC;EAEDtL,KAAK,CAACuL,aAAa,GAAG,MAAM;IAC1B,IAAI,CACF,wBAAwB,EAAE,0BAA0B,CACrD,CAACjJ,QAAQ,CAAClB,IAAI,CAACmB,IAAI,CAAC,EAAE;MACrB,OAAO7B,mBAAU,CAAC6K,aAAa,CAACnK,IAAI,CAAC+H,WAAW,CAAC;IACnD;IAEA,OAAOzI,mBAAU,CAAC6K,aAAa,CAACnK,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAACwL,mBAAmB,GAAG,MAAM;IAChC,OAAO9K,mBAAU,CAAC6K,aAAa,CAACnK,IAAI,EAAE,IAAI,CAAC;EAC7C,CAAC;EAEDpB,KAAK,CAACyL,aAAa,GAAG,MAAM;IAC1B,OAAO/K,mBAAU,CAAC+K,aAAa,CAACrK,IAAI,CAAC;EACvC,CAAC;EAEDpB,KAAK,CAAC0L,OAAO,GAAG,MAAM;IACpB,OAAOtK,IAAI,CAACuK,KAAK;EACnB,CAAC;EAED3L,KAAK,CAAC0J,OAAO,GAAI7I,OAAO,IAAK;IAC3B,OAAOb,KAAK,CAAC4L,UAAU,CAAEvE,IAAI,IAAK;MAChC,OAAOA,IAAI,CAAC5G,GAAG,KAAKI,OAAO;IAC7B,CAAC,CAAC;EACJ,CAAC;EAEDb,KAAK,CAACwK,cAAc,GAAIqB,OAAO,IAAK;IAClC,OAAO7L,KAAK,CAAC4L,UAAU,CAAEnL,GAAG,IAAK;MAC/B,OAAOoL,OAAO,CAACvJ,QAAQ,CAAC7B,GAAG,CAACA,GAAG,CAAC;IAClC,CAAC,CAAC;EACJ,CAAC;EAEDT,KAAK,CAAC4L,UAAU,GAAIE,MAAM,IAAK;IAC7B,OAAOpL,mBAAU,CAACkL,UAAU,CAACvK,KAAK,CAACsF,IAAI,EAAEmF,MAAM,CAAC;EAClD,CAAC;EAED9L,KAAK,CAAC+L,aAAa,GAAIpF,IAAI,IAAK;IAC9B,OAAOjG,mBAAU,CAACqL,aAAa,CAAClM,OAAO,EAAEE,IAAI,EAAE4G,IAAI,EAAE7G,iBAAiB,CAAC;EACzE,CAAC;EAEDE,KAAK,CAACgM,YAAY,GAAInL,OAAO,IAAK;IAChC,MAAM;MACJ8F;IACF,CAAC,GAAG9G,OAAO,CAAC0K,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO0B,OAAO,CAACtF,IAAI,IAAIA,IAAI,CAACrE,QAAQ,CAACzB,OAAO,CAAC,CAAC;EAChD,CAAC;EAEDb,KAAK,CAACkM,YAAY,GAAG,MAAM;IACzB,OAAO,CACL,GAAGvK,SAAS,EAAEP,IAAI,CACnB,CAAC+K,OAAO,EAAE,CAACC,IAAI,CAAEC,MAAM,IAAK;MAC3B,OAAOA,MAAM,IAAI,CACf,kBAAkB,EAAE,iBAAiB,CACtC,CAAC/J,QAAQ,CAAC+J,MAAM,CAAC9J,IAAI,CAAC;IACzB,CAAC,CAAC,IAAI,IAAI;EACZ,CAAC;EAEDvC,KAAK,CAACsM,aAAa,GAAG,MAAM;IAC1B,MAAMC,SAAS,GAAGvM,KAAK,CAACkM,YAAY,EAAE;IAEtC,IAAI,CAACK,SAAS,EAAE;MACd,OAAO,IAAI;IACb;IAEA,MAAMC,cAAc,GAAG,IAAAC,6BAAe,EAAC5K,UAAU,EAAE0K,SAAS,EAAE;MAC5DpK,QAAQ;MACRC;IACF,CAAC,CAAC;IAEF,IAAIoK,cAAc,EAAE;MAClB,OAAO,IAAAE,0BAAY,EAACF,cAAc,EAAE,EAAE,CAAC;IACzC;IAEA,OAAO,IAAI;EACb,CAAC;EAEDxM,KAAK,CAACkK,WAAW,GAAIrJ,OAAO,IAAK;IAC/B,MAAM8L,UAAU,GAAG3M,KAAK,CAACsM,aAAa,EAAE;IAExC,OAAOL,OAAO,CAACU,UAAU,CAAC,IAAIjM,mBAAU,CAAC+I,MAAM,CAACkD,UAAU,EAAE9L,OAAO,CAAC;EACtE,CAAC;EAEDb,KAAK,CAAC4M,mBAAmB,GAAG,CAAC/L,OAAO,EAAEgM,YAAY,EAAEvD,uBAAuB,GAAG,KAAK,KAAK;IACtF,MAAM/B,aAAa,GAAGvH,KAAK,CAACe,mBAAmB,CAAC;MAC9CuI,uBAAuB;MACvBzI;IACF,CAAC,CAAC;IACF,IAAI,CAAC0G,aAAa,IAChB+B,uBAAuB,IAAI/B,aAAa,IAAI,OAAOA,aAAa,KAAK,QAAQ,EAC7E;MACA;IACF;IAEA,MAAMuF,iBAAiB,GAAGzL,KAAK,CAACsF,IAAI,CAACmF,MAAM,CAAC,CAAC;MAC3CrL;IACF,CAAC,KAAK;MACJ,OAAOA,GAAG,KAAK8G,aAAa;IAC9B,CAAC,CAAC;IAEF,KAAK,MAAMwF,gBAAgB,IAAID,iBAAiB,EAAE;MAChDD,YAAY,CAACE,gBAAgB,EAAExF,aAAa,CAAC;IAC/C;EACF,CAAC;EAED,OAAOvH,KAAK;AACd,CAAC;AAED,MAAMgN,WAAW,GAAInN,OAAO,IAAK;EAAA,IAAAoN,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,MAAM5M,QAAQ,GAAG;IACf;IACA6M,aAAa,EAAEnC,OAAO,EAAAgB,qBAAA,GAACpN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA4L,qBAAA,uBAAtBA,qBAAA,CAAwBmB,aAAa,CAAC;IAC7DC,cAAc,EAAEpC,OAAO,EAAAiB,sBAAA,GAACrN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA6L,sBAAA,uBAAtBA,sBAAA,CAAwBmB,cAAc,CAAC;IAC/DlM,QAAQ,EAAEmM,MAAM,CAAC,EAAAnB,sBAAA,GAAAtN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA8L,sBAAA,uBAAtBA,sBAAA,CAAwBhL,QAAQ,KAAI,CAAC,CAAC;IACvDC,QAAQ,EAAEkM,MAAM,CAAC,EAAAlB,sBAAA,GAAAvN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA+L,sBAAA,uBAAtBA,sBAAA,CAAwBhL,QAAQ,KAAI,CAAC,CAAC;IAEvD;IACAtC,iBAAiB,EAAE,EAAAuN,sBAAA,GAAAxN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAgM,sBAAA,uBAAtBA,sBAAA,CAAwBvN,iBAAiB,KAAI,CAAC,CAAC;IAElE;IACAyO,cAAc,EAAE,EAAAjB,sBAAA,GAAAzN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAiM,sBAAA,uBAAtBA,sBAAA,CAAwBiB,cAAc,KAAI,CAAC,CAAC;IAE5D;IACArD,cAAc,EAAE,EAAAqC,sBAAA,GAAA1N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAkM,sBAAA,uBAAtBA,sBAAA,CAAwBrC,cAAc,KAAI,CAAC,CAAC;IAE5D;IACA;IACAnJ,oBAAoB,GAAAyL,sBAAA,GAAE3N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAmM,sBAAA,uBAAtBA,sBAAA,CAAwBzL,oBAAoB;IAClEC,kBAAkB,GAAAyL,sBAAA,GAAE5N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAoM,sBAAA,uBAAtBA,sBAAA,CAAwBzL,kBAAkB;IAC9DC,sBAAsB,GAAAyL,uBAAA,GAAE7N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAqM,uBAAA,uBAAtBA,uBAAA,CAAwBzL,sBAAsB;IACtEC,2BAA2B,GAAAyL,uBAAA,GAAE9N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAsM,uBAAA,uBAAtBA,uBAAA,CAAwBzL,2BAA2B;IAEhF;IACAsM,iCAAiC,GAAAZ,uBAAA,GAAE/N,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAuM,uBAAA,uBAAtBA,uBAAA,CAAwBY,iCAAiC;IAE5F;IACAzO,IAAI,EAAE,EAAA8N,uBAAA,GAAAhO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAAwM,uBAAA,uBAAtBA,uBAAA,CAAwB9N,IAAI,MAC/B,CAAA+N,mBAAA,GAAAjO,OAAO,CAAC4O,UAAU,cAAAX,mBAAA,eAAlBA,mBAAA,CAAoBxL,QAAQ,CAAC,oBAAoB,CAAC,KAAAyL,qBAAA,GACnDlO,OAAO,CAAC6O,eAAe,cAAAX,qBAAA,gBAAAC,sBAAA,GAAvBD,qBAAA,CAAyBY,MAAM,cAAAX,sBAAA,gBAAAC,sBAAA,GAA/BD,sBAAA,CAAiC5D,IAAI,cAAA6D,sBAAA,gBAAAC,sBAAA,GAArCD,sBAAA,CAAuCtJ,IAAI,cAAAuJ,sBAAA,eAA3CA,sBAAA,CAA6C5L,QAAQ,CAAC,YAAY,CAAC,GACjE,YAAY,GAAG,OAAO,CAAC;IAE3B;IACAsM,QAAQ,GAAAT,uBAAA,GAAEtO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,cAAA8M,uBAAA,uBAAtBA,uBAAA,CAAwBS;EACpC,CAAC;EACD;;EAEAlO,mBAAU,CAACmO,eAAe,CAACtN,QAAQ,CAACxB,IAAI,CAAC;EACzC,IAAI;IACFW,mBAAU,CAACoO,oBAAoB,CAACvN,QAAQ,CAAC2J,cAAc,CAAC;EAC1D,CAAC,CAAC,OAAO6D,KAAK,EAAE;IACdlP,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL,OAAO,EAAE6O,KAAK,CAAC7O;IACjB,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,OAAOqB,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALAyN,OAAA,CAAAhC,WAAA,GAAAA,WAAA;AAMA,MAAMiC,UAAU,GAAGA,CAACpP,OAAO,EAAEqP,WAAW,KAAK;EAC3C,MAAM/O,MAAM,GAAGA,CAACD,OAAO,EAAEiP,GAAG,GAAG,IAAI,EAAEC,QAAQ,GAAG,IAAI,EAAEnM,IAAI,GAAG,IAAI,KAAK;IACpE,IAAI7C,GAAG;IAEP,IAAIgP,QAAQ,EAAE;MACZ,IAAI,EAAE,MAAM,IAAIA,QAAQ,CAAC,EAAE;QACzBA,QAAQ,CAAC7O,IAAI,GAAG6O,QAAQ,CAAChL,MAAM,CAAC,CAAC,CAAC,CAACiC,MAAM;MAC3C;MAEA,MAAMgJ,UAAU,GAAGH,WAAW,CAAC9O,GAAG,CAACC,KAAK,CAACE,IAAI,GAAG6O,QAAQ,CAAC7O,IAAI;MAE7DH,GAAG,GAAG;QACJmE,GAAG,EAAE;UACHjE,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE8O;QACR,CAAC;QACDhP,KAAK,EAAE;UACLC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE8O;QACR;MACF,CAAC;;MAED;MACA;MACA,IAAID,QAAQ,CAAC9O,MAAM,EAAE;QACnB,MAAMgP,SAAS,GAAGJ,WAAW,CAAC9O,GAAG,CAACC,KAAK,CAACC,MAAM,GAAG8O,QAAQ,CAAC9O,MAAM;QAEhEF,GAAG,CAACmE,GAAG,CAACjE,MAAM,GAAGgP,SAAS;QAC1BlP,GAAG,CAACC,KAAK,CAACC,MAAM,GAAGgP,SAAS;MAC9B;IACF;IAEAzP,OAAO,CAACM,MAAM,CAAC;MACb8C,IAAI;MACJkM,GAAG;MACH/O,GAAG;MACHF,OAAO;MACPkB,IAAI,EAAE8N;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAO/O,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMoP,OAAO,GAAGA,CACd3J,IAAI,EACJlE,MAAM,EAAEL,KAAK,EACbI,UAAU,EAAE5B,OAAO,EAAEyI,KAAK,EAAEhH,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EACrDM,UAAU,EAAE2N,QAAQ,EAAEC,KAAK,EAAEjO,YAAY,KACtC;EACH,MAAMrB,MAAM,GAAG8O,UAAU,CAACpP,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,CAACiO,aAAa,IAAInO,QAAQ,CAAC8M,cAAc,IACpDrO,KAAK,CAACyJ,MAAM,CAAC,UAAU,CAAC,EACxB;IACA;EACF;EAEA,IACE,CAAChI,UAAU,CAACkO,YAAY,IAAIpO,QAAQ,CAAC6M,aAAa,KAEhDpO,KAAK,CAACyJ,MAAM,CAAC,SAAS,CAAC,IACvBpI,KAAK,CAACsF,IAAI,CACPmF,MAAM,CAAC,CAAC;IACPrL;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;EAEA4K,QAAQ,CAAC;IACP3P,OAAO;IACPH,WAAW;IACXgC,MAAM;IACNkE,IAAI;IACJpE,YAAY;IACZH,KAAK;IACLC,SAAS;IACTF,IAAI;IACJjB,MAAM;IACNoB,QAAQ;IACRM,UAAU;IACV4N,KAAK;IACLzP;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM4P,iBAAiB,GAAG,SAAAA,CAAUtH,KAAK,EAAEhH,SAAS,EAAE;EACpD,MAAMuO,UAAU,GAAGvH,KAAK,CAAChH,SAAS,CAAClB,GAAG,CAACC,KAAK,CAACE,IAAI,GAAG,CAAC,CAAC;EACtD,MAAMuP,KAAK,GAAGD,UAAU,CAAClM,MAAM,CAAC,CAAC,CAAC,CAACoM,MAAM,CAACzO,SAAS,CAAClB,GAAG,CAACC,KAAK,CAACC,MAAM,CAAC;EACrE,MAAM0P,IAAI,GAAG,IAAAtD,0BAAY,EAACpL,SAAS,EAAE,EAAE,CAAC;EAExC,OAAO,CACLwO,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,EAAE/N,UAAU,EAAEmN,QAAQ,EAAEsB,uBAAuB,KAAK;EACpF,MAAMC,aAAa,GAAG,IAAIC,GAAG,EAAE;EAE/B,IAAIpN,OAAO;EACX,IAAIzB,QAAQ;EACZ,MAAM8O,YAAY,GAAGA,CAACxQ,OAAO,EAAEuB,IAAI,EAAEkP,UAAU,EAAEb,KAAK,EAAEc,QAAQ,KAAK;IACnE,MAAM1O,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;IAC1C,MAAM;MACJwG;IACF,CAAC,GAAGzG,UAAU;IAEd,MAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;IAC9C,KAAK,MAAMD,SAAS,IAAIgP,UAAU,EAAE;MAClC,IAAI,CAAE,YAAY,CAAE5M,IAAI,CAAC7B,UAAU,CAACuB,OAAO,CAAC9B,SAAS,CAAC,CAAC,EAAE;QACvD;MACF;MAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAGuO,iBAAiB,CACnBtH,KAAK,EAAEhH,SAAS,CACjB;MAED,IAAI4O,uBAAuB,EAAE;QAC3B,KAAK,MAAM,CACT9K,GAAG,EACH;UACEoL;QACF,CAAC,CACF,IAAI5B,QAAQ,CAACzI,OAAO,EAAE,EAAE;UACvB,IAAIqK,OAAO,IAAIxN,OAAO,CAACwN,OAAO,EAAEnP,KAAK,CAAC,KAAK,KAAK,EAAE;YAChD;UACF;UAEAkO,OAAO,CACL;YACEiB,OAAO;YACP5J,SAAS,EAAExB,GAAG;YACdqL,QAAQ,EAAErP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;UAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV5B,OAAO,EACPyI,KAAK,EACLhH,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACV2N,QAAQ,EACRC,KAAK,EACL,IAAI,CACL;QACH;QAEA;MACF;MAEA,IAAIiB,WAAW;MACf,IAAI9J,SAAS;MACb;MACA,IAAIgI,QAAQ,IAAIA,QAAQ,CAAC7D,KAAK,CAAC,CAAC;QAC9ByF;MACF,CAAC,EAAEpL,GAAG,KAAK;QACTsL,WAAW,GAAGF,OAAO;QACrB5J,SAAS,GAAGxB,GAAG;QAEf,OAAOoL,OAAO,IAAIxN,OAAO,CAACwN,OAAO,EAAEnP,KAAK,CAAC,KAAK,KAAK;MACrD,CAAC,CAAC,EAAE;QACF;MACF;MAEAkO,OAAO,CACLmB,WAAW,GAAG;QACZF,OAAO,EAAEE,WAAW;QACpB9J,SAAS;QACT6J,QAAQ,EAAErP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,GAAG;QACFqE,SAAS;QACT6J,QAAQ,EAAErP,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB;MAClB,CAAC,EACDb,MAAM,EACNL,KAAK,EACLI,UAAU,EACV5B,OAAO,EACPyI,KAAK,EACLhH,SAAS,EACTF,IAAI,EACJG,QAAQ,EACRM,UAAU,EACV2N,QAAQ,EACRC,KAAK,EACL,IAAI,CACL;IACH;IAEA,IAAIc,QAAQ,IAAI9O,UAAU,CAACkP,IAAI,EAAE;MAC/BlP,UAAU,CAACkP,IAAI,CAAC;QACd9Q,OAAO;QACP0B,QAAQ;QACRkO,KAAK;QACLzP;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAED,OAAO;IACL4Q,MAAMA,CAAE/Q,OAAO,EAAE;MACf,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1CP,QAAQ,GAAGyL,WAAW,CAACnN,OAAO,CAAC;MAC/B,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAIqN,QAAQ,EAAE;QACZ5L,OAAO,GAAG,IAAA6N,4BAAc,EAACtP,QAAQ,CAAC;MACpC;MAEA,MAAMkO,KAAK,GAAG,CAAC,CAAC;MAEhB,OAAO;QACL,gBAAgBqB,CAAE1P,IAAI,EAAE;UACtB,MAAM8N,WAAW,GAAG,IAAAzC,6BAAe,EAAC5K,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;UAC/D,IAAI,CAACE,UAAU,CAACsP,UAAU,IAAIZ,aAAa,CAACa,GAAG,CAAC9B,WAAW,CAAC,EAAE;YAC5D;UACF;UAEA,IAAI,CAACA,WAAW,EAAE;YAChB,IAAIzN,UAAU,CAACwP,UAAU,EAAE;cACzBxP,UAAU,CAACwP,UAAU,CAAC;gBACpB7P,IAAI;gBACJqO;cACF,CAAC,CAAC;YACJ;YAEA;UACF;UAEAU,aAAa,CAACe,GAAG,CAAChC,WAAW,CAAC;UAC9BmB,YAAY,CAACxQ,OAAO,EAAEuB,IAAI,EAAE,CAC1B8N,WAAW,CACZ,EAAEO,KAAK,CAAC;QACX,CAAC;QACD,cAAc0B,CAAA,EAAI;UAChB,MAAMC,WAAW,GAAGvP,UAAU,CAACwP,cAAc,EAAE;UAC/C,MAAMC,cAAc,GAAGF,WAAW,CAACtF,MAAM,CAAE1K,IAAI,IAAK;YAClD,OAAO,CAAC+O,aAAa,CAACa,GAAG,CAAC5P,IAAI,CAAC;UACjC,CAAC,CAAC;UAEFiP,YAAY,CAACxQ,OAAO,EAAE,IAAI,EAAEyR,cAAc,EAAE7B,KAAK,EAAE,IAAI,CAAC;QAC1D;MACF,CAAC;IACH,CAAC;IACDrF,IAAI,EAAE3I,UAAU,CAAC2I;EACnB,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMmH,SAAS,GAAGA,CAAC/B,QAAQ,EAAE/N,UAAU,KAAK;EAC1C,OAAO;IACLmP,MAAMA,CAAE/Q,OAAO,EAAE;MACf,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1C,MAAMP,QAAQ,GAAGyL,WAAW,CAACnN,OAAO,CAAC;MACrC,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,OAAO;QACL,cAAc4P,CAAA,EAAI;UAChB,MAAMC,WAAW,GAAGvP,UAAU,CAACwP,cAAc,EAAE;UAC/C,MAAM;YACJ/I;UACF,CAAC,GAAGzG,UAAU;UACd,MAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAC;UAE9CiO,QAAQ,CAAC;YACP4B,WAAW;YACXvR,OAAO;YACPyI,KAAK;YACL2G,UAAU;YACV1N,QAAQ;YACRM,UAAU;YACV7B;UACF,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CAAC;IACDoK,IAAI,EAAE3I,UAAU,CAAC2I;EACnB,CAAC;AACH,CAAC;AAQD;AACA;AACA;AACA;AACe,SAASoH,YAAYA,CAAEhC,QAAQ,EAAE/N,UAAU,EAAE;EAAA,IAAAgQ,gBAAA;EAC1D,MAAMC,QAAQ,GAAGjQ,UAAU,aAAVA,UAAU,wBAAAgQ,gBAAA,GAAVhQ,UAAU,CAAE2I,IAAI,cAAAqH,gBAAA,uBAAhBA,gBAAA,CAAkBlP,IAAI;EACvC,IAAI,CAACmP,QAAQ,IAAI,CAAC,CAChB,SAAS,EAAE,YAAY,EAAE,QAAQ,CAClC,CAACpP,QAAQ,CAACoP,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,IAAIlQ,UAAU,CAAC8P,SAAS,EAAE;IACxB,OAAOA,SAAS,CAAC/B,QAAQ,EAAE/N,UAAU,CAAC;EACxC;EAEA,IAAIA,UAAU,CAACwO,gBAAgB,EAAE;IAC/B,OAAOA,gBAAgB,CAACT,QAAQ,EAAE/N,UAAU,CAAC;EAC/C;EAEA,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImP,MAAMA,CAAE/Q,OAAO,EAAE;MACf,MAAM0B,QAAQ,GAAGyL,WAAW,CAACnN,OAAO,CAAC;MACrC,IAAI,CAAC0B,QAAQ,EAAE;QACb,OAAO,CAAC,CAAC;MACX;MAEA,IAAIqN,QAAQ;MACZ,IAAInN,UAAU,CAACmQ,eAAe,IAAInQ,UAAU,CAACoQ,eAAe,IAAIpQ,UAAU,CAACqQ,YAAY,EAAE;QAAA,IAAAC,kBAAA,EAAAC,SAAA,EAAAC,UAAA;QACvFrD,QAAQ,GAAGnN,UAAU,CAACqQ,YAAY,KAAAC,kBAAA,GAAIlS,OAAO,CAAC0K,OAAO,CAAC,CAAC,CAAC,cAAAwH,kBAAA,eAAlBA,kBAAA,CAAoBG,KAAK,GAC7DrS,OAAO,CAAC0K,OAAO,CAAC,CAAC,CAAC,CAAC2H,KAAK,GACxBxR,mBAAU,CAACyR,gBAAgB,CAACtS,OAAO,EAAE4B,UAAU,CAACmQ,eAAe,EAAEnQ,UAAU,CAAC2Q,iBAAiB,GAAG,CAAC,CAAC,GAAG7Q,QAAQ,CAAC;QAEhH,IAAIqN,QAAQ,EAAE;UACZA,QAAQ,GAAGA,QAAQ,CAACyD,GAAG,CAAEjT,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,MAAMkT,WAAW,IAAAN,SAAA,GAAGpD,QAAQ,cAAAoD,SAAA,uBAARA,SAAA,CAAU1P,QAAQ,CAAC,KAAK,CAAC;QAC7C,MAAMiQ,YAAY,GAAG,CAACD,WAAW,MAAAL,UAAA,GAAIrD,QAAQ,cAAAqD,UAAA,uBAARA,UAAA,CAAU7F,IAAI,CAAEoG,IAAI,IAAK;UAC5D,OAAO,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAE3S,OAAO,MAAK,KAAK;QAChC,CAAC,CAAC;QACF,IAAIyS,WAAW,IAAIC,YAAY,EAAE;UAC/B,OAAOtC,gBAAgB,CACrBT,QAAQ,EAAE/N,UAAU,EAAE8Q,YAAY,GAAG3D,QAAQ,GAAG,IAAI,EAAEnN,UAAU,CAACqQ,YAAY,CAC9E,CAAClB,MAAM,CAAC/Q,OAAO,CAAC;QACnB;MACF;MAEA,MAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAa,EAAE;MAC1C,MAAM;QACJwG;MACF,CAAC,GAAGzG,UAAU;MAEd,MAAM4N,KAAK,GAAG,CAAC,CAAC;MAEhB,MAAMgD,UAAU,GAAGA,CAAC7M,IAAI,EAAE5C,OAAO,EAAE5B,IAAI,KAAK;QAC1C,MAAME,SAAS,GAAG,IAAAmL,6BAAe,EAAC5K,UAAU,EAAET,IAAI,EAAEG,QAAQ,CAAC;QAC7D,IAAI,CAACD,SAAS,EAAE;UACd;QACF;QAEA,MAAM,CACJI,MAAM,EACNL,KAAK,CACN,GAAGuO,iBAAiB,CACnBtH,KAAK,EAAEhH,SAAS,CACjB;QAED;QACE;QACA;QACA;QACA0B,OAAO,IAAIA,OAAO,CAAC3B,KAAK,CAAC,KAAK,KAAK,EACnC;UACA;QACF;QAEAkO,OAAO,CACL3J,IAAI,EAAElE,MAAM,EAAEL,KAAK,EAAEI,UAAU,EAAE5B,OAAO,EAAEyI,KAAK,EAAEhH,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAAEM,UAAU,EAAE2N,QAAQ,EAAEC,KAAK,CACxG;MACH,CAAC;MAED,IAAIiD,aAAa,GAAG,CAAC,CAAC;MAEtB,IAAI9D,QAAQ,KACVnN,UAAU,CAACmQ,eAAe,IAAInQ,UAAU,CAACoQ,eAAe,IAAIpQ,UAAU,CAACqQ,YAAY,CACpF,EAAE;QACDY,aAAa,GAAGhS,mBAAU,CAACiS,gBAAgB,CACzC/D,QAAQ,EACR6D,UAAU,EACV,IAAA5B,4BAAc,EAACtP,QAAQ,CAAC,CACzB;MACH,CAAC,MAAM;QACL,KAAK,MAAMsG,IAAI,IAAI,CACjB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,CACpB,EAAE;UACD6K,aAAa,CAAC7K,IAAI,CAAC,GAAG4K,UAAU,CAACG,IAAI,CAAC,IAAI,EAAE;YAC1CnC,QAAQ,EAAE5I;UACZ,CAAC,EAAE,IAAI,CAAC;QACV;MACF;MAEA,IAAIpG,UAAU,CAACkP,IAAI,EAAE;QACnB+B,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM;UACpCjR,UAAU,CAACkP,IAAI,CAAC;YACd9Q,OAAO;YACP0B,QAAQ;YACRkO;UACF,CAAC,CAAC;QACJ,CAAC;MACH;MAEA,OAAOiD,aAAa;IACtB,CAAC;IACDtI,IAAI,EAAE3I,UAAU,CAAC2I;EACnB,CAAC;AACH"}
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","block","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","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","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","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 let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(specRewire ? block : 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.setBlockDescription = (setter) => {\n const descLines = [];\n let startIdx;\n let endIdx;\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n startIdx, endIdx - startIdx, ...setter(info, seedTokens, descLines),\n );\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":"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"}
@@ -7,17 +7,25 @@ exports.default = void 0;
7
7
  var _defaultTagOrder = _interopRequireDefault(require("../defaultTagOrder"));
8
8
  var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ // eslint-disable-next-line complexity -- Temporary
10
11
  var _default = (0, _iterateJsdoc.default)(({
11
12
  context,
12
13
  jsdoc,
13
14
  utils
14
15
  }) => {
15
16
  const {
17
+ linesBetween = 1,
16
18
  tagSequence = _defaultTagOrder.default,
17
- alphabetizeExtras = false
19
+ alphabetizeExtras = false,
20
+ reportTagGroupSpacing = true,
21
+ reportIntraTagGroupSpacing = true
18
22
  } = context.options[0] || {};
19
- const otherPos = tagSequence.indexOf('-other');
20
- const endPos = otherPos > -1 ? otherPos : tagSequence.length;
23
+ const tagList = tagSequence.flatMap(obj => {
24
+ /* typeof obj === 'string' ? obj : */
25
+ return obj.tags;
26
+ });
27
+ const otherPos = tagList.indexOf('-other');
28
+ const endPos = otherPos > -1 ? otherPos : tagList.length;
21
29
  let ongoingCount = 0;
22
30
  for (const [idx, tag] of jsdoc.tags.entries()) {
23
31
  tag.originalIndex = idx;
@@ -44,8 +52,8 @@ var _default = (0, _iterateJsdoc.default)(({
44
52
  firstChangedTagIndex = originalIndex;
45
53
  }
46
54
  };
47
- const newPos = tagSequence.indexOf(tagNew);
48
- const oldPos = tagSequence.indexOf(tagOld);
55
+ const newPos = tagList.indexOf(tagNew);
56
+ const oldPos = tagList.indexOf(tagOld);
49
57
  const preferredNewPos = newPos === -1 ? endPos : newPos;
50
58
  const preferredOldPos = oldPos === -1 ? endPos : oldPos;
51
59
  if (preferredNewPos < preferredOldPos) {
@@ -73,6 +81,222 @@ var _default = (0, _iterateJsdoc.default)(({
73
81
  return 1;
74
82
  });
75
83
  if (firstChangedTagLine === undefined) {
84
+ // Should be ordered by now
85
+
86
+ const lastTagsOfGroup = [];
87
+ const badLastTagsOfGroup = [];
88
+ const countTagEmptyLines = tag => {
89
+ return tag.source.reduce((acc, {
90
+ tokens: {
91
+ description,
92
+ name,
93
+ type,
94
+ end,
95
+ tag: tg
96
+ }
97
+ }) => {
98
+ const empty = !tg && !type && !name && !description;
99
+ // Reset the count so long as there is content
100
+ return empty ? acc + (empty && !end) : 0;
101
+ }, 0);
102
+ };
103
+ let idx = 0;
104
+ for (const {
105
+ tags
106
+ } of tagSequence) {
107
+ let innerIdx;
108
+ let currentTag;
109
+ let lastTag;
110
+ do {
111
+ currentTag = jsdoc.tags[idx];
112
+ if (!currentTag) {
113
+ idx++;
114
+ break;
115
+ }
116
+ innerIdx = tags.indexOf(currentTag.tag);
117
+ if (innerIdx === -1 && (
118
+ // eslint-disable-next-line no-loop-func -- Safe
119
+ !tags.includes('-other') || tagSequence.some(({
120
+ tags: tgs
121
+ }) => {
122
+ return tgs.includes(currentTag.tag);
123
+ }))) {
124
+ idx++;
125
+ break;
126
+ }
127
+ lastTag = currentTag;
128
+ idx++;
129
+ } while (true);
130
+ idx--;
131
+ if (lastTag) {
132
+ lastTagsOfGroup.push(lastTag);
133
+ const ct = countTagEmptyLines(lastTag);
134
+ if (ct !== linesBetween &&
135
+ // Use another rule for adding to end (should be of interest outside this rule)
136
+ jsdoc.tags[idx]) {
137
+ badLastTagsOfGroup.push([lastTag, ct]);
138
+ }
139
+ }
140
+ }
141
+ if (reportTagGroupSpacing && badLastTagsOfGroup.length) {
142
+ const fixer = tg => {
143
+ return () => {
144
+ // Due to https://github.com/syavorsky/comment-parser/issues/110 ,
145
+ // we have to modify `jsdoc.source` rather than just modify tags
146
+ // directly
147
+ for (const [currIdx, {
148
+ tokens
149
+ }] of jsdoc.source.entries()) {
150
+ if (tokens.tag !== '@' + tg.tag) {
151
+ continue;
152
+ }
153
+
154
+ // Cannot be `tokens.end`, as dropped off last tag, so safe to
155
+ // go on
156
+ let newIdx = currIdx;
157
+ const emptyLine = () => {
158
+ return {
159
+ tokens: utils.seedTokens({
160
+ delimiter: '*',
161
+ start: jsdoc.source[newIdx - 1].tokens.start
162
+ })
163
+ };
164
+ };
165
+ let existingEmptyLines = 0;
166
+ while (true) {
167
+ var _jsdoc$source$newIdx;
168
+ const nextTokens = (_jsdoc$source$newIdx = jsdoc.source[++newIdx]) === null || _jsdoc$source$newIdx === void 0 ? void 0 : _jsdoc$source$newIdx.tokens;
169
+
170
+ /* istanbul ignore if -- Guard */
171
+ if (!nextTokens) {
172
+ return;
173
+ }
174
+
175
+ // Should be no `nextTokens.end` to worry about since ignored
176
+ // if not followed by tag
177
+
178
+ if (nextTokens.tag) {
179
+ // Haven't made it to last tag instance yet, so keep looking
180
+ if (nextTokens.tag === tokens.tag) {
181
+ existingEmptyLines = 0;
182
+ continue;
183
+ }
184
+ const lineDiff = linesBetween - existingEmptyLines;
185
+ if (lineDiff > 0) {
186
+ const lines = Array.from({
187
+ length: lineDiff
188
+ }, () => {
189
+ return emptyLine();
190
+ });
191
+ jsdoc.source.splice(newIdx, 0, ...lines);
192
+ } else {
193
+ // lineDiff < 0
194
+ jsdoc.source.splice(newIdx + lineDiff, -lineDiff);
195
+ }
196
+ break;
197
+ }
198
+ const empty = !nextTokens.type && !nextTokens.name && !nextTokens.description;
199
+ if (empty) {
200
+ existingEmptyLines++;
201
+ } else {
202
+ // Has content again, so reset empty line count
203
+ existingEmptyLines = 0;
204
+ }
205
+ }
206
+ break;
207
+ }
208
+ for (const [srcIdx, src] of jsdoc.source.entries()) {
209
+ src.number = srcIdx;
210
+ }
211
+ };
212
+ };
213
+ for (const [tg, ct] of badLastTagsOfGroup) {
214
+ utils.reportJSDoc('Tag groups do not have the expected whitespace', tg, fixer(tg, ct));
215
+ }
216
+ return;
217
+ }
218
+ if (!reportIntraTagGroupSpacing) {
219
+ return;
220
+ }
221
+ for (const [tagIdx, tag] of jsdoc.tags.entries()) {
222
+ if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {
223
+ continue;
224
+ }
225
+ const ct = countTagEmptyLines(tag);
226
+ if (ct) {
227
+ // eslint-disable-next-line complexity -- Temporary
228
+ const fixer = () => {
229
+ let foundFirstTag = false;
230
+ let currentTag;
231
+ for (const [currIdx, {
232
+ tokens: {
233
+ description,
234
+ name,
235
+ type,
236
+ end,
237
+ tag: tg
238
+ }
239
+ }] of jsdoc.source.entries()) {
240
+ if (tg) {
241
+ foundFirstTag = true;
242
+ currentTag = tg;
243
+ }
244
+ if (!foundFirstTag) {
245
+ continue;
246
+ }
247
+ if (currentTag && !tg && !type && !name && !description && !end) {
248
+ let nextIdx = currIdx;
249
+ let ignore = true;
250
+ // Even if a tag of the same name as the last tags in a group,
251
+ // could still be an earlier tag in that group
252
+
253
+ // eslint-disable-next-line no-loop-func -- Safe
254
+ if (lastTagsOfGroup.some(lastTagOfGroup => {
255
+ return currentTag === '@' + lastTagOfGroup.tag;
256
+ })) {
257
+ while (true) {
258
+ var _jsdoc$source$nextIdx;
259
+ const nextTokens = (_jsdoc$source$nextIdx = jsdoc.source[++nextIdx]) === null || _jsdoc$source$nextIdx === void 0 ? void 0 : _jsdoc$source$nextIdx.tokens;
260
+ if (!nextTokens) {
261
+ break;
262
+ }
263
+ if (!nextTokens.tag) {
264
+ continue;
265
+ }
266
+
267
+ // Followed by the same tag name, so not actually last in group,
268
+ // and of interest
269
+ if (nextTokens.tag === currentTag) {
270
+ ignore = false;
271
+ }
272
+ }
273
+ } else {
274
+ while (true) {
275
+ var _jsdoc$source$nextIdx2;
276
+ const nextTokens = (_jsdoc$source$nextIdx2 = jsdoc.source[++nextIdx]) === null || _jsdoc$source$nextIdx2 === void 0 ? void 0 : _jsdoc$source$nextIdx2.tokens;
277
+ if (!nextTokens || nextTokens.end) {
278
+ break;
279
+ }
280
+
281
+ // Not the very last tag, so don't ignore
282
+ if (nextTokens.tag) {
283
+ ignore = false;
284
+ break;
285
+ }
286
+ }
287
+ }
288
+ if (!ignore) {
289
+ jsdoc.source.splice(currIdx, 1);
290
+ for (const [srcIdx, src] of jsdoc.source.entries()) {
291
+ src.number = srcIdx;
292
+ }
293
+ }
294
+ }
295
+ }
296
+ };
297
+ utils.reportJSDoc('Intra-group tags have unexpected whitespace', tag, fixer);
298
+ }
299
+ }
76
300
  return;
77
301
  }
78
302
  const firstLine = utils.getFirstLine();
@@ -120,12 +344,12 @@ var _default = (0, _iterateJsdoc.default)(({
120
344
  }
121
345
  }
122
346
  };
123
- utils.reportJSDoc(`Tags are not in the prescribed order: ${tagSequence.join(', ')}`, jsdoc.tags[firstChangedTagIndex], fix, true);
347
+ utils.reportJSDoc(`Tags are not in the prescribed order: ${tagList.join(', ') || '(alphabetical)'}`, jsdoc.tags[firstChangedTagIndex], fix, true);
124
348
  }, {
125
349
  iterateAllJsdocs: true,
126
350
  meta: {
127
351
  docs: {
128
- description: '',
352
+ description: 'Sorts tags by a specified sequence according to tag name.',
129
353
  url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-sort-tags'
130
354
  },
131
355
  fixable: 'code',
@@ -135,9 +359,26 @@ var _default = (0, _iterateJsdoc.default)(({
135
359
  alphabetizeExtras: {
136
360
  type: 'boolean'
137
361
  },
362
+ linesBetween: {
363
+ type: 'integer'
364
+ },
365
+ reportIntraTagGroupSpacing: {
366
+ type: 'boolean'
367
+ },
368
+ reportTagGroupSpacing: {
369
+ type: 'boolean'
370
+ },
138
371
  tagSequence: {
139
372
  items: {
140
- type: 'string'
373
+ properties: {
374
+ tags: {
375
+ items: {
376
+ type: 'string'
377
+ },
378
+ type: 'array'
379
+ }
380
+ },
381
+ type: 'object'
141
382
  },
142
383
  type: 'array'
143
384
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sortTags.js","names":["_defaultTagOrder","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","tagSequence","defaultTagOrder","alphabetizeExtras","options","otherPos","indexOf","endPos","length","ongoingCount","idx","tag","tags","entries","originalIndex","source","originalLine","firstChangedTagLine","firstChangedTagIndex","sortedTags","JSON","parse","stringify","sort","tagNew","tagOld","checkOrSetFirstChanged","newPos","oldPos","preferredNewPos","preferredOldPos","undefined","firstLine","getFirstLine","fix","itemsToMoveRange","Array","from","keys","unchangedPriorTagDescriptions","slice","reduce","ct","initialOffset","removeTag","changedTags","extraTagCount","changedTag","addTag","tokens","end","addLine","reportJSDoc","join","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type","items","exports","module"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n tagSequence = defaultTagOrder,\n alphabetizeExtras = false,\n } = context.options[0] || {};\n\n const otherPos = tagSequence.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagSequence.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of jsdoc.tags.entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n let firstChangedTagLine;\n let firstChangedTagIndex;\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagSequence.indexOf(tagNew);\n const oldPos = tagSequence.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length - firstChangedTagIndex,\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = firstLine + firstChangedTagIndex +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(idx + firstChangedTagIndex);\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${tagSequence.join(', ')}`,\n jsdoc.tags[firstChangedTagIndex],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-sort-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n type: 'boolean',\n },\n tagSequence: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"sortTags.js","names":["_defaultTagOrder","_interopRequireDefault","require","_iterateJsdoc","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","linesBetween","tagSequence","defaultTagOrder","alphabetizeExtras","reportTagGroupSpacing","reportIntraTagGroupSpacing","options","tagList","flatMap","tags","otherPos","indexOf","endPos","length","ongoingCount","idx","tag","entries","originalIndex","source","originalLine","firstChangedTagLine","firstChangedTagIndex","sortedTags","JSON","parse","stringify","sort","tagNew","tagOld","checkOrSetFirstChanged","newPos","oldPos","preferredNewPos","preferredOldPos","undefined","lastTagsOfGroup","badLastTagsOfGroup","countTagEmptyLines","reduce","acc","tokens","description","name","type","end","tg","empty","innerIdx","currentTag","lastTag","includes","some","tgs","push","ct","fixer","currIdx","newIdx","emptyLine","seedTokens","delimiter","start","existingEmptyLines","_jsdoc$source$newIdx","nextTokens","lineDiff","lines","Array","from","splice","srcIdx","src","number","reportJSDoc","tagIdx","foundFirstTag","nextIdx","ignore","lastTagOfGroup","_jsdoc$source$nextIdx","_jsdoc$source$nextIdx2","firstLine","getFirstLine","fix","itemsToMoveRange","keys","unchangedPriorTagDescriptions","slice","initialOffset","removeTag","changedTags","extraTagCount","changedTag","addTag","addLine","join","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","exports","module"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity -- Temporary\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n linesBetween = 1,\n tagSequence = defaultTagOrder,\n alphabetizeExtras = false,\n reportTagGroupSpacing = true,\n reportIntraTagGroupSpacing = true,\n } = context.options[0] || {};\n\n const tagList = tagSequence.flatMap((obj) => {\n /* typeof obj === 'string' ? obj : */\n return obj.tags;\n });\n\n const otherPos = tagList.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagList.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of jsdoc.tags.entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n let firstChangedTagLine;\n let firstChangedTagIndex;\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagList.indexOf(tagNew);\n const oldPos = tagList.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n // Should be ordered by now\n\n const lastTagsOfGroup = [];\n const badLastTagsOfGroup = [];\n\n const countTagEmptyLines = (tag) => {\n return tag.source.reduce((acc, {\n tokens: {\n description,\n name,\n type,\n end,\n tag: tg,\n },\n }) => {\n const empty = !tg && !type && !name && !description;\n // Reset the count so long as there is content\n return empty ? acc + (empty && !end) : 0;\n }, 0);\n };\n\n let idx = 0;\n for (const {\n tags,\n } of tagSequence) {\n let innerIdx;\n let currentTag;\n let lastTag;\n do {\n currentTag = jsdoc.tags[idx];\n if (!currentTag) {\n idx++;\n break;\n }\n\n innerIdx = tags.indexOf(currentTag.tag);\n\n if (\n innerIdx === -1 &&\n // eslint-disable-next-line no-loop-func -- Safe\n (!tags.includes('-other') || tagSequence.some(({\n tags: tgs,\n }) => {\n return tgs.includes(currentTag.tag);\n }))\n ) {\n idx++;\n break;\n }\n\n lastTag = currentTag;\n\n idx++;\n } while (true);\n\n idx--;\n\n if (lastTag) {\n lastTagsOfGroup.push(lastTag);\n const ct = countTagEmptyLines(lastTag);\n if (\n ct !== linesBetween &&\n // Use another rule for adding to end (should be of interest outside this rule)\n jsdoc.tags[idx]\n ) {\n badLastTagsOfGroup.push([\n lastTag, ct,\n ]);\n }\n }\n }\n\n if (reportTagGroupSpacing && badLastTagsOfGroup.length) {\n const fixer = (tg) => {\n return () => {\n // Due to https://github.com/syavorsky/comment-parser/issues/110 ,\n // we have to modify `jsdoc.source` rather than just modify tags\n // directly\n for (const [\n currIdx,\n {\n tokens,\n },\n ] of jsdoc.source.entries()) {\n if (tokens.tag !== '@' + tg.tag) {\n continue;\n }\n\n // Cannot be `tokens.end`, as dropped off last tag, so safe to\n // go on\n let newIdx = currIdx;\n\n const emptyLine = () => {\n return {\n tokens: utils.seedTokens({\n delimiter: '*',\n start: jsdoc.source[newIdx - 1].tokens.start,\n }),\n };\n };\n\n let existingEmptyLines = 0;\n while (true) {\n const nextTokens = jsdoc.source[++newIdx]?.tokens;\n\n /* istanbul ignore if -- Guard */\n if (!nextTokens) {\n return;\n }\n\n // Should be no `nextTokens.end` to worry about since ignored\n // if not followed by tag\n\n if (nextTokens.tag) {\n // Haven't made it to last tag instance yet, so keep looking\n if (nextTokens.tag === tokens.tag) {\n existingEmptyLines = 0;\n continue;\n }\n\n const lineDiff = linesBetween - existingEmptyLines;\n if (lineDiff > 0) {\n const lines = Array.from({\n length: lineDiff,\n }, () => {\n return emptyLine();\n });\n jsdoc.source.splice(newIdx, 0, ...lines);\n } else {\n // lineDiff < 0\n jsdoc.source.splice(\n newIdx + lineDiff,\n -lineDiff,\n );\n }\n\n break;\n }\n\n const empty = !nextTokens.type && !nextTokens.name &&\n !nextTokens.description;\n\n if (empty) {\n existingEmptyLines++;\n } else {\n // Has content again, so reset empty line count\n existingEmptyLines = 0;\n }\n }\n\n break;\n }\n\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n };\n };\n\n for (const [\n tg,\n ct,\n ] of badLastTagsOfGroup) {\n utils.reportJSDoc(\n 'Tag groups do not have the expected whitespace',\n tg,\n fixer(tg, ct),\n );\n }\n\n return;\n }\n\n if (!reportIntraTagGroupSpacing) {\n return;\n }\n\n for (const [\n tagIdx,\n tag,\n ] of jsdoc.tags.entries()) {\n if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {\n continue;\n }\n\n const ct = countTagEmptyLines(tag);\n if (ct) {\n // eslint-disable-next-line complexity -- Temporary\n const fixer = () => {\n let foundFirstTag = false;\n let currentTag;\n for (const [\n currIdx,\n {\n tokens: {\n description,\n name,\n type,\n end,\n tag: tg,\n },\n },\n ] of jsdoc.source.entries()) {\n if (tg) {\n foundFirstTag = true;\n currentTag = tg;\n }\n\n if (!foundFirstTag) {\n continue;\n }\n\n if (currentTag && !tg && !type && !name && !description && !end) {\n let nextIdx = currIdx;\n\n let ignore = true;\n // Even if a tag of the same name as the last tags in a group,\n // could still be an earlier tag in that group\n\n // eslint-disable-next-line no-loop-func -- Safe\n if (lastTagsOfGroup.some((lastTagOfGroup) => {\n return currentTag === '@' + lastTagOfGroup.tag;\n })) {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens) {\n break;\n }\n\n if (!nextTokens.tag) {\n continue;\n }\n\n // Followed by the same tag name, so not actually last in group,\n // and of interest\n if (nextTokens.tag === currentTag) {\n ignore = false;\n }\n }\n } else {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens || nextTokens.end) {\n break;\n }\n\n // Not the very last tag, so don't ignore\n if (nextTokens.tag) {\n ignore = false;\n break;\n }\n }\n }\n\n if (!ignore) {\n jsdoc.source.splice(currIdx, 1);\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n }\n }\n }\n };\n\n utils.reportJSDoc(\n 'Intra-group tags have unexpected whitespace',\n tag,\n fixer,\n );\n }\n }\n\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length - firstChangedTagIndex,\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = firstLine + firstChangedTagIndex +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(idx + firstChangedTagIndex);\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${\n tagList.join(', ') || '(alphabetical)'\n }`,\n jsdoc.tags[firstChangedTagIndex],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Sorts tags by a specified sequence according to tag name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-sort-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n type: 'boolean',\n },\n linesBetween: {\n type: 'integer',\n },\n reportIntraTagGroupSpacing: {\n type: 'boolean',\n },\n reportTagGroupSpacing: {\n type: 'boolean',\n },\n tagSequence: {\n items: {\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -121,5 +121,5 @@
121
121
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
122
122
  "test-index": "npm run test-no-cov -- test/rules/index.js"
123
123
  },
124
- "version": "42.0.0"
124
+ "version": "43.0.0"
125
125
  }