├── .eslintignore ├── .eslintrc ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── esbuild.config.mjs ├── example.png ├── manifest.json ├── package-lock.json ├── package.json ├── src ├── main.ts └── settings.ts ├── styles.css ├── tsconfig.json ├── version-bump.mjs └── versions.json /.eslintignore: -------------------------------------------------------------------------------- 1 | npm node_modules 2 | build -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "env": { "node": true }, 5 | "plugins": [ 6 | "@typescript-eslint" 7 | ], 8 | "extends": [ 9 | "standard", 10 | "eslint:recommended", 11 | "plugin:@typescript-eslint/eslint-recommended", 12 | "plugin:@typescript-eslint/recommended" 13 | ], 14 | "parserOptions": { 15 | "sourceType": "module" 16 | }, 17 | "rules": { 18 | "no-new": "off", 19 | "no-unused-vars": "off", 20 | "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], 21 | "@typescript-eslint/ban-ts-comment": "off", 22 | "no-prototype-builtins": "off", 23 | "@typescript-eslint/no-empty-function": "off", 24 | // Use single quotes 25 | "quotes": ["error", "single"], 26 | // Don't require semi colons 27 | "semi": ["error", "never"], 28 | "arrow-parens": ["error", "as-needed"] 29 | } 30 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # vscode 2 | .vscode 3 | 4 | # Intellij 5 | *.iml 6 | .idea 7 | 8 | # npm 9 | node_modules 10 | 11 | # Don't include the compiled main.js file in the repo. 12 | # They should be uploaded to GitHub releases instead. 13 | main.js 14 | 15 | # Exclude sourcemaps 16 | *.map 17 | 18 | # obsidian 19 | data.json 20 | 21 | # Exclude macOS Finder (System Explorer) View States 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://img.shields.io/github/license/alangrainger/obsidian-image-captions) ![](https://img.shields.io/github/v/release/alangrainger/obsidian-image-captions?style=flat-square) ![](https://img.shields.io/github/downloads/alangrainger/obsidian-image-captions/total) 2 | 3 | # Add image captions 4 | 5 | Add an image in this format: 6 | 7 | ```markdown 8 | ![[image.jpg|This is a caption]] 9 | ``` 10 | 11 | or this format: 12 | 13 | ```markdown 14 | ![This is a caption](image.jpg) 15 | ``` 16 | 17 | and it will add the caption underneath the image, like this: 18 | 19 | ![](example.png) 20 | 21 | ## Resize images 22 | 23 | You can use the existing Obsidian width parameter to resize your images: 24 | 25 | ```markdown 26 | ![[image.jpg|This is a caption|150]] 27 | ``` 28 | 29 | or this format: 30 | 31 | ```markdown 32 | ![This is a caption|150](image.jpg) 33 | ``` 34 | 35 | ## Markdown in captions 36 | 37 | You can include inline Markdown and it will be rendered as part of the caption: 38 | 39 | ```markdown 40 | ![[image.jpg|This is a caption with **bold text**]] 41 | ``` 42 | 43 | You can use Markdown links as normal: 44 | 45 | ```markdown 46 | ![[image.jpg|This is a caption with [a link to Obsidian](https://obsidian.md)]] 47 | ``` 48 | 49 | To use Wikilinks, you'll need to swap your square brackets `[[]]` for angle brackets `<<>>`: 50 | 51 | ```markdown 52 | ![[image.jpg|This is a caption with <>]] 53 | ``` 54 | 55 | ## Use filename as caption 56 | 57 | If you want to use the image filename as the caption, specify `%` as the sole text of your 58 | caption, and it will replace that with the filename (without extension): 59 | 60 | ```markdown 61 | ![[image.jpg|%]] 62 | ``` 63 | 64 | If you want to literally use the `%` character as the caption, you can escape it: 65 | 66 | ```markdown 67 | ![[image.jpg|\%]] 68 | ``` 69 | 70 | If you want the filename including extension, use `%.%`. 71 | 72 | ## Custom regex to filter caption 73 | 74 | If you use other themes or plugins which require you to add data into the image description field, you can use a 75 | regex to remove those from the final caption. You will find this in the plugin Settings. 76 | 77 | Two common examples would be from the ITS Theme, which lets you put `|right` etc to change the postion of your image. 78 | 79 | To remove everything after the first pipe `|` character from your caption: 80 | 81 | ``` 82 | ^([^|]+) 83 | ``` 84 | 85 | If you want to keep escaped pipes `\|` (in case you are using internal links), use: 86 | 87 | ``` 88 | ^((\\\||[^|])+) 89 | ``` 90 | 91 | ## Styling 92 | 93 | You can apply CSS styling by targeting the `.image-captions-figure` and `.image-captions-caption` classes. 94 | 95 | ## Limitations 96 | 97 | The captions won't show for external images in **Editing / Live Preview** mode. For example: 98 | 99 | ```markdown 100 | ![Not visible in Editing mode](https://obsidian.md/logo.png) 101 | ``` 102 | 103 | I couldn't find a reliable way of targeting them. Get in touch if you know a way to do this! 104 | 105 | --- 106 | 107 | This plugin is based on concepts from https://github.com/bicarlsen/obsidian_image_caption 108 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild"; 2 | import process from "process"; 3 | import builtins from 'builtin-modules' 4 | 5 | const banner = 6 | `/* 7 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 8 | if you want to view the source, please visit the github repository of this plugin 9 | */ 10 | `; 11 | 12 | const prod = (process.argv[2] === 'production'); 13 | 14 | esbuild.build({ 15 | banner: { 16 | js: banner, 17 | }, 18 | entryPoints: ['main.ts'], 19 | bundle: true, 20 | external: [ 21 | 'obsidian', 22 | 'electron', 23 | '@codemirror/autocomplete', 24 | '@codemirror/collab', 25 | '@codemirror/commands', 26 | '@codemirror/language', 27 | '@codemirror/lint', 28 | '@codemirror/search', 29 | '@codemirror/state', 30 | '@codemirror/view', 31 | '@lezer/common', 32 | '@lezer/highlight', 33 | '@lezer/lr', 34 | ...builtins], 35 | format: 'cjs', 36 | watch: !prod, 37 | target: 'es2018', 38 | logLevel: "info", 39 | sourcemap: prod ? false : 'inline', 40 | treeShaking: true, 41 | outfile: 'main.js', 42 | }).catch(() => process.exit(1)); 43 | -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alangrainger/obsidian-image-captions/ed8445a3cd29356c3189859f70500792e25787c2/example.png -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "image-captions", 3 | "name": "Image Captions", 4 | "version": "1.1.5", 5 | "minAppVersion": "0.15.0", 6 | "description": "Adds captions to images when there is alt-text specified", 7 | "author": "Alan Grainger", 8 | "authorUrl": "https://github.com/alangrainger", 9 | "fundingUrl": "https://ko-fi.com/alan_", 10 | "isDesktopOnly": false 11 | } 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "image-captions", 3 | "version": "1.1.5", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "image-captions", 9 | "version": "1.1.5", 10 | "license": "GPL-3.0-or-later", 11 | "devDependencies": { 12 | "@types/node": "^16.11.6", 13 | "@typescript-eslint/eslint-plugin": "5.29.0", 14 | "@typescript-eslint/parser": "5.29.0", 15 | "builtin-modules": "3.3.0", 16 | "esbuild": "0.14.47", 17 | "eslint": "^8.49.0", 18 | "eslint-config-standard": "^17.1.0", 19 | "obsidian": "latest", 20 | "tslib": "2.4.0", 21 | "typescript": "4.7.4" 22 | } 23 | }, 24 | "node_modules/@aashutoshrathi/word-wrap": { 25 | "version": "1.2.6", 26 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 27 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 28 | "dev": true, 29 | "engines": { 30 | "node": ">=0.10.0" 31 | } 32 | }, 33 | "node_modules/@codemirror/state": { 34 | "version": "6.2.1", 35 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", 36 | "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==", 37 | "dev": true, 38 | "peer": true 39 | }, 40 | "node_modules/@codemirror/view": { 41 | "version": "6.16.0", 42 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.16.0.tgz", 43 | "integrity": "sha512-1Z2HkvkC3KR/oEZVuW9Ivmp8TWLzGEd8T8TA04TTwPvqogfkHBdYSlflytDOqmkUxM2d1ywTg7X2dU5mC+SXvg==", 44 | "dev": true, 45 | "peer": true, 46 | "dependencies": { 47 | "@codemirror/state": "^6.1.4", 48 | "style-mod": "^4.0.0", 49 | "w3c-keyname": "^2.2.4" 50 | } 51 | }, 52 | "node_modules/@eslint-community/eslint-utils": { 53 | "version": "4.4.0", 54 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 55 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 56 | "dev": true, 57 | "dependencies": { 58 | "eslint-visitor-keys": "^3.3.0" 59 | }, 60 | "engines": { 61 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 62 | }, 63 | "peerDependencies": { 64 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 65 | } 66 | }, 67 | "node_modules/@eslint-community/regexpp": { 68 | "version": "4.6.2", 69 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", 70 | "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", 71 | "dev": true, 72 | "engines": { 73 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 74 | } 75 | }, 76 | "node_modules/@eslint/eslintrc": { 77 | "version": "2.1.2", 78 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", 79 | "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", 80 | "dev": true, 81 | "dependencies": { 82 | "ajv": "^6.12.4", 83 | "debug": "^4.3.2", 84 | "espree": "^9.6.0", 85 | "globals": "^13.19.0", 86 | "ignore": "^5.2.0", 87 | "import-fresh": "^3.2.1", 88 | "js-yaml": "^4.1.0", 89 | "minimatch": "^3.1.2", 90 | "strip-json-comments": "^3.1.1" 91 | }, 92 | "engines": { 93 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 94 | }, 95 | "funding": { 96 | "url": "https://opencollective.com/eslint" 97 | } 98 | }, 99 | "node_modules/@eslint/js": { 100 | "version": "8.49.0", 101 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", 102 | "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", 103 | "dev": true, 104 | "engines": { 105 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 106 | } 107 | }, 108 | "node_modules/@humanwhocodes/config-array": { 109 | "version": "0.11.11", 110 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", 111 | "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", 112 | "dev": true, 113 | "dependencies": { 114 | "@humanwhocodes/object-schema": "^1.2.1", 115 | "debug": "^4.1.1", 116 | "minimatch": "^3.0.5" 117 | }, 118 | "engines": { 119 | "node": ">=10.10.0" 120 | } 121 | }, 122 | "node_modules/@humanwhocodes/module-importer": { 123 | "version": "1.0.1", 124 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 125 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 126 | "dev": true, 127 | "engines": { 128 | "node": ">=12.22" 129 | }, 130 | "funding": { 131 | "type": "github", 132 | "url": "https://github.com/sponsors/nzakas" 133 | } 134 | }, 135 | "node_modules/@humanwhocodes/object-schema": { 136 | "version": "1.2.1", 137 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 138 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 139 | "dev": true 140 | }, 141 | "node_modules/@nodelib/fs.scandir": { 142 | "version": "2.1.5", 143 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 144 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 145 | "dev": true, 146 | "dependencies": { 147 | "@nodelib/fs.stat": "2.0.5", 148 | "run-parallel": "^1.1.9" 149 | }, 150 | "engines": { 151 | "node": ">= 8" 152 | } 153 | }, 154 | "node_modules/@nodelib/fs.stat": { 155 | "version": "2.0.5", 156 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 157 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 158 | "dev": true, 159 | "engines": { 160 | "node": ">= 8" 161 | } 162 | }, 163 | "node_modules/@nodelib/fs.walk": { 164 | "version": "1.2.8", 165 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 166 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 167 | "dev": true, 168 | "dependencies": { 169 | "@nodelib/fs.scandir": "2.1.5", 170 | "fastq": "^1.6.0" 171 | }, 172 | "engines": { 173 | "node": ">= 8" 174 | } 175 | }, 176 | "node_modules/@types/codemirror": { 177 | "version": "0.0.108", 178 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz", 179 | "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", 180 | "dev": true, 181 | "dependencies": { 182 | "@types/tern": "*" 183 | } 184 | }, 185 | "node_modules/@types/estree": { 186 | "version": "1.0.0", 187 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", 188 | "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", 189 | "dev": true 190 | }, 191 | "node_modules/@types/json-schema": { 192 | "version": "7.0.11", 193 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", 194 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", 195 | "dev": true 196 | }, 197 | "node_modules/@types/json5": { 198 | "version": "0.0.29", 199 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 200 | "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", 201 | "dev": true, 202 | "peer": true 203 | }, 204 | "node_modules/@types/node": { 205 | "version": "16.18.11", 206 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", 207 | "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", 208 | "dev": true 209 | }, 210 | "node_modules/@types/tern": { 211 | "version": "0.23.4", 212 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", 213 | "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", 214 | "dev": true, 215 | "dependencies": { 216 | "@types/estree": "*" 217 | } 218 | }, 219 | "node_modules/@typescript-eslint/eslint-plugin": { 220 | "version": "5.29.0", 221 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", 222 | "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", 223 | "dev": true, 224 | "dependencies": { 225 | "@typescript-eslint/scope-manager": "5.29.0", 226 | "@typescript-eslint/type-utils": "5.29.0", 227 | "@typescript-eslint/utils": "5.29.0", 228 | "debug": "^4.3.4", 229 | "functional-red-black-tree": "^1.0.1", 230 | "ignore": "^5.2.0", 231 | "regexpp": "^3.2.0", 232 | "semver": "^7.3.7", 233 | "tsutils": "^3.21.0" 234 | }, 235 | "engines": { 236 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 237 | }, 238 | "funding": { 239 | "type": "opencollective", 240 | "url": "https://opencollective.com/typescript-eslint" 241 | }, 242 | "peerDependencies": { 243 | "@typescript-eslint/parser": "^5.0.0", 244 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 245 | }, 246 | "peerDependenciesMeta": { 247 | "typescript": { 248 | "optional": true 249 | } 250 | } 251 | }, 252 | "node_modules/@typescript-eslint/parser": { 253 | "version": "5.29.0", 254 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", 255 | "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", 256 | "dev": true, 257 | "dependencies": { 258 | "@typescript-eslint/scope-manager": "5.29.0", 259 | "@typescript-eslint/types": "5.29.0", 260 | "@typescript-eslint/typescript-estree": "5.29.0", 261 | "debug": "^4.3.4" 262 | }, 263 | "engines": { 264 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 265 | }, 266 | "funding": { 267 | "type": "opencollective", 268 | "url": "https://opencollective.com/typescript-eslint" 269 | }, 270 | "peerDependencies": { 271 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 272 | }, 273 | "peerDependenciesMeta": { 274 | "typescript": { 275 | "optional": true 276 | } 277 | } 278 | }, 279 | "node_modules/@typescript-eslint/scope-manager": { 280 | "version": "5.29.0", 281 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", 282 | "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", 283 | "dev": true, 284 | "dependencies": { 285 | "@typescript-eslint/types": "5.29.0", 286 | "@typescript-eslint/visitor-keys": "5.29.0" 287 | }, 288 | "engines": { 289 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 290 | }, 291 | "funding": { 292 | "type": "opencollective", 293 | "url": "https://opencollective.com/typescript-eslint" 294 | } 295 | }, 296 | "node_modules/@typescript-eslint/type-utils": { 297 | "version": "5.29.0", 298 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", 299 | "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", 300 | "dev": true, 301 | "dependencies": { 302 | "@typescript-eslint/utils": "5.29.0", 303 | "debug": "^4.3.4", 304 | "tsutils": "^3.21.0" 305 | }, 306 | "engines": { 307 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 308 | }, 309 | "funding": { 310 | "type": "opencollective", 311 | "url": "https://opencollective.com/typescript-eslint" 312 | }, 313 | "peerDependencies": { 314 | "eslint": "*" 315 | }, 316 | "peerDependenciesMeta": { 317 | "typescript": { 318 | "optional": true 319 | } 320 | } 321 | }, 322 | "node_modules/@typescript-eslint/types": { 323 | "version": "5.29.0", 324 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", 325 | "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", 326 | "dev": true, 327 | "engines": { 328 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 329 | }, 330 | "funding": { 331 | "type": "opencollective", 332 | "url": "https://opencollective.com/typescript-eslint" 333 | } 334 | }, 335 | "node_modules/@typescript-eslint/typescript-estree": { 336 | "version": "5.29.0", 337 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", 338 | "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", 339 | "dev": true, 340 | "dependencies": { 341 | "@typescript-eslint/types": "5.29.0", 342 | "@typescript-eslint/visitor-keys": "5.29.0", 343 | "debug": "^4.3.4", 344 | "globby": "^11.1.0", 345 | "is-glob": "^4.0.3", 346 | "semver": "^7.3.7", 347 | "tsutils": "^3.21.0" 348 | }, 349 | "engines": { 350 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 351 | }, 352 | "funding": { 353 | "type": "opencollective", 354 | "url": "https://opencollective.com/typescript-eslint" 355 | }, 356 | "peerDependenciesMeta": { 357 | "typescript": { 358 | "optional": true 359 | } 360 | } 361 | }, 362 | "node_modules/@typescript-eslint/utils": { 363 | "version": "5.29.0", 364 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", 365 | "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", 366 | "dev": true, 367 | "dependencies": { 368 | "@types/json-schema": "^7.0.9", 369 | "@typescript-eslint/scope-manager": "5.29.0", 370 | "@typescript-eslint/types": "5.29.0", 371 | "@typescript-eslint/typescript-estree": "5.29.0", 372 | "eslint-scope": "^5.1.1", 373 | "eslint-utils": "^3.0.0" 374 | }, 375 | "engines": { 376 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 377 | }, 378 | "funding": { 379 | "type": "opencollective", 380 | "url": "https://opencollective.com/typescript-eslint" 381 | }, 382 | "peerDependencies": { 383 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" 384 | } 385 | }, 386 | "node_modules/@typescript-eslint/visitor-keys": { 387 | "version": "5.29.0", 388 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", 389 | "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", 390 | "dev": true, 391 | "dependencies": { 392 | "@typescript-eslint/types": "5.29.0", 393 | "eslint-visitor-keys": "^3.3.0" 394 | }, 395 | "engines": { 396 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 397 | }, 398 | "funding": { 399 | "type": "opencollective", 400 | "url": "https://opencollective.com/typescript-eslint" 401 | } 402 | }, 403 | "node_modules/acorn": { 404 | "version": "8.10.0", 405 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 406 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 407 | "dev": true, 408 | "bin": { 409 | "acorn": "bin/acorn" 410 | }, 411 | "engines": { 412 | "node": ">=0.4.0" 413 | } 414 | }, 415 | "node_modules/acorn-jsx": { 416 | "version": "5.3.2", 417 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 418 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 419 | "dev": true, 420 | "peerDependencies": { 421 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 422 | } 423 | }, 424 | "node_modules/ajv": { 425 | "version": "6.12.6", 426 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 427 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 428 | "dev": true, 429 | "dependencies": { 430 | "fast-deep-equal": "^3.1.1", 431 | "fast-json-stable-stringify": "^2.0.0", 432 | "json-schema-traverse": "^0.4.1", 433 | "uri-js": "^4.2.2" 434 | }, 435 | "funding": { 436 | "type": "github", 437 | "url": "https://github.com/sponsors/epoberezkin" 438 | } 439 | }, 440 | "node_modules/ansi-regex": { 441 | "version": "5.0.1", 442 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 443 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 444 | "dev": true, 445 | "engines": { 446 | "node": ">=8" 447 | } 448 | }, 449 | "node_modules/ansi-styles": { 450 | "version": "4.3.0", 451 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 452 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 453 | "dev": true, 454 | "dependencies": { 455 | "color-convert": "^2.0.1" 456 | }, 457 | "engines": { 458 | "node": ">=8" 459 | }, 460 | "funding": { 461 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 462 | } 463 | }, 464 | "node_modules/argparse": { 465 | "version": "2.0.1", 466 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 467 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 468 | "dev": true 469 | }, 470 | "node_modules/array-buffer-byte-length": { 471 | "version": "1.0.0", 472 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", 473 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", 474 | "dev": true, 475 | "peer": true, 476 | "dependencies": { 477 | "call-bind": "^1.0.2", 478 | "is-array-buffer": "^3.0.1" 479 | }, 480 | "funding": { 481 | "url": "https://github.com/sponsors/ljharb" 482 | } 483 | }, 484 | "node_modules/array-includes": { 485 | "version": "3.1.7", 486 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", 487 | "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", 488 | "dev": true, 489 | "peer": true, 490 | "dependencies": { 491 | "call-bind": "^1.0.2", 492 | "define-properties": "^1.2.0", 493 | "es-abstract": "^1.22.1", 494 | "get-intrinsic": "^1.2.1", 495 | "is-string": "^1.0.7" 496 | }, 497 | "engines": { 498 | "node": ">= 0.4" 499 | }, 500 | "funding": { 501 | "url": "https://github.com/sponsors/ljharb" 502 | } 503 | }, 504 | "node_modules/array-union": { 505 | "version": "2.1.0", 506 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 507 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 508 | "dev": true, 509 | "engines": { 510 | "node": ">=8" 511 | } 512 | }, 513 | "node_modules/array.prototype.findlastindex": { 514 | "version": "1.2.3", 515 | "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", 516 | "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", 517 | "dev": true, 518 | "peer": true, 519 | "dependencies": { 520 | "call-bind": "^1.0.2", 521 | "define-properties": "^1.2.0", 522 | "es-abstract": "^1.22.1", 523 | "es-shim-unscopables": "^1.0.0", 524 | "get-intrinsic": "^1.2.1" 525 | }, 526 | "engines": { 527 | "node": ">= 0.4" 528 | }, 529 | "funding": { 530 | "url": "https://github.com/sponsors/ljharb" 531 | } 532 | }, 533 | "node_modules/array.prototype.flat": { 534 | "version": "1.3.2", 535 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", 536 | "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", 537 | "dev": true, 538 | "peer": true, 539 | "dependencies": { 540 | "call-bind": "^1.0.2", 541 | "define-properties": "^1.2.0", 542 | "es-abstract": "^1.22.1", 543 | "es-shim-unscopables": "^1.0.0" 544 | }, 545 | "engines": { 546 | "node": ">= 0.4" 547 | }, 548 | "funding": { 549 | "url": "https://github.com/sponsors/ljharb" 550 | } 551 | }, 552 | "node_modules/array.prototype.flatmap": { 553 | "version": "1.3.2", 554 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", 555 | "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", 556 | "dev": true, 557 | "peer": true, 558 | "dependencies": { 559 | "call-bind": "^1.0.2", 560 | "define-properties": "^1.2.0", 561 | "es-abstract": "^1.22.1", 562 | "es-shim-unscopables": "^1.0.0" 563 | }, 564 | "engines": { 565 | "node": ">= 0.4" 566 | }, 567 | "funding": { 568 | "url": "https://github.com/sponsors/ljharb" 569 | } 570 | }, 571 | "node_modules/arraybuffer.prototype.slice": { 572 | "version": "1.0.2", 573 | "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", 574 | "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", 575 | "dev": true, 576 | "peer": true, 577 | "dependencies": { 578 | "array-buffer-byte-length": "^1.0.0", 579 | "call-bind": "^1.0.2", 580 | "define-properties": "^1.2.0", 581 | "es-abstract": "^1.22.1", 582 | "get-intrinsic": "^1.2.1", 583 | "is-array-buffer": "^3.0.2", 584 | "is-shared-array-buffer": "^1.0.2" 585 | }, 586 | "engines": { 587 | "node": ">= 0.4" 588 | }, 589 | "funding": { 590 | "url": "https://github.com/sponsors/ljharb" 591 | } 592 | }, 593 | "node_modules/available-typed-arrays": { 594 | "version": "1.0.5", 595 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 596 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 597 | "dev": true, 598 | "peer": true, 599 | "engines": { 600 | "node": ">= 0.4" 601 | }, 602 | "funding": { 603 | "url": "https://github.com/sponsors/ljharb" 604 | } 605 | }, 606 | "node_modules/balanced-match": { 607 | "version": "1.0.2", 608 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 609 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 610 | "dev": true 611 | }, 612 | "node_modules/brace-expansion": { 613 | "version": "1.1.11", 614 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 615 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 616 | "dev": true, 617 | "dependencies": { 618 | "balanced-match": "^1.0.0", 619 | "concat-map": "0.0.1" 620 | } 621 | }, 622 | "node_modules/braces": { 623 | "version": "3.0.3", 624 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 625 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 626 | "dev": true, 627 | "license": "MIT", 628 | "dependencies": { 629 | "fill-range": "^7.1.1" 630 | }, 631 | "engines": { 632 | "node": ">=8" 633 | } 634 | }, 635 | "node_modules/builtin-modules": { 636 | "version": "3.3.0", 637 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 638 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 639 | "dev": true, 640 | "engines": { 641 | "node": ">=6" 642 | }, 643 | "funding": { 644 | "url": "https://github.com/sponsors/sindresorhus" 645 | } 646 | }, 647 | "node_modules/builtins": { 648 | "version": "5.0.1", 649 | "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", 650 | "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", 651 | "dev": true, 652 | "peer": true, 653 | "dependencies": { 654 | "semver": "^7.0.0" 655 | } 656 | }, 657 | "node_modules/call-bind": { 658 | "version": "1.0.2", 659 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 660 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 661 | "dev": true, 662 | "peer": true, 663 | "dependencies": { 664 | "function-bind": "^1.1.1", 665 | "get-intrinsic": "^1.0.2" 666 | }, 667 | "funding": { 668 | "url": "https://github.com/sponsors/ljharb" 669 | } 670 | }, 671 | "node_modules/callsites": { 672 | "version": "3.1.0", 673 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 674 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 675 | "dev": true, 676 | "engines": { 677 | "node": ">=6" 678 | } 679 | }, 680 | "node_modules/chalk": { 681 | "version": "4.1.2", 682 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 683 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 684 | "dev": true, 685 | "dependencies": { 686 | "ansi-styles": "^4.1.0", 687 | "supports-color": "^7.1.0" 688 | }, 689 | "engines": { 690 | "node": ">=10" 691 | }, 692 | "funding": { 693 | "url": "https://github.com/chalk/chalk?sponsor=1" 694 | } 695 | }, 696 | "node_modules/color-convert": { 697 | "version": "2.0.1", 698 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 699 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 700 | "dev": true, 701 | "dependencies": { 702 | "color-name": "~1.1.4" 703 | }, 704 | "engines": { 705 | "node": ">=7.0.0" 706 | } 707 | }, 708 | "node_modules/color-name": { 709 | "version": "1.1.4", 710 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 711 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 712 | "dev": true 713 | }, 714 | "node_modules/concat-map": { 715 | "version": "0.0.1", 716 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 717 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 718 | "dev": true 719 | }, 720 | "node_modules/cross-spawn": { 721 | "version": "7.0.6", 722 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 723 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 724 | "dev": true, 725 | "license": "MIT", 726 | "dependencies": { 727 | "path-key": "^3.1.0", 728 | "shebang-command": "^2.0.0", 729 | "which": "^2.0.1" 730 | }, 731 | "engines": { 732 | "node": ">= 8" 733 | } 734 | }, 735 | "node_modules/debug": { 736 | "version": "4.3.4", 737 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 738 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 739 | "dev": true, 740 | "dependencies": { 741 | "ms": "2.1.2" 742 | }, 743 | "engines": { 744 | "node": ">=6.0" 745 | }, 746 | "peerDependenciesMeta": { 747 | "supports-color": { 748 | "optional": true 749 | } 750 | } 751 | }, 752 | "node_modules/deep-is": { 753 | "version": "0.1.4", 754 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 755 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 756 | "dev": true 757 | }, 758 | "node_modules/define-data-property": { 759 | "version": "1.1.0", 760 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", 761 | "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", 762 | "dev": true, 763 | "peer": true, 764 | "dependencies": { 765 | "get-intrinsic": "^1.2.1", 766 | "gopd": "^1.0.1", 767 | "has-property-descriptors": "^1.0.0" 768 | }, 769 | "engines": { 770 | "node": ">= 0.4" 771 | } 772 | }, 773 | "node_modules/define-properties": { 774 | "version": "1.2.1", 775 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 776 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 777 | "dev": true, 778 | "peer": true, 779 | "dependencies": { 780 | "define-data-property": "^1.0.1", 781 | "has-property-descriptors": "^1.0.0", 782 | "object-keys": "^1.1.1" 783 | }, 784 | "engines": { 785 | "node": ">= 0.4" 786 | }, 787 | "funding": { 788 | "url": "https://github.com/sponsors/ljharb" 789 | } 790 | }, 791 | "node_modules/dir-glob": { 792 | "version": "3.0.1", 793 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 794 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 795 | "dev": true, 796 | "dependencies": { 797 | "path-type": "^4.0.0" 798 | }, 799 | "engines": { 800 | "node": ">=8" 801 | } 802 | }, 803 | "node_modules/doctrine": { 804 | "version": "3.0.0", 805 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 806 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 807 | "dev": true, 808 | "dependencies": { 809 | "esutils": "^2.0.2" 810 | }, 811 | "engines": { 812 | "node": ">=6.0.0" 813 | } 814 | }, 815 | "node_modules/es-abstract": { 816 | "version": "1.22.2", 817 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", 818 | "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", 819 | "dev": true, 820 | "peer": true, 821 | "dependencies": { 822 | "array-buffer-byte-length": "^1.0.0", 823 | "arraybuffer.prototype.slice": "^1.0.2", 824 | "available-typed-arrays": "^1.0.5", 825 | "call-bind": "^1.0.2", 826 | "es-set-tostringtag": "^2.0.1", 827 | "es-to-primitive": "^1.2.1", 828 | "function.prototype.name": "^1.1.6", 829 | "get-intrinsic": "^1.2.1", 830 | "get-symbol-description": "^1.0.0", 831 | "globalthis": "^1.0.3", 832 | "gopd": "^1.0.1", 833 | "has": "^1.0.3", 834 | "has-property-descriptors": "^1.0.0", 835 | "has-proto": "^1.0.1", 836 | "has-symbols": "^1.0.3", 837 | "internal-slot": "^1.0.5", 838 | "is-array-buffer": "^3.0.2", 839 | "is-callable": "^1.2.7", 840 | "is-negative-zero": "^2.0.2", 841 | "is-regex": "^1.1.4", 842 | "is-shared-array-buffer": "^1.0.2", 843 | "is-string": "^1.0.7", 844 | "is-typed-array": "^1.1.12", 845 | "is-weakref": "^1.0.2", 846 | "object-inspect": "^1.12.3", 847 | "object-keys": "^1.1.1", 848 | "object.assign": "^4.1.4", 849 | "regexp.prototype.flags": "^1.5.1", 850 | "safe-array-concat": "^1.0.1", 851 | "safe-regex-test": "^1.0.0", 852 | "string.prototype.trim": "^1.2.8", 853 | "string.prototype.trimend": "^1.0.7", 854 | "string.prototype.trimstart": "^1.0.7", 855 | "typed-array-buffer": "^1.0.0", 856 | "typed-array-byte-length": "^1.0.0", 857 | "typed-array-byte-offset": "^1.0.0", 858 | "typed-array-length": "^1.0.4", 859 | "unbox-primitive": "^1.0.2", 860 | "which-typed-array": "^1.1.11" 861 | }, 862 | "engines": { 863 | "node": ">= 0.4" 864 | }, 865 | "funding": { 866 | "url": "https://github.com/sponsors/ljharb" 867 | } 868 | }, 869 | "node_modules/es-set-tostringtag": { 870 | "version": "2.0.1", 871 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", 872 | "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", 873 | "dev": true, 874 | "peer": true, 875 | "dependencies": { 876 | "get-intrinsic": "^1.1.3", 877 | "has": "^1.0.3", 878 | "has-tostringtag": "^1.0.0" 879 | }, 880 | "engines": { 881 | "node": ">= 0.4" 882 | } 883 | }, 884 | "node_modules/es-shim-unscopables": { 885 | "version": "1.0.0", 886 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", 887 | "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", 888 | "dev": true, 889 | "peer": true, 890 | "dependencies": { 891 | "has": "^1.0.3" 892 | } 893 | }, 894 | "node_modules/es-to-primitive": { 895 | "version": "1.2.1", 896 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 897 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 898 | "dev": true, 899 | "peer": true, 900 | "dependencies": { 901 | "is-callable": "^1.1.4", 902 | "is-date-object": "^1.0.1", 903 | "is-symbol": "^1.0.2" 904 | }, 905 | "engines": { 906 | "node": ">= 0.4" 907 | }, 908 | "funding": { 909 | "url": "https://github.com/sponsors/ljharb" 910 | } 911 | }, 912 | "node_modules/esbuild": { 913 | "version": "0.14.47", 914 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", 915 | "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", 916 | "dev": true, 917 | "hasInstallScript": true, 918 | "bin": { 919 | "esbuild": "bin/esbuild" 920 | }, 921 | "engines": { 922 | "node": ">=12" 923 | }, 924 | "optionalDependencies": { 925 | "esbuild-android-64": "0.14.47", 926 | "esbuild-android-arm64": "0.14.47", 927 | "esbuild-darwin-64": "0.14.47", 928 | "esbuild-darwin-arm64": "0.14.47", 929 | "esbuild-freebsd-64": "0.14.47", 930 | "esbuild-freebsd-arm64": "0.14.47", 931 | "esbuild-linux-32": "0.14.47", 932 | "esbuild-linux-64": "0.14.47", 933 | "esbuild-linux-arm": "0.14.47", 934 | "esbuild-linux-arm64": "0.14.47", 935 | "esbuild-linux-mips64le": "0.14.47", 936 | "esbuild-linux-ppc64le": "0.14.47", 937 | "esbuild-linux-riscv64": "0.14.47", 938 | "esbuild-linux-s390x": "0.14.47", 939 | "esbuild-netbsd-64": "0.14.47", 940 | "esbuild-openbsd-64": "0.14.47", 941 | "esbuild-sunos-64": "0.14.47", 942 | "esbuild-windows-32": "0.14.47", 943 | "esbuild-windows-64": "0.14.47", 944 | "esbuild-windows-arm64": "0.14.47" 945 | } 946 | }, 947 | "node_modules/esbuild-android-64": { 948 | "version": "0.14.47", 949 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", 950 | "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", 951 | "cpu": [ 952 | "x64" 953 | ], 954 | "dev": true, 955 | "optional": true, 956 | "os": [ 957 | "android" 958 | ], 959 | "engines": { 960 | "node": ">=12" 961 | } 962 | }, 963 | "node_modules/esbuild-android-arm64": { 964 | "version": "0.14.47", 965 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", 966 | "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", 967 | "cpu": [ 968 | "arm64" 969 | ], 970 | "dev": true, 971 | "optional": true, 972 | "os": [ 973 | "android" 974 | ], 975 | "engines": { 976 | "node": ">=12" 977 | } 978 | }, 979 | "node_modules/esbuild-darwin-64": { 980 | "version": "0.14.47", 981 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", 982 | "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", 983 | "cpu": [ 984 | "x64" 985 | ], 986 | "dev": true, 987 | "optional": true, 988 | "os": [ 989 | "darwin" 990 | ], 991 | "engines": { 992 | "node": ">=12" 993 | } 994 | }, 995 | "node_modules/esbuild-darwin-arm64": { 996 | "version": "0.14.47", 997 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", 998 | "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", 999 | "cpu": [ 1000 | "arm64" 1001 | ], 1002 | "dev": true, 1003 | "optional": true, 1004 | "os": [ 1005 | "darwin" 1006 | ], 1007 | "engines": { 1008 | "node": ">=12" 1009 | } 1010 | }, 1011 | "node_modules/esbuild-freebsd-64": { 1012 | "version": "0.14.47", 1013 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", 1014 | "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", 1015 | "cpu": [ 1016 | "x64" 1017 | ], 1018 | "dev": true, 1019 | "optional": true, 1020 | "os": [ 1021 | "freebsd" 1022 | ], 1023 | "engines": { 1024 | "node": ">=12" 1025 | } 1026 | }, 1027 | "node_modules/esbuild-freebsd-arm64": { 1028 | "version": "0.14.47", 1029 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", 1030 | "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", 1031 | "cpu": [ 1032 | "arm64" 1033 | ], 1034 | "dev": true, 1035 | "optional": true, 1036 | "os": [ 1037 | "freebsd" 1038 | ], 1039 | "engines": { 1040 | "node": ">=12" 1041 | } 1042 | }, 1043 | "node_modules/esbuild-linux-32": { 1044 | "version": "0.14.47", 1045 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", 1046 | "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", 1047 | "cpu": [ 1048 | "ia32" 1049 | ], 1050 | "dev": true, 1051 | "optional": true, 1052 | "os": [ 1053 | "linux" 1054 | ], 1055 | "engines": { 1056 | "node": ">=12" 1057 | } 1058 | }, 1059 | "node_modules/esbuild-linux-64": { 1060 | "version": "0.14.47", 1061 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", 1062 | "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", 1063 | "cpu": [ 1064 | "x64" 1065 | ], 1066 | "dev": true, 1067 | "optional": true, 1068 | "os": [ 1069 | "linux" 1070 | ], 1071 | "engines": { 1072 | "node": ">=12" 1073 | } 1074 | }, 1075 | "node_modules/esbuild-linux-arm": { 1076 | "version": "0.14.47", 1077 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", 1078 | "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", 1079 | "cpu": [ 1080 | "arm" 1081 | ], 1082 | "dev": true, 1083 | "optional": true, 1084 | "os": [ 1085 | "linux" 1086 | ], 1087 | "engines": { 1088 | "node": ">=12" 1089 | } 1090 | }, 1091 | "node_modules/esbuild-linux-arm64": { 1092 | "version": "0.14.47", 1093 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", 1094 | "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", 1095 | "cpu": [ 1096 | "arm64" 1097 | ], 1098 | "dev": true, 1099 | "optional": true, 1100 | "os": [ 1101 | "linux" 1102 | ], 1103 | "engines": { 1104 | "node": ">=12" 1105 | } 1106 | }, 1107 | "node_modules/esbuild-linux-mips64le": { 1108 | "version": "0.14.47", 1109 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", 1110 | "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", 1111 | "cpu": [ 1112 | "mips64el" 1113 | ], 1114 | "dev": true, 1115 | "optional": true, 1116 | "os": [ 1117 | "linux" 1118 | ], 1119 | "engines": { 1120 | "node": ">=12" 1121 | } 1122 | }, 1123 | "node_modules/esbuild-linux-ppc64le": { 1124 | "version": "0.14.47", 1125 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", 1126 | "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", 1127 | "cpu": [ 1128 | "ppc64" 1129 | ], 1130 | "dev": true, 1131 | "optional": true, 1132 | "os": [ 1133 | "linux" 1134 | ], 1135 | "engines": { 1136 | "node": ">=12" 1137 | } 1138 | }, 1139 | "node_modules/esbuild-linux-riscv64": { 1140 | "version": "0.14.47", 1141 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", 1142 | "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", 1143 | "cpu": [ 1144 | "riscv64" 1145 | ], 1146 | "dev": true, 1147 | "optional": true, 1148 | "os": [ 1149 | "linux" 1150 | ], 1151 | "engines": { 1152 | "node": ">=12" 1153 | } 1154 | }, 1155 | "node_modules/esbuild-linux-s390x": { 1156 | "version": "0.14.47", 1157 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", 1158 | "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", 1159 | "cpu": [ 1160 | "s390x" 1161 | ], 1162 | "dev": true, 1163 | "optional": true, 1164 | "os": [ 1165 | "linux" 1166 | ], 1167 | "engines": { 1168 | "node": ">=12" 1169 | } 1170 | }, 1171 | "node_modules/esbuild-netbsd-64": { 1172 | "version": "0.14.47", 1173 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", 1174 | "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", 1175 | "cpu": [ 1176 | "x64" 1177 | ], 1178 | "dev": true, 1179 | "optional": true, 1180 | "os": [ 1181 | "netbsd" 1182 | ], 1183 | "engines": { 1184 | "node": ">=12" 1185 | } 1186 | }, 1187 | "node_modules/esbuild-openbsd-64": { 1188 | "version": "0.14.47", 1189 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", 1190 | "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", 1191 | "cpu": [ 1192 | "x64" 1193 | ], 1194 | "dev": true, 1195 | "optional": true, 1196 | "os": [ 1197 | "openbsd" 1198 | ], 1199 | "engines": { 1200 | "node": ">=12" 1201 | } 1202 | }, 1203 | "node_modules/esbuild-sunos-64": { 1204 | "version": "0.14.47", 1205 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", 1206 | "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", 1207 | "cpu": [ 1208 | "x64" 1209 | ], 1210 | "dev": true, 1211 | "optional": true, 1212 | "os": [ 1213 | "sunos" 1214 | ], 1215 | "engines": { 1216 | "node": ">=12" 1217 | } 1218 | }, 1219 | "node_modules/esbuild-windows-32": { 1220 | "version": "0.14.47", 1221 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", 1222 | "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", 1223 | "cpu": [ 1224 | "ia32" 1225 | ], 1226 | "dev": true, 1227 | "optional": true, 1228 | "os": [ 1229 | "win32" 1230 | ], 1231 | "engines": { 1232 | "node": ">=12" 1233 | } 1234 | }, 1235 | "node_modules/esbuild-windows-64": { 1236 | "version": "0.14.47", 1237 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", 1238 | "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", 1239 | "cpu": [ 1240 | "x64" 1241 | ], 1242 | "dev": true, 1243 | "optional": true, 1244 | "os": [ 1245 | "win32" 1246 | ], 1247 | "engines": { 1248 | "node": ">=12" 1249 | } 1250 | }, 1251 | "node_modules/esbuild-windows-arm64": { 1252 | "version": "0.14.47", 1253 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", 1254 | "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", 1255 | "cpu": [ 1256 | "arm64" 1257 | ], 1258 | "dev": true, 1259 | "optional": true, 1260 | "os": [ 1261 | "win32" 1262 | ], 1263 | "engines": { 1264 | "node": ">=12" 1265 | } 1266 | }, 1267 | "node_modules/escape-string-regexp": { 1268 | "version": "4.0.0", 1269 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1270 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1271 | "dev": true, 1272 | "engines": { 1273 | "node": ">=10" 1274 | }, 1275 | "funding": { 1276 | "url": "https://github.com/sponsors/sindresorhus" 1277 | } 1278 | }, 1279 | "node_modules/eslint": { 1280 | "version": "8.49.0", 1281 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", 1282 | "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "@eslint-community/eslint-utils": "^4.2.0", 1286 | "@eslint-community/regexpp": "^4.6.1", 1287 | "@eslint/eslintrc": "^2.1.2", 1288 | "@eslint/js": "8.49.0", 1289 | "@humanwhocodes/config-array": "^0.11.11", 1290 | "@humanwhocodes/module-importer": "^1.0.1", 1291 | "@nodelib/fs.walk": "^1.2.8", 1292 | "ajv": "^6.12.4", 1293 | "chalk": "^4.0.0", 1294 | "cross-spawn": "^7.0.2", 1295 | "debug": "^4.3.2", 1296 | "doctrine": "^3.0.0", 1297 | "escape-string-regexp": "^4.0.0", 1298 | "eslint-scope": "^7.2.2", 1299 | "eslint-visitor-keys": "^3.4.3", 1300 | "espree": "^9.6.1", 1301 | "esquery": "^1.4.2", 1302 | "esutils": "^2.0.2", 1303 | "fast-deep-equal": "^3.1.3", 1304 | "file-entry-cache": "^6.0.1", 1305 | "find-up": "^5.0.0", 1306 | "glob-parent": "^6.0.2", 1307 | "globals": "^13.19.0", 1308 | "graphemer": "^1.4.0", 1309 | "ignore": "^5.2.0", 1310 | "imurmurhash": "^0.1.4", 1311 | "is-glob": "^4.0.0", 1312 | "is-path-inside": "^3.0.3", 1313 | "js-yaml": "^4.1.0", 1314 | "json-stable-stringify-without-jsonify": "^1.0.1", 1315 | "levn": "^0.4.1", 1316 | "lodash.merge": "^4.6.2", 1317 | "minimatch": "^3.1.2", 1318 | "natural-compare": "^1.4.0", 1319 | "optionator": "^0.9.3", 1320 | "strip-ansi": "^6.0.1", 1321 | "text-table": "^0.2.0" 1322 | }, 1323 | "bin": { 1324 | "eslint": "bin/eslint.js" 1325 | }, 1326 | "engines": { 1327 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1328 | }, 1329 | "funding": { 1330 | "url": "https://opencollective.com/eslint" 1331 | } 1332 | }, 1333 | "node_modules/eslint-config-standard": { 1334 | "version": "17.1.0", 1335 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", 1336 | "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", 1337 | "dev": true, 1338 | "funding": [ 1339 | { 1340 | "type": "github", 1341 | "url": "https://github.com/sponsors/feross" 1342 | }, 1343 | { 1344 | "type": "patreon", 1345 | "url": "https://www.patreon.com/feross" 1346 | }, 1347 | { 1348 | "type": "consulting", 1349 | "url": "https://feross.org/support" 1350 | } 1351 | ], 1352 | "engines": { 1353 | "node": ">=12.0.0" 1354 | }, 1355 | "peerDependencies": { 1356 | "eslint": "^8.0.1", 1357 | "eslint-plugin-import": "^2.25.2", 1358 | "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", 1359 | "eslint-plugin-promise": "^6.0.0" 1360 | } 1361 | }, 1362 | "node_modules/eslint-import-resolver-node": { 1363 | "version": "0.3.9", 1364 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", 1365 | "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", 1366 | "dev": true, 1367 | "peer": true, 1368 | "dependencies": { 1369 | "debug": "^3.2.7", 1370 | "is-core-module": "^2.13.0", 1371 | "resolve": "^1.22.4" 1372 | } 1373 | }, 1374 | "node_modules/eslint-import-resolver-node/node_modules/debug": { 1375 | "version": "3.2.7", 1376 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1377 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1378 | "dev": true, 1379 | "peer": true, 1380 | "dependencies": { 1381 | "ms": "^2.1.1" 1382 | } 1383 | }, 1384 | "node_modules/eslint-module-utils": { 1385 | "version": "2.8.0", 1386 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", 1387 | "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", 1388 | "dev": true, 1389 | "peer": true, 1390 | "dependencies": { 1391 | "debug": "^3.2.7" 1392 | }, 1393 | "engines": { 1394 | "node": ">=4" 1395 | }, 1396 | "peerDependenciesMeta": { 1397 | "eslint": { 1398 | "optional": true 1399 | } 1400 | } 1401 | }, 1402 | "node_modules/eslint-module-utils/node_modules/debug": { 1403 | "version": "3.2.7", 1404 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1405 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1406 | "dev": true, 1407 | "peer": true, 1408 | "dependencies": { 1409 | "ms": "^2.1.1" 1410 | } 1411 | }, 1412 | "node_modules/eslint-plugin-es-x": { 1413 | "version": "7.2.0", 1414 | "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", 1415 | "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", 1416 | "dev": true, 1417 | "peer": true, 1418 | "dependencies": { 1419 | "@eslint-community/eslint-utils": "^4.1.2", 1420 | "@eslint-community/regexpp": "^4.6.0" 1421 | }, 1422 | "engines": { 1423 | "node": "^14.18.0 || >=16.0.0" 1424 | }, 1425 | "funding": { 1426 | "url": "https://github.com/sponsors/ota-meshi" 1427 | }, 1428 | "peerDependencies": { 1429 | "eslint": ">=8" 1430 | } 1431 | }, 1432 | "node_modules/eslint-plugin-import": { 1433 | "version": "2.28.1", 1434 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", 1435 | "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", 1436 | "dev": true, 1437 | "peer": true, 1438 | "dependencies": { 1439 | "array-includes": "^3.1.6", 1440 | "array.prototype.findlastindex": "^1.2.2", 1441 | "array.prototype.flat": "^1.3.1", 1442 | "array.prototype.flatmap": "^1.3.1", 1443 | "debug": "^3.2.7", 1444 | "doctrine": "^2.1.0", 1445 | "eslint-import-resolver-node": "^0.3.7", 1446 | "eslint-module-utils": "^2.8.0", 1447 | "has": "^1.0.3", 1448 | "is-core-module": "^2.13.0", 1449 | "is-glob": "^4.0.3", 1450 | "minimatch": "^3.1.2", 1451 | "object.fromentries": "^2.0.6", 1452 | "object.groupby": "^1.0.0", 1453 | "object.values": "^1.1.6", 1454 | "semver": "^6.3.1", 1455 | "tsconfig-paths": "^3.14.2" 1456 | }, 1457 | "engines": { 1458 | "node": ">=4" 1459 | }, 1460 | "peerDependencies": { 1461 | "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" 1462 | } 1463 | }, 1464 | "node_modules/eslint-plugin-import/node_modules/debug": { 1465 | "version": "3.2.7", 1466 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1467 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1468 | "dev": true, 1469 | "peer": true, 1470 | "dependencies": { 1471 | "ms": "^2.1.1" 1472 | } 1473 | }, 1474 | "node_modules/eslint-plugin-import/node_modules/doctrine": { 1475 | "version": "2.1.0", 1476 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 1477 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 1478 | "dev": true, 1479 | "peer": true, 1480 | "dependencies": { 1481 | "esutils": "^2.0.2" 1482 | }, 1483 | "engines": { 1484 | "node": ">=0.10.0" 1485 | } 1486 | }, 1487 | "node_modules/eslint-plugin-import/node_modules/semver": { 1488 | "version": "6.3.1", 1489 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1490 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1491 | "dev": true, 1492 | "peer": true, 1493 | "bin": { 1494 | "semver": "bin/semver.js" 1495 | } 1496 | }, 1497 | "node_modules/eslint-plugin-n": { 1498 | "version": "16.1.0", 1499 | "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.1.0.tgz", 1500 | "integrity": "sha512-3wv/TooBst0N4ND+pnvffHuz9gNPmk/NkLwAxOt2JykTl/hcuECe6yhTtLJcZjIxtZwN+GX92ACp/QTLpHA3Hg==", 1501 | "dev": true, 1502 | "peer": true, 1503 | "dependencies": { 1504 | "@eslint-community/eslint-utils": "^4.4.0", 1505 | "builtins": "^5.0.1", 1506 | "eslint-plugin-es-x": "^7.1.0", 1507 | "get-tsconfig": "^4.7.0", 1508 | "ignore": "^5.2.4", 1509 | "is-core-module": "^2.12.1", 1510 | "minimatch": "^3.1.2", 1511 | "resolve": "^1.22.2", 1512 | "semver": "^7.5.3" 1513 | }, 1514 | "engines": { 1515 | "node": ">=16.0.0" 1516 | }, 1517 | "funding": { 1518 | "url": "https://github.com/sponsors/mysticatea" 1519 | }, 1520 | "peerDependencies": { 1521 | "eslint": ">=7.0.0" 1522 | } 1523 | }, 1524 | "node_modules/eslint-plugin-promise": { 1525 | "version": "6.1.1", 1526 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", 1527 | "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", 1528 | "dev": true, 1529 | "peer": true, 1530 | "engines": { 1531 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1532 | }, 1533 | "peerDependencies": { 1534 | "eslint": "^7.0.0 || ^8.0.0" 1535 | } 1536 | }, 1537 | "node_modules/eslint-scope": { 1538 | "version": "5.1.1", 1539 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1540 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1541 | "dev": true, 1542 | "dependencies": { 1543 | "esrecurse": "^4.3.0", 1544 | "estraverse": "^4.1.1" 1545 | }, 1546 | "engines": { 1547 | "node": ">=8.0.0" 1548 | } 1549 | }, 1550 | "node_modules/eslint-utils": { 1551 | "version": "3.0.0", 1552 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1553 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1554 | "dev": true, 1555 | "dependencies": { 1556 | "eslint-visitor-keys": "^2.0.0" 1557 | }, 1558 | "engines": { 1559 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 1560 | }, 1561 | "funding": { 1562 | "url": "https://github.com/sponsors/mysticatea" 1563 | }, 1564 | "peerDependencies": { 1565 | "eslint": ">=5" 1566 | } 1567 | }, 1568 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 1569 | "version": "2.1.0", 1570 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1571 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1572 | "dev": true, 1573 | "engines": { 1574 | "node": ">=10" 1575 | } 1576 | }, 1577 | "node_modules/eslint-visitor-keys": { 1578 | "version": "3.4.3", 1579 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1580 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1581 | "dev": true, 1582 | "engines": { 1583 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1584 | }, 1585 | "funding": { 1586 | "url": "https://opencollective.com/eslint" 1587 | } 1588 | }, 1589 | "node_modules/eslint/node_modules/eslint-scope": { 1590 | "version": "7.2.2", 1591 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1592 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1593 | "dev": true, 1594 | "dependencies": { 1595 | "esrecurse": "^4.3.0", 1596 | "estraverse": "^5.2.0" 1597 | }, 1598 | "engines": { 1599 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1600 | }, 1601 | "funding": { 1602 | "url": "https://opencollective.com/eslint" 1603 | } 1604 | }, 1605 | "node_modules/eslint/node_modules/estraverse": { 1606 | "version": "5.3.0", 1607 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1608 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1609 | "dev": true, 1610 | "engines": { 1611 | "node": ">=4.0" 1612 | } 1613 | }, 1614 | "node_modules/eslint/node_modules/glob-parent": { 1615 | "version": "6.0.2", 1616 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1617 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1618 | "dev": true, 1619 | "dependencies": { 1620 | "is-glob": "^4.0.3" 1621 | }, 1622 | "engines": { 1623 | "node": ">=10.13.0" 1624 | } 1625 | }, 1626 | "node_modules/espree": { 1627 | "version": "9.6.1", 1628 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1629 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1630 | "dev": true, 1631 | "dependencies": { 1632 | "acorn": "^8.9.0", 1633 | "acorn-jsx": "^5.3.2", 1634 | "eslint-visitor-keys": "^3.4.1" 1635 | }, 1636 | "engines": { 1637 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1638 | }, 1639 | "funding": { 1640 | "url": "https://opencollective.com/eslint" 1641 | } 1642 | }, 1643 | "node_modules/esquery": { 1644 | "version": "1.5.0", 1645 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1646 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1647 | "dev": true, 1648 | "dependencies": { 1649 | "estraverse": "^5.1.0" 1650 | }, 1651 | "engines": { 1652 | "node": ">=0.10" 1653 | } 1654 | }, 1655 | "node_modules/esquery/node_modules/estraverse": { 1656 | "version": "5.3.0", 1657 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1658 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1659 | "dev": true, 1660 | "engines": { 1661 | "node": ">=4.0" 1662 | } 1663 | }, 1664 | "node_modules/esrecurse": { 1665 | "version": "4.3.0", 1666 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1667 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1668 | "dev": true, 1669 | "dependencies": { 1670 | "estraverse": "^5.2.0" 1671 | }, 1672 | "engines": { 1673 | "node": ">=4.0" 1674 | } 1675 | }, 1676 | "node_modules/esrecurse/node_modules/estraverse": { 1677 | "version": "5.3.0", 1678 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1679 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1680 | "dev": true, 1681 | "engines": { 1682 | "node": ">=4.0" 1683 | } 1684 | }, 1685 | "node_modules/estraverse": { 1686 | "version": "4.3.0", 1687 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1688 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1689 | "dev": true, 1690 | "engines": { 1691 | "node": ">=4.0" 1692 | } 1693 | }, 1694 | "node_modules/esutils": { 1695 | "version": "2.0.3", 1696 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1697 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1698 | "dev": true, 1699 | "engines": { 1700 | "node": ">=0.10.0" 1701 | } 1702 | }, 1703 | "node_modules/fast-deep-equal": { 1704 | "version": "3.1.3", 1705 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1706 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1707 | "dev": true 1708 | }, 1709 | "node_modules/fast-glob": { 1710 | "version": "3.2.12", 1711 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1712 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1713 | "dev": true, 1714 | "dependencies": { 1715 | "@nodelib/fs.stat": "^2.0.2", 1716 | "@nodelib/fs.walk": "^1.2.3", 1717 | "glob-parent": "^5.1.2", 1718 | "merge2": "^1.3.0", 1719 | "micromatch": "^4.0.4" 1720 | }, 1721 | "engines": { 1722 | "node": ">=8.6.0" 1723 | } 1724 | }, 1725 | "node_modules/fast-json-stable-stringify": { 1726 | "version": "2.1.0", 1727 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1728 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1729 | "dev": true 1730 | }, 1731 | "node_modules/fast-levenshtein": { 1732 | "version": "2.0.6", 1733 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1734 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1735 | "dev": true 1736 | }, 1737 | "node_modules/fastq": { 1738 | "version": "1.15.0", 1739 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1740 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1741 | "dev": true, 1742 | "dependencies": { 1743 | "reusify": "^1.0.4" 1744 | } 1745 | }, 1746 | "node_modules/file-entry-cache": { 1747 | "version": "6.0.1", 1748 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1749 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1750 | "dev": true, 1751 | "dependencies": { 1752 | "flat-cache": "^3.0.4" 1753 | }, 1754 | "engines": { 1755 | "node": "^10.12.0 || >=12.0.0" 1756 | } 1757 | }, 1758 | "node_modules/fill-range": { 1759 | "version": "7.1.1", 1760 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1761 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1762 | "dev": true, 1763 | "license": "MIT", 1764 | "dependencies": { 1765 | "to-regex-range": "^5.0.1" 1766 | }, 1767 | "engines": { 1768 | "node": ">=8" 1769 | } 1770 | }, 1771 | "node_modules/find-up": { 1772 | "version": "5.0.0", 1773 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1774 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1775 | "dev": true, 1776 | "dependencies": { 1777 | "locate-path": "^6.0.0", 1778 | "path-exists": "^4.0.0" 1779 | }, 1780 | "engines": { 1781 | "node": ">=10" 1782 | }, 1783 | "funding": { 1784 | "url": "https://github.com/sponsors/sindresorhus" 1785 | } 1786 | }, 1787 | "node_modules/flat-cache": { 1788 | "version": "3.0.4", 1789 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1790 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1791 | "dev": true, 1792 | "dependencies": { 1793 | "flatted": "^3.1.0", 1794 | "rimraf": "^3.0.2" 1795 | }, 1796 | "engines": { 1797 | "node": "^10.12.0 || >=12.0.0" 1798 | } 1799 | }, 1800 | "node_modules/flatted": { 1801 | "version": "3.2.7", 1802 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 1803 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 1804 | "dev": true 1805 | }, 1806 | "node_modules/for-each": { 1807 | "version": "0.3.3", 1808 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1809 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1810 | "dev": true, 1811 | "peer": true, 1812 | "dependencies": { 1813 | "is-callable": "^1.1.3" 1814 | } 1815 | }, 1816 | "node_modules/fs.realpath": { 1817 | "version": "1.0.0", 1818 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1819 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1820 | "dev": true 1821 | }, 1822 | "node_modules/function-bind": { 1823 | "version": "1.1.1", 1824 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1825 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1826 | "dev": true, 1827 | "peer": true 1828 | }, 1829 | "node_modules/function.prototype.name": { 1830 | "version": "1.1.6", 1831 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", 1832 | "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", 1833 | "dev": true, 1834 | "peer": true, 1835 | "dependencies": { 1836 | "call-bind": "^1.0.2", 1837 | "define-properties": "^1.2.0", 1838 | "es-abstract": "^1.22.1", 1839 | "functions-have-names": "^1.2.3" 1840 | }, 1841 | "engines": { 1842 | "node": ">= 0.4" 1843 | }, 1844 | "funding": { 1845 | "url": "https://github.com/sponsors/ljharb" 1846 | } 1847 | }, 1848 | "node_modules/functional-red-black-tree": { 1849 | "version": "1.0.1", 1850 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1851 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", 1852 | "dev": true 1853 | }, 1854 | "node_modules/functions-have-names": { 1855 | "version": "1.2.3", 1856 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 1857 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 1858 | "dev": true, 1859 | "peer": true, 1860 | "funding": { 1861 | "url": "https://github.com/sponsors/ljharb" 1862 | } 1863 | }, 1864 | "node_modules/get-intrinsic": { 1865 | "version": "1.2.1", 1866 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 1867 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 1868 | "dev": true, 1869 | "peer": true, 1870 | "dependencies": { 1871 | "function-bind": "^1.1.1", 1872 | "has": "^1.0.3", 1873 | "has-proto": "^1.0.1", 1874 | "has-symbols": "^1.0.3" 1875 | }, 1876 | "funding": { 1877 | "url": "https://github.com/sponsors/ljharb" 1878 | } 1879 | }, 1880 | "node_modules/get-symbol-description": { 1881 | "version": "1.0.0", 1882 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 1883 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 1884 | "dev": true, 1885 | "peer": true, 1886 | "dependencies": { 1887 | "call-bind": "^1.0.2", 1888 | "get-intrinsic": "^1.1.1" 1889 | }, 1890 | "engines": { 1891 | "node": ">= 0.4" 1892 | }, 1893 | "funding": { 1894 | "url": "https://github.com/sponsors/ljharb" 1895 | } 1896 | }, 1897 | "node_modules/get-tsconfig": { 1898 | "version": "4.7.0", 1899 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", 1900 | "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", 1901 | "dev": true, 1902 | "peer": true, 1903 | "dependencies": { 1904 | "resolve-pkg-maps": "^1.0.0" 1905 | }, 1906 | "funding": { 1907 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 1908 | } 1909 | }, 1910 | "node_modules/glob": { 1911 | "version": "7.2.3", 1912 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1913 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1914 | "dev": true, 1915 | "dependencies": { 1916 | "fs.realpath": "^1.0.0", 1917 | "inflight": "^1.0.4", 1918 | "inherits": "2", 1919 | "minimatch": "^3.1.1", 1920 | "once": "^1.3.0", 1921 | "path-is-absolute": "^1.0.0" 1922 | }, 1923 | "engines": { 1924 | "node": "*" 1925 | }, 1926 | "funding": { 1927 | "url": "https://github.com/sponsors/isaacs" 1928 | } 1929 | }, 1930 | "node_modules/glob-parent": { 1931 | "version": "5.1.2", 1932 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1933 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1934 | "dev": true, 1935 | "dependencies": { 1936 | "is-glob": "^4.0.1" 1937 | }, 1938 | "engines": { 1939 | "node": ">= 6" 1940 | } 1941 | }, 1942 | "node_modules/globals": { 1943 | "version": "13.21.0", 1944 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", 1945 | "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", 1946 | "dev": true, 1947 | "dependencies": { 1948 | "type-fest": "^0.20.2" 1949 | }, 1950 | "engines": { 1951 | "node": ">=8" 1952 | }, 1953 | "funding": { 1954 | "url": "https://github.com/sponsors/sindresorhus" 1955 | } 1956 | }, 1957 | "node_modules/globalthis": { 1958 | "version": "1.0.3", 1959 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 1960 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 1961 | "dev": true, 1962 | "peer": true, 1963 | "dependencies": { 1964 | "define-properties": "^1.1.3" 1965 | }, 1966 | "engines": { 1967 | "node": ">= 0.4" 1968 | }, 1969 | "funding": { 1970 | "url": "https://github.com/sponsors/ljharb" 1971 | } 1972 | }, 1973 | "node_modules/globby": { 1974 | "version": "11.1.0", 1975 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1976 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1977 | "dev": true, 1978 | "dependencies": { 1979 | "array-union": "^2.1.0", 1980 | "dir-glob": "^3.0.1", 1981 | "fast-glob": "^3.2.9", 1982 | "ignore": "^5.2.0", 1983 | "merge2": "^1.4.1", 1984 | "slash": "^3.0.0" 1985 | }, 1986 | "engines": { 1987 | "node": ">=10" 1988 | }, 1989 | "funding": { 1990 | "url": "https://github.com/sponsors/sindresorhus" 1991 | } 1992 | }, 1993 | "node_modules/gopd": { 1994 | "version": "1.0.1", 1995 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1996 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1997 | "dev": true, 1998 | "peer": true, 1999 | "dependencies": { 2000 | "get-intrinsic": "^1.1.3" 2001 | }, 2002 | "funding": { 2003 | "url": "https://github.com/sponsors/ljharb" 2004 | } 2005 | }, 2006 | "node_modules/graphemer": { 2007 | "version": "1.4.0", 2008 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2009 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2010 | "dev": true 2011 | }, 2012 | "node_modules/has": { 2013 | "version": "1.0.3", 2014 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2015 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2016 | "dev": true, 2017 | "peer": true, 2018 | "dependencies": { 2019 | "function-bind": "^1.1.1" 2020 | }, 2021 | "engines": { 2022 | "node": ">= 0.4.0" 2023 | } 2024 | }, 2025 | "node_modules/has-bigints": { 2026 | "version": "1.0.2", 2027 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 2028 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 2029 | "dev": true, 2030 | "peer": true, 2031 | "funding": { 2032 | "url": "https://github.com/sponsors/ljharb" 2033 | } 2034 | }, 2035 | "node_modules/has-flag": { 2036 | "version": "4.0.0", 2037 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2038 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2039 | "dev": true, 2040 | "engines": { 2041 | "node": ">=8" 2042 | } 2043 | }, 2044 | "node_modules/has-property-descriptors": { 2045 | "version": "1.0.0", 2046 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 2047 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 2048 | "dev": true, 2049 | "peer": true, 2050 | "dependencies": { 2051 | "get-intrinsic": "^1.1.1" 2052 | }, 2053 | "funding": { 2054 | "url": "https://github.com/sponsors/ljharb" 2055 | } 2056 | }, 2057 | "node_modules/has-proto": { 2058 | "version": "1.0.1", 2059 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 2060 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 2061 | "dev": true, 2062 | "peer": true, 2063 | "engines": { 2064 | "node": ">= 0.4" 2065 | }, 2066 | "funding": { 2067 | "url": "https://github.com/sponsors/ljharb" 2068 | } 2069 | }, 2070 | "node_modules/has-symbols": { 2071 | "version": "1.0.3", 2072 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2073 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 2074 | "dev": true, 2075 | "peer": true, 2076 | "engines": { 2077 | "node": ">= 0.4" 2078 | }, 2079 | "funding": { 2080 | "url": "https://github.com/sponsors/ljharb" 2081 | } 2082 | }, 2083 | "node_modules/has-tostringtag": { 2084 | "version": "1.0.0", 2085 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 2086 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 2087 | "dev": true, 2088 | "peer": true, 2089 | "dependencies": { 2090 | "has-symbols": "^1.0.2" 2091 | }, 2092 | "engines": { 2093 | "node": ">= 0.4" 2094 | }, 2095 | "funding": { 2096 | "url": "https://github.com/sponsors/ljharb" 2097 | } 2098 | }, 2099 | "node_modules/ignore": { 2100 | "version": "5.2.4", 2101 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 2102 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 2103 | "dev": true, 2104 | "engines": { 2105 | "node": ">= 4" 2106 | } 2107 | }, 2108 | "node_modules/import-fresh": { 2109 | "version": "3.3.0", 2110 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2111 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2112 | "dev": true, 2113 | "dependencies": { 2114 | "parent-module": "^1.0.0", 2115 | "resolve-from": "^4.0.0" 2116 | }, 2117 | "engines": { 2118 | "node": ">=6" 2119 | }, 2120 | "funding": { 2121 | "url": "https://github.com/sponsors/sindresorhus" 2122 | } 2123 | }, 2124 | "node_modules/imurmurhash": { 2125 | "version": "0.1.4", 2126 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2127 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2128 | "dev": true, 2129 | "engines": { 2130 | "node": ">=0.8.19" 2131 | } 2132 | }, 2133 | "node_modules/inflight": { 2134 | "version": "1.0.6", 2135 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2136 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2137 | "dev": true, 2138 | "dependencies": { 2139 | "once": "^1.3.0", 2140 | "wrappy": "1" 2141 | } 2142 | }, 2143 | "node_modules/inherits": { 2144 | "version": "2.0.4", 2145 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2146 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2147 | "dev": true 2148 | }, 2149 | "node_modules/internal-slot": { 2150 | "version": "1.0.5", 2151 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", 2152 | "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", 2153 | "dev": true, 2154 | "peer": true, 2155 | "dependencies": { 2156 | "get-intrinsic": "^1.2.0", 2157 | "has": "^1.0.3", 2158 | "side-channel": "^1.0.4" 2159 | }, 2160 | "engines": { 2161 | "node": ">= 0.4" 2162 | } 2163 | }, 2164 | "node_modules/is-array-buffer": { 2165 | "version": "3.0.2", 2166 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", 2167 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", 2168 | "dev": true, 2169 | "peer": true, 2170 | "dependencies": { 2171 | "call-bind": "^1.0.2", 2172 | "get-intrinsic": "^1.2.0", 2173 | "is-typed-array": "^1.1.10" 2174 | }, 2175 | "funding": { 2176 | "url": "https://github.com/sponsors/ljharb" 2177 | } 2178 | }, 2179 | "node_modules/is-bigint": { 2180 | "version": "1.0.4", 2181 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 2182 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 2183 | "dev": true, 2184 | "peer": true, 2185 | "dependencies": { 2186 | "has-bigints": "^1.0.1" 2187 | }, 2188 | "funding": { 2189 | "url": "https://github.com/sponsors/ljharb" 2190 | } 2191 | }, 2192 | "node_modules/is-boolean-object": { 2193 | "version": "1.1.2", 2194 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 2195 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 2196 | "dev": true, 2197 | "peer": true, 2198 | "dependencies": { 2199 | "call-bind": "^1.0.2", 2200 | "has-tostringtag": "^1.0.0" 2201 | }, 2202 | "engines": { 2203 | "node": ">= 0.4" 2204 | }, 2205 | "funding": { 2206 | "url": "https://github.com/sponsors/ljharb" 2207 | } 2208 | }, 2209 | "node_modules/is-callable": { 2210 | "version": "1.2.7", 2211 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 2212 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 2213 | "dev": true, 2214 | "peer": true, 2215 | "engines": { 2216 | "node": ">= 0.4" 2217 | }, 2218 | "funding": { 2219 | "url": "https://github.com/sponsors/ljharb" 2220 | } 2221 | }, 2222 | "node_modules/is-core-module": { 2223 | "version": "2.13.0", 2224 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 2225 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 2226 | "dev": true, 2227 | "peer": true, 2228 | "dependencies": { 2229 | "has": "^1.0.3" 2230 | }, 2231 | "funding": { 2232 | "url": "https://github.com/sponsors/ljharb" 2233 | } 2234 | }, 2235 | "node_modules/is-date-object": { 2236 | "version": "1.0.5", 2237 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 2238 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 2239 | "dev": true, 2240 | "peer": true, 2241 | "dependencies": { 2242 | "has-tostringtag": "^1.0.0" 2243 | }, 2244 | "engines": { 2245 | "node": ">= 0.4" 2246 | }, 2247 | "funding": { 2248 | "url": "https://github.com/sponsors/ljharb" 2249 | } 2250 | }, 2251 | "node_modules/is-extglob": { 2252 | "version": "2.1.1", 2253 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2254 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2255 | "dev": true, 2256 | "engines": { 2257 | "node": ">=0.10.0" 2258 | } 2259 | }, 2260 | "node_modules/is-glob": { 2261 | "version": "4.0.3", 2262 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2263 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2264 | "dev": true, 2265 | "dependencies": { 2266 | "is-extglob": "^2.1.1" 2267 | }, 2268 | "engines": { 2269 | "node": ">=0.10.0" 2270 | } 2271 | }, 2272 | "node_modules/is-negative-zero": { 2273 | "version": "2.0.2", 2274 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 2275 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 2276 | "dev": true, 2277 | "peer": true, 2278 | "engines": { 2279 | "node": ">= 0.4" 2280 | }, 2281 | "funding": { 2282 | "url": "https://github.com/sponsors/ljharb" 2283 | } 2284 | }, 2285 | "node_modules/is-number": { 2286 | "version": "7.0.0", 2287 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2288 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2289 | "dev": true, 2290 | "license": "MIT", 2291 | "engines": { 2292 | "node": ">=0.12.0" 2293 | } 2294 | }, 2295 | "node_modules/is-number-object": { 2296 | "version": "1.0.7", 2297 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 2298 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 2299 | "dev": true, 2300 | "peer": true, 2301 | "dependencies": { 2302 | "has-tostringtag": "^1.0.0" 2303 | }, 2304 | "engines": { 2305 | "node": ">= 0.4" 2306 | }, 2307 | "funding": { 2308 | "url": "https://github.com/sponsors/ljharb" 2309 | } 2310 | }, 2311 | "node_modules/is-path-inside": { 2312 | "version": "3.0.3", 2313 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2314 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2315 | "dev": true, 2316 | "engines": { 2317 | "node": ">=8" 2318 | } 2319 | }, 2320 | "node_modules/is-regex": { 2321 | "version": "1.1.4", 2322 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 2323 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 2324 | "dev": true, 2325 | "peer": true, 2326 | "dependencies": { 2327 | "call-bind": "^1.0.2", 2328 | "has-tostringtag": "^1.0.0" 2329 | }, 2330 | "engines": { 2331 | "node": ">= 0.4" 2332 | }, 2333 | "funding": { 2334 | "url": "https://github.com/sponsors/ljharb" 2335 | } 2336 | }, 2337 | "node_modules/is-shared-array-buffer": { 2338 | "version": "1.0.2", 2339 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 2340 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 2341 | "dev": true, 2342 | "peer": true, 2343 | "dependencies": { 2344 | "call-bind": "^1.0.2" 2345 | }, 2346 | "funding": { 2347 | "url": "https://github.com/sponsors/ljharb" 2348 | } 2349 | }, 2350 | "node_modules/is-string": { 2351 | "version": "1.0.7", 2352 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 2353 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 2354 | "dev": true, 2355 | "peer": true, 2356 | "dependencies": { 2357 | "has-tostringtag": "^1.0.0" 2358 | }, 2359 | "engines": { 2360 | "node": ">= 0.4" 2361 | }, 2362 | "funding": { 2363 | "url": "https://github.com/sponsors/ljharb" 2364 | } 2365 | }, 2366 | "node_modules/is-symbol": { 2367 | "version": "1.0.4", 2368 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 2369 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 2370 | "dev": true, 2371 | "peer": true, 2372 | "dependencies": { 2373 | "has-symbols": "^1.0.2" 2374 | }, 2375 | "engines": { 2376 | "node": ">= 0.4" 2377 | }, 2378 | "funding": { 2379 | "url": "https://github.com/sponsors/ljharb" 2380 | } 2381 | }, 2382 | "node_modules/is-typed-array": { 2383 | "version": "1.1.12", 2384 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", 2385 | "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", 2386 | "dev": true, 2387 | "peer": true, 2388 | "dependencies": { 2389 | "which-typed-array": "^1.1.11" 2390 | }, 2391 | "engines": { 2392 | "node": ">= 0.4" 2393 | }, 2394 | "funding": { 2395 | "url": "https://github.com/sponsors/ljharb" 2396 | } 2397 | }, 2398 | "node_modules/is-weakref": { 2399 | "version": "1.0.2", 2400 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 2401 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 2402 | "dev": true, 2403 | "peer": true, 2404 | "dependencies": { 2405 | "call-bind": "^1.0.2" 2406 | }, 2407 | "funding": { 2408 | "url": "https://github.com/sponsors/ljharb" 2409 | } 2410 | }, 2411 | "node_modules/isarray": { 2412 | "version": "2.0.5", 2413 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 2414 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 2415 | "dev": true, 2416 | "peer": true 2417 | }, 2418 | "node_modules/isexe": { 2419 | "version": "2.0.0", 2420 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2421 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2422 | "dev": true 2423 | }, 2424 | "node_modules/js-yaml": { 2425 | "version": "4.1.0", 2426 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2427 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2428 | "dev": true, 2429 | "dependencies": { 2430 | "argparse": "^2.0.1" 2431 | }, 2432 | "bin": { 2433 | "js-yaml": "bin/js-yaml.js" 2434 | } 2435 | }, 2436 | "node_modules/json-schema-traverse": { 2437 | "version": "0.4.1", 2438 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2439 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2440 | "dev": true 2441 | }, 2442 | "node_modules/json-stable-stringify-without-jsonify": { 2443 | "version": "1.0.1", 2444 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2445 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2446 | "dev": true 2447 | }, 2448 | "node_modules/json5": { 2449 | "version": "1.0.2", 2450 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 2451 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 2452 | "dev": true, 2453 | "peer": true, 2454 | "dependencies": { 2455 | "minimist": "^1.2.0" 2456 | }, 2457 | "bin": { 2458 | "json5": "lib/cli.js" 2459 | } 2460 | }, 2461 | "node_modules/levn": { 2462 | "version": "0.4.1", 2463 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2464 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2465 | "dev": true, 2466 | "dependencies": { 2467 | "prelude-ls": "^1.2.1", 2468 | "type-check": "~0.4.0" 2469 | }, 2470 | "engines": { 2471 | "node": ">= 0.8.0" 2472 | } 2473 | }, 2474 | "node_modules/locate-path": { 2475 | "version": "6.0.0", 2476 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2477 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2478 | "dev": true, 2479 | "dependencies": { 2480 | "p-locate": "^5.0.0" 2481 | }, 2482 | "engines": { 2483 | "node": ">=10" 2484 | }, 2485 | "funding": { 2486 | "url": "https://github.com/sponsors/sindresorhus" 2487 | } 2488 | }, 2489 | "node_modules/lodash.merge": { 2490 | "version": "4.6.2", 2491 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2492 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2493 | "dev": true 2494 | }, 2495 | "node_modules/lru-cache": { 2496 | "version": "6.0.0", 2497 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2498 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2499 | "dev": true, 2500 | "dependencies": { 2501 | "yallist": "^4.0.0" 2502 | }, 2503 | "engines": { 2504 | "node": ">=10" 2505 | } 2506 | }, 2507 | "node_modules/merge2": { 2508 | "version": "1.4.1", 2509 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2510 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2511 | "dev": true, 2512 | "engines": { 2513 | "node": ">= 8" 2514 | } 2515 | }, 2516 | "node_modules/micromatch": { 2517 | "version": "4.0.8", 2518 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2519 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2520 | "dev": true, 2521 | "license": "MIT", 2522 | "dependencies": { 2523 | "braces": "^3.0.3", 2524 | "picomatch": "^2.3.1" 2525 | }, 2526 | "engines": { 2527 | "node": ">=8.6" 2528 | } 2529 | }, 2530 | "node_modules/minimatch": { 2531 | "version": "3.1.2", 2532 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2533 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2534 | "dev": true, 2535 | "dependencies": { 2536 | "brace-expansion": "^1.1.7" 2537 | }, 2538 | "engines": { 2539 | "node": "*" 2540 | } 2541 | }, 2542 | "node_modules/minimist": { 2543 | "version": "1.2.8", 2544 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2545 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2546 | "dev": true, 2547 | "peer": true, 2548 | "funding": { 2549 | "url": "https://github.com/sponsors/ljharb" 2550 | } 2551 | }, 2552 | "node_modules/moment": { 2553 | "version": "2.29.4", 2554 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 2555 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 2556 | "dev": true, 2557 | "engines": { 2558 | "node": "*" 2559 | } 2560 | }, 2561 | "node_modules/ms": { 2562 | "version": "2.1.2", 2563 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2564 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2565 | "dev": true 2566 | }, 2567 | "node_modules/natural-compare": { 2568 | "version": "1.4.0", 2569 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2570 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2571 | "dev": true 2572 | }, 2573 | "node_modules/object-inspect": { 2574 | "version": "1.12.3", 2575 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 2576 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 2577 | "dev": true, 2578 | "peer": true, 2579 | "funding": { 2580 | "url": "https://github.com/sponsors/ljharb" 2581 | } 2582 | }, 2583 | "node_modules/object-keys": { 2584 | "version": "1.1.1", 2585 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2586 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2587 | "dev": true, 2588 | "peer": true, 2589 | "engines": { 2590 | "node": ">= 0.4" 2591 | } 2592 | }, 2593 | "node_modules/object.assign": { 2594 | "version": "4.1.4", 2595 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 2596 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 2597 | "dev": true, 2598 | "peer": true, 2599 | "dependencies": { 2600 | "call-bind": "^1.0.2", 2601 | "define-properties": "^1.1.4", 2602 | "has-symbols": "^1.0.3", 2603 | "object-keys": "^1.1.1" 2604 | }, 2605 | "engines": { 2606 | "node": ">= 0.4" 2607 | }, 2608 | "funding": { 2609 | "url": "https://github.com/sponsors/ljharb" 2610 | } 2611 | }, 2612 | "node_modules/object.fromentries": { 2613 | "version": "2.0.7", 2614 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", 2615 | "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", 2616 | "dev": true, 2617 | "peer": true, 2618 | "dependencies": { 2619 | "call-bind": "^1.0.2", 2620 | "define-properties": "^1.2.0", 2621 | "es-abstract": "^1.22.1" 2622 | }, 2623 | "engines": { 2624 | "node": ">= 0.4" 2625 | }, 2626 | "funding": { 2627 | "url": "https://github.com/sponsors/ljharb" 2628 | } 2629 | }, 2630 | "node_modules/object.groupby": { 2631 | "version": "1.0.1", 2632 | "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", 2633 | "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", 2634 | "dev": true, 2635 | "peer": true, 2636 | "dependencies": { 2637 | "call-bind": "^1.0.2", 2638 | "define-properties": "^1.2.0", 2639 | "es-abstract": "^1.22.1", 2640 | "get-intrinsic": "^1.2.1" 2641 | } 2642 | }, 2643 | "node_modules/object.values": { 2644 | "version": "1.1.7", 2645 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", 2646 | "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", 2647 | "dev": true, 2648 | "peer": true, 2649 | "dependencies": { 2650 | "call-bind": "^1.0.2", 2651 | "define-properties": "^1.2.0", 2652 | "es-abstract": "^1.22.1" 2653 | }, 2654 | "engines": { 2655 | "node": ">= 0.4" 2656 | }, 2657 | "funding": { 2658 | "url": "https://github.com/sponsors/ljharb" 2659 | } 2660 | }, 2661 | "node_modules/obsidian": { 2662 | "version": "1.1.1", 2663 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz", 2664 | "integrity": "sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==", 2665 | "dev": true, 2666 | "dependencies": { 2667 | "@types/codemirror": "0.0.108", 2668 | "moment": "2.29.4" 2669 | }, 2670 | "peerDependencies": { 2671 | "@codemirror/state": "^6.0.0", 2672 | "@codemirror/view": "^6.0.0" 2673 | } 2674 | }, 2675 | "node_modules/once": { 2676 | "version": "1.4.0", 2677 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2678 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2679 | "dev": true, 2680 | "dependencies": { 2681 | "wrappy": "1" 2682 | } 2683 | }, 2684 | "node_modules/optionator": { 2685 | "version": "0.9.3", 2686 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2687 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2688 | "dev": true, 2689 | "dependencies": { 2690 | "@aashutoshrathi/word-wrap": "^1.2.3", 2691 | "deep-is": "^0.1.3", 2692 | "fast-levenshtein": "^2.0.6", 2693 | "levn": "^0.4.1", 2694 | "prelude-ls": "^1.2.1", 2695 | "type-check": "^0.4.0" 2696 | }, 2697 | "engines": { 2698 | "node": ">= 0.8.0" 2699 | } 2700 | }, 2701 | "node_modules/p-limit": { 2702 | "version": "3.1.0", 2703 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2704 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2705 | "dev": true, 2706 | "dependencies": { 2707 | "yocto-queue": "^0.1.0" 2708 | }, 2709 | "engines": { 2710 | "node": ">=10" 2711 | }, 2712 | "funding": { 2713 | "url": "https://github.com/sponsors/sindresorhus" 2714 | } 2715 | }, 2716 | "node_modules/p-locate": { 2717 | "version": "5.0.0", 2718 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2719 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2720 | "dev": true, 2721 | "dependencies": { 2722 | "p-limit": "^3.0.2" 2723 | }, 2724 | "engines": { 2725 | "node": ">=10" 2726 | }, 2727 | "funding": { 2728 | "url": "https://github.com/sponsors/sindresorhus" 2729 | } 2730 | }, 2731 | "node_modules/parent-module": { 2732 | "version": "1.0.1", 2733 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2734 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2735 | "dev": true, 2736 | "dependencies": { 2737 | "callsites": "^3.0.0" 2738 | }, 2739 | "engines": { 2740 | "node": ">=6" 2741 | } 2742 | }, 2743 | "node_modules/path-exists": { 2744 | "version": "4.0.0", 2745 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2746 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2747 | "dev": true, 2748 | "engines": { 2749 | "node": ">=8" 2750 | } 2751 | }, 2752 | "node_modules/path-is-absolute": { 2753 | "version": "1.0.1", 2754 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2755 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2756 | "dev": true, 2757 | "engines": { 2758 | "node": ">=0.10.0" 2759 | } 2760 | }, 2761 | "node_modules/path-key": { 2762 | "version": "3.1.1", 2763 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2764 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2765 | "dev": true, 2766 | "engines": { 2767 | "node": ">=8" 2768 | } 2769 | }, 2770 | "node_modules/path-parse": { 2771 | "version": "1.0.7", 2772 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2773 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2774 | "dev": true, 2775 | "peer": true 2776 | }, 2777 | "node_modules/path-type": { 2778 | "version": "4.0.0", 2779 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2780 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2781 | "dev": true, 2782 | "engines": { 2783 | "node": ">=8" 2784 | } 2785 | }, 2786 | "node_modules/picomatch": { 2787 | "version": "2.3.1", 2788 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2789 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2790 | "dev": true, 2791 | "engines": { 2792 | "node": ">=8.6" 2793 | }, 2794 | "funding": { 2795 | "url": "https://github.com/sponsors/jonschlinkert" 2796 | } 2797 | }, 2798 | "node_modules/prelude-ls": { 2799 | "version": "1.2.1", 2800 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2801 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2802 | "dev": true, 2803 | "engines": { 2804 | "node": ">= 0.8.0" 2805 | } 2806 | }, 2807 | "node_modules/punycode": { 2808 | "version": "2.3.0", 2809 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2810 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 2811 | "dev": true, 2812 | "engines": { 2813 | "node": ">=6" 2814 | } 2815 | }, 2816 | "node_modules/queue-microtask": { 2817 | "version": "1.2.3", 2818 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2819 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2820 | "dev": true, 2821 | "funding": [ 2822 | { 2823 | "type": "github", 2824 | "url": "https://github.com/sponsors/feross" 2825 | }, 2826 | { 2827 | "type": "patreon", 2828 | "url": "https://www.patreon.com/feross" 2829 | }, 2830 | { 2831 | "type": "consulting", 2832 | "url": "https://feross.org/support" 2833 | } 2834 | ] 2835 | }, 2836 | "node_modules/regexp.prototype.flags": { 2837 | "version": "1.5.1", 2838 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", 2839 | "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", 2840 | "dev": true, 2841 | "peer": true, 2842 | "dependencies": { 2843 | "call-bind": "^1.0.2", 2844 | "define-properties": "^1.2.0", 2845 | "set-function-name": "^2.0.0" 2846 | }, 2847 | "engines": { 2848 | "node": ">= 0.4" 2849 | }, 2850 | "funding": { 2851 | "url": "https://github.com/sponsors/ljharb" 2852 | } 2853 | }, 2854 | "node_modules/regexpp": { 2855 | "version": "3.2.0", 2856 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 2857 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 2858 | "dev": true, 2859 | "engines": { 2860 | "node": ">=8" 2861 | }, 2862 | "funding": { 2863 | "url": "https://github.com/sponsors/mysticatea" 2864 | } 2865 | }, 2866 | "node_modules/resolve": { 2867 | "version": "1.22.6", 2868 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", 2869 | "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", 2870 | "dev": true, 2871 | "peer": true, 2872 | "dependencies": { 2873 | "is-core-module": "^2.13.0", 2874 | "path-parse": "^1.0.7", 2875 | "supports-preserve-symlinks-flag": "^1.0.0" 2876 | }, 2877 | "bin": { 2878 | "resolve": "bin/resolve" 2879 | }, 2880 | "funding": { 2881 | "url": "https://github.com/sponsors/ljharb" 2882 | } 2883 | }, 2884 | "node_modules/resolve-from": { 2885 | "version": "4.0.0", 2886 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2887 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2888 | "dev": true, 2889 | "engines": { 2890 | "node": ">=4" 2891 | } 2892 | }, 2893 | "node_modules/resolve-pkg-maps": { 2894 | "version": "1.0.0", 2895 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 2896 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 2897 | "dev": true, 2898 | "peer": true, 2899 | "funding": { 2900 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 2901 | } 2902 | }, 2903 | "node_modules/reusify": { 2904 | "version": "1.0.4", 2905 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2906 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2907 | "dev": true, 2908 | "engines": { 2909 | "iojs": ">=1.0.0", 2910 | "node": ">=0.10.0" 2911 | } 2912 | }, 2913 | "node_modules/rimraf": { 2914 | "version": "3.0.2", 2915 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2916 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2917 | "dev": true, 2918 | "dependencies": { 2919 | "glob": "^7.1.3" 2920 | }, 2921 | "bin": { 2922 | "rimraf": "bin.js" 2923 | }, 2924 | "funding": { 2925 | "url": "https://github.com/sponsors/isaacs" 2926 | } 2927 | }, 2928 | "node_modules/run-parallel": { 2929 | "version": "1.2.0", 2930 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2931 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2932 | "dev": true, 2933 | "funding": [ 2934 | { 2935 | "type": "github", 2936 | "url": "https://github.com/sponsors/feross" 2937 | }, 2938 | { 2939 | "type": "patreon", 2940 | "url": "https://www.patreon.com/feross" 2941 | }, 2942 | { 2943 | "type": "consulting", 2944 | "url": "https://feross.org/support" 2945 | } 2946 | ], 2947 | "dependencies": { 2948 | "queue-microtask": "^1.2.2" 2949 | } 2950 | }, 2951 | "node_modules/safe-array-concat": { 2952 | "version": "1.0.1", 2953 | "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", 2954 | "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", 2955 | "dev": true, 2956 | "peer": true, 2957 | "dependencies": { 2958 | "call-bind": "^1.0.2", 2959 | "get-intrinsic": "^1.2.1", 2960 | "has-symbols": "^1.0.3", 2961 | "isarray": "^2.0.5" 2962 | }, 2963 | "engines": { 2964 | "node": ">=0.4" 2965 | }, 2966 | "funding": { 2967 | "url": "https://github.com/sponsors/ljharb" 2968 | } 2969 | }, 2970 | "node_modules/safe-regex-test": { 2971 | "version": "1.0.0", 2972 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", 2973 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", 2974 | "dev": true, 2975 | "peer": true, 2976 | "dependencies": { 2977 | "call-bind": "^1.0.2", 2978 | "get-intrinsic": "^1.1.3", 2979 | "is-regex": "^1.1.4" 2980 | }, 2981 | "funding": { 2982 | "url": "https://github.com/sponsors/ljharb" 2983 | } 2984 | }, 2985 | "node_modules/semver": { 2986 | "version": "7.5.4", 2987 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2988 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2989 | "dev": true, 2990 | "dependencies": { 2991 | "lru-cache": "^6.0.0" 2992 | }, 2993 | "bin": { 2994 | "semver": "bin/semver.js" 2995 | }, 2996 | "engines": { 2997 | "node": ">=10" 2998 | } 2999 | }, 3000 | "node_modules/set-function-name": { 3001 | "version": "2.0.1", 3002 | "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", 3003 | "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", 3004 | "dev": true, 3005 | "peer": true, 3006 | "dependencies": { 3007 | "define-data-property": "^1.0.1", 3008 | "functions-have-names": "^1.2.3", 3009 | "has-property-descriptors": "^1.0.0" 3010 | }, 3011 | "engines": { 3012 | "node": ">= 0.4" 3013 | } 3014 | }, 3015 | "node_modules/shebang-command": { 3016 | "version": "2.0.0", 3017 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3018 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3019 | "dev": true, 3020 | "dependencies": { 3021 | "shebang-regex": "^3.0.0" 3022 | }, 3023 | "engines": { 3024 | "node": ">=8" 3025 | } 3026 | }, 3027 | "node_modules/shebang-regex": { 3028 | "version": "3.0.0", 3029 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3030 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3031 | "dev": true, 3032 | "engines": { 3033 | "node": ">=8" 3034 | } 3035 | }, 3036 | "node_modules/side-channel": { 3037 | "version": "1.0.4", 3038 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3039 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3040 | "dev": true, 3041 | "peer": true, 3042 | "dependencies": { 3043 | "call-bind": "^1.0.0", 3044 | "get-intrinsic": "^1.0.2", 3045 | "object-inspect": "^1.9.0" 3046 | }, 3047 | "funding": { 3048 | "url": "https://github.com/sponsors/ljharb" 3049 | } 3050 | }, 3051 | "node_modules/slash": { 3052 | "version": "3.0.0", 3053 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3054 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3055 | "dev": true, 3056 | "engines": { 3057 | "node": ">=8" 3058 | } 3059 | }, 3060 | "node_modules/string.prototype.trim": { 3061 | "version": "1.2.8", 3062 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", 3063 | "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", 3064 | "dev": true, 3065 | "peer": true, 3066 | "dependencies": { 3067 | "call-bind": "^1.0.2", 3068 | "define-properties": "^1.2.0", 3069 | "es-abstract": "^1.22.1" 3070 | }, 3071 | "engines": { 3072 | "node": ">= 0.4" 3073 | }, 3074 | "funding": { 3075 | "url": "https://github.com/sponsors/ljharb" 3076 | } 3077 | }, 3078 | "node_modules/string.prototype.trimend": { 3079 | "version": "1.0.7", 3080 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", 3081 | "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", 3082 | "dev": true, 3083 | "peer": true, 3084 | "dependencies": { 3085 | "call-bind": "^1.0.2", 3086 | "define-properties": "^1.2.0", 3087 | "es-abstract": "^1.22.1" 3088 | }, 3089 | "funding": { 3090 | "url": "https://github.com/sponsors/ljharb" 3091 | } 3092 | }, 3093 | "node_modules/string.prototype.trimstart": { 3094 | "version": "1.0.7", 3095 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", 3096 | "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", 3097 | "dev": true, 3098 | "peer": true, 3099 | "dependencies": { 3100 | "call-bind": "^1.0.2", 3101 | "define-properties": "^1.2.0", 3102 | "es-abstract": "^1.22.1" 3103 | }, 3104 | "funding": { 3105 | "url": "https://github.com/sponsors/ljharb" 3106 | } 3107 | }, 3108 | "node_modules/strip-ansi": { 3109 | "version": "6.0.1", 3110 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3111 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3112 | "dev": true, 3113 | "dependencies": { 3114 | "ansi-regex": "^5.0.1" 3115 | }, 3116 | "engines": { 3117 | "node": ">=8" 3118 | } 3119 | }, 3120 | "node_modules/strip-bom": { 3121 | "version": "3.0.0", 3122 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 3123 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 3124 | "dev": true, 3125 | "peer": true, 3126 | "engines": { 3127 | "node": ">=4" 3128 | } 3129 | }, 3130 | "node_modules/strip-json-comments": { 3131 | "version": "3.1.1", 3132 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3133 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3134 | "dev": true, 3135 | "engines": { 3136 | "node": ">=8" 3137 | }, 3138 | "funding": { 3139 | "url": "https://github.com/sponsors/sindresorhus" 3140 | } 3141 | }, 3142 | "node_modules/style-mod": { 3143 | "version": "4.0.3", 3144 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", 3145 | "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==", 3146 | "dev": true, 3147 | "peer": true 3148 | }, 3149 | "node_modules/supports-color": { 3150 | "version": "7.2.0", 3151 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3152 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3153 | "dev": true, 3154 | "dependencies": { 3155 | "has-flag": "^4.0.0" 3156 | }, 3157 | "engines": { 3158 | "node": ">=8" 3159 | } 3160 | }, 3161 | "node_modules/supports-preserve-symlinks-flag": { 3162 | "version": "1.0.0", 3163 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3164 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3165 | "dev": true, 3166 | "peer": true, 3167 | "engines": { 3168 | "node": ">= 0.4" 3169 | }, 3170 | "funding": { 3171 | "url": "https://github.com/sponsors/ljharb" 3172 | } 3173 | }, 3174 | "node_modules/text-table": { 3175 | "version": "0.2.0", 3176 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3177 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3178 | "dev": true 3179 | }, 3180 | "node_modules/to-regex-range": { 3181 | "version": "5.0.1", 3182 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3183 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3184 | "dev": true, 3185 | "license": "MIT", 3186 | "dependencies": { 3187 | "is-number": "^7.0.0" 3188 | }, 3189 | "engines": { 3190 | "node": ">=8.0" 3191 | } 3192 | }, 3193 | "node_modules/tsconfig-paths": { 3194 | "version": "3.14.2", 3195 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", 3196 | "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", 3197 | "dev": true, 3198 | "peer": true, 3199 | "dependencies": { 3200 | "@types/json5": "^0.0.29", 3201 | "json5": "^1.0.2", 3202 | "minimist": "^1.2.6", 3203 | "strip-bom": "^3.0.0" 3204 | } 3205 | }, 3206 | "node_modules/tslib": { 3207 | "version": "2.4.0", 3208 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 3209 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 3210 | "dev": true 3211 | }, 3212 | "node_modules/tsutils": { 3213 | "version": "3.21.0", 3214 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 3215 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 3216 | "dev": true, 3217 | "dependencies": { 3218 | "tslib": "^1.8.1" 3219 | }, 3220 | "engines": { 3221 | "node": ">= 6" 3222 | }, 3223 | "peerDependencies": { 3224 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" 3225 | } 3226 | }, 3227 | "node_modules/tsutils/node_modules/tslib": { 3228 | "version": "1.14.1", 3229 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 3230 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 3231 | "dev": true 3232 | }, 3233 | "node_modules/type-check": { 3234 | "version": "0.4.0", 3235 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3236 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3237 | "dev": true, 3238 | "dependencies": { 3239 | "prelude-ls": "^1.2.1" 3240 | }, 3241 | "engines": { 3242 | "node": ">= 0.8.0" 3243 | } 3244 | }, 3245 | "node_modules/type-fest": { 3246 | "version": "0.20.2", 3247 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3248 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3249 | "dev": true, 3250 | "engines": { 3251 | "node": ">=10" 3252 | }, 3253 | "funding": { 3254 | "url": "https://github.com/sponsors/sindresorhus" 3255 | } 3256 | }, 3257 | "node_modules/typed-array-buffer": { 3258 | "version": "1.0.0", 3259 | "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", 3260 | "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", 3261 | "dev": true, 3262 | "peer": true, 3263 | "dependencies": { 3264 | "call-bind": "^1.0.2", 3265 | "get-intrinsic": "^1.2.1", 3266 | "is-typed-array": "^1.1.10" 3267 | }, 3268 | "engines": { 3269 | "node": ">= 0.4" 3270 | } 3271 | }, 3272 | "node_modules/typed-array-byte-length": { 3273 | "version": "1.0.0", 3274 | "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", 3275 | "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", 3276 | "dev": true, 3277 | "peer": true, 3278 | "dependencies": { 3279 | "call-bind": "^1.0.2", 3280 | "for-each": "^0.3.3", 3281 | "has-proto": "^1.0.1", 3282 | "is-typed-array": "^1.1.10" 3283 | }, 3284 | "engines": { 3285 | "node": ">= 0.4" 3286 | }, 3287 | "funding": { 3288 | "url": "https://github.com/sponsors/ljharb" 3289 | } 3290 | }, 3291 | "node_modules/typed-array-byte-offset": { 3292 | "version": "1.0.0", 3293 | "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", 3294 | "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", 3295 | "dev": true, 3296 | "peer": true, 3297 | "dependencies": { 3298 | "available-typed-arrays": "^1.0.5", 3299 | "call-bind": "^1.0.2", 3300 | "for-each": "^0.3.3", 3301 | "has-proto": "^1.0.1", 3302 | "is-typed-array": "^1.1.10" 3303 | }, 3304 | "engines": { 3305 | "node": ">= 0.4" 3306 | }, 3307 | "funding": { 3308 | "url": "https://github.com/sponsors/ljharb" 3309 | } 3310 | }, 3311 | "node_modules/typed-array-length": { 3312 | "version": "1.0.4", 3313 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", 3314 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", 3315 | "dev": true, 3316 | "peer": true, 3317 | "dependencies": { 3318 | "call-bind": "^1.0.2", 3319 | "for-each": "^0.3.3", 3320 | "is-typed-array": "^1.1.9" 3321 | }, 3322 | "funding": { 3323 | "url": "https://github.com/sponsors/ljharb" 3324 | } 3325 | }, 3326 | "node_modules/typescript": { 3327 | "version": "4.7.4", 3328 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 3329 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 3330 | "dev": true, 3331 | "bin": { 3332 | "tsc": "bin/tsc", 3333 | "tsserver": "bin/tsserver" 3334 | }, 3335 | "engines": { 3336 | "node": ">=4.2.0" 3337 | } 3338 | }, 3339 | "node_modules/unbox-primitive": { 3340 | "version": "1.0.2", 3341 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 3342 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 3343 | "dev": true, 3344 | "peer": true, 3345 | "dependencies": { 3346 | "call-bind": "^1.0.2", 3347 | "has-bigints": "^1.0.2", 3348 | "has-symbols": "^1.0.3", 3349 | "which-boxed-primitive": "^1.0.2" 3350 | }, 3351 | "funding": { 3352 | "url": "https://github.com/sponsors/ljharb" 3353 | } 3354 | }, 3355 | "node_modules/uri-js": { 3356 | "version": "4.4.1", 3357 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3358 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3359 | "dev": true, 3360 | "dependencies": { 3361 | "punycode": "^2.1.0" 3362 | } 3363 | }, 3364 | "node_modules/w3c-keyname": { 3365 | "version": "2.2.8", 3366 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", 3367 | "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", 3368 | "dev": true, 3369 | "peer": true 3370 | }, 3371 | "node_modules/which": { 3372 | "version": "2.0.2", 3373 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3374 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3375 | "dev": true, 3376 | "dependencies": { 3377 | "isexe": "^2.0.0" 3378 | }, 3379 | "bin": { 3380 | "node-which": "bin/node-which" 3381 | }, 3382 | "engines": { 3383 | "node": ">= 8" 3384 | } 3385 | }, 3386 | "node_modules/which-boxed-primitive": { 3387 | "version": "1.0.2", 3388 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 3389 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 3390 | "dev": true, 3391 | "peer": true, 3392 | "dependencies": { 3393 | "is-bigint": "^1.0.1", 3394 | "is-boolean-object": "^1.1.0", 3395 | "is-number-object": "^1.0.4", 3396 | "is-string": "^1.0.5", 3397 | "is-symbol": "^1.0.3" 3398 | }, 3399 | "funding": { 3400 | "url": "https://github.com/sponsors/ljharb" 3401 | } 3402 | }, 3403 | "node_modules/which-typed-array": { 3404 | "version": "1.1.11", 3405 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", 3406 | "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", 3407 | "dev": true, 3408 | "peer": true, 3409 | "dependencies": { 3410 | "available-typed-arrays": "^1.0.5", 3411 | "call-bind": "^1.0.2", 3412 | "for-each": "^0.3.3", 3413 | "gopd": "^1.0.1", 3414 | "has-tostringtag": "^1.0.0" 3415 | }, 3416 | "engines": { 3417 | "node": ">= 0.4" 3418 | }, 3419 | "funding": { 3420 | "url": "https://github.com/sponsors/ljharb" 3421 | } 3422 | }, 3423 | "node_modules/wrappy": { 3424 | "version": "1.0.2", 3425 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3426 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3427 | "dev": true 3428 | }, 3429 | "node_modules/yallist": { 3430 | "version": "4.0.0", 3431 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3432 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3433 | "dev": true 3434 | }, 3435 | "node_modules/yocto-queue": { 3436 | "version": "0.1.0", 3437 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3438 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3439 | "dev": true, 3440 | "engines": { 3441 | "node": ">=10" 3442 | }, 3443 | "funding": { 3444 | "url": "https://github.com/sponsors/sindresorhus" 3445 | } 3446 | } 3447 | } 3448 | } 3449 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "image-captions", 3 | "version": "1.1.5", 4 | "description": "Adds captions to images when there is alt-text specified", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "node esbuild.config.mjs", 8 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", 9 | "version": "node version-bump.mjs && git add manifest.json versions.json" 10 | }, 11 | "keywords": [], 12 | "author": "Alan Grainger", 13 | "license": "GPL-3.0-or-later", 14 | "devDependencies": { 15 | "@types/node": "^16.11.6", 16 | "@typescript-eslint/eslint-plugin": "5.29.0", 17 | "@typescript-eslint/parser": "5.29.0", 18 | "builtin-modules": "3.3.0", 19 | "esbuild": "0.14.47", 20 | "eslint": "^8.49.0", 21 | "eslint-config-standard": "^17.1.0", 22 | "obsidian": "latest", 23 | "tslib": "2.4.0", 24 | "typescript": "4.7.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { Component, MarkdownPostProcessor, MarkdownRenderer, Plugin } from 'obsidian' 2 | import { CaptionSettings, CaptionSettingTab, DEFAULT_SETTINGS } from './settings' 3 | 4 | const filenamePlaceholder = '%' 5 | const filenameExtensionPlaceholder = '%.%' 6 | 7 | export default class ImageCaptions extends Plugin { 8 | settings: CaptionSettings 9 | observer: MutationObserver 10 | 11 | async onload () { 12 | this.registerMarkdownPostProcessor( 13 | this.externalImageProcessor() 14 | ) 15 | 16 | await this.loadSettings() 17 | this.addSettingTab(new CaptionSettingTab(this.app, this)) 18 | 19 | this.observer = new MutationObserver((mutations: MutationRecord[]) => { 20 | mutations.forEach((rec: MutationRecord) => { 21 | if (rec.type === 'childList') { 22 | (rec.target) 23 | // Search for all .image-embed nodes. Could be
or 24 | .querySelectorAll('.image-embed, .video-embed') 25 | .forEach(async imageEmbedContainer => { 26 | const img = imageEmbedContainer.querySelector('img, video') 27 | const width = imageEmbedContainer.getAttribute('width') || '' 28 | const captionText = this.getCaptionText(imageEmbedContainer) 29 | if (!img) return 30 | const figure = imageEmbedContainer.querySelector('figure') 31 | const figCaption = imageEmbedContainer.querySelector('figcaption') 32 | if (figure || img.parentElement?.nodeName === 'FIGURE') { 33 | // Node has already been processed 34 | // Check if the text needs to be updated 35 | if (figCaption && captionText) { 36 | // Update the text in the existing element 37 | const children = await renderMarkdown(captionText, '', this) ?? [captionText] 38 | figCaption.replaceChildren(...children) 39 | } else if (!captionText) { 40 | // The alt-text has been removed, so remove the custom
element 41 | // and set it back to how it was originally with just the plain element 42 | imageEmbedContainer.appendChild(img) 43 | figure?.remove() 44 | } 45 | } else { 46 | if (captionText && captionText !== imageEmbedContainer.getAttribute('src')) { 47 | await this.insertFigureWithCaption(img as HTMLElement, imageEmbedContainer, captionText, '') 48 | } 49 | } 50 | if (width) { 51 | // Update the image width, if specified 52 | img.setAttribute('width', width) 53 | } else { 54 | // It's critical to remove the empty width attribute, rather than setting it to "" 55 | img.removeAttribute('width') 56 | } 57 | }) 58 | } 59 | }) 60 | }) 61 | this.observer.observe(document.body, { 62 | subtree: true, 63 | childList: true 64 | }) 65 | } 66 | 67 | /** 68 | * Process an HTMLElement or Element to extract the caption text 69 | * from the alt attribute. 70 | * 71 | * Optionally use the image filename if the filenamePlaceholder is specified. 72 | * 73 | * @param img 74 | */ 75 | getCaptionText (img: HTMLElement | Element) { 76 | let captionText = img.getAttribute('alt') || '' 77 | const src = img.getAttribute('src') || '' 78 | // If a wikilink is in the format [[image.png#foo]], Obsidian changes the captionText 79 | // to be 'image.png > foo'. We need to test for this edge case also. 80 | const edge = captionText.replace(/ > /, '#') 81 | if (captionText === src || edge === src) { 82 | // If no caption is specified then Obsidian puts the src in the alt attribute, 83 | // so we need to set a blank caption. 84 | return '' 85 | } 86 | 87 | // Perform the regex, if any 88 | if (this.settings.captionRegex) { 89 | try { 90 | const match = captionText.match(new RegExp(this.settings.captionRegex)) 91 | if (match && match[1]) captionText = match[1] 92 | } catch (e) { 93 | // Invalid regex 94 | } 95 | } 96 | 97 | if (captionText === filenamePlaceholder) { 98 | // Optionally use filename as caption text if the placeholder is used 99 | const match = src.match(/[^\\/]+(?=\.\w+$)|[^\\/]+$/) 100 | if (match?.[0]) { 101 | captionText = match[0] 102 | } 103 | } else if (captionText === filenameExtensionPlaceholder) { 104 | // Optionally use filename (including extension) as caption text if the placeholder is used 105 | const match = src.match(/[^\\/]+$/) 106 | if (match?.[0]) { 107 | captionText = match[0] 108 | } 109 | } else if (captionText === '\\' + filenamePlaceholder) { 110 | // Remove the escaping to allow the placeholder to be used verbatim 111 | captionText = filenamePlaceholder 112 | } 113 | captionText = captionText.replace(/<<(.*?)>>/g, (_, linktext) => { 114 | return '[[' + linktext + ']]' 115 | }) 116 | return captionText 117 | } 118 | 119 | /** 120 | * External images can be processed with a Markdown Post Processor, but only in Reading View. 121 | */ 122 | externalImageProcessor (): MarkdownPostProcessor { 123 | return (el, ctx) => { 124 | el.findAll('img:not(.emoji), video') 125 | .forEach(async img => { 126 | const captionText = this.getCaptionText(img) 127 | const parent = img.parentElement 128 | if (parent && parent?.nodeName !== 'FIGURE' && captionText && captionText !== img.getAttribute('src')) { 129 | await this.insertFigureWithCaption(img, parent, captionText, ctx.sourcePath) 130 | } 131 | }) 132 | } 133 | } 134 | 135 | /** 136 | * Replace the original element with this structure: 137 | * @example 138 | *
139 | * 140 | *
The caption text
141 | *
142 | * 143 | * @param {HTMLElement} imageEl - The original image element to insert inside the
144 | * @param {HTMLElement|Element} outerEl - Most likely the parent of the original 145 | * @param captionText 146 | * @param sourcePath 147 | */ 148 | async insertFigureWithCaption (imageEl: HTMLElement, outerEl: HTMLElement | Element, captionText: string, sourcePath: string) { 149 | const figure = outerEl.createEl('figure') 150 | figure.addClass('image-captions-figure') 151 | figure.appendChild(imageEl) 152 | const children = await renderMarkdown(captionText, sourcePath, this) ?? [captionText] 153 | figure.createEl('figcaption', { 154 | cls: 'image-captions-caption' 155 | }).replaceChildren(...children) 156 | } 157 | 158 | async loadSettings () { 159 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()) 160 | } 161 | 162 | async saveSettings () { 163 | await this.saveData(this.settings) 164 | } 165 | 166 | onunload () { 167 | this.observer.disconnect() 168 | } 169 | } 170 | 171 | /** 172 | * Easy-to-use version of MarkdownRenderer.renderMarkdown. Returns only the child nodes, rather than a container block. 173 | * @param markdown 174 | * @param sourcePath 175 | * @param component - Typically you can just pass the plugin instance, but Liam from the Obsidian team says 176 | * it's not a good practice (https://github.com/obsidianmd/obsidian-releases/pull/2263#issuecomment-1711864829). 177 | * I'm currently struggling to find a proper way to do it. 178 | */ 179 | export async function renderMarkdown (markdown: string, sourcePath: string, component: Component): Promise { 180 | const el = createDiv() 181 | await MarkdownRenderer.renderMarkdown(markdown, el, sourcePath, component) 182 | for (const child of el.children) { 183 | if (child.tagName.toLowerCase() === 'p') { 184 | return child.childNodes 185 | } 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /src/settings.ts: -------------------------------------------------------------------------------- 1 | import { App, PluginSettingTab, Setting } from 'obsidian' 2 | import ImageCaptions from './main' 3 | 4 | export interface CaptionSettings { 5 | captionRegex: string; 6 | } 7 | 8 | export const DEFAULT_SETTINGS: CaptionSettings = { 9 | captionRegex: '' 10 | } 11 | 12 | export class CaptionSettingTab extends PluginSettingTab { 13 | plugin: ImageCaptions 14 | 15 | constructor (app: App, plugin: ImageCaptions) { 16 | super(app, plugin) 17 | this.plugin = plugin 18 | } 19 | 20 | display (): void { 21 | const { containerEl } = this 22 | 23 | containerEl.empty() 24 | 25 | new Setting(containerEl) 26 | .setName('Advanced settings') 27 | .setHeading() 28 | 29 | // Caption regex 30 | new Setting(containerEl) 31 | .setName('Caption regex') 32 | .setDesc('For advanced caption parsing, you can add a regex here. The first capturing group will be used as the image caption. ' + 33 | 'This is useful in situations where you might have another plugin or theme adding text to the caption area which you want to strip out. ' + 34 | 'The placeholder example would be used to exclude everything following a pipe character (if one exists).') 35 | .addText(text => text 36 | .setPlaceholder('^([^|]+)') 37 | .setValue(this.plugin.settings.captionRegex) 38 | .onChange(async value => { 39 | this.plugin.settings.captionRegex = value 40 | await this.plugin.saveSettings() 41 | })) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | .image-captions-figure { 2 | margin: 0; 3 | padding: 2px; 4 | display: table; /* To allow for correct caption text wrapping */ 5 | border-radius: 2px; 6 | } 7 | 8 | .image-captions-caption { 9 | margin: -5px 0 0 0; 10 | padding: 3px 5px; 11 | text-align: center; 12 | display: table-caption; /* To allow for correct caption text wrapping */ 13 | caption-side: bottom; 14 | } 15 | 16 | .theme-dark .image-captions-figure, 17 | .theme-dark .image-captions-caption { 18 | background: #303030; 19 | } 20 | 21 | .theme-light .image-captions-figure, 22 | .theme-light .image-captions-caption { 23 | background: #ebebeb; 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "src", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "ES6", 8 | "allowJs": true, 9 | "noImplicitAny": true, 10 | "moduleResolution": "node", 11 | "importHelpers": true, 12 | "isolatedModules": true, 13 | "strictNullChecks": true, 14 | "lib": [ 15 | "DOM", 16 | "ES5", 17 | "ES6", 18 | "ES7", 19 | "DOM.Iterable" 20 | ] 21 | }, 22 | "include": [ 23 | "**/*.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /version-bump.mjs: -------------------------------------------------------------------------------- 1 | import { readFileSync, writeFileSync } from "fs"; 2 | 3 | const targetVersion = process.env.npm_package_version; 4 | 5 | // read minAppVersion from manifest.json and bump version to target version 6 | let manifest = JSON.parse(readFileSync("manifest.json", "utf8")); 7 | const { minAppVersion } = manifest; 8 | manifest.version = targetVersion; 9 | writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t")); 10 | 11 | // update versions.json with target version and minAppVersion from manifest.json 12 | let versions = JSON.parse(readFileSync("versions.json", "utf8")); 13 | versions[targetVersion] = minAppVersion; 14 | writeFileSync("versions.json", JSON.stringify(versions, null, "\t")); 15 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.0": "0.15.0", 3 | "1.0.1": "0.15.0", 4 | "1.0.2": "0.15.0", 5 | "1.0.3": "0.15.0", 6 | "1.0.4": "0.15.0", 7 | "1.0.5": "0.15.0", 8 | "1.0.6": "0.15.0", 9 | "1.0.7": "0.15.0", 10 | "1.0.8": "0.15.0", 11 | "1.0.9": "0.15.0", 12 | "1.1.0": "0.15.0", 13 | "1.1.1": "0.15.0", 14 | "1.1.2": "0.15.0", 15 | "1.1.3": "0.15.0", 16 | "1.1.4": "0.15.0", 17 | "1.1.5": "0.15.0" 18 | } 19 | --------------------------------------------------------------------------------