├── .clj-kondo
└── .cache
│ └── v1
│ └── lock
├── .github
├── FUNDING.yml
└── workflows
│ └── publish.yml
├── icon.png
├── .DS_Store
├── .gitignore
├── tsconfig.json
├── logseq-github.gif
├── docs
├── logseq-github.gif
└── README.md
├── dist
└── index.html
├── index.html
├── package.json
├── LICENSE.md
├── README.md
├── index.ts
├── FileUtils.ts
└── pnpm-lock.yaml
/.clj-kondo/.cache/v1/lock:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: mandpd
2 |
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/HEAD/icon.png
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/HEAD/.DS_Store
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .parcel-cache/
3 | .lsp/
4 | .vscode/
5 | samples/
6 | .pnpm-debug.log
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strictNullChecks": true
4 | }
5 | }
--------------------------------------------------------------------------------
/logseq-github.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/HEAD/logseq-github.gif
--------------------------------------------------------------------------------
/docs/logseq-github.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/HEAD/docs/logseq-github.gif
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
VS Code Ref
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | VS Code Ref
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "logseq-plugin-github-get",
3 | "version": "1.0.2",
4 | "description": "Get a file from a github repo",
5 | "main": "dist/index.html",
6 | "targets": {
7 | "main": false
8 | },
9 | "keywords": [
10 | "logseq"
11 | ],
12 | "scripts": {
13 | "dev": "parcel ./index.html --public-url ./",
14 | "build": "parcel build --no-source-maps index.html --public-url ./"
15 | },
16 | "author": "p4th",
17 | "logseq": {
18 | "id": "logseq-github-get-ref",
19 | "icon": "./icon.png"
20 | },
21 | "dependencies": {
22 | "@logseq/libs": "0.0.1-alpha.35",
23 | "axios": "^0.26.0"
24 | },
25 | "devDependencies": {
26 | "buffer": "^6.0.3",
27 | "parcel": "2.0.0",
28 | "typescript": "4.4.3"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 mandpd
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Build plugin
2 |
3 | on:
4 | push:
5 | # Sequence of patterns matched against refs/tags
6 | tags:
7 | - "*" # Push events to matching any tag format, i.e. 1.0, 20.15.10
8 |
9 | env:
10 | PLUGIN_NAME: ${{ github.event.repository.name }}
11 |
12 | jobs:
13 | build:
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - uses: actions/checkout@v2
18 | - name: Use Node.js
19 | uses: actions/setup-node@v1
20 | with:
21 | node-version: "16.x" # You might need to adjust this value to your own version
22 | - name: Build
23 | id: build
24 | run: |
25 | npm i && npm run build
26 | mkdir ${{ env.PLUGIN_NAME }}
27 | cp README.md package.json icon.png logseq-github.gif ${{ env.PLUGIN_NAME }}
28 | mv dist ${{ env.PLUGIN_NAME }}
29 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }}
30 | ls
31 | echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)"
32 | - name: Create Release
33 | uses: ncipollo/release-action@v1
34 | id: create_release
35 | env:
36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37 | VERSION: ${{ github.ref }}
38 | with:
39 | allowUpdates: true
40 | draft: false
41 | prerelease: false
42 |
43 | - name: Upload zip file
44 | id: upload_zip
45 | uses: actions/upload-release-asset@v1
46 | env:
47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
48 | with:
49 | upload_url: ${{ steps.create_release.outputs.upload_url }}
50 | asset_path: ./${{ env.PLUGIN_NAME }}.zip
51 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip
52 | asset_content_type: application/zip
53 |
54 | - name: Upload package.json
55 | id: upload_metadata
56 | uses: actions/upload-release-asset@v1
57 | env:
58 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59 | with:
60 | upload_url: ${{ steps.create_release.outputs.upload_url }}
61 | asset_path: ./package.json
62 | asset_name: package.json
63 | asset_content_type: application/json
64 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Github File Getter (logseq-plugin-github-get)
2 |
3 | ## Overview
4 |
5 | This plugin allows the user to easily import the contents of files from any Github repository that the Github user has access to.
6 | The main goal is to enhance the ability to document code development and final code using [Logseq](https://docs.logseq.com).
7 |
8 | ## Suggested Use
9 |
10 | Create a new logseq graph in the root of your code repository under a `/docs` folder.
11 | The logseq Journal can be used to document the day-by-day development progress.
12 | As code is developed and pushed to Github, the code can be retrieved and inserted into a Logseq page block using this plugin.
13 | The code can then be documented using Logseq's extensive note taking capabilities.
14 |
15 | As a code file is updated and the changes pushed to Github, the code in Logseq can be immediately updated to the latest version using the `refresh` icon at the top of the code block.
16 |
17 | ## Example
18 |
19 | This example shows how to embed a file from a repository which is synced to Github. The repository is cloned locally and open in VS Code. The Github account name and repository name have been entered in the plugin settings as default, so only the relative path of the file needs to be entered.
20 |
21 | 
22 |
23 | ## One-Time Configuration
24 |
25 | 1. Ensure you are running [logseq version 0.6.5](https://github.com/logseq/logseq/releases) or later.
26 | 2. Open the logseq settings menu.
27 | 3. Select `Plugin Settings` and click on the `Github File Getter` tab.
28 | 4. _Required_: Enter a personal access token with full repository access rights in the field labeled `githubPat`. For more information on how to generate a personal access token, look [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token).
29 | 5. Optional: Enter the default github account name that your repository resides in. Use your `username` (not your email address) in the field labeled `githubAccount`. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use.
30 | 6. Optional: Enter the name of the repository where your files reside. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use.
31 |
32 | ## Using Logseq as a code documentation tool
33 |
34 | 1. Open the local version of the repository that you want to document within your IDE (VS Code is used in the example given above).
35 | 2. Create a root directory called `docs`.
36 | 3. Open Logseq and select `Add a graph` from the left sidebar graph menu item.
37 | 4. Navigate to the docs `folder` that you have just created.
38 | 5. Use Logseq to document your development process.
39 | 6. When you are ready to document specific code in the repository, follow the `Running the Github Command` process described below.
40 |
41 | ## Running the Github Command
42 |
43 | ### Using with files in the default repository
44 |
45 | 1. Ensure that the account name and the repository name are provided in the plugin settings. See the `One-Time Configuration` section above.
46 | 2. Ensure that the file is pushed to your Github repository. The plugin will retrieve the most recent version of the file. (A later version of this plugin will allow you to get a specific commit version of the file)
47 | 3. Select the file within your IDE that you wish to embed within LogSeq.
48 | 4. Copy the relative path of the file from the root of the local copy. (You can obtain this in VS Code by right-clicking on the file in the Explorer and selecting `Copy Relative Path` from the context menu).
49 | 5. Select an empty block in LogSeq where you want to import the file. Paste the relative path of the file. e.g. `src/package.json`
50 | 6. Run the `Get Github File` command by entering `/Get Github File` after the file path.
51 | 7. If the configuration and file path are correctly entered the code should appear immediately below the selected block.
52 |
53 | ### Using with files in another Github repository and/or account
54 |
55 | Step 4 should be amended as follows:
56 |
57 | 1. If the file is not in the default repository, enter the name of repository, followed by a colon ':', before the relative path. e.g. `another-repo:src/package-json`
58 | 2. If the file is not in the default account nor the default repository, enter the name of the account, followed by a double-colon '::', the name of the repository, followed by a colon ':', before the relative path. `another-account::yet-another-repo:src/package.json`
59 |
60 | The general URL format is `:::`
61 |
62 | ## Refreshing the code
63 |
64 | 1. Once a file has been retrieved frm Github the block's parent shows the filename, the commit id, and a `refresh` icon. To retrieve the latest version of the code simply click on the filename or the `refresh` icon. **NOTE** This will overwrite the existing version of the code.
65 | 2. To guard against accidental refresh, click on the commit id. This will toggle a `pin` icon. When the pin icon is visible the refresh button is disabled.
66 | 3. To re-enable refresh, click the commit id again. The pin icon will disappear.
67 |
68 | ## Installing the Plugin Manually
69 |
70 | 1. Clone the [plugin repo](https://github.com/mandpd/logseq-plugin-github-get) to a local folder.
71 | 2. In logseq, open `Logseq→Settings`, enable developer mode.
72 | 3. Open `Logseq→Plugins`, choose `Load unpacked plugin`, and select the location where you saved the source code.
73 | 4. Follow the configuration steps given above.
74 | 5. The `Get Github File` command should now be installed and active.
75 |
76 | ## Supported file types
77 |
78 | The file types supported by [Code Mirror](https://codemirror.net/mode/index.html) will be recognized and the appropriate code parser selected for the code block.
79 |
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Github File Getter (logseq-plugin-github-get)
2 |
3 | ## Overview
4 |
5 | This plugin allows the user to easily import the contents of files from any Github repository that the Github user has access to.
6 | The main goal is to enhance the ability to document code development and final code using [Logseq](https://docs.logseq.com).
7 |
8 | ## Suggested Use
9 |
10 | Create a new logseq graph in the root of your code repository under a `/docs` folder.
11 | The logseq Journal can be used to document the day-by-day development progress.
12 | As code is developed and pushed to Github, the code can be retrieved and inserted into a Logseq page block using this plugin.
13 | The code can then be documented using Logseq's extensive note taking capabilities.
14 |
15 | As a code file is updated and the changes pushed to Github, the code in Logseq can be immediately updated to the latest version using the `refresh` icon at the top of the code block.
16 |
17 | ## Example
18 |
19 | This example shows how to embed a file from a repository which is synced to Github. The repository is cloned locally and open in VS Code. The Github account name and repository name have been entered in the plugin settings as default, so only the relative path of the file needs to be entered.
20 |
21 | 
22 |
23 | ## One-Time Configuration
24 |
25 | 1. Ensure you are running [logseq version 0.6.5](https://github.com/logseq/logseq/releases) or later.
26 | 2. Open the logseq settings menu.
27 | 3. Select `Plugin Settings` and click on the `Github File Getter` tab.
28 | 4. _Required_: Enter a personal access token with full repository access rights in the field labeled `githubPat`. For more information on how to generate a personal access token, look [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token).
29 | 5. Optional: Enter the default github account name that your repository resides in. Use your `username` (not your email address) in the field labeled `githubAccount`. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use.
30 | 6. Optional: Enter the name of the repository where your files reside. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use.
31 |
32 | ## Using Logseq as a code documentation tool
33 |
34 | 1. Open the local version of the repository that you want to document within your IDE (VS Code is used in the example given above).
35 | 2. Create a root directory called `docs`.
36 | 3. Open Logseq and select `Add a graph` from the left sidebar graph menu item.
37 | 4. Navigate to the docs `folder` that you have just created.
38 | 5. Use Logseq to document your development process.
39 | 6. When you are ready to document specific code in the repository, follow the `Running the Github Command` process described below.
40 |
41 | ## Running the Github Command
42 |
43 | ### Using with files in the default repository
44 |
45 | 1. Ensure that the account name and the repository name are provided in the plugin settings. See the `One-Time Configuration` section above.
46 | 2. Ensure that the file is pushed to your Github repository. The plugin will retrieve the most recent version of the file. (A later version of this plugin will allow you to get a specific commit version of the file)
47 | 3. Select the file within your IDE that you wish to embed within LogSeq.
48 | 4. Copy the relative path of the file from the root of the local copy. (You can obtain this in VS Code by right-clicking on the file in the Explorer and selecting `Copy Relative Path` from the context menu).
49 | 5. Select an empty block in LogSeq where you want to import the file. Paste the relative path of the file. e.g. `src/package.json`
50 | 6. Run the `Get Github File` command by entering `/Get Github File` after the file path.
51 | 7. If the configuration and file path are correctly entered the code should appear immediately below the selected block.
52 |
53 | ### Using with files in another Github repository and/or account
54 |
55 | Step 4 should be amended as follows:
56 |
57 | 1. If the file is not in the default repository, enter the name of repository, followed by a colon ':', before the relative path. e.g. `another-repo:src/package-json`
58 | 2. If the file is not in the default account nor the default repository, enter the name of the account, followed by a double-colon '::', the name of the repository, followed by a colon ':', before the relative path. `another-account::yet-another-repo:src/package.json`
59 |
60 | The general URL format is `:::`
61 |
62 | ## Refreshing the code
63 |
64 | 1. Once a file has been retrieved frm Github the block's parent shows the filename, the commit id, and a `refresh` icon. To retrieve the latest version of the code simply click on the filename or the `refresh` icon. **NOTE** This will overwrite the existing version of the code.
65 | 2. To guard against accidental refresh, click on the commit id. This will toggle a `pin` icon. When the pin icon is visible the refresh button is disabled.
66 | 3. To re-enable refresh, click the commit id again. The pin icon will disappear.
67 |
68 | ## Installing the Plugin Manually
69 |
70 | 1. Clone the [plugin repo](https://github.com/mandpd/logseq-plugin-github-get) to a local folder.
71 | 2. In logseq, open `Logseq→Settings`, enable developer mode.
72 | 3. Open `Logseq→Plugins`, choose `Load unpacked plugin`, and select the location where you saved the source code.
73 | 4. Follow the configuration steps given above.
74 | 5. The `Get Github File` command should now be installed and active.
75 |
76 | ## Supported file types
77 |
78 | The file types supported by [Code Mirror](https://codemirror.net/mode/index.html) will be recognized and the appropriate code parser selected for the code block.
79 |
--------------------------------------------------------------------------------
/index.ts:
--------------------------------------------------------------------------------
1 | import "@logseq/libs";
2 | import { BlockEntity } from "@logseq/libs/dist/LSPlugin.user";
3 | import {
4 | getFile,
5 | CodeType,
6 | getCommits,
7 | getRepos,
8 | parseFilePath,
9 | } from "./FileUtils";
10 |
11 | const settingsTemplate = [
12 | {
13 | key: "githubPat",
14 | type: "string",
15 | default: "",
16 | title: "Required: Your Personal Access Token",
17 | description:
18 | "The plugin requires a personal access token with full repo rights. For details on how to set this up for your github account, see the README notes for more details.",
19 | },
20 | {
21 | key: "githubAccount",
22 | type: "string",
23 | default: "",
24 | title: "Optional: Default Github Account",
25 | description:
26 | "Your default github account username. For private repositories, it must have access to the repo that contains the code to be retrieved. See the README notes for more details.",
27 | },
28 | {
29 | key: "githubRepo",
30 | type: "string",
31 | optional: true,
32 | default: "",
33 | title: "Optional: Your default repository name",
34 | description:
35 | "You can enter a default repository name to be used when none is explicitly provided in the file path. See the README notes for more details.",
36 | },
37 | ];
38 | logseq.useSettingsSchema(settingsTemplate);
39 |
40 | const checkSettings = (): boolean => {
41 | let initialSettings = logseq!.settings;
42 | if (logseq.settings) {
43 | if (logseq.settings.githubPat) return true;
44 | }
45 |
46 | logseq.App.showMsg(
47 | "Please enter your access token in the plugin settings.",
48 | "error"
49 | );
50 | return false;
51 | };
52 |
53 | const genRandomStr = () =>
54 | Math.random()
55 | .toString(36)
56 | .replace(/[^a-z]+/g, "")
57 | .substr(0, 5);
58 |
59 | const refreshCode = async (blockId: string, filePath?: string) => {
60 | const block = await logseq.Editor.getBlock(blockId, {
61 | includeChildren: true,
62 | });
63 | if (
64 | block === null ||
65 | block.children === undefined ||
66 | block.children?.length === 0
67 | ) {
68 | return;
69 | }
70 | // Abort if commit is pinned
71 | if (block.content.includes("true}}")) {
72 | logseq.App.showMsg(
73 | `Cannot refresh a pinned file. Click on pin then try again.`
74 | );
75 | return;
76 | }
77 |
78 | const existingBlock = await logseq.Editor.getBlock(
79 | (block?.children![0] as BlockEntity).id
80 | );
81 |
82 | // Delete existing code block
83 | if (existingBlock) await logseq.Editor.removeBlock(existingBlock.uuid);
84 |
85 | // Call update to refresh code
86 | getCode(blockId, filePath);
87 | };
88 |
89 | /**
90 | *
91 | * @param blockId
92 | * @returns Void
93 | *
94 | * Called when logseq is intialized or plugin is loaded.
95 | */
96 |
97 | const getCode = async (blockId: string, filePath?: string) => {
98 | // Get Current Block
99 | const block = await logseq.Editor.getBlock(blockId, {
100 | includeChildren: true,
101 | });
102 | if (
103 | block === null ||
104 | block.children === undefined ||
105 | block.children?.length !== 0
106 | ) {
107 | return;
108 | }
109 |
110 | const _filePath = filePath ? filePath : block!.content;
111 |
112 | // Get the file from Github
113 | const contents = await getFile(_filePath);
114 |
115 | if (contents.type == "error") {
116 | return;
117 | }
118 |
119 | // Escape any '```' in the body of the text as this breaks codemirror
120 | if (contents.content.includes("```")) {
121 | contents.content = contents.content.split("```").join("\\`\\`\\`");
122 | }
123 |
124 | // Insert the code block
125 | let targetBlock = await logseq.Editor.insertBlock(
126 | block!.uuid,
127 | `\`\`\`${contents.type}\r\n${contents.content}\r\n\`\`\``,
128 | {
129 | sibling: false,
130 | before: false,
131 | }
132 | );
133 |
134 | insertRefreshBtn(blockId, contents.commit_id, contents.commit_message);
135 | // Exit editor
136 | logseq.Editor.exitEditingMode();
137 | };
138 |
139 | const insertRefreshBtn = async (
140 | blockId: string,
141 | commit_id?: string,
142 | commit_message?: string,
143 | pin = true
144 | ) => {
145 | const block = await logseq.Editor.getBlock(blockId, {
146 | includeChildren: true,
147 | });
148 | // Insert recycle button
149 | if (!block!.content.includes("renderer :github")) {
150 | let [account, repo, file] = parseFilePath(block!.content);
151 | logseq.Editor.updateBlock(
152 | blockId,
153 | `{{renderer :github_${genRandomStr()}, ${
154 | account + "::" + repo + ":" + file
155 | }${commit_id ? ", " + commit_id : ""}${
156 | commit_message ? ", " + commit_message : ""
157 | }${pin ? ", true" : ", false"}}}`
158 | );
159 | } else {
160 | //update commit id
161 | let bits = block!.content.split(",");
162 | bits[2] = commit_id ? commit_id : bits[2];
163 | bits[3] = commit_message ? commit_message : bits[3];
164 | let replacement = bits.join(",");
165 | logseq.Editor.updateBlock(blockId, replacement);
166 | }
167 | };
168 |
169 | // Called when logseq is first loaded
170 | logseq
171 | .ready(() => {
172 | console.log("logseq-plugin-github-get loaded");
173 |
174 | logseq.Editor.registerSlashCommand("Get Github File", async (e) => {
175 | if (!checkSettings()) return;
176 |
177 | getCode(e.uuid);
178 | });
179 | logseq.Editor.registerBlockContextMenuItem("Get Github File", async (e) => {
180 | if (!checkSettings()) return;
181 | insertRefreshBtn(e.uuid);
182 | getCode(e.uuid);
183 | });
184 |
185 | logseq.setMainUIInlineStyle({
186 | position: "fixed",
187 | width: "290px",
188 | zIndex: 999,
189 | transform: "translateX(-50%)",
190 | });
191 |
192 | logseq.App.onMacroRendererSlotted(({ slot, payload }) => {
193 | let [type, filePath, commit_id, commit_message, pin] = payload.arguments;
194 |
195 | let [account, repo, file] = parseFilePath(filePath);
196 |
197 | if (!type?.startsWith(":github_")) return;
198 |
199 | // models
200 | logseq.provideModel({
201 | async refreshGithub(e: any) {
202 | if (!checkSettings()) return;
203 | refreshCode(e.dataset.blockUuid, e.dataset.filePath);
204 | },
205 | async togglePin(e: any) {
206 | if (!checkSettings()) return;
207 | const block = await logseq.Editor.getBlock(e.dataset.blockUuid, {
208 | includeChildren: false,
209 | });
210 | // Toggle Pin setting
211 | let updatedContent = "";
212 | if (block?.content.includes("false")) {
213 | updatedContent = block?.content.replace("false", "true");
214 | const { rect } = e;
215 | logseq.toggleMainUI();
216 | }
217 | if (block?.content.includes("true")) {
218 | updatedContent = block?.content.replace("true", "false");
219 | }
220 |
221 | // Update recycle button
222 | logseq.Editor.updateBlock(e.dataset.blockUuid, updatedContent);
223 | },
224 | });
225 |
226 | logseq.provideStyle(`
227 | .github-refresh-btn {
228 | border: 1px solid var(--ls-border-color);
229 | white-space: initial;
230 | padding: 2px 4px;
231 | border-radius: 4px;
232 | user-select: none;
233 | cursor: default;
234 | display: flex;
235 | align-content: center;
236 | }
237 |
238 | .github-refresh-btn:hover {
239 | opacity: .8;
240 | background-color: #92a8d1;
241 | color: white;
242 | }
243 |
244 | .github-commit-id {
245 | border: 1px solid var(--ls-border-color);
246 | white-space: initial;
247 | padding: 2px 4px;
248 | border-radius: 4px;
249 | user-select: none;
250 | cursor: default;
251 | display: flex;
252 | align-content: center;
253 | color: #c9c8c5;
254 | }
255 |
256 | .github-commit-id:hover {
257 | opacity: .8;
258 | background-color: #92a8d1;
259 | color: white;
260 | }
261 |
262 |
263 |
264 | `);
265 |
266 | logseq.provideUI({
267 | key: "github_refresh_mounted",
268 | slot,
269 | reset: true,
270 | template: `
271 |
279 |
285 | `,
286 | });
287 | });
288 | })
289 | .catch((err) => {
290 | console.log(`VS Code Error: ${err.message}`);
291 | });
292 |
--------------------------------------------------------------------------------
/FileUtils.ts:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import "@logseq/libs";
3 |
4 | const decode = (str: string): string =>
5 | Buffer.from(str, "base64").toString("binary");
6 | const contents = "/contents/";
7 | let commit_id = "";
8 | let commit_message = "";
9 |
10 | export interface CodeType {
11 | ext: string;
12 | type: string;
13 | }
14 | /**
15 | * Extensions that correspond to the supported file types - autogenerated from CodeMirror modeInfo
16 | **/
17 | const CodeTypes = [
18 | {
19 | ext: "dyalog",
20 | type: "apl",
21 | },
22 | {
23 | ext: "apl",
24 | type: "apl",
25 | },
26 | {
27 | ext: "asc",
28 | type: "asciiarmor",
29 | },
30 | {
31 | ext: "pgp",
32 | type: "asciiarmor",
33 | },
34 | {
35 | ext: "sig",
36 | type: "asciiarmor",
37 | },
38 | {
39 | ext: "asn",
40 | type: "asn.1",
41 | },
42 | {
43 | ext: "asn1",
44 | type: "asn.1",
45 | },
46 | {
47 | ext: "b",
48 | type: "brainfuck",
49 | },
50 | {
51 | ext: "bf",
52 | type: "brainfuck",
53 | },
54 | {
55 | ext: "c",
56 | type: "clike",
57 | },
58 | {
59 | ext: "h",
60 | type: "clike",
61 | },
62 | {
63 | ext: "ino",
64 | type: "clike",
65 | },
66 | {
67 | ext: "cpp",
68 | type: "clike",
69 | },
70 | {
71 | ext: "c++",
72 | type: "clike",
73 | },
74 | {
75 | ext: "cc",
76 | type: "clike",
77 | },
78 | {
79 | ext: "cxx",
80 | type: "clike",
81 | },
82 | {
83 | ext: "hpp",
84 | type: "clike",
85 | },
86 | {
87 | ext: "h++",
88 | type: "clike",
89 | },
90 | {
91 | ext: "hh",
92 | type: "clike",
93 | },
94 | {
95 | ext: "hxx",
96 | type: "clike",
97 | },
98 | {
99 | ext: "cob",
100 | type: "cobol",
101 | },
102 | {
103 | ext: "cpy",
104 | type: "cobol",
105 | },
106 | {
107 | ext: "cbl",
108 | type: "cobol",
109 | },
110 | {
111 | ext: "cs",
112 | type: "clike",
113 | },
114 | {
115 | ext: "clj",
116 | type: "clojure",
117 | },
118 | {
119 | ext: "cljc",
120 | type: "clojure",
121 | },
122 | {
123 | ext: "cljx",
124 | type: "clojure",
125 | },
126 | {
127 | ext: "cljs",
128 | type: "clojure",
129 | },
130 | {
131 | ext: "gss",
132 | type: "css",
133 | },
134 | {
135 | ext: "cmake",
136 | type: "cmake",
137 | },
138 | {
139 | ext: "cmake.in",
140 | type: "cmake",
141 | },
142 | {
143 | ext: "coffee",
144 | type: "coffeescript",
145 | },
146 | {
147 | ext: "cl",
148 | type: "commonlisp",
149 | },
150 | {
151 | ext: "lisp",
152 | type: "commonlisp",
153 | },
154 | {
155 | ext: "el",
156 | type: "commonlisp",
157 | },
158 | {
159 | ext: "cyp",
160 | type: "cypher",
161 | },
162 | {
163 | ext: "cypher",
164 | type: "cypher",
165 | },
166 | {
167 | ext: "pyx",
168 | type: "python",
169 | },
170 | {
171 | ext: "pxd",
172 | type: "python",
173 | },
174 | {
175 | ext: "pxi",
176 | type: "python",
177 | },
178 | {
179 | ext: "cr",
180 | type: "crystal",
181 | },
182 | {
183 | ext: "css",
184 | type: "css",
185 | },
186 | {
187 | ext: "cql",
188 | type: "sql",
189 | },
190 | {
191 | ext: "d",
192 | type: "d",
193 | },
194 | {
195 | ext: "dart",
196 | type: "dart",
197 | },
198 | {
199 | ext: "diff",
200 | type: "diff",
201 | },
202 | {
203 | ext: "patch",
204 | type: "diff",
205 | },
206 | {
207 | ext: "dtd",
208 | type: "dtd",
209 | },
210 | {
211 | ext: "dylan",
212 | type: "dylan",
213 | },
214 | {
215 | ext: "dyl",
216 | type: "dylan",
217 | },
218 | {
219 | ext: "intr",
220 | type: "dylan",
221 | },
222 | {
223 | ext: "ecl",
224 | type: "ecl",
225 | },
226 | {
227 | ext: "edn",
228 | type: "clojure",
229 | },
230 | {
231 | ext: "e",
232 | type: "eiffel",
233 | },
234 | {
235 | ext: "elm",
236 | type: "elm",
237 | },
238 | {
239 | ext: "ejs",
240 | type: "htmlembedded",
241 | },
242 | {
243 | ext: "erb",
244 | type: "htmlembedded",
245 | },
246 | {
247 | ext: "erl",
248 | type: "erlang",
249 | },
250 | {
251 | ext: "factor",
252 | type: "factor",
253 | },
254 | {
255 | ext: "forth",
256 | type: "forth",
257 | },
258 | {
259 | ext: "fth",
260 | type: "forth",
261 | },
262 | {
263 | ext: "4th",
264 | type: "forth",
265 | },
266 | {
267 | ext: "f",
268 | type: "fortran",
269 | },
270 | {
271 | ext: "for",
272 | type: "fortran",
273 | },
274 | {
275 | ext: "f77",
276 | type: "fortran",
277 | },
278 | {
279 | ext: "f90",
280 | type: "fortran",
281 | },
282 | {
283 | ext: "f95",
284 | type: "fortran",
285 | },
286 | {
287 | ext: "fs",
288 | type: "mllike",
289 | },
290 | {
291 | ext: "s",
292 | type: "gas",
293 | },
294 | {
295 | ext: "feature",
296 | type: "gherkin",
297 | },
298 | {
299 | ext: "go",
300 | type: "go",
301 | },
302 | {
303 | ext: "groovy",
304 | type: "groovy",
305 | },
306 | {
307 | ext: "gradle",
308 | type: "groovy",
309 | },
310 | {
311 | ext: "haml",
312 | type: "haml",
313 | },
314 | {
315 | ext: "hs",
316 | type: "haskell",
317 | },
318 | {
319 | ext: "lhs",
320 | type: "haskell-literate",
321 | },
322 | {
323 | ext: "hx",
324 | type: "haxe",
325 | },
326 | {
327 | ext: "hxml",
328 | type: "haxe",
329 | },
330 | {
331 | ext: "aspx",
332 | type: "htmlembedded",
333 | },
334 | {
335 | ext: "html",
336 | type: "htmlmixed",
337 | },
338 | {
339 | ext: "htm",
340 | type: "htmlmixed",
341 | },
342 | {
343 | ext: "handlebars",
344 | type: "htmlmixed",
345 | },
346 | {
347 | ext: "hbs",
348 | type: "htmlmixed",
349 | },
350 | {
351 | ext: "pro",
352 | type: "idl",
353 | },
354 | {
355 | ext: "jade",
356 | type: "pug",
357 | },
358 | {
359 | ext: "pug",
360 | type: "pug",
361 | },
362 | {
363 | ext: "java",
364 | type: "clike",
365 | },
366 | {
367 | ext: "jsp",
368 | type: "htmlembedded",
369 | },
370 | {
371 | ext: "js",
372 | type: "javascript",
373 | },
374 | {
375 | ext: "json",
376 | type: "javascript",
377 | },
378 | {
379 | ext: "map",
380 | type: "javascript",
381 | },
382 | {
383 | ext: "jsonld",
384 | type: "javascript",
385 | },
386 | {
387 | ext: "jsx",
388 | type: "jsx",
389 | },
390 | {
391 | ext: "j2",
392 | type: "jinja2",
393 | },
394 | {
395 | ext: "jinja",
396 | type: "jinja2",
397 | },
398 | {
399 | ext: "jinja2",
400 | type: "jinja2",
401 | },
402 | {
403 | ext: "jl",
404 | type: "julia",
405 | },
406 | {
407 | ext: "kt",
408 | type: "clike",
409 | },
410 | {
411 | ext: "less",
412 | type: "css",
413 | },
414 | {
415 | ext: "ls",
416 | type: "livescript",
417 | },
418 | {
419 | ext: "lua",
420 | type: "lua",
421 | },
422 | {
423 | ext: "markdown",
424 | type: "markdown",
425 | },
426 | {
427 | ext: "md",
428 | type: "markdown",
429 | },
430 | {
431 | ext: "mkd",
432 | type: "markdown",
433 | },
434 | {
435 | ext: "m",
436 | type: "mathematica",
437 | },
438 | {
439 | ext: "nb",
440 | type: "mathematica",
441 | },
442 | {
443 | ext: "wl",
444 | type: "mathematica",
445 | },
446 | {
447 | ext: "wls",
448 | type: "mathematica",
449 | },
450 | {
451 | ext: "mo",
452 | type: "modelica",
453 | },
454 | {
455 | ext: "mps",
456 | type: "mumps",
457 | },
458 | {
459 | ext: "mbox",
460 | type: "mbox",
461 | },
462 | {
463 | ext: "nsh",
464 | type: "nsis",
465 | },
466 | {
467 | ext: "nsi",
468 | type: "nsis",
469 | },
470 | {
471 | ext: "nt",
472 | type: "ntriples",
473 | },
474 | {
475 | ext: "nq",
476 | type: "ntriples",
477 | },
478 | {
479 | ext: "m",
480 | type: "clike",
481 | },
482 | {
483 | ext: "mm",
484 | type: "clike",
485 | },
486 | {
487 | ext: "ml",
488 | type: "mllike",
489 | },
490 | {
491 | ext: "mli",
492 | type: "mllike",
493 | },
494 | {
495 | ext: "mll",
496 | type: "mllike",
497 | },
498 | {
499 | ext: "mly",
500 | type: "mllike",
501 | },
502 | {
503 | ext: "m",
504 | type: "octave",
505 | },
506 | {
507 | ext: "oz",
508 | type: "oz",
509 | },
510 | {
511 | ext: "p",
512 | type: "pascal",
513 | },
514 | {
515 | ext: "pas",
516 | type: "pascal",
517 | },
518 | {
519 | ext: "jsonld",
520 | type: "pegjs",
521 | },
522 | {
523 | ext: "pl",
524 | type: "perl",
525 | },
526 | {
527 | ext: "pm",
528 | type: "perl",
529 | },
530 | {
531 | ext: "php",
532 | type: "php",
533 | },
534 | {
535 | ext: "php3",
536 | type: "php",
537 | },
538 | {
539 | ext: "php4",
540 | type: "php",
541 | },
542 | {
543 | ext: "php5",
544 | type: "php",
545 | },
546 | {
547 | ext: "php7",
548 | type: "php",
549 | },
550 | {
551 | ext: "phtml",
552 | type: "php",
553 | },
554 | {
555 | ext: "pig",
556 | type: "pig",
557 | },
558 | {
559 | ext: "txt",
560 | type: "null",
561 | },
562 | {
563 | ext: "text",
564 | type: "null",
565 | },
566 | {
567 | ext: "conf",
568 | type: "null",
569 | },
570 | {
571 | ext: "def",
572 | type: "null",
573 | },
574 | {
575 | ext: "list",
576 | type: "null",
577 | },
578 | {
579 | ext: "log",
580 | type: "null",
581 | },
582 | {
583 | ext: "pls",
584 | type: "sql",
585 | },
586 | {
587 | ext: "ps1",
588 | type: "powershell",
589 | },
590 | {
591 | ext: "psd1",
592 | type: "powershell",
593 | },
594 | {
595 | ext: "psm1",
596 | type: "powershell",
597 | },
598 | {
599 | ext: "properties",
600 | type: "properties",
601 | },
602 | {
603 | ext: "ini",
604 | type: "properties",
605 | },
606 | {
607 | ext: "in",
608 | type: "properties",
609 | },
610 | {
611 | ext: "proto",
612 | type: "protobuf",
613 | },
614 | {
615 | ext: "BUILD",
616 | type: "python",
617 | },
618 | {
619 | ext: "bzl",
620 | type: "python",
621 | },
622 | {
623 | ext: "py",
624 | type: "python",
625 | },
626 | {
627 | ext: "pyw",
628 | type: "python",
629 | },
630 | {
631 | ext: "pp",
632 | type: "puppet",
633 | },
634 | {
635 | ext: "q",
636 | type: "q",
637 | },
638 | {
639 | ext: "r",
640 | type: "r",
641 | },
642 | {
643 | ext: "R",
644 | type: "r",
645 | },
646 | {
647 | ext: "rst",
648 | type: "rst",
649 | },
650 | {
651 | ext: "spec",
652 | type: "rpm",
653 | },
654 | {
655 | ext: "rb",
656 | type: "ruby",
657 | },
658 | {
659 | ext: "rs",
660 | type: "rust",
661 | },
662 | {
663 | ext: "sas",
664 | type: "sas",
665 | },
666 | {
667 | ext: "sass",
668 | type: "sass",
669 | },
670 | {
671 | ext: "scala",
672 | type: "clike",
673 | },
674 | {
675 | ext: "scm",
676 | type: "scheme",
677 | },
678 | {
679 | ext: "ss",
680 | type: "scheme",
681 | },
682 | {
683 | ext: "scss",
684 | type: "css",
685 | },
686 | {
687 | ext: "sh",
688 | type: "shell",
689 | },
690 | {
691 | ext: "ksh",
692 | type: "shell",
693 | },
694 | {
695 | ext: "bash",
696 | type: "shell",
697 | },
698 | {
699 | ext: "siv",
700 | type: "sieve",
701 | },
702 | {
703 | ext: "sieve",
704 | type: "sieve",
705 | },
706 | {
707 | ext: "slim",
708 | type: "slim",
709 | },
710 | {
711 | ext: "st",
712 | type: "smalltalk",
713 | },
714 | {
715 | ext: "tpl",
716 | type: "smarty",
717 | },
718 | {
719 | ext: "sml",
720 | type: "mllike",
721 | },
722 | {
723 | ext: "sig",
724 | type: "mllike",
725 | },
726 | {
727 | ext: "fun",
728 | type: "mllike",
729 | },
730 | {
731 | ext: "smackspec",
732 | type: "mllike",
733 | },
734 | {
735 | ext: "soy",
736 | type: "soy",
737 | },
738 | {
739 | ext: "rq",
740 | type: "sparql",
741 | },
742 | {
743 | ext: "sparql",
744 | type: "sparql",
745 | },
746 | {
747 | ext: "sql",
748 | type: "sql",
749 | },
750 | {
751 | ext: "nut",
752 | type: "clike",
753 | },
754 | {
755 | ext: "styl",
756 | type: "stylus",
757 | },
758 | {
759 | ext: "swift",
760 | type: "swift",
761 | },
762 | {
763 | ext: "text",
764 | type: "stex",
765 | },
766 | {
767 | ext: "ltx",
768 | type: "stex",
769 | },
770 | {
771 | ext: "tex",
772 | type: "stex",
773 | },
774 | {
775 | ext: "v",
776 | type: "verilog",
777 | },
778 | {
779 | ext: "sv",
780 | type: "verilog",
781 | },
782 | {
783 | ext: "svh",
784 | type: "verilog",
785 | },
786 | {
787 | ext: "tcl",
788 | type: "tcl",
789 | },
790 | {
791 | ext: "textile",
792 | type: "textile",
793 | },
794 | {
795 | ext: "toml",
796 | type: "toml",
797 | },
798 | {
799 | ext: "1",
800 | type: "troff",
801 | },
802 | {
803 | ext: "2",
804 | type: "troff",
805 | },
806 | {
807 | ext: "3",
808 | type: "troff",
809 | },
810 | {
811 | ext: "4",
812 | type: "troff",
813 | },
814 | {
815 | ext: "5",
816 | type: "troff",
817 | },
818 | {
819 | ext: "6",
820 | type: "troff",
821 | },
822 | {
823 | ext: "7",
824 | type: "troff",
825 | },
826 | {
827 | ext: "8",
828 | type: "troff",
829 | },
830 | {
831 | ext: "9",
832 | type: "troff",
833 | },
834 | {
835 | ext: "ttcn",
836 | type: "ttcn",
837 | },
838 | {
839 | ext: "ttcn3",
840 | type: "ttcn",
841 | },
842 | {
843 | ext: "ttcnpp",
844 | type: "ttcn",
845 | },
846 | {
847 | ext: "cfg",
848 | type: "ttcn-cfg",
849 | },
850 | {
851 | ext: "ttl",
852 | type: "turtle",
853 | },
854 | {
855 | ext: "ts",
856 | type: "javascript",
857 | },
858 | {
859 | ext: "tsx",
860 | type: "jsx",
861 | },
862 | {
863 | ext: "webidl",
864 | type: "webidl",
865 | },
866 | {
867 | ext: "vb",
868 | type: "vb",
869 | },
870 | {
871 | ext: "vbs",
872 | type: "vbscript",
873 | },
874 | {
875 | ext: "vtl",
876 | type: "velocity",
877 | },
878 | {
879 | ext: "v",
880 | type: "verilog",
881 | },
882 | {
883 | ext: "vhd",
884 | type: "vhdl",
885 | },
886 | {
887 | ext: "vhdl",
888 | type: "vhdl",
889 | },
890 | {
891 | ext: "vue",
892 | type: "vue",
893 | },
894 | {
895 | ext: "xml",
896 | type: "xml",
897 | },
898 | {
899 | ext: "xsl",
900 | type: "xml",
901 | },
902 | {
903 | ext: "xsd",
904 | type: "xml",
905 | },
906 | {
907 | ext: "svg",
908 | type: "xml",
909 | },
910 | {
911 | ext: "xy",
912 | type: "xquery",
913 | },
914 | {
915 | ext: "xquery",
916 | type: "xquery",
917 | },
918 | {
919 | ext: "ys",
920 | type: "yacas",
921 | },
922 | {
923 | ext: "yaml",
924 | type: "yaml",
925 | },
926 | {
927 | ext: "yml",
928 | type: "yaml",
929 | },
930 | {
931 | ext: "z80",
932 | type: "z80",
933 | },
934 | {
935 | ext: "mscgen",
936 | type: "mscgen",
937 | },
938 | {
939 | ext: "mscin",
940 | type: "mscgen",
941 | },
942 | {
943 | ext: "msc",
944 | type: "mscgen",
945 | },
946 | {
947 | ext: "xu",
948 | type: "mscgen",
949 | },
950 | {
951 | ext: "msgenny",
952 | type: "mscgen",
953 | },
954 | {
955 | ext: "wat",
956 | type: "wast",
957 | },
958 | {
959 | ext: "wast",
960 | type: "wast",
961 | },
962 | ];
963 |
964 | /**
965 | * Internal structure for passing code file contents
966 | */
967 | interface CodeFile {
968 | content: string;
969 | type: string | undefined;
970 | commit_id?: string;
971 | commit_message?: string;
972 | }
973 |
974 | interface CommitListEntry {
975 | id: string;
976 | date: Date;
977 | message: string;
978 | }
979 |
980 | interface RepoListEntry {
981 | name: string;
982 | description: string;
983 | }
984 |
985 | let repoCommitsList: {
986 | account: string;
987 | repo: string;
988 | commits: CommitListEntry[];
989 | }[] = [];
990 |
991 | export const parseFilePath = (filePath: string): string[] => {
992 | let account = logseq!.settings!.githubAccount
993 | ? logseq!.settings!.githubAccount
994 | : "";
995 | let repo = logseq!.settings!.githubRepo ? logseq!.settings!.githubRepo : "";
996 |
997 | // Parse filepath for Github account name
998 | let parts = filePath.split("::");
999 | if (parts.length == 2) {
1000 | // Parse the path for the account name
1001 | account = parts[0];
1002 | filePath = parts[1];
1003 | }
1004 |
1005 | // Parse filePath for repo name
1006 | parts = filePath.split(":");
1007 | if (parts.length == 2) {
1008 | repo = parts[0];
1009 | filePath = parts[1];
1010 | }
1011 |
1012 | return [account, repo, filePath];
1013 | };
1014 |
1015 | /**
1016 | *
1017 | * @param filePath
1018 | * @returns Promise for the codefile structure for the requested file.
1019 | *
1020 | * Attempts to retrieve the requested file from VS code via the live server on port 5500.
1021 | */
1022 |
1023 | export async function getFile(filePath: string): Promise {
1024 | //Retrieve github settings
1025 | const githubURL = "https://api.github.com/repos/";
1026 |
1027 | const token = logseq!.settings!.githubPat;
1028 | try {
1029 | let [account, repo, file] = parseFilePath(filePath);
1030 | // Abort if no account provided
1031 | if (account == "") {
1032 | logseq.App.showMsg(
1033 | `No GitHub account name provided and no default set.`,
1034 | "error"
1035 | );
1036 | return {
1037 | content: "No Github account name provided and do default set.",
1038 | type: "error",
1039 | };
1040 | }
1041 |
1042 | // Abort if no repo provided
1043 | if (repo == "") {
1044 | logseq.App.showMsg(`No repository name provided.`, "error");
1045 | return {
1046 | content: "No repository name provided",
1047 | type: "error",
1048 | };
1049 | }
1050 |
1051 | await getCommits(account, repo, file);
1052 |
1053 | // Update commit_id to latest commit
1054 | const repoCommits = repoCommitsList.find((rcl) => {
1055 | return rcl.repo == repo && rcl.account == account;
1056 | })?.commits;
1057 | const latestRepo = repoCommits!.sort(
1058 | (a, b) => b.date.getMilliseconds() - a.date.getMilliseconds()
1059 | )[0];
1060 | commit_id = latestRepo?.id;
1061 | commit_message = latestRepo?.message;
1062 |
1063 | const endpoint =
1064 | githubURL + account + "/" + repo + contents + file + "?ref=" + commit_id;
1065 | let bits = file.split(".");
1066 |
1067 | let response = await axios.get(endpoint, {
1068 | headers: {
1069 | Authorization: `token ${token}`,
1070 | },
1071 | });
1072 |
1073 | let fileType: string = bits.length > 1 ? bits[bits.length - 1] : "txt"; // Set files with no extension to extension txt.
1074 |
1075 | // Look for type
1076 | let codeType = CodeTypes.find((c) => {
1077 | return c.ext == fileType;
1078 | });
1079 |
1080 | if (codeType == undefined) codeType = { ext: "unknown", type: "null" };
1081 |
1082 | let myText = decode(response.data.content);
1083 | myText.replace(/\n/g, "\r");
1084 | return {
1085 | content: myText,
1086 | type: codeType.type == "null" ? "" : codeType.type, // Set files with unknown extension to extension txt
1087 | commit_id: commit_id,
1088 | commit_message: commit_message,
1089 | };
1090 | } catch (err) {
1091 | if ((err.message = "Failed to fetch")) {
1092 | logseq.App.showMsg(
1093 | `The file was not found. Github is case sensitive so check the case of the path you provided.`,
1094 | "error"
1095 | );
1096 | return {
1097 | content: err.message,
1098 | type: "error",
1099 | };
1100 | } else {
1101 | logseq.App.showMsg(`error is ${err.message}`, "error");
1102 | return {
1103 | content: err.message,
1104 | type: "error",
1105 | };
1106 | }
1107 | }
1108 | }
1109 |
1110 | export async function getRepos(): Promise {
1111 | //Retrieve github settings
1112 | const endpoint = "https://api.github.com/user/repos?per_page=100";
1113 | const token = logseq!.settings!.githubPat;
1114 |
1115 | let response = await axios.get(endpoint, {
1116 | headers: {
1117 | Authorization: `token ${token}`,
1118 | },
1119 | });
1120 | const repoList: RepoListEntry[] = [];
1121 | response.data.forEach((repo) => {
1122 | repoList.push({
1123 | name: repo.name,
1124 | description: repo.description,
1125 | });
1126 | });
1127 | return repoList;
1128 | }
1129 |
1130 | export async function getCommits(
1131 | account: string,
1132 | repo: string,
1133 | file: string
1134 | ): Promise {
1135 | //Retrieve github settings
1136 | const githubURL = "https://api.github.com/repos/" + account + "/";
1137 | const token = logseq!.settings!.githubPat;
1138 |
1139 | // Check if the commit list already exists
1140 | let arIndex = repoCommitsList.findIndex((a) => {
1141 | return a.repo == repo && a.account == account;
1142 | });
1143 |
1144 | //Update commit list
1145 | const endpoint = githubURL + repo + "/commits";
1146 |
1147 | let response = await axios.get(endpoint, {
1148 | headers: {
1149 | Authorization: `token ${token}`,
1150 | },
1151 | });
1152 | const commitList: {
1153 | account: string;
1154 | repo: string;
1155 | commits: CommitListEntry[];
1156 | } = {
1157 | account: account,
1158 | repo: repo,
1159 | commits: [],
1160 | };
1161 | response.data.forEach((commit) => {
1162 | commitList.commits.push({
1163 | message: commit.commit.message.replace(/\n/g, " ").replace(/\r/g, " "),
1164 | date: new Date(commit.commit.author.date),
1165 | id: commit.url.split("/").pop(),
1166 | });
1167 | });
1168 | // Add or Update
1169 | if (arIndex >= 0) {
1170 | repoCommitsList[arIndex] = commitList;
1171 | } else {
1172 | repoCommitsList.push(commitList);
1173 | }
1174 |
1175 | return;
1176 | }
1177 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.3
2 |
3 | specifiers:
4 | '@logseq/libs': 0.0.1-alpha.35
5 | axios: ^0.26.0
6 | buffer: ^6.0.3
7 | parcel: 2.0.0
8 | typescript: 4.4.3
9 |
10 | dependencies:
11 | '@logseq/libs': 0.0.1-alpha.35
12 | axios: 0.26.0
13 |
14 | devDependencies:
15 | buffer: 6.0.3
16 | parcel: 2.0.0
17 | typescript: 4.4.3
18 |
19 | packages:
20 |
21 | /@babel/code-frame/7.16.7:
22 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==}
23 | engines: {node: '>=6.9.0'}
24 | dependencies:
25 | '@babel/highlight': 7.16.10
26 | dev: true
27 |
28 | /@babel/helper-validator-identifier/7.16.7:
29 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
30 | engines: {node: '>=6.9.0'}
31 | dev: true
32 |
33 | /@babel/highlight/7.16.10:
34 | resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==}
35 | engines: {node: '>=6.9.0'}
36 | dependencies:
37 | '@babel/helper-validator-identifier': 7.16.7
38 | chalk: 2.4.2
39 | js-tokens: 4.0.0
40 | dev: true
41 |
42 | /@logseq/libs/0.0.1-alpha.35:
43 | resolution: {integrity: sha512-KikcqgolrTFqlEWoiprAdRsz9kwUX3XwcjzWa9usBGLwgGCpq6E/1UvvhQweJJAXAGDUVUHIzdJ6Cm6pvuOBWQ==}
44 | dependencies:
45 | csstype: 3.0.8
46 | debug: 4.3.1
47 | dompurify: 2.3.1
48 | eventemitter3: 4.0.7
49 | fast-deep-equal: 3.1.3
50 | lodash-es: 4.17.21
51 | path: 0.12.7
52 | snake-case: 3.0.4
53 | transitivePeerDependencies:
54 | - supports-color
55 | dev: false
56 |
57 | /@parcel/bundler-default/2.3.2_@parcel+core@2.3.2:
58 | resolution: {integrity: sha512-JUrto4mjSD0ic9dEqRp0loL5o3HVYHja1ZIYSq+rBl2UWRV6/9cGTb07lXOCqqm0BWE+hQ4krUxB76qWaF0Lqw==}
59 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
60 | dependencies:
61 | '@parcel/diagnostic': 2.3.2
62 | '@parcel/hash': 2.3.2
63 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
64 | '@parcel/utils': 2.3.2
65 | nullthrows: 1.1.1
66 | transitivePeerDependencies:
67 | - '@parcel/core'
68 | dev: true
69 |
70 | /@parcel/cache/2.3.2_@parcel+core@2.3.2:
71 | resolution: {integrity: sha512-Xxq+ekgcFEme6Fn1v7rEOBkyMOUOUu7eNqQw0l6HQS+INZ2Q7YzzfdW7pI8rEOAAICVg5BWKpmBQZpgJlT+HxQ==}
72 | engines: {node: '>= 12.0.0'}
73 | peerDependencies:
74 | '@parcel/core': ^2.3.2
75 | dependencies:
76 | '@parcel/core': 2.3.2
77 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2
78 | '@parcel/logger': 2.3.2
79 | '@parcel/utils': 2.3.2
80 | lmdb: 2.2.1
81 | dev: true
82 |
83 | /@parcel/codeframe/2.3.2:
84 | resolution: {integrity: sha512-ireQALcxxrTdIEpzTOoMo/GpfbFm1qlyezeGl3Hce3PMvHLg3a5S6u/Vcy7SAjdld5GfhHEqVY+blME6Z4CyXQ==}
85 | engines: {node: '>= 12.0.0'}
86 | dependencies:
87 | chalk: 4.1.2
88 | dev: true
89 |
90 | /@parcel/compressor-raw/2.3.2_@parcel+core@2.3.2:
91 | resolution: {integrity: sha512-8dIoFwinYK6bOTpnZOAwwIv0v73y0ezsctPmfMnIqVQPn7wJwfhw/gbKVcmK5AkgQMkyid98hlLZoaZtGF1Mdg==}
92 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
93 | dependencies:
94 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
95 | transitivePeerDependencies:
96 | - '@parcel/core'
97 | dev: true
98 |
99 | /@parcel/config-default/2.3.2_@parcel+core@2.3.2:
100 | resolution: {integrity: sha512-E7/iA7fGCYvXU3u6zF9nxjeDVsgjCN6MVvDjymjaxYMoDWTIsPV245SBEXqzgtmzbMAV+VAl4rVWLMB4pzMt9g==}
101 | peerDependencies:
102 | '@parcel/core': ^2.3.2
103 | dependencies:
104 | '@parcel/bundler-default': 2.3.2_@parcel+core@2.3.2
105 | '@parcel/compressor-raw': 2.3.2_@parcel+core@2.3.2
106 | '@parcel/core': 2.3.2
107 | '@parcel/namer-default': 2.3.2_@parcel+core@2.3.2
108 | '@parcel/optimizer-cssnano': 2.3.2_@parcel+core@2.3.2
109 | '@parcel/optimizer-htmlnano': 2.3.2_@parcel+core@2.3.2
110 | '@parcel/optimizer-image': 2.3.2_@parcel+core@2.3.2
111 | '@parcel/optimizer-svgo': 2.3.2_@parcel+core@2.3.2
112 | '@parcel/optimizer-terser': 2.3.2_@parcel+core@2.3.2
113 | '@parcel/packager-css': 2.3.2_@parcel+core@2.3.2
114 | '@parcel/packager-html': 2.3.2_@parcel+core@2.3.2
115 | '@parcel/packager-js': 2.3.2_@parcel+core@2.3.2
116 | '@parcel/packager-raw': 2.3.2_@parcel+core@2.3.2
117 | '@parcel/packager-svg': 2.3.2_@parcel+core@2.3.2
118 | '@parcel/reporter-dev-server': 2.3.2_@parcel+core@2.3.2
119 | '@parcel/resolver-default': 2.3.2_@parcel+core@2.3.2
120 | '@parcel/runtime-browser-hmr': 2.3.2_@parcel+core@2.3.2
121 | '@parcel/runtime-js': 2.3.2_@parcel+core@2.3.2
122 | '@parcel/runtime-react-refresh': 2.3.2_@parcel+core@2.3.2
123 | '@parcel/runtime-service-worker': 2.3.2_@parcel+core@2.3.2
124 | '@parcel/transformer-babel': 2.3.2_@parcel+core@2.3.2
125 | '@parcel/transformer-css': 2.3.2_@parcel+core@2.3.2
126 | '@parcel/transformer-html': 2.3.2_@parcel+core@2.3.2
127 | '@parcel/transformer-image': 2.3.2_@parcel+core@2.3.2
128 | '@parcel/transformer-js': 2.3.2_@parcel+core@2.3.2
129 | '@parcel/transformer-json': 2.3.2_@parcel+core@2.3.2
130 | '@parcel/transformer-postcss': 2.3.2_@parcel+core@2.3.2
131 | '@parcel/transformer-posthtml': 2.3.2_@parcel+core@2.3.2
132 | '@parcel/transformer-raw': 2.3.2_@parcel+core@2.3.2
133 | '@parcel/transformer-react-refresh-wrap': 2.3.2_@parcel+core@2.3.2
134 | '@parcel/transformer-svg': 2.3.2_@parcel+core@2.3.2
135 | transitivePeerDependencies:
136 | - acorn
137 | - cssnano
138 | - postcss
139 | - purgecss
140 | - relateurl
141 | - srcset
142 | - terser
143 | - uncss
144 | dev: true
145 |
146 | /@parcel/core/2.3.2:
147 | resolution: {integrity: sha512-gdJzpsgeUhv9H8T0UKVmyuptiXdduEfKIUx0ci+/PGhq8cCoiFnlnuhW6H7oLr79OUc+YJStabDJuG4U2A6ysw==}
148 | engines: {node: '>= 12.0.0'}
149 | dependencies:
150 | '@parcel/cache': 2.3.2_@parcel+core@2.3.2
151 | '@parcel/diagnostic': 2.3.2
152 | '@parcel/events': 2.3.2
153 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2
154 | '@parcel/graph': 2.3.2
155 | '@parcel/hash': 2.3.2
156 | '@parcel/logger': 2.3.2
157 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
158 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
159 | '@parcel/source-map': 2.0.2
160 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
161 | '@parcel/utils': 2.3.2
162 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
163 | abortcontroller-polyfill: 1.7.3
164 | base-x: 3.0.9
165 | browserslist: 4.19.3
166 | clone: 2.1.2
167 | dotenv: 7.0.0
168 | dotenv-expand: 5.1.0
169 | json-source-map: 0.6.1
170 | json5: 2.2.0
171 | msgpackr: 1.5.4
172 | nullthrows: 1.1.1
173 | semver: 5.7.1
174 | dev: true
175 |
176 | /@parcel/diagnostic/2.3.2:
177 | resolution: {integrity: sha512-/xW93Az4AOiifuYW/c4CDbUcu3lx5FcUDAj9AGiR9NSTsF/ROC/RqnxvQ3AGtqa14R7vido4MXEpY3JEp6FsqA==}
178 | engines: {node: '>= 12.0.0'}
179 | dependencies:
180 | json-source-map: 0.6.1
181 | nullthrows: 1.1.1
182 | dev: true
183 |
184 | /@parcel/events/2.3.2:
185 | resolution: {integrity: sha512-WiYIwXMo4Vd+pi58vRoHkul8TPE5VEfMY+3FYwVCKPl/LYqSD+vz6wMx9uG18mEbB1d/ofefv5ZFQNtPGKO4tQ==}
186 | engines: {node: '>= 12.0.0'}
187 | dev: true
188 |
189 | /@parcel/fs-search/2.3.2:
190 | resolution: {integrity: sha512-u3DTEFnPtKuZvEtgGzfVjQUytegSSn3POi7WfwMwPIaeDPfYcyyhfl+c96z7VL9Gk/pqQ99/cGyAwFdFsnxxXA==}
191 | engines: {node: '>= 12.0.0'}
192 | dependencies:
193 | detect-libc: 1.0.3
194 | dev: true
195 |
196 | /@parcel/fs/2.3.2_@parcel+core@2.3.2:
197 | resolution: {integrity: sha512-XV+OsnRpN01QKU37lBN0TFKvv7uPKfQGbqFqYOrMbXH++Ae8rBU0Ykz+Yu4tv2h7shMlde+AMKgRnRTAJZpWEQ==}
198 | engines: {node: '>= 12.0.0'}
199 | peerDependencies:
200 | '@parcel/core': ^2.3.2
201 | dependencies:
202 | '@parcel/core': 2.3.2
203 | '@parcel/fs-search': 2.3.2
204 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
205 | '@parcel/utils': 2.3.2
206 | '@parcel/watcher': 2.0.5
207 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
208 | dev: true
209 |
210 | /@parcel/graph/2.3.2:
211 | resolution: {integrity: sha512-ltTBM3IEqumgmy4ABBFETT8NtAwSsjD9mY3WCyJ5P8rUshfVCg093rvBPbpuJYMaH/TV1AHVaWfZqaZ4JQDIQQ==}
212 | engines: {node: '>= 12.0.0'}
213 | dependencies:
214 | '@parcel/utils': 2.3.2
215 | nullthrows: 1.1.1
216 | dev: true
217 |
218 | /@parcel/hash/2.3.2:
219 | resolution: {integrity: sha512-SMtYTsHihws/wqdVnOr0QAGyGYsW9rJSJkkoRujUxo8l2ctnBN1ztv89eOUrdtgHsmcnj/oz1yw6sN38X+BUng==}
220 | engines: {node: '>= 12.0.0'}
221 | dependencies:
222 | detect-libc: 1.0.3
223 | xxhash-wasm: 0.4.2
224 | dev: true
225 |
226 | /@parcel/logger/2.3.2:
227 | resolution: {integrity: sha512-jIWd8TXDQf+EnNWSa7Q10lSQ6C1LSH8OZkTlaINrfVIw7s+3tVxO3I4pjp7/ARw7RX2gdNPlw6fH4Gn/HvvYbw==}
228 | engines: {node: '>= 12.0.0'}
229 | dependencies:
230 | '@parcel/diagnostic': 2.3.2
231 | '@parcel/events': 2.3.2
232 | dev: true
233 |
234 | /@parcel/markdown-ansi/2.3.2:
235 | resolution: {integrity: sha512-l01ggmag5QScCk9mYA0xHh5TWSffR84uPFP2KvaAMQQ9NLNufcFiU0mn/Mtr3pCb5L5dSzmJ+Oo9s7P1Kh/Fmg==}
236 | engines: {node: '>= 12.0.0'}
237 | dependencies:
238 | chalk: 4.1.2
239 | dev: true
240 |
241 | /@parcel/namer-default/2.3.2_@parcel+core@2.3.2:
242 | resolution: {integrity: sha512-3QUMC0+5+3KMKfoAxYAbpZtuRqTgyZKsGDWzOpuqwemqp6P8ahAvNPwSCi6QSkGcTmvtYwBu9/NHPSONxIFOfg==}
243 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
244 | dependencies:
245 | '@parcel/diagnostic': 2.3.2
246 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
247 | nullthrows: 1.1.1
248 | transitivePeerDependencies:
249 | - '@parcel/core'
250 | dev: true
251 |
252 | /@parcel/node-resolver-core/2.3.2:
253 | resolution: {integrity: sha512-wmrnMNzJN4GuHw2Ftho+BWgSWR6UCkW3XoMdphqcxpw/ieAdS2a+xYSosYkZgQZ6lGutSvLyJ1CkVvP6RLIdQQ==}
254 | engines: {node: '>= 12.0.0'}
255 | dependencies:
256 | '@parcel/diagnostic': 2.3.2
257 | '@parcel/utils': 2.3.2
258 | nullthrows: 1.1.1
259 | dev: true
260 |
261 | /@parcel/optimizer-cssnano/2.3.2_@parcel+core@2.3.2:
262 | resolution: {integrity: sha512-wTBOxMiBI38NAB9XIlQZRCjS59+EWjWR9M04D3TWyxl+dL5gYMc1cl4GNynUnmcPdz+3s1UbOdo5/8V90wjiiw==}
263 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
264 | dependencies:
265 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
266 | '@parcel/source-map': 2.0.2
267 | cssnano: 5.0.17_postcss@8.4.6
268 | postcss: 8.4.6
269 | transitivePeerDependencies:
270 | - '@parcel/core'
271 | dev: true
272 |
273 | /@parcel/optimizer-htmlnano/2.3.2_@parcel+core@2.3.2:
274 | resolution: {integrity: sha512-U8C0TDSxsx8HmHaLW0Zc7ha1fXQynzhvBjCRMGYnOiLiw0MOfLQxzQ2WKVSeCotmdlF63ayCwxWsd6BuqStiKQ==}
275 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
276 | dependencies:
277 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
278 | htmlnano: 2.0.0_svgo@2.8.0
279 | nullthrows: 1.1.1
280 | posthtml: 0.16.5
281 | svgo: 2.8.0
282 | transitivePeerDependencies:
283 | - '@parcel/core'
284 | - cssnano
285 | - postcss
286 | - purgecss
287 | - relateurl
288 | - srcset
289 | - terser
290 | - uncss
291 | dev: true
292 |
293 | /@parcel/optimizer-image/2.3.2_@parcel+core@2.3.2:
294 | resolution: {integrity: sha512-HOk3r5qdvY/PmI7Q3i2qEgFH3kP2QWG4Wq3wmC4suaF1+c2gpiQc+HKHWp4QvfbH3jhT00c5NxQyqPhbXeNI9Q==}
295 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
296 | dependencies:
297 | '@parcel/diagnostic': 2.3.2
298 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
299 | '@parcel/utils': 2.3.2
300 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
301 | detect-libc: 1.0.3
302 | transitivePeerDependencies:
303 | - '@parcel/core'
304 | dev: true
305 |
306 | /@parcel/optimizer-svgo/2.3.2_@parcel+core@2.3.2:
307 | resolution: {integrity: sha512-l7WvZ5+e7D1mVmLUxMVaSb29cviXzuvSY2OpQs0ukdPACDqag+C65hWMzwTiOSSRGPMIu96kQKpeVru2YjibhA==}
308 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
309 | dependencies:
310 | '@parcel/diagnostic': 2.3.2
311 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
312 | '@parcel/utils': 2.3.2
313 | svgo: 2.8.0
314 | transitivePeerDependencies:
315 | - '@parcel/core'
316 | dev: true
317 |
318 | /@parcel/optimizer-terser/2.3.2_@parcel+core@2.3.2:
319 | resolution: {integrity: sha512-dOapHhfy0xiNZa2IoEyHGkhhla07xsja79NPem14e5jCqY6Oi40jKNV4ab5uu5u1elWUjJuw69tiYbkDZWbKQw==}
320 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
321 | dependencies:
322 | '@parcel/diagnostic': 2.3.2
323 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
324 | '@parcel/source-map': 2.0.2
325 | '@parcel/utils': 2.3.2
326 | nullthrows: 1.1.1
327 | terser: 5.10.0
328 | transitivePeerDependencies:
329 | - '@parcel/core'
330 | - acorn
331 | dev: true
332 |
333 | /@parcel/package-manager/2.3.2_@parcel+core@2.3.2:
334 | resolution: {integrity: sha512-pAQfywKVORY8Ee+NHAyKzzQrKbnz8otWRejps7urwhDaTVLfAd5C/1ZV64ATZ9ALYP9jyoQ8bTaxVd4opcSuwg==}
335 | engines: {node: '>= 12.0.0'}
336 | peerDependencies:
337 | '@parcel/core': ^2.3.2
338 | dependencies:
339 | '@parcel/core': 2.3.2
340 | '@parcel/diagnostic': 2.3.2
341 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2
342 | '@parcel/logger': 2.3.2
343 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
344 | '@parcel/utils': 2.3.2
345 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
346 | semver: 5.7.1
347 | dev: true
348 |
349 | /@parcel/packager-css/2.3.2_@parcel+core@2.3.2:
350 | resolution: {integrity: sha512-ByuF9xDnQnpVL1Hdu9aY6SpxOuZowd3TH7joh1qdRPLeMHTEvUywHBXoiAyNdrhnLGum8uPEdY8Ra5Xuo1U7kg==}
351 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
352 | dependencies:
353 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
354 | '@parcel/source-map': 2.0.2
355 | '@parcel/utils': 2.3.2
356 | nullthrows: 1.1.1
357 | transitivePeerDependencies:
358 | - '@parcel/core'
359 | dev: true
360 |
361 | /@parcel/packager-html/2.3.2_@parcel+core@2.3.2:
362 | resolution: {integrity: sha512-YqAptdU+uqfgwSii76mRGcA/3TpuC6yHr8xG+11brqj/tEFLsurmX0naombzd7FgmrTE9w+kb0HUIMl2vRBn0A==}
363 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
364 | dependencies:
365 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
366 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
367 | '@parcel/utils': 2.3.2
368 | nullthrows: 1.1.1
369 | posthtml: 0.16.5
370 | transitivePeerDependencies:
371 | - '@parcel/core'
372 | dev: true
373 |
374 | /@parcel/packager-js/2.3.2_@parcel+core@2.3.2:
375 | resolution: {integrity: sha512-3OP0Ro9M1J+PIKZK4Ec2N5hjIPiqk++B2kMFeiUqvaNZjJgKrPPEICBhjS52rma4IE/NgmIMB3aI5pWqE/KwNA==}
376 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
377 | dependencies:
378 | '@parcel/diagnostic': 2.3.2
379 | '@parcel/hash': 2.3.2
380 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
381 | '@parcel/source-map': 2.0.2
382 | '@parcel/utils': 2.3.2
383 | globals: 13.12.1
384 | nullthrows: 1.1.1
385 | transitivePeerDependencies:
386 | - '@parcel/core'
387 | dev: true
388 |
389 | /@parcel/packager-raw/2.3.2_@parcel+core@2.3.2:
390 | resolution: {integrity: sha512-RnoZ7WgNAFWkEPrEefvyDqus7xfv9XGprHyTbfLittPaVAZpl+4eAv43nXyMfzk77Cgds6KcNpkosj3acEpNIQ==}
391 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
392 | dependencies:
393 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
394 | transitivePeerDependencies:
395 | - '@parcel/core'
396 | dev: true
397 |
398 | /@parcel/packager-svg/2.3.2_@parcel+core@2.3.2:
399 | resolution: {integrity: sha512-iIC0VeczOXynS7M5jCi3naMBRyAznBVJ3iMg92/GaI9duxPlUMGAlHzLAKNtoXkc00HMXDH7rrmMb04VX6FYSg==}
400 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
401 | dependencies:
402 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
403 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
404 | '@parcel/utils': 2.3.2
405 | posthtml: 0.16.5
406 | transitivePeerDependencies:
407 | - '@parcel/core'
408 | dev: true
409 |
410 | /@parcel/plugin/2.3.2_@parcel+core@2.3.2:
411 | resolution: {integrity: sha512-SaLZAJX4KH+mrAmqmcy9KJN+V7L+6YNTlgyqYmfKlNiHu7aIjLL+3prX8QRcgGtjAYziCxvPj0cl1CCJssaiGg==}
412 | engines: {node: '>= 12.0.0'}
413 | dependencies:
414 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
415 | transitivePeerDependencies:
416 | - '@parcel/core'
417 | dev: true
418 |
419 | /@parcel/reporter-cli/2.3.2_@parcel+core@2.3.2:
420 | resolution: {integrity: sha512-VYetmTXqW83npsvVvqlQZTbF3yVL3k/FCCl3kSWvOr9LZA0lmyqJWPjMHq37yIIOszQN/p5guLtgCjsP0UQw1Q==}
421 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
422 | dependencies:
423 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
424 | '@parcel/types': 2.3.2_@parcel+core@2.3.2
425 | '@parcel/utils': 2.3.2
426 | chalk: 4.1.2
427 | transitivePeerDependencies:
428 | - '@parcel/core'
429 | dev: true
430 |
431 | /@parcel/reporter-dev-server/2.3.2_@parcel+core@2.3.2:
432 | resolution: {integrity: sha512-E7LtnjAX4iiWMw2qKUyFBi3+bDz0UGjqgHoPQylUYYLi6opXjJz/oC+cCcCy4e3RZlkrl187XonvagS59YjDxA==}
433 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
434 | dependencies:
435 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
436 | '@parcel/utils': 2.3.2
437 | transitivePeerDependencies:
438 | - '@parcel/core'
439 | dev: true
440 |
441 | /@parcel/resolver-default/2.3.2_@parcel+core@2.3.2:
442 | resolution: {integrity: sha512-y3r+xOwWsATrNGUWuZ6soA7q24f8E5tY1AZ9lHCufnkK2cdKZJ5O1cyd7ohkAiKZx2/pMd+FgmVZ/J3oxetXkA==}
443 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
444 | dependencies:
445 | '@parcel/node-resolver-core': 2.3.2
446 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
447 | transitivePeerDependencies:
448 | - '@parcel/core'
449 | dev: true
450 |
451 | /@parcel/runtime-browser-hmr/2.3.2_@parcel+core@2.3.2:
452 | resolution: {integrity: sha512-nRD6uOyF1+HGylP9GASbYmvUDOsDaNwvaxuGTSh8+5M0mmCgib+hVBiPEKbwdmKjGbUPt9wRFPyMa/JpeQZsIQ==}
453 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
454 | dependencies:
455 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
456 | '@parcel/utils': 2.3.2
457 | transitivePeerDependencies:
458 | - '@parcel/core'
459 | dev: true
460 |
461 | /@parcel/runtime-js/2.3.2_@parcel+core@2.3.2:
462 | resolution: {integrity: sha512-SJepcHvYO/7CEe/Q85sngk+smcJ6TypuPh4D2R8kN+cAJPi5WvbQEe7+x5BEgbN+5Jumi/Uo3FfOOE5mYh+F6g==}
463 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
464 | dependencies:
465 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
466 | '@parcel/utils': 2.3.2
467 | nullthrows: 1.1.1
468 | transitivePeerDependencies:
469 | - '@parcel/core'
470 | dev: true
471 |
472 | /@parcel/runtime-react-refresh/2.3.2_@parcel+core@2.3.2:
473 | resolution: {integrity: sha512-P+GRPO2XVDSBQ4HmRSj2xfbHSQvL9+ahTE/AB74IJExLTITv5l4SHAV3VsiKohuHYUAYHW3A/Oe7tEFCAb6Cug==}
474 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
475 | dependencies:
476 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
477 | '@parcel/utils': 2.3.2
478 | react-refresh: 0.9.0
479 | transitivePeerDependencies:
480 | - '@parcel/core'
481 | dev: true
482 |
483 | /@parcel/runtime-service-worker/2.3.2_@parcel+core@2.3.2:
484 | resolution: {integrity: sha512-iREHj/eapphC4uS/zGUkiTJvG57q+CVbTrfE42kB8ECtf/RYNo5YC9htdvPZjRSXDPrEPc5NCoKp4X09ENNikw==}
485 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
486 | dependencies:
487 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
488 | '@parcel/utils': 2.3.2
489 | nullthrows: 1.1.1
490 | transitivePeerDependencies:
491 | - '@parcel/core'
492 | dev: true
493 |
494 | /@parcel/source-map/2.0.2:
495 | resolution: {integrity: sha512-NnUrPYLpYB6qyx2v6bcRPn/gVigmGG6M6xL8wIg/i0dP1GLkuY1nf+Hqdf63FzPTqqT7K3k6eE5yHPQVMO5jcA==}
496 | engines: {node: ^12.18.3 || >=14}
497 | dependencies:
498 | detect-libc: 1.0.3
499 | dev: true
500 |
501 | /@parcel/transformer-babel/2.3.2_@parcel+core@2.3.2:
502 | resolution: {integrity: sha512-QpWfH2V6jJ+kcUBIMM/uBBG8dGFvNaOGS+8jD6b+eTP+1owzm83RoWgqhRV2D/hhv2qMXEQzIljoc/wg2y+X4g==}
503 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
504 | dependencies:
505 | '@parcel/diagnostic': 2.3.2
506 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
507 | '@parcel/source-map': 2.0.2
508 | '@parcel/utils': 2.3.2
509 | browserslist: 4.19.3
510 | json5: 2.2.0
511 | nullthrows: 1.1.1
512 | semver: 5.7.1
513 | transitivePeerDependencies:
514 | - '@parcel/core'
515 | dev: true
516 |
517 | /@parcel/transformer-css/2.3.2_@parcel+core@2.3.2:
518 | resolution: {integrity: sha512-8lzvDny+78DIAqhcXam2Bf9FyaUoqzHdUQdNFn+PuXTHroG/QGPvln1kvqngJjn4/cpJS9vYmAPVXe+nai3P8g==}
519 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
520 | dependencies:
521 | '@parcel/hash': 2.3.2
522 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
523 | '@parcel/source-map': 2.0.2
524 | '@parcel/utils': 2.3.2
525 | nullthrows: 1.1.1
526 | postcss: 8.4.6
527 | postcss-value-parser: 4.2.0
528 | semver: 5.7.1
529 | transitivePeerDependencies:
530 | - '@parcel/core'
531 | dev: true
532 |
533 | /@parcel/transformer-html/2.3.2_@parcel+core@2.3.2:
534 | resolution: {integrity: sha512-idT1I/8WM65IFYBqzRwpwT7sf0xGur4EDQDHhuPX1w+pIVZnh0lkLMAnEqs6ar1SPRMys4chzkuDNnqh0d76hg==}
535 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
536 | dependencies:
537 | '@parcel/diagnostic': 2.3.2
538 | '@parcel/hash': 2.3.2
539 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
540 | nullthrows: 1.1.1
541 | posthtml: 0.16.5
542 | posthtml-parser: 0.10.2
543 | posthtml-render: 3.0.0
544 | semver: 5.7.1
545 | transitivePeerDependencies:
546 | - '@parcel/core'
547 | dev: true
548 |
549 | /@parcel/transformer-image/2.3.2_@parcel+core@2.3.2:
550 | resolution: {integrity: sha512-0K7cJHXysli6hZsUz/zVGO7WCoaaIeVdzAxKpLA1Yl3LKw/ODiMyXKt08LiV/ljQ2xT5qb9EsXUWDRvcZ0b96A==}
551 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
552 | dependencies:
553 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
554 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
555 | nullthrows: 1.1.1
556 | transitivePeerDependencies:
557 | - '@parcel/core'
558 | dev: true
559 |
560 | /@parcel/transformer-js/2.3.2_@parcel+core@2.3.2:
561 | resolution: {integrity: sha512-U1fbIoAoqR5P49S+DMhH8BUd9IHRPwrTTv6ARYGsYnhuNsjTFhNYE0kkfRYboe/e0z7vEbeJICZXjnZ7eQDw5A==}
562 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
563 | dependencies:
564 | '@parcel/diagnostic': 2.3.2
565 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
566 | '@parcel/source-map': 2.0.2
567 | '@parcel/utils': 2.3.2
568 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
569 | '@swc/helpers': 0.2.14
570 | browserslist: 4.19.3
571 | detect-libc: 1.0.3
572 | nullthrows: 1.1.1
573 | regenerator-runtime: 0.13.9
574 | semver: 5.7.1
575 | transitivePeerDependencies:
576 | - '@parcel/core'
577 | dev: true
578 |
579 | /@parcel/transformer-json/2.3.2_@parcel+core@2.3.2:
580 | resolution: {integrity: sha512-Pv2iPaxKINtFwOk5fDbHjQlSm2Vza/NLimQY896FLxiXPNAJxWGvMwdutgOPEBKksxRx9LZPyIOHiRVZ0KcA3w==}
581 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
582 | dependencies:
583 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
584 | json5: 2.2.0
585 | transitivePeerDependencies:
586 | - '@parcel/core'
587 | dev: true
588 |
589 | /@parcel/transformer-postcss/2.3.2_@parcel+core@2.3.2:
590 | resolution: {integrity: sha512-Rpdxc1rt2aJFCh/y/ccaBc9J1crDjNY5o44xYoOemBoUNDMREsmg5sR5iO81qKKO5GxfoosGb2zh59aeTmywcg==}
591 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
592 | dependencies:
593 | '@parcel/hash': 2.3.2
594 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
595 | '@parcel/utils': 2.3.2
596 | clone: 2.1.2
597 | nullthrows: 1.1.1
598 | postcss-value-parser: 4.2.0
599 | semver: 5.7.1
600 | transitivePeerDependencies:
601 | - '@parcel/core'
602 | dev: true
603 |
604 | /@parcel/transformer-posthtml/2.3.2_@parcel+core@2.3.2:
605 | resolution: {integrity: sha512-tMdVExfdM+1G8A9KSHDsjg+S9xEGbhH5mApF2NslPnNZ4ciLKRNuHU2sSV/v8i0a6kacKvDTrwQXYBQJGOodBw==}
606 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
607 | dependencies:
608 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
609 | '@parcel/utils': 2.3.2
610 | nullthrows: 1.1.1
611 | posthtml: 0.16.5
612 | posthtml-parser: 0.10.2
613 | posthtml-render: 3.0.0
614 | semver: 5.7.1
615 | transitivePeerDependencies:
616 | - '@parcel/core'
617 | dev: true
618 |
619 | /@parcel/transformer-raw/2.3.2_@parcel+core@2.3.2:
620 | resolution: {integrity: sha512-lY7eOCaALZ90+GH+4PZRmAPGQRXoZ66NakSdhEtH6JSSAYOmZKDvNLGTMRo/vK1oELzWMuAHGdqvbcPDtNLLVw==}
621 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
622 | dependencies:
623 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
624 | transitivePeerDependencies:
625 | - '@parcel/core'
626 | dev: true
627 |
628 | /@parcel/transformer-react-refresh-wrap/2.3.2_@parcel+core@2.3.2:
629 | resolution: {integrity: sha512-FZaderyCExn0SBZ6D+zHPWc8JSn9YDcbfibv0wkCl+D7sYfeWZ22i7MRp5NwCe/TZ21WuxDWySCggEp/Waz2xg==}
630 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
631 | dependencies:
632 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
633 | '@parcel/utils': 2.3.2
634 | react-refresh: 0.9.0
635 | transitivePeerDependencies:
636 | - '@parcel/core'
637 | dev: true
638 |
639 | /@parcel/transformer-svg/2.3.2_@parcel+core@2.3.2:
640 | resolution: {integrity: sha512-k9My6bePsaGgUh+tidDjFbbVgKPTzwCAQfoloZRMt7y396KgUbvCfqDruk04k6k+cJn7Jl1o/5lUpTEruBze7g==}
641 | engines: {node: '>= 12.0.0', parcel: ^2.3.2}
642 | dependencies:
643 | '@parcel/diagnostic': 2.3.2
644 | '@parcel/hash': 2.3.2
645 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
646 | nullthrows: 1.1.1
647 | posthtml: 0.16.5
648 | posthtml-parser: 0.10.2
649 | posthtml-render: 3.0.0
650 | semver: 5.7.1
651 | transitivePeerDependencies:
652 | - '@parcel/core'
653 | dev: true
654 |
655 | /@parcel/types/2.3.2:
656 | resolution: {integrity: sha512-C77Ct1xNM7LWjPTfe/dQ/9rq1efdsX5VJu2o8/TVi6qoFh64Wp/c5/vCHwKInOTBZUTchVO6z4PGJNIZoUVJuA==}
657 | dependencies:
658 | '@parcel/cache': 2.3.2_@parcel+core@2.3.2
659 | '@parcel/diagnostic': 2.3.2
660 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2
661 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
662 | '@parcel/source-map': 2.0.2
663 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
664 | utility-types: 3.10.0
665 | dev: true
666 |
667 | /@parcel/types/2.3.2_@parcel+core@2.3.2:
668 | resolution: {integrity: sha512-C77Ct1xNM7LWjPTfe/dQ/9rq1efdsX5VJu2o8/TVi6qoFh64Wp/c5/vCHwKInOTBZUTchVO6z4PGJNIZoUVJuA==}
669 | dependencies:
670 | '@parcel/cache': 2.3.2_@parcel+core@2.3.2
671 | '@parcel/diagnostic': 2.3.2
672 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2
673 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
674 | '@parcel/source-map': 2.0.2
675 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2
676 | utility-types: 3.10.0
677 | transitivePeerDependencies:
678 | - '@parcel/core'
679 | dev: true
680 |
681 | /@parcel/utils/2.3.2:
682 | resolution: {integrity: sha512-xzZ+0vWhrXlLzGoz7WlANaO5IPtyWGeCZruGtepUL3yheRWb1UU4zFN9xz7Z+j++Dmf1Fgkc3qdk/t4O8u9HLQ==}
683 | engines: {node: '>= 12.0.0'}
684 | dependencies:
685 | '@parcel/codeframe': 2.3.2
686 | '@parcel/diagnostic': 2.3.2
687 | '@parcel/hash': 2.3.2
688 | '@parcel/logger': 2.3.2
689 | '@parcel/markdown-ansi': 2.3.2
690 | '@parcel/source-map': 2.0.2
691 | chalk: 4.1.2
692 | dev: true
693 |
694 | /@parcel/watcher/2.0.5:
695 | resolution: {integrity: sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw==}
696 | engines: {node: '>= 10.0.0'}
697 | requiresBuild: true
698 | dependencies:
699 | node-addon-api: 3.2.1
700 | node-gyp-build: 4.3.0
701 | dev: true
702 |
703 | /@parcel/workers/2.3.2_@parcel+core@2.3.2:
704 | resolution: {integrity: sha512-JbOm+Ceuyymd1SuKGgodC2EXAiPuFRpaNUSJpz3NAsS3lVIt2TDAPMOWBivS7sML/KltspUfl/Q9YwO0TPUFNw==}
705 | engines: {node: '>= 12.0.0'}
706 | peerDependencies:
707 | '@parcel/core': ^2.3.2
708 | dependencies:
709 | '@parcel/core': 2.3.2
710 | '@parcel/diagnostic': 2.3.2
711 | '@parcel/logger': 2.3.2
712 | '@parcel/types': 2.3.2
713 | '@parcel/utils': 2.3.2
714 | chrome-trace-event: 1.0.3
715 | nullthrows: 1.1.1
716 | dev: true
717 |
718 | /@swc/helpers/0.2.14:
719 | resolution: {integrity: sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==}
720 | dev: true
721 |
722 | /@trysound/sax/0.2.0:
723 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
724 | engines: {node: '>=10.13.0'}
725 | dev: true
726 |
727 | /@types/parse-json/4.0.0:
728 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
729 | dev: true
730 |
731 | /abortcontroller-polyfill/1.7.3:
732 | resolution: {integrity: sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==}
733 | dev: true
734 |
735 | /ansi-styles/3.2.1:
736 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
737 | engines: {node: '>=4'}
738 | dependencies:
739 | color-convert: 1.9.3
740 | dev: true
741 |
742 | /ansi-styles/4.3.0:
743 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
744 | engines: {node: '>=8'}
745 | dependencies:
746 | color-convert: 2.0.1
747 | dev: true
748 |
749 | /axios/0.26.0:
750 | resolution: {integrity: sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==}
751 | dependencies:
752 | follow-redirects: 1.14.9
753 | transitivePeerDependencies:
754 | - debug
755 | dev: false
756 |
757 | /base-x/3.0.9:
758 | resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
759 | dependencies:
760 | safe-buffer: 5.2.1
761 | dev: true
762 |
763 | /base64-js/1.5.1:
764 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
765 | dev: true
766 |
767 | /boolbase/1.0.0:
768 | resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=}
769 | dev: true
770 |
771 | /browserslist/4.19.3:
772 | resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==}
773 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
774 | hasBin: true
775 | dependencies:
776 | caniuse-lite: 1.0.30001312
777 | electron-to-chromium: 1.4.71
778 | escalade: 3.1.1
779 | node-releases: 2.0.2
780 | picocolors: 1.0.0
781 | dev: true
782 |
783 | /buffer-from/1.1.2:
784 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
785 | dev: true
786 |
787 | /buffer/6.0.3:
788 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
789 | dependencies:
790 | base64-js: 1.5.1
791 | ieee754: 1.2.1
792 | dev: true
793 |
794 | /callsites/3.1.0:
795 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
796 | engines: {node: '>=6'}
797 | dev: true
798 |
799 | /caniuse-api/3.0.0:
800 | resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
801 | dependencies:
802 | browserslist: 4.19.3
803 | caniuse-lite: 1.0.30001312
804 | lodash.memoize: 4.1.2
805 | lodash.uniq: 4.5.0
806 | dev: true
807 |
808 | /caniuse-lite/1.0.30001312:
809 | resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==}
810 | dev: true
811 |
812 | /chalk/2.4.2:
813 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
814 | engines: {node: '>=4'}
815 | dependencies:
816 | ansi-styles: 3.2.1
817 | escape-string-regexp: 1.0.5
818 | supports-color: 5.5.0
819 | dev: true
820 |
821 | /chalk/4.1.2:
822 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
823 | engines: {node: '>=10'}
824 | dependencies:
825 | ansi-styles: 4.3.0
826 | supports-color: 7.2.0
827 | dev: true
828 |
829 | /chrome-trace-event/1.0.3:
830 | resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
831 | engines: {node: '>=6.0'}
832 | dev: true
833 |
834 | /clone/2.1.2:
835 | resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=}
836 | engines: {node: '>=0.8'}
837 | dev: true
838 |
839 | /color-convert/1.9.3:
840 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
841 | dependencies:
842 | color-name: 1.1.3
843 | dev: true
844 |
845 | /color-convert/2.0.1:
846 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
847 | engines: {node: '>=7.0.0'}
848 | dependencies:
849 | color-name: 1.1.4
850 | dev: true
851 |
852 | /color-name/1.1.3:
853 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
854 | dev: true
855 |
856 | /color-name/1.1.4:
857 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
858 | dev: true
859 |
860 | /colord/2.9.2:
861 | resolution: {integrity: sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==}
862 | dev: true
863 |
864 | /commander/2.20.3:
865 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
866 | dev: true
867 |
868 | /commander/7.2.0:
869 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
870 | engines: {node: '>= 10'}
871 | dev: true
872 |
873 | /cosmiconfig/7.0.1:
874 | resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
875 | engines: {node: '>=10'}
876 | dependencies:
877 | '@types/parse-json': 4.0.0
878 | import-fresh: 3.3.0
879 | parse-json: 5.2.0
880 | path-type: 4.0.0
881 | yaml: 1.10.2
882 | dev: true
883 |
884 | /css-declaration-sorter/6.1.4_postcss@8.4.6:
885 | resolution: {integrity: sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==}
886 | engines: {node: '>= 10'}
887 | peerDependencies:
888 | postcss: ^8.0.9
889 | dependencies:
890 | postcss: 8.4.6
891 | timsort: 0.3.0
892 | dev: true
893 |
894 | /css-select/4.2.1:
895 | resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==}
896 | dependencies:
897 | boolbase: 1.0.0
898 | css-what: 5.1.0
899 | domhandler: 4.3.0
900 | domutils: 2.8.0
901 | nth-check: 2.0.1
902 | dev: true
903 |
904 | /css-tree/1.1.3:
905 | resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
906 | engines: {node: '>=8.0.0'}
907 | dependencies:
908 | mdn-data: 2.0.14
909 | source-map: 0.6.1
910 | dev: true
911 |
912 | /css-what/5.1.0:
913 | resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==}
914 | engines: {node: '>= 6'}
915 | dev: true
916 |
917 | /cssesc/3.0.0:
918 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
919 | engines: {node: '>=4'}
920 | hasBin: true
921 | dev: true
922 |
923 | /cssnano-preset-default/5.1.12_postcss@8.4.6:
924 | resolution: {integrity: sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==}
925 | engines: {node: ^10 || ^12 || >=14.0}
926 | peerDependencies:
927 | postcss: ^8.2.15
928 | dependencies:
929 | css-declaration-sorter: 6.1.4_postcss@8.4.6
930 | cssnano-utils: 3.0.2_postcss@8.4.6
931 | postcss: 8.4.6
932 | postcss-calc: 8.2.4_postcss@8.4.6
933 | postcss-colormin: 5.2.5_postcss@8.4.6
934 | postcss-convert-values: 5.0.4_postcss@8.4.6
935 | postcss-discard-comments: 5.0.3_postcss@8.4.6
936 | postcss-discard-duplicates: 5.0.3_postcss@8.4.6
937 | postcss-discard-empty: 5.0.3_postcss@8.4.6
938 | postcss-discard-overridden: 5.0.4_postcss@8.4.6
939 | postcss-merge-longhand: 5.0.6_postcss@8.4.6
940 | postcss-merge-rules: 5.0.6_postcss@8.4.6
941 | postcss-minify-font-values: 5.0.4_postcss@8.4.6
942 | postcss-minify-gradients: 5.0.6_postcss@8.4.6
943 | postcss-minify-params: 5.0.5_postcss@8.4.6
944 | postcss-minify-selectors: 5.1.3_postcss@8.4.6
945 | postcss-normalize-charset: 5.0.3_postcss@8.4.6
946 | postcss-normalize-display-values: 5.0.3_postcss@8.4.6
947 | postcss-normalize-positions: 5.0.4_postcss@8.4.6
948 | postcss-normalize-repeat-style: 5.0.4_postcss@8.4.6
949 | postcss-normalize-string: 5.0.4_postcss@8.4.6
950 | postcss-normalize-timing-functions: 5.0.3_postcss@8.4.6
951 | postcss-normalize-unicode: 5.0.4_postcss@8.4.6
952 | postcss-normalize-url: 5.0.5_postcss@8.4.6
953 | postcss-normalize-whitespace: 5.0.4_postcss@8.4.6
954 | postcss-ordered-values: 5.0.5_postcss@8.4.6
955 | postcss-reduce-initial: 5.0.3_postcss@8.4.6
956 | postcss-reduce-transforms: 5.0.4_postcss@8.4.6
957 | postcss-svgo: 5.0.4_postcss@8.4.6
958 | postcss-unique-selectors: 5.0.4_postcss@8.4.6
959 | dev: true
960 |
961 | /cssnano-utils/3.0.2_postcss@8.4.6:
962 | resolution: {integrity: sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==}
963 | engines: {node: ^10 || ^12 || >=14.0}
964 | peerDependencies:
965 | postcss: ^8.2.15
966 | dependencies:
967 | postcss: 8.4.6
968 | dev: true
969 |
970 | /cssnano/5.0.17_postcss@8.4.6:
971 | resolution: {integrity: sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==}
972 | engines: {node: ^10 || ^12 || >=14.0}
973 | peerDependencies:
974 | postcss: ^8.2.15
975 | dependencies:
976 | cssnano-preset-default: 5.1.12_postcss@8.4.6
977 | lilconfig: 2.0.4
978 | postcss: 8.4.6
979 | yaml: 1.10.2
980 | dev: true
981 |
982 | /csso/4.2.0:
983 | resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
984 | engines: {node: '>=8.0.0'}
985 | dependencies:
986 | css-tree: 1.1.3
987 | dev: true
988 |
989 | /csstype/3.0.8:
990 | resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==}
991 | dev: false
992 |
993 | /debug/4.3.1:
994 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==}
995 | engines: {node: '>=6.0'}
996 | peerDependencies:
997 | supports-color: '*'
998 | peerDependenciesMeta:
999 | supports-color:
1000 | optional: true
1001 | dependencies:
1002 | ms: 2.1.2
1003 | dev: false
1004 |
1005 | /detect-libc/1.0.3:
1006 | resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=}
1007 | engines: {node: '>=0.10'}
1008 | hasBin: true
1009 | dev: true
1010 |
1011 | /dom-serializer/1.3.2:
1012 | resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==}
1013 | dependencies:
1014 | domelementtype: 2.2.0
1015 | domhandler: 4.3.0
1016 | entities: 2.2.0
1017 | dev: true
1018 |
1019 | /domelementtype/2.2.0:
1020 | resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==}
1021 | dev: true
1022 |
1023 | /domhandler/4.3.0:
1024 | resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==}
1025 | engines: {node: '>= 4'}
1026 | dependencies:
1027 | domelementtype: 2.2.0
1028 | dev: true
1029 |
1030 | /dompurify/2.3.1:
1031 | resolution: {integrity: sha512-xGWt+NHAQS+4tpgbOAI08yxW0Pr256Gu/FNE2frZVTbgrBUn8M7tz7/ktS/LZ2MHeGqz6topj0/xY+y8R5FBFw==}
1032 | dev: false
1033 |
1034 | /domutils/2.8.0:
1035 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
1036 | dependencies:
1037 | dom-serializer: 1.3.2
1038 | domelementtype: 2.2.0
1039 | domhandler: 4.3.0
1040 | dev: true
1041 |
1042 | /dot-case/3.0.4:
1043 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
1044 | dependencies:
1045 | no-case: 3.0.4
1046 | tslib: 2.3.1
1047 | dev: false
1048 |
1049 | /dotenv-expand/5.1.0:
1050 | resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
1051 | dev: true
1052 |
1053 | /dotenv/7.0.0:
1054 | resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==}
1055 | engines: {node: '>=6'}
1056 | dev: true
1057 |
1058 | /electron-to-chromium/1.4.71:
1059 | resolution: {integrity: sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==}
1060 | dev: true
1061 |
1062 | /entities/2.2.0:
1063 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
1064 | dev: true
1065 |
1066 | /entities/3.0.1:
1067 | resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==}
1068 | engines: {node: '>=0.12'}
1069 | dev: true
1070 |
1071 | /error-ex/1.3.2:
1072 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
1073 | dependencies:
1074 | is-arrayish: 0.2.1
1075 | dev: true
1076 |
1077 | /escalade/3.1.1:
1078 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1079 | engines: {node: '>=6'}
1080 | dev: true
1081 |
1082 | /escape-string-regexp/1.0.5:
1083 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
1084 | engines: {node: '>=0.8.0'}
1085 | dev: true
1086 |
1087 | /eventemitter3/4.0.7:
1088 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
1089 | dev: false
1090 |
1091 | /fast-deep-equal/3.1.3:
1092 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1093 | dev: false
1094 |
1095 | /follow-redirects/1.14.9:
1096 | resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==}
1097 | engines: {node: '>=4.0'}
1098 | peerDependencies:
1099 | debug: '*'
1100 | peerDependenciesMeta:
1101 | debug:
1102 | optional: true
1103 | dev: false
1104 |
1105 | /get-port/4.2.0:
1106 | resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==}
1107 | engines: {node: '>=6'}
1108 | dev: true
1109 |
1110 | /globals/13.12.1:
1111 | resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==}
1112 | engines: {node: '>=8'}
1113 | dependencies:
1114 | type-fest: 0.20.2
1115 | dev: true
1116 |
1117 | /has-flag/3.0.0:
1118 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
1119 | engines: {node: '>=4'}
1120 | dev: true
1121 |
1122 | /has-flag/4.0.0:
1123 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1124 | engines: {node: '>=8'}
1125 | dev: true
1126 |
1127 | /htmlnano/2.0.0_svgo@2.8.0:
1128 | resolution: {integrity: sha512-thKQfhcp2xgtsWNE27A2bliEeqVL5xjAgGn0wajyttvFFsvFWWah1ntV9aEX61gz0T6MBQ5xK/1lXuEumhJTcg==}
1129 | peerDependencies:
1130 | cssnano: ^5.0.11
1131 | postcss: ^8.3.11
1132 | purgecss: ^4.0.3
1133 | relateurl: ^0.2.7
1134 | srcset: ^5.0.0
1135 | svgo: ^2.8.0
1136 | terser: ^5.10.0
1137 | uncss: ^0.17.3
1138 | peerDependenciesMeta:
1139 | cssnano:
1140 | optional: true
1141 | postcss:
1142 | optional: true
1143 | purgecss:
1144 | optional: true
1145 | relateurl:
1146 | optional: true
1147 | srcset:
1148 | optional: true
1149 | svgo:
1150 | optional: true
1151 | terser:
1152 | optional: true
1153 | uncss:
1154 | optional: true
1155 | dependencies:
1156 | cosmiconfig: 7.0.1
1157 | posthtml: 0.16.5
1158 | svgo: 2.8.0
1159 | timsort: 0.3.0
1160 | dev: true
1161 |
1162 | /htmlparser2/7.2.0:
1163 | resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==}
1164 | dependencies:
1165 | domelementtype: 2.2.0
1166 | domhandler: 4.3.0
1167 | domutils: 2.8.0
1168 | entities: 3.0.1
1169 | dev: true
1170 |
1171 | /ieee754/1.2.1:
1172 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1173 | dev: true
1174 |
1175 | /import-fresh/3.3.0:
1176 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1177 | engines: {node: '>=6'}
1178 | dependencies:
1179 | parent-module: 1.0.1
1180 | resolve-from: 4.0.0
1181 | dev: true
1182 |
1183 | /inherits/2.0.3:
1184 | resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
1185 | dev: false
1186 |
1187 | /is-arrayish/0.2.1:
1188 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
1189 | dev: true
1190 |
1191 | /is-json/2.0.1:
1192 | resolution: {integrity: sha1-a+Fm0USCihMdaGiRuYPfYsOUkf8=}
1193 | dev: true
1194 |
1195 | /js-tokens/4.0.0:
1196 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1197 | dev: true
1198 |
1199 | /json-parse-even-better-errors/2.3.1:
1200 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1201 | dev: true
1202 |
1203 | /json-source-map/0.6.1:
1204 | resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==}
1205 | dev: true
1206 |
1207 | /json5/2.2.0:
1208 | resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==}
1209 | engines: {node: '>=6'}
1210 | hasBin: true
1211 | dependencies:
1212 | minimist: 1.2.5
1213 | dev: true
1214 |
1215 | /lilconfig/2.0.4:
1216 | resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==}
1217 | engines: {node: '>=10'}
1218 | dev: true
1219 |
1220 | /lines-and-columns/1.2.4:
1221 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1222 | dev: true
1223 |
1224 | /lmdb/2.2.1:
1225 | resolution: {integrity: sha512-tUlIjyJvbd4mqdotI9Xe+3PZt/jqPx70VKFDrKMYu09MtBWOT3y2PbuTajX+bJFDjbgLkQC0cTx2n6dithp/zQ==}
1226 | requiresBuild: true
1227 | dependencies:
1228 | msgpackr: 1.5.4
1229 | nan: 2.15.0
1230 | node-gyp-build: 4.3.0
1231 | ordered-binary: 1.2.4
1232 | weak-lru-cache: 1.2.2
1233 | dev: true
1234 |
1235 | /lodash-es/4.17.21:
1236 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
1237 | dev: false
1238 |
1239 | /lodash.memoize/4.1.2:
1240 | resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=}
1241 | dev: true
1242 |
1243 | /lodash.uniq/4.5.0:
1244 | resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=}
1245 | dev: true
1246 |
1247 | /lower-case/2.0.2:
1248 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
1249 | dependencies:
1250 | tslib: 2.3.1
1251 | dev: false
1252 |
1253 | /mdn-data/2.0.14:
1254 | resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
1255 | dev: true
1256 |
1257 | /minimist/1.2.5:
1258 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
1259 | dev: true
1260 |
1261 | /ms/2.1.2:
1262 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1263 | dev: false
1264 |
1265 | /msgpackr-extract/1.0.16:
1266 | resolution: {integrity: sha512-fxdRfQUxPrL/TizyfYfMn09dK58e+d65bRD/fcaVH4052vj30QOzzqxcQIS7B0NsqlypEQ/6Du3QmP2DhWFfCA==}
1267 | requiresBuild: true
1268 | dependencies:
1269 | nan: 2.15.0
1270 | node-gyp-build: 4.3.0
1271 | dev: true
1272 | optional: true
1273 |
1274 | /msgpackr/1.5.4:
1275 | resolution: {integrity: sha512-Z7w5Jg+2Q9z9gJxeM68d7tSuWZZGnFIRhZnyqcZCa/1dKkhOCNvR1TUV3zzJ3+vj78vlwKRzUgVDlW4jiSOeDA==}
1276 | optionalDependencies:
1277 | msgpackr-extract: 1.0.16
1278 | dev: true
1279 |
1280 | /nan/2.15.0:
1281 | resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
1282 | dev: true
1283 |
1284 | /nanoid/3.3.1:
1285 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
1286 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1287 | hasBin: true
1288 | dev: true
1289 |
1290 | /no-case/3.0.4:
1291 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
1292 | dependencies:
1293 | lower-case: 2.0.2
1294 | tslib: 2.3.1
1295 | dev: false
1296 |
1297 | /node-addon-api/3.2.1:
1298 | resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==}
1299 | dev: true
1300 |
1301 | /node-gyp-build/4.3.0:
1302 | resolution: {integrity: sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==}
1303 | hasBin: true
1304 | dev: true
1305 |
1306 | /node-releases/2.0.2:
1307 | resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==}
1308 | dev: true
1309 |
1310 | /normalize-url/6.1.0:
1311 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
1312 | engines: {node: '>=10'}
1313 | dev: true
1314 |
1315 | /nth-check/2.0.1:
1316 | resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==}
1317 | dependencies:
1318 | boolbase: 1.0.0
1319 | dev: true
1320 |
1321 | /nullthrows/1.1.1:
1322 | resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
1323 | dev: true
1324 |
1325 | /ordered-binary/1.2.4:
1326 | resolution: {integrity: sha512-A/csN0d3n+igxBPfUrjbV5GC69LWj2pjZzAAeeHXLukQ4+fytfP4T1Lg0ju7MSPSwq7KtHkGaiwO8URZN5IpLg==}
1327 | dev: true
1328 |
1329 | /parcel/2.0.0:
1330 | resolution: {integrity: sha512-vALKLDWz9DF3YD4oGcG1UpMR32TXHr3wj0OZTCo0nLuP8LqNNhG7Twf+ZIpVf2r1b5Glex5eUl0vcx/x2xY6pw==}
1331 | engines: {node: '>= 12.0.0'}
1332 | hasBin: true
1333 | dependencies:
1334 | '@parcel/config-default': 2.3.2_@parcel+core@2.3.2
1335 | '@parcel/core': 2.3.2
1336 | '@parcel/diagnostic': 2.3.2
1337 | '@parcel/events': 2.3.2
1338 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2
1339 | '@parcel/logger': 2.3.2
1340 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
1341 | '@parcel/reporter-cli': 2.3.2_@parcel+core@2.3.2
1342 | '@parcel/reporter-dev-server': 2.3.2_@parcel+core@2.3.2
1343 | '@parcel/utils': 2.3.2
1344 | chalk: 4.1.2
1345 | commander: 7.2.0
1346 | get-port: 4.2.0
1347 | v8-compile-cache: 2.3.0
1348 | transitivePeerDependencies:
1349 | - acorn
1350 | - cssnano
1351 | - postcss
1352 | - purgecss
1353 | - relateurl
1354 | - srcset
1355 | - terser
1356 | - uncss
1357 | dev: true
1358 |
1359 | /parent-module/1.0.1:
1360 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1361 | engines: {node: '>=6'}
1362 | dependencies:
1363 | callsites: 3.1.0
1364 | dev: true
1365 |
1366 | /parse-json/5.2.0:
1367 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
1368 | engines: {node: '>=8'}
1369 | dependencies:
1370 | '@babel/code-frame': 7.16.7
1371 | error-ex: 1.3.2
1372 | json-parse-even-better-errors: 2.3.1
1373 | lines-and-columns: 1.2.4
1374 | dev: true
1375 |
1376 | /path-type/4.0.0:
1377 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1378 | engines: {node: '>=8'}
1379 | dev: true
1380 |
1381 | /path/0.12.7:
1382 | resolution: {integrity: sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=}
1383 | dependencies:
1384 | process: 0.11.10
1385 | util: 0.10.4
1386 | dev: false
1387 |
1388 | /picocolors/1.0.0:
1389 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1390 | dev: true
1391 |
1392 | /postcss-calc/8.2.4_postcss@8.4.6:
1393 | resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
1394 | peerDependencies:
1395 | postcss: ^8.2.2
1396 | dependencies:
1397 | postcss: 8.4.6
1398 | postcss-selector-parser: 6.0.9
1399 | postcss-value-parser: 4.2.0
1400 | dev: true
1401 |
1402 | /postcss-colormin/5.2.5_postcss@8.4.6:
1403 | resolution: {integrity: sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==}
1404 | engines: {node: ^10 || ^12 || >=14.0}
1405 | peerDependencies:
1406 | postcss: ^8.2.15
1407 | dependencies:
1408 | browserslist: 4.19.3
1409 | caniuse-api: 3.0.0
1410 | colord: 2.9.2
1411 | postcss: 8.4.6
1412 | postcss-value-parser: 4.2.0
1413 | dev: true
1414 |
1415 | /postcss-convert-values/5.0.4_postcss@8.4.6:
1416 | resolution: {integrity: sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==}
1417 | engines: {node: ^10 || ^12 || >=14.0}
1418 | peerDependencies:
1419 | postcss: ^8.2.15
1420 | dependencies:
1421 | postcss: 8.4.6
1422 | postcss-value-parser: 4.2.0
1423 | dev: true
1424 |
1425 | /postcss-discard-comments/5.0.3_postcss@8.4.6:
1426 | resolution: {integrity: sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==}
1427 | engines: {node: ^10 || ^12 || >=14.0}
1428 | peerDependencies:
1429 | postcss: ^8.2.15
1430 | dependencies:
1431 | postcss: 8.4.6
1432 | dev: true
1433 |
1434 | /postcss-discard-duplicates/5.0.3_postcss@8.4.6:
1435 | resolution: {integrity: sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==}
1436 | engines: {node: ^10 || ^12 || >=14.0}
1437 | peerDependencies:
1438 | postcss: ^8.2.15
1439 | dependencies:
1440 | postcss: 8.4.6
1441 | dev: true
1442 |
1443 | /postcss-discard-empty/5.0.3_postcss@8.4.6:
1444 | resolution: {integrity: sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==}
1445 | engines: {node: ^10 || ^12 || >=14.0}
1446 | peerDependencies:
1447 | postcss: ^8.2.15
1448 | dependencies:
1449 | postcss: 8.4.6
1450 | dev: true
1451 |
1452 | /postcss-discard-overridden/5.0.4_postcss@8.4.6:
1453 | resolution: {integrity: sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==}
1454 | engines: {node: ^10 || ^12 || >=14.0}
1455 | peerDependencies:
1456 | postcss: ^8.2.15
1457 | dependencies:
1458 | postcss: 8.4.6
1459 | dev: true
1460 |
1461 | /postcss-merge-longhand/5.0.6_postcss@8.4.6:
1462 | resolution: {integrity: sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==}
1463 | engines: {node: ^10 || ^12 || >=14.0}
1464 | peerDependencies:
1465 | postcss: ^8.2.15
1466 | dependencies:
1467 | postcss: 8.4.6
1468 | postcss-value-parser: 4.2.0
1469 | stylehacks: 5.0.3_postcss@8.4.6
1470 | dev: true
1471 |
1472 | /postcss-merge-rules/5.0.6_postcss@8.4.6:
1473 | resolution: {integrity: sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==}
1474 | engines: {node: ^10 || ^12 || >=14.0}
1475 | peerDependencies:
1476 | postcss: ^8.2.15
1477 | dependencies:
1478 | browserslist: 4.19.3
1479 | caniuse-api: 3.0.0
1480 | cssnano-utils: 3.0.2_postcss@8.4.6
1481 | postcss: 8.4.6
1482 | postcss-selector-parser: 6.0.9
1483 | dev: true
1484 |
1485 | /postcss-minify-font-values/5.0.4_postcss@8.4.6:
1486 | resolution: {integrity: sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==}
1487 | engines: {node: ^10 || ^12 || >=14.0}
1488 | peerDependencies:
1489 | postcss: ^8.2.15
1490 | dependencies:
1491 | postcss: 8.4.6
1492 | postcss-value-parser: 4.2.0
1493 | dev: true
1494 |
1495 | /postcss-minify-gradients/5.0.6_postcss@8.4.6:
1496 | resolution: {integrity: sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==}
1497 | engines: {node: ^10 || ^12 || >=14.0}
1498 | peerDependencies:
1499 | postcss: ^8.2.15
1500 | dependencies:
1501 | colord: 2.9.2
1502 | cssnano-utils: 3.0.2_postcss@8.4.6
1503 | postcss: 8.4.6
1504 | postcss-value-parser: 4.2.0
1505 | dev: true
1506 |
1507 | /postcss-minify-params/5.0.5_postcss@8.4.6:
1508 | resolution: {integrity: sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==}
1509 | engines: {node: ^10 || ^12 || >=14.0}
1510 | peerDependencies:
1511 | postcss: ^8.2.15
1512 | dependencies:
1513 | browserslist: 4.19.3
1514 | cssnano-utils: 3.0.2_postcss@8.4.6
1515 | postcss: 8.4.6
1516 | postcss-value-parser: 4.2.0
1517 | dev: true
1518 |
1519 | /postcss-minify-selectors/5.1.3_postcss@8.4.6:
1520 | resolution: {integrity: sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==}
1521 | engines: {node: ^10 || ^12 || >=14.0}
1522 | peerDependencies:
1523 | postcss: ^8.2.15
1524 | dependencies:
1525 | postcss: 8.4.6
1526 | postcss-selector-parser: 6.0.9
1527 | dev: true
1528 |
1529 | /postcss-normalize-charset/5.0.3_postcss@8.4.6:
1530 | resolution: {integrity: sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==}
1531 | engines: {node: ^10 || ^12 || >=14.0}
1532 | peerDependencies:
1533 | postcss: ^8.2.15
1534 | dependencies:
1535 | postcss: 8.4.6
1536 | dev: true
1537 |
1538 | /postcss-normalize-display-values/5.0.3_postcss@8.4.6:
1539 | resolution: {integrity: sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==}
1540 | engines: {node: ^10 || ^12 || >=14.0}
1541 | peerDependencies:
1542 | postcss: ^8.2.15
1543 | dependencies:
1544 | postcss: 8.4.6
1545 | postcss-value-parser: 4.2.0
1546 | dev: true
1547 |
1548 | /postcss-normalize-positions/5.0.4_postcss@8.4.6:
1549 | resolution: {integrity: sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==}
1550 | engines: {node: ^10 || ^12 || >=14.0}
1551 | peerDependencies:
1552 | postcss: ^8.2.15
1553 | dependencies:
1554 | postcss: 8.4.6
1555 | postcss-value-parser: 4.2.0
1556 | dev: true
1557 |
1558 | /postcss-normalize-repeat-style/5.0.4_postcss@8.4.6:
1559 | resolution: {integrity: sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==}
1560 | engines: {node: ^10 || ^12 || >=14.0}
1561 | peerDependencies:
1562 | postcss: ^8.2.15
1563 | dependencies:
1564 | postcss: 8.4.6
1565 | postcss-value-parser: 4.2.0
1566 | dev: true
1567 |
1568 | /postcss-normalize-string/5.0.4_postcss@8.4.6:
1569 | resolution: {integrity: sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==}
1570 | engines: {node: ^10 || ^12 || >=14.0}
1571 | peerDependencies:
1572 | postcss: ^8.2.15
1573 | dependencies:
1574 | postcss: 8.4.6
1575 | postcss-value-parser: 4.2.0
1576 | dev: true
1577 |
1578 | /postcss-normalize-timing-functions/5.0.3_postcss@8.4.6:
1579 | resolution: {integrity: sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==}
1580 | engines: {node: ^10 || ^12 || >=14.0}
1581 | peerDependencies:
1582 | postcss: ^8.2.15
1583 | dependencies:
1584 | postcss: 8.4.6
1585 | postcss-value-parser: 4.2.0
1586 | dev: true
1587 |
1588 | /postcss-normalize-unicode/5.0.4_postcss@8.4.6:
1589 | resolution: {integrity: sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==}
1590 | engines: {node: ^10 || ^12 || >=14.0}
1591 | peerDependencies:
1592 | postcss: ^8.2.15
1593 | dependencies:
1594 | browserslist: 4.19.3
1595 | postcss: 8.4.6
1596 | postcss-value-parser: 4.2.0
1597 | dev: true
1598 |
1599 | /postcss-normalize-url/5.0.5_postcss@8.4.6:
1600 | resolution: {integrity: sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==}
1601 | engines: {node: ^10 || ^12 || >=14.0}
1602 | peerDependencies:
1603 | postcss: ^8.2.15
1604 | dependencies:
1605 | normalize-url: 6.1.0
1606 | postcss: 8.4.6
1607 | postcss-value-parser: 4.2.0
1608 | dev: true
1609 |
1610 | /postcss-normalize-whitespace/5.0.4_postcss@8.4.6:
1611 | resolution: {integrity: sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==}
1612 | engines: {node: ^10 || ^12 || >=14.0}
1613 | peerDependencies:
1614 | postcss: ^8.2.15
1615 | dependencies:
1616 | postcss: 8.4.6
1617 | postcss-value-parser: 4.2.0
1618 | dev: true
1619 |
1620 | /postcss-ordered-values/5.0.5_postcss@8.4.6:
1621 | resolution: {integrity: sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==}
1622 | engines: {node: ^10 || ^12 || >=14.0}
1623 | peerDependencies:
1624 | postcss: ^8.2.15
1625 | dependencies:
1626 | cssnano-utils: 3.0.2_postcss@8.4.6
1627 | postcss: 8.4.6
1628 | postcss-value-parser: 4.2.0
1629 | dev: true
1630 |
1631 | /postcss-reduce-initial/5.0.3_postcss@8.4.6:
1632 | resolution: {integrity: sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==}
1633 | engines: {node: ^10 || ^12 || >=14.0}
1634 | peerDependencies:
1635 | postcss: ^8.2.15
1636 | dependencies:
1637 | browserslist: 4.19.3
1638 | caniuse-api: 3.0.0
1639 | postcss: 8.4.6
1640 | dev: true
1641 |
1642 | /postcss-reduce-transforms/5.0.4_postcss@8.4.6:
1643 | resolution: {integrity: sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==}
1644 | engines: {node: ^10 || ^12 || >=14.0}
1645 | peerDependencies:
1646 | postcss: ^8.2.15
1647 | dependencies:
1648 | postcss: 8.4.6
1649 | postcss-value-parser: 4.2.0
1650 | dev: true
1651 |
1652 | /postcss-selector-parser/6.0.9:
1653 | resolution: {integrity: sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==}
1654 | engines: {node: '>=4'}
1655 | dependencies:
1656 | cssesc: 3.0.0
1657 | util-deprecate: 1.0.2
1658 | dev: true
1659 |
1660 | /postcss-svgo/5.0.4_postcss@8.4.6:
1661 | resolution: {integrity: sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==}
1662 | engines: {node: ^10 || ^12 || >=14.0}
1663 | peerDependencies:
1664 | postcss: ^8.2.15
1665 | dependencies:
1666 | postcss: 8.4.6
1667 | postcss-value-parser: 4.2.0
1668 | svgo: 2.8.0
1669 | dev: true
1670 |
1671 | /postcss-unique-selectors/5.0.4_postcss@8.4.6:
1672 | resolution: {integrity: sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==}
1673 | engines: {node: ^10 || ^12 || >=14.0}
1674 | peerDependencies:
1675 | postcss: ^8.2.15
1676 | dependencies:
1677 | postcss: 8.4.6
1678 | postcss-selector-parser: 6.0.9
1679 | dev: true
1680 |
1681 | /postcss-value-parser/4.2.0:
1682 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1683 | dev: true
1684 |
1685 | /postcss/8.4.6:
1686 | resolution: {integrity: sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==}
1687 | engines: {node: ^10 || ^12 || >=14}
1688 | dependencies:
1689 | nanoid: 3.3.1
1690 | picocolors: 1.0.0
1691 | source-map-js: 1.0.2
1692 | dev: true
1693 |
1694 | /posthtml-parser/0.10.2:
1695 | resolution: {integrity: sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==}
1696 | engines: {node: '>=12'}
1697 | dependencies:
1698 | htmlparser2: 7.2.0
1699 | dev: true
1700 |
1701 | /posthtml-render/3.0.0:
1702 | resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==}
1703 | engines: {node: '>=12'}
1704 | dependencies:
1705 | is-json: 2.0.1
1706 | dev: true
1707 |
1708 | /posthtml/0.16.5:
1709 | resolution: {integrity: sha512-1qOuPsywVlvymhTFIBniDXwUDwvlDri5KUQuBqjmCc8Jj4b/HDSVWU//P6rTWke5rzrk+vj7mms2w8e1vD0nnw==}
1710 | engines: {node: '>=12.0.0'}
1711 | dependencies:
1712 | posthtml-parser: 0.10.2
1713 | posthtml-render: 3.0.0
1714 | dev: true
1715 |
1716 | /process/0.11.10:
1717 | resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=}
1718 | engines: {node: '>= 0.6.0'}
1719 | dev: false
1720 |
1721 | /react-refresh/0.9.0:
1722 | resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==}
1723 | engines: {node: '>=0.10.0'}
1724 | dev: true
1725 |
1726 | /regenerator-runtime/0.13.9:
1727 | resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==}
1728 | dev: true
1729 |
1730 | /resolve-from/4.0.0:
1731 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1732 | engines: {node: '>=4'}
1733 | dev: true
1734 |
1735 | /safe-buffer/5.2.1:
1736 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1737 | dev: true
1738 |
1739 | /semver/5.7.1:
1740 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
1741 | hasBin: true
1742 | dev: true
1743 |
1744 | /snake-case/3.0.4:
1745 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
1746 | dependencies:
1747 | dot-case: 3.0.4
1748 | tslib: 2.3.1
1749 | dev: false
1750 |
1751 | /source-map-js/1.0.2:
1752 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1753 | engines: {node: '>=0.10.0'}
1754 | dev: true
1755 |
1756 | /source-map-support/0.5.21:
1757 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1758 | dependencies:
1759 | buffer-from: 1.1.2
1760 | source-map: 0.6.1
1761 | dev: true
1762 |
1763 | /source-map/0.6.1:
1764 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1765 | engines: {node: '>=0.10.0'}
1766 | dev: true
1767 |
1768 | /source-map/0.7.3:
1769 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
1770 | engines: {node: '>= 8'}
1771 | dev: true
1772 |
1773 | /stable/0.1.8:
1774 | resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
1775 | dev: true
1776 |
1777 | /stylehacks/5.0.3_postcss@8.4.6:
1778 | resolution: {integrity: sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==}
1779 | engines: {node: ^10 || ^12 || >=14.0}
1780 | peerDependencies:
1781 | postcss: ^8.2.15
1782 | dependencies:
1783 | browserslist: 4.19.3
1784 | postcss: 8.4.6
1785 | postcss-selector-parser: 6.0.9
1786 | dev: true
1787 |
1788 | /supports-color/5.5.0:
1789 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1790 | engines: {node: '>=4'}
1791 | dependencies:
1792 | has-flag: 3.0.0
1793 | dev: true
1794 |
1795 | /supports-color/7.2.0:
1796 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1797 | engines: {node: '>=8'}
1798 | dependencies:
1799 | has-flag: 4.0.0
1800 | dev: true
1801 |
1802 | /svgo/2.8.0:
1803 | resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
1804 | engines: {node: '>=10.13.0'}
1805 | hasBin: true
1806 | dependencies:
1807 | '@trysound/sax': 0.2.0
1808 | commander: 7.2.0
1809 | css-select: 4.2.1
1810 | css-tree: 1.1.3
1811 | csso: 4.2.0
1812 | picocolors: 1.0.0
1813 | stable: 0.1.8
1814 | dev: true
1815 |
1816 | /terser/5.10.0:
1817 | resolution: {integrity: sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==}
1818 | engines: {node: '>=10'}
1819 | hasBin: true
1820 | peerDependencies:
1821 | acorn: ^8.5.0
1822 | peerDependenciesMeta:
1823 | acorn:
1824 | optional: true
1825 | dependencies:
1826 | commander: 2.20.3
1827 | source-map: 0.7.3
1828 | source-map-support: 0.5.21
1829 | dev: true
1830 |
1831 | /timsort/0.3.0:
1832 | resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=}
1833 | dev: true
1834 |
1835 | /tslib/2.3.1:
1836 | resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==}
1837 | dev: false
1838 |
1839 | /type-fest/0.20.2:
1840 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1841 | engines: {node: '>=10'}
1842 | dev: true
1843 |
1844 | /typescript/4.4.3:
1845 | resolution: {integrity: sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==}
1846 | engines: {node: '>=4.2.0'}
1847 | hasBin: true
1848 | dev: true
1849 |
1850 | /util-deprecate/1.0.2:
1851 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
1852 | dev: true
1853 |
1854 | /util/0.10.4:
1855 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
1856 | dependencies:
1857 | inherits: 2.0.3
1858 | dev: false
1859 |
1860 | /utility-types/3.10.0:
1861 | resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==}
1862 | engines: {node: '>= 4'}
1863 | dev: true
1864 |
1865 | /v8-compile-cache/2.3.0:
1866 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
1867 | dev: true
1868 |
1869 | /weak-lru-cache/1.2.2:
1870 | resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==}
1871 | dev: true
1872 |
1873 | /xxhash-wasm/0.4.2:
1874 | resolution: {integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==}
1875 | dev: true
1876 |
1877 | /yaml/1.10.2:
1878 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
1879 | engines: {node: '>= 6'}
1880 | dev: true
1881 |
--------------------------------------------------------------------------------