├── .editorconfig ├── .eslintrc.js ├── .github └── workflows │ └── release.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── docs ├── demo.gif ├── link_creation.gif ├── metacopy2.png ├── metacopy3.png └── presentation.gif ├── manifest.json ├── metacopy ├── i18n │ ├── index.ts │ └── locales │ │ ├── en.ts │ │ └── fr.ts ├── main.ts ├── modal.ts ├── settings.ts └── src │ ├── metadata.ts │ ├── pluginBehavior.ts │ └── utils.ts ├── package.json ├── pnpm-lock.yaml ├── styles.css ├── tsconfig.json └── versions.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | insert_final_newline = true 7 | indent_style = tab 8 | indent_size = 4 9 | tab_width = 4 10 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "browser": true, 4 | "es2021": true, 5 | "node": true 6 | }, 7 | "extends": [ 8 | "eslint:recommended", 9 | "plugin:@typescript-eslint/recommended" 10 | ], 11 | "parser": "@typescript-eslint/parser", 12 | "parserOptions": { 13 | "ecmaVersion": "latest", 14 | "sourceType": "module" 15 | }, 16 | "plugins": [ 17 | "@typescript-eslint" 18 | ], 19 | "rules": { 20 | "indent": [ 21 | "error", 22 | "tab" 23 | ], 24 | "linebreak-style": [ 25 | "error", 26 | "windows" 27 | ], 28 | "quotes": [ 29 | "error", 30 | "double" 31 | ], 32 | "semi": [ 33 | "error", 34 | "always" 35 | ], 36 | "@typescript-eslint/ban-ts-comment": "off", 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Obsidian plugin 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | tags: 7 | - "*" 8 | env: 9 | PLUGIN_NAME: obsidian-metacopy # Change this to match the id of your plugin. 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v3 17 | - name: Use Node.js 18 | uses: actions/setup-node@v3 19 | with: 20 | node-version: 18 21 | 22 | - name: Build 23 | id: build 24 | run: | 25 | npm install 26 | npm run build 27 | mkdir ${{ env.PLUGIN_NAME }} 28 | cp main.js styles.css ${{ env.PLUGIN_NAME }} 29 | - name: Copy files (beta) 30 | if: contains(github.ref, '-') 31 | run: | 32 | cp manifest-beta.json ${{ env.PLUGIN_NAME }} 33 | mv manifest-beta.json manifest.json 34 | - name: Copy files if not beta 35 | if: ${{ !contains(github.ref, '-') }} 36 | run: cp manifest.json ${{ env.PLUGIN_NAME }} 37 | - name: Create zip 38 | run: | 39 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }} 40 | ls 41 | echo "tag_name=$(git tag --sort version:refname | tail -n 1)" >> $GITHUB_OUTPUT 42 | - name: Create changelog (beta) 43 | if: contains(github.ref, '-') 44 | run: npx rexreplace "^.*?#+\s\[.*?\n.*?(?=\s*#+\s\[)" "_" -s -M -G -m -o "CHANGELOG-beta.md" > CHANGELOG-LATEST.md 45 | - name: Create changelog (not beta) 46 | if: ${{ !contains(github.ref, '-') }} 47 | run: npx rexreplace "^.*?#+\s\[.*?\n.*?(?=\s*#+\s\[)" "_" -s -M -G -m -o "CHANGELOG.md" > CHANGELOG-LATEST.md 48 | - name: Create Release 49 | id: create_release 50 | uses: softprops/action-gh-release@v1 51 | env: 52 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 53 | VERSION: ${{ github.ref }} 54 | with: 55 | tag_name: ${{ github.ref_name }} 56 | name: ${{ github.ref_name }} 57 | body_path: CHANGELOG-LATEST.md 58 | draft: false 59 | prerelease: false 60 | token: ${{ secrets.GITHUB_TOKEN }} 61 | files: | 62 | ${{ env.PLUGIN_NAME }}.zip 63 | main.js 64 | manifest.json 65 | styles.css 66 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Intellij 2 | *.iml 3 | .idea 4 | 5 | # npm 6 | node_modules 7 | package-lock.json 8 | 9 | # Don't include the compiled main.js file in the repo. 10 | # They should be uploaded to GitHub releases instead. 11 | main.js 12 | 13 | # Exclude sourcemaps 14 | *.map 15 | 16 | # obsidian 17 | data.json 18 | 19 | #prettierignore 20 | 21 | .prettierignore 22 | .prettierrc.json 23 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines. 4 | 5 | ## [1.10.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.9.2...1.10.0) (2023-07-30) 6 | 7 | 8 | ### Features 9 | 10 | * add support for path frontmatter keys ([8291d8d](https://github.com/Lisandra-dev/obsidian-metacopy/commit/8291d8d093820f0c8763e31f3a9601acbce5e9e5)) 11 | 12 | 13 | ### Bug Fixes 14 | 15 | * **contextMenu:** no context menu appear ([096b981](https://github.com/Lisandra-dev/obsidian-metacopy/commit/096b981af047e95f97db6180cdec66b6c793b1e5)), closes [#2](https://github.com/Lisandra-dev/obsidian-metacopy/issues/2) 16 | * **plugin:** the plugin doesn't work with the basic settings ([1a8cc4d](https://github.com/Lisandra-dev/obsidian-metacopy/commit/1a8cc4dc4a552a4ac760d182f726f06b25d7b95b)), closes [#2](https://github.com/Lisandra-dev/obsidian-metacopy/issues/2) 17 | 18 | ### [1.9.2](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.9.1...1.9.2) (2023-01-28) 19 | 20 | 21 | ### Bug Fixes 22 | 23 | * foldernote miscreated ([5f009ea](https://github.com/Lisandra-dev/obsidian-metacopy/commit/5f009ea3f7f7a8742cb862e8ce3964fab66c3848)) 24 | 25 | ### [1.9.1](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.9.0...1.9.1) (2023-01-21) 26 | 27 | ## [1.9.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.8.1...1.9.0) (2023-01-21) 28 | 29 | 30 | ### Features 31 | 32 | * allow obsidian path to be created if there is no frontmatter ([22213ab](https://github.com/Lisandra-dev/obsidian-metacopy/commit/22213ab6f0b20d04d12d164cf6eefbe816ad10ee)) 33 | 34 | ### [1.8.1](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.8.0...1.8.1) (2023-01-15) 35 | 36 | 37 | ### Bug Fixes 38 | 39 | * forgot to return if usefrontmattertitle is set to false ([82fe2e5](https://github.com/Lisandra-dev/obsidian-metacopy/commit/82fe2e5a84cb02ee29eae8f9fcdf4234b0811f84)) 40 | 41 | ## [1.8.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.7.1...1.8.0) (2023-01-15) 42 | 43 | 44 | ### Features 45 | 46 | * delete a part of the links ([9a692e4](https://github.com/Lisandra-dev/obsidian-metacopy/commit/9a692e44686adf14fc7d521db91aaef40149a8f3)) 47 | 48 | ### [1.7.1](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.7.0...1.7.1) (2023-01-02) 49 | 50 | 51 | ### Bug Fixes 52 | 53 | * title error using obsidian path ([59e8ee6](https://github.com/Lisandra-dev/obsidian-metacopy/commit/59e8ee6ce794728f2c71adae5ace26bdf78de8cb)) 54 | 55 | ## [1.7.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.5.1...1.7.0) (2022-12-31) 56 | 57 | 58 | ### Features 59 | 60 | * Adding link replacement as in Github Publisher ([50c25fb](https://github.com/Lisandra-dev/obsidian-metacopy/commit/50c25fb87bc23e2de8482c73f2ccaefc4e45f2d5)) 61 | 62 | ## [1.6.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.5.1...1.6.0) (2022-12-31) 63 | 64 | 65 | ### Features 66 | 67 | * Adding link replacement as in Github Publisher ([50c25fb](https://github.com/Lisandra-dev/obsidian-metacopy/commit/50c25fb87bc23e2de8482c73f2ccaefc4e45f2d5)) 68 | 69 | ### [1.5.1](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.6.0...1.5.1) (2022-12-20) 70 | 71 | 72 | ### Bug Fixes 73 | 74 | * Uncaught TypeError: Cannot read properties of null (reading 'path') in Canva ([bfbb64e](https://github.com/Lisandra-dev/obsidian-metacopy/commit/bfbb64ef8f61336f303568330461f6d81120f020)) 75 | 76 | ## [1.5.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.4.0...1.5.0) (2022-09-20) 77 | 78 | ## [1.5.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.4.0...1.5.0) (2022-09-20) 79 | 80 | 81 | ### Features 82 | 83 | * specify a frontmatter frontmatterKey for the title creation ([00677ef](https://github.com/Lisandra-dev/obsidian-metacopy/commit/00677ef746da7035284bc3e2a57c87a2308db1c2)) 84 | 85 | ## [1.4.0](https://github.com/Lisandra-dev/obsidian-metacopy/compare/1.3.0...1.4.0) (2022-09-08) 86 | 87 | 88 | ### Features 89 | 90 | * specify a frontmatter frontmatterKey for the title creation ([80ebbae](https://github.com/Lisandra-dev/obsidian-metacopy/commit/80ebbaeb48f1f04d3a731a583a4b153baa75178a)) 91 | 92 | ## [1.3.0](https://github.com/Mara-Li/obsidian-metacopy/compare/1.2.2...1.3.0) (2022-08-06) 93 | 94 | 95 | ### Features 96 | 97 | * translation + adding support for "title" field instead of filename ([1132728](https://github.com/Mara-Li/obsidian-metacopy/commit/1132728596677981a9bb27f10ad1edcf3ca5dc13)) 98 | 99 | ### [1.2.2](https://github.com/Mara-Li/obsidian-metacopy/compare/1.2.1...1.2.2) (2022-07-14) 100 | 101 | 102 | ### Bug Fixes 103 | 104 | * modal crash ([06ae644](https://github.com/Mara-Li/obsidian-metacopy/commit/06ae6440d8532118c82abee64186f99b6271a828)) 105 | 106 | ### [1.2.1](https://github.com/Mara-Li/obsidian-metacopy/compare/1.2.0...1.2.1) (2022-07-14) 107 | 108 | ## [1.2.0](https://github.com/Mara-Li/obsidian-metacopy/compare/1.1.1...1.2.0) (2022-06-28) 109 | 110 | 111 | ### Features 112 | 113 | * adding section using obsidian 0.15.3 ([4ebe3fd](https://github.com/Mara-Li/obsidian-metacopy/commit/4ebe3fd139e4be13f4deb30150a4a53f5e9ec2d6)) 114 | 115 | ### [1.1.1](https://github.com/Mara-Li/obsidian-metacopy/compare/1.1.0...1.1.1) (2022-05-26) 116 | 117 | 118 | ### Bug Fixes 119 | 120 | * fix folder name && workflow ([50310f5](https://github.com/Mara-Li/obsidian-metacopy/commit/50310f58e66d04cb7eefea51f18ecdd5e81005a6)) 121 | * resolve main.ts & files doesn't exist because of renaming folder ([c708a43](https://github.com/Mara-Li/obsidian-metacopy/commit/c708a43b6d809e7974b44480986dcf2fab1f220f)) 122 | 123 | ## [1.1.0](https://github.com/Mara-Li/obsidian-metacopy/compare/1.0.2...1.1.0) (2022-05-25) 124 | 125 | 126 | ### Features 127 | 128 | * Adding more behavior for link creator ([4ff71ef](https://github.com/Mara-Li/obsidian-metacopy/commit/4ff71ef57d3d630f93dd018a020d1e9a9017bd9a)) 129 | 130 | ### [1.0.2](https://github.com/Mara-Li/obsidian-metacopy/compare/1.0.1...1.0.2) (2022-01-22) 131 | 132 | 133 | ### Bug Fixes 134 | 135 | * **url:** Update notice when copy metacopy-url ([f9ec6b8](https://github.com/Mara-Li/obsidian-metacopy/commit/f9ec6b84e4b64a6af1d38bcc44e80eb4b5e69b9c)) 136 | 137 | ### [1.0.1](https://github.com/Mara-Li/obsidian-metacopy/compare/1.0.0...1.0.1) (2022-01-22) 138 | 139 | 140 | ### Bug Fixes 141 | 142 | * **url:** Fix description settings ([3f9ad35](https://github.com/Mara-Li/obsidian-metacopy/commit/3f9ad351d1741d4248034b0966005563eaeee6e1)) 143 | 144 | ## [1.0.0](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.27...1.0.0) (2022-01-22) 145 | 146 | 147 | ### Bug Fixes 148 | 149 | * Change description ([5862677](https://github.com/Mara-Li/obsidian-metacopy/commit/5862677c057db94fb31095bed01c4dffc3f5ca2c)) 150 | 151 | ### [0.0.27](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.26...0.0.27) (2022-01-22) 152 | 153 | 154 | ### Features 155 | 156 | * **url:** Create a default URL ([bc2e41b](https://github.com/Mara-Li/obsidian-metacopy/commit/bc2e41b5d8df21444353626eb7c6a765862f3817)) 157 | 158 | ### [0.0.26](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.25...0.0.26) (2022-01-05) 159 | 160 | 161 | ### Bug Fixes 162 | 163 | * **url:** Fix url creation ([04b3783](https://github.com/Mara-Li/obsidian-metacopy/commit/04b378358c77b96390fba83cc62b4b0171215c97)) 164 | 165 | ### [0.0.25](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.24...0.0.25) (2022-01-04) 166 | 167 | ### [0.0.24](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.23...0.0.24) (2022-01-04) 168 | 169 | 170 | ### Features 171 | 172 | * **url:** Support foldernote ([7f8725b](https://github.com/Mara-Li/obsidian-metacopy/commit/7f8725b116162874a1c2fd95960851ceae592518)) 173 | 174 | ### [0.0.23](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.22...0.0.23) (2022-01-04) 175 | 176 | ### Bug Fixes 177 | 178 | - **editorMenu:** Add separator ([fe5476e](https://github.com/Mara-Li/obsidian-metacopy/commit/fe5476e81285fd3198996bf4941f86a8ca50037c)) 179 | 180 | ### [0.0.22](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.21...0.0.22) (2022-01-04) 181 | 182 | ### Features 183 | 184 | - **option:** Disable/enable plugin based on a frontmatter frontmatterKey ([ed85cb2](https://github.com/Mara-Li/obsidian-metacopy/commit/ed85cb2547eca93fdeb95b96c9f882ef4bbb5241)) 185 | 186 | ### [0.0.21](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.20...0.0.21) (2022-01-01) 187 | 188 | ### Features 189 | 190 | - **menu:** Add a context menu (left-click) to copy url ([a817bf2](https://github.com/Mara-Li/obsidian-metacopy/commit/a817bf293b33d3ce7d53b6c17e03dc75a15744ab)) 191 | 192 | ### [0.0.20](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.19...0.0.20) (2022-01-01) 193 | 194 | ### Bug Fixes 195 | 196 | - **icon:** Update icon if link found ([fc40da8](https://github.com/Mara-Li/obsidian-metacopy/commit/fc40da890a9737ae4ea74348576635308dd4bea9)) 197 | 198 | ### [0.0.19](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.18...0.0.19) (2022-01-01) 199 | 200 | ### Features 201 | 202 | - Link creation ([2330c53](https://github.com/Mara-Li/obsidian-metacopy/commit/2330c53e6a4e36a06ff400149d226db3987bbfda)) 203 | 204 | ### [0.0.18](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.17...0.0.18) (2021-11-28) 205 | 206 | ### Bug Fixes 207 | 208 | - Adjust frontmatter cache; remove editor menu ; Adjust icon ([f6a5f45](https://github.com/Mara-Li/obsidian-metacopy/commit/f6a5f45c04773ce7312ab0d24af97e1f8cd3cb5d)) 209 | 210 | ### [0.0.17](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.16...0.0.17) (2021-11-07) 211 | 212 | ### Bug Fixes 213 | 214 | - **bug:** Fix bug with command ([719969d](https://github.com/Mara-Li/obsidian-metacopy/commit/719969dde7b9081444981b823327bcb05dd4bb0d)) 215 | 216 | ### [0.0.16](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.15...0.0.16) (2021-11-01) 217 | 218 | ### Bug Fixes 219 | 220 | - Update checking using advice from licat ([ddee7d9](https://github.com/Mara-Li/obsidian-metacopy/commit/ddee7d91c711332b983ed19d84a73fade9e57694)) 221 | 222 | ### [0.0.15](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.14...0.0.15) (2021-10-31) 223 | 224 | ### Bug Fixes 225 | 226 | - First pass of Obsidian's correction ([e73306f](https://github.com/Mara-Li/obsidian-metacopy/commit/e73306f093ccd2b79908783dddc00dd18b9d3f1c)) 227 | 228 | ### [0.0.14](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.13...0.0.14) (2021-10-27) 229 | 230 | ### Features 231 | 232 | - :lipstic: :Update message for menu ([b691711](https://github.com/Mara-Li/obsidian-metacopy/commit/b691711c66dc4bb674b68a57c025bee1a04fd770)) 233 | 234 | ### [0.0.13](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.12...0.0.13) (2021-10-24) 235 | 236 | ### Features 237 | 238 | - **fix:** Forgot to remove \* for left click ([fd7e01f](https://github.com/Mara-Li/obsidian-metacopy/commit/fd7e01f552479e9da7d3ee4d0c35ea1549fd86c8)) 239 | 240 | ### [0.0.12](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.11...0.0.12) (2021-10-24) 241 | 242 | ### Bug Fixes 243 | 244 | - Adding support for list ; change settings to textArea ([44c52c3](https://github.com/Mara-Li/obsidian-metacopy/commit/44c52c358a6b1a752ddc93c85b84be8d4d5b72c5)) 245 | 246 | ### [0.0.11](https://github.com/Mara-Li/obsidian-metacopy/compare/0.0.10...0.0.11) (2021-10-24) 247 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 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 Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or frontmatterKey for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This plugin recommended being used 2 | with [Obsidian To Mkdocs](https://github.com/Mara-Li/mkdocs_obsidian_publish). 3 | # Obsidian — MetaCopy 4 | 5 | The purpose of this plugin is to get quickly the value of a front matter key. You can set multiple value in settings, as : `key1, key2, key3, ...` 6 | 7 | If the plugin found multiple key in the front matter : 8 | 9 | 1. The context takes the **first** value from the front matter. 10 | 2. The command creates a menu where you can choose the value you want. 11 | 12 | The value added in your pasteboard, so you can paste it everywhere. 13 | 14 | Yeah. That's it. 15 | 16 | Here is the plugin in action : 17 | ![presentation.gif](docs/presentation.gif) 18 | 19 | # Links creator 20 | 21 | ## Base options 22 | 23 | If you want to create a link to a page, you can use this plugin. 24 | 25 | > ⚠️ This function only work if you have a frontmatter. 26 | 27 | There are 3 possibles configuration : 28 | 29 | - Creating link using a default folder 30 | - Creating link using the base link **plus** the relative obsidian path 31 | - Creating the link using a frontmatter key. 32 | 33 | ### Fixed folder 34 | 35 | The resulted link will be `{your_base_link}/{default_folder}/{filename}/`. 36 | 37 | > 💭 Folder note option is disabled with this option. 38 | 39 | ### Obsidian Path option 40 | 41 | The resulted link will be : `{your_base_link}/{obsidian_path}/{filename}/`. 42 | 43 | ### Frontmatter 44 | 45 | You can create a link using a front matter key. 46 | 47 | 1. The key must be both in `key` and in `key link` 48 | 2. You need to configure the `base link` 49 | 50 | The link creator works as the main plugin : file menu will take the first value, 51 | so if this value is the link key, it will create a link. 52 | 53 | You can also set a `default value`, that will be a fallback in case of the 54 | absence of a `category` key & value. 55 | 56 | ![link creation](docs/link_creation.gif) 57 | 58 | Furthermore, the editor menu will add an option to copy the link if it exists. 59 | 60 | ## Folder note support 61 | 62 | You can enable the support of folder note (with the “folder name” behavior) to 63 | create link without the file's name if it's the same of the last folder of the 64 | link key. 65 | 66 | > ️🗒️ Example : Obsidian Path 67 | > - If you set as `default value` : `docs` 68 | > - If your file is named `noteIndex` and their folder `myFolder` 69 | > - The link will be `{your_base_link}/{obsidian_path}/docs/myFolder/` 70 | 71 | > 🗒️ Example : Frontmatter 72 | > - If you set `link_key: folder1/folder2/noteIndex` 73 | > - If your file is named `noteIndex` 74 | > - The result link will be : `{base_link}/folder1/folder2/noteIndex/` 75 | 76 | > ⚠️ This option is not compatible with the `Fixed Folder` option. 77 | 78 | ## Disable menu 79 | 80 | You can disable the menu using a front matter key. There are two behaviors : 81 | 82 | 1. Settings enabled : 83 | The key must be present **and** set to **true** to **enable** the menu. 84 | 2. Setting is disabled: 85 | The default behavior. 86 | The key must be absent **or** set to **false** to **disable** the menu. 87 | 88 | Regardless of the option, the command modal continue to work. 89 | 90 | # Obsidian Mkdocs 91 | 92 | Furthermore, the plugin recommended being used 93 | with [Obsidian To Mkdocs](https://github.com/Mara-Li/mkdocs_obsidian_publish) to 94 | copy link without editing the source file. 95 | 96 | To use Obsidian2mkdocs with Metacopy, here is the configuration : 97 | ![](docs/metacopy3.png) 98 | ![](docs/metacopy2.png) 99 | 100 | This template allows copying a link, as you will do with Notion or Google Docs ( 101 | for example). 102 | 103 | The file template will be : 104 | ```yaml 105 | title: 106 | category: something/like/that 107 | share: true 108 | ``` 109 | 110 | [Here is a demo](https://www.loom.com/share/88c64da2ba194e219578d5911fb8e08d) : 111 | [![click to get a video !](docs/demo.gif)](https://www.loom.com/share/88c64da2ba194e219578d5911fb8e08d) 112 | --- 113 | 114 | The plugin is inspired by [Copy Publish URL](https://github.com/kometenstaub/copy-publish-url) but for all link (instead of only publish). 115 | 116 | 117 | # 🖥️ Development 118 | 119 | - Fork / clone the repository 120 | - `npm install` 121 | - `npm run dev` (or `npm run build`) 122 | 123 | # Installation 124 | 125 | 1. You can use [BRAT](https://github.com/TfTHacker/obsidian42-brat) with the link to the repository. 126 | 2. You can use the community plugin registry. 127 | 3. Likewise, you can manually install the plugin using [release](https://github.com/Mara-Li/obsidian-metacopy/releases) and unzip obsidian-metacopy-x.x.xx.zip in your `.obsidian/plugins` folder. 128 | -------------------------------------------------------------------------------- /docs/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mara-Li/obsidian-metacopy/48ffaa765f380737218bf44b1fa3349d1715052a/docs/demo.gif -------------------------------------------------------------------------------- /docs/link_creation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mara-Li/obsidian-metacopy/48ffaa765f380737218bf44b1fa3349d1715052a/docs/link_creation.gif -------------------------------------------------------------------------------- /docs/metacopy2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mara-Li/obsidian-metacopy/48ffaa765f380737218bf44b1fa3349d1715052a/docs/metacopy2.png -------------------------------------------------------------------------------- /docs/metacopy3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mara-Li/obsidian-metacopy/48ffaa765f380737218bf44b1fa3349d1715052a/docs/metacopy3.png -------------------------------------------------------------------------------- /docs/presentation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mara-Li/obsidian-metacopy/48ffaa765f380737218bf44b1fa3349d1715052a/docs/presentation.gif -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-metacopy", 3 | "name": "Metacopy & URL", 4 | "version": "1.9.2", 5 | "minAppVersion": "0.15.3", 6 | "description": "Copy the value of a frontmatter key and allows to create link from it using various settings.", 7 | "author": "Mara-Li", 8 | "authorUrl": "https://github.com/Mara-Li", 9 | "fundingUrl": "https://ko-fi.com/mara__li", 10 | "isDesktopOnly": false, 11 | "js": "main.js" 12 | } 13 | -------------------------------------------------------------------------------- /metacopy/i18n/index.ts: -------------------------------------------------------------------------------- 1 | import { moment } from "obsidian"; 2 | import en from "./locales/en"; 3 | import fr from "./locales/fr"; 4 | 5 | const localeMap : {[key: string]: Partial}= { 6 | "en" : en, 7 | "fr" : fr, 8 | }; 9 | 10 | const locale = localeMap[moment.locale()] || localeMap.en; 11 | 12 | export interface StringFunc{ 13 | (params: string|string[]): string; 14 | } 15 | 16 | function nestedProp(obj: object, path: string): unknown { 17 | return path.split(".").reduce((o, k) => o ? (o as never)[k] : undefined, obj); 18 | } 19 | 20 | export function t(multipleKey:string): string | StringFunc { 21 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 22 | // @ts-ignore 23 | return (locale && nestedProp(locale, multipleKey))|| nestedProp(en, multipleKey); 24 | } 25 | -------------------------------------------------------------------------------- /metacopy/i18n/locales/en.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | title: "MetaCopy Settings", 3 | keyTitle: { 4 | title: "Key", 5 | desc: "The frontmatterKey which you want to copy the correspondingValue", 6 | placeholder: "key1, key2, key3,…", 7 | }, 8 | toggleLinkCreator : { 9 | title: "Enable link creator", 10 | desc: "Display the settings of the link creator", 11 | }, 12 | linkCreator: { 13 | header: "Link Creator", 14 | baseLink: "Base link", 15 | baseLinkDesc: "The base of the link", 16 | behavior: { 17 | title: "Default behavior", 18 | desc: "Choose between a metadata frontmatterKey, obsidian path & fixed folder for the link creator", 19 | fixedFolder: "Fixed Folder", 20 | categoryKey: "Metadata Key", 21 | obsidianPath: "Obsidian Path", 22 | }, 23 | keyLink: { 24 | title: "Key link", 25 | desc: "The frontmatterKey to create as link", 26 | defaultValue: "Default correspondingValue", 27 | defaultValueDesc: "If you want to active the link creation without the frontmatterKey set.", 28 | }, 29 | folderNote: { 30 | title: "Folder note", 31 | desc: "If the file name = frontmatterKey link or parent folder, remove the file name in the link" 32 | }, 33 | useFrontMatterTitle: { 34 | title: "Use frontmatter frontmatterKey as title", 35 | desc: "Use a frontmatter field instead of the file name.", 36 | }, 37 | regexReplaceTitle: { 38 | title: "Apply a replacement to the filename", 39 | desc: "If the text is between \"//\", it will be used as a regex. Otherwise, it will be used as a string.", 40 | }, 41 | replaceLinkPart: { 42 | title: "Replace a part of the link", 43 | desc: "You can add multiple string, separated by a comma.", 44 | } 45 | }, 46 | disable: { 47 | title: "Context menu", 48 | desc: "Disable or enable Metacopy context menu with a frontmatter key.", 49 | }, 50 | menuBehavior: { 51 | title: "Menu behavior", 52 | desc: "Enabled: require a configured frontmatterKey to enable the menu", 53 | keyMenu: "Key menu", 54 | keyMenuDesc: "The frontmatterKey used to disable/enable the metacopy file menu", 55 | }, 56 | 57 | command : { 58 | metadataMessage: (key: string): string => `Metadata key "${key}" copied to the clipboard.`, 59 | metadataMessageURL: "URL send to the clipboard.", 60 | copy: (key: string): string => `Metacopy : Copy ${key}`, 61 | copyCmd: (key: string): string => `Copy [${key}]`, 62 | copyURL: "MetaCopy : Create URL", 63 | suggesterCopyURL: "Create URL", 64 | }, 65 | }; 66 | -------------------------------------------------------------------------------- /metacopy/i18n/locales/fr.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | title: "Paramètre MetaCopy", 3 | keyTitle: { 4 | title: "Clé", 5 | desc: "La clé dont vous voulez copier la valeur", 6 | placeholder: "clé1, clé2, clé3,…", 7 | }, 8 | toggleLinkCreator : { 9 | title: "Active le créateur de lien", 10 | desc: "Affiche les options pour créer un lien avec une clé de métadonnées.", 11 | }, 12 | linkCreator: { 13 | header: "Créateur de lien", 14 | baseLink: "Base du lien", 15 | baseLinkDesc: "La base du lien", 16 | behavior: { 17 | title: "Comportement par défaut", 18 | desc: "Choisissez entre une clé de métadonnées, le chemin dans Obsidian et un dossier fixe pour le créateur de liens.", 19 | fixedFolder: "Dossier fixe", 20 | categoryKey: "Clé de métadonnée", 21 | obsidianPath: "Chemin Obsidian", 22 | }, 23 | keyLink:{ 24 | title: "Clé de lien", 25 | desc: "La clé pour créer le lien", 26 | defaultValue: "Valeur par défaut", 27 | defaultValueDesc: "Si vous voulez activer la création de liens sans clé de métadonnée.", 28 | }, 29 | folderNote: { 30 | title: "Folder Note", 31 | desc: "Si le nom du fichier = lien clé ou dossier parent, supprimer le nom du fichier dans le lien", 32 | }, 33 | useFrontMatterTitle: { 34 | title: "Utiliser une clé frontmatter pour le titre", 35 | desc: "Utiliser une clé de métadonnée en tant que titre (au lieu du nom du fichier) pour créer le lien.", 36 | }, 37 | regexReplaceTitle: { 38 | title: "Appliquer un remplacement au titre", 39 | desc: "Si le texte est entre \"//\", il sera interprété comme une expression régulière. Sinon, il sera interprété comme une chaîne de caractères.", 40 | }, 41 | replaceLinkPart: { 42 | title: "Supprimer une partie du lien", 43 | desc: "Vous pouvez ajouter plusieurs chaînes de caractères, séparées par une virgule.", 44 | } 45 | }, 46 | disable: { 47 | title: "Menu contextuel", 48 | desc: "Désactiver ou activer le menu contextuel de Metacopy avec une clé de métadonnée.", 49 | }, 50 | menuBehavior: { 51 | title: "Comportement du menu", 52 | desc: "Activer : nécessite une clé configurée pour activer le menu", 53 | keyMenu: "Clé du menu", 54 | keyMenuDesc: "La clé utilisée pour désactiver/activer le menu du fichier Metacopy.", 55 | }, 56 | command : { 57 | metadataMessage: (key: string): string => `Clé de métadonnée "${key}" copiée dans le presse-papier`, 58 | metadataMessageURL: "URL envoyé dans le presse-papier", 59 | copy: (key: string): string => `Metacopy : Copier la clé de ${key}`, 60 | copyCmd: (key: string): string => `Copie de [${key}]`, 61 | copyURL: "MetaCopy : Créer URL", 62 | suggesterCopyURL: "Créer URL", 63 | }, 64 | }; 65 | -------------------------------------------------------------------------------- /metacopy/main.ts: -------------------------------------------------------------------------------- 1 | import { Menu, Plugin, TFile } from "obsidian"; 2 | import { 3 | CopySettingsTabs, 4 | DEFAULT_SETTINGS, 5 | MetaCopySettings, 6 | } from "./settings"; 7 | import {CopyMetaSuggester} from "./modal"; 8 | import {getValue} from "./src/utils"; 9 | import {getMeta, checkMeta} from "./src/metadata"; 10 | import {disableMetaCopy} from "./src/pluginBehavior"; 11 | import { StringFunc, t } from "./i18n"; 12 | 13 | export default class MetaCopy extends Plugin { 14 | settings: MetaCopySettings; 15 | 16 | convertstringToList(toConvert: string): void { 17 | // @ts-ignore 18 | const str = this.settings[toConvert] as unknown as string; 19 | if (typeof str === "string") { 20 | // @ts-ignore 21 | this.settings[toConvert] = str.split(/[\n, ]/).map((item) => item.trim()); 22 | this.saveSettings(); 23 | } 24 | } 25 | 26 | enableMenu(menu: Menu, file: TFile): void { 27 | const meta = getMeta(this.app, file, this.settings); 28 | if (!meta) { 29 | return; 30 | } 31 | const keyMeta = meta.frontmatterKey; 32 | let title = (t("command.copy") as StringFunc)(keyMeta); 33 | let icon = "two-blank-pages"; 34 | const enableMetaCopy = disableMetaCopy( 35 | this.app, 36 | this.settings, 37 | file 38 | ); 39 | if (this.settings.enableCopyLink && keyMeta === this.settings.keyLink) { 40 | title = (t("command.copyURL") as string); 41 | icon = "price-tag-glyph"; 42 | } 43 | 44 | if (meta.correspondingValue && enableMetaCopy) { 45 | menu.addSeparator(); 46 | menu.addItem((item) => { 47 | item.setSection("info"); 48 | item.setTitle(title) 49 | .setIcon(icon) 50 | .onClick(async () => { 51 | await getValue(this.app, file, this.settings); 52 | }); 53 | }); 54 | menu.addSeparator(); 55 | } 56 | } 57 | 58 | 59 | async onload() { 60 | console.log("MetaCopy loaded"); 61 | await this.loadSettings(); 62 | this.addSettingTab(new CopySettingsTabs(this.app, this)); 63 | this.convertstringToList("copyKey"); 64 | this.registerEvent( 65 | this.app.workspace.on("file-menu", (menu, file: TFile) => { 66 | this.enableMenu(menu, file); 67 | })); 68 | 69 | this.registerEvent( 70 | this.app.workspace.on("editor-menu", (menu, editor, view) => { 71 | this.enableMenu(menu, view.file); 72 | }) 73 | ); 74 | 75 | this.addCommand({ 76 | id: "obsidian-metacopy", 77 | name: "Metacopy", 78 | hotkeys: [], 79 | checkCallback: (checking: boolean) => { 80 | const fileMeta = checkMeta(this.app, this.settings); 81 | if (fileMeta) { 82 | if (!checking) { 83 | new CopyMetaSuggester( 84 | this.app, 85 | this.settings, 86 | this.app.workspace.getActiveFile() 87 | ).open(); 88 | } 89 | return true; 90 | } 91 | return false; 92 | }, 93 | }); 94 | } 95 | 96 | async onunload() { 97 | console.log("MetaCopy unloaded"); 98 | } 99 | 100 | async loadSettings() { 101 | this.settings = Object.assign( 102 | {}, 103 | DEFAULT_SETTINGS, 104 | await this.loadData() 105 | ); 106 | } 107 | 108 | async saveSettings() { 109 | await this.saveData(this.settings); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /metacopy/modal.ts: -------------------------------------------------------------------------------- 1 | import {App, FuzzySuggestModal, TFile} from "obsidian"; 2 | import {MetaCopySettings} from "./settings"; 3 | import {copy, createLink} from "./src/utils"; 4 | import {getAllMeta} from "./src/metadata"; 5 | import { t } from "./i18n"; 6 | 7 | 8 | interface CopyMetaModal { 9 | key: string; 10 | value: string; 11 | } 12 | 13 | 14 | export class CopyMetaSuggester extends FuzzySuggestModal { 15 | app: App; 16 | file: TFile; 17 | settings: MetaCopySettings; 18 | 19 | constructor(app: App, settings: MetaCopySettings, file: TFile) { 20 | super(app); 21 | this.file = file; 22 | this.settings = settings; 23 | } 24 | 25 | getItemText(item: CopyMetaModal): string { 26 | return item.key; 27 | } 28 | 29 | getItems(): CopyMetaModal[] { 30 | return getAllMeta(this.app, this.file, this.settings); 31 | } 32 | 33 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 34 | onChooseItem(item: CopyMetaModal, evt: MouseEvent | KeyboardEvent): void { 35 | item.value = item.value.toString(); 36 | if (item.value.split(",").length > 1) { 37 | item.value = "- " + item.value.replaceAll(",", "\n- "); 38 | } 39 | let contents = item.value; 40 | const cmd = t("command.suggesterCopyURL") as string; 41 | if (item.key === cmd) { 42 | contents = createLink( 43 | this.file, 44 | this.settings, 45 | {frontmatterKey: item.key, correspondingValue: item.value}, 46 | this.app 47 | ); 48 | } 49 | 50 | copy(contents, item.key, this.settings).then(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /metacopy/settings.ts: -------------------------------------------------------------------------------- 1 | import {App, PluginSettingTab, Setting} from "obsidian"; 2 | import { t } from "./i18n"; 3 | import MetaCopy from "./main"; 4 | 5 | export interface MetaCopySettings { 6 | copyKey: string[]; 7 | baseLink: string; 8 | keyLink: string; 9 | comport: boolean; 10 | disableKey: string; 11 | folderNote: boolean; 12 | defaultKeyLink: string; 13 | behaviourLinkCreator: string; 14 | useFrontMatterTitle: boolean; 15 | frontmattertitleKey: string; 16 | titleRegex: string; 17 | titleReplace: string; 18 | removeLinkPart: string[]; 19 | enableCopyLink: boolean; 20 | } 21 | 22 | export interface MetaCopyValue 23 | { 24 | frontmatterKey: string; 25 | correspondingValue: string; 26 | } 27 | 28 | export enum BehaviourLinkCreator { 29 | CATEGORY_KEY = "categoryKey", 30 | OBSIDIAN_PATH = "obsidianPath", 31 | FIXED_FOLDER = "fixedFolder", 32 | } 33 | 34 | export const DEFAULT_SETTINGS: MetaCopySettings = { 35 | copyKey: [], 36 | baseLink: "", 37 | keyLink: "", 38 | comport: false, 39 | disableKey: "", 40 | folderNote: false, 41 | defaultKeyLink: "", 42 | behaviourLinkCreator: BehaviourLinkCreator.CATEGORY_KEY, 43 | useFrontMatterTitle: false, 44 | frontmattertitleKey: "title", 45 | titleRegex: "", 46 | titleReplace: "", 47 | removeLinkPart: [], 48 | enableCopyLink: false, 49 | }; 50 | 51 | 52 | 53 | export class CopySettingsTabs extends PluginSettingTab { 54 | plugin: MetaCopy; 55 | 56 | constructor(app: App, plugin: MetaCopy) { 57 | super(app, plugin); 58 | this.plugin = plugin; 59 | } 60 | 61 | 62 | display(): void { 63 | const {containerEl} = this; 64 | 65 | containerEl.empty(); 66 | 67 | containerEl.createEl("h2", {text: t("metaCopySettings") as string}); 68 | 69 | new Setting(containerEl) 70 | .setName(t("keyTitle.title") as string) 71 | .setDesc(t("keyTitle.desc") as string) 72 | .addTextArea((text) => 73 | text 74 | .setPlaceholder(t("keyTitle.placeholder") as string) 75 | .setValue(this.plugin.settings.copyKey.join(", ")) 76 | .onChange(async (value) => { 77 | this.plugin.settings.copyKey = value.split(/[\n, ]/); 78 | await this.plugin.saveSettings(); 79 | }) 80 | ); 81 | new Setting(containerEl) 82 | .setName(t("toggleLinkCreator.title") as string) 83 | .setDesc(t("toggleLinkCreator.desc") as string) 84 | .addToggle((toggle) => 85 | toggle 86 | .setValue(this.plugin.settings.enableCopyLink) 87 | .onChange(async (value) => { 88 | this.plugin.settings.enableCopyLink = value; 89 | await this.plugin.saveSettings(); 90 | this.display(); 91 | }) 92 | ); 93 | if (this.plugin.settings.enableCopyLink) { 94 | containerEl.createEl("h3", { text: (t("linkCreator.header") as string) }); 95 | new Setting(containerEl) 96 | .setName(t("linkCreator.baseLink") as string) 97 | .setDesc(t("linkCreator.baseLinkDesc") as string) 98 | .addText((text) => 99 | text 100 | .setPlaceholder("https://obsidian-file.github.io/") 101 | .setValue(this.plugin.settings.baseLink) 102 | .onChange(async (value) => { 103 | this.plugin.settings.baseLink = value; 104 | await this.plugin.saveSettings(); 105 | }) 106 | ); 107 | 108 | new Setting(containerEl) 109 | .setName(t("linkCreator.behavior.title") as string) 110 | .setDesc(t("linkCreator.behavior.desc") as string) 111 | .addDropdown((dropdown) => 112 | dropdown 113 | .addOptions({ 114 | fixedFolder: t("linkCreator.behavior.fixedFolder") as string, 115 | categoryKey: t("linkCreator.behavior.categoryKey") as string, 116 | obsidianPath: t("linkCreator.behavior.obsidianPath") as string, 117 | }) 118 | .setValue(this.plugin.settings.behaviourLinkCreator) 119 | .onChange(async (value) => { 120 | this.plugin.settings.behaviourLinkCreator = value; 121 | this.display(); 122 | await this.plugin.saveSettings(); 123 | })); 124 | 125 | if (this.plugin.settings.behaviourLinkCreator === BehaviourLinkCreator.CATEGORY_KEY) { 126 | new Setting(containerEl) 127 | .setName(t("linkCreator.keyLink.title") as string) 128 | .setDesc(t("linkCreator.keyLink.desc") as string) 129 | .setClass("metacopy-settings") 130 | .addText((text) => 131 | text 132 | .setPlaceholder("") 133 | .setValue(this.plugin.settings.keyLink) 134 | .onChange(async (value) => { 135 | this.plugin.settings.keyLink = value; 136 | await this.plugin.saveSettings(); 137 | }) 138 | ); 139 | } 140 | 141 | 142 | new Setting(containerEl) 143 | .setName(t("linkCreator.keyLink.defaultValue") as string) 144 | .setDesc(t("linkCreator.keyLink.defaultValueDesc") as string) 145 | .addText((text) => 146 | text 147 | .setPlaceholder("") 148 | .setValue(this.plugin.settings.defaultKeyLink) 149 | .onChange(async (value) => { 150 | this.plugin.settings.defaultKeyLink = value; 151 | await this.plugin.saveSettings(); 152 | })); 153 | 154 | if (this.plugin.settings.behaviourLinkCreator === BehaviourLinkCreator.OBSIDIAN_PATH || this.plugin.settings.behaviourLinkCreator === BehaviourLinkCreator.CATEGORY_KEY) { 155 | new Setting(containerEl) 156 | .setName(t("linkCreator.folderNote.title") as string) 157 | .setDesc(t("linkCreator.folderNote.desc") as string) 158 | .addToggle((toggle) => { 159 | toggle.setValue(this.plugin.settings.folderNote); 160 | toggle.onChange(async (value) => { 161 | this.plugin.settings.folderNote = value; 162 | await this.plugin.saveSettings(); 163 | }); 164 | }); 165 | } 166 | 167 | const titleSettings = new Setting(containerEl) 168 | .setName(t("linkCreator.useFrontMatterTitle.title") as string) 169 | .setDesc(t("linkCreator.useFrontMatterTitle.desc") as string) 170 | .addToggle((toggle) => { 171 | toggle.setValue(this.plugin.settings.useFrontMatterTitle); 172 | toggle.onChange(async (value) => { 173 | this.plugin.settings.useFrontMatterTitle = value; 174 | await this.plugin.saveSettings(); 175 | this.display(); 176 | }); 177 | }); 178 | if (this.plugin.settings.useFrontMatterTitle) { 179 | titleSettings 180 | .addText((text) => { 181 | text 182 | .setPlaceholder("title") 183 | .setValue(this.plugin.settings.frontmattertitleKey) 184 | .onChange(async (value) => { 185 | this.plugin.settings.frontmattertitleKey = value.trim(); 186 | await this.plugin.saveSettings(); 187 | }); 188 | }); 189 | } 190 | 191 | new Setting(containerEl) 192 | .setName(t("linkCreator.regexReplaceTitle.title") as string) 193 | .setDesc(t("linkCreator.regexReplaceTitle.desc") as string) 194 | .addText((text) => 195 | text 196 | .setPlaceholder("") 197 | .setValue(this.plugin.settings.titleRegex) 198 | .onChange(async (value) => { 199 | this.plugin.settings.titleRegex = value; 200 | await this.plugin.saveSettings(); 201 | }) 202 | ) 203 | .addText((text) => 204 | text 205 | .setPlaceholder("") 206 | .setValue(this.plugin.settings.titleReplace) 207 | .onChange(async (value) => { 208 | this.plugin.settings.titleReplace = value; 209 | await this.plugin.saveSettings(); 210 | }) 211 | ); 212 | 213 | new Setting(containerEl) 214 | .setName(t("linkCreator.replaceLinkPart.title") as string) 215 | .setDesc(t("linkCreator.replaceLinkPart.desc") as string) 216 | .addTextArea((text) => 217 | text 218 | .setPlaceholder("") 219 | .setValue(this.plugin.settings.removeLinkPart.join(", ")) 220 | .onChange(async (value) => { 221 | this.plugin.settings.removeLinkPart = value 222 | .split(/[,\n]/) 223 | .map((item) => item.trim()) 224 | .filter((item) => item.length > 0); 225 | await this.plugin.saveSettings(); 226 | }) 227 | ); 228 | } 229 | containerEl.createEl("h3", {text: t("disable.title") as string}); 230 | containerEl.createEl("i", { 231 | text: t("disable.desc") as string, 232 | }); 233 | 234 | new Setting(containerEl) 235 | .setName(t("menuBehavior.title") as string) 236 | .setDesc(t("menuBehavior.desc") as string) 237 | .addToggle((toggle) => { 238 | toggle.setValue(this.plugin.settings.comport); 239 | toggle.onChange(async (value) => { 240 | this.plugin.settings.comport = value; 241 | await this.plugin.saveSettings(); 242 | }); 243 | }); 244 | new Setting(containerEl) 245 | .setName(t("menuBehavior.keyMenu") as string) 246 | .setDesc(t("menuBehavior.keyMenuDesc") as string) 247 | .addText((text) => 248 | text 249 | .setPlaceholder("") 250 | .setValue(this.plugin.settings.disableKey) 251 | .onChange(async (value) => { 252 | this.plugin.settings.disableKey = value; 253 | await this.plugin.saveSettings(); 254 | }) 255 | ); 256 | } 257 | } 258 | -------------------------------------------------------------------------------- /metacopy/src/metadata.ts: -------------------------------------------------------------------------------- 1 | import {App, TFile} from "obsidian"; 2 | import { BehaviourLinkCreator, MetaCopySettings, MetaCopyValue } from "../settings"; 3 | import {disableMetaCopy} from "./pluginBehavior"; 4 | import { t } from "../i18n"; 5 | 6 | 7 | export function getMeta(app: App, file: TFile, settings: MetaCopySettings): MetaCopyValue { 8 | if (!file) { 9 | return null; 10 | } 11 | const meta = app.metadataCache.getFileCache(file)?.frontmatter; 12 | const defaultKey: MetaCopyValue = { 13 | frontmatterKey : "DefaultKey", 14 | correspondingValue : settings.defaultKeyLink, 15 | }; 16 | if (meta === undefined) { 17 | if (settings.behaviourLinkCreator !== BehaviourLinkCreator.OBSIDIAN_PATH) { 18 | return null; 19 | } else { 20 | return defaultKey; 21 | } 22 | } 23 | 24 | let linkValue = ""; 25 | let metaKey = ""; 26 | if (settings?.copyKey.length > 1) { 27 | for (let i = 0; i < settings.copyKey.length; i++) { 28 | if (meta[settings.copyKey[i]] !== undefined) { 29 | linkValue = meta[settings.copyKey[i]].trim(); 30 | metaKey = settings.copyKey[i].trim(); 31 | break; 32 | } 33 | } 34 | } else { 35 | linkValue = meta[settings.copyKey[0]]; 36 | metaKey = settings.copyKey[0]; 37 | } 38 | 39 | const metaKeys: MetaCopyValue = { 40 | frontmatterKey: metaKey, 41 | correspondingValue: linkValue 42 | }; 43 | if (!linkValue && settings.defaultKeyLink) { 44 | return defaultKey; 45 | } 46 | return metaKeys; 47 | } 48 | 49 | export function checkMeta(app: App, settings: MetaCopySettings) { 50 | const file = app.workspace.getActiveFile(); 51 | const meta = getMeta(app, file, settings); 52 | const checkKey = meta?.frontmatterKey === "DefaultKey" || meta?.frontmatterKey; 53 | return !!file && checkKey; 54 | } 55 | 56 | 57 | export function getAllMeta(app: App, file: TFile, settings: MetaCopySettings) { 58 | const metaValue: string[]=[]; 59 | const frontmatter = app.metadataCache.getCache(file.path).frontmatter; 60 | let listKey = settings.copyKey; 61 | listKey = listKey.map((x) => x.trim()); 62 | if (listKey.length > 0) { 63 | for (let i = 0; i < listKey.length; i++) { 64 | if (frontmatter[listKey[i]]) { 65 | metaValue.push(frontmatter[listKey[i].trim()]); 66 | } 67 | } 68 | } 69 | let mappedListKey = listKey.map((key, i) => ({ 70 | key, 71 | value: metaValue[i], 72 | })); 73 | mappedListKey = JSON.parse(JSON.stringify(mappedListKey)); 74 | Object.entries(mappedListKey).forEach(([, v]) => { 75 | if (v.value === undefined) { 76 | mappedListKey.remove(v); 77 | } 78 | }); 79 | 80 | if (settings.enableCopyLink) { 81 | mappedListKey[mappedListKey.length] = { 82 | key: t("command.suggesterCopyURL") as string, 83 | value: settings.defaultKeyLink 84 | }; 85 | } 86 | return mappedListKey; 87 | } 88 | -------------------------------------------------------------------------------- /metacopy/src/pluginBehavior.ts: -------------------------------------------------------------------------------- 1 | import {App, TFile} from "obsidian"; 2 | import { BehaviourLinkCreator, MetaCopySettings } from "../settings"; 3 | 4 | export function disableMetaCopy(app: App, settings: MetaCopySettings, file: TFile) { 5 | const toggle = settings.comport; 6 | const fileCache = app.metadataCache.getFileCache(file); 7 | const meta = fileCache?.frontmatter; 8 | if (!meta && settings.behaviourLinkCreator === BehaviourLinkCreator.OBSIDIAN_PATH) { 9 | return true; 10 | } 11 | if (toggle) { 12 | /* toggle : true ⇒ Disable on all file unless there is the frontmatterKey */ 13 | if (meta === undefined) { 14 | return false; /* Disable Metacopy */ 15 | } else return !!meta[settings.disableKey]; 16 | } else { 17 | if (meta === undefined) { 18 | return false; /* Disable Meta Copy ; there is no frontmatter... */ 19 | } else { 20 | return !meta[settings.disableKey]; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /metacopy/src/utils.ts: -------------------------------------------------------------------------------- 1 | import { App, TFile, Notice, TFolder, Vault, FrontMatterCache } from "obsidian"; 2 | import { BehaviourLinkCreator, MetaCopySettings, MetaCopyValue } from "../settings"; 3 | import {getMeta} from "./metadata"; 4 | import { StringFunc, t } from "../i18n"; 5 | 6 | function getTitleField( 7 | frontmatter: FrontMatterCache, 8 | file: TFile, 9 | settings: MetaCopySettings 10 | ): string { 11 | let fileName = file.name; 12 | if (!settings.useFrontMatterTitle) return fileName; 13 | if ( 14 | frontmatter && 15 | frontmatter[settings.frontmattertitleKey] && 16 | frontmatter[settings.frontmattertitleKey] !== file.name 17 | ) { 18 | 19 | fileName= frontmatter[settings.frontmattertitleKey] + ".md"; 20 | } 21 | return fileName; 22 | } 23 | 24 | 25 | export function createLink( 26 | file: TFile, 27 | settings: MetaCopySettings, 28 | metaCopy: MetaCopyValue, 29 | app: App, 30 | ) { 31 | let url = metaCopy.correspondingValue; 32 | const folderPath = checkSlash(url).replace(/(^\/|\/$)/, ""); 33 | const folder = folderPath.split("/").slice(-1)[0]; 34 | const meta = app.metadataCache.getFileCache(file)?.frontmatter; 35 | const cmd = t("command.copyURL") as string; 36 | const suggester = t("command.suggesterCopyURL") as string; 37 | if (settings) { 38 | let baseLink = settings.baseLink; 39 | if (meta && meta["baselink"] !== undefined) { 40 | baseLink = meta["baselink"]; 41 | } 42 | baseLink = checkSlash(baseLink); 43 | const folderNote = settings.folderNote; 44 | let fileName = getTitleField(meta, file, settings); 45 | if (meta.path) { 46 | url = baseLink + meta.path + regexOnFileName(fileName, settings); 47 | } 48 | else if (settings.behaviourLinkCreator === "categoryKey") { 49 | const keyLink = settings.keyLink; 50 | if ((metaCopy.frontmatterKey === keyLink) || (metaCopy.frontmatterKey == "DefaultKey") || (metaCopy.frontmatterKey == cmd) || (metaCopy.frontmatterKey == suggester)) { 51 | if (fileName.replace(".md", "") === folder && folderNote) { 52 | fileName = "/"; 53 | } else { 54 | fileName = "/" + fileName + "/"; 55 | } 56 | url = baseLink + folderPath + regexOnFileName(fileName, settings); 57 | } 58 | } else if (settings.behaviourLinkCreator === BehaviourLinkCreator.OBSIDIAN_PATH) { 59 | fileName = folderNoteIndexOBS(file, app.vault, settings, fileName); 60 | url = baseLink + settings.defaultKeyLink + fileName; 61 | } else { 62 | url = baseLink + settings.defaultKeyLink + "/" + regexOnFileName(fileName, settings) + "/"; 63 | } 64 | } 65 | if (settings.removeLinkPart) { 66 | for (const part of settings.removeLinkPart) { 67 | url = url.replace(part, ""); 68 | } 69 | } 70 | return encodeURI(url); 71 | } 72 | 73 | function folderNoteIndexOBS( 74 | file: TFile, 75 | vault: Vault, 76 | settings: MetaCopySettings, 77 | fileName: string 78 | ): string { 79 | const defaultPath = `/${file.parent.path}/${regexOnFileName(fileName, settings)}`; 80 | if (!settings.folderNote) return defaultPath; 81 | const folderParent = file.parent.name; 82 | if (fileName.replace(".md", "") === folderParent) return `/${file.parent.path}/`; 83 | const outsideFolder = vault.getAbstractFileByPath( 84 | file.path.replace(".md", "") 85 | ); 86 | if (outsideFolder && outsideFolder instanceof TFolder) { 87 | return `/${outsideFolder.path}/` ; 88 | } else { 89 | return defaultPath; 90 | } 91 | } 92 | 93 | export async function getValue( 94 | app: App, 95 | file: TFile, 96 | settings: MetaCopySettings 97 | ) { 98 | const meta: MetaCopyValue = getMeta(app, file, settings); 99 | if (!meta || meta.correspondingValue === undefined) { 100 | return false; 101 | } 102 | let value = meta.correspondingValue.toString(); 103 | if (value.split(",").length > 1) { 104 | value = "- " + value.replaceAll(",", "\n- "); 105 | } 106 | const metaCopyValue:MetaCopyValue = {frontmatterKey: meta.frontmatterKey, correspondingValue: value}; 107 | const linkValue = createLink(file, settings, metaCopyValue, app); 108 | await copy(linkValue, meta.frontmatterKey, settings); 109 | } 110 | 111 | export function checkSlash( 112 | link: string 113 | ) { 114 | const slash = link.match(/\/*$/); 115 | if (slash[0].length != 1) { 116 | link = link.replace(/\/*$/, "") + "/"; 117 | } 118 | return link; 119 | } 120 | 121 | export async function copy(content: string, item: string, settings: MetaCopySettings): Promise { 122 | await navigator.clipboard.writeText(content); 123 | let message = (t("command.metadataMessage") as StringFunc)(item); 124 | if (item == "DefaultKey" || item == settings.keyLink) { 125 | message = t("command.metadataMessageURL") as string; 126 | } 127 | new Notice(message); 128 | } 129 | 130 | /** 131 | * Apply a regex edition on the title. It can be used to remove special characters or to add a prefix or suffix 132 | * @param {string} fileName file name 133 | * @param {MetaCopySettings} settings Settings 134 | * @return {string} edited file name 135 | */ 136 | export function regexOnFileName(fileName: string, settings: MetaCopySettings): string { 137 | if (fileName === "/" && settings.folderNote) return fileName; 138 | fileName = fileName.replace(".md", ""); 139 | if (settings.titleRegex.length > 0) { 140 | const toReplace = settings.titleRegex; 141 | const replaceWith = settings.titleReplace; 142 | if (toReplace.match(/\/.+\//)) { 143 | const flagsRegex = toReplace.match(/\/([gimy]+)$/); 144 | const flags = flagsRegex ? Array.from(new Set(flagsRegex[1].split(""))).join("") : ""; 145 | const regex = new RegExp(toReplace.replace(/\/(.+)\/.*/, "$1"), flags); 146 | return fileName.replace( 147 | regex, 148 | replaceWith 149 | ); 150 | } else { 151 | return fileName.replaceAll( 152 | toReplace, 153 | replaceWith 154 | ); 155 | } 156 | } 157 | return fileName; 158 | } 159 | 160 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-metacopy", 3 | "version": "1.10.0", 4 | "description": "This is a plugin that copy the value of a frontmatter key.", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "esbuild metacopy/main.ts --bundle --external:obsidian --outdir=. --target=es2016 --format=cjs --sourcemap=inline --watch", 8 | "build": "esbuild metacopy/main.ts --bundle --external:obsidian --outdir=. --target=es2016 --format=cjs", 9 | "release": "commit-and-tag-version" 10 | }, 11 | "standard-version": { 12 | "t": "" 13 | }, 14 | "keywords": [], 15 | "author": "Mara", 16 | "license": "AGPL-3.0", 17 | "devDependencies": { 18 | "@types/node": "^20.4.5", 19 | "@typescript-eslint/eslint-plugin": "^6.2.0", 20 | "@typescript-eslint/parser": "^6.2.0", 21 | "esbuild": "0.18.17", 22 | "eslint": "^8.46.0", 23 | "obsidian": "^1.3.5", 24 | "prettier": "3.0.0", 25 | "tslib": "2.6.1", 26 | "typescript": "5.1.6" 27 | }, 28 | "dependencies": { 29 | "commit-and-tag-version": "^11.2.2" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/node': ^20.4.5 5 | '@typescript-eslint/eslint-plugin': ^6.2.0 6 | '@typescript-eslint/parser': ^6.2.0 7 | commit-and-tag-version: ^11.2.2 8 | esbuild: 0.18.17 9 | eslint: ^8.46.0 10 | obsidian: ^1.3.5 11 | prettier: 3.0.0 12 | tslib: 2.6.1 13 | typescript: 5.1.6 14 | 15 | dependencies: 16 | commit-and-tag-version: 11.2.2 17 | 18 | devDependencies: 19 | '@types/node': 20.4.5 20 | '@typescript-eslint/eslint-plugin': 6.2.0_idzvfmj5qli4h3jfxnf522w3fe 21 | '@typescript-eslint/parser': 6.2.0_7haavtekmro7ptbnqmctjaodju 22 | esbuild: 0.18.17 23 | eslint: 8.46.0 24 | obsidian: 1.3.5_qhkmntjgjdxkyszk3etqrkzvlm 25 | prettier: 3.0.0 26 | tslib: 2.6.1 27 | typescript: 5.1.6 28 | 29 | packages: 30 | 31 | /@aashutoshrathi/word-wrap/1.2.6: 32 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 33 | engines: {node: '>=0.10.0'} 34 | dev: true 35 | 36 | /@babel/code-frame/7.22.5: 37 | resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} 38 | engines: {node: '>=6.9.0'} 39 | dependencies: 40 | '@babel/highlight': 7.22.5 41 | dev: false 42 | 43 | /@babel/helper-validator-identifier/7.22.5: 44 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 45 | engines: {node: '>=6.9.0'} 46 | dev: false 47 | 48 | /@babel/highlight/7.22.5: 49 | resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} 50 | engines: {node: '>=6.9.0'} 51 | dependencies: 52 | '@babel/helper-validator-identifier': 7.22.5 53 | chalk: 2.4.2 54 | js-tokens: 4.0.0 55 | dev: false 56 | 57 | /@codemirror/state/6.2.1: 58 | resolution: {integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==} 59 | dev: true 60 | 61 | /@codemirror/view/6.15.3: 62 | resolution: {integrity: sha512-chNgR8H7Ipx7AZUt0+Kknk7BCow/ron3mHd1VZdM7hQXiI79+UlWqcxpCiexTxZQ+iSkqndk3HHAclJOcjSuog==} 63 | dependencies: 64 | '@codemirror/state': 6.2.1 65 | style-mod: 4.0.3 66 | w3c-keyname: 2.2.8 67 | dev: true 68 | 69 | /@esbuild/android-arm/0.18.17: 70 | resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} 71 | engines: {node: '>=12'} 72 | cpu: [arm] 73 | os: [android] 74 | requiresBuild: true 75 | dev: true 76 | optional: true 77 | 78 | /@esbuild/android-arm64/0.18.17: 79 | resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} 80 | engines: {node: '>=12'} 81 | cpu: [arm64] 82 | os: [android] 83 | requiresBuild: true 84 | dev: true 85 | optional: true 86 | 87 | /@esbuild/android-x64/0.18.17: 88 | resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} 89 | engines: {node: '>=12'} 90 | cpu: [x64] 91 | os: [android] 92 | requiresBuild: true 93 | dev: true 94 | optional: true 95 | 96 | /@esbuild/darwin-arm64/0.18.17: 97 | resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} 98 | engines: {node: '>=12'} 99 | cpu: [arm64] 100 | os: [darwin] 101 | requiresBuild: true 102 | dev: true 103 | optional: true 104 | 105 | /@esbuild/darwin-x64/0.18.17: 106 | resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} 107 | engines: {node: '>=12'} 108 | cpu: [x64] 109 | os: [darwin] 110 | requiresBuild: true 111 | dev: true 112 | optional: true 113 | 114 | /@esbuild/freebsd-arm64/0.18.17: 115 | resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} 116 | engines: {node: '>=12'} 117 | cpu: [arm64] 118 | os: [freebsd] 119 | requiresBuild: true 120 | dev: true 121 | optional: true 122 | 123 | /@esbuild/freebsd-x64/0.18.17: 124 | resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} 125 | engines: {node: '>=12'} 126 | cpu: [x64] 127 | os: [freebsd] 128 | requiresBuild: true 129 | dev: true 130 | optional: true 131 | 132 | /@esbuild/linux-arm/0.18.17: 133 | resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} 134 | engines: {node: '>=12'} 135 | cpu: [arm] 136 | os: [linux] 137 | requiresBuild: true 138 | dev: true 139 | optional: true 140 | 141 | /@esbuild/linux-arm64/0.18.17: 142 | resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} 143 | engines: {node: '>=12'} 144 | cpu: [arm64] 145 | os: [linux] 146 | requiresBuild: true 147 | dev: true 148 | optional: true 149 | 150 | /@esbuild/linux-ia32/0.18.17: 151 | resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} 152 | engines: {node: '>=12'} 153 | cpu: [ia32] 154 | os: [linux] 155 | requiresBuild: true 156 | dev: true 157 | optional: true 158 | 159 | /@esbuild/linux-loong64/0.18.17: 160 | resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} 161 | engines: {node: '>=12'} 162 | cpu: [loong64] 163 | os: [linux] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | /@esbuild/linux-mips64el/0.18.17: 169 | resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} 170 | engines: {node: '>=12'} 171 | cpu: [mips64el] 172 | os: [linux] 173 | requiresBuild: true 174 | dev: true 175 | optional: true 176 | 177 | /@esbuild/linux-ppc64/0.18.17: 178 | resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} 179 | engines: {node: '>=12'} 180 | cpu: [ppc64] 181 | os: [linux] 182 | requiresBuild: true 183 | dev: true 184 | optional: true 185 | 186 | /@esbuild/linux-riscv64/0.18.17: 187 | resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} 188 | engines: {node: '>=12'} 189 | cpu: [riscv64] 190 | os: [linux] 191 | requiresBuild: true 192 | dev: true 193 | optional: true 194 | 195 | /@esbuild/linux-s390x/0.18.17: 196 | resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} 197 | engines: {node: '>=12'} 198 | cpu: [s390x] 199 | os: [linux] 200 | requiresBuild: true 201 | dev: true 202 | optional: true 203 | 204 | /@esbuild/linux-x64/0.18.17: 205 | resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} 206 | engines: {node: '>=12'} 207 | cpu: [x64] 208 | os: [linux] 209 | requiresBuild: true 210 | dev: true 211 | optional: true 212 | 213 | /@esbuild/netbsd-x64/0.18.17: 214 | resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} 215 | engines: {node: '>=12'} 216 | cpu: [x64] 217 | os: [netbsd] 218 | requiresBuild: true 219 | dev: true 220 | optional: true 221 | 222 | /@esbuild/openbsd-x64/0.18.17: 223 | resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} 224 | engines: {node: '>=12'} 225 | cpu: [x64] 226 | os: [openbsd] 227 | requiresBuild: true 228 | dev: true 229 | optional: true 230 | 231 | /@esbuild/sunos-x64/0.18.17: 232 | resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} 233 | engines: {node: '>=12'} 234 | cpu: [x64] 235 | os: [sunos] 236 | requiresBuild: true 237 | dev: true 238 | optional: true 239 | 240 | /@esbuild/win32-arm64/0.18.17: 241 | resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} 242 | engines: {node: '>=12'} 243 | cpu: [arm64] 244 | os: [win32] 245 | requiresBuild: true 246 | dev: true 247 | optional: true 248 | 249 | /@esbuild/win32-ia32/0.18.17: 250 | resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} 251 | engines: {node: '>=12'} 252 | cpu: [ia32] 253 | os: [win32] 254 | requiresBuild: true 255 | dev: true 256 | optional: true 257 | 258 | /@esbuild/win32-x64/0.18.17: 259 | resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} 260 | engines: {node: '>=12'} 261 | cpu: [x64] 262 | os: [win32] 263 | requiresBuild: true 264 | dev: true 265 | optional: true 266 | 267 | /@eslint-community/eslint-utils/4.4.0_eslint@8.46.0: 268 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 269 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 270 | peerDependencies: 271 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 272 | dependencies: 273 | eslint: 8.46.0 274 | eslint-visitor-keys: 3.4.2 275 | dev: true 276 | 277 | /@eslint-community/regexpp/4.6.2: 278 | resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} 279 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 280 | dev: true 281 | 282 | /@eslint/eslintrc/2.1.1: 283 | resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} 284 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 285 | dependencies: 286 | ajv: 6.12.6 287 | debug: 4.3.4 288 | espree: 9.6.1 289 | globals: 13.20.0 290 | ignore: 5.2.4 291 | import-fresh: 3.3.0 292 | js-yaml: 4.1.0 293 | minimatch: 3.1.2 294 | strip-json-comments: 3.1.1 295 | transitivePeerDependencies: 296 | - supports-color 297 | dev: true 298 | 299 | /@eslint/js/8.46.0: 300 | resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} 301 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 302 | dev: true 303 | 304 | /@humanwhocodes/config-array/0.11.10: 305 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 306 | engines: {node: '>=10.10.0'} 307 | dependencies: 308 | '@humanwhocodes/object-schema': 1.2.1 309 | debug: 4.3.4 310 | minimatch: 3.1.2 311 | transitivePeerDependencies: 312 | - supports-color 313 | dev: true 314 | 315 | /@humanwhocodes/module-importer/1.0.1: 316 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 317 | engines: {node: '>=12.22'} 318 | dev: true 319 | 320 | /@humanwhocodes/object-schema/1.2.1: 321 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 322 | dev: true 323 | 324 | /@hutson/parse-repository-url/3.0.2: 325 | resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} 326 | engines: {node: '>=6.9.0'} 327 | dev: false 328 | 329 | /@nodelib/fs.scandir/2.1.5: 330 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 331 | engines: {node: '>= 8'} 332 | dependencies: 333 | '@nodelib/fs.stat': 2.0.5 334 | run-parallel: 1.2.0 335 | dev: true 336 | 337 | /@nodelib/fs.stat/2.0.5: 338 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 339 | engines: {node: '>= 8'} 340 | dev: true 341 | 342 | /@nodelib/fs.walk/1.2.8: 343 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 344 | engines: {node: '>= 8'} 345 | dependencies: 346 | '@nodelib/fs.scandir': 2.1.5 347 | fastq: 1.15.0 348 | dev: true 349 | 350 | /@types/codemirror/5.60.8: 351 | resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} 352 | dependencies: 353 | '@types/tern': 0.23.4 354 | dev: true 355 | 356 | /@types/estree/1.0.1: 357 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} 358 | dev: true 359 | 360 | /@types/json-schema/7.0.12: 361 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 362 | dev: true 363 | 364 | /@types/minimist/1.2.2: 365 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 366 | dev: false 367 | 368 | /@types/node/20.4.5: 369 | resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==} 370 | dev: true 371 | 372 | /@types/normalize-package-data/2.4.1: 373 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 374 | dev: false 375 | 376 | /@types/semver/7.5.0: 377 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 378 | dev: true 379 | 380 | /@types/tern/0.23.4: 381 | resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} 382 | dependencies: 383 | '@types/estree': 1.0.1 384 | dev: true 385 | 386 | /@typescript-eslint/eslint-plugin/6.2.0_idzvfmj5qli4h3jfxnf522w3fe: 387 | resolution: {integrity: sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ==} 388 | engines: {node: ^16.0.0 || >=18.0.0} 389 | peerDependencies: 390 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 391 | eslint: ^7.0.0 || ^8.0.0 392 | typescript: '*' 393 | peerDependenciesMeta: 394 | typescript: 395 | optional: true 396 | dependencies: 397 | '@eslint-community/regexpp': 4.6.2 398 | '@typescript-eslint/parser': 6.2.0_7haavtekmro7ptbnqmctjaodju 399 | '@typescript-eslint/scope-manager': 6.2.0 400 | '@typescript-eslint/type-utils': 6.2.0_7haavtekmro7ptbnqmctjaodju 401 | '@typescript-eslint/utils': 6.2.0_7haavtekmro7ptbnqmctjaodju 402 | '@typescript-eslint/visitor-keys': 6.2.0 403 | debug: 4.3.4 404 | eslint: 8.46.0 405 | graphemer: 1.4.0 406 | ignore: 5.2.4 407 | natural-compare: 1.4.0 408 | natural-compare-lite: 1.4.0 409 | semver: 7.5.4 410 | ts-api-utils: 1.0.1_typescript@5.1.6 411 | typescript: 5.1.6 412 | transitivePeerDependencies: 413 | - supports-color 414 | dev: true 415 | 416 | /@typescript-eslint/parser/6.2.0_7haavtekmro7ptbnqmctjaodju: 417 | resolution: {integrity: sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g==} 418 | engines: {node: ^16.0.0 || >=18.0.0} 419 | peerDependencies: 420 | eslint: ^7.0.0 || ^8.0.0 421 | typescript: '*' 422 | peerDependenciesMeta: 423 | typescript: 424 | optional: true 425 | dependencies: 426 | '@typescript-eslint/scope-manager': 6.2.0 427 | '@typescript-eslint/types': 6.2.0 428 | '@typescript-eslint/typescript-estree': 6.2.0_typescript@5.1.6 429 | '@typescript-eslint/visitor-keys': 6.2.0 430 | debug: 4.3.4 431 | eslint: 8.46.0 432 | typescript: 5.1.6 433 | transitivePeerDependencies: 434 | - supports-color 435 | dev: true 436 | 437 | /@typescript-eslint/scope-manager/6.2.0: 438 | resolution: {integrity: sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==} 439 | engines: {node: ^16.0.0 || >=18.0.0} 440 | dependencies: 441 | '@typescript-eslint/types': 6.2.0 442 | '@typescript-eslint/visitor-keys': 6.2.0 443 | dev: true 444 | 445 | /@typescript-eslint/type-utils/6.2.0_7haavtekmro7ptbnqmctjaodju: 446 | resolution: {integrity: sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw==} 447 | engines: {node: ^16.0.0 || >=18.0.0} 448 | peerDependencies: 449 | eslint: ^7.0.0 || ^8.0.0 450 | typescript: '*' 451 | peerDependenciesMeta: 452 | typescript: 453 | optional: true 454 | dependencies: 455 | '@typescript-eslint/typescript-estree': 6.2.0_typescript@5.1.6 456 | '@typescript-eslint/utils': 6.2.0_7haavtekmro7ptbnqmctjaodju 457 | debug: 4.3.4 458 | eslint: 8.46.0 459 | ts-api-utils: 1.0.1_typescript@5.1.6 460 | typescript: 5.1.6 461 | transitivePeerDependencies: 462 | - supports-color 463 | dev: true 464 | 465 | /@typescript-eslint/types/6.2.0: 466 | resolution: {integrity: sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==} 467 | engines: {node: ^16.0.0 || >=18.0.0} 468 | dev: true 469 | 470 | /@typescript-eslint/typescript-estree/6.2.0_typescript@5.1.6: 471 | resolution: {integrity: sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w==} 472 | engines: {node: ^16.0.0 || >=18.0.0} 473 | peerDependencies: 474 | typescript: '*' 475 | peerDependenciesMeta: 476 | typescript: 477 | optional: true 478 | dependencies: 479 | '@typescript-eslint/types': 6.2.0 480 | '@typescript-eslint/visitor-keys': 6.2.0 481 | debug: 4.3.4 482 | globby: 11.1.0 483 | is-glob: 4.0.3 484 | semver: 7.5.4 485 | ts-api-utils: 1.0.1_typescript@5.1.6 486 | typescript: 5.1.6 487 | transitivePeerDependencies: 488 | - supports-color 489 | dev: true 490 | 491 | /@typescript-eslint/utils/6.2.0_7haavtekmro7ptbnqmctjaodju: 492 | resolution: {integrity: sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ==} 493 | engines: {node: ^16.0.0 || >=18.0.0} 494 | peerDependencies: 495 | eslint: ^7.0.0 || ^8.0.0 496 | dependencies: 497 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.46.0 498 | '@types/json-schema': 7.0.12 499 | '@types/semver': 7.5.0 500 | '@typescript-eslint/scope-manager': 6.2.0 501 | '@typescript-eslint/types': 6.2.0 502 | '@typescript-eslint/typescript-estree': 6.2.0_typescript@5.1.6 503 | eslint: 8.46.0 504 | semver: 7.5.4 505 | transitivePeerDependencies: 506 | - supports-color 507 | - typescript 508 | dev: true 509 | 510 | /@typescript-eslint/visitor-keys/6.2.0: 511 | resolution: {integrity: sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==} 512 | engines: {node: ^16.0.0 || >=18.0.0} 513 | dependencies: 514 | '@typescript-eslint/types': 6.2.0 515 | eslint-visitor-keys: 3.4.2 516 | dev: true 517 | 518 | /JSONStream/1.3.5: 519 | resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} 520 | hasBin: true 521 | dependencies: 522 | jsonparse: 1.3.1 523 | through: 2.3.8 524 | dev: false 525 | 526 | /acorn-jsx/5.3.2_acorn@8.10.0: 527 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 528 | peerDependencies: 529 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 530 | dependencies: 531 | acorn: 8.10.0 532 | dev: true 533 | 534 | /acorn/8.10.0: 535 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 536 | engines: {node: '>=0.4.0'} 537 | hasBin: true 538 | dev: true 539 | 540 | /add-stream/1.0.0: 541 | resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} 542 | dev: false 543 | 544 | /ajv/6.12.6: 545 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 546 | dependencies: 547 | fast-deep-equal: 3.1.3 548 | fast-json-stable-stringify: 2.1.0 549 | json-schema-traverse: 0.4.1 550 | uri-js: 4.4.1 551 | dev: true 552 | 553 | /ansi-regex/5.0.1: 554 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 555 | engines: {node: '>=8'} 556 | 557 | /ansi-styles/3.2.1: 558 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 559 | engines: {node: '>=4'} 560 | dependencies: 561 | color-convert: 1.9.3 562 | dev: false 563 | 564 | /ansi-styles/4.3.0: 565 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 566 | engines: {node: '>=8'} 567 | dependencies: 568 | color-convert: 2.0.1 569 | 570 | /argparse/2.0.1: 571 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 572 | dev: true 573 | 574 | /array-ify/1.0.0: 575 | resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} 576 | dev: false 577 | 578 | /array-union/2.1.0: 579 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 580 | engines: {node: '>=8'} 581 | dev: true 582 | 583 | /arrify/1.0.1: 584 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 585 | engines: {node: '>=0.10.0'} 586 | dev: false 587 | 588 | /balanced-match/1.0.2: 589 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 590 | 591 | /brace-expansion/1.1.11: 592 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 593 | dependencies: 594 | balanced-match: 1.0.2 595 | concat-map: 0.0.1 596 | 597 | /braces/3.0.2: 598 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 599 | engines: {node: '>=8'} 600 | dependencies: 601 | fill-range: 7.0.1 602 | dev: true 603 | 604 | /buffer-from/1.1.2: 605 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 606 | dev: false 607 | 608 | /callsites/3.1.0: 609 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 610 | engines: {node: '>=6'} 611 | dev: true 612 | 613 | /camelcase-keys/6.2.2: 614 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 615 | engines: {node: '>=8'} 616 | dependencies: 617 | camelcase: 5.3.1 618 | map-obj: 4.3.0 619 | quick-lru: 4.0.1 620 | dev: false 621 | 622 | /camelcase/5.3.1: 623 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 624 | engines: {node: '>=6'} 625 | dev: false 626 | 627 | /chalk/2.4.2: 628 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 629 | engines: {node: '>=4'} 630 | dependencies: 631 | ansi-styles: 3.2.1 632 | escape-string-regexp: 1.0.5 633 | supports-color: 5.5.0 634 | dev: false 635 | 636 | /chalk/4.1.2: 637 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 638 | engines: {node: '>=10'} 639 | dependencies: 640 | ansi-styles: 4.3.0 641 | supports-color: 7.2.0 642 | dev: true 643 | 644 | /cliui/7.0.4: 645 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 646 | dependencies: 647 | string-width: 4.2.3 648 | strip-ansi: 6.0.1 649 | wrap-ansi: 7.0.0 650 | dev: false 651 | 652 | /cliui/8.0.1: 653 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 654 | engines: {node: '>=12'} 655 | dependencies: 656 | string-width: 4.2.3 657 | strip-ansi: 6.0.1 658 | wrap-ansi: 7.0.0 659 | dev: false 660 | 661 | /color-convert/1.9.3: 662 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 663 | dependencies: 664 | color-name: 1.1.3 665 | dev: false 666 | 667 | /color-convert/2.0.1: 668 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 669 | engines: {node: '>=7.0.0'} 670 | dependencies: 671 | color-name: 1.1.4 672 | 673 | /color-name/1.1.3: 674 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 675 | dev: false 676 | 677 | /color-name/1.1.4: 678 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 679 | 680 | /commit-and-tag-version/11.2.2: 681 | resolution: {integrity: sha512-pqtTvRZFSqsGevhdcCvZVhzoSC56OeWZxhVzVDOWu97FfMJR4xUmpirRZcGqmTsDWCTxnm+UVl9/slN7OGO82A==} 682 | engines: {node: '>=14'} 683 | hasBin: true 684 | dependencies: 685 | chalk: 2.4.2 686 | conventional-changelog: 3.1.25 687 | conventional-changelog-config-spec: 2.1.0 688 | conventional-changelog-conventionalcommits: 6.1.0 689 | conventional-recommended-bump: 7.0.1 690 | detect-indent: 6.1.0 691 | detect-newline: 3.1.0 692 | dotgitignore: 2.1.0 693 | figures: 3.2.0 694 | find-up: 5.0.0 695 | git-semver-tags: 5.0.1 696 | semver: 7.5.4 697 | yargs: 17.7.2 698 | dev: false 699 | 700 | /compare-func/2.0.0: 701 | resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} 702 | dependencies: 703 | array-ify: 1.0.0 704 | dot-prop: 5.3.0 705 | dev: false 706 | 707 | /concat-map/0.0.1: 708 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 709 | 710 | /concat-stream/2.0.0: 711 | resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} 712 | engines: {'0': node >= 6.0} 713 | dependencies: 714 | buffer-from: 1.1.2 715 | inherits: 2.0.4 716 | readable-stream: 3.6.2 717 | typedarray: 0.0.6 718 | dev: false 719 | 720 | /conventional-changelog-angular/5.0.13: 721 | resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} 722 | engines: {node: '>=10'} 723 | dependencies: 724 | compare-func: 2.0.0 725 | q: 1.5.1 726 | dev: false 727 | 728 | /conventional-changelog-atom/2.0.8: 729 | resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==} 730 | engines: {node: '>=10'} 731 | dependencies: 732 | q: 1.5.1 733 | dev: false 734 | 735 | /conventional-changelog-codemirror/2.0.8: 736 | resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==} 737 | engines: {node: '>=10'} 738 | dependencies: 739 | q: 1.5.1 740 | dev: false 741 | 742 | /conventional-changelog-config-spec/2.1.0: 743 | resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} 744 | dev: false 745 | 746 | /conventional-changelog-conventionalcommits/4.6.3: 747 | resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} 748 | engines: {node: '>=10'} 749 | dependencies: 750 | compare-func: 2.0.0 751 | lodash: 4.17.21 752 | q: 1.5.1 753 | dev: false 754 | 755 | /conventional-changelog-conventionalcommits/6.1.0: 756 | resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} 757 | engines: {node: '>=14'} 758 | dependencies: 759 | compare-func: 2.0.0 760 | dev: false 761 | 762 | /conventional-changelog-core/4.2.4: 763 | resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} 764 | engines: {node: '>=10'} 765 | dependencies: 766 | add-stream: 1.0.0 767 | conventional-changelog-writer: 5.0.1 768 | conventional-commits-parser: 3.2.4 769 | dateformat: 3.0.3 770 | get-pkg-repo: 4.2.1 771 | git-raw-commits: 2.0.11 772 | git-remote-origin-url: 2.0.0 773 | git-semver-tags: 4.1.1 774 | lodash: 4.17.21 775 | normalize-package-data: 3.0.3 776 | q: 1.5.1 777 | read-pkg: 3.0.0 778 | read-pkg-up: 3.0.0 779 | through2: 4.0.2 780 | dev: false 781 | 782 | /conventional-changelog-ember/2.0.9: 783 | resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==} 784 | engines: {node: '>=10'} 785 | dependencies: 786 | q: 1.5.1 787 | dev: false 788 | 789 | /conventional-changelog-eslint/3.0.9: 790 | resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==} 791 | engines: {node: '>=10'} 792 | dependencies: 793 | q: 1.5.1 794 | dev: false 795 | 796 | /conventional-changelog-express/2.0.6: 797 | resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==} 798 | engines: {node: '>=10'} 799 | dependencies: 800 | q: 1.5.1 801 | dev: false 802 | 803 | /conventional-changelog-jquery/3.0.11: 804 | resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==} 805 | engines: {node: '>=10'} 806 | dependencies: 807 | q: 1.5.1 808 | dev: false 809 | 810 | /conventional-changelog-jshint/2.0.9: 811 | resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==} 812 | engines: {node: '>=10'} 813 | dependencies: 814 | compare-func: 2.0.0 815 | q: 1.5.1 816 | dev: false 817 | 818 | /conventional-changelog-preset-loader/2.3.4: 819 | resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} 820 | engines: {node: '>=10'} 821 | dev: false 822 | 823 | /conventional-changelog-preset-loader/3.0.0: 824 | resolution: {integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==} 825 | engines: {node: '>=14'} 826 | dev: false 827 | 828 | /conventional-changelog-writer/5.0.1: 829 | resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} 830 | engines: {node: '>=10'} 831 | hasBin: true 832 | dependencies: 833 | conventional-commits-filter: 2.0.7 834 | dateformat: 3.0.3 835 | handlebars: 4.7.7 836 | json-stringify-safe: 5.0.1 837 | lodash: 4.17.21 838 | meow: 8.1.2 839 | semver: 6.3.1 840 | split: 1.0.1 841 | through2: 4.0.2 842 | dev: false 843 | 844 | /conventional-changelog/3.1.25: 845 | resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==} 846 | engines: {node: '>=10'} 847 | dependencies: 848 | conventional-changelog-angular: 5.0.13 849 | conventional-changelog-atom: 2.0.8 850 | conventional-changelog-codemirror: 2.0.8 851 | conventional-changelog-conventionalcommits: 4.6.3 852 | conventional-changelog-core: 4.2.4 853 | conventional-changelog-ember: 2.0.9 854 | conventional-changelog-eslint: 3.0.9 855 | conventional-changelog-express: 2.0.6 856 | conventional-changelog-jquery: 3.0.11 857 | conventional-changelog-jshint: 2.0.9 858 | conventional-changelog-preset-loader: 2.3.4 859 | dev: false 860 | 861 | /conventional-commits-filter/2.0.7: 862 | resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} 863 | engines: {node: '>=10'} 864 | dependencies: 865 | lodash.ismatch: 4.4.0 866 | modify-values: 1.0.1 867 | dev: false 868 | 869 | /conventional-commits-filter/3.0.0: 870 | resolution: {integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==} 871 | engines: {node: '>=14'} 872 | dependencies: 873 | lodash.ismatch: 4.4.0 874 | modify-values: 1.0.1 875 | dev: false 876 | 877 | /conventional-commits-parser/3.2.4: 878 | resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} 879 | engines: {node: '>=10'} 880 | hasBin: true 881 | dependencies: 882 | JSONStream: 1.3.5 883 | is-text-path: 1.0.1 884 | lodash: 4.17.21 885 | meow: 8.1.2 886 | split2: 3.2.2 887 | through2: 4.0.2 888 | dev: false 889 | 890 | /conventional-commits-parser/4.0.0: 891 | resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} 892 | engines: {node: '>=14'} 893 | hasBin: true 894 | dependencies: 895 | JSONStream: 1.3.5 896 | is-text-path: 1.0.1 897 | meow: 8.1.2 898 | split2: 3.2.2 899 | dev: false 900 | 901 | /conventional-recommended-bump/7.0.1: 902 | resolution: {integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==} 903 | engines: {node: '>=14'} 904 | hasBin: true 905 | dependencies: 906 | concat-stream: 2.0.0 907 | conventional-changelog-preset-loader: 3.0.0 908 | conventional-commits-filter: 3.0.0 909 | conventional-commits-parser: 4.0.0 910 | git-raw-commits: 3.0.0 911 | git-semver-tags: 5.0.1 912 | meow: 8.1.2 913 | dev: false 914 | 915 | /core-util-is/1.0.3: 916 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 917 | dev: false 918 | 919 | /cross-spawn/7.0.3: 920 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 921 | engines: {node: '>= 8'} 922 | dependencies: 923 | path-key: 3.1.1 924 | shebang-command: 2.0.0 925 | which: 2.0.2 926 | dev: true 927 | 928 | /dargs/7.0.0: 929 | resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} 930 | engines: {node: '>=8'} 931 | dev: false 932 | 933 | /dateformat/3.0.3: 934 | resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} 935 | dev: false 936 | 937 | /debug/4.3.4: 938 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 939 | engines: {node: '>=6.0'} 940 | peerDependencies: 941 | supports-color: '*' 942 | peerDependenciesMeta: 943 | supports-color: 944 | optional: true 945 | dependencies: 946 | ms: 2.1.2 947 | dev: true 948 | 949 | /decamelize-keys/1.1.1: 950 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 951 | engines: {node: '>=0.10.0'} 952 | dependencies: 953 | decamelize: 1.2.0 954 | map-obj: 1.0.1 955 | dev: false 956 | 957 | /decamelize/1.2.0: 958 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 959 | engines: {node: '>=0.10.0'} 960 | dev: false 961 | 962 | /deep-is/0.1.4: 963 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 964 | dev: true 965 | 966 | /detect-indent/6.1.0: 967 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 968 | engines: {node: '>=8'} 969 | dev: false 970 | 971 | /detect-newline/3.1.0: 972 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 973 | engines: {node: '>=8'} 974 | dev: false 975 | 976 | /dir-glob/3.0.1: 977 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 978 | engines: {node: '>=8'} 979 | dependencies: 980 | path-type: 4.0.0 981 | dev: true 982 | 983 | /doctrine/3.0.0: 984 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 985 | engines: {node: '>=6.0.0'} 986 | dependencies: 987 | esutils: 2.0.3 988 | dev: true 989 | 990 | /dot-prop/5.3.0: 991 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 992 | engines: {node: '>=8'} 993 | dependencies: 994 | is-obj: 2.0.0 995 | dev: false 996 | 997 | /dotgitignore/2.1.0: 998 | resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} 999 | engines: {node: '>=6'} 1000 | dependencies: 1001 | find-up: 3.0.0 1002 | minimatch: 3.1.2 1003 | dev: false 1004 | 1005 | /emoji-regex/8.0.0: 1006 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1007 | dev: false 1008 | 1009 | /error-ex/1.3.2: 1010 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1011 | dependencies: 1012 | is-arrayish: 0.2.1 1013 | dev: false 1014 | 1015 | /esbuild/0.18.17: 1016 | resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} 1017 | engines: {node: '>=12'} 1018 | hasBin: true 1019 | requiresBuild: true 1020 | optionalDependencies: 1021 | '@esbuild/android-arm': 0.18.17 1022 | '@esbuild/android-arm64': 0.18.17 1023 | '@esbuild/android-x64': 0.18.17 1024 | '@esbuild/darwin-arm64': 0.18.17 1025 | '@esbuild/darwin-x64': 0.18.17 1026 | '@esbuild/freebsd-arm64': 0.18.17 1027 | '@esbuild/freebsd-x64': 0.18.17 1028 | '@esbuild/linux-arm': 0.18.17 1029 | '@esbuild/linux-arm64': 0.18.17 1030 | '@esbuild/linux-ia32': 0.18.17 1031 | '@esbuild/linux-loong64': 0.18.17 1032 | '@esbuild/linux-mips64el': 0.18.17 1033 | '@esbuild/linux-ppc64': 0.18.17 1034 | '@esbuild/linux-riscv64': 0.18.17 1035 | '@esbuild/linux-s390x': 0.18.17 1036 | '@esbuild/linux-x64': 0.18.17 1037 | '@esbuild/netbsd-x64': 0.18.17 1038 | '@esbuild/openbsd-x64': 0.18.17 1039 | '@esbuild/sunos-x64': 0.18.17 1040 | '@esbuild/win32-arm64': 0.18.17 1041 | '@esbuild/win32-ia32': 0.18.17 1042 | '@esbuild/win32-x64': 0.18.17 1043 | dev: true 1044 | 1045 | /escalade/3.1.1: 1046 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1047 | engines: {node: '>=6'} 1048 | dev: false 1049 | 1050 | /escape-string-regexp/1.0.5: 1051 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1052 | engines: {node: '>=0.8.0'} 1053 | dev: false 1054 | 1055 | /escape-string-regexp/4.0.0: 1056 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1057 | engines: {node: '>=10'} 1058 | dev: true 1059 | 1060 | /eslint-scope/7.2.2: 1061 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1062 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1063 | dependencies: 1064 | esrecurse: 4.3.0 1065 | estraverse: 5.3.0 1066 | dev: true 1067 | 1068 | /eslint-visitor-keys/3.4.2: 1069 | resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} 1070 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1071 | dev: true 1072 | 1073 | /eslint/8.46.0: 1074 | resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} 1075 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1076 | hasBin: true 1077 | dependencies: 1078 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.46.0 1079 | '@eslint-community/regexpp': 4.6.2 1080 | '@eslint/eslintrc': 2.1.1 1081 | '@eslint/js': 8.46.0 1082 | '@humanwhocodes/config-array': 0.11.10 1083 | '@humanwhocodes/module-importer': 1.0.1 1084 | '@nodelib/fs.walk': 1.2.8 1085 | ajv: 6.12.6 1086 | chalk: 4.1.2 1087 | cross-spawn: 7.0.3 1088 | debug: 4.3.4 1089 | doctrine: 3.0.0 1090 | escape-string-regexp: 4.0.0 1091 | eslint-scope: 7.2.2 1092 | eslint-visitor-keys: 3.4.2 1093 | espree: 9.6.1 1094 | esquery: 1.5.0 1095 | esutils: 2.0.3 1096 | fast-deep-equal: 3.1.3 1097 | file-entry-cache: 6.0.1 1098 | find-up: 5.0.0 1099 | glob-parent: 6.0.2 1100 | globals: 13.20.0 1101 | graphemer: 1.4.0 1102 | ignore: 5.2.4 1103 | imurmurhash: 0.1.4 1104 | is-glob: 4.0.3 1105 | is-path-inside: 3.0.3 1106 | js-yaml: 4.1.0 1107 | json-stable-stringify-without-jsonify: 1.0.1 1108 | levn: 0.4.1 1109 | lodash.merge: 4.6.2 1110 | minimatch: 3.1.2 1111 | natural-compare: 1.4.0 1112 | optionator: 0.9.3 1113 | strip-ansi: 6.0.1 1114 | text-table: 0.2.0 1115 | transitivePeerDependencies: 1116 | - supports-color 1117 | dev: true 1118 | 1119 | /espree/9.6.1: 1120 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1121 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1122 | dependencies: 1123 | acorn: 8.10.0 1124 | acorn-jsx: 5.3.2_acorn@8.10.0 1125 | eslint-visitor-keys: 3.4.2 1126 | dev: true 1127 | 1128 | /esquery/1.5.0: 1129 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1130 | engines: {node: '>=0.10'} 1131 | dependencies: 1132 | estraverse: 5.3.0 1133 | dev: true 1134 | 1135 | /esrecurse/4.3.0: 1136 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1137 | engines: {node: '>=4.0'} 1138 | dependencies: 1139 | estraverse: 5.3.0 1140 | dev: true 1141 | 1142 | /estraverse/5.3.0: 1143 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1144 | engines: {node: '>=4.0'} 1145 | dev: true 1146 | 1147 | /esutils/2.0.3: 1148 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1149 | engines: {node: '>=0.10.0'} 1150 | dev: true 1151 | 1152 | /fast-deep-equal/3.1.3: 1153 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1154 | dev: true 1155 | 1156 | /fast-glob/3.3.1: 1157 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1158 | engines: {node: '>=8.6.0'} 1159 | dependencies: 1160 | '@nodelib/fs.stat': 2.0.5 1161 | '@nodelib/fs.walk': 1.2.8 1162 | glob-parent: 5.1.2 1163 | merge2: 1.4.1 1164 | micromatch: 4.0.5 1165 | dev: true 1166 | 1167 | /fast-json-stable-stringify/2.1.0: 1168 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1169 | dev: true 1170 | 1171 | /fast-levenshtein/2.0.6: 1172 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1173 | dev: true 1174 | 1175 | /fastq/1.15.0: 1176 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1177 | dependencies: 1178 | reusify: 1.0.4 1179 | dev: true 1180 | 1181 | /figures/3.2.0: 1182 | resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} 1183 | engines: {node: '>=8'} 1184 | dependencies: 1185 | escape-string-regexp: 1.0.5 1186 | dev: false 1187 | 1188 | /file-entry-cache/6.0.1: 1189 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1190 | engines: {node: ^10.12.0 || >=12.0.0} 1191 | dependencies: 1192 | flat-cache: 3.0.4 1193 | dev: true 1194 | 1195 | /fill-range/7.0.1: 1196 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1197 | engines: {node: '>=8'} 1198 | dependencies: 1199 | to-regex-range: 5.0.1 1200 | dev: true 1201 | 1202 | /find-up/2.1.0: 1203 | resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} 1204 | engines: {node: '>=4'} 1205 | dependencies: 1206 | locate-path: 2.0.0 1207 | dev: false 1208 | 1209 | /find-up/3.0.0: 1210 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} 1211 | engines: {node: '>=6'} 1212 | dependencies: 1213 | locate-path: 3.0.0 1214 | dev: false 1215 | 1216 | /find-up/4.1.0: 1217 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1218 | engines: {node: '>=8'} 1219 | dependencies: 1220 | locate-path: 5.0.0 1221 | path-exists: 4.0.0 1222 | dev: false 1223 | 1224 | /find-up/5.0.0: 1225 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1226 | engines: {node: '>=10'} 1227 | dependencies: 1228 | locate-path: 6.0.0 1229 | path-exists: 4.0.0 1230 | 1231 | /flat-cache/3.0.4: 1232 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1233 | engines: {node: ^10.12.0 || >=12.0.0} 1234 | dependencies: 1235 | flatted: 3.2.7 1236 | rimraf: 3.0.2 1237 | dev: true 1238 | 1239 | /flatted/3.2.7: 1240 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1241 | dev: true 1242 | 1243 | /fs.realpath/1.0.0: 1244 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1245 | dev: true 1246 | 1247 | /function-bind/1.1.1: 1248 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1249 | dev: false 1250 | 1251 | /get-caller-file/2.0.5: 1252 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1253 | engines: {node: 6.* || 8.* || >= 10.*} 1254 | dev: false 1255 | 1256 | /get-pkg-repo/4.2.1: 1257 | resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} 1258 | engines: {node: '>=6.9.0'} 1259 | hasBin: true 1260 | dependencies: 1261 | '@hutson/parse-repository-url': 3.0.2 1262 | hosted-git-info: 4.1.0 1263 | through2: 2.0.5 1264 | yargs: 16.2.0 1265 | dev: false 1266 | 1267 | /git-raw-commits/2.0.11: 1268 | resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} 1269 | engines: {node: '>=10'} 1270 | hasBin: true 1271 | dependencies: 1272 | dargs: 7.0.0 1273 | lodash: 4.17.21 1274 | meow: 8.1.2 1275 | split2: 3.2.2 1276 | through2: 4.0.2 1277 | dev: false 1278 | 1279 | /git-raw-commits/3.0.0: 1280 | resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==} 1281 | engines: {node: '>=14'} 1282 | hasBin: true 1283 | dependencies: 1284 | dargs: 7.0.0 1285 | meow: 8.1.2 1286 | split2: 3.2.2 1287 | dev: false 1288 | 1289 | /git-remote-origin-url/2.0.0: 1290 | resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} 1291 | engines: {node: '>=4'} 1292 | dependencies: 1293 | gitconfiglocal: 1.0.0 1294 | pify: 2.3.0 1295 | dev: false 1296 | 1297 | /git-semver-tags/4.1.1: 1298 | resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} 1299 | engines: {node: '>=10'} 1300 | hasBin: true 1301 | dependencies: 1302 | meow: 8.1.2 1303 | semver: 6.3.1 1304 | dev: false 1305 | 1306 | /git-semver-tags/5.0.1: 1307 | resolution: {integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==} 1308 | engines: {node: '>=14'} 1309 | hasBin: true 1310 | dependencies: 1311 | meow: 8.1.2 1312 | semver: 7.5.4 1313 | dev: false 1314 | 1315 | /gitconfiglocal/1.0.0: 1316 | resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} 1317 | dependencies: 1318 | ini: 1.3.8 1319 | dev: false 1320 | 1321 | /glob-parent/5.1.2: 1322 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1323 | engines: {node: '>= 6'} 1324 | dependencies: 1325 | is-glob: 4.0.3 1326 | dev: true 1327 | 1328 | /glob-parent/6.0.2: 1329 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1330 | engines: {node: '>=10.13.0'} 1331 | dependencies: 1332 | is-glob: 4.0.3 1333 | dev: true 1334 | 1335 | /glob/7.2.3: 1336 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1337 | dependencies: 1338 | fs.realpath: 1.0.0 1339 | inflight: 1.0.6 1340 | inherits: 2.0.4 1341 | minimatch: 3.1.2 1342 | once: 1.4.0 1343 | path-is-absolute: 1.0.1 1344 | dev: true 1345 | 1346 | /globals/13.20.0: 1347 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1348 | engines: {node: '>=8'} 1349 | dependencies: 1350 | type-fest: 0.20.2 1351 | dev: true 1352 | 1353 | /globby/11.1.0: 1354 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1355 | engines: {node: '>=10'} 1356 | dependencies: 1357 | array-union: 2.1.0 1358 | dir-glob: 3.0.1 1359 | fast-glob: 3.3.1 1360 | ignore: 5.2.4 1361 | merge2: 1.4.1 1362 | slash: 3.0.0 1363 | dev: true 1364 | 1365 | /graceful-fs/4.2.11: 1366 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1367 | dev: false 1368 | 1369 | /graphemer/1.4.0: 1370 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1371 | dev: true 1372 | 1373 | /handlebars/4.7.7: 1374 | resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} 1375 | engines: {node: '>=0.4.7'} 1376 | hasBin: true 1377 | dependencies: 1378 | minimist: 1.2.8 1379 | neo-async: 2.6.2 1380 | source-map: 0.6.1 1381 | wordwrap: 1.0.0 1382 | optionalDependencies: 1383 | uglify-js: 3.17.4 1384 | dev: false 1385 | 1386 | /hard-rejection/2.1.0: 1387 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 1388 | engines: {node: '>=6'} 1389 | dev: false 1390 | 1391 | /has-flag/3.0.0: 1392 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1393 | engines: {node: '>=4'} 1394 | dev: false 1395 | 1396 | /has-flag/4.0.0: 1397 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1398 | engines: {node: '>=8'} 1399 | dev: true 1400 | 1401 | /has/1.0.3: 1402 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1403 | engines: {node: '>= 0.4.0'} 1404 | dependencies: 1405 | function-bind: 1.1.1 1406 | dev: false 1407 | 1408 | /hosted-git-info/2.8.9: 1409 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1410 | dev: false 1411 | 1412 | /hosted-git-info/4.1.0: 1413 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 1414 | engines: {node: '>=10'} 1415 | dependencies: 1416 | lru-cache: 6.0.0 1417 | dev: false 1418 | 1419 | /ignore/5.2.4: 1420 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1421 | engines: {node: '>= 4'} 1422 | dev: true 1423 | 1424 | /import-fresh/3.3.0: 1425 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1426 | engines: {node: '>=6'} 1427 | dependencies: 1428 | parent-module: 1.0.1 1429 | resolve-from: 4.0.0 1430 | dev: true 1431 | 1432 | /imurmurhash/0.1.4: 1433 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1434 | engines: {node: '>=0.8.19'} 1435 | dev: true 1436 | 1437 | /indent-string/4.0.0: 1438 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1439 | engines: {node: '>=8'} 1440 | dev: false 1441 | 1442 | /inflight/1.0.6: 1443 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1444 | dependencies: 1445 | once: 1.4.0 1446 | wrappy: 1.0.2 1447 | dev: true 1448 | 1449 | /inherits/2.0.4: 1450 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1451 | 1452 | /ini/1.3.8: 1453 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1454 | dev: false 1455 | 1456 | /is-arrayish/0.2.1: 1457 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1458 | dev: false 1459 | 1460 | /is-core-module/2.12.1: 1461 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1462 | dependencies: 1463 | has: 1.0.3 1464 | dev: false 1465 | 1466 | /is-extglob/2.1.1: 1467 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1468 | engines: {node: '>=0.10.0'} 1469 | dev: true 1470 | 1471 | /is-fullwidth-code-point/3.0.0: 1472 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1473 | engines: {node: '>=8'} 1474 | dev: false 1475 | 1476 | /is-glob/4.0.3: 1477 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1478 | engines: {node: '>=0.10.0'} 1479 | dependencies: 1480 | is-extglob: 2.1.1 1481 | dev: true 1482 | 1483 | /is-number/7.0.0: 1484 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1485 | engines: {node: '>=0.12.0'} 1486 | dev: true 1487 | 1488 | /is-obj/2.0.0: 1489 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 1490 | engines: {node: '>=8'} 1491 | dev: false 1492 | 1493 | /is-path-inside/3.0.3: 1494 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1495 | engines: {node: '>=8'} 1496 | dev: true 1497 | 1498 | /is-plain-obj/1.1.0: 1499 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 1500 | engines: {node: '>=0.10.0'} 1501 | dev: false 1502 | 1503 | /is-text-path/1.0.1: 1504 | resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} 1505 | engines: {node: '>=0.10.0'} 1506 | dependencies: 1507 | text-extensions: 1.9.0 1508 | dev: false 1509 | 1510 | /isarray/1.0.0: 1511 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1512 | dev: false 1513 | 1514 | /isexe/2.0.0: 1515 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1516 | dev: true 1517 | 1518 | /js-tokens/4.0.0: 1519 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1520 | dev: false 1521 | 1522 | /js-yaml/4.1.0: 1523 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1524 | hasBin: true 1525 | dependencies: 1526 | argparse: 2.0.1 1527 | dev: true 1528 | 1529 | /json-parse-better-errors/1.0.2: 1530 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1531 | dev: false 1532 | 1533 | /json-parse-even-better-errors/2.3.1: 1534 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1535 | dev: false 1536 | 1537 | /json-schema-traverse/0.4.1: 1538 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1539 | dev: true 1540 | 1541 | /json-stable-stringify-without-jsonify/1.0.1: 1542 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1543 | dev: true 1544 | 1545 | /json-stringify-safe/5.0.1: 1546 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} 1547 | dev: false 1548 | 1549 | /jsonparse/1.3.1: 1550 | resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} 1551 | engines: {'0': node >= 0.2.0} 1552 | dev: false 1553 | 1554 | /kind-of/6.0.3: 1555 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1556 | engines: {node: '>=0.10.0'} 1557 | dev: false 1558 | 1559 | /levn/0.4.1: 1560 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1561 | engines: {node: '>= 0.8.0'} 1562 | dependencies: 1563 | prelude-ls: 1.2.1 1564 | type-check: 0.4.0 1565 | dev: true 1566 | 1567 | /lines-and-columns/1.2.4: 1568 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1569 | dev: false 1570 | 1571 | /load-json-file/4.0.0: 1572 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 1573 | engines: {node: '>=4'} 1574 | dependencies: 1575 | graceful-fs: 4.2.11 1576 | parse-json: 4.0.0 1577 | pify: 3.0.0 1578 | strip-bom: 3.0.0 1579 | dev: false 1580 | 1581 | /locate-path/2.0.0: 1582 | resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} 1583 | engines: {node: '>=4'} 1584 | dependencies: 1585 | p-locate: 2.0.0 1586 | path-exists: 3.0.0 1587 | dev: false 1588 | 1589 | /locate-path/3.0.0: 1590 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} 1591 | engines: {node: '>=6'} 1592 | dependencies: 1593 | p-locate: 3.0.0 1594 | path-exists: 3.0.0 1595 | dev: false 1596 | 1597 | /locate-path/5.0.0: 1598 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1599 | engines: {node: '>=8'} 1600 | dependencies: 1601 | p-locate: 4.1.0 1602 | dev: false 1603 | 1604 | /locate-path/6.0.0: 1605 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1606 | engines: {node: '>=10'} 1607 | dependencies: 1608 | p-locate: 5.0.0 1609 | 1610 | /lodash.ismatch/4.4.0: 1611 | resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} 1612 | dev: false 1613 | 1614 | /lodash.merge/4.6.2: 1615 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1616 | dev: true 1617 | 1618 | /lodash/4.17.21: 1619 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1620 | dev: false 1621 | 1622 | /lru-cache/6.0.0: 1623 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1624 | engines: {node: '>=10'} 1625 | dependencies: 1626 | yallist: 4.0.0 1627 | 1628 | /map-obj/1.0.1: 1629 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 1630 | engines: {node: '>=0.10.0'} 1631 | dev: false 1632 | 1633 | /map-obj/4.3.0: 1634 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 1635 | engines: {node: '>=8'} 1636 | dev: false 1637 | 1638 | /meow/8.1.2: 1639 | resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} 1640 | engines: {node: '>=10'} 1641 | dependencies: 1642 | '@types/minimist': 1.2.2 1643 | camelcase-keys: 6.2.2 1644 | decamelize-keys: 1.1.1 1645 | hard-rejection: 2.1.0 1646 | minimist-options: 4.1.0 1647 | normalize-package-data: 3.0.3 1648 | read-pkg-up: 7.0.1 1649 | redent: 3.0.0 1650 | trim-newlines: 3.0.1 1651 | type-fest: 0.18.1 1652 | yargs-parser: 20.2.9 1653 | dev: false 1654 | 1655 | /merge2/1.4.1: 1656 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1657 | engines: {node: '>= 8'} 1658 | dev: true 1659 | 1660 | /micromatch/4.0.5: 1661 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1662 | engines: {node: '>=8.6'} 1663 | dependencies: 1664 | braces: 3.0.2 1665 | picomatch: 2.3.1 1666 | dev: true 1667 | 1668 | /min-indent/1.0.1: 1669 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1670 | engines: {node: '>=4'} 1671 | dev: false 1672 | 1673 | /minimatch/3.1.2: 1674 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1675 | dependencies: 1676 | brace-expansion: 1.1.11 1677 | 1678 | /minimist-options/4.1.0: 1679 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 1680 | engines: {node: '>= 6'} 1681 | dependencies: 1682 | arrify: 1.0.1 1683 | is-plain-obj: 1.1.0 1684 | kind-of: 6.0.3 1685 | dev: false 1686 | 1687 | /minimist/1.2.8: 1688 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1689 | dev: false 1690 | 1691 | /modify-values/1.0.1: 1692 | resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} 1693 | engines: {node: '>=0.10.0'} 1694 | dev: false 1695 | 1696 | /moment/2.29.4: 1697 | resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} 1698 | dev: true 1699 | 1700 | /ms/2.1.2: 1701 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1702 | dev: true 1703 | 1704 | /natural-compare-lite/1.4.0: 1705 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1706 | dev: true 1707 | 1708 | /natural-compare/1.4.0: 1709 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1710 | dev: true 1711 | 1712 | /neo-async/2.6.2: 1713 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 1714 | dev: false 1715 | 1716 | /normalize-package-data/2.5.0: 1717 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1718 | dependencies: 1719 | hosted-git-info: 2.8.9 1720 | resolve: 1.22.2 1721 | semver: 5.7.2 1722 | validate-npm-package-license: 3.0.4 1723 | dev: false 1724 | 1725 | /normalize-package-data/3.0.3: 1726 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 1727 | engines: {node: '>=10'} 1728 | dependencies: 1729 | hosted-git-info: 4.1.0 1730 | is-core-module: 2.12.1 1731 | semver: 7.5.4 1732 | validate-npm-package-license: 3.0.4 1733 | dev: false 1734 | 1735 | /obsidian/1.3.5_qhkmntjgjdxkyszk3etqrkzvlm: 1736 | resolution: {integrity: sha512-2Zg9vlaEZw6fd2AohcdrC1kV+lZcb4a1Ju6GcIwdWaGOWj6l//7wbKD6vVhO2GlfoQRGARYu++eLo7FEc+f6Tw==} 1737 | peerDependencies: 1738 | '@codemirror/state': ^6.0.0 1739 | '@codemirror/view': ^6.0.0 1740 | dependencies: 1741 | '@codemirror/state': 6.2.1 1742 | '@codemirror/view': 6.15.3 1743 | '@types/codemirror': 5.60.8 1744 | moment: 2.29.4 1745 | dev: true 1746 | 1747 | /once/1.4.0: 1748 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1749 | dependencies: 1750 | wrappy: 1.0.2 1751 | dev: true 1752 | 1753 | /optionator/0.9.3: 1754 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1755 | engines: {node: '>= 0.8.0'} 1756 | dependencies: 1757 | '@aashutoshrathi/word-wrap': 1.2.6 1758 | deep-is: 0.1.4 1759 | fast-levenshtein: 2.0.6 1760 | levn: 0.4.1 1761 | prelude-ls: 1.2.1 1762 | type-check: 0.4.0 1763 | dev: true 1764 | 1765 | /p-limit/1.3.0: 1766 | resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} 1767 | engines: {node: '>=4'} 1768 | dependencies: 1769 | p-try: 1.0.0 1770 | dev: false 1771 | 1772 | /p-limit/2.3.0: 1773 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1774 | engines: {node: '>=6'} 1775 | dependencies: 1776 | p-try: 2.2.0 1777 | dev: false 1778 | 1779 | /p-limit/3.1.0: 1780 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1781 | engines: {node: '>=10'} 1782 | dependencies: 1783 | yocto-queue: 0.1.0 1784 | 1785 | /p-locate/2.0.0: 1786 | resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} 1787 | engines: {node: '>=4'} 1788 | dependencies: 1789 | p-limit: 1.3.0 1790 | dev: false 1791 | 1792 | /p-locate/3.0.0: 1793 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} 1794 | engines: {node: '>=6'} 1795 | dependencies: 1796 | p-limit: 2.3.0 1797 | dev: false 1798 | 1799 | /p-locate/4.1.0: 1800 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1801 | engines: {node: '>=8'} 1802 | dependencies: 1803 | p-limit: 2.3.0 1804 | dev: false 1805 | 1806 | /p-locate/5.0.0: 1807 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1808 | engines: {node: '>=10'} 1809 | dependencies: 1810 | p-limit: 3.1.0 1811 | 1812 | /p-try/1.0.0: 1813 | resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} 1814 | engines: {node: '>=4'} 1815 | dev: false 1816 | 1817 | /p-try/2.2.0: 1818 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1819 | engines: {node: '>=6'} 1820 | dev: false 1821 | 1822 | /parent-module/1.0.1: 1823 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1824 | engines: {node: '>=6'} 1825 | dependencies: 1826 | callsites: 3.1.0 1827 | dev: true 1828 | 1829 | /parse-json/4.0.0: 1830 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1831 | engines: {node: '>=4'} 1832 | dependencies: 1833 | error-ex: 1.3.2 1834 | json-parse-better-errors: 1.0.2 1835 | dev: false 1836 | 1837 | /parse-json/5.2.0: 1838 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1839 | engines: {node: '>=8'} 1840 | dependencies: 1841 | '@babel/code-frame': 7.22.5 1842 | error-ex: 1.3.2 1843 | json-parse-even-better-errors: 2.3.1 1844 | lines-and-columns: 1.2.4 1845 | dev: false 1846 | 1847 | /path-exists/3.0.0: 1848 | resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} 1849 | engines: {node: '>=4'} 1850 | dev: false 1851 | 1852 | /path-exists/4.0.0: 1853 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1854 | engines: {node: '>=8'} 1855 | 1856 | /path-is-absolute/1.0.1: 1857 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1858 | engines: {node: '>=0.10.0'} 1859 | dev: true 1860 | 1861 | /path-key/3.1.1: 1862 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1863 | engines: {node: '>=8'} 1864 | dev: true 1865 | 1866 | /path-parse/1.0.7: 1867 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1868 | dev: false 1869 | 1870 | /path-type/3.0.0: 1871 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1872 | engines: {node: '>=4'} 1873 | dependencies: 1874 | pify: 3.0.0 1875 | dev: false 1876 | 1877 | /path-type/4.0.0: 1878 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1879 | engines: {node: '>=8'} 1880 | dev: true 1881 | 1882 | /picomatch/2.3.1: 1883 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1884 | engines: {node: '>=8.6'} 1885 | dev: true 1886 | 1887 | /pify/2.3.0: 1888 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1889 | engines: {node: '>=0.10.0'} 1890 | dev: false 1891 | 1892 | /pify/3.0.0: 1893 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 1894 | engines: {node: '>=4'} 1895 | dev: false 1896 | 1897 | /prelude-ls/1.2.1: 1898 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1899 | engines: {node: '>= 0.8.0'} 1900 | dev: true 1901 | 1902 | /prettier/3.0.0: 1903 | resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} 1904 | engines: {node: '>=14'} 1905 | hasBin: true 1906 | dev: true 1907 | 1908 | /process-nextick-args/2.0.1: 1909 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1910 | dev: false 1911 | 1912 | /punycode/2.3.0: 1913 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 1914 | engines: {node: '>=6'} 1915 | dev: true 1916 | 1917 | /q/1.5.1: 1918 | resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} 1919 | engines: {node: '>=0.6.0', teleport: '>=0.2.0'} 1920 | dev: false 1921 | 1922 | /queue-microtask/1.2.3: 1923 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1924 | dev: true 1925 | 1926 | /quick-lru/4.0.1: 1927 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 1928 | engines: {node: '>=8'} 1929 | dev: false 1930 | 1931 | /read-pkg-up/3.0.0: 1932 | resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} 1933 | engines: {node: '>=4'} 1934 | dependencies: 1935 | find-up: 2.1.0 1936 | read-pkg: 3.0.0 1937 | dev: false 1938 | 1939 | /read-pkg-up/7.0.1: 1940 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1941 | engines: {node: '>=8'} 1942 | dependencies: 1943 | find-up: 4.1.0 1944 | read-pkg: 5.2.0 1945 | type-fest: 0.8.1 1946 | dev: false 1947 | 1948 | /read-pkg/3.0.0: 1949 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} 1950 | engines: {node: '>=4'} 1951 | dependencies: 1952 | load-json-file: 4.0.0 1953 | normalize-package-data: 2.5.0 1954 | path-type: 3.0.0 1955 | dev: false 1956 | 1957 | /read-pkg/5.2.0: 1958 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1959 | engines: {node: '>=8'} 1960 | dependencies: 1961 | '@types/normalize-package-data': 2.4.1 1962 | normalize-package-data: 2.5.0 1963 | parse-json: 5.2.0 1964 | type-fest: 0.6.0 1965 | dev: false 1966 | 1967 | /readable-stream/2.3.8: 1968 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1969 | dependencies: 1970 | core-util-is: 1.0.3 1971 | inherits: 2.0.4 1972 | isarray: 1.0.0 1973 | process-nextick-args: 2.0.1 1974 | safe-buffer: 5.1.2 1975 | string_decoder: 1.1.1 1976 | util-deprecate: 1.0.2 1977 | dev: false 1978 | 1979 | /readable-stream/3.6.2: 1980 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1981 | engines: {node: '>= 6'} 1982 | dependencies: 1983 | inherits: 2.0.4 1984 | string_decoder: 1.3.0 1985 | util-deprecate: 1.0.2 1986 | dev: false 1987 | 1988 | /redent/3.0.0: 1989 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 1990 | engines: {node: '>=8'} 1991 | dependencies: 1992 | indent-string: 4.0.0 1993 | strip-indent: 3.0.0 1994 | dev: false 1995 | 1996 | /require-directory/2.1.1: 1997 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1998 | engines: {node: '>=0.10.0'} 1999 | dev: false 2000 | 2001 | /resolve-from/4.0.0: 2002 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2003 | engines: {node: '>=4'} 2004 | dev: true 2005 | 2006 | /resolve/1.22.2: 2007 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2008 | hasBin: true 2009 | dependencies: 2010 | is-core-module: 2.12.1 2011 | path-parse: 1.0.7 2012 | supports-preserve-symlinks-flag: 1.0.0 2013 | dev: false 2014 | 2015 | /reusify/1.0.4: 2016 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2017 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2018 | dev: true 2019 | 2020 | /rimraf/3.0.2: 2021 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2022 | hasBin: true 2023 | dependencies: 2024 | glob: 7.2.3 2025 | dev: true 2026 | 2027 | /run-parallel/1.2.0: 2028 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2029 | dependencies: 2030 | queue-microtask: 1.2.3 2031 | dev: true 2032 | 2033 | /safe-buffer/5.1.2: 2034 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 2035 | dev: false 2036 | 2037 | /safe-buffer/5.2.1: 2038 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2039 | dev: false 2040 | 2041 | /semver/5.7.2: 2042 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 2043 | hasBin: true 2044 | dev: false 2045 | 2046 | /semver/6.3.1: 2047 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2048 | hasBin: true 2049 | dev: false 2050 | 2051 | /semver/7.5.4: 2052 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2053 | engines: {node: '>=10'} 2054 | hasBin: true 2055 | dependencies: 2056 | lru-cache: 6.0.0 2057 | 2058 | /shebang-command/2.0.0: 2059 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2060 | engines: {node: '>=8'} 2061 | dependencies: 2062 | shebang-regex: 3.0.0 2063 | dev: true 2064 | 2065 | /shebang-regex/3.0.0: 2066 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2067 | engines: {node: '>=8'} 2068 | dev: true 2069 | 2070 | /slash/3.0.0: 2071 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2072 | engines: {node: '>=8'} 2073 | dev: true 2074 | 2075 | /source-map/0.6.1: 2076 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2077 | engines: {node: '>=0.10.0'} 2078 | dev: false 2079 | 2080 | /spdx-correct/3.2.0: 2081 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2082 | dependencies: 2083 | spdx-expression-parse: 3.0.1 2084 | spdx-license-ids: 3.0.13 2085 | dev: false 2086 | 2087 | /spdx-exceptions/2.3.0: 2088 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 2089 | dev: false 2090 | 2091 | /spdx-expression-parse/3.0.1: 2092 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2093 | dependencies: 2094 | spdx-exceptions: 2.3.0 2095 | spdx-license-ids: 3.0.13 2096 | dev: false 2097 | 2098 | /spdx-license-ids/3.0.13: 2099 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 2100 | dev: false 2101 | 2102 | /split/1.0.1: 2103 | resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} 2104 | dependencies: 2105 | through: 2.3.8 2106 | dev: false 2107 | 2108 | /split2/3.2.2: 2109 | resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} 2110 | dependencies: 2111 | readable-stream: 3.6.2 2112 | dev: false 2113 | 2114 | /string-width/4.2.3: 2115 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2116 | engines: {node: '>=8'} 2117 | dependencies: 2118 | emoji-regex: 8.0.0 2119 | is-fullwidth-code-point: 3.0.0 2120 | strip-ansi: 6.0.1 2121 | dev: false 2122 | 2123 | /string_decoder/1.1.1: 2124 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 2125 | dependencies: 2126 | safe-buffer: 5.1.2 2127 | dev: false 2128 | 2129 | /string_decoder/1.3.0: 2130 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 2131 | dependencies: 2132 | safe-buffer: 5.2.1 2133 | dev: false 2134 | 2135 | /strip-ansi/6.0.1: 2136 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2137 | engines: {node: '>=8'} 2138 | dependencies: 2139 | ansi-regex: 5.0.1 2140 | 2141 | /strip-bom/3.0.0: 2142 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2143 | engines: {node: '>=4'} 2144 | dev: false 2145 | 2146 | /strip-indent/3.0.0: 2147 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2148 | engines: {node: '>=8'} 2149 | dependencies: 2150 | min-indent: 1.0.1 2151 | dev: false 2152 | 2153 | /strip-json-comments/3.1.1: 2154 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2155 | engines: {node: '>=8'} 2156 | dev: true 2157 | 2158 | /style-mod/4.0.3: 2159 | resolution: {integrity: sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==} 2160 | dev: true 2161 | 2162 | /supports-color/5.5.0: 2163 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2164 | engines: {node: '>=4'} 2165 | dependencies: 2166 | has-flag: 3.0.0 2167 | dev: false 2168 | 2169 | /supports-color/7.2.0: 2170 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2171 | engines: {node: '>=8'} 2172 | dependencies: 2173 | has-flag: 4.0.0 2174 | dev: true 2175 | 2176 | /supports-preserve-symlinks-flag/1.0.0: 2177 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2178 | engines: {node: '>= 0.4'} 2179 | dev: false 2180 | 2181 | /text-extensions/1.9.0: 2182 | resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} 2183 | engines: {node: '>=0.10'} 2184 | dev: false 2185 | 2186 | /text-table/0.2.0: 2187 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2188 | dev: true 2189 | 2190 | /through/2.3.8: 2191 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 2192 | dev: false 2193 | 2194 | /through2/2.0.5: 2195 | resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} 2196 | dependencies: 2197 | readable-stream: 2.3.8 2198 | xtend: 4.0.2 2199 | dev: false 2200 | 2201 | /through2/4.0.2: 2202 | resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} 2203 | dependencies: 2204 | readable-stream: 3.6.2 2205 | dev: false 2206 | 2207 | /to-regex-range/5.0.1: 2208 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2209 | engines: {node: '>=8.0'} 2210 | dependencies: 2211 | is-number: 7.0.0 2212 | dev: true 2213 | 2214 | /trim-newlines/3.0.1: 2215 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 2216 | engines: {node: '>=8'} 2217 | dev: false 2218 | 2219 | /ts-api-utils/1.0.1_typescript@5.1.6: 2220 | resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} 2221 | engines: {node: '>=16.13.0'} 2222 | peerDependencies: 2223 | typescript: '>=4.2.0' 2224 | dependencies: 2225 | typescript: 5.1.6 2226 | dev: true 2227 | 2228 | /tslib/2.6.1: 2229 | resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} 2230 | dev: true 2231 | 2232 | /type-check/0.4.0: 2233 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2234 | engines: {node: '>= 0.8.0'} 2235 | dependencies: 2236 | prelude-ls: 1.2.1 2237 | dev: true 2238 | 2239 | /type-fest/0.18.1: 2240 | resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} 2241 | engines: {node: '>=10'} 2242 | dev: false 2243 | 2244 | /type-fest/0.20.2: 2245 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2246 | engines: {node: '>=10'} 2247 | dev: true 2248 | 2249 | /type-fest/0.6.0: 2250 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 2251 | engines: {node: '>=8'} 2252 | dev: false 2253 | 2254 | /type-fest/0.8.1: 2255 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 2256 | engines: {node: '>=8'} 2257 | dev: false 2258 | 2259 | /typedarray/0.0.6: 2260 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} 2261 | dev: false 2262 | 2263 | /typescript/5.1.6: 2264 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} 2265 | engines: {node: '>=14.17'} 2266 | hasBin: true 2267 | dev: true 2268 | 2269 | /uglify-js/3.17.4: 2270 | resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} 2271 | engines: {node: '>=0.8.0'} 2272 | hasBin: true 2273 | requiresBuild: true 2274 | dev: false 2275 | optional: true 2276 | 2277 | /uri-js/4.4.1: 2278 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2279 | dependencies: 2280 | punycode: 2.3.0 2281 | dev: true 2282 | 2283 | /util-deprecate/1.0.2: 2284 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2285 | dev: false 2286 | 2287 | /validate-npm-package-license/3.0.4: 2288 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2289 | dependencies: 2290 | spdx-correct: 3.2.0 2291 | spdx-expression-parse: 3.0.1 2292 | dev: false 2293 | 2294 | /w3c-keyname/2.2.8: 2295 | resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 2296 | dev: true 2297 | 2298 | /which/2.0.2: 2299 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2300 | engines: {node: '>= 8'} 2301 | hasBin: true 2302 | dependencies: 2303 | isexe: 2.0.0 2304 | dev: true 2305 | 2306 | /wordwrap/1.0.0: 2307 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 2308 | dev: false 2309 | 2310 | /wrap-ansi/7.0.0: 2311 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2312 | engines: {node: '>=10'} 2313 | dependencies: 2314 | ansi-styles: 4.3.0 2315 | string-width: 4.2.3 2316 | strip-ansi: 6.0.1 2317 | dev: false 2318 | 2319 | /wrappy/1.0.2: 2320 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2321 | dev: true 2322 | 2323 | /xtend/4.0.2: 2324 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 2325 | engines: {node: '>=0.4'} 2326 | dev: false 2327 | 2328 | /y18n/5.0.8: 2329 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2330 | engines: {node: '>=10'} 2331 | dev: false 2332 | 2333 | /yallist/4.0.0: 2334 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2335 | 2336 | /yargs-parser/20.2.9: 2337 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 2338 | engines: {node: '>=10'} 2339 | dev: false 2340 | 2341 | /yargs-parser/21.1.1: 2342 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2343 | engines: {node: '>=12'} 2344 | dev: false 2345 | 2346 | /yargs/16.2.0: 2347 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 2348 | engines: {node: '>=10'} 2349 | dependencies: 2350 | cliui: 7.0.4 2351 | escalade: 3.1.1 2352 | get-caller-file: 2.0.5 2353 | require-directory: 2.1.1 2354 | string-width: 4.2.3 2355 | y18n: 5.0.8 2356 | yargs-parser: 20.2.9 2357 | dev: false 2358 | 2359 | /yargs/17.7.2: 2360 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2361 | engines: {node: '>=12'} 2362 | dependencies: 2363 | cliui: 8.0.1 2364 | escalade: 3.1.1 2365 | get-caller-file: 2.0.5 2366 | require-directory: 2.1.1 2367 | string-width: 4.2.3 2368 | y18n: 5.0.8 2369 | yargs-parser: 21.1.1 2370 | dev: false 2371 | 2372 | /yocto-queue/0.1.0: 2373 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2374 | engines: {node: '>=10'} 2375 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | .metacopy-settings { 2 | border-top: transparent; 3 | padding: 0 0 3px 0; 4 | } 5 | -------------------------------------------------------------------------------- /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 | "lib": ["dom", "es5", "scripthost", "es2021"] 13 | }, 14 | "include": ["**/*.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.1": "0.9.12", 3 | "1.0.0": "0.9.7" 4 | } 5 | --------------------------------------------------------------------------------