├── .devcontainer └── devcontainer.json ├── .eslintrc.js ├── .github ├── FUNDING.yml └── workflows │ ├── main.yml │ └── release.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── esbuild.config.mjs ├── main.ts ├── manifest.json ├── package.json ├── resources └── screenshots │ └── sidebar.png ├── styles.css ├── tsconfig.json ├── versions.json └── yarn.lock /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "image": "node:lts-buster" 3 | } -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: "@typescript-eslint/parser", 4 | parserOptions: { 5 | ecmaVersion: 2020, 6 | sourceType: "module", 7 | project: ["./tsconfig.json"], 8 | }, 9 | plugins: [ 10 | "@typescript-eslint", 11 | "babel", 12 | "import", 13 | "jsdoc", 14 | "prefer-arrow", 15 | ], 16 | rules: { 17 | "@typescript-eslint/array-type": "error", 18 | "@typescript-eslint/await-thenable": "error", 19 | "@typescript-eslint/consistent-type-assertions": "error", 20 | "@typescript-eslint/consistent-type-definitions": "error", 21 | "@typescript-eslint/explicit-function-return-type": [ 22 | "error", 23 | { allowExpressions: true }, 24 | ], 25 | "@typescript-eslint/explicit-member-accessibility": [ 26 | "error", 27 | { 28 | accessibility: "explicit", 29 | overrides: { 30 | accessors: "explicit", 31 | constructors: "off", 32 | parameterProperties: "explicit", 33 | }, 34 | }, 35 | ], 36 | "@typescript-eslint/member-ordering": [ 37 | "error", 38 | { 39 | default: [ 40 | "public-static-field", 41 | "protected-static-field", 42 | "private-static-field", 43 | "public-static-method", 44 | "protected-static-method", 45 | "private-static-method", 46 | "public-instance-field", 47 | "protected-instance-field", 48 | "private-instance-field", 49 | "constructor", 50 | "public-instance-method", 51 | "protected-instance-method", 52 | "private-instance-method", 53 | ], 54 | }, 55 | ], 56 | "@typescript-eslint/naming-convention": [ 57 | "error", 58 | { 59 | selector: "variable", 60 | format: ["camelCase", "PascalCase", "snake_case", "UPPER_CASE"], 61 | leadingUnderscore: "allow", 62 | }, 63 | { selector: "typeLike", format: ["PascalCase"] }, 64 | { selector: "enumMember", format: ["PascalCase"] }, 65 | ], 66 | "@typescript-eslint/no-explicit-any": "error", 67 | "@typescript-eslint/no-extraneous-class": "error", 68 | "@typescript-eslint/no-namespace": "error", 69 | "@typescript-eslint/no-non-null-assertion": "error", 70 | "@typescript-eslint/no-explicit-any": "error", 71 | "@typescript-eslint/no-this-alias": ["error", { allowDestructuring: true }], 72 | "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", 73 | "@typescript-eslint/no-unnecessary-type-assertion": "error", 74 | "@typescript-eslint/no-unused-expressions": "error", 75 | "@typescript-eslint/prefer-function-type": "error", 76 | "@typescript-eslint/prefer-readonly": "error", 77 | "@typescript-eslint/quotes": ["error", "single", { avoidEscape: true }], 78 | "arrow-body-style": ["error", "as-needed"], 79 | "babel/no-invalid-this": "error", 80 | "constructor-super": "error", 81 | curly: ["error", "multi-line"], 82 | eqeqeq: "error", 83 | "import/no-duplicates": "error", 84 | "jsdoc/check-alignment": "error", 85 | "new-parens": "error", 86 | "no-caller": "error", 87 | "no-cond-assign": ["error", "always"], 88 | "no-debugger": "error", 89 | "no-duplicate-case": "error", 90 | "no-else-return": "error", 91 | "no-empty": "error", 92 | "no-eval": "error", 93 | "no-fallthrough": "error", 94 | "no-new-wrappers": "error", 95 | "no-param-reassign": "error", 96 | "no-restricted-globals": [ 97 | "error", 98 | "length", 99 | "name", 100 | { 101 | name: "isFinite", 102 | message: "Use the more strict Number.isFinite.", 103 | }, 104 | { 105 | name: "isNaN", 106 | message: "Use the more strict Number.isNaN.", 107 | }, 108 | ], 109 | "no-restricted-properties": [ 110 | "error", 111 | { 112 | property: "bind", 113 | message: "Native? Use an arrow function. jQuery? Use .on()", 114 | }, 115 | ], 116 | "no-return-await": "error", 117 | "no-self-compare": "error", 118 | "no-shadow": "off", 119 | "@typescript-eslint/no-shadow": "error", 120 | "no-sequences": "error", 121 | "no-sparse-arrays": "error", 122 | "no-template-curly-in-string": "error", 123 | "no-throw-literal": "error", 124 | "no-unsafe-finally": "error", 125 | "no-var": "error", 126 | "no-with": "error", 127 | "object-shorthand": "error", 128 | "one-var": ["error", "never"], 129 | "prefer-arrow/prefer-arrow-functions": "error", 130 | "prefer-const": ["error", { destructuring: "all" }], 131 | "prefer-object-spread": "error", 132 | "prefer-rest-params": "error", 133 | radix: "error", 134 | "spaced-comment": [ 135 | "error", 136 | "always", 137 | { 138 | line: { markers: ["#region", "#endregion"] }, 139 | block: { balanced: true }, 140 | }, 141 | ], 142 | "use-isnan": "error", 143 | "linebreak-style": ["error", "unix"], 144 | }, 145 | }; 146 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [tgrosinger] 2 | custom: ["https://paypal.me/tgrosinger", "https://buymeacoffee.com/tgrosinger"] 3 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: [main] 5 | pull_request: 6 | branches: [main] 7 | jobs: 8 | eslint: 9 | runs-on: ubuntu-latest 10 | steps: 11 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 12 | - uses: actions/checkout@v2 13 | 14 | - name: Install modules 15 | run: yarn 16 | 17 | - name: Run build 18 | run: yarn run build 19 | 20 | - name: Run ESLint 21 | run: yarn run eslint 22 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | tags: ["*"] 5 | env: 6 | PLUGIN_NAME: recent-files-obsidian 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 12 | - uses: actions/checkout@v2 13 | 14 | - name: Install modules 15 | run: yarn 16 | 17 | - name: Run build 18 | run: yarn run build 19 | 20 | - name: Package 21 | run: | 22 | mkdir ${{ env.PLUGIN_NAME }} 23 | cp main.js manifest.json styles.css ${{ env.PLUGIN_NAME }} 24 | zip -r ${{ env.PLUGIN_NAME}}.zip ${{ env.PLUGIN_NAME }} 25 | echo "tag_name=$(git tag --sort version:refname | tail -n 1)" >> $GITHUB_OUTPUT 26 | 27 | - name: Create Release 28 | id: create_release 29 | uses: actions/create-release@v1 30 | env: 31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 32 | VERSION: ${{ github.ref }} 33 | with: 34 | tag_name: ${{ github.ref }} 35 | release_name: ${{ github.ref }} 36 | draft: true 37 | prerelease: false 38 | 39 | - name: Upload artifacts 40 | id: upload-artifacts 41 | uses: actions/upload-release-asset@v1 42 | env: 43 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 44 | with: 45 | upload_url: ${{ steps.create_release.outputs.upload_url }} 46 | asset_path: ./${{ env.PLUGIN_NAME }}.zip 47 | asset_name: ${{ env.PLUGIN_NAME }}-${{ github.ref }}.zip 48 | asset_content_type: application/zip 49 | 50 | - name: Upload main.js 51 | id: upload-main 52 | uses: actions/upload-release-asset@v1 53 | env: 54 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 55 | with: 56 | upload_url: ${{ steps.create_release.outputs.upload_url }} 57 | asset_path: ./main.js 58 | asset_name: main.js 59 | asset_content_type: text/javascript 60 | 61 | - name: Upload manifest.json 62 | id: upload-manifest 63 | uses: actions/upload-release-asset@v1 64 | env: 65 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 66 | with: 67 | upload_url: ${{ steps.create_release.outputs.upload_url }} 68 | asset_path: ./manifest.json 69 | asset_name: manifest.json 70 | asset_content_type: application/json 71 | 72 | - name: Upload styles.css 73 | id: upload-styles 74 | uses: actions/upload-release-asset@v1 75 | env: 76 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 77 | with: 78 | upload_url: ${{ steps.create_release.outputs.upload_url }} 79 | asset_path: ./styles.css 80 | asset_name: styles.css 81 | asset_content_type: text/css 82 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Intellij 2 | *.iml 3 | .idea 4 | 5 | # npm 6 | node_modules 7 | package-lock.json 8 | yarn-cache 9 | 10 | # build 11 | main.js 12 | *.js.map -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "tabWidth": 2, 4 | "trailingComma": "all", 5 | "overrides": [ 6 | { 7 | "files": ".prettierrc", 8 | "options": { 9 | "parser": "json" 10 | } 11 | }, 12 | { 13 | "files": "*.yml", 14 | "options": { 15 | "tabWidth": 2, 16 | "singleQuote": false 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /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 | # Recent Files for Obsidian 2 | 3 | This plugin displays a list of most recently opened files in the sidebar. 4 | Optionally, exclude certain paths, frontmatter tags, or bookmarked files. 5 | 6 | That's all there is to it! 7 | 8 | As with the file explorer view, you can: 9 | 10 | * Click items to open, ctrl-click to open in a new pane, right-click for a menu 11 | * Drag items to an editor to drop a link, to a header to open in a specific pane, or to a file explorer folder to move the file 12 | * Hover or ctrl-hover to view a content preview (as configured by the "Recent Files" toggle in the "Page Preview" settings) 13 | 14 | ## Screenshots 15 | 16 | ![sidebar](https://raw.githubusercontent.com/tgrosinger/recent-files-obsidian/main/resources/screenshots/sidebar.png) 17 | 18 | ## Other Plugin Support 19 | 20 | If you use the [Front Matter Title plugin](https://github.com/snezhig/obsidian-front-matter-title), enable the explorer module to name files in the Recent Files sidebar from the note frontmatter title. 21 | 22 | ## Pricing 23 | 24 | This plugin is provided to everyone for free, however if you would like to 25 | say thanks or help support continued development, feel free to send a little 26 | my way through one of the following methods: 27 | 28 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/tgrosinger?style=social)](https://github.com/sponsors/tgrosinger) 29 | [![Paypal](https://img.shields.io/badge/paypal-tgrosinger-yellow?style=social&logo=paypal)](https://paypal.me/tgrosinger) 30 | [BuyMeACoffee](https://www.buymeacoffee.com/tgrosinger) -------------------------------------------------------------------------------- /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 | const context = await esbuild.context({ 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 | target: "es2018", 37 | logLevel: "info", 38 | sourcemap: prod ? false : "inline", 39 | treeShaking: true, 40 | outfile: "main.js", 41 | minify: prod, 42 | }); 43 | 44 | if (prod) { 45 | await context.rebuild(); 46 | process.exit(0); 47 | } else { 48 | await context.watch(); 49 | } -------------------------------------------------------------------------------- /main.ts: -------------------------------------------------------------------------------- 1 | import { 2 | addIcon, 3 | App, 4 | ItemView, 5 | Keymap, 6 | Menu, 7 | Notice, 8 | PaneType, 9 | Plugin, 10 | PluginSettingTab, 11 | setIcon, 12 | setTooltip, 13 | Setting, 14 | TAbstractFile, 15 | TFile, 16 | WorkspaceLeaf, 17 | } from 'obsidian'; 18 | 19 | import { getApiSafe } from 'front-matter-plugin-api-provider'; 20 | 21 | interface FilePath { 22 | path: string; 23 | basename: string; 24 | } 25 | 26 | interface BookmarkedFile { 27 | ctime: number; 28 | path: string; 29 | type: string; 30 | } 31 | 32 | interface RecentFilesData { 33 | recentFiles: FilePath[]; 34 | omittedPaths: string[]; 35 | omittedTags: string[]; 36 | omitBookmarks: boolean; 37 | updateOn: 'file-edit' | 'file-open'; 38 | maxLength?: number; 39 | } 40 | 41 | const defaultMaxLength: number = 50; 42 | 43 | const DEFAULT_DATA: RecentFilesData = { 44 | recentFiles: [], 45 | omittedPaths: [], 46 | omittedTags: [], 47 | updateOn: 'file-open', 48 | omitBookmarks: false, 49 | }; 50 | 51 | const RecentFilesListViewType = 'recent-files'; 52 | 53 | class RecentFilesListView extends ItemView { 54 | private readonly plugin: RecentFilesPlugin; 55 | private readonly data: RecentFilesData; 56 | 57 | constructor( 58 | leaf: WorkspaceLeaf, 59 | plugin: RecentFilesPlugin, 60 | data: RecentFilesData, 61 | ) { 62 | super(leaf); 63 | 64 | this.plugin = plugin; 65 | this.data = data; 66 | } 67 | 68 | public async onOpen(): Promise { 69 | this.redraw(); 70 | } 71 | 72 | public getViewType(): string { 73 | return RecentFilesListViewType; 74 | } 75 | 76 | public getDisplayText(): string { 77 | return 'Recent Files'; 78 | } 79 | 80 | public getIcon(): string { 81 | return 'clock'; 82 | } 83 | 84 | public onPaneMenu(menu: Menu): void { 85 | menu 86 | .addItem((item) => { 87 | item 88 | .setTitle('Clear list') 89 | .setIcon('sweep') 90 | .onClick(async () => { 91 | this.data.recentFiles = []; 92 | await this.plugin.saveData(); 93 | this.redraw(); 94 | }); 95 | }) 96 | .addItem((item) => { 97 | item 98 | .setTitle('Close') 99 | .setIcon('cross') 100 | .onClick(() => { 101 | this.app.workspace.detachLeavesOfType(RecentFilesListViewType); 102 | }); 103 | }); 104 | } 105 | 106 | public readonly redraw = (): void => { 107 | const openFile = this.app.workspace.getActiveFile(); 108 | 109 | const rootEl = createDiv({ cls: 'nav-folder mod-root' }); 110 | const childrenEl = rootEl.createDiv({ cls: 'nav-folder-children' }); 111 | 112 | // Add support for the Front Matter Title plugin (https://github.com/snezhig/obsidian-front-matter-title) 113 | // Get the plugin's safe API and check if the plugin is enabled. 114 | // If the plugin is not installed, this will not create an error. 115 | const frontMatterApi = getApiSafe(this.app); 116 | // We query the "explorer" feature because it is the closest in form to this plugin's features. 117 | const frontMatterEnabled = frontMatterApi && frontMatterApi.getEnabledFeatures().contains('explorer'); 118 | const frontMatterResolver = frontMatterEnabled 119 | ? frontMatterApi.getResolverFactory()?.createResolver('explorer') 120 | : null; 121 | 122 | this.data.recentFiles.forEach((currentFile) => { 123 | const navFile = childrenEl.createDiv({ 124 | cls: 'tree-item nav-file recent-files-file', 125 | }); 126 | const navFileTitle = navFile.createDiv({ 127 | cls: 'tree-item-self is-clickable nav-file-title recent-files-title', 128 | }); 129 | const navFileTitleContent = navFileTitle.createDiv({ 130 | cls: 'tree-item-inner nav-file-title-content', 131 | }); 132 | const navFileTag = navFileTitle.createDiv({ 133 | cls: 'nav-file-tag' 134 | }); 135 | const navFileSpacer = navFileTitle.createDiv({ 136 | cls: 'tree-item-spacer' 137 | }); 138 | 139 | // If the Front Matter Title plugin is enabled, get the file's title from the plugin. 140 | const title = frontMatterResolver 141 | ? frontMatterResolver.resolve(currentFile.path) ?? currentFile.basename 142 | : currentFile.basename; 143 | 144 | navFileTitleContent.setText(title); 145 | 146 | const tFile = this.app.vault.getFileByPath(currentFile.path); 147 | const extension = tFile?.extension 148 | if (extension && extension !== 'md') { 149 | navFileTag.setText(extension) 150 | } 151 | 152 | setTooltip(navFile, currentFile.path); 153 | 154 | if (openFile && currentFile.path === openFile.path) { 155 | navFileTitle.addClass('is-active'); 156 | } 157 | 158 | navFileTitle.setAttr('draggable', 'true'); 159 | navFileTitle.addEventListener('dragstart', (event: DragEvent) => { 160 | if (!currentFile?.path) return; 161 | 162 | const file = this.app.metadataCache.getFirstLinkpathDest( 163 | currentFile.path, 164 | '', 165 | ); 166 | 167 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 168 | const dragManager = (this.app as any).dragManager; 169 | const dragData = dragManager.dragFile(event, file); 170 | dragManager.onDragStart(event, dragData); 171 | }); 172 | 173 | navFileTitle.addEventListener('mouseover', (event: MouseEvent) => { 174 | if (!currentFile?.path) return; 175 | 176 | this.app.workspace.trigger('hover-link', { 177 | event, 178 | source: RecentFilesListViewType, 179 | hoverParent: rootEl, 180 | targetEl: navFile, 181 | linktext: currentFile.path, 182 | }); 183 | }); 184 | 185 | navFileTitle.addEventListener('contextmenu', (event: MouseEvent) => { 186 | if (!currentFile?.path) return; 187 | 188 | const menu = new Menu(); 189 | menu.addItem((item) => 190 | item 191 | .setSection('action') 192 | .setTitle('Open in new tab') 193 | .setIcon('file-plus') 194 | .onClick(() => { 195 | this.focusFile(currentFile, 'tab'); 196 | }), 197 | ); 198 | const file = this.app.vault.getAbstractFileByPath(currentFile?.path); 199 | this.app.workspace.trigger( 200 | 'file-menu', 201 | menu, 202 | file, 203 | 'link-context-menu', 204 | ); 205 | menu.showAtPosition({ x: event.clientX, y: event.clientY }); 206 | }); 207 | 208 | navFileTitle.addEventListener('click', (event: MouseEvent) => { 209 | if (!currentFile) return; 210 | 211 | const newLeaf = Keymap.isModEvent(event); 212 | this.focusFile(currentFile, newLeaf); 213 | }); 214 | 215 | navFileTitleContent.addEventListener('mousedown', (event: MouseEvent) => { 216 | if (!currentFile) return; 217 | 218 | if (event.button === 1) { 219 | event.preventDefault(); 220 | this.focusFile(currentFile, 'tab'); 221 | } 222 | }); 223 | 224 | const navFileDelete = navFileTitle.createDiv({ 225 | cls: 'recent-files-file-delete menu-item-icon', 226 | }); 227 | setIcon(navFileDelete, 'lucide-x'); 228 | navFileDelete.addEventListener('click', async (event) => { 229 | event.stopPropagation(); 230 | 231 | await this.removeFile(currentFile); 232 | this.redraw(); 233 | }); 234 | }); 235 | 236 | this.contentEl.setChildrenInPlace([rootEl]); 237 | }; 238 | 239 | private readonly removeFile = async (file: FilePath): Promise => { 240 | this.data.recentFiles = this.data.recentFiles.filter( 241 | (currFile) => currFile.path !== file.path, 242 | ); 243 | await this.plugin.saveData(); 244 | }; 245 | 246 | /** 247 | * Open the provided file in the most recent leaf. 248 | * 249 | * @param shouldSplit Whether the file should be opened in a new split, or in 250 | * the most recent split. If the most recent split is pinned, this is set to 251 | * true. 252 | */ 253 | private readonly focusFile = (file: FilePath, newLeaf: boolean | PaneType): void => { 254 | const targetFile = this.app.vault 255 | .getFiles() 256 | .find((f) => f.path === file.path); 257 | 258 | if (targetFile) { 259 | const leaf = this.app.workspace.getLeaf(newLeaf); 260 | leaf.openFile(targetFile); 261 | } else { 262 | new Notice('Cannot find a file with that name'); 263 | this.data.recentFiles = this.data.recentFiles.filter( 264 | (fp) => fp.path !== file.path, 265 | ); 266 | this.plugin.saveData(); 267 | this.redraw(); 268 | } 269 | }; 270 | } 271 | 272 | export default class RecentFilesPlugin extends Plugin { 273 | public data: RecentFilesData; 274 | public view: RecentFilesListView | undefined; 275 | 276 | public async onload(): Promise { 277 | console.log('Recent Files: Loading plugin v' + this.manifest.version); 278 | 279 | await this.loadData(); 280 | 281 | addIcon('sweep', sweepIcon); 282 | 283 | this.registerView( 284 | RecentFilesListViewType, 285 | (leaf) => (this.view = new RecentFilesListView(leaf, this, this.data)), 286 | ); 287 | 288 | this.addCommand({ 289 | id: 'recent-files-open', 290 | name: 'Open', 291 | callback: async () => { 292 | let leaf: WorkspaceLeaf | null; 293 | [leaf] = this.app.workspace.getLeavesOfType( 294 | RecentFilesListViewType, 295 | ); 296 | if (!leaf) { 297 | leaf = this.app.workspace.getLeftLeaf(false); 298 | await leaf?.setViewState({ type: RecentFilesListViewType }); 299 | } 300 | 301 | if (leaf) { 302 | this.app.workspace.revealLeaf(leaf); 303 | } 304 | }, 305 | }); 306 | 307 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 308 | (this.app.workspace as any).registerHoverLinkSource( 309 | RecentFilesListViewType, 310 | { 311 | display: 'Recent Files', 312 | defaultMod: true, 313 | }, 314 | ); 315 | 316 | this.registerEvent(this.app.vault.on('rename', this.handleRename)); 317 | this.registerEvent(this.app.vault.on('delete', this.handleDelete)); 318 | this.registerEvent(this.app.workspace.on('file-open', this.onFileOpen)); 319 | 320 | this.addSettingTab(new RecentFilesSettingTab(this.app, this)); 321 | } 322 | 323 | public onunload(): void { 324 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 325 | (this.app.workspace as any).unregisterHoverLinkSource( 326 | RecentFilesListViewType, 327 | ); 328 | } 329 | 330 | public async loadData(): Promise { 331 | this.data = Object.assign(DEFAULT_DATA, await super.loadData()); 332 | } 333 | 334 | public async saveData(): Promise { 335 | await super.saveData(this.data); 336 | } 337 | 338 | public async onExternalSettingsChange(): Promise { 339 | await this.loadData(); 340 | await this.pruneLength(); 341 | await this.pruneOmittedFiles(); 342 | this.view?.redraw(); 343 | } 344 | 345 | public readonly pruneOmittedFiles = async (): Promise => { 346 | const lengthBefore = this.data.recentFiles.length; 347 | this.data.recentFiles = this.data.recentFiles.filter(this.shouldAddFile); 348 | if (lengthBefore !== this.data.recentFiles.length) { 349 | await this.saveData(); 350 | } 351 | }; 352 | 353 | public readonly pruneLength = async (): Promise => { 354 | const toRemove = 355 | this.data.recentFiles.length - (this.data.maxLength || defaultMaxLength); 356 | if (toRemove > 0) { 357 | this.data.recentFiles.splice( 358 | this.data.recentFiles.length - toRemove, 359 | toRemove, 360 | ); 361 | } 362 | await this.saveData(); 363 | }; 364 | 365 | public readonly shouldAddFile = (file: FilePath): boolean => { 366 | // Matches for ignored Paths 367 | const patterns: string[] = this.data.omittedPaths.filter( 368 | (path) => path.length > 0, 369 | ); 370 | const fileMatchesRegex = (pattern: string): boolean => { 371 | try { 372 | return new RegExp(pattern).test(file.path); 373 | } catch (err) { 374 | console.error('Recent Files: Invalid regex pattern: ' + pattern); 375 | return false; 376 | } 377 | }; 378 | 379 | if (patterns.some(fileMatchesRegex)) { 380 | return false; 381 | } 382 | 383 | // Matches for ignored Tags 384 | const tfile = this.app.vault.getFileByPath(file.path); 385 | if (tfile) { 386 | const omittedTags: string[] = this.data.omittedTags.filter( 387 | (tag) => tag.length > 0, 388 | ); 389 | 390 | /* 391 | Tag(s) may be rendered in one of two ways. If only one tag is 392 | present, as a string: 393 | ```yaml 394 | tags: tag1 395 | ``` 396 | 397 | or, if one or more tags are present, in an array: 398 | ```yaml 399 | tags: 400 | - tag1 401 | - journal/tag2 402 | ``` 403 | 404 | If there are no tags, the `frontmatter.tags` array is empty. 405 | */ 406 | const fileTags: string | string[] = this.app.metadataCache.getFileCache(tfile)?.frontmatter?.tags; 407 | 408 | /* 409 | Calling toString() here will flatten an array, or return the string. 410 | i.e., ["tag1", "journal/tag2"] will become "tag1,journal/tag2" 411 | 412 | Thus, permitting a normal regex match. 413 | 414 | Though undocumented, passing an array into RegExp.test() works as it is 415 | coerced it into a string as described. 416 | */ 417 | const tagMatchesRegex = (pattern: string): boolean => { 418 | try { 419 | return new RegExp(pattern).test(fileTags.toString()); 420 | } catch (err) { 421 | console.error('Recent Files: Invalid regex pattern: ' + pattern); 422 | return false; 423 | } 424 | }; 425 | 426 | if (omittedTags.some(tagMatchesRegex)) { 427 | return false; 428 | } 429 | } 430 | 431 | // Matches for Bookmarks 432 | // @ts-ignore 433 | const bookmarksPlugin = this.app.internalPlugins.getEnabledPluginById('bookmarks'); 434 | if (tfile && this.data.omitBookmarks && bookmarksPlugin) { 435 | const bookmarkedFiles: BookmarkedFile[] = bookmarksPlugin.items; 436 | if (bookmarkedFiles.some(({ path }) => path === tfile.path)) { 437 | return false; 438 | } 439 | } 440 | 441 | return true; 442 | }; 443 | 444 | public onUserEnable(): void { 445 | // Open our view automatically only when the plugin is first enabled. 446 | this.app.workspace.ensureSideLeaf(RecentFilesListViewType, 'left', { reveal: true }); 447 | } 448 | 449 | private readonly update = async (openedFile: TFile): Promise => { 450 | if (!openedFile) { 451 | return; 452 | } 453 | 454 | await this.updateData(openedFile); 455 | 456 | // Update the view if there is one. 457 | const leaf = this.app.workspace.getLeavesOfType(RecentFilesListViewType).first(); 458 | if (leaf && leaf.view instanceof RecentFilesListView) { 459 | leaf.view.redraw(); 460 | } 461 | }; 462 | 463 | private readonly onFileOpen = async (openedFile: TFile): Promise => { 464 | if (!openedFile) { 465 | return; 466 | } 467 | if (this.data.updateOn === 'file-edit') { 468 | this.app.workspace.off('quick-preview', this.waitingForEdit); 469 | this.registerEvent(this.app.workspace.on('quick-preview', this.waitingForEdit)) 470 | } else { 471 | this.update(openedFile); 472 | } 473 | // Update the view if there is one. 474 | // We redraw the leaf to handle active file highlighting. 475 | const leaf = this.app.workspace.getLeavesOfType(RecentFilesListViewType).first(); 476 | if (leaf && leaf.view instanceof RecentFilesListView) { 477 | leaf.view.redraw(); 478 | } 479 | } 480 | 481 | private readonly waitingForEdit = async (editedFile: TFile, data: string): Promise => { 482 | this.update(editedFile); 483 | this.app.workspace.off('quick-preview', this.waitingForEdit); 484 | } 485 | 486 | private readonly updateData = async (file: TFile): Promise => { 487 | const lengthBefore = this.data.recentFiles.length; 488 | this.data.recentFiles = this.data.recentFiles.filter( 489 | (currFile) => currFile.path !== file.path, 490 | ); 491 | let needsSave = lengthBefore !== this.data.recentFiles.length; 492 | 493 | if (this.shouldAddFile(file)) { 494 | this.data.recentFiles.unshift({ 495 | basename: file.basename, 496 | path: file.path, 497 | }); 498 | needsSave = true; 499 | } 500 | 501 | if (needsSave) { 502 | await this.pruneLength(); // Handles the save 503 | } 504 | }; 505 | 506 | private readonly handleRename = async ( 507 | file: TAbstractFile, 508 | oldPath: string, 509 | ): Promise => { 510 | 511 | const entry = this.data.recentFiles.find( 512 | (recentFile) => recentFile.path === oldPath, 513 | ); 514 | if (entry) { 515 | entry.path = file.path; 516 | entry.basename = this.trimExtension(file.name); 517 | this.view?.redraw(); 518 | await this.saveData(); 519 | } 520 | }; 521 | 522 | private readonly handleDelete = async ( 523 | file: TAbstractFile, 524 | ): Promise => { 525 | const beforeLen = this.data.recentFiles.length; 526 | this.data.recentFiles = this.data.recentFiles.filter( 527 | (recentFile) => recentFile.path !== file.path, 528 | ); 529 | 530 | if (beforeLen !== this.data.recentFiles.length) { 531 | this.view?.redraw(); 532 | await this.saveData(); 533 | } 534 | }; 535 | 536 | // trimExtension can be used to turn a filename into a basename when 537 | // interacting with a TAbstractFile that does not have a basename property. 538 | // private readonly trimExtension = (name: string): string => name.split('.')[0]; 539 | // from: https://stackoverflow.com/a/4250408/617864 540 | private readonly trimExtension = (name: string): string => 541 | name.replace(/\.[^/.]+$/, ''); 542 | } 543 | 544 | class RecentFilesSettingTab extends PluginSettingTab { 545 | private readonly plugin: RecentFilesPlugin; 546 | 547 | constructor(app: App, plugin: RecentFilesPlugin) { 548 | super(app, plugin); 549 | this.plugin = plugin; 550 | } 551 | 552 | public display(): void { 553 | const { containerEl } = this; 554 | containerEl.empty(); 555 | 556 | const patternFragment = document.createDocumentFragment(); 557 | const link = document.createElement('a'); 558 | link.href = 559 | 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#writing_a_regular_expression_pattern'; 560 | link.text = 'MDN - Regular expressions'; 561 | patternFragment.append('RegExp patterns to ignore. One pattern per line. See '); 562 | patternFragment.append(link); 563 | patternFragment.append(' for help.'); 564 | 565 | new Setting(containerEl) 566 | .setName('Omitted pathname patterns') 567 | .setDesc(patternFragment) 568 | .addTextArea((textArea) => { 569 | textArea.inputEl.setAttr('rows', 6); 570 | textArea 571 | .setPlaceholder('^daily/\n\\.png$\nfoobar.*baz') 572 | .setValue(this.plugin.data.omittedPaths.join('\n')); 573 | textArea.inputEl.onblur = (e: FocusEvent) => { 574 | const patterns = (e.target as HTMLInputElement).value; 575 | this.plugin.data.omittedPaths = patterns.split('\n'); 576 | this.plugin.pruneOmittedFiles(); 577 | this.plugin.view?.redraw(); 578 | }; 579 | }); 580 | 581 | 582 | const tagFragment = document.createDocumentFragment(); 583 | tagFragment.append('Frontmatter-tag patterns to ignore. One pattern' + 584 | ' per line.'); 585 | 586 | new Setting(containerEl) 587 | .setName('Omitted frontmatter-tag patterns') 588 | .setDesc(tagFragment) 589 | .addTextArea((textArea) => { 590 | textArea.inputEl.setAttr('rows', 6); 591 | textArea 592 | .setPlaceholder('ignore\narchive/a/b') 593 | .setValue(this.plugin.data.omittedTags.join('\n')); 594 | textArea.inputEl.onblur = (e: FocusEvent) => { 595 | const patterns = (e.target as HTMLInputElement).value; 596 | this.plugin.data.omittedTags = patterns.split('\n'); 597 | this.plugin.pruneOmittedFiles(); 598 | this.plugin.view?.redraw(); 599 | }; 600 | }); 601 | 602 | new Setting(containerEl) 603 | .setName('Omit bookmarked files') 604 | .addToggle((toggle) => { 605 | toggle 606 | .setValue(this.plugin.data.omitBookmarks) 607 | .onChange((value) => { 608 | this.plugin.data.omitBookmarks = value; 609 | this.plugin.pruneOmittedFiles(); 610 | this.plugin.view?.redraw(); 611 | }); 612 | }); 613 | 614 | new Setting(containerEl) 615 | .setName('Update list when file is:') 616 | .addDropdown((dropdown) => { 617 | dropdown 618 | .addOption('file-open', 'Opened') 619 | .addOption('file-edit', 'Changed') 620 | .setValue(this.plugin.data.updateOn) 621 | .onChange((value: 'file-edit' | 'file-open') => { 622 | this.plugin.data.updateOn = value; 623 | this.plugin.pruneOmittedFiles(); 624 | this.plugin.view?.redraw(); 625 | }); 626 | }); 627 | 628 | new Setting(containerEl) 629 | .setName('List length') 630 | .setDesc('Maximum number of filenames to keep in the list.') 631 | .addText((text) => { 632 | text.inputEl.setAttr('type', 'number'); 633 | text.inputEl.setAttr('placeholder', defaultMaxLength); 634 | text 635 | .setValue(this.plugin.data.maxLength?.toString() || '') 636 | .onChange((value) => { 637 | const parsed = parseInt(value, 10); 638 | if (!Number.isNaN(parsed) && parsed <= 0) { 639 | new Notice('List length must be a positive integer'); 640 | return; 641 | } 642 | }); 643 | text.inputEl.onblur = (e: FocusEvent) => { 644 | const maxfiles = (e.target as HTMLInputElement).value; 645 | const parsed = parseInt(maxfiles, 10); 646 | this.plugin.data.maxLength = parsed; 647 | this.plugin.pruneLength(); 648 | this.plugin.view?.redraw(); 649 | }; 650 | }); 651 | 652 | const div = containerEl.createEl('div', { 653 | cls: 'recent-files-donation', 654 | }); 655 | 656 | const donateText = document.createElement('p'); 657 | donateText.appendText( 658 | 'If this plugin adds value for you and you would like to help support ' + 659 | 'continued development, please use the buttons below:', 660 | ); 661 | div.appendChild(donateText); 662 | 663 | const parser = new DOMParser(); 664 | 665 | div.appendChild( 666 | createDonateButton( 667 | 'https://paypal.me/tgrosinger', 668 | parser.parseFromString(paypal, 'text/xml').documentElement, 669 | ), 670 | ); 671 | 672 | div.appendChild( 673 | createDonateButton( 674 | 'https://www.buymeacoffee.com/tgrosinger', 675 | parser.parseFromString(buyMeACoffee, 'text/xml').documentElement, 676 | ), 677 | ); 678 | } 679 | } 680 | 681 | const createDonateButton = (link: string, img: HTMLElement): HTMLElement => { 682 | const a = document.createElement('a'); 683 | a.setAttribute('href', link); 684 | a.addClass('recent-files-donate-button'); 685 | a.appendChild(img); 686 | return a; 687 | }; 688 | 689 | const sweepIcon = ` 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | `; 698 | 699 | const buyMeACoffee = ` 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | `; 722 | 723 | const paypal = ` 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | `; 732 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "recent-files-obsidian", 3 | "name": "Recent Files", 4 | "version": "1.7.4", 5 | "minAppVersion": "0.16.3", 6 | "description": "List files by most recently opened", 7 | "author": "Tony Grosinger", 8 | "authorUrl": "https://grosinger.net", 9 | "isDesktopOnly": false, 10 | "fundingUrl": { 11 | "Github Sponsor": "https://github.com/sponsors/tgrosinger", 12 | "Buy me a Coffee": "https://buymeacoffee.com/tgrosinger", 13 | "Paypal": "https://paypal.me/tgrosinger" 14 | }, 15 | "donation": "https://buymeacoffee.com/tgrosinger" 16 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "recent-files-obsidian", 3 | "version": "1.7.4", 4 | "description": "List files by most recently opened", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "node esbuild.config.mjs", 8 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", 9 | "eslint": "eslint . --ext .ts,.tsx --fix" 10 | }, 11 | "keywords": [], 12 | "author": "Tony Grosinger", 13 | "license": "GPL-3.0", 14 | "devDependencies": { 15 | "@types/node": "20.11.6", 16 | "@typescript-eslint/eslint-plugin": "6.19.1", 17 | "@typescript-eslint/parser": "6.19.1", 18 | "builtin-modules": "3.3.0", 19 | "esbuild": "0.21.3", 20 | "eslint": "8.56.0", 21 | "eslint-plugin-babel": "5.3.1", 22 | "eslint-plugin-import": "2.29.1", 23 | "eslint-plugin-jsdoc": "48.0.2", 24 | "eslint-plugin-prefer-arrow": "1.2.3", 25 | "eslint-plugin-simple-import-sort": "10.0.0", 26 | "front-matter-plugin-api-provider": "0.1.4-alpha", 27 | "obsidian": "https://github.com/obsidianmd/obsidian-api/archive/23947b58d372ea02225324308e31d36b4aa95869.tar.gz", 28 | "tslib": "2.6.2", 29 | "typescript": "5.3.3" 30 | } 31 | } -------------------------------------------------------------------------------- /resources/screenshots/sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tgrosinger/recent-files-obsidian/2de9bd92f9be2a0352619a1df9b200c325babb41/resources/screenshots/sidebar.png -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | .recent-files-file { 2 | .tree-item-spacer { 3 | flex-grow: 1; 4 | } 5 | } 6 | 7 | .recent-files-title { 8 | justify-content: flex-start; 9 | align-items: unset; 10 | } 11 | 12 | .recent-files-file-delete { 13 | justify-content: right; 14 | display: none; 15 | } 16 | 17 | .recent-files-title:hover .recent-files-file-delete { 18 | display: flex; 19 | cursor: var(--cursor); 20 | } 21 | 22 | .recent-files-file-delete:hover { 23 | color: var(--nav-item-color-hover); 24 | } 25 | 26 | .recent-files-donation { 27 | width: 70%; 28 | margin: 0 auto; 29 | text-align: center; 30 | } 31 | 32 | .recent-files-donate-button { 33 | margin: 10px; 34 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 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 | ] 20 | }, 21 | "include": [ 22 | "**/*.ts" 23 | ] 24 | } -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.6.0": "1.7.2", 3 | "1.5.0": "1.6.3", 4 | "1.3.9": "1.5.3", 5 | "1.3.6": "1.3.2", 6 | "1.3.4": "0.16.3", 7 | "1.0.0": "0.11.6", 8 | "0.1.0": "0.9.12" 9 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0": 11 | version "6.4.1" 12 | resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz" 13 | integrity sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A== 14 | 15 | "@codemirror/view@^6.0.0": 16 | version "6.33.0" 17 | resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.33.0.tgz" 18 | integrity sha512-AroaR3BvnjRW8fiZBalAaK+ZzB5usGgI014YKElYZvQdNH5ZIidHlO+cyf/2rWzyBFRkvG6VhiXeAEbC53P2YQ== 19 | dependencies: 20 | "@codemirror/state" "^6.4.0" 21 | style-mod "^4.1.0" 22 | w3c-keyname "^2.2.4" 23 | 24 | "@es-joy/jsdoccomment@~0.41.0": 25 | version "0.41.0" 26 | resolved "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz" 27 | integrity sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw== 28 | dependencies: 29 | comment-parser "1.4.1" 30 | esquery "^1.5.0" 31 | jsdoc-type-pratt-parser "~4.0.0" 32 | 33 | "@esbuild/linux-x64@0.21.3": 34 | version "0.21.3" 35 | resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.3.tgz" 36 | integrity sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ== 37 | 38 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 39 | version "4.4.0" 40 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" 41 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 42 | dependencies: 43 | eslint-visitor-keys "^3.3.0" 44 | 45 | "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": 46 | version "4.10.0" 47 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" 48 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== 49 | 50 | "@eslint/eslintrc@^2.1.4": 51 | version "2.1.4" 52 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" 53 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== 54 | dependencies: 55 | ajv "^6.12.4" 56 | debug "^4.3.2" 57 | espree "^9.6.0" 58 | globals "^13.19.0" 59 | ignore "^5.2.0" 60 | import-fresh "^3.2.1" 61 | js-yaml "^4.1.0" 62 | minimatch "^3.1.2" 63 | strip-json-comments "^3.1.1" 64 | 65 | "@eslint/js@8.56.0": 66 | version "8.56.0" 67 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz" 68 | integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== 69 | 70 | "@humanwhocodes/config-array@^0.11.13": 71 | version "0.11.14" 72 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" 73 | integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== 74 | dependencies: 75 | "@humanwhocodes/object-schema" "^2.0.2" 76 | debug "^4.3.1" 77 | minimatch "^3.0.5" 78 | 79 | "@humanwhocodes/module-importer@^1.0.1": 80 | version "1.0.1" 81 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 82 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 83 | 84 | "@humanwhocodes/object-schema@^2.0.2": 85 | version "2.0.2" 86 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" 87 | integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== 88 | 89 | "@nodelib/fs.scandir@2.1.5": 90 | version "2.1.5" 91 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 92 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 93 | dependencies: 94 | "@nodelib/fs.stat" "2.0.5" 95 | run-parallel "^1.1.9" 96 | 97 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 98 | version "2.0.5" 99 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 100 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 101 | 102 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 103 | version "1.2.8" 104 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 105 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 106 | dependencies: 107 | "@nodelib/fs.scandir" "2.1.5" 108 | fastq "^1.6.0" 109 | 110 | "@types/codemirror@5.60.8": 111 | version "5.60.8" 112 | resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz" 113 | integrity sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw== 114 | dependencies: 115 | "@types/tern" "*" 116 | 117 | "@types/estree@*": 118 | version "0.0.39" 119 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" 120 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 121 | 122 | "@types/json-schema@^7.0.12": 123 | version "7.0.15" 124 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" 125 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 126 | 127 | "@types/json5@^0.0.29": 128 | version "0.0.29" 129 | resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 130 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 131 | 132 | "@types/node@20.11.6": 133 | version "20.11.6" 134 | resolved "https://registry.npmjs.org/@types/node/-/node-20.11.6.tgz" 135 | integrity sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q== 136 | dependencies: 137 | undici-types "~5.26.4" 138 | 139 | "@types/semver@^7.5.0": 140 | version "7.5.6" 141 | resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz" 142 | integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== 143 | 144 | "@types/tern@*": 145 | version "0.23.9" 146 | resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz" 147 | integrity sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw== 148 | dependencies: 149 | "@types/estree" "*" 150 | 151 | "@typescript-eslint/eslint-plugin@6.19.1": 152 | version "6.19.1" 153 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz" 154 | integrity sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg== 155 | dependencies: 156 | "@eslint-community/regexpp" "^4.5.1" 157 | "@typescript-eslint/scope-manager" "6.19.1" 158 | "@typescript-eslint/type-utils" "6.19.1" 159 | "@typescript-eslint/utils" "6.19.1" 160 | "@typescript-eslint/visitor-keys" "6.19.1" 161 | debug "^4.3.4" 162 | graphemer "^1.4.0" 163 | ignore "^5.2.4" 164 | natural-compare "^1.4.0" 165 | semver "^7.5.4" 166 | ts-api-utils "^1.0.1" 167 | 168 | "@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@6.19.1": 169 | version "6.19.1" 170 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz" 171 | integrity sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ== 172 | dependencies: 173 | "@typescript-eslint/scope-manager" "6.19.1" 174 | "@typescript-eslint/types" "6.19.1" 175 | "@typescript-eslint/typescript-estree" "6.19.1" 176 | "@typescript-eslint/visitor-keys" "6.19.1" 177 | debug "^4.3.4" 178 | 179 | "@typescript-eslint/scope-manager@6.19.1": 180 | version "6.19.1" 181 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz" 182 | integrity sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w== 183 | dependencies: 184 | "@typescript-eslint/types" "6.19.1" 185 | "@typescript-eslint/visitor-keys" "6.19.1" 186 | 187 | "@typescript-eslint/type-utils@6.19.1": 188 | version "6.19.1" 189 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz" 190 | integrity sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg== 191 | dependencies: 192 | "@typescript-eslint/typescript-estree" "6.19.1" 193 | "@typescript-eslint/utils" "6.19.1" 194 | debug "^4.3.4" 195 | ts-api-utils "^1.0.1" 196 | 197 | "@typescript-eslint/types@6.19.1": 198 | version "6.19.1" 199 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz" 200 | integrity sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg== 201 | 202 | "@typescript-eslint/typescript-estree@6.19.1": 203 | version "6.19.1" 204 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz" 205 | integrity sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA== 206 | dependencies: 207 | "@typescript-eslint/types" "6.19.1" 208 | "@typescript-eslint/visitor-keys" "6.19.1" 209 | debug "^4.3.4" 210 | globby "^11.1.0" 211 | is-glob "^4.0.3" 212 | minimatch "9.0.3" 213 | semver "^7.5.4" 214 | ts-api-utils "^1.0.1" 215 | 216 | "@typescript-eslint/utils@6.19.1": 217 | version "6.19.1" 218 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz" 219 | integrity sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w== 220 | dependencies: 221 | "@eslint-community/eslint-utils" "^4.4.0" 222 | "@types/json-schema" "^7.0.12" 223 | "@types/semver" "^7.5.0" 224 | "@typescript-eslint/scope-manager" "6.19.1" 225 | "@typescript-eslint/types" "6.19.1" 226 | "@typescript-eslint/typescript-estree" "6.19.1" 227 | semver "^7.5.4" 228 | 229 | "@typescript-eslint/visitor-keys@6.19.1": 230 | version "6.19.1" 231 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz" 232 | integrity sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ== 233 | dependencies: 234 | "@typescript-eslint/types" "6.19.1" 235 | eslint-visitor-keys "^3.4.1" 236 | 237 | "@ungap/structured-clone@^1.2.0": 238 | version "1.2.0" 239 | resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" 240 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 241 | 242 | acorn-jsx@^5.3.2: 243 | version "5.3.2" 244 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 245 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 246 | 247 | "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: 248 | version "8.11.3" 249 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" 250 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== 251 | 252 | ajv@^6.12.4: 253 | version "6.12.6" 254 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 255 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 256 | dependencies: 257 | fast-deep-equal "^3.1.1" 258 | fast-json-stable-stringify "^2.0.0" 259 | json-schema-traverse "^0.4.1" 260 | uri-js "^4.2.2" 261 | 262 | ansi-regex@^5.0.1: 263 | version "5.0.1" 264 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 265 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 266 | 267 | ansi-styles@^4.1.0: 268 | version "4.3.0" 269 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 270 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 271 | dependencies: 272 | color-convert "^2.0.1" 273 | 274 | are-docs-informative@^0.0.2: 275 | version "0.0.2" 276 | resolved "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz" 277 | integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== 278 | 279 | argparse@^2.0.1: 280 | version "2.0.1" 281 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 282 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 283 | 284 | array-buffer-byte-length@^1.0.0: 285 | version "1.0.0" 286 | resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" 287 | integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== 288 | dependencies: 289 | call-bind "^1.0.2" 290 | is-array-buffer "^3.0.1" 291 | 292 | array-includes@^3.1.7: 293 | version "3.1.7" 294 | resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz" 295 | integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== 296 | dependencies: 297 | call-bind "^1.0.2" 298 | define-properties "^1.2.0" 299 | es-abstract "^1.22.1" 300 | get-intrinsic "^1.2.1" 301 | is-string "^1.0.7" 302 | 303 | array-union@^2.1.0: 304 | version "2.1.0" 305 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 306 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 307 | 308 | array.prototype.findlastindex@^1.2.3: 309 | version "1.2.3" 310 | resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz" 311 | integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== 312 | dependencies: 313 | call-bind "^1.0.2" 314 | define-properties "^1.2.0" 315 | es-abstract "^1.22.1" 316 | es-shim-unscopables "^1.0.0" 317 | get-intrinsic "^1.2.1" 318 | 319 | array.prototype.flat@^1.3.2: 320 | version "1.3.2" 321 | resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" 322 | integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== 323 | dependencies: 324 | call-bind "^1.0.2" 325 | define-properties "^1.2.0" 326 | es-abstract "^1.22.1" 327 | es-shim-unscopables "^1.0.0" 328 | 329 | array.prototype.flatmap@^1.3.2: 330 | version "1.3.2" 331 | resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" 332 | integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== 333 | dependencies: 334 | call-bind "^1.0.2" 335 | define-properties "^1.2.0" 336 | es-abstract "^1.22.1" 337 | es-shim-unscopables "^1.0.0" 338 | 339 | arraybuffer.prototype.slice@^1.0.2: 340 | version "1.0.2" 341 | resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" 342 | integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== 343 | dependencies: 344 | array-buffer-byte-length "^1.0.0" 345 | call-bind "^1.0.2" 346 | define-properties "^1.2.0" 347 | es-abstract "^1.22.1" 348 | get-intrinsic "^1.2.1" 349 | is-array-buffer "^3.0.2" 350 | is-shared-array-buffer "^1.0.2" 351 | 352 | available-typed-arrays@^1.0.5: 353 | version "1.0.5" 354 | resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" 355 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 356 | 357 | balanced-match@^1.0.0: 358 | version "1.0.2" 359 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 360 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 361 | 362 | brace-expansion@^1.1.7: 363 | version "1.1.11" 364 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 365 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 366 | dependencies: 367 | balanced-match "^1.0.0" 368 | concat-map "0.0.1" 369 | 370 | brace-expansion@^2.0.1: 371 | version "2.0.1" 372 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" 373 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 374 | dependencies: 375 | balanced-match "^1.0.0" 376 | 377 | braces@^3.0.2: 378 | version "3.0.2" 379 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 380 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 381 | dependencies: 382 | fill-range "^7.0.1" 383 | 384 | builtin-modules@^3.3.0, builtin-modules@3.3.0: 385 | version "3.3.0" 386 | resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" 387 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 388 | 389 | call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: 390 | version "1.0.5" 391 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" 392 | integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== 393 | dependencies: 394 | function-bind "^1.1.2" 395 | get-intrinsic "^1.2.1" 396 | set-function-length "^1.1.1" 397 | 398 | callsites@^3.0.0: 399 | version "3.1.0" 400 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 401 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 402 | 403 | chalk@^4.0.0: 404 | version "4.1.2" 405 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 406 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 407 | dependencies: 408 | ansi-styles "^4.1.0" 409 | supports-color "^7.1.0" 410 | 411 | color-convert@^2.0.1: 412 | version "2.0.1" 413 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 414 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 415 | dependencies: 416 | color-name "~1.1.4" 417 | 418 | color-name@~1.1.4: 419 | version "1.1.4" 420 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 421 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 422 | 423 | comment-parser@1.4.1: 424 | version "1.4.1" 425 | resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz" 426 | integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== 427 | 428 | concat-map@0.0.1: 429 | version "0.0.1" 430 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 431 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 432 | 433 | cross-spawn@^7.0.2: 434 | version "7.0.3" 435 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 436 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 437 | dependencies: 438 | path-key "^3.1.0" 439 | shebang-command "^2.0.0" 440 | which "^2.0.1" 441 | 442 | debug@^3.2.7: 443 | version "3.2.7" 444 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" 445 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 446 | dependencies: 447 | ms "^2.1.1" 448 | 449 | debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: 450 | version "4.3.4" 451 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 452 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 453 | dependencies: 454 | ms "2.1.2" 455 | 456 | deep-is@^0.1.3: 457 | version "0.1.4" 458 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 459 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 460 | 461 | define-data-property@^1.0.1, define-data-property@^1.1.1: 462 | version "1.1.1" 463 | resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" 464 | integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== 465 | dependencies: 466 | get-intrinsic "^1.2.1" 467 | gopd "^1.0.1" 468 | has-property-descriptors "^1.0.0" 469 | 470 | define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: 471 | version "1.2.1" 472 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" 473 | integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== 474 | dependencies: 475 | define-data-property "^1.0.1" 476 | has-property-descriptors "^1.0.0" 477 | object-keys "^1.1.1" 478 | 479 | dir-glob@^3.0.1: 480 | version "3.0.1" 481 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 482 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 483 | dependencies: 484 | path-type "^4.0.0" 485 | 486 | doctrine@^2.1.0: 487 | version "2.1.0" 488 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" 489 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 490 | dependencies: 491 | esutils "^2.0.2" 492 | 493 | doctrine@^3.0.0: 494 | version "3.0.0" 495 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 496 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 497 | dependencies: 498 | esutils "^2.0.2" 499 | 500 | es-abstract@^1.22.1: 501 | version "1.22.3" 502 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" 503 | integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== 504 | dependencies: 505 | array-buffer-byte-length "^1.0.0" 506 | arraybuffer.prototype.slice "^1.0.2" 507 | available-typed-arrays "^1.0.5" 508 | call-bind "^1.0.5" 509 | es-set-tostringtag "^2.0.1" 510 | es-to-primitive "^1.2.1" 511 | function.prototype.name "^1.1.6" 512 | get-intrinsic "^1.2.2" 513 | get-symbol-description "^1.0.0" 514 | globalthis "^1.0.3" 515 | gopd "^1.0.1" 516 | has-property-descriptors "^1.0.0" 517 | has-proto "^1.0.1" 518 | has-symbols "^1.0.3" 519 | hasown "^2.0.0" 520 | internal-slot "^1.0.5" 521 | is-array-buffer "^3.0.2" 522 | is-callable "^1.2.7" 523 | is-negative-zero "^2.0.2" 524 | is-regex "^1.1.4" 525 | is-shared-array-buffer "^1.0.2" 526 | is-string "^1.0.7" 527 | is-typed-array "^1.1.12" 528 | is-weakref "^1.0.2" 529 | object-inspect "^1.13.1" 530 | object-keys "^1.1.1" 531 | object.assign "^4.1.4" 532 | regexp.prototype.flags "^1.5.1" 533 | safe-array-concat "^1.0.1" 534 | safe-regex-test "^1.0.0" 535 | string.prototype.trim "^1.2.8" 536 | string.prototype.trimend "^1.0.7" 537 | string.prototype.trimstart "^1.0.7" 538 | typed-array-buffer "^1.0.0" 539 | typed-array-byte-length "^1.0.0" 540 | typed-array-byte-offset "^1.0.0" 541 | typed-array-length "^1.0.4" 542 | unbox-primitive "^1.0.2" 543 | which-typed-array "^1.1.13" 544 | 545 | es-set-tostringtag@^2.0.1: 546 | version "2.0.2" 547 | resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" 548 | integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== 549 | dependencies: 550 | get-intrinsic "^1.2.2" 551 | has-tostringtag "^1.0.0" 552 | hasown "^2.0.0" 553 | 554 | es-shim-unscopables@^1.0.0: 555 | version "1.0.2" 556 | resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" 557 | integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== 558 | dependencies: 559 | hasown "^2.0.0" 560 | 561 | es-to-primitive@^1.2.1: 562 | version "1.2.1" 563 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 564 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 565 | dependencies: 566 | is-callable "^1.1.4" 567 | is-date-object "^1.0.1" 568 | is-symbol "^1.0.2" 569 | 570 | esbuild@0.21.3: 571 | version "0.21.3" 572 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.3.tgz" 573 | integrity sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw== 574 | optionalDependencies: 575 | "@esbuild/aix-ppc64" "0.21.3" 576 | "@esbuild/android-arm" "0.21.3" 577 | "@esbuild/android-arm64" "0.21.3" 578 | "@esbuild/android-x64" "0.21.3" 579 | "@esbuild/darwin-arm64" "0.21.3" 580 | "@esbuild/darwin-x64" "0.21.3" 581 | "@esbuild/freebsd-arm64" "0.21.3" 582 | "@esbuild/freebsd-x64" "0.21.3" 583 | "@esbuild/linux-arm" "0.21.3" 584 | "@esbuild/linux-arm64" "0.21.3" 585 | "@esbuild/linux-ia32" "0.21.3" 586 | "@esbuild/linux-loong64" "0.21.3" 587 | "@esbuild/linux-mips64el" "0.21.3" 588 | "@esbuild/linux-ppc64" "0.21.3" 589 | "@esbuild/linux-riscv64" "0.21.3" 590 | "@esbuild/linux-s390x" "0.21.3" 591 | "@esbuild/linux-x64" "0.21.3" 592 | "@esbuild/netbsd-x64" "0.21.3" 593 | "@esbuild/openbsd-x64" "0.21.3" 594 | "@esbuild/sunos-x64" "0.21.3" 595 | "@esbuild/win32-arm64" "0.21.3" 596 | "@esbuild/win32-ia32" "0.21.3" 597 | "@esbuild/win32-x64" "0.21.3" 598 | 599 | escape-string-regexp@^4.0.0: 600 | version "4.0.0" 601 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 602 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 603 | 604 | eslint-import-resolver-node@^0.3.9: 605 | version "0.3.9" 606 | resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" 607 | integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== 608 | dependencies: 609 | debug "^3.2.7" 610 | is-core-module "^2.13.0" 611 | resolve "^1.22.4" 612 | 613 | eslint-module-utils@^2.8.0: 614 | version "2.8.0" 615 | resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" 616 | integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== 617 | dependencies: 618 | debug "^3.2.7" 619 | 620 | eslint-plugin-babel@5.3.1: 621 | version "5.3.1" 622 | resolved "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz" 623 | integrity sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g== 624 | dependencies: 625 | eslint-rule-composer "^0.3.0" 626 | 627 | eslint-plugin-import@2.29.1: 628 | version "2.29.1" 629 | resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" 630 | integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== 631 | dependencies: 632 | array-includes "^3.1.7" 633 | array.prototype.findlastindex "^1.2.3" 634 | array.prototype.flat "^1.3.2" 635 | array.prototype.flatmap "^1.3.2" 636 | debug "^3.2.7" 637 | doctrine "^2.1.0" 638 | eslint-import-resolver-node "^0.3.9" 639 | eslint-module-utils "^2.8.0" 640 | hasown "^2.0.0" 641 | is-core-module "^2.13.1" 642 | is-glob "^4.0.3" 643 | minimatch "^3.1.2" 644 | object.fromentries "^2.0.7" 645 | object.groupby "^1.0.1" 646 | object.values "^1.1.7" 647 | semver "^6.3.1" 648 | tsconfig-paths "^3.15.0" 649 | 650 | eslint-plugin-jsdoc@48.0.2: 651 | version "48.0.2" 652 | resolved "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.0.2.tgz" 653 | integrity sha512-CBFl5Jc7+jlV36RwDm+PQ8Uw5r28pn2/uW/OaB+Gw5bFwn4Py/1eYMZ3hGf9S4meUFZ/sRvS+hVif2mRAp6WqQ== 654 | dependencies: 655 | "@es-joy/jsdoccomment" "~0.41.0" 656 | are-docs-informative "^0.0.2" 657 | comment-parser "1.4.1" 658 | debug "^4.3.4" 659 | escape-string-regexp "^4.0.0" 660 | esquery "^1.5.0" 661 | is-builtin-module "^3.2.1" 662 | semver "^7.5.4" 663 | spdx-expression-parse "^4.0.0" 664 | 665 | eslint-plugin-prefer-arrow@1.2.3: 666 | version "1.2.3" 667 | resolved "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz" 668 | integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== 669 | 670 | eslint-plugin-simple-import-sort@10.0.0: 671 | version "10.0.0" 672 | resolved "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz" 673 | integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== 674 | 675 | eslint-rule-composer@^0.3.0: 676 | version "0.3.0" 677 | resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" 678 | integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== 679 | 680 | eslint-scope@^7.2.2: 681 | version "7.2.2" 682 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" 683 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 684 | dependencies: 685 | esrecurse "^4.3.0" 686 | estraverse "^5.2.0" 687 | 688 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 689 | version "3.4.3" 690 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" 691 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 692 | 693 | "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0 || ^9.0.0", eslint@>=2.0.0, eslint@>=4.0.0, eslint@>=5.0.0, eslint@8.56.0: 694 | version "8.56.0" 695 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz" 696 | integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== 697 | dependencies: 698 | "@eslint-community/eslint-utils" "^4.2.0" 699 | "@eslint-community/regexpp" "^4.6.1" 700 | "@eslint/eslintrc" "^2.1.4" 701 | "@eslint/js" "8.56.0" 702 | "@humanwhocodes/config-array" "^0.11.13" 703 | "@humanwhocodes/module-importer" "^1.0.1" 704 | "@nodelib/fs.walk" "^1.2.8" 705 | "@ungap/structured-clone" "^1.2.0" 706 | ajv "^6.12.4" 707 | chalk "^4.0.0" 708 | cross-spawn "^7.0.2" 709 | debug "^4.3.2" 710 | doctrine "^3.0.0" 711 | escape-string-regexp "^4.0.0" 712 | eslint-scope "^7.2.2" 713 | eslint-visitor-keys "^3.4.3" 714 | espree "^9.6.1" 715 | esquery "^1.4.2" 716 | esutils "^2.0.2" 717 | fast-deep-equal "^3.1.3" 718 | file-entry-cache "^6.0.1" 719 | find-up "^5.0.0" 720 | glob-parent "^6.0.2" 721 | globals "^13.19.0" 722 | graphemer "^1.4.0" 723 | ignore "^5.2.0" 724 | imurmurhash "^0.1.4" 725 | is-glob "^4.0.0" 726 | is-path-inside "^3.0.3" 727 | js-yaml "^4.1.0" 728 | json-stable-stringify-without-jsonify "^1.0.1" 729 | levn "^0.4.1" 730 | lodash.merge "^4.6.2" 731 | minimatch "^3.1.2" 732 | natural-compare "^1.4.0" 733 | optionator "^0.9.3" 734 | strip-ansi "^6.0.1" 735 | text-table "^0.2.0" 736 | 737 | espree@^9.6.0, espree@^9.6.1: 738 | version "9.6.1" 739 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" 740 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 741 | dependencies: 742 | acorn "^8.9.0" 743 | acorn-jsx "^5.3.2" 744 | eslint-visitor-keys "^3.4.1" 745 | 746 | esquery@^1.4.2, esquery@^1.5.0: 747 | version "1.5.0" 748 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" 749 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 750 | dependencies: 751 | estraverse "^5.1.0" 752 | 753 | esrecurse@^4.3.0: 754 | version "4.3.0" 755 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 756 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 757 | dependencies: 758 | estraverse "^5.2.0" 759 | 760 | estraverse@^5.1.0, estraverse@^5.2.0: 761 | version "5.3.0" 762 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 763 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 764 | 765 | esutils@^2.0.2: 766 | version "2.0.3" 767 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 768 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 769 | 770 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 771 | version "3.1.3" 772 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 773 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 774 | 775 | fast-glob@^3.2.9: 776 | version "3.3.2" 777 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" 778 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 779 | dependencies: 780 | "@nodelib/fs.stat" "^2.0.2" 781 | "@nodelib/fs.walk" "^1.2.3" 782 | glob-parent "^5.1.2" 783 | merge2 "^1.3.0" 784 | micromatch "^4.0.4" 785 | 786 | fast-json-stable-stringify@^2.0.0: 787 | version "2.1.0" 788 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 789 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 790 | 791 | fast-levenshtein@^2.0.6: 792 | version "2.0.6" 793 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 794 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 795 | 796 | fastq@^1.6.0: 797 | version "1.16.0" 798 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz" 799 | integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== 800 | dependencies: 801 | reusify "^1.0.4" 802 | 803 | file-entry-cache@^6.0.1: 804 | version "6.0.1" 805 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 806 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 807 | dependencies: 808 | flat-cache "^3.0.4" 809 | 810 | fill-range@^7.0.1: 811 | version "7.0.1" 812 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 813 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 814 | dependencies: 815 | to-regex-range "^5.0.1" 816 | 817 | find-up@^5.0.0: 818 | version "5.0.0" 819 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 820 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 821 | dependencies: 822 | locate-path "^6.0.0" 823 | path-exists "^4.0.0" 824 | 825 | flat-cache@^3.0.4: 826 | version "3.2.0" 827 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" 828 | integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== 829 | dependencies: 830 | flatted "^3.2.9" 831 | keyv "^4.5.3" 832 | rimraf "^3.0.2" 833 | 834 | flatted@^3.2.9: 835 | version "3.2.9" 836 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" 837 | integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== 838 | 839 | for-each@^0.3.3: 840 | version "0.3.3" 841 | resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" 842 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 843 | dependencies: 844 | is-callable "^1.1.3" 845 | 846 | front-matter-plugin-api-provider@0.1.4-alpha: 847 | version "0.1.4-alpha" 848 | resolved "https://registry.npmjs.org/front-matter-plugin-api-provider/-/front-matter-plugin-api-provider-0.1.4-alpha.tgz" 849 | integrity sha512-amv+xSnxY1VUCtNu1y+mr2QZSDBAktiaP67G1CF6LOYnW11fctTKro75rAzDEjW5EkdDwnM5PvJjBHB+IMSYzw== 850 | dependencies: 851 | obsidian "^1.2.8" 852 | 853 | fs.realpath@^1.0.0: 854 | version "1.0.0" 855 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 856 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 857 | 858 | function-bind@^1.1.2: 859 | version "1.1.2" 860 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" 861 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 862 | 863 | function.prototype.name@^1.1.6: 864 | version "1.1.6" 865 | resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" 866 | integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== 867 | dependencies: 868 | call-bind "^1.0.2" 869 | define-properties "^1.2.0" 870 | es-abstract "^1.22.1" 871 | functions-have-names "^1.2.3" 872 | 873 | functions-have-names@^1.2.3: 874 | version "1.2.3" 875 | resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 876 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 877 | 878 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: 879 | version "1.2.2" 880 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" 881 | integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== 882 | dependencies: 883 | function-bind "^1.1.2" 884 | has-proto "^1.0.1" 885 | has-symbols "^1.0.3" 886 | hasown "^2.0.0" 887 | 888 | get-symbol-description@^1.0.0: 889 | version "1.0.0" 890 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 891 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 892 | dependencies: 893 | call-bind "^1.0.2" 894 | get-intrinsic "^1.1.1" 895 | 896 | glob-parent@^5.1.2: 897 | version "5.1.2" 898 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 899 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 900 | dependencies: 901 | is-glob "^4.0.1" 902 | 903 | glob-parent@^6.0.2: 904 | version "6.0.2" 905 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 906 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 907 | dependencies: 908 | is-glob "^4.0.3" 909 | 910 | glob@^7.1.3: 911 | version "7.2.3" 912 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 913 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 914 | dependencies: 915 | fs.realpath "^1.0.0" 916 | inflight "^1.0.4" 917 | inherits "2" 918 | minimatch "^3.1.1" 919 | once "^1.3.0" 920 | path-is-absolute "^1.0.0" 921 | 922 | globals@^13.19.0: 923 | version "13.24.0" 924 | resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" 925 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== 926 | dependencies: 927 | type-fest "^0.20.2" 928 | 929 | globalthis@^1.0.3: 930 | version "1.0.3" 931 | resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" 932 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== 933 | dependencies: 934 | define-properties "^1.1.3" 935 | 936 | globby@^11.1.0: 937 | version "11.1.0" 938 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 939 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 940 | dependencies: 941 | array-union "^2.1.0" 942 | dir-glob "^3.0.1" 943 | fast-glob "^3.2.9" 944 | ignore "^5.2.0" 945 | merge2 "^1.4.1" 946 | slash "^3.0.0" 947 | 948 | gopd@^1.0.1: 949 | version "1.0.1" 950 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" 951 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 952 | dependencies: 953 | get-intrinsic "^1.1.3" 954 | 955 | graphemer@^1.4.0: 956 | version "1.4.0" 957 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" 958 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 959 | 960 | has-bigints@^1.0.1, has-bigints@^1.0.2: 961 | version "1.0.2" 962 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 963 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 964 | 965 | has-flag@^4.0.0: 966 | version "4.0.0" 967 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 968 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 969 | 970 | has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: 971 | version "1.0.1" 972 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" 973 | integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== 974 | dependencies: 975 | get-intrinsic "^1.2.2" 976 | 977 | has-proto@^1.0.1: 978 | version "1.0.1" 979 | resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" 980 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 981 | 982 | has-symbols@^1.0.2, has-symbols@^1.0.3: 983 | version "1.0.3" 984 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 985 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 986 | 987 | has-tostringtag@^1.0.0: 988 | version "1.0.0" 989 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 990 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 991 | dependencies: 992 | has-symbols "^1.0.2" 993 | 994 | hasown@^2.0.0: 995 | version "2.0.0" 996 | resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" 997 | integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== 998 | dependencies: 999 | function-bind "^1.1.2" 1000 | 1001 | ignore@^5.2.0, ignore@^5.2.4: 1002 | version "5.3.0" 1003 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" 1004 | integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== 1005 | 1006 | import-fresh@^3.2.1: 1007 | version "3.3.0" 1008 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1009 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1010 | dependencies: 1011 | parent-module "^1.0.0" 1012 | resolve-from "^4.0.0" 1013 | 1014 | imurmurhash@^0.1.4: 1015 | version "0.1.4" 1016 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 1017 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1018 | 1019 | inflight@^1.0.4: 1020 | version "1.0.6" 1021 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 1022 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1023 | dependencies: 1024 | once "^1.3.0" 1025 | wrappy "1" 1026 | 1027 | inherits@2: 1028 | version "2.0.4" 1029 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1030 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1031 | 1032 | internal-slot@^1.0.5: 1033 | version "1.0.6" 1034 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" 1035 | integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== 1036 | dependencies: 1037 | get-intrinsic "^1.2.2" 1038 | hasown "^2.0.0" 1039 | side-channel "^1.0.4" 1040 | 1041 | is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: 1042 | version "3.0.2" 1043 | resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" 1044 | integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== 1045 | dependencies: 1046 | call-bind "^1.0.2" 1047 | get-intrinsic "^1.2.0" 1048 | is-typed-array "^1.1.10" 1049 | 1050 | is-bigint@^1.0.1: 1051 | version "1.0.4" 1052 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 1053 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1054 | dependencies: 1055 | has-bigints "^1.0.1" 1056 | 1057 | is-boolean-object@^1.1.0: 1058 | version "1.1.2" 1059 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 1060 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1061 | dependencies: 1062 | call-bind "^1.0.2" 1063 | has-tostringtag "^1.0.0" 1064 | 1065 | is-builtin-module@^3.2.1: 1066 | version "3.2.1" 1067 | resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz" 1068 | integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== 1069 | dependencies: 1070 | builtin-modules "^3.3.0" 1071 | 1072 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: 1073 | version "1.2.7" 1074 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" 1075 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1076 | 1077 | is-core-module@^2.13.0, is-core-module@^2.13.1: 1078 | version "2.13.1" 1079 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" 1080 | integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== 1081 | dependencies: 1082 | hasown "^2.0.0" 1083 | 1084 | is-date-object@^1.0.1: 1085 | version "1.0.5" 1086 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 1087 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1088 | dependencies: 1089 | has-tostringtag "^1.0.0" 1090 | 1091 | is-extglob@^2.1.1: 1092 | version "2.1.1" 1093 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1094 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1095 | 1096 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1097 | version "4.0.3" 1098 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1099 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1100 | dependencies: 1101 | is-extglob "^2.1.1" 1102 | 1103 | is-negative-zero@^2.0.2: 1104 | version "2.0.2" 1105 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 1106 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1107 | 1108 | is-number-object@^1.0.4: 1109 | version "1.0.7" 1110 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" 1111 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1112 | dependencies: 1113 | has-tostringtag "^1.0.0" 1114 | 1115 | is-number@^7.0.0: 1116 | version "7.0.0" 1117 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1118 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1119 | 1120 | is-path-inside@^3.0.3: 1121 | version "3.0.3" 1122 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 1123 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1124 | 1125 | is-regex@^1.1.4: 1126 | version "1.1.4" 1127 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 1128 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1129 | dependencies: 1130 | call-bind "^1.0.2" 1131 | has-tostringtag "^1.0.0" 1132 | 1133 | is-shared-array-buffer@^1.0.2: 1134 | version "1.0.2" 1135 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 1136 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1137 | dependencies: 1138 | call-bind "^1.0.2" 1139 | 1140 | is-string@^1.0.5, is-string@^1.0.7: 1141 | version "1.0.7" 1142 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 1143 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1144 | dependencies: 1145 | has-tostringtag "^1.0.0" 1146 | 1147 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1148 | version "1.0.4" 1149 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 1150 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1151 | dependencies: 1152 | has-symbols "^1.0.2" 1153 | 1154 | is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: 1155 | version "1.1.12" 1156 | resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" 1157 | integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== 1158 | dependencies: 1159 | which-typed-array "^1.1.11" 1160 | 1161 | is-weakref@^1.0.2: 1162 | version "1.0.2" 1163 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 1164 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1165 | dependencies: 1166 | call-bind "^1.0.2" 1167 | 1168 | isarray@^2.0.5: 1169 | version "2.0.5" 1170 | resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" 1171 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1172 | 1173 | isexe@^2.0.0: 1174 | version "2.0.0" 1175 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1176 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1177 | 1178 | js-yaml@^4.1.0: 1179 | version "4.1.0" 1180 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1181 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1182 | dependencies: 1183 | argparse "^2.0.1" 1184 | 1185 | jsdoc-type-pratt-parser@~4.0.0: 1186 | version "4.0.0" 1187 | resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz" 1188 | integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== 1189 | 1190 | json-buffer@3.0.1: 1191 | version "3.0.1" 1192 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" 1193 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1194 | 1195 | json-schema-traverse@^0.4.1: 1196 | version "0.4.1" 1197 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1198 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1199 | 1200 | json-stable-stringify-without-jsonify@^1.0.1: 1201 | version "1.0.1" 1202 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1203 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1204 | 1205 | json5@^1.0.2: 1206 | version "1.0.2" 1207 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" 1208 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 1209 | dependencies: 1210 | minimist "^1.2.0" 1211 | 1212 | keyv@^4.5.3: 1213 | version "4.5.4" 1214 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" 1215 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1216 | dependencies: 1217 | json-buffer "3.0.1" 1218 | 1219 | levn@^0.4.1: 1220 | version "0.4.1" 1221 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1222 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1223 | dependencies: 1224 | prelude-ls "^1.2.1" 1225 | type-check "~0.4.0" 1226 | 1227 | locate-path@^6.0.0: 1228 | version "6.0.0" 1229 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1230 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1231 | dependencies: 1232 | p-locate "^5.0.0" 1233 | 1234 | lodash.merge@^4.6.2: 1235 | version "4.6.2" 1236 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1237 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1238 | 1239 | lru-cache@^6.0.0: 1240 | version "6.0.0" 1241 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 1242 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1243 | dependencies: 1244 | yallist "^4.0.0" 1245 | 1246 | merge2@^1.3.0, merge2@^1.4.1: 1247 | version "1.4.1" 1248 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1249 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1250 | 1251 | micromatch@^4.0.4: 1252 | version "4.0.5" 1253 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" 1254 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1255 | dependencies: 1256 | braces "^3.0.2" 1257 | picomatch "^2.3.1" 1258 | 1259 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1260 | version "3.1.2" 1261 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1262 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1263 | dependencies: 1264 | brace-expansion "^1.1.7" 1265 | 1266 | minimatch@9.0.3: 1267 | version "9.0.3" 1268 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" 1269 | integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== 1270 | dependencies: 1271 | brace-expansion "^2.0.1" 1272 | 1273 | minimist@^1.2.0, minimist@^1.2.6: 1274 | version "1.2.8" 1275 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 1276 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1277 | 1278 | moment@2.29.4: 1279 | version "2.29.4" 1280 | resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" 1281 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 1282 | 1283 | ms@^2.1.1, ms@2.1.2: 1284 | version "2.1.2" 1285 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1286 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1287 | 1288 | natural-compare@^1.4.0: 1289 | version "1.4.0" 1290 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1291 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1292 | 1293 | object-inspect@^1.13.1, object-inspect@^1.9.0: 1294 | version "1.13.1" 1295 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" 1296 | integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== 1297 | 1298 | object-keys@^1.1.1: 1299 | version "1.1.1" 1300 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1301 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1302 | 1303 | object.assign@^4.1.4: 1304 | version "4.1.5" 1305 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" 1306 | integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== 1307 | dependencies: 1308 | call-bind "^1.0.5" 1309 | define-properties "^1.2.1" 1310 | has-symbols "^1.0.3" 1311 | object-keys "^1.1.1" 1312 | 1313 | object.fromentries@^2.0.7: 1314 | version "2.0.7" 1315 | resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz" 1316 | integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== 1317 | dependencies: 1318 | call-bind "^1.0.2" 1319 | define-properties "^1.2.0" 1320 | es-abstract "^1.22.1" 1321 | 1322 | object.groupby@^1.0.1: 1323 | version "1.0.1" 1324 | resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz" 1325 | integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== 1326 | dependencies: 1327 | call-bind "^1.0.2" 1328 | define-properties "^1.2.0" 1329 | es-abstract "^1.22.1" 1330 | get-intrinsic "^1.2.1" 1331 | 1332 | object.values@^1.1.7: 1333 | version "1.1.7" 1334 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" 1335 | integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== 1336 | dependencies: 1337 | call-bind "^1.0.2" 1338 | define-properties "^1.2.0" 1339 | es-abstract "^1.22.1" 1340 | 1341 | obsidian@^1.2.8, "obsidian@https://github.com/obsidianmd/obsidian-api/archive/23947b58d372ea02225324308e31d36b4aa95869.tar.gz": 1342 | version "1.7.2" 1343 | resolved "https://github.com/obsidianmd/obsidian-api/archive/23947b58d372ea02225324308e31d36b4aa95869.tar.gz" 1344 | integrity sha512-tCpXlJNBveJfL7G+rojZJywwxUKUsWOvgbky9fBWwaVVo7eE/bENkWsjqWazGxRU24rTA/M0HDOSo2bkBjKqMw== 1345 | dependencies: 1346 | "@types/codemirror" "5.60.8" 1347 | moment "2.29.4" 1348 | 1349 | once@^1.3.0: 1350 | version "1.4.0" 1351 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1352 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1353 | dependencies: 1354 | wrappy "1" 1355 | 1356 | optionator@^0.9.3: 1357 | version "0.9.3" 1358 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" 1359 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1360 | dependencies: 1361 | "@aashutoshrathi/word-wrap" "^1.2.3" 1362 | deep-is "^0.1.3" 1363 | fast-levenshtein "^2.0.6" 1364 | levn "^0.4.1" 1365 | prelude-ls "^1.2.1" 1366 | type-check "^0.4.0" 1367 | 1368 | p-limit@^3.0.2: 1369 | version "3.1.0" 1370 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 1371 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1372 | dependencies: 1373 | yocto-queue "^0.1.0" 1374 | 1375 | p-locate@^5.0.0: 1376 | version "5.0.0" 1377 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 1378 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1379 | dependencies: 1380 | p-limit "^3.0.2" 1381 | 1382 | parent-module@^1.0.0: 1383 | version "1.0.1" 1384 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1385 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1386 | dependencies: 1387 | callsites "^3.0.0" 1388 | 1389 | path-exists@^4.0.0: 1390 | version "4.0.0" 1391 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1392 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1393 | 1394 | path-is-absolute@^1.0.0: 1395 | version "1.0.1" 1396 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1397 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1398 | 1399 | path-key@^3.1.0: 1400 | version "3.1.1" 1401 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1402 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1403 | 1404 | path-parse@^1.0.7: 1405 | version "1.0.7" 1406 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1407 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1408 | 1409 | path-type@^4.0.0: 1410 | version "4.0.0" 1411 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1412 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1413 | 1414 | picomatch@^2.3.1: 1415 | version "2.3.1" 1416 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1417 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1418 | 1419 | prelude-ls@^1.2.1: 1420 | version "1.2.1" 1421 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1422 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1423 | 1424 | punycode@^2.1.0: 1425 | version "2.3.1" 1426 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" 1427 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1428 | 1429 | queue-microtask@^1.2.2: 1430 | version "1.2.3" 1431 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1432 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1433 | 1434 | regexp.prototype.flags@^1.5.1: 1435 | version "1.5.1" 1436 | resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" 1437 | integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== 1438 | dependencies: 1439 | call-bind "^1.0.2" 1440 | define-properties "^1.2.0" 1441 | set-function-name "^2.0.0" 1442 | 1443 | resolve-from@^4.0.0: 1444 | version "4.0.0" 1445 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1446 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1447 | 1448 | resolve@^1.22.4: 1449 | version "1.22.8" 1450 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" 1451 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== 1452 | dependencies: 1453 | is-core-module "^2.13.0" 1454 | path-parse "^1.0.7" 1455 | supports-preserve-symlinks-flag "^1.0.0" 1456 | 1457 | reusify@^1.0.4: 1458 | version "1.0.4" 1459 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1460 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1461 | 1462 | rimraf@^3.0.2: 1463 | version "3.0.2" 1464 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1465 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1466 | dependencies: 1467 | glob "^7.1.3" 1468 | 1469 | run-parallel@^1.1.9: 1470 | version "1.2.0" 1471 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1472 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1473 | dependencies: 1474 | queue-microtask "^1.2.2" 1475 | 1476 | safe-array-concat@^1.0.1: 1477 | version "1.1.0" 1478 | resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz" 1479 | integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== 1480 | dependencies: 1481 | call-bind "^1.0.5" 1482 | get-intrinsic "^1.2.2" 1483 | has-symbols "^1.0.3" 1484 | isarray "^2.0.5" 1485 | 1486 | safe-regex-test@^1.0.0: 1487 | version "1.0.2" 1488 | resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz" 1489 | integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== 1490 | dependencies: 1491 | call-bind "^1.0.5" 1492 | get-intrinsic "^1.2.2" 1493 | is-regex "^1.1.4" 1494 | 1495 | semver@^6.3.1: 1496 | version "6.3.1" 1497 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" 1498 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 1499 | 1500 | semver@^7.5.4: 1501 | version "7.5.4" 1502 | resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" 1503 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1504 | dependencies: 1505 | lru-cache "^6.0.0" 1506 | 1507 | set-function-length@^1.1.1: 1508 | version "1.2.0" 1509 | resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz" 1510 | integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== 1511 | dependencies: 1512 | define-data-property "^1.1.1" 1513 | function-bind "^1.1.2" 1514 | get-intrinsic "^1.2.2" 1515 | gopd "^1.0.1" 1516 | has-property-descriptors "^1.0.1" 1517 | 1518 | set-function-name@^2.0.0: 1519 | version "2.0.1" 1520 | resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" 1521 | integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== 1522 | dependencies: 1523 | define-data-property "^1.0.1" 1524 | functions-have-names "^1.2.3" 1525 | has-property-descriptors "^1.0.0" 1526 | 1527 | shebang-command@^2.0.0: 1528 | version "2.0.0" 1529 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1530 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1531 | dependencies: 1532 | shebang-regex "^3.0.0" 1533 | 1534 | shebang-regex@^3.0.0: 1535 | version "3.0.0" 1536 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1537 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1538 | 1539 | side-channel@^1.0.4: 1540 | version "1.0.4" 1541 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1542 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1543 | dependencies: 1544 | call-bind "^1.0.0" 1545 | get-intrinsic "^1.0.2" 1546 | object-inspect "^1.9.0" 1547 | 1548 | slash@^3.0.0: 1549 | version "3.0.0" 1550 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1551 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1552 | 1553 | spdx-exceptions@^2.1.0: 1554 | version "2.3.0" 1555 | resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" 1556 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1557 | 1558 | spdx-expression-parse@^4.0.0: 1559 | version "4.0.0" 1560 | resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz" 1561 | integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== 1562 | dependencies: 1563 | spdx-exceptions "^2.1.0" 1564 | spdx-license-ids "^3.0.0" 1565 | 1566 | spdx-license-ids@^3.0.0: 1567 | version "3.0.16" 1568 | resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" 1569 | integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== 1570 | 1571 | string.prototype.trim@^1.2.8: 1572 | version "1.2.8" 1573 | resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" 1574 | integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== 1575 | dependencies: 1576 | call-bind "^1.0.2" 1577 | define-properties "^1.2.0" 1578 | es-abstract "^1.22.1" 1579 | 1580 | string.prototype.trimend@^1.0.7: 1581 | version "1.0.7" 1582 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" 1583 | integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== 1584 | dependencies: 1585 | call-bind "^1.0.2" 1586 | define-properties "^1.2.0" 1587 | es-abstract "^1.22.1" 1588 | 1589 | string.prototype.trimstart@^1.0.7: 1590 | version "1.0.7" 1591 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" 1592 | integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== 1593 | dependencies: 1594 | call-bind "^1.0.2" 1595 | define-properties "^1.2.0" 1596 | es-abstract "^1.22.1" 1597 | 1598 | strip-ansi@^6.0.1: 1599 | version "6.0.1" 1600 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1601 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1602 | dependencies: 1603 | ansi-regex "^5.0.1" 1604 | 1605 | strip-bom@^3.0.0: 1606 | version "3.0.0" 1607 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 1608 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1609 | 1610 | strip-json-comments@^3.1.1: 1611 | version "3.1.1" 1612 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1613 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1614 | 1615 | style-mod@^4.1.0: 1616 | version "4.1.2" 1617 | resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz" 1618 | integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== 1619 | 1620 | supports-color@^7.1.0: 1621 | version "7.2.0" 1622 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1623 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1624 | dependencies: 1625 | has-flag "^4.0.0" 1626 | 1627 | supports-preserve-symlinks-flag@^1.0.0: 1628 | version "1.0.0" 1629 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1630 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1631 | 1632 | text-table@^0.2.0: 1633 | version "0.2.0" 1634 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1635 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1636 | 1637 | to-regex-range@^5.0.1: 1638 | version "5.0.1" 1639 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1640 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1641 | dependencies: 1642 | is-number "^7.0.0" 1643 | 1644 | ts-api-utils@^1.0.1: 1645 | version "1.0.3" 1646 | resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" 1647 | integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== 1648 | 1649 | tsconfig-paths@^3.15.0: 1650 | version "3.15.0" 1651 | resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" 1652 | integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== 1653 | dependencies: 1654 | "@types/json5" "^0.0.29" 1655 | json5 "^1.0.2" 1656 | minimist "^1.2.6" 1657 | strip-bom "^3.0.0" 1658 | 1659 | tslib@2.6.2: 1660 | version "2.6.2" 1661 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" 1662 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== 1663 | 1664 | type-check@^0.4.0, type-check@~0.4.0: 1665 | version "0.4.0" 1666 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1667 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1668 | dependencies: 1669 | prelude-ls "^1.2.1" 1670 | 1671 | type-fest@^0.20.2: 1672 | version "0.20.2" 1673 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1674 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1675 | 1676 | typed-array-buffer@^1.0.0: 1677 | version "1.0.0" 1678 | resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" 1679 | integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== 1680 | dependencies: 1681 | call-bind "^1.0.2" 1682 | get-intrinsic "^1.2.1" 1683 | is-typed-array "^1.1.10" 1684 | 1685 | typed-array-byte-length@^1.0.0: 1686 | version "1.0.0" 1687 | resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" 1688 | integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== 1689 | dependencies: 1690 | call-bind "^1.0.2" 1691 | for-each "^0.3.3" 1692 | has-proto "^1.0.1" 1693 | is-typed-array "^1.1.10" 1694 | 1695 | typed-array-byte-offset@^1.0.0: 1696 | version "1.0.0" 1697 | resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" 1698 | integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== 1699 | dependencies: 1700 | available-typed-arrays "^1.0.5" 1701 | call-bind "^1.0.2" 1702 | for-each "^0.3.3" 1703 | has-proto "^1.0.1" 1704 | is-typed-array "^1.1.10" 1705 | 1706 | typed-array-length@^1.0.4: 1707 | version "1.0.4" 1708 | resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" 1709 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== 1710 | dependencies: 1711 | call-bind "^1.0.2" 1712 | for-each "^0.3.3" 1713 | is-typed-array "^1.1.9" 1714 | 1715 | typescript@>=4.2.0, typescript@5.3.3: 1716 | version "5.3.3" 1717 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" 1718 | integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== 1719 | 1720 | unbox-primitive@^1.0.2: 1721 | version "1.0.2" 1722 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 1723 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 1724 | dependencies: 1725 | call-bind "^1.0.2" 1726 | has-bigints "^1.0.2" 1727 | has-symbols "^1.0.3" 1728 | which-boxed-primitive "^1.0.2" 1729 | 1730 | undici-types@~5.26.4: 1731 | version "5.26.5" 1732 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 1733 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1734 | 1735 | uri-js@^4.2.2: 1736 | version "4.4.1" 1737 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1738 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1739 | dependencies: 1740 | punycode "^2.1.0" 1741 | 1742 | w3c-keyname@^2.2.4: 1743 | version "2.2.8" 1744 | resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz" 1745 | integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== 1746 | 1747 | which-boxed-primitive@^1.0.2: 1748 | version "1.0.2" 1749 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1750 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1751 | dependencies: 1752 | is-bigint "^1.0.1" 1753 | is-boolean-object "^1.1.0" 1754 | is-number-object "^1.0.4" 1755 | is-string "^1.0.5" 1756 | is-symbol "^1.0.3" 1757 | 1758 | which-typed-array@^1.1.11, which-typed-array@^1.1.13: 1759 | version "1.1.13" 1760 | resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" 1761 | integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== 1762 | dependencies: 1763 | available-typed-arrays "^1.0.5" 1764 | call-bind "^1.0.4" 1765 | for-each "^0.3.3" 1766 | gopd "^1.0.1" 1767 | has-tostringtag "^1.0.0" 1768 | 1769 | which@^2.0.1: 1770 | version "2.0.2" 1771 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1772 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1773 | dependencies: 1774 | isexe "^2.0.0" 1775 | 1776 | wrappy@1: 1777 | version "1.0.2" 1778 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1779 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1780 | 1781 | yallist@^4.0.0: 1782 | version "4.0.0" 1783 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1784 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1785 | 1786 | yocto-queue@^0.1.0: 1787 | version "0.1.0" 1788 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1789 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1790 | --------------------------------------------------------------------------------