Repository: prettier/plugin-pug
Pull request #480 (2024-04-22 20:01:47)

Update eslint
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`8.57.0` -> `8.57.1`](https://renovatebot.com/diffs/npm/eslint/8.57.0/8.57.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/8.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/8.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/8.57.0/8.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/8.57.0/8.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [eslint-plugin-jsdoc](https://redirect.github.com/gajus/eslint-plugin-jsdoc) | [`50.2.2` -> `50.3.1`](https://renovatebot.com/diffs/npm/eslint-plugin-jsdoc/50.2.2/50.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-jsdoc/50.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-plugin-jsdoc/50.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-plugin-jsdoc/50.2.2/50.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-jsdoc/50.2.2/50.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>eslint/eslint (eslint)</summary>

### [`v8.57.1`](https://redirect.github.com/eslint/eslint/compare/v8.57.0...5b9414c501c58bfa85f41f96f821973c41e8ae74)

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v8.57.0...v8.57.1)

</details>

<details>
<summary>gajus/eslint-plugin-jsdoc (eslint-plugin-jsdoc)</summary>

### [`v50.3.1`](https://redirect.github.com/gajus/eslint-plugin-jsdoc/releases/tag/v50.3.1)

[Compare Source](https://redirect.github.com/gajus/eslint-plugin-jsdoc/compare/v50.3.0...v50.3.1)

##### Bug Fixes

-   **`check-alignment`:** handle zero indent; fixes [#&#8203;1322](https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1322) ([34866bc](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/34866bc988a1a26fab9c4cf3c89fadb4c7d0494f))

### [`v50.3.0`](https://redirect.github.com/gajus/eslint-plugin-jsdoc/releases/tag/v50.3.0)

[Compare Source](https://redirect.github.com/gajus/eslint-plugin-jsdoc/compare/v50.2.5...v50.3.0)

##### Features

-   **`require-param`:** add `ignoreWhenAllParamsMissing` option; fixes [#&#8203;1317](https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1317) ([3b18435](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/3b1843582015d999bbf373095fdc492a235bb374))

### [`v50.2.5`](https://redirect.github.com/gajus/eslint-plugin-jsdoc/releases/tag/v50.2.5)

[Compare Source](https://redirect.github.com/gajus/eslint-plugin-jsdoc/compare/v50.2.4...v50.2.5)

##### Bug Fixes

-   **`require-jsdoc`:** allow `TSTypeAliasDeclaration` to be detected for export; fixes [#&#8203;1319](https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1319) ([909de73](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/909de737f115af69a5fd10ec64810a0f42f834e0))
-   force release ([6970456](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/69704565d80e12a74e856966fbf9e70e2e324905))
-   force release ([20e0805](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/20e0805d8b245dd1f675987740dea2cfb04d440b))
-   update semantic-release ([baaf8c3](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/baaf8c399dde08795841bd5df98b62212403f664))
-   update semantic-release/github ([8e565e0](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/8e565e08407c275401045676faee62f31e42702a))

### [`v50.2.4`](https://redirect.github.com/gajus/eslint-plugin-jsdoc/releases/tag/v50.2.4)

[Compare Source](https://redirect.github.com/gajus/eslint-plugin-jsdoc/compare/v50.2.3...v50.2.4)

##### Bug Fixes

-   **`require-returns-check`:** allow infinite for loops to have only one branch to return; fixes [#&#8203;1315](https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1315) ([e7ab475](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/e7ab475c26eb4ac874f28eeb7cedafaf21b0b001))

### [`v50.2.3`](https://redirect.github.com/gajus/eslint-plugin-jsdoc/releases/tag/v50.2.3)

[Compare Source](https://redirect.github.com/gajus/eslint-plugin-jsdoc/compare/v50.2.2...v50.2.3)

##### Bug Fixes

-   **`require-jsdoc`:** avoid erring on static blocks ([8222262](https://redirect.github.com/gajus/eslint-plugin-jsdoc/commit/82222628c1213017bd99af70bbc761b9c7f1c972))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Berlin, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/prettier/plugin-pug).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMTMuMSIsInVwZGF0ZWRJblZlciI6IjM4Ljk3LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->


github-actions[bot]: <h2>Coverage Report</h2>
<table> <thead> <tr> <th align="center">Status</th> <th align="left">Category</th> <th align="right">Percentage</th> <th align="right">Covered / Total</th> </tr> </thead> <tbody> <tr> <td align="center">🟢</td> <td align="left">Lines</td> <td align="right">94.52% (🎯 90%)<br/>🟰 <em>±0%</em></td> <td align="right">2606 / 2757</td> </tr> <tr> <td align="center">🟢</td> <td align="left">Statements</td> <td align="right">94.52% (🎯 90%)<br/>🟰 <em>±0%</em></td> <td align="right">2606 / 2757</td> </tr> <tr> <td align="center">🟢</td> <td align="left">Functions</td> <td align="right">96.29% (🎯 90%)<br/>🟰 <em>±0%</em></td> <td align="right">104 / 108</td> </tr> <tr> <td align="center">🟢</td> <td align="left">Branches</td> <td align="right">93.01% (🎯 90%)<br/>🟰 <em>±0%</em></td> <td align="right">626 / 673</td> </tr> </tbody> </table><details><summary>File Coverage</summary><table> <thead> <tr> <th align="left">File</th> <th align="right">Stmts</th> <th align="right">% Branch</th> <th align="right">% Funcs</th> <th align="right">% Lines</th> <th align="left">Uncovered Lines</th> </tr> </thead> <tbody> <tr> <td align="left" colspan="6"><b>Unchanged Files</b></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/doctype-shortcut-registry.ts">src/doctype-shortcut-registry.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/index.ts">src/index.ts</a></td> <td align="right">93.18%</td> <td align="right">100%</td> <td align="right">71.42%</td> <td align="right">93.18%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/index.ts#L78-L80" class="text-red">78-80</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/index.ts#L83-L85" class="text-red">83-85</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/logger.ts">src/logger.ts</a></td> <td align="right">77.46%</td> <td align="right">90.9%</td> <td align="right">81.81%</td> <td align="right">77.46%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/logger.ts#L37-L44" class="text-red">37-44</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/logger.ts#L46" class="text-red">46</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/logger.ts#L93-L94" class="text-red">93-94</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/logger.ts#L153-L157" class="text-red">153-157</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts">src/printer.ts</a></td> <td align="right">93.93%</td> <td align="right">94.26%</td> <td align="right">100%</td> <td align="right">93.93%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L330-L331" class="text-red">330-331</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L364-L365" class="text-red">364-365</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L507-L509" class="text-red">507-509</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L521-L530" class="text-red">521-530</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L535-L548" class="text-red">535-548</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L595-L631" class="text-red">595-631</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L646-L647" class="text-red">646-647</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L682-L683" class="text-red">682-683</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L739-L743" class="text-red">739-743</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1071-L1072" class="text-red">1071-1072</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1164-L1165" class="text-red">1164-1165</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1190" class="text-red">1190</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1202-L1203" class="text-red">1202-1203</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1440-L1441" class="text-red">1440-1441</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1483-L1484" class="text-red">1483-1484</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1780-L1786" class="text-red">1780-1786</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/printer.ts#L1824-L1829" class="text-red">1824-1829</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/common.ts">src/options/common.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/constants.ts">src/options/constants.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/converge.ts">src/options/converge.ts</a></td> <td align="right">100%</td> <td align="right">60%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/index.ts">src/options/index.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-attribute-separator.ts">src/options/pug-attribute-separator.ts</a></td> <td align="right">90%</td> <td align="right">75%</td> <td align="right">100%</td> <td align="right">90%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-attribute-separator.ts#L51-L54" class="text-red">51-54</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-class-location.ts">src/options/pug-class-location.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-class-notation.ts">src/options/pug-class-notation.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-closing-bracket-indent-depth.ts">src/options/pug-closing-bracket-indent-depth.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-comment-preserve-spaces.ts">src/options/pug-comment-preserve-spaces.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-explicit-div.ts">src/options/pug-explicit-div.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-framework.ts">src/options/pug-framework.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-id-notation.ts">src/options/pug-id-notation.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-preserve-attribute-brackets.ts">src/options/pug-preserve-attribute-brackets.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-single-file-component-indentation.ts">src/options/pug-single-file-component-indentation.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/pug-wrap-attributes.ts">src/options/pug-wrap-attributes.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/types.ts">src/options/types.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/attribute-sorting/index.ts">src/options/attribute-sorting/index.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/attribute-sorting/utils.ts">src/options/attribute-sorting/utils.ts</a></td> <td align="right">95.69%</td> <td align="right">94.44%</td> <td align="right">100%</td> <td align="right">95.69%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/attribute-sorting/utils.ts#L78-L79" class="text-red">78-79</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/attribute-sorting/utils.ts#L87-L88" class="text-red">87-88</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/empty-attributes/index.ts">src/options/empty-attributes/index.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/empty-attributes/types.ts">src/options/empty-attributes/types.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/options/empty-attributes/utils.ts">src/options/empty-attributes/utils.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/angular.ts">src/utils/angular.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts">src/utils/common.ts</a></td> <td align="right">89.67%</td> <td align="right">86.11%</td> <td align="right">100%</td> <td align="right">89.67%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L19-L20" class="text-red">19-20</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L25-L26" class="text-red">25-26</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L52-L53" class="text-red">52-53</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L251-L252" class="text-red">251-252</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L254-L255" class="text-red">254-255</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L259-L262" class="text-red">259-262</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/common.ts#L320-L321" class="text-red">320-321</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/script-mime-types.ts">src/utils/script-mime-types.ts</a></td> <td align="right">87.5%</td> <td align="right">83.33%</td> <td align="right">100%</td> <td align="right">87.5%</td> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/script-mime-types.ts#L42-L43" class="text-red">42-43</a>, <a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/script-mime-types.ts#L49-L50" class="text-red">49-50</a></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/svelte.ts">src/utils/svelte.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/prettier/plugin-pug/blob/e3fc15ccb64a86d7c275e9eb4e433c967a978916/src/utils/vue.ts">src/utils/vue.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> </tbody> </table></details>
<em>Generated in workflow <a href=https://github.com/prettier/plugin-pug/actions/runs/10850927700>#12</a></em>

<!-- vitest-coverage-report-marker-root -->

Patch:
diff --git a/package.json b/package.json
index 268808f..b76fb0d 100644
--- a/package.json
+++ b/package.json
@@ -73,29 +73,29 @@
     "@eslint-types/prettier": "5.1.3",
     "@eslint-types/typescript-eslint": "7.5.0",
     "@eslint-types/unicorn": "52.0.0",
-    "@types/node": "20.16.5",
+    "@types/node": "20.16.11",
     "@typescript-eslint/eslint-plugin": "7.18.0",
     "@typescript-eslint/parser": "7.18.0",
-    "@vitest/coverage-v8": "2.0.5",
+    "@vitest/coverage-v8": "2.1.2",
     "benchmark": "2.1.4",
-    "eslint": "8.57.0",
+    "eslint": "8.57.1",
     "eslint-config-prettier": "9.1.0",
     "eslint-define-config": "2.1.0",
     "eslint-gitignore": "0.1.0",
     "eslint-plugin-inclusive-language": "2.2.1",
-    "eslint-plugin-jsdoc": "50.2.2",
+    "eslint-plugin-jsdoc": "50.3.1",
     "eslint-plugin-prettier": "5.2.1",
     "eslint-plugin-spellcheck": "0.0.20",
     "eslint-plugin-unicorn": "55.0.0",
-    "npm-run-all2": "6.2.2",
+    "npm-run-all2": "6.2.3",
     "prettier": "3.3.3",
-    "prettier-plugin-organize-imports": "4.0.0",
+    "prettier-plugin-organize-imports": "4.1.0",
     "rimraf": "6.0.1",
-    "tsup": "8.2.4",
+    "tsup": "8.3.0",
     "typescript": "5.5.4",
     "vite": "5.4.3",
     "vitepress": "1.3.4",
-    "vitest": "2.0.5"
+    "vitest": "2.1.2"
   },
   "peerDependencies": {
     "prettier": "^3.0.0"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 068502e..e6be1b2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -25,74 +25,74 @@ importers:
         specifier: 52.0.0
         version: 52.0.0
       '@types/node':
-        specifier: 20.16.5
-        version: 20.16.5
+        specifier: 20.16.11
+        version: 20.16.11
       '@typescript-eslint/eslint-plugin':
         specifier: 7.18.0
-        version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
+        version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)
       '@typescript-eslint/parser':
         specifier: 7.18.0
-        version: 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+        version: 7.18.0(eslint@8.57.1)(typescript@5.5.4)
       '@vitest/coverage-v8':
-        specifier: 2.0.5
-        version: 2.0.5(vitest@2.0.5(@types/node@20.16.5))
+        specifier: 2.1.2
+        version: 2.1.2(vitest@2.1.2(@types/node@20.16.11))
       benchmark:
         specifier: 2.1.4
         version: 2.1.4
       eslint:
-        specifier: 8.57.0
-        version: 8.57.0
+        specifier: 8.57.1
+        version: 8.57.1
       eslint-config-prettier:
         specifier: 9.1.0
-        version: 9.1.0(eslint@8.57.0)
+        version: 9.1.0(eslint@8.57.1)
       eslint-define-config:
         specifier: 2.1.0
         version: 2.1.0
       eslint-gitignore:
         specifier: 0.1.0
-        version: 0.1.0(eslint@8.57.0)
+        version: 0.1.0(eslint@8.57.1)
       eslint-plugin-inclusive-language:
         specifier: 2.2.1
         version: 2.2.1
       eslint-plugin-jsdoc:
-        specifier: 50.2.2
-        version: 50.2.2(eslint@8.57.0)
+        specifier: 50.3.1
+        version: 50.3.1(eslint@8.57.1)
       eslint-plugin-prettier:
         specifier: 5.2.1
-        version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3)
+        version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3)
       eslint-plugin-spellcheck:
         specifier: 0.0.20
-        version: 0.0.20(eslint@8.57.0)
+        version: 0.0.20(eslint@8.57.1)
       eslint-plugin-unicorn:
         specifier: 55.0.0
-        version: 55.0.0(eslint@8.57.0)
+        version: 55.0.0(eslint@8.57.1)
       npm-run-all2:
-        specifier: 6.2.2
-        version: 6.2.2
+        specifier: 6.2.3
+        version: 6.2.3
       prettier:
         specifier: 3.3.3
         version: 3.3.3
       prettier-plugin-organize-imports:
-        specifier: 4.0.0
-        version: 4.0.0(prettier@3.3.3)(typescript@5.5.4)
+        specifier: 4.1.0
+        version: 4.1.0(prettier@3.3.3)(typescript@5.5.4)
       rimraf:
         specifier: 6.0.1
         version: 6.0.1
       tsup:
-        specifier: 8.2.4
-        version: 8.2.4(postcss@8.4.45)(typescript@5.5.4)
+        specifier: 8.3.0
+        version: 8.3.0(postcss@8.4.45)(typescript@5.5.4)
       typescript:
         specifier: 5.5.4
         version: 5.5.4
       vite:
         specifier: 5.4.3
-        version: 5.4.3(@types/node@20.16.5)
+        version: 5.4.3(@types/node@20.16.11)
       vitepress:
         specifier: 1.3.4
-        version: 1.3.4(@algolia/client-search@4.24.0)(@types/node@20.16.5)(postcss@8.4.45)(search-insights@2.17.1)(typescript@5.5.4)
+        version: 1.3.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(postcss@8.4.45)(search-insights@2.17.1)(typescript@5.5.4)
       vitest:
-        specifier: 2.0.5
-        version: 2.0.5(@types/node@20.16.5)
+        specifier: 2.1.2
+        version: 2.1.2(@types/node@20.16.11)
 
 packages:
 
@@ -528,12 +528,12 @@ packages:
     resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  '@eslint/js@8.57.0':
-    resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+  '@eslint/js@8.57.1':
+    resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  '@humanwhocodes/config-array@0.11.14':
-    resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+  '@humanwhocodes/config-array@0.13.0':
+    resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
     engines: {node: '>=10.10.0'}
     deprecated: Use @eslint/config-array instead
 
@@ -695,8 +695,8 @@ packages:
   '@types/mdurl@2.0.0':
     resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
 
-  '@types/node@20.16.5':
-    resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==}
+  '@types/node@20.16.11':
+    resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==}
 
   '@types/normalize-package-data@2.4.4':
     resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -775,28 +775,44 @@ packages:
       vite: ^5.0.0
       vue: ^3.2.25
 
-  '@vitest/coverage-v8@2.0.5':
-    resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==}
+  '@vitest/coverage-v8@2.1.2':
+    resolution: {integrity: sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==}
     peerDependencies:
-      vitest: 2.0.5
+      '@vitest/browser': 2.1.2
+      vitest: 2.1.2
+    peerDependenciesMeta:
+      '@vitest/browser':
+        optional: true
 
-  '@vitest/expect@2.0.5':
-    resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==}
+  '@vitest/expect@2.1.2':
+    resolution: {integrity: sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==}
 
-  '@vitest/pretty-format@2.0.5':
-    resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
+  '@vitest/mocker@2.1.2':
+    resolution: {integrity: sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==}
+    peerDependencies:
+      '@vitest/spy': 2.1.2
+      msw: ^2.3.5
+      vite: ^5.0.0
+    peerDependenciesMeta:
+      msw:
+        optional: true
+      vite:
+        optional: true
 
-  '@vitest/runner@2.0.5':
-    resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==}
+  '@vitest/pretty-format@2.1.2':
+    resolution: {integrity: sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==}
 
-  '@vitest/snapshot@2.0.5':
-    resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==}
+  '@vitest/runner@2.1.2':
+    resolution: {integrity: sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==}
 
-  '@vitest/spy@2.0.5':
-    resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
+  '@vitest/snapshot@2.1.2':
+    resolution: {integrity: sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==}
 
-  '@vitest/utils@2.0.5':
-    resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
+  '@vitest/spy@2.1.2':
+    resolution: {integrity: sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==}
+
+  '@vitest/utils@2.1.2':
+    resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==}
 
   '@vue/compiler-core@3.5.3':
     resolution: {integrity: sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==}
@@ -1225,8 +1241,8 @@ packages:
   eslint-plugin-inclusive-language@2.2.1:
     resolution: {integrity: sha512-RL6avDWXCS0Dcp9axhvHRUp65qG07qjOrh6J4BNNahPvRY3PuYGnAd0H1strZ9cob79JiEW4Bq0j3gEuzbv0/A==}
 
-  eslint-plugin-jsdoc@50.2.2:
-    resolution: {integrity: sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg==}
+  eslint-plugin-jsdoc@50.3.1:
+    resolution: {integrity: sha512-SY9oUuTMr6aWoJggUS40LtMjsRzJPB5ZT7F432xZIHK3EfHF+8i48GbUBpwanrtlL9l1gILNTHK9o8gEhYLcKA==}
     engines: {node: '>=18'}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -1268,9 +1284,10 @@ packages:
     resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  eslint@8.57.0:
-    resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+  eslint@8.57.1:
+    resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
     hasBin: true
 
   espree@10.1.0:
@@ -1307,10 +1324,6 @@ packages:
     resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
     engines: {node: '>=10'}
 
-  execa@8.0.1:
-    resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
-    engines: {node: '>=16.17'}
-
   fast-deep-equal@3.1.3:
     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
 
@@ -1330,6 +1343,14 @@ packages:
   fastq@1.17.1:
     resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
 
+  fdir@6.4.0:
+    resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==}
+    peerDependencies:
+      picomatch: ^3 || ^4
+    peerDependenciesMeta:
+      picomatch:
+        optional: true
+
   file-entry-cache@6.0.1:
     resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
     engines: {node: ^10.12.0 || >=12.0.0}
@@ -1392,10 +1413,6 @@ packages:
     resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
     engines: {node: '>=10'}
 
-  get-stream@8.0.1:
-    resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
-    engines: {node: '>=16'}
-
   get-symbol-description@1.0.2:
     resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
     engines: {node: '>= 0.4'}
@@ -1486,10 +1503,6 @@ packages:
     resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
     engines: {node: '>=10.17.0'}
 
-  human-signals@5.0.0:
-    resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
-    engines: {node: '>=16.17.0'}
-
   humps@2.0.1:
     resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==}
 
@@ -1605,10 +1618,6 @@ packages:
     resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
     engines: {node: '>=8'}
 
-  is-stream@3.0.0:
-    resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
   is-string@1.0.7:
     resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
     engines: {node: '>= 0.4'}
@@ -1774,10 +1783,6 @@ packages:
     resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
     engines: {node: '>=6'}
 
-  mimic-fn@4.0.0:
-    resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
-    engines: {node: '>=12'}
-
   min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
@@ -1831,8 +1836,8 @@ packages:
     resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
 
-  npm-run-all2@6.2.2:
-    resolution: {integrity: sha512-Q+alQAGIW7ZhKcxLt8GcSi3h3ryheD6xnmXahkMRVM5LYmajcUrSITm8h+OPC9RYWMV2GR0Q1ntTUCfxaNoOJw==}
+  npm-run-all2@6.2.3:
+    resolution: {integrity: sha512-5RsxC7jEc/RjxOYBVdEfrJf5FsJ0pHA7jr2/OxrThXknajETCTYjigOCG3iaGjdYIKEQlDuCG0ir0T1HTva8pg==}
     engines: {node: ^14.18.0 || ^16.13.0 || >=18.0.0, npm: '>= 8'}
     hasBin: true
 
@@ -1840,10 +1845,6 @@ packages:
     resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
     engines: {node: '>=8'}
 
-  npm-run-path@5.3.0:
-    resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
   object-assign@4.1.1:
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     engines: {node: '>=0.10.0'}
@@ -1867,10 +1868,6 @@ packages:
     resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
     engines: {node: '>=6'}
 
-  onetime@6.0.0:
-    resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
-    engines: {node: '>=12'}
-
   optionator@0.9.4:
     resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
     engines: {node: '>= 0.8.0'}
@@ -1922,10 +1919,6 @@ packages:
     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
     engines: {node: '>=8'}
 
-  path-key@4.0.0:
-    resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
-    engines: {node: '>=12'}
-
   path-parse@1.0.7:
     resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
 
@@ -1958,6 +1951,10 @@ packages:
     resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
 
+  picomatch@4.0.2:
+    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+    engines: {node: '>=12'}
+
   pidtree@0.6.0:
     resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
     engines: {node: '>=0.10'}
@@ -2011,16 +2008,13 @@ packages:
     resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
     engines: {node: '>=6.0.0'}
 
-  prettier-plugin-organize-imports@4.0.0:
-    resolution: {integrity: sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA==}
+  prettier-plugin-organize-imports@4.1.0:
+    resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==}
     peerDependencies:
-      '@vue/language-plugin-pug': ^2.0.24
       prettier: '>=2.0'
       typescript: '>=2.9'
-      vue-tsc: ^2.0.24
+      vue-tsc: ^2.1.0
     peerDependenciesMeta:
-      '@vue/language-plugin-pug':
-        optional: true
       vue-tsc:
         optional: true
 
@@ -2234,10 +2228,6 @@ packages:
     resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
     engines: {node: '>=6'}
 
-  strip-final-newline@3.0.0:
-    resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
-    engines: {node: '>=12'}
-
   strip-indent@3.0.0:
     resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
     engines: {node: '>=8'}
@@ -2291,6 +2281,13 @@ packages:
   tinybench@2.9.0:
     resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
 
+  tinyexec@0.3.0:
+    resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==}
+
+  tinyglobby@0.2.9:
+    resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==}
+    engines: {node: '>=12.0.0'}
+
   tinypool@1.0.1:
     resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==}
     engines: {node: ^18.0.0 || >=20.0.0}
@@ -2330,8 +2327,8 @@ packages:
   tslib@2.7.0:
     resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
 
-  tsup@8.2.4:
-    resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==}
+  tsup@8.3.0:
+    resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==}
     engines: {node: '>=18'}
     hasBin: true
     peerDependencies:
@@ -2404,8 +2401,8 @@ packages:
   validate-npm-package-license@3.0.4:
     resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
 
-  vite-node@2.0.5:
-    resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==}
+  vite-node@2.1.2:
+    resolution: {integrity: sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
 
@@ -2452,15 +2449,15 @@ packages:
       postcss:
         optional: true
 
-  vitest@2.0.5:
-    resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==}
+  vitest@2.1.2:
+    resolution: {integrity: sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
       '@edge-runtime/vm': '*'
       '@types/node': ^18.0.0 || >=20.0.0
-      '@vitest/browser': 2.0.5
-      '@vitest/ui': 2.0.5
+      '@vitest/browser': 2.1.2
+      '@vitest/ui': 2.1.2
       happy-dom: '*'
       jsdom: '*'
     peerDependenciesMeta:
@@ -2848,9 +2845,9 @@ snapshots:
   '@esbuild/win32-x64@0.23.1':
     optional: true
 
-  '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
+  '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)':
     dependencies:
-      eslint: 8.57.0
+      eslint: 8.57.1
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.11.0': {}
@@ -2877,9 +2874,9 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/js@8.57.0': {}
+  '@eslint/js@8.57.1': {}
 
-  '@humanwhocodes/config-array@0.11.14':
+  '@humanwhocodes/config-array@0.13.0':
     dependencies:
       '@humanwhocodes/object-schema': 2.0.3
       debug: 4.3.7
@@ -3010,7 +3007,7 @@ snapshots:
 
   '@types/mdurl@2.0.0': {}
 
-  '@types/node@20.16.5':
+  '@types/node@20.16.11':
     dependencies:
       undici-types: 6.19.8
 
@@ -3020,15 +3017,15 @@ snapshots:
 
   '@types/web-bluetooth@0.0.20': {}
 
-  '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
+  '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)':
     dependencies:
       '@eslint-community/regexpp': 4.11.0
-      '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+      '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4)
       '@typescript-eslint/scope-manager': 7.18.0
-      '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
-      '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+      '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4)
+      '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4)
       '@typescript-eslint/visitor-keys': 7.18.0
-      eslint: 8.57.0
+      eslint: 8.57.1
       graphemer: 1.4.0
       ignore: 5.3.2
       natural-compare: 1.4.0
@@ -3038,14 +3035,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
+  '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4)':
     dependencies:
       '@typescript-eslint/scope-manager': 7.18.0
       '@typescript-eslint/types': 7.18.0
       '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
       '@typescript-eslint/visitor-keys': 7.18.0
       debug: 4.3.7
-      eslint: 8.57.0
+      eslint: 8.57.1
     optionalDependencies:
       typescript: 5.5.4
     transitivePeerDependencies:
@@ -3056,12 +3053,12 @@ snapshots:
       '@typescript-eslint/types': 7.18.0
       '@typescript-eslint/visitor-keys': 7.18.0
 
-  '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
+  '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)':
     dependencies:
       '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
-      '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
+      '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4)
       debug: 4.3.7
-      eslint: 8.57.0
+      eslint: 8.57.1
       ts-api-utils: 1.3.0(typescript@5.5.4)
     optionalDependencies:
       typescript: 5.5.4
@@ -3085,13 +3082,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
+  '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
       '@typescript-eslint/scope-manager': 7.18.0
       '@typescript-eslint/types': 7.18.0
       '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
-      eslint: 8.57.0
+      eslint: 8.57.1
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -3103,12 +3100,12 @@ snapshots:
 
   '@ungap/structured-clone@1.2.0': {}
 
-  '@vitejs/plugin-vue@5.1.3(vite@5.4.3(@types/node@20.16.5))(vue@3.5.3(typescript@5.5.4))':
+  '@vitejs/plugin-vue@5.1.3(vite@5.4.3(@types/node@20.16.11))(vue@3.5.3(typescript@5.5.4))':
     dependencies:
-      vite: 5.4.3(@types/node@20.16.5)
+      vite: 5.4.3(@types/node@20.16.11)
       vue: 3.5.3(typescript@5.5.4)
 
-  '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.16.5))':
+  '@vitest/coverage-v8@2.1.2(vitest@2.1.2(@types/node@20.16.11))':
     dependencies:
       '@ampproject/remapping': 2.3.0
       '@bcoe/v8-coverage': 0.2.3
@@ -3122,40 +3119,47 @@ snapshots:
       std-env: 3.7.0
       test-exclude: 7.0.1
       tinyrainbow: 1.2.0
-      vitest: 2.0.5(@types/node@20.16.5)
+      vitest: 2.1.2(@types/node@20.16.11)
     transitivePeerDependencies:
       - supports-color
 
-  '@vitest/expect@2.0.5':
+  '@vitest/expect@2.1.2':
     dependencies:
-      '@vitest/spy': 2.0.5
-      '@vitest/utils': 2.0.5
+      '@vitest/spy': 2.1.2
+      '@vitest/utils': 2.1.2
       chai: 5.1.1
       tinyrainbow: 1.2.0
 
-  '@vitest/pretty-format@2.0.5':
+  '@vitest/mocker@2.1.2(@vitest/spy@2.1.2)(vite@5.4.3(@types/node@20.16.11))':
+    dependencies:
+      '@vitest/spy': 2.1.2
+      estree-walker: 3.0.3
+      magic-string: 0.30.11
+    optionalDependencies:
+      vite: 5.4.3(@types/node@20.16.11)
+
+  '@vitest/pretty-format@2.1.2':
     dependencies:
       tinyrainbow: 1.2.0
 
-  '@vitest/runner@2.0.5':
+  '@vitest/runner@2.1.2':
     dependencies:
-      '@vitest/utils': 2.0.5
+      '@vitest/utils': 2.1.2
       pathe: 1.1.2
 
-  '@vitest/snapshot@2.0.5':
+  '@vitest/snapshot@2.1.2':
     dependencies:
-      '@vitest/pretty-format': 2.0.5
+      '@vitest/pretty-format': 2.1.2
       magic-string: 0.30.11
       pathe: 1.1.2
 
-  '@vitest/spy@2.0.5':
+  '@vitest/spy@2.1.2':
     dependencies:
       tinyspy: 3.0.0
 
-  '@vitest/utils@2.0.5':
+  '@vitest/utils@2.1.2':
     dependencies:
-      '@vitest/pretty-format': 2.0.5
-      estree-walker: 3.0.3
+      '@vitest/pretty-format': 2.1.2
       loupe: 3.1.1
       tinyrainbow: 1.2.0
 
@@ -3677,17 +3681,17 @@ snapshots:
 
   escape-string-regexp@4.0.0: {}
 
-  eslint-config-prettier@9.1.0(eslint@8.57.0):
+  eslint-config-prettier@9.1.0(eslint@8.57.1):
     dependencies:
-      eslint: 8.57.0
+      eslint: 8.57.1
 
   eslint-define-config@2.1.0: {}
 
-  eslint-gitignore@0.1.0(eslint@8.57.0):
+  eslint-gitignore@0.1.0(eslint@8.57.1):
     dependencies:
       array.prototype.flatmap: 1.3.2
       debug: 4.3.7
-      eslint: 8.57.0
+      eslint: 8.57.1
       fast-glob: 3.3.2
     transitivePeerDependencies:
       - supports-color
@@ -3696,14 +3700,14 @@ snapshots:
     dependencies:
       humps: 2.0.1
 
-  eslint-plugin-jsdoc@50.2.2(eslint@8.57.0):
+  eslint-plugin-jsdoc@50.3.1(eslint@8.57.1):
     dependencies:
       '@es-joy/jsdoccomment': 0.48.0
       are-docs-informative: 0.0.2
       comment-parser: 1.4.1
       debug: 4.3.7
       escape-string-regexp: 4.0.0
-      eslint: 8.57.0
+      eslint: 8.57.1
       espree: 10.1.0
       esquery: 1.6.0
       parse-imports: 2.1.1
@@ -3713,30 +3717,30 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3):
+  eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3):
     dependencies:
-      eslint: 8.57.0
+      eslint: 8.57.1
       prettier: 3.3.3
       prettier-linter-helpers: 1.0.0
       synckit: 0.9.1
     optionalDependencies:
-      eslint-config-prettier: 9.1.0(eslint@8.57.0)
+      eslint-config-prettier: 9.1.0(eslint@8.57.1)
 
-  eslint-plugin-spellcheck@0.0.20(eslint@8.57.0):
+  eslint-plugin-spellcheck@0.0.20(eslint@8.57.1):
     dependencies:
-      eslint: 8.57.0
+      eslint: 8.57.1
       globals: 13.24.0
       hunspell-spellchecker: 1.0.2
       lodash: 4.17.21
 
-  eslint-plugin-unicorn@55.0.0(eslint@8.57.0):
+  eslint-plugin-unicorn@55.0.0(eslint@8.57.1):
     dependencies:
       '@babel/helper-validator-identifier': 7.24.7
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
       ci-info: 4.0.0
       clean-regexp: 1.0.0
       core-js-compat: 3.38.1
-      eslint: 8.57.0
+      eslint: 8.57.1
       esquery: 1.6.0
       globals: 15.9.0
       indent-string: 4.0.0
@@ -3758,13 +3762,13 @@ snapshots:
 
   eslint-visitor-keys@4.0.0: {}
 
-  eslint@8.57.0:
+  eslint@8.57.1:
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
       '@eslint-community/regexpp': 4.11.0
       '@eslint/eslintrc': 2.1.4
-      '@eslint/js': 8.57.0
-      '@humanwhocodes/config-array': 0.11.14
+      '@eslint/js': 8.57.1
+      '@humanwhocodes/config-array': 0.13.0
       '@humanwhocodes/module-importer': 1.0.1
       '@nodelib/fs.walk': 1.2.8
       '@ungap/structured-clone': 1.2.0
@@ -3843,18 +3847,6 @@ snapshots:
       signal-exit: 3.0.7
       strip-final-newline: 2.0.0
 
-  execa@8.0.1:
-    dependencies:
-      cross-spawn: 7.0.3
-      get-stream: 8.0.1
-      human-signals: 5.0.0
-      is-stream: 3.0.0
-      merge-stream: 2.0.0
-      npm-run-path: 5.3.0
-      onetime: 6.0.0
-      signal-exit: 4.1.0
-      strip-final-newline: 3.0.0
-
   fast-deep-equal@3.1.3: {}
 
   fast-diff@1.3.0: {}
@@ -3875,6 +3867,10 @@ snapshots:
     dependencies:
       reusify: 1.0.4
 
+  fdir@6.4.0(picomatch@4.0.2):
+    optionalDependencies:
+      picomatch: 4.0.2
+
   file-entry-cache@6.0.1:
     dependencies:
       flat-cache: 3.2.0
@@ -3942,8 +3938,6 @@ snapshots:
 
   get-stream@6.0.1: {}
 
-  get-stream@8.0.1: {}
-
   get-symbol-description@1.0.2:
     dependencies:
       call-bind: 1.0.7
@@ -4041,8 +4035,6 @@ snapshots:
 
   human-signals@2.1.0: {}
 
-  human-signals@5.0.0: {}
-
   humps@2.0.1: {}
 
   hunspell-spellchecker@1.0.2: {}
@@ -4143,8 +4135,6 @@ snapshots:
 
   is-stream@2.0.1: {}
 
-  is-stream@3.0.0: {}
-
   is-string@1.0.7:
     dependencies:
       has-tostringtag: 1.0.2
@@ -4290,8 +4280,6 @@ snapshots:
 
   mimic-fn@2.1.0: {}
 
-  mimic-fn@4.0.0: {}
-
   min-indent@1.0.1: {}
 
   minimatch@10.0.1:
@@ -4337,7 +4325,7 @@ snapshots:
 
   npm-normalize-package-bin@3.0.1: {}
 
-  npm-run-all2@6.2.2:
+  npm-run-all2@6.2.3:
     dependencies:
       ansi-styles: 6.2.1
       cross-spawn: 7.0.3
@@ -4351,10 +4339,6 @@ snapshots:
     dependencies:
       path-key: 3.1.1
 
-  npm-run-path@5.3.0:
-    dependencies:
-      path-key: 4.0.0
-
   object-assign@4.1.1: {}
 
   object-inspect@1.13.2: {}
@@ -4376,10 +4360,6 @@ snapshots:
     dependencies:
       mimic-fn: 2.1.0
 
-  onetime@6.0.0:
-    dependencies:
-      mimic-fn: 4.0.0
-
   optionator@0.9.4:
     dependencies:
       deep-is: 0.1.4
@@ -4431,8 +4411,6 @@ snapshots:
 
   path-key@3.1.1: {}
 
-  path-key@4.0.0: {}
-
   path-parse@1.0.7: {}
 
   path-scurry@1.11.1:
@@ -4457,6 +4435,8 @@ snapshots:
 
   picomatch@2.3.1: {}
 
+  picomatch@4.0.2: {}
+
   pidtree@0.6.0: {}
 
   pirates@4.0.6: {}
@@ -4487,7 +4467,7 @@ snapshots:
     dependencies:
       fast-diff: 1.3.0
 
-  prettier-plugin-organize-imports@4.0.0(prettier@3.3.3)(typescript@5.5.4):
+  prettier-plugin-organize-imports@4.1.0(prettier@3.3.3)(typescript@5.5.4):
     dependencies:
       prettier: 3.3.3
       typescript: 5.5.4
@@ -4728,8 +4708,6 @@ snapshots:
 
   strip-final-newline@2.0.0: {}
 
-  strip-final-newline@3.0.0: {}
-
   strip-indent@3.0.0:
     dependencies:
       min-indent: 1.0.1
@@ -4785,6 +4763,13 @@ snapshots:
 
   tinybench@2.9.0: {}
 
+  tinyexec@0.3.0: {}
+
+  tinyglobby@0.2.9:
+    dependencies:
+      fdir: 6.4.0(picomatch@4.0.2)
+      picomatch: 4.0.2
+
   tinypool@1.0.1: {}
 
   tinyrainbow@1.2.0: {}
@@ -4811,7 +4796,7 @@ snapshots:
 
   tslib@2.7.0: {}
 
-  tsup@8.2.4(postcss@8.4.45)(typescript@5.5.4):
+  tsup@8.3.0(postcss@8.4.45)(typescript@5.5.4):
     dependencies:
       bundle-require: 5.0.0(esbuild@0.23.1)
       cac: 6.7.14
@@ -4820,7 +4805,6 @@ snapshots:
       debug: 4.3.7
       esbuild: 0.23.1
       execa: 5.1.1
-      globby: 11.1.0
       joycon: 3.1.1
       picocolors: 1.1.0
       postcss-load-config: 6.0.1(postcss@8.4.45)
@@ -4828,6 +4812,7 @@ snapshots:
       rollup: 4.21.2
       source-map: 0.8.0-beta.0
       sucrase: 3.35.0
+      tinyglobby: 0.2.9
       tree-kill: 1.2.2
     optionalDependencies:
       postcss: 8.4.45
@@ -4906,13 +4891,12 @@ snapshots:
       spdx-correct: 3.2.0
       spdx-expression-parse: 3.0.1
 
-  vite-node@2.0.5(@types/node@20.16.5):
+  vite-node@2.1.2(@types/node@20.16.11):
     dependencies:
       cac: 6.7.14
       debug: 4.3.7
       pathe: 1.1.2
-      tinyrainbow: 1.2.0
-      vite: 5.4.3(@types/node@20.16.5)
+      vite: 5.4.3(@types/node@20.16.11)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -4924,23 +4908,23 @@ snapshots:
       - supports-color
       - terser
 
-  vite@5.4.3(@types/node@20.16.5):
+  vite@5.4.3(@types/node@20.16.11):
     dependencies:
       esbuild: 0.21.5
       postcss: 8.4.45
       rollup: 4.21.2
     optionalDependencies:
-      '@types/node': 20.16.5
+      '@types/node': 20.16.11
       fsevents: 2.3.3
 
-  vitepress@1.3.4(@algolia/client-search@4.24.0)(@types/node@20.16.5)(postcss@8.4.45)(search-insights@2.17.1)(typescript@5.5.4):
+  vitepress@1.3.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(postcss@8.4.45)(search-insights@2.17.1)(typescript@5.5.4):
     dependencies:
       '@docsearch/css': 3.6.1
       '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.17.1)
       '@shikijs/core': 1.16.2
       '@shikijs/transformers': 1.16.2
       '@types/markdown-it': 14.1.2
-      '@vitejs/plugin-vue': 5.1.3(vite@5.4.3(@types/node@20.16.5))(vue@3.5.3(typescript@5.5.4))
+      '@vitejs/plugin-vue': 5.1.3(vite@5.4.3(@types/node@20.16.11))(vue@3.5.3(typescript@5.5.4))
       '@vue/devtools-api': 7.4.4
       '@vue/shared': 3.5.3
       '@vueuse/core': 11.0.3(vue@3.5.3(typescript@5.5.4))
@@ -4949,7 +4933,7 @@ snapshots:
       mark.js: 8.11.1
       minisearch: 7.1.0
       shiki: 1.16.2
-      vite: 5.4.3(@types/node@20.16.5)
+      vite: 5.4.3(@types/node@20.16.11)
       vue: 3.5.3(typescript@5.5.4)
     optionalDependencies:
       postcss: 8.4.45
@@ -4981,32 +4965,33 @@ snapshots:
       - typescript
       - universal-cookie
 
-  vitest@2.0.5(@types/node@20.16.5):
+  vitest@2.1.2(@types/node@20.16.11):
     dependencies:
-      '@ampproject/remapping': 2.3.0
-      '@vitest/expect': 2.0.5
-      '@vitest/pretty-format': 2.0.5
-      '@vitest/runner': 2.0.5
-      '@vitest/snapshot': 2.0.5
-      '@vitest/spy': 2.0.5
-      '@vitest/utils': 2.0.5
+      '@vitest/expect': 2.1.2
+      '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.3(@types/node@20.16.11))
+      '@vitest/pretty-format': 2.1.2
+      '@vitest/runner': 2.1.2
+      '@vitest/snapshot': 2.1.2
+      '@vitest/spy': 2.1.2
+      '@vitest/utils': 2.1.2
       chai: 5.1.1
       debug: 4.3.7
-      execa: 8.0.1
       magic-string: 0.30.11
       pathe: 1.1.2
       std-env: 3.7.0
       tinybench: 2.9.0
+      tinyexec: 0.3.0
       tinypool: 1.0.1
       tinyrainbow: 1.2.0
-      vite: 5.4.3(@types/node@20.16.5)
-      vite-node: 2.0.5(@types/node@20.16.5)
+      vite: 5.4.3(@types/node@20.16.11)
+      vite-node: 2.1.2(@types/node@20.16.11)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/node': 20.16.5
+      '@types/node': 20.16.11
     transitivePeerDependencies:
       - less
       - lightningcss
+      - msw
       - sass
       - sass-embedded
       - stylus
diff --git a/src/printer.ts b/src/printer.ts
index 1a47402..aa6b8ac 100644
--- a/src/printer.ts
+++ b/src/printer.ts
@@ -1274,24 +1274,73 @@ export class PugPrinter {
   private class(token: ClassToken): void {
     if (this.options.pugClassNotation === 'attribute') {
       this.classLiteralToAttribute.push(token.val);
+
+      // An extra div should be printed if...
       if (
-        this.previousToken?.type !== 'tag' &&
-        this.previousToken?.type !== 'class'
+        this.previousToken === undefined ||
+        // ...the previous token indicates that this was the first class literal and thus a div did not previously exist...
+        this.checkTokenType(
+          this.previousToken,
+          ['tag', 'class', 'end-attributes'],
+          true,
+        ) ||
+        // ...OR the previous token is a div that will be removed because of the no explicit divs rule.
+        (this.previousToken.type === 'tag' &&
+          this.previousToken.val === 'div' &&
+          this.nextToken?.type !== 'attribute' &&
+          !this.options.pugExplicitDiv)
       ) {
         this.result += `${this.computedIndent}div`;
       }
+
       if (
-        this.nextToken &&
-        ['text', 'newline', 'indent', 'outdent', 'eos'].includes(
-          this.nextToken.type,
-        )
+        this.checkTokenType(this.nextToken, [
+          'text',
+          'newline',
+          'indent',
+          'outdent',
+          'eos',
+          ':',
+        ])
       ) {
+        // Copy and clear the class literals list.
         const classes: string[] = this.classLiteralToAttribute.splice(
           0,
           this.classLiteralToAttribute.length,
         );
-        this.result += `(class=${this.quoteString(classes.join(' '))})`;
-        if (this.nextToken.type === 'text') {
+
+        // If the last result character was a )...
+        if (this.result.at(-1) === ')') {
+          // Look for 'class=' that is before the last '('...
+          const attributesStartIndex: number = this.result.lastIndexOf('(');
+          const lastClassIndex: number = this.result.indexOf(
+            'class=',
+            attributesStartIndex,
+          );
+
+          // If a 'class=' is found...
+          // eslint-disable-next-line unicorn/prefer-ternary -- This is more readable without ternaries.
+          if (lastClassIndex > -1) {
+            // ...then insert the new class into it.
+            this.result = [
+              this.result.slice(0, lastClassIndex + 7),
+              classes.join(' '),
+              ' ',
+              this.result.slice(lastClassIndex + 7),
+            ].join('');
+          } else {
+            // ...otherwise add a new class attribute into the existing attributes.
+            this.result =
+              this.result.slice(0, -1) +
+              `${this.neverUseAttributeSeparator ? ' ' : ', '}class=${this.quoteString(classes.join(' '))})`;
+          }
+          // ...or if the element has no attributes...
+        } else {
+          // Start a new attribute list with the class attribute in it.
+          this.result += `(class=${this.quoteString(classes.join(' '))})`;
+        }
+
+        if (this.nextToken?.type === 'text') {
           this.result += ' ';
         }
       }


Test patch:
diff --git a/tests/options/pugClassNotation/formatted-as-is.pug b/tests/options/pugClassNotation/formatted-as-is.pug
new file mode 100644
index 0000000..d7646a5
--- /dev/null
+++ b/tests/options/pugClassNotation/formatted-as-is.pug
@@ -0,0 +1,55 @@
+input.bar.baz(class="foo")
+input.bar.baz(
+  readonly,
+  class="foo",
+  name="test-input",
+  type="password",
+  value="Hello World"
+)
+.foo bar
+.foo(bar="baz") Hello World
+.foo
+  div(class="bar") baz
+.baz
+.bar foo
+- var code = "ma-2 px-1";
+div(class=code)
+.foo
+div.foo(attribute="value")
+div.foo(class="bar", attribute="value")
+div.foo.baz(attribute="value", class="bar")
+div.foo.baz(attribute="value", class="bar")
+.foo.baz(attribute="value", class="bar")
+div.bar(class="foo"): span Text
+div: span.foo
+div: span(class="foo")
+.foo: span.bar.foo(class="baz")
+.foo.baz(class="bar"): h1.foo.baz(class="bar") Let's really #[span.foo.baz(class="bar") get nasty]!
+.indent
+  input.bar.baz(class="foo")
+  input.bar.baz(
+    readonly,
+    class="foo",
+    name="test-input",
+    type="password",
+    value="Hello World"
+  )
+  .foo bar
+  .foo(bar="baz") Hello World
+  .foo
+    div(class="bar") baz
+  .baz
+  .bar foo
+  - var code = "ma-2 px-1";
+  div(class=code)
+  .foo
+  div.foo(attribute="value")
+  div.foo(class="bar", attribute="value")
+  div.foo.baz(attribute="value", class="bar")
+  div.foo.baz(attribute="value", class="bar")
+  .foo.baz(attribute="value", class="bar")
+  div.bar(class="foo"): span Text
+  div: span.foo
+  div: span(class="foo")
+  .foo: span.bar.foo(class="baz")
+  .foo.baz(class="bar"): h1.foo.baz(class="bar") Let's really #[span.foo.baz(class="bar") get nasty]!
diff --git a/tests/options/pugClassNotation/formatted-attribute.pug b/tests/options/pugClassNotation/formatted-attribute.pug
index b13d68e..8681466 100644
--- a/tests/options/pugClassNotation/formatted-attribute.pug
+++ b/tests/options/pugClassNotation/formatted-attribute.pug
@@ -8,3 +8,36 @@ div(class="baz")
 div(class="bar") foo
 - var code = "ma-2 px-1";
 div(class=code)
+div(class="foo")
+div(attribute="value", class="foo")
+div(class="foo bar", attribute="value")
+div(attribute="value", class="foo baz bar")
+div(attribute="value", class="foo baz bar")
+div(attribute="value", class="baz foo bar")
+div(class="bar foo"): span Text
+div: span(class="foo")
+div: span(class="foo")
+div(class="foo"): span(class="foo bar baz")
+div(class="baz foo bar"): h1(class="baz foo bar") Let's really #[span(class="baz foo bar") get nasty]!
+div(class="indent")
+  input(class="bar baz foo")
+  input(readonly, class="bar baz foo", name="test-input", type="password", value="Hello World")
+  div(class="foo") bar
+  div(bar="baz" class="foo") Hello World
+  div(class="foo")
+    div(class="bar") baz
+  div(class="baz")
+  div(class="bar") foo
+  - var code = "ma-2 px-1";
+  div(class=code)
+  div(class="foo")
+  div(attribute="value", class="foo")
+  div(class="foo bar", attribute="value")
+  div(attribute="value", class="foo baz bar")
+  div(attribute="value", class="foo baz bar")
+  div(attribute="value", class="baz foo bar")
+  div(class="bar foo"): span Text
+  div: span(class="foo")
+  div: span(class="foo")
+  div(class="foo"): span(class="foo bar baz")
+  div(class="baz foo bar"): h1(class="baz foo bar") Let's really #[span(class="baz foo bar") get nasty]!
diff --git a/tests/options/pugClassNotation/formatted-literal.pug b/tests/options/pugClassNotation/formatted-literal.pug
index b0af196..76eb9ee 100644
--- a/tests/options/pugClassNotation/formatted-literal.pug
+++ b/tests/options/pugClassNotation/formatted-literal.pug
@@ -13,3 +13,41 @@ input.bar.baz.foo(
 .bar foo
 - var code = "ma-2 px-1";
 div(class=code)
+.foo
+div.foo(attribute="value")
+.bar.foo(attribute="value")
+.bar.foo.baz(attribute="value")
+.bar.foo.baz(attribute="value")
+.foo.bar.baz(attribute="value")
+.foo.bar: span Text
+div: span.foo
+div: span.foo
+.foo: span.bar.baz.foo
+.foo.bar.baz: h1.foo.bar.baz Let's really #[span.foo.bar.baz get nasty]!
+.indent
+  input.bar.baz.foo
+  input.bar.baz.foo(
+    readonly,
+    name="test-input",
+    type="password",
+    value="Hello World"
+  )
+  .foo bar
+  .foo(bar="baz") Hello World
+  .foo
+    .bar baz
+  .baz
+  .bar foo
+  - var code = "ma-2 px-1";
+  div(class=code)
+  .foo
+  div.foo(attribute="value")
+  .bar.foo(attribute="value")
+  .bar.foo.baz(attribute="value")
+  .bar.foo.baz(attribute="value")
+  .foo.bar.baz(attribute="value")
+  .foo.bar: span Text
+  div: span.foo
+  div: span.foo
+  .foo: span.bar.baz.foo
+  .foo.bar.baz: h1.foo.bar.baz Let's really #[span.foo.bar.baz get nasty]!
diff --git a/tests/options/pugClassNotation/pug-class-notation.test.ts b/tests/options/pugClassNotation/pug-class-notation.test.ts
index ea76a6d..4c842b5 100644
--- a/tests/options/pugClassNotation/pug-class-notation.test.ts
+++ b/tests/options/pugClassNotation/pug-class-notation.test.ts
@@ -4,13 +4,13 @@ import { describe, expect, it } from 'vitest';
 describe('Options', () => {
   describe('pugClassNotation', () => {
     it('should keep classes as is', async () => {
-      const { actual, code } = await compareFiles(import.meta.url, {
-        target: null,
+      const { actual, expected } = await compareFiles(import.meta.url, {
+        target: 'formatted-as-is.pug',
         formatOptions: {
           pugClassNotation: 'as-is',
         },
       });
-      expect(actual).toBe(code);
+      expect(actual).toBe(expected);
     });
 
     it('should keep classes as literals', async () => {
diff --git a/tests/options/pugClassNotation/unformatted.pug b/tests/options/pugClassNotation/unformatted.pug
index 9b0b78b..1b47c50 100644
--- a/tests/options/pugClassNotation/unformatted.pug
+++ b/tests/options/pugClassNotation/unformatted.pug
@@ -14,3 +14,48 @@ input.bar.baz(
 .bar foo
 - var code = "ma-2 px-1";
 div(class=code)
+div.foo
+div(attribute="value").foo
+div(class="bar", attribute="value").foo
+div(attribute="value", class="bar").foo.baz
+div(
+  attribute="value"
+  class="bar"
+).foo.baz
+div.foo(attribute="value" class="bar").baz
+div(class="foo").bar: span Text
+div: span.foo
+div: span(class="foo")
+div.foo: span.bar(class="baz").foo
+div.foo(class="bar").baz: h1.foo(class="bar").baz Let's really #[span.foo(class="bar").baz get nasty]!
+.indent
+  input.bar.baz(class="foo")
+  input.bar.baz(
+    readonly,
+    class="foo",
+    name="test-input",
+    type="password",
+    value="Hello World"
+  )
+  .foo bar
+  .foo(bar="baz") Hello World
+  .foo
+    div(class="bar") baz
+  .baz
+  .bar foo
+  - var code = "ma-2 px-1";
+  div(class=code)
+  div.foo
+  div(attribute="value").foo
+  div(class="bar", attribute="value").foo
+  div(attribute="value", class="bar").foo.baz
+  div(
+    attribute="value"
+    class="bar"
+  ).foo.baz
+  div.foo(attribute="value" class="bar").baz
+  div(class="foo").bar: span Text
+  div: span.foo
+  div: span(class="foo")
+  div.foo: span.bar(class="baz").foo
+  div.foo(class="bar").baz: h1.foo(class="bar").baz Let's really #[span.foo(class="bar").baz get nasty]!