diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index ab9b63f..c7dad92 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -13,12 +13,12 @@ name: "CodeQL"
on:
push:
- branches: [ "main" ]
+ branches: ["main"]
pull_request:
# The branches below must be a subset of the branches above
- branches: [ "main" ]
+ branches: ["main"]
schedule:
- - cron: '19 6 * * 1'
+ - cron: "19 6 * * 1"
jobs:
analyze:
@@ -32,43 +32,42 @@ jobs:
strategy:
fail-fast: false
matrix:
- language: [ 'javascript' ]
+ language: ["javascript"]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- - name: Checkout repository
- uses: actions/checkout@v3
+ - name: Checkout repository
+ uses: actions/checkout@v3
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v2
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
-
- # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
- # queries: security-extended,security-and-quality
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v2
+ # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
- # âšī¸ Command-line programs to run using the OS shell.
- # đ See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v2
- # If the Autobuild fails above, remove it and uncomment the following three lines.
- # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
+ # âšī¸ Command-line programs to run using the OS shell.
+ # đ See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- # - run: |
- # echo "Run, Build Application using script"
- # ./location_of_script_within_repo/buildscript.sh
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2
- with:
- category: "/language:${{matrix.language}}"
+ # - run: |
+ # echo "Run, Build Application using script"
+ # ./location_of_script_within_repo/buildscript.sh
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
+ with:
+ category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index dba760b..ed70dc5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -13,7 +13,7 @@ jobs:
name: Test code
strategy:
matrix:
- version: [18.x, 16.x, 14.x]
+ version: [19.x, 18.x, 16.x, 14.x]
runs-on: ubuntu-latest
steps:
diff --git a/README.md b/README.md
index 5d187f3..89ff802 100644
--- a/README.md
+++ b/README.md
@@ -1,35 +1,30 @@
-
# Meowclient [](https://github.com/webdev03/meowclient/actions/workflows/test.yml)
-
-
A very cool library to connect to Scratch.
-## Getting Started
+A feature-rich library to connect to Scratch.
+
+## Getting Started
Follow the steps below:
-### âŗ Installation
+### âŗ Installation
-Install Meowclient with this **Quickstart** command to install the latest version of meowclient in your `package.json`.
+If you run this install command you will get the latest version of meowclient in your `package.json`.
```bash
npm install meowclient
```
-This command generates a brand new project with the default features.
-#### The library supports both CJS and ESM.
-
## Example (async)
```javascript
-import { ScratchSession } from "meowclient";
+import { ScratchSession, Profile } from "meowclient";
const session = new ScratchSession();
await session.init("user", "pass");
-const me = session.getProfile(session.username);
-// next line gets html and stores it so only 1 fetch request and no .init function - recreate the object to reset it
+const me = new Profile(session, session.username);
console.log("My status is " + (await me.getStatus()));
```
-You might be able to use this **without even logging in by not running .init** on the session.
+Some features are available without logging in if you don't run the `session.init` function.
### The CJS way (if you still use it)
@@ -37,26 +32,15 @@ You might be able to use this **without even logging in by not running .init** o
const { ScratchSession } = require("meowclient");
const session = new ScratchSession();
await session.init("user", "pass");
-const me = session.getProfile(session.username);
-// next line gets html and stores it so only 1 fetch request and no .init function - recreate the object to reset it
+const me = new Profile(session, session.username);
+// User.getStatus gets the status of the user, either "New Scratcher", "Scratcher" or "Scratch Team"
console.log("My status is " + (await me.getStatus()));
```
-## Awesome features
-
-CJS **and** ESM support powered by tsup package!
-This is made with _typescript_ so you will also get .d.ts definition file and I will try my best to make good documentation! Some JSDoc comments are there too.
-
-## Why not _insert library name here_?
+## Note
-ESM support, typescript, comments parsing
-
-## Extra things
-
-I will not add any social actions to the library because then less chance of people getting banned from Scratch.
+Automating social actions such as loving, favouriting, commenting, or following users is not allowed in the Scratch Terms of Use so I won't add those features to meowclient unless you have a good reason, although if you know how to use the Scratch API you can definitely make your own fetch requests with the session.
## Thanks
Thanks to [Scratchclient](https://github.com/CubeyTheCube/scratchclient) and Raihan142857 ([CubeyTheCube](https://github.com/CubeyTheCube)) for a lot of the login stuff!
-
-
diff --git a/docs/pages/ScratchSession.md b/docs/pages/ScratchSession.md
deleted file mode 100644
index 8af28b8..0000000
--- a/docs/pages/ScratchSession.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# ScratchSession
-
-The main part of meowclient.
-
-## Methods
-
-### init
-
-Initialises the `ScratchSession` to perform authenticated actions. You can perform limited actions without calling this method.
-
-#### Parameters
-
-- `user` (`string`) - The username of the user you want to log in to
-- `pass` (`string`) - The password of the user you want to log in to
-
-### getProject
-
-Gets a project.
-
-#### Parameters
-
-- `id` (`number`) - The ID of the project you want to get.
-
-#### Returns
-
-This returns a `Project` class.
-
-### getProfile
-
-Gets a profile.
-
-#### Parameters
-
-- `username` (`string`) - The username of the profile you want to get.
-
-#### Returns
-
-This returns a `Profile` class.
-
-### getStudio
-
-Gets a studio.
-
-#### Parameters
-
-- `id` (`number`) - The ID of the studio you want to get.
-
-### logout
-
-Logs out of Scratch.
-**Note:** Currently it still keeps `csrfToken`, `token`, and `sessionJSON` intact. If you want to re-login, use the `init` method or create a new `ScratchSession`.
diff --git a/docs/pages/classes/CloudConnection.md b/docs/pages/classes/CloudConnection.md
deleted file mode 100644
index 6990132..0000000
--- a/docs/pages/classes/CloudConnection.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# CloudConnection
-
-The class to use cloud variables. Accessible through `Project.createCloudConnection`.
-
-**Note: This is also an EventEmitter!**
-
-## Methods
-
-### setVariable
-
-Sets a cloud variable
-
-#### Parameters
-
-- `variable` (`string`) The variable name
-- `value` (`string` | `number`) The value to set the variable to
-
-### getVariable
-
-Gets a cloud variable
-
-#### Parameters
-
-- `variable` (`string`) The variable name
-
-#### Returns
-
-This returns a `string` containing the value of the variable.
-
-### close
-
-Closes the cloud connection.
-
-## Properties
-
-### variables
-
-Returns an object with the cloud variable data.
-
-### connection
-
-Returns a websocket connection. This uses the [ws](https://github.com/websockets/ws) library.
-
-## EventEmitter
-
-There are different events:
-
-- `set` (Set a variable)
-- `connect` (Connect to cloud data)
-- `reconnect` (Reconnect to cloud data)
-- `error` (Error in WS connection)
-
-You can use it like this:
-
-```ts
-CloudConnection.on("set", (data) => {
- console.log(`Variable ${data.name} set to ${data.value}`);
-});
-```
diff --git a/docs/pages/classes/Forums.md b/docs/pages/classes/Forums.md
deleted file mode 100644
index 5a26841..0000000
--- a/docs/pages/classes/Forums.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Forums
-
-Access the Scratch forums through meowclient!
-
-## getForum
-
-Gets a forum. Accessible with `ScratchSession.getForum`.
-
-### Parameters
-
-- `id` (`number`): The id of the forum. If not provided, only a few options will work.
-
-### Returns
-
-A `Forum` object.
-
-## Forum
-
-### getTopics (Promise)
-
-Gets the topics in the forum. Only works when `id` is provided.
-
-#### Returns
-
-An array of `Topic` objects.
-
-### getTopic
-
-Gets a topic.
-
-#### Parameters
-
-- `id` (`number`): The id of the topic.
-
-#### Returns
-
-A `Topic` object.
-
-### setSignature
-
-Sets the user's signature
-
-#### Parameters
-
-- `content` (`string`): The content to set the signature to.
-
-#### Returns
-
-A `Topic` object.
-
-## Topic
-
-### getPosts (Promise)
-
-Gets the posts in the topic.
-
-#### Returns
-
-An array of `Post` objects.
-
-### follow (Promise)
-
-Follows the topic.
-
-#### Returns
-
-A `Response` object.
-
-### unfollow (Promise)
-
-Unfollows the topic.
-
-#### Returns
-
-A `Response` object.
-
-## Post
-
-- `id` (`number`): The id of the post.
-- `author` (`string`): The author of the post.
-- `content` (`string`): The content of the post.
-- `parsableContent` (`HTMLElement`): Parsable content with `node-html-parser`.
-- `time` (`Date`): The time the post was created.
-
-### edit (Promise)
-
-Edits the post.
-
-#### Returns
-
-A `Response` object.
diff --git a/docs/pages/classes/Profile.md b/docs/pages/classes/Profile.md
deleted file mode 100644
index f02a2e7..0000000
--- a/docs/pages/classes/Profile.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Profile
-
-The class to get and set a user's Scratch profile data. Accessible through `ScratchSession.getProfile`.
-
-## Functions
-
-### getStatus
-
-Gets the current status of the user.
-
-#### Returns
-
-Returns either `Scratcher`, `New Scratcher`, or `Scratch Team`.
-
-### getComments
-
-Gets the comments on the user's profile.
-
-#### Parameters
-
-- `page` (`number`) The page of comments to view
-
-#### Returns
-
-This returns an Array of `ProfileComment`s.
-
-```ts
-[
- {
- id: string,
- username: string,
- content: string,
- apiID: string,
- replies: [
- {
- id: string,
- username: string,
- content: string,
- apiID: string
- },
- {
- id: string,
- username: string,
- content: string,
- apiID: string
- }
- ]
- }
-];
-```
-
-### deleteComment
-
-Deletes a comment from the user's profile page.
-
-#### Parameters
-
-- `id` (`string` or `number`) The ID of the comment to delete. Must be `12345`, **not** `comment-12345`.
-
-### getUserAPI
-
-Gets the response from `https://api.scratch.mit.edu/users/:user`.
-
-#### Returns
-
-```ts
-id: number,
-username: string,
-scratchteam: boolean,
-history: {
- joined: string
-},
-profile: {
- id: number,
- images: {
- '90x90': string,
- '60x60': string,
- '55x55': string,
- '50x50': string,
- '32x32': string
- },
- status: string,
- bio: string,
- country: string
-}
-```
diff --git a/docs/pages/classes/Project.md b/docs/pages/classes/Project.md
deleted file mode 100644
index e49743e..0000000
--- a/docs/pages/classes/Project.md
+++ /dev/null
@@ -1,133 +0,0 @@
-# Project
-
-Used for Scratch projects. Accessible through `ScratchSession.getProject`.
-
-## Methods
-
-### getAPIData
-
-Gets the API data of the project.
-
-#### Returns
-
-```ts
-id: number,
-title: string,
-description: string,
-instructions: string,
-visibility: string,
-public: boolean,
-comments_allowed: boolean,
-is_published: boolean,
-author: {
- id: number,
- username: string,
- scratchteam: boolean,
- history: {
- joined: string
- },
- profile: {
- id: null | number, // unsure about this one
- images: {
- '90x90': string,
- '60x60': string,
- '55x55': string,
- '50x50': string,
- '32x32': string
- }
- }
-}
-image: string,
-images: {
- '282x218': string,
- '216x163': string,
- '200x200': string,
- '144x108': string,
- '135x102': string,
- '100x80': string
-},
-history: {
- created: string,
- modified: string,
- shared: string
-},
-stats: {
- views: number,
- loves: number,
- favorites: number,
- remixes: number
-},
-remix: {
- parent: null | number,
- root: null | number
-}
-```
-
-### getComments
-
-Gets the comments on the project.
-
-#### Parameters
-
-- `offset` (`number`) The offset of comments to return
-- `limit` (`number`) The limit of comments to return
-
-#### Returns
-
-An array of
-
-```ts
-id: number;
-parent_id: null | number;
-commentee_id: null | number;
-content: string;
-datetime_created: string;
-datetime_modified: string;
-visibility: "visible" | "hidden";
-author: {
- id: number;
- username: string;
- scratchteam: boolean;
- image: string;
-}
-```
-
-### setTitle
-
-Sets the project title (requires you to own the project).
-
-#### Parameters
-
-- `value` (`string`) The value to set the title to
-
-### setInstructions
-
-Sets the project instructions (requires you to own the project).
-
-#### Parameters
-
-- `value` (`string`) The value to set the instructions to
-
-### setNotesAndCredits
-
-Sets the project Notes and Credits (requires you to own the project).
-
-#### Parameters
-
-- `value` (`string`) The value to set the Notes and Credits to
-
-### unshare
-
-Unshares the project (requires you to own the project).
-
-### share
-
-Shares the project (requires you to own the project).
-
-### createCloudConnection
-
-Creates a cloud connection
-
-#### Returns
-
-This returns a CloudConnection class.
diff --git a/docs/pages/classes/Studio.md b/docs/pages/classes/Studio.md
deleted file mode 100644
index 929db9c..0000000
--- a/docs/pages/classes/Studio.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# Studio
-
-Gets a studio. Accessible through `ScratchSession.getStudio`.
-
-## Functions
-
-### getAPIData
-
-Gets the API data for the studio.
-
-### setTitle
-
-Sets the title of the studio.
-
-#### Parameters
-
-- `value` (`string`) The value to set the title to.
-
-#### Returns
-
-A `Response` object.
-
-### setDescription
-
-Sets the description of the studio.
-
-#### Parameters
-
-- `value` (`string`) The value to set the description to.
-
-#### Returns
-
-A `Response` object.
-
-### inviteCurator
-
-Invites a user to be a curator of the studio.
-
-#### Parameters
-
-- `username` (`string`) The username of the user to invite.
-
-#### Returns
-
-A `Response` object.
-
-### removeCurator
-
-Removes a user from the studio.
-
-#### Parameters
-
-- `username` (`string`) The username of the user to remove.
-
-#### Returns
-
-A `Response` object.
-
-### addProject
-
-Adds a project to the studio.
-
-#### Parameters
-
-- `project` (`number`) The ID of the project to add.
-
-#### Returns
-
-A `Response` object.
-
-### removeProject
-
-Removes a project from the studio.
-
-#### Parameters
-
-- `project` (`number`) The ID of the project to remove.
-
-#### Returns
-
-A `Response` object.
-
-### getCurators
-
-Gets the curators of the studio.
-
-#### Parameters
-
-- `limit` (`number`) The maximum number of curators to return.
-- `offset` (`number`) The offset of the curators to return.
-
-#### Returns
-
-A `Promise` that resolves to an array of `User` objects (which are curators).
-
-### getManagers
-
-Gets the managers of the studio.
-
-#### Parameters
-
-- `limit` (`number`) The maximum number of managers to return.
-- `offset` (`number`) The offset of the managers to return.
-
-### Returns
-
-A `Promise` that resolves to an array of `User` objects (which are managers).
-
-### getProjects
-
-Gets the projects in the studio.
-
-#### Parameters
-
-- `limit` (`number`) The maximum number of projects to return.
-- `offset` (`number`) The offset of the projects to return.
-
-#### Returns
-
-A `Promise` that resolves to an array containing:
-
-```ts
-interface OldProjectResponse {
- id: number;
- title: string;
- image: string;
- creator_id: number;
- username: string;
- avatar: {
- "90x90": string;
- "60x60": string;
- "55x55": string;
- "50x50": string;
- "32x32": string;
- };
- actor_id: number;
-}
-```
diff --git a/docs/pages/examples/forums/changeSignature.md b/docs/pages/examples/forums/changeSignature.md
new file mode 100644
index 0000000..92c7f62
--- /dev/null
+++ b/docs/pages/examples/forums/changeSignature.md
@@ -0,0 +1,11 @@
+# Change Signature
+
+This example shows how to change your forums signature with meowclient.
+
+```ts
+import { ScratchSession } from "meowclient";
+const session = new ScratchSession();
+await session.init("user", "pass");
+const forum = session.getForum();
+await forum.setSignature(`I am ${session.username}!`);
+```
diff --git a/docs/pages/examples/forums/topicsAndPosts.md b/docs/pages/examples/forums/topicsAndPosts.md
new file mode 100644
index 0000000..6ef8769
--- /dev/null
+++ b/docs/pages/examples/forums/topicsAndPosts.md
@@ -0,0 +1,32 @@
+# Topics and Posts
+
+This example shows how to get topics in a subforum. To get the subforum ID, go to the page of the subforum (for example, [https://scratch.mit.edu/discuss/31](https://scratch.mit.edu/discuss/31) for the Advanced Topics subforum) and get the numbers at the end of the URL (for the Advanced Topics it is 31).
+
+```ts
+import { ScratchSession } from "meowclient";
+const session = new ScratchSession();
+await session.init("user", "pass");
+
+const subforumID = 31;
+const forum = session.getForum(subforumID);
+const topics = await forum.getTopics();
+for (const topic of topics) {
+ topic.title; // The title of the topic
+ topic.id; // The ID of the topic
+ topic.replyCount; // The number of replies in the topic
+
+ await topic.follow(); // Follow the topic
+ await topic.unfollow(); // Unfollow the topic
+
+ const posts = await topic.getPosts();
+ for (const post of posts) {
+ post.id; // The ID of the post
+ post.content; // The content of the post
+ post.parsableContent; // The content of the post that can be parsed (uses node-html-parser)
+ post.author; // The username of the post author
+ post.time; // The time when the post was made
+
+ await post.edit(`This is a post by ${post.author}!`); // Edits the post
+ }
+}
+```
diff --git a/docs/pages/examples/getSessionJSON.md b/docs/pages/examples/getSessionJSON.md
new file mode 100644
index 0000000..a4afc74
--- /dev/null
+++ b/docs/pages/examples/getSessionJSON.md
@@ -0,0 +1,10 @@
+# Get Session JSON
+
+This example shows how to get your session JSON.
+
+```ts
+import { ScratchSession } from "meowclient";
+const session = new ScratchSession();
+await session.init("user", "pass");
+console.log(session.sessionJSON);
+```
diff --git a/docs/pages/index.md b/docs/pages/index.md
index c03b468..8f60523 100644
--- a/docs/pages/index.md
+++ b/docs/pages/index.md
@@ -23,13 +23,13 @@ const { ScratchSession } = require("meowclient");
A basic starter program:
```js
-import { ScratchSession } from "meowclient";
-(async () => {
- const session = new ScratchSession();
- await session.init("user", "pass"); // change these to your scratch login credentials
- const me = session.getProfile(session.username);
- console.log("My status is " + (await me.getStatus()));
-})();
+import { ScratchSession, Profile } from "meowclient";
+const session = new ScratchSession();
+await session.init("user", "pass"); // change these to your scratch login credentials
+const me = new Profile(session, session.username);
+console.log("My status is " + (await me.getStatus()));
```
-Documentation is **work in progress** and not all things have been added yet.
+If you use VS Code, you should be able to use the JSDoc documentation. If you use TypeScript you can also take full advantage of the types.
+
+This will soon be a collection of examples for using meowclient. If you cannot find what you want, you can go through the [source code](https://github.com/webdev03/meowclient) or you can ask for help in the [official meowclient forum topic](https://scratch.mit.edu/discuss/topic/574321).
diff --git a/package.json b/package.json
index f1f11d6..22d1150 100644
--- a/package.json
+++ b/package.json
@@ -12,24 +12,26 @@
"build": "tsup src/index.ts --format cjs,esm --minify --dts",
"build:watch": "tsup src/index.ts --format cjs,esm --minify --dts --watch",
"prepublish": "tsup src/index.ts --format cjs,esm --minify --dts",
- "test": "tsup src/index.ts --format cjs,esm --minify && tap",
+ "test": "tap --no-coverage --node-arg=--loader=ts-node/esm --node-arg=--experimental-specifier-resolution=node",
"lint": "prettier --check .",
"format": "prettier --write ."
},
"author": "",
"license": "MIT",
"devDependencies": {
- "@types/node": "^17.0.14",
- "@types/ws": "^8.2.2",
- "prettier": "^2.5.1",
- "tap": "^16.1.0",
- "tsup": "^5.11.13",
- "typescript": "^4.5.5"
+ "@types/node": "^17.0.45",
+ "@types/tap": "^15.0.7",
+ "@types/ws": "^8.5.3",
+ "prettier": "^2.8.0",
+ "tap": "^16.3.2",
+ "ts-node": "^10.9.1",
+ "tsup": "^6.5.0",
+ "typescript": "^4.9.3"
},
"dependencies": {
"cross-fetch": "^3.1.5",
- "node-html-parser": "^5.2.0",
- "ws": "^8.4.2"
+ "node-html-parser": "^5.4.2",
+ "ws": "^8.11.0"
},
"exports": {
".": {
@@ -42,5 +44,6 @@
"engines": {
"node": ">13"
},
- "engineStrict": true
+ "engineStrict": true,
+ "sideEffects": false
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b2525db..4f0b071 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,66 +1,71 @@
lockfileVersion: 5.4
specifiers:
- '@types/node': ^17.0.14
- '@types/ws': ^8.2.2
+ '@types/node': ^17.0.45
+ '@types/tap': ^15.0.7
+ '@types/ws': ^8.5.3
cross-fetch: ^3.1.5
- node-html-parser: ^5.2.0
- prettier: ^2.5.1
- tap: ^16.1.0
- tsup: ^5.11.13
- typescript: ^4.5.5
- ws: ^8.4.2
+ node-html-parser: ^5.4.2
+ prettier: ^2.8.0
+ tap: ^16.3.2
+ ts-node: ^10.9.1
+ tsup: ^6.5.0
+ typescript: ^4.9.3
+ ws: ^8.11.0
dependencies:
cross-fetch: 3.1.5
- node-html-parser: 5.2.0
- ws: 8.4.2
+ node-html-parser: 5.4.2
+ ws: 8.11.0
devDependencies:
- '@types/node': 17.0.14
- '@types/ws': 8.2.2
- prettier: 2.5.1
- tap: 16.1.0_typescript@4.5.5
- tsup: 5.11.13_typescript@4.5.5
- typescript: 4.5.5
+ '@types/node': 17.0.45
+ '@types/tap': 15.0.7
+ '@types/ws': 8.5.3
+ prettier: 2.8.0
+ tap: 16.3.2_2dtigtkb225m7ii7q45utxqwgi
+ ts-node: 10.9.1_7cep2inysldxstbcrxlp3njwym
+ tsup: 6.5.0_2dtigtkb225m7ii7q45utxqwgi
+ typescript: 4.9.3
packages:
- /@ampproject/remapping/2.1.2:
- resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==}
+ /@ampproject/remapping/2.2.0:
+ resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
engines: {node: '>=6.0.0'}
dependencies:
- '@jridgewell/trace-mapping': 0.3.9
+ '@jridgewell/gen-mapping': 0.1.1
+ '@jridgewell/trace-mapping': 0.3.17
dev: true
- /@babel/code-frame/7.16.7:
- resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==}
+ /@babel/code-frame/7.18.6:
+ resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/highlight': 7.17.9
+ '@babel/highlight': 7.18.6
dev: true
- /@babel/compat-data/7.17.7:
- resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==}
+ /@babel/compat-data/7.20.1:
+ resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/core/7.17.9:
- resolution: {integrity: sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==}
+ /@babel/core/7.20.2:
+ resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@ampproject/remapping': 2.1.2
- '@babel/code-frame': 7.16.7
- '@babel/generator': 7.17.9
- '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.9
- '@babel/helper-module-transforms': 7.17.7
- '@babel/helpers': 7.17.9
- '@babel/parser': 7.17.9
- '@babel/template': 7.16.7
- '@babel/traverse': 7.17.9
- '@babel/types': 7.17.0
- convert-source-map: 1.8.0
- debug: 4.3.3
+ '@ampproject/remapping': 2.2.0
+ '@babel/code-frame': 7.18.6
+ '@babel/generator': 7.20.4
+ '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2
+ '@babel/helper-module-transforms': 7.20.2
+ '@babel/helpers': 7.20.1
+ '@babel/parser': 7.20.3
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.20.1
+ '@babel/types': 7.20.2
+ convert-source-map: 1.9.0
+ debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.1
semver: 6.3.0
@@ -68,160 +73,189 @@ packages:
- supports-color
dev: true
- /@babel/generator/7.17.9:
- resolution: {integrity: sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==}
+ /@babel/generator/7.20.4:
+ resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.20.2
+ '@jridgewell/gen-mapping': 0.3.2
jsesc: 2.5.2
- source-map: 0.5.7
dev: true
- /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.9:
- resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==}
+ /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2:
+ resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/compat-data': 7.17.7
- '@babel/core': 7.17.9
- '@babel/helper-validator-option': 7.16.7
- browserslist: 4.20.3
+ '@babel/compat-data': 7.20.1
+ '@babel/core': 7.20.2
+ '@babel/helper-validator-option': 7.18.6
+ browserslist: 4.21.4
semver: 6.3.0
dev: true
- /@babel/helper-environment-visitor/7.16.7:
- resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==}
+ /@babel/helper-environment-visitor/7.18.9:
+ resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.17.0
dev: true
- /@babel/helper-function-name/7.17.9:
- resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==}
+ /@babel/helper-function-name/7.19.0:
+ resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/template': 7.16.7
- '@babel/types': 7.17.0
+ '@babel/template': 7.18.10
+ '@babel/types': 7.20.2
dev: true
- /@babel/helper-hoist-variables/7.16.7:
- resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==}
+ /@babel/helper-hoist-variables/7.18.6:
+ resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.20.2
dev: true
- /@babel/helper-module-imports/7.16.7:
- resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==}
+ /@babel/helper-module-imports/7.18.6:
+ resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.20.2
dev: true
- /@babel/helper-module-transforms/7.17.7:
- resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==}
+ /@babel/helper-module-transforms/7.20.2:
+ resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-environment-visitor': 7.16.7
- '@babel/helper-module-imports': 7.16.7
- '@babel/helper-simple-access': 7.17.7
- '@babel/helper-split-export-declaration': 7.16.7
- '@babel/helper-validator-identifier': 7.16.7
- '@babel/template': 7.16.7
- '@babel/traverse': 7.17.9
- '@babel/types': 7.17.0
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-simple-access': 7.20.2
+ '@babel/helper-split-export-declaration': 7.18.6
+ '@babel/helper-validator-identifier': 7.19.1
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.20.1
+ '@babel/types': 7.20.2
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/helper-simple-access/7.17.7:
- resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==}
+ /@babel/helper-simple-access/7.20.2:
+ resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.20.2
dev: true
- /@babel/helper-split-export-declaration/7.16.7:
- resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==}
+ /@babel/helper-split-export-declaration/7.18.6:
+ resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.20.2
+ dev: true
+
+ /@babel/helper-string-parser/7.19.4:
+ resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ engines: {node: '>=6.9.0'}
dev: true
- /@babel/helper-validator-identifier/7.16.7:
- resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
+ /@babel/helper-validator-identifier/7.19.1:
+ resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helper-validator-option/7.16.7:
- resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==}
+ /@babel/helper-validator-option/7.18.6:
+ resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helpers/7.17.9:
- resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==}
+ /@babel/helpers/7.20.1:
+ resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/template': 7.16.7
- '@babel/traverse': 7.17.9
- '@babel/types': 7.17.0
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.20.1
+ '@babel/types': 7.20.2
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/highlight/7.17.9:
- resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==}
+ /@babel/highlight/7.18.6:
+ resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.16.7
+ '@babel/helper-validator-identifier': 7.19.1
chalk: 2.4.2
js-tokens: 4.0.0
dev: true
- /@babel/parser/7.17.9:
- resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==}
+ /@babel/parser/7.20.3:
+ resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.20.2
dev: true
- /@babel/template/7.16.7:
- resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==}
+ /@babel/template/7.18.10:
+ resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.16.7
- '@babel/parser': 7.17.9
- '@babel/types': 7.17.0
+ '@babel/code-frame': 7.18.6
+ '@babel/parser': 7.20.3
+ '@babel/types': 7.20.2
dev: true
- /@babel/traverse/7.17.9:
- resolution: {integrity: sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==}
+ /@babel/traverse/7.20.1:
+ resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.16.7
- '@babel/generator': 7.17.9
- '@babel/helper-environment-visitor': 7.16.7
- '@babel/helper-function-name': 7.17.9
- '@babel/helper-hoist-variables': 7.16.7
- '@babel/helper-split-export-declaration': 7.16.7
- '@babel/parser': 7.17.9
- '@babel/types': 7.17.0
- debug: 4.3.3
+ '@babel/code-frame': 7.18.6
+ '@babel/generator': 7.20.4
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.19.0
+ '@babel/helper-hoist-variables': 7.18.6
+ '@babel/helper-split-export-declaration': 7.18.6
+ '@babel/parser': 7.20.3
+ '@babel/types': 7.20.2
+ debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/types/7.17.0:
- resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
+ /@babel/types/7.20.2:
+ resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.16.7
+ '@babel/helper-string-parser': 7.19.4
+ '@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
dev: true
+ /@cspotcode/source-map-support/0.8.1:
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+ dev: true
+
+ /@esbuild/android-arm/0.15.15:
+ resolution: {integrity: sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64/0.15.15:
+ resolution: {integrity: sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@istanbuljs/load-nyc-config/1.1.0:
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
@@ -238,20 +272,49 @@ packages:
engines: {node: '>=8'}
dev: true
- /@jridgewell/resolve-uri/3.0.6:
- resolution: {integrity: sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==}
+ /@jridgewell/gen-mapping/0.1.1:
+ resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.14
dev: true
- /@jridgewell/sourcemap-codec/1.4.11:
- resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==}
+ /@jridgewell/gen-mapping/0.3.2:
+ resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.14
+ '@jridgewell/trace-mapping': 0.3.17
+ dev: true
+
+ /@jridgewell/resolve-uri/3.1.0:
+ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/set-array/1.1.2:
+ resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/sourcemap-codec/1.4.14:
+ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+ dev: true
+
+ /@jridgewell/trace-mapping/0.3.17:
+ resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.0
+ '@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@jridgewell/trace-mapping/0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
dependencies:
- '@jridgewell/resolve-uri': 3.0.6
- '@jridgewell/sourcemap-codec': 1.4.11
+ '@jridgewell/resolve-uri': 3.1.0
+ '@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@nodelib/fs.scandir/2.1.5:
@@ -275,14 +338,47 @@ packages:
fastq: 1.13.0
dev: true
- /@types/node/17.0.14:
- resolution: {integrity: sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==}
+ /@tsconfig/node10/1.0.9:
+ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
dev: true
- /@types/ws/8.2.2:
- resolution: {integrity: sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==}
+ /@tsconfig/node12/1.0.11:
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+ dev: true
+
+ /@tsconfig/node14/1.0.3:
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+ dev: true
+
+ /@tsconfig/node16/1.0.3:
+ resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
+ dev: true
+
+ /@types/node/17.0.45:
+ resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
+ dev: true
+
+ /@types/tap/15.0.7:
+ resolution: {integrity: sha512-TTMajw4gxQfFgYbhXhy/Tb2OiNcwS+4oP/9yp1/GdU0pFJo3wtnkYhRgmQy39ksh+rnoa0VrPHJ4Tuv2cLNQ5A==}
+ dependencies:
+ '@types/node': 17.0.45
+ dev: true
+
+ /@types/ws/8.5.3:
+ resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==}
dependencies:
- '@types/node': 17.0.14
+ '@types/node': 17.0.45
+ dev: true
+
+ /acorn-walk/8.2.0:
+ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
+ /acorn/8.8.1:
+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
dev: true
/aggregate-error/3.1.0:
@@ -293,11 +389,6 @@ packages:
indent-string: 4.0.0
dev: true
- /ansi-regex/2.1.1:
- resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=}
- engines: {node: '>=0.10.0'}
- dev: true
-
/ansi-regex/5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -318,11 +409,11 @@ packages:
dev: true
/any-promise/1.3.0:
- resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=}
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
dev: true
- /anymatch/3.1.2:
- resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
+ /anymatch/3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
@@ -333,11 +424,15 @@ packages:
resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==}
engines: {node: '>=8'}
dependencies:
- default-require-extensions: 3.0.0
+ default-require-extensions: 3.0.1
dev: true
/archy/1.0.0:
- resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=}
+ resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==}
+ dev: true
+
+ /arg/4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
dev: true
/argparse/1.0.10:
@@ -371,7 +466,7 @@ packages:
dev: true
/boolbase/1.0.0:
- resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=}
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
dev: false
/brace-expansion/1.1.11:
@@ -388,34 +483,33 @@ packages:
fill-range: 7.0.1
dev: true
- /browserslist/4.20.3:
- resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==}
+ /browserslist/4.21.4:
+ resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001332
- electron-to-chromium: 1.4.118
- escalade: 3.1.1
- node-releases: 2.0.3
- picocolors: 1.0.0
+ caniuse-lite: 1.0.30001434
+ electron-to-chromium: 1.4.284
+ node-releases: 2.0.6
+ update-browserslist-db: 1.0.10_browserslist@4.21.4
dev: true
/buffer-from/1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: true
- /bundle-require/3.0.4_esbuild@0.14.18:
- resolution: {integrity: sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A==}
+ /bundle-require/3.1.2_esbuild@0.15.15:
+ resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
peerDependencies:
esbuild: '>=0.13'
dependencies:
- esbuild: 0.14.18
+ esbuild: 0.15.15
load-tsconfig: 0.2.3
dev: true
- /cac/6.7.12:
- resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==}
+ /cac/6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
dev: true
@@ -434,8 +528,8 @@ packages:
engines: {node: '>=6'}
dev: true
- /caniuse-lite/1.0.30001332:
- resolution: {integrity: sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==}
+ /caniuse-lite/1.0.30001434:
+ resolution: {integrity: sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==}
dev: true
/chalk/2.4.2:
@@ -451,7 +545,7 @@ packages:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
dependencies:
- anymatch: 3.1.2
+ anymatch: 3.1.3
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
@@ -497,7 +591,7 @@ packages:
dev: true
/color-name/1.1.3:
- resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
dev: true
/color-name/1.1.4:
@@ -515,17 +609,19 @@ packages:
dev: true
/commondir/1.0.1:
- resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=}
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
dev: true
/concat-map/0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: true
- /convert-source-map/1.8.0:
- resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
- dependencies:
- safe-buffer: 5.1.2
+ /convert-source-map/1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ dev: true
+
+ /create-require/1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
dev: true
/cross-fetch/3.1.5:
@@ -545,23 +641,23 @@ packages:
which: 2.0.2
dev: true
- /css-select/4.2.1:
- resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==}
+ /css-select/4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
dependencies:
boolbase: 1.0.0
- css-what: 5.1.0
- domhandler: 4.3.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
domutils: 2.8.0
- nth-check: 2.0.1
+ nth-check: 2.1.1
dev: false
- /css-what/5.1.0:
- resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==}
+ /css-what/6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
engines: {node: '>= 6'}
dev: false
- /debug/4.3.3:
- resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==}
+ /debug/4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -573,12 +669,12 @@ packages:
dev: true
/decamelize/1.2.0:
- resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=}
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
dev: true
- /default-require-extensions/3.0.0:
- resolution: {integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==}
+ /default-require-extensions/3.0.1:
+ resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==}
engines: {node: '>=8'}
dependencies:
strip-bom: 4.0.0
@@ -596,35 +692,35 @@ packages:
path-type: 4.0.0
dev: true
- /dom-serializer/1.3.2:
- resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==}
+ /dom-serializer/1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
dependencies:
- domelementtype: 2.2.0
- domhandler: 4.3.0
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
entities: 2.2.0
dev: false
- /domelementtype/2.2.0:
- resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==}
+ /domelementtype/2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
dev: false
- /domhandler/4.3.0:
- resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==}
+ /domhandler/4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
engines: {node: '>= 4'}
dependencies:
- domelementtype: 2.2.0
+ domelementtype: 2.3.0
dev: false
/domutils/2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
dependencies:
- dom-serializer: 1.3.2
- domelementtype: 2.2.0
- domhandler: 4.3.0
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
dev: false
- /electron-to-chromium/1.4.118:
- resolution: {integrity: sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==}
+ /electron-to-chromium/1.4.284:
+ resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
dev: true
/emoji-regex/8.0.0:
@@ -639,8 +735,17 @@ packages:
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
dev: true
- /esbuild-android-arm64/0.14.18:
- resolution: {integrity: sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==}
+ /esbuild-android-64/0.15.15:
+ resolution: {integrity: sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-android-arm64/0.15.15:
+ resolution: {integrity: sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -648,8 +753,8 @@ packages:
dev: true
optional: true
- /esbuild-darwin-64/0.14.18:
- resolution: {integrity: sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==}
+ /esbuild-darwin-64/0.15.15:
+ resolution: {integrity: sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -657,8 +762,8 @@ packages:
dev: true
optional: true
- /esbuild-darwin-arm64/0.14.18:
- resolution: {integrity: sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==}
+ /esbuild-darwin-arm64/0.15.15:
+ resolution: {integrity: sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -666,8 +771,8 @@ packages:
dev: true
optional: true
- /esbuild-freebsd-64/0.14.18:
- resolution: {integrity: sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==}
+ /esbuild-freebsd-64/0.15.15:
+ resolution: {integrity: sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -675,8 +780,8 @@ packages:
dev: true
optional: true
- /esbuild-freebsd-arm64/0.14.18:
- resolution: {integrity: sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==}
+ /esbuild-freebsd-arm64/0.15.15:
+ resolution: {integrity: sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -684,8 +789,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-32/0.14.18:
- resolution: {integrity: sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==}
+ /esbuild-linux-32/0.15.15:
+ resolution: {integrity: sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -693,8 +798,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-64/0.14.18:
- resolution: {integrity: sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==}
+ /esbuild-linux-64/0.15.15:
+ resolution: {integrity: sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -702,8 +807,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-arm/0.14.18:
- resolution: {integrity: sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==}
+ /esbuild-linux-arm/0.15.15:
+ resolution: {integrity: sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -711,8 +816,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-arm64/0.14.18:
- resolution: {integrity: sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==}
+ /esbuild-linux-arm64/0.15.15:
+ resolution: {integrity: sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -720,8 +825,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-mips64le/0.14.18:
- resolution: {integrity: sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==}
+ /esbuild-linux-mips64le/0.15.15:
+ resolution: {integrity: sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -729,8 +834,8 @@ packages:
dev: true
optional: true
- /esbuild-linux-ppc64le/0.14.18:
- resolution: {integrity: sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==}
+ /esbuild-linux-ppc64le/0.15.15:
+ resolution: {integrity: sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -738,8 +843,17 @@ packages:
dev: true
optional: true
- /esbuild-linux-s390x/0.14.18:
- resolution: {integrity: sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==}
+ /esbuild-linux-riscv64/0.15.15:
+ resolution: {integrity: sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-s390x/0.15.15:
+ resolution: {integrity: sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -747,8 +861,8 @@ packages:
dev: true
optional: true
- /esbuild-netbsd-64/0.14.18:
- resolution: {integrity: sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==}
+ /esbuild-netbsd-64/0.15.15:
+ resolution: {integrity: sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -756,8 +870,8 @@ packages:
dev: true
optional: true
- /esbuild-openbsd-64/0.14.18:
- resolution: {integrity: sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==}
+ /esbuild-openbsd-64/0.15.15:
+ resolution: {integrity: sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -765,8 +879,8 @@ packages:
dev: true
optional: true
- /esbuild-sunos-64/0.14.18:
- resolution: {integrity: sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==}
+ /esbuild-sunos-64/0.15.15:
+ resolution: {integrity: sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -774,8 +888,8 @@ packages:
dev: true
optional: true
- /esbuild-windows-32/0.14.18:
- resolution: {integrity: sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==}
+ /esbuild-windows-32/0.15.15:
+ resolution: {integrity: sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -783,8 +897,8 @@ packages:
dev: true
optional: true
- /esbuild-windows-64/0.14.18:
- resolution: {integrity: sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==}
+ /esbuild-windows-64/0.15.15:
+ resolution: {integrity: sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -792,8 +906,8 @@ packages:
dev: true
optional: true
- /esbuild-windows-arm64/0.14.18:
- resolution: {integrity: sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==}
+ /esbuild-windows-arm64/0.15.15:
+ resolution: {integrity: sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -801,30 +915,34 @@ packages:
dev: true
optional: true
- /esbuild/0.14.18:
- resolution: {integrity: sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==}
+ /esbuild/0.15.15:
+ resolution: {integrity: sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- esbuild-android-arm64: 0.14.18
- esbuild-darwin-64: 0.14.18
- esbuild-darwin-arm64: 0.14.18
- esbuild-freebsd-64: 0.14.18
- esbuild-freebsd-arm64: 0.14.18
- esbuild-linux-32: 0.14.18
- esbuild-linux-64: 0.14.18
- esbuild-linux-arm: 0.14.18
- esbuild-linux-arm64: 0.14.18
- esbuild-linux-mips64le: 0.14.18
- esbuild-linux-ppc64le: 0.14.18
- esbuild-linux-s390x: 0.14.18
- esbuild-netbsd-64: 0.14.18
- esbuild-openbsd-64: 0.14.18
- esbuild-sunos-64: 0.14.18
- esbuild-windows-32: 0.14.18
- esbuild-windows-64: 0.14.18
- esbuild-windows-arm64: 0.14.18
+ '@esbuild/android-arm': 0.15.15
+ '@esbuild/linux-loong64': 0.15.15
+ esbuild-android-64: 0.15.15
+ esbuild-android-arm64: 0.15.15
+ esbuild-darwin-64: 0.15.15
+ esbuild-darwin-arm64: 0.15.15
+ esbuild-freebsd-64: 0.15.15
+ esbuild-freebsd-arm64: 0.15.15
+ esbuild-linux-32: 0.15.15
+ esbuild-linux-64: 0.15.15
+ esbuild-linux-arm: 0.15.15
+ esbuild-linux-arm64: 0.15.15
+ esbuild-linux-mips64le: 0.15.15
+ esbuild-linux-ppc64le: 0.15.15
+ esbuild-linux-riscv64: 0.15.15
+ esbuild-linux-s390x: 0.15.15
+ esbuild-netbsd-64: 0.15.15
+ esbuild-openbsd-64: 0.15.15
+ esbuild-sunos-64: 0.15.15
+ esbuild-windows-32: 0.15.15
+ esbuild-windows-64: 0.15.15
+ esbuild-windows-arm64: 0.15.15
dev: true
/escalade/3.1.1:
@@ -833,7 +951,7 @@ packages:
dev: true
/escape-string-regexp/1.0.5:
- resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
dev: true
@@ -849,7 +967,7 @@ packages:
dev: true
/events-to-array/1.1.2:
- resolution: {integrity: sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=}
+ resolution: {integrity: sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==}
dev: true
/execa/5.1.1:
@@ -863,19 +981,19 @@ packages:
merge-stream: 2.0.0
npm-run-path: 4.0.1
onetime: 5.1.2
- signal-exit: 3.0.6
+ signal-exit: 3.0.7
strip-final-newline: 2.0.0
dev: true
- /fast-glob/3.2.11:
- resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==}
+ /fast-glob/3.2.12:
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.4
+ micromatch: 4.0.5
dev: true
/fastq/1.13.0:
@@ -909,7 +1027,7 @@ packages:
dev: true
/findit/2.0.0:
- resolution: {integrity: sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=}
+ resolution: {integrity: sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==}
dev: true
/foreground-child/2.0.0:
@@ -917,7 +1035,7 @@ packages:
engines: {node: '>=8.0.0'}
dependencies:
cross-spawn: 7.0.3
- signal-exit: 3.0.6
+ signal-exit: 3.0.7
dev: true
/fromentries/1.3.2:
@@ -925,11 +1043,11 @@ packages:
dev: true
/fs-exists-cached/1.0.0:
- resolution: {integrity: sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=}
+ resolution: {integrity: sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==}
dev: true
/fs.realpath/1.0.0:
- resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
/fsevents/2.3.2:
@@ -977,7 +1095,18 @@ packages:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
- minimatch: 3.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /glob/7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
@@ -993,7 +1122,7 @@ packages:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
- fast-glob: 3.2.11
+ fast-glob: 3.2.12
ignore: 5.2.0
merge2: 1.4.1
slash: 3.0.0
@@ -1004,7 +1133,7 @@ packages:
dev: true
/has-flag/3.0.0:
- resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
dev: true
@@ -1041,7 +1170,7 @@ packages:
dev: true
/imurmurhash/0.1.4:
- resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
dev: true
@@ -1051,7 +1180,7 @@ packages:
dev: true
/inflight/1.0.6:
- resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
@@ -1069,7 +1198,7 @@ packages:
dev: true
/is-extglob/2.1.1:
- resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
dev: true
@@ -1096,7 +1225,7 @@ packages:
dev: true
/is-typedarray/1.0.0:
- resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=}
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
dev: true
/is-windows/1.0.2:
@@ -1105,7 +1234,7 @@ packages:
dev: true
/isexe/2.0.0:
- resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true
/istanbul-lib-coverage/3.2.0:
@@ -1124,7 +1253,7 @@ packages:
resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==}
engines: {node: '>=8'}
dependencies:
- '@babel/core': 7.17.9
+ '@babel/core': 7.20.2
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 6.3.0
@@ -1132,17 +1261,16 @@ packages:
- supports-color
dev: true
- /istanbul-lib-processinfo/2.0.2:
- resolution: {integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==}
+ /istanbul-lib-processinfo/2.0.3:
+ resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==}
engines: {node: '>=8'}
dependencies:
archy: 1.0.0
cross-spawn: 7.0.3
istanbul-lib-coverage: 3.2.0
- make-dir: 3.1.0
p-map: 3.0.0
rimraf: 3.0.2
- uuid: 3.4.0
+ uuid: 8.3.2
dev: true
/istanbul-lib-report/3.0.0:
@@ -1158,23 +1286,23 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
dependencies:
- debug: 4.3.3
+ debug: 4.3.4
istanbul-lib-coverage: 3.2.0
source-map: 0.6.1
transitivePeerDependencies:
- supports-color
dev: true
- /istanbul-reports/3.1.4:
- resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==}
+ /istanbul-reports/3.1.5:
+ resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==}
engines: {node: '>=8'}
dependencies:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.0
dev: true
- /jackspeak/1.4.1:
- resolution: {integrity: sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==}
+ /jackspeak/1.4.2:
+ resolution: {integrity: sha512-GHeGTmnuaHnvS+ZctRB01bfxARuu9wW83ENbuiweu07SFcVlZrJpcshSre/keGT7YGBhLHg/+rXCNSrsEHKU4Q==}
engines: {node: '>=8'}
dependencies:
cliui: 7.0.4
@@ -1217,19 +1345,19 @@ packages:
bind-obj-methods: 3.0.0
diff: 4.0.2
function-loop: 2.0.1
- minipass: 3.1.6
+ minipass: 3.3.6
own-or: 1.0.0
own-or-env: 1.0.2
- signal-exit: 3.0.6
- stack-utils: 2.0.5
- tap-parser: 11.0.1
- tap-yaml: 1.0.0
+ signal-exit: 3.0.7
+ stack-utils: 2.0.6
+ tap-parser: 11.0.2
+ tap-yaml: 1.0.2
tcompare: 5.0.7
trivial-deferred: 1.0.1
dev: true
- /lilconfig/2.0.4:
- resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==}
+ /lilconfig/2.0.6:
+ resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
engines: {node: '>=10'}
dev: true
@@ -1250,7 +1378,11 @@ packages:
dev: true
/lodash.flattendeep/4.4.0:
- resolution: {integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=}
+ resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==}
+ dev: true
+
+ /lodash.sortby/4.7.0:
+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
dev: true
/make-dir/3.1.0:
@@ -1260,6 +1392,10 @@ packages:
semver: 6.3.0
dev: true
+ /make-error/1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ dev: true
+
/merge-stream/2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
dev: true
@@ -1269,8 +1405,8 @@ packages:
engines: {node: '>= 8'}
dev: true
- /micromatch/4.0.4:
- resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==}
+ /micromatch/4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
dependencies:
braces: 3.0.2
@@ -1282,14 +1418,14 @@ packages:
engines: {node: '>=6'}
dev: true
- /minimatch/3.0.4:
- resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
+ /minimatch/3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: true
- /minipass/3.1.6:
- resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==}
+ /minipass/3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
dependencies:
yallist: 4.0.0
@@ -1325,10 +1461,10 @@ packages:
whatwg-url: 5.0.0
dev: false
- /node-html-parser/5.2.0:
- resolution: {integrity: sha512-fmiwLfQu+J2A0zjwSEkztSHexAf5qq/WoiL/Hgo1K7JpfEP+OGWY5maG0kGaM+IFVdixF/1QbyXaQ3h4cGfeLw==}
+ /node-html-parser/5.4.2:
+ resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==}
dependencies:
- css-select: 4.2.1
+ css-select: 4.3.0
he: 1.2.0
dev: false
@@ -1339,8 +1475,8 @@ packages:
process-on-spawn: 1.0.0
dev: true
- /node-releases/2.0.3:
- resolution: {integrity: sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==}
+ /node-releases/2.0.6:
+ resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
dev: true
/normalize-path/3.0.0:
@@ -1355,8 +1491,8 @@ packages:
path-key: 3.1.1
dev: true
- /nth-check/2.0.1:
- resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==}
+ /nth-check/2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
boolbase: 1.0.0
dev: false
@@ -1369,27 +1505,27 @@ packages:
'@istanbuljs/load-nyc-config': 1.1.0
'@istanbuljs/schema': 0.1.3
caching-transform: 4.0.0
- convert-source-map: 1.8.0
+ convert-source-map: 1.9.0
decamelize: 1.2.0
find-cache-dir: 3.3.2
find-up: 4.1.0
foreground-child: 2.0.0
get-package-type: 0.1.0
- glob: 7.1.6
+ glob: 7.2.3
istanbul-lib-coverage: 3.2.0
istanbul-lib-hook: 3.0.0
istanbul-lib-instrument: 4.0.3
- istanbul-lib-processinfo: 2.0.2
+ istanbul-lib-processinfo: 2.0.3
istanbul-lib-report: 3.0.0
istanbul-lib-source-maps: 4.0.1
- istanbul-reports: 3.1.4
+ istanbul-reports: 3.1.5
make-dir: 3.1.0
node-preload: 0.2.1
p-map: 3.0.0
process-on-spawn: 1.0.0
resolve-from: 5.0.0
rimraf: 3.0.2
- signal-exit: 3.0.6
+ signal-exit: 3.0.7
spawn-wrap: 2.0.0
test-exclude: 6.0.0
yargs: 15.4.1
@@ -1398,12 +1534,12 @@ packages:
dev: true
/object-assign/4.1.1:
- resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
dev: true
/once/1.4.0:
- resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: true
@@ -1427,7 +1563,7 @@ packages:
dev: true
/own-or/1.0.0:
- resolution: {integrity: sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=}
+ resolution: {integrity: sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==}
dev: true
/p-limit/2.3.0:
@@ -1472,7 +1608,7 @@ packages:
dev: true
/path-is-absolute/1.0.1:
- resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: true
@@ -1507,21 +1643,25 @@ packages:
find-up: 4.1.0
dev: true
- /postcss-load-config/3.1.1:
- resolution: {integrity: sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==}
+ /postcss-load-config/3.1.4_ts-node@10.9.1:
+ resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
engines: {node: '>= 10'}
peerDependencies:
+ postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
+ postcss:
+ optional: true
ts-node:
optional: true
dependencies:
- lilconfig: 2.0.4
+ lilconfig: 2.0.6
+ ts-node: 10.9.1_7cep2inysldxstbcrxlp3njwym
yaml: 1.10.2
dev: true
- /prettier/2.5.1:
- resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==}
+ /prettier/2.8.0:
+ resolution: {integrity: sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==}
engines: {node: '>=10.13.0'}
hasBin: true
dev: true
@@ -1550,14 +1690,14 @@ packages:
dev: true
/release-zalgo/1.0.0:
- resolution: {integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=}
+ resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==}
engines: {node: '>=4'}
dependencies:
es6-error: 4.1.1
dev: true
/require-directory/2.1.1:
- resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
dev: true
@@ -1579,12 +1719,12 @@ packages:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
dependencies:
- glob: 7.1.6
+ glob: 7.2.3
dev: true
- /rollup/2.67.0:
- resolution: {integrity: sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==}
- engines: {node: '>=10.0.0'}
+ /rollup/3.4.0:
+ resolution: {integrity: sha512-4g8ZrEFK7UbDvy3JF+d5bLiC8UKkS3n/27/cnVeESwB1LVPl6MoPL32/6+SCQ1vHTp6Mvp2veIHtwELhi+uXEw==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
@@ -1596,17 +1736,13 @@ packages:
queue-microtask: 1.2.3
dev: true
- /safe-buffer/5.1.2:
- resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
- dev: true
-
/semver/6.3.0:
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
hasBin: true
dev: true
/set-blocking/2.0.0:
- resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=}
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
dev: true
/shebang-command/2.0.0:
@@ -1621,8 +1757,8 @@ packages:
engines: {node: '>=8'}
dev: true
- /signal-exit/3.0.6:
- resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==}
+ /signal-exit/3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
/slash/3.0.0:
@@ -1637,19 +1773,16 @@ packages:
source-map: 0.6.1
dev: true
- /source-map/0.5.7:
- resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
- engines: {node: '>=0.10.0'}
- dev: true
-
/source-map/0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: true
- /source-map/0.7.3:
- resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
+ /source-map/0.8.0-beta.0:
+ resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
engines: {node: '>= 8'}
+ dependencies:
+ whatwg-url: 7.1.0
dev: true
/spawn-wrap/2.0.0:
@@ -1660,16 +1793,16 @@ packages:
is-windows: 1.0.2
make-dir: 3.1.0
rimraf: 3.0.2
- signal-exit: 3.0.6
+ signal-exit: 3.0.7
which: 2.0.2
dev: true
/sprintf-js/1.0.3:
- resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=}
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
dev: true
- /stack-utils/2.0.5:
- resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==}
+ /stack-utils/2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
dependencies:
escape-string-regexp: 2.0.0
@@ -1684,13 +1817,6 @@ packages:
strip-ansi: 6.0.1
dev: true
- /strip-ansi/3.0.1:
- resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=}
- engines: {node: '>=0.10.0'}
- dependencies:
- ansi-regex: 2.1.1
- dev: true
-
/strip-ansi/6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -1708,8 +1834,8 @@ packages:
engines: {node: '>=6'}
dev: true
- /sucrase/3.20.3:
- resolution: {integrity: sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==}
+ /sucrase/3.29.0:
+ resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==}
engines: {node: '>=8'}
hasBin: true
dependencies:
@@ -1741,35 +1867,35 @@ packages:
hasBin: true
dependencies:
color-support: 1.1.3
- debug: 4.3.3
+ debug: 4.3.4
diff: 4.0.2
escape-string-regexp: 2.0.0
- glob: 7.1.6
- tap-parser: 11.0.1
- tap-yaml: 1.0.0
- unicode-length: 2.0.2
+ glob: 7.2.3
+ tap-parser: 11.0.2
+ tap-yaml: 1.0.2
+ unicode-length: 2.1.0
transitivePeerDependencies:
- supports-color
dev: true
- /tap-parser/11.0.1:
- resolution: {integrity: sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==}
+ /tap-parser/11.0.2:
+ resolution: {integrity: sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==}
engines: {node: '>= 8'}
hasBin: true
dependencies:
events-to-array: 1.1.2
- minipass: 3.1.6
- tap-yaml: 1.0.0
+ minipass: 3.3.6
+ tap-yaml: 1.0.2
dev: true
- /tap-yaml/1.0.0:
- resolution: {integrity: sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==}
+ /tap-yaml/1.0.2:
+ resolution: {integrity: sha512-GegASpuqBnRNdT1U+yuUPZ8rEU64pL35WPBpCISWwff4dErS2/438barz7WFJl4Nzh3Y05tfPidZnH+GaV1wMg==}
dependencies:
yaml: 1.10.2
dev: true
- /tap/16.1.0_typescript@4.5.5:
- resolution: {integrity: sha512-EFERYEEDCLjvsT+B+z/qAVuxh5JPEmtn0aGh1ZT/2BN5nVLm6VbcL9fR/Y2FtsxvHuEC3Q2xLc1n1h7mnWVP9w==}
+ /tap/16.3.2_2dtigtkb225m7ii7q45utxqwgi:
+ resolution: {integrity: sha512-4MWMObR8unbv5gAHHVW9F0MNk3opQMnLusSWvt4KBAnKmkwpBRKIfNF64fimQbcR4y9a7U9ISV7pCldlV3J8Pw==}
engines: {node: '>=12'}
hasBin: true
peerDependencies:
@@ -1791,23 +1917,24 @@ packages:
findit: 2.0.0
foreground-child: 2.0.0
fs-exists-cached: 1.0.0
- glob: 7.1.6
+ glob: 7.2.3
isexe: 2.0.0
- istanbul-lib-processinfo: 2.0.2
- jackspeak: 1.4.1
+ istanbul-lib-processinfo: 2.0.3
+ jackspeak: 1.4.2
libtap: 1.4.0
- minipass: 3.1.6
+ minipass: 3.3.6
mkdirp: 1.0.4
nyc: 15.1.0
opener: 1.5.2
rimraf: 3.0.2
- signal-exit: 3.0.6
+ signal-exit: 3.0.7
source-map-support: 0.5.21
tap-mocha-reporter: 5.0.3
- tap-parser: 11.0.1
- tap-yaml: 1.0.0
+ tap-parser: 11.0.2
+ tap-yaml: 1.0.2
tcompare: 5.0.7
- typescript: 4.5.5
+ ts-node: 10.9.1_7cep2inysldxstbcrxlp3njwym
+ typescript: 4.9.3
which: 2.0.2
transitivePeerDependencies:
- supports-color
@@ -1831,12 +1958,12 @@ packages:
engines: {node: '>=8'}
dependencies:
'@istanbuljs/schema': 0.1.3
- glob: 7.1.6
- minimatch: 3.0.4
+ glob: 7.2.3
+ minimatch: 3.1.2
dev: true
/thenify-all/1.6.0:
- resolution: {integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=}
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
dependencies:
thenify: 3.3.1
@@ -1849,7 +1976,7 @@ packages:
dev: true
/to-fast-properties/2.0.0:
- resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
dev: true
@@ -1861,46 +1988,90 @@ packages:
dev: true
/tr46/0.0.3:
- resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=}
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
+ /tr46/1.0.1:
+ resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+ dependencies:
+ punycode: 2.1.1
+ dev: true
+
/tree-kill/1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
dev: true
/trivial-deferred/1.0.1:
- resolution: {integrity: sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=}
+ resolution: {integrity: sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==}
dev: true
/ts-interface-checker/0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
dev: true
- /tsup/5.11.13_typescript@4.5.5:
- resolution: {integrity: sha512-NVMK01gVmojZn7+iZwxRK1CzW2BIabaVMyEjs7Nm9lm4DrSf7IAqs2F3fg0vT7rH72x1cIBsW9U/TlWrCvHVQQ==}
+ /ts-node/10.9.1_7cep2inysldxstbcrxlp3njwym:
+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.9
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.3
+ '@types/node': 17.0.45
+ acorn: 8.8.1
+ acorn-walk: 8.2.0
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 4.9.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ dev: true
+
+ /tsup/6.5.0_2dtigtkb225m7ii7q45utxqwgi:
+ resolution: {integrity: sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': ^1
+ postcss: ^8.4.12
typescript: ^4.1.0
peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ postcss:
+ optional: true
typescript:
optional: true
dependencies:
- bundle-require: 3.0.4_esbuild@0.14.18
- cac: 6.7.12
+ bundle-require: 3.1.2_esbuild@0.15.15
+ cac: 6.7.14
chokidar: 3.5.3
- debug: 4.3.3
- esbuild: 0.14.18
+ debug: 4.3.4
+ esbuild: 0.15.15
execa: 5.1.1
globby: 11.1.0
joycon: 3.1.1
- postcss-load-config: 3.1.1
+ postcss-load-config: 3.1.4_ts-node@10.9.1
resolve-from: 5.0.0
- rollup: 2.67.0
- source-map: 0.7.3
- sucrase: 3.20.3
+ rollup: 3.4.0
+ source-map: 0.8.0-beta.0
+ sucrase: 3.29.0
tree-kill: 1.2.2
- typescript: 4.5.5
+ typescript: 4.9.3
transitivePeerDependencies:
- supports-color
- ts-node
@@ -1917,38 +2088,63 @@ packages:
is-typedarray: 1.0.0
dev: true
- /typescript/4.5.5:
- resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==}
+ /typescript/4.9.3:
+ resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
- /unicode-length/2.0.2:
- resolution: {integrity: sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==}
+ /unicode-length/2.1.0:
+ resolution: {integrity: sha512-4bV582zTV9Q02RXBxSUMiuN/KHo5w4aTojuKTNT96DIKps/SIawFp7cS5Mu25VuY1AioGXrmYyzKZUzh8OqoUw==}
dependencies:
punycode: 2.1.1
- strip-ansi: 3.0.1
dev: true
- /uuid/3.4.0:
- resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
- deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
+ /update-browserslist-db/1.0.10_browserslist@4.21.4:
+ resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.21.4
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
+ /uuid/8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+ dev: true
+
+ /v8-compile-cache-lib/3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
dev: true
/webidl-conversions/3.0.1:
- resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=}
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
dev: false
+ /webidl-conversions/4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+ dev: true
+
/whatwg-url/5.0.0:
- resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=}
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
dev: false
+ /whatwg-url/7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+ dev: true
+
/which-module/2.0.0:
- resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=}
+ resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
dev: true
/which/2.0.2:
@@ -1978,7 +2174,7 @@ packages:
dev: true
/wrappy/1.0.2:
- resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
/write-file-atomic/3.0.3:
@@ -1986,12 +2182,12 @@ packages:
dependencies:
imurmurhash: 0.1.4
is-typedarray: 1.0.0
- signal-exit: 3.0.6
+ signal-exit: 3.0.7
typedarray-to-buffer: 3.1.5
dev: true
- /ws/8.4.2:
- resolution: {integrity: sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==}
+ /ws/8.11.0:
+ resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -2040,3 +2236,8 @@ packages:
y18n: 4.0.3
yargs-parser: 18.1.3
dev: true
+
+ /yn/3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+ dev: true
diff --git a/src/ScratchSession.ts b/src/ScratchSession.ts
index ff25fe1..79b37eb 100644
--- a/src/ScratchSession.ts
+++ b/src/ScratchSession.ts
@@ -1,14 +1,8 @@
-// manages authentication, and is the main handler of every other function
-import Profile from "./classes/Profile";
-import Project from "./classes/Project";
-import Studio from "./classes/Studio";
-import Forum from "./classes/forums/Forum";
-
import { SessionJSON, UserAgent } from "./Consts";
import fetch from "cross-fetch";
-
+import { createHash } from "node:crypto";
/**
- * Logs into Scratch
+ * Manages a Scratch session.
*/
class ScratchSession {
username: string;
@@ -18,9 +12,9 @@ class ScratchSession {
sessionJSON: SessionJSON;
/**
- * Sets up the ScratchSession to use authenticated functions
- * @param user The username of the user you want to log in to
- * @param pass The password of the user you want to log in to
+ * Sets up the ScratchSession to use authenticated functions.
+ * @param user The username of the user you want to log in to.
+ * @param pass The password of the user you want to log in to.
*/
async init(user: string, pass: string) {
this.username = user;
@@ -76,43 +70,41 @@ class ScratchSession {
}
/**
- * Gets a profile
- * @param username The username of the profile you want to get
- * @returns {Profile} The profile of the user
- */
- getProfile(username: string): Profile {
- return new Profile({ username: username, session: this });
- }
-
- /**
- * Gets a project
- * @param id The project ID
- * @returns {Project} The project
- */
- getProject(id: number): Project {
- return new Project({ id: id, session: this });
- }
-
- /**
- * Gets a studio
- * @param id The studio ID
- * @returns {Studio} The studio
- */
- getStudio(id: number): Studio {
- return new Studio({ id: id, session: this });
- }
-
- /**
- * Gets a forum
- * @param id (optional) The ID of the forum you want to get (for example, 31 for the "Advanced Topics" forum)
- * @returns {Forum} The forum
+ * Uploads a file to assets.scratch.mit.edu.
+ * This can be used for adding images to be used in a forum post or signature.
+ * @param buffer The buffer of the file you want to upload.
+ * @param fileExtension The extension of the file you want to upload, for example "png".
+ * @returns The URL to access the file you have uploaded.
+ * @example
+ * await session.uploadToAssets(fs.readFileSync("photo.png"), "png"); // returns URL to image
*/
- getForum(id?: number): Forum {
- return new Forum({ id: id, session: this });
+ async uploadToAssets(buffer: Buffer, fileExtension: string) {
+ const md5hash = createHash("md5").update(buffer).digest("hex");
+ const upload = await fetch(
+ `https://assets.scratch.mit.edu/${md5hash}.${fileExtension}`,
+ {
+ method: "POST",
+ body: buffer,
+ headers: {
+ Cookie: this.cookieSet,
+ "User-Agent": UserAgent,
+ Referer: "https://scratch.mit.edu/",
+ Host: "assets.scratch.mit.edu",
+ "Cache-Control": "no-cache",
+ Pragma: "no-cache",
+ Accept: "*/*",
+ "Accept-Encoding": "gzip, deflate, br"
+ }
+ }
+ );
+ if (!upload.ok) {
+ throw new Error("Upload failed");
+ }
+ return `https://assets.scratch.mit.edu/${md5hash}.${fileExtension}`;
}
/**
- * Logs out of Scratch
+ * Logs out of Scratch.
*/
async logout() {
if (!this.csrfToken || !this.token) return;
diff --git a/src/classes/CloudConnection.ts b/src/classes/CloudConnection.ts
index 633efa5..ea48764 100644
--- a/src/classes/CloudConnection.ts
+++ b/src/classes/CloudConnection.ts
@@ -4,8 +4,13 @@ import { WebSocket } from "ws";
import { Session } from "../Consts";
import events from "events";
+/**
+ * Class for cloud connections.
+ * @param session The ScratchSession that will be used.
+ * @param id The id of the project to connect to.
+ * @returns {Profile} The profile of the user.
+ */
class CloudConnection extends events.EventEmitter {
- creator: string;
id: number;
session: Session;
server: string;
@@ -15,31 +20,24 @@ class CloudConnection extends events.EventEmitter {
user: string;
method: string;
name: string;
- value: string | number;
+ value: string;
project_id: number;
}> = [];
- variables: object = {};
+ variables: {
+ [name: string]: string;
+ } = {};
disconnected: boolean = false;
- constructor({
- id,
- session,
- server = "wss://clouddata.scratch.mit.edu"
- }: {
- id: number;
- session: Session;
- server?: string;
- }) {
+ constructor(session: Session, id: number) {
super();
this.id = id;
this.session = session;
- this.server = server;
this.connect();
}
private connect() {
this.open = false;
- this.connection = new WebSocket(this.server, {
+ this.connection = new WebSocket("wss://clouddata.scratch.mit.edu", {
headers: {
Cookie: this.session.cookieSet,
Origin: "https://scratch.mit.edu"
@@ -81,7 +79,7 @@ class CloudConnection extends events.EventEmitter {
}
/**
- * Sends a packet through cloud
+ * Sends a packet through cloud.
*/
private send(data) {
this.emit("internal-send", data);
@@ -89,15 +87,15 @@ class CloudConnection extends events.EventEmitter {
}
/**
- * Sets a cloud variable
- * @param variable The variable name to set
- * @param value The value to set the variable to
+ * Sets a cloud variable.
+ * @param variable The variable name to set.
+ * @param value The value to set the variable to.
*/
- setVariable(variable: string, value: string | number) {
+ setVariable(variable: string, value: number | string) {
const varname = variable.startsWith("â ")
? variable.substring(2)
: variable;
- this.variables[`â ${varname}`] = value;
+ this.variables[`â ${varname}`] = value.toString();
if (!this.open) {
this.queue.push({
user: this.session.sessionJSON.user.username,
@@ -118,8 +116,8 @@ class CloudConnection extends events.EventEmitter {
}
/**
- * Gets a cloud variable
- * @param variable The variable name to get
+ * Gets a cloud variable.
+ * @param variable The variable name to get.
* @returns {string} The value of the variable in string format.
*/
getVariable(variable: string): string {
@@ -130,7 +128,7 @@ class CloudConnection extends events.EventEmitter {
}
/**
- * Closes the cloud connection
+ * Closes the cloud connection.
*/
close() {
this.emit("close", null);
diff --git a/src/classes/Profile.ts b/src/classes/Profile.ts
index 711da03..9de6f4a 100644
--- a/src/classes/Profile.ts
+++ b/src/classes/Profile.ts
@@ -38,24 +38,25 @@ interface ProfileComment {
apiID: string;
replies: ProfileCommentReply[];
}
-
+/**
+ * Class for profiles.
+ * @param session The ScratchSession that will be used.
+ * @param username The username of the profile you want to get.
+ */
class Profile {
user: string;
- status: string;
- private scratchUserHTML: string;
session: Session;
- scratchUserAPI: UserAPIResponse;
- constructor({ username, session }: { username: string; session: Session }) {
+ constructor(session: Session, username: string) {
this.user = username;
this.session = session;
}
/**
- * Gets the status of the user
+ * Gets the status of the user.
* Can either be Scratcher, New Scratcher, or Scratch Team.
* @returns {string} The status of the user.
*/
- async getStatus(): Promise<"Scratcher" | "New Scratcher" | "Scratch Team"> {
+ async getStatus() {
const dom = parse(await this.getUserHTML());
return dom.querySelector(".group").innerHTML.trim() as
| "Scratcher"
@@ -64,8 +65,8 @@ class Profile {
}
/**
- * Deletes a comment
- * @param id The comment ID, for example 12345, *not* comment-12345
+ * Deletes a comment.
+ * @param id The comment ID, for example 12345, *not* comment-12345.
*/
async deleteComment(id: string | number) {
const delFetch = await fetch(
@@ -90,46 +91,39 @@ class Profile {
console.log(delFetch.status, await delFetch.text());
throw new Error("Error deleting comment.");
}
- return delFetch;
}
private async getUserHTML() {
- if (!(typeof this.scratchUserHTML === "string")) {
- const scratchUserFetch = await fetch(
- `https://scratch.mit.edu/users/${this.user}`
- );
- if (!scratchUserFetch.ok) {
- throw new Error("Cannot find user.");
- }
- this.scratchUserHTML = await scratchUserFetch.text();
+ const scratchUserFetch = await fetch(
+ `https://scratch.mit.edu/users/${this.user}`
+ );
+ if (!scratchUserFetch.ok) {
+ throw new Error("Cannot find user.");
}
- return this.scratchUserHTML;
+ return await scratchUserFetch.text();
}
/**
- * Gets the API response of the user in the Profile
- * @returns The API response of the user
+ * Gets the API response of the user in the Profile.
+ * @returns The API response of the user.
*/
async getUserAPI() {
- if (typeof this.scratchUserAPI === "undefined") {
- const scratchUserFetch = await fetch(
- `https://api.scratch.mit.edu/users/${this.user}`
- );
- if (!scratchUserFetch.ok) {
- throw new Error("Cannot find user.");
- }
- this.scratchUserAPI = await scratchUserFetch.json();
+ const scratchUserFetch = await fetch(
+ `https://api.scratch.mit.edu/users/${this.user}`
+ );
+ if (!scratchUserFetch.ok) {
+ throw new Error("Cannot find user.");
}
- return this.scratchUserAPI;
+ return await scratchUserFetch.json();
}
/**
- * Gets comments on the user's profile
+ * Gets comments on the user's profile.
* @param page The page to look at.
- * @returns {Array} An array of comments.
- * apiID is used to input into deleteComment
+ * @returns An array of comments.
+ * apiID is used to input into deleteComment.
*/
- async getComments(page: number = 1): Promise {
+ async getComments(page: number = 1) {
const commentFetch = await fetch(
`https://scratch.mit.edu/site-api/comments/user/${this.user}/?page=${page}`
);
diff --git a/src/classes/Project.ts b/src/classes/Project.ts
index cd8fd22..e1320a7 100644
--- a/src/classes/Project.ts
+++ b/src/classes/Project.ts
@@ -19,7 +19,7 @@ interface ProjectAPIResponse {
joined: string;
};
profile: {
- id: null | number; // unsure about this one
+ id: number;
images: {
"90x90": string;
"60x60": string;
@@ -53,6 +53,7 @@ interface ProjectAPIResponse {
parent: null | number;
root: null | number;
};
+ project_token: string;
}
interface ProjectComment {
@@ -87,44 +88,44 @@ interface ProjectCommentReply {
};
reply_count: number;
}
-
+/**
+ * Class for projects.
+ * @param session The ScratchSession that will be used.
+ * @param id The id of the project you want to get.
+ */
class Project {
id: number;
session: Session;
- scratchProjectAPI: ProjectAPIResponse;
- constructor({ id, session }: { id: number; session: Session }) {
+ constructor(session: Session, id: number) {
this.id = id;
this.session = session;
}
/**
- * Gets the api.scratch.mit.edu response of the project
+ * Gets the api.scratch.mit.edu response of the project.
*/
- async getAPIData(): Promise {
- if (typeof this.scratchProjectAPI === "undefined") {
- const apiFetch = await fetch(
- `https://api.scratch.mit.edu/projects/${this.id}`,
- {
- headers: {
- "User-Agent": UserAgent
- }
+ async getAPIData() {
+ const apiFetch = await fetch(
+ `https://api.scratch.mit.edu/projects/${this.id}`,
+ {
+ headers: {
+ "User-Agent": UserAgent
}
- );
- if (!apiFetch.ok) {
- throw new Error("Cannot find project.");
}
- this.scratchProjectAPI = await apiFetch.json();
+ );
+ if (!apiFetch.ok) {
+ throw new Error("Cannot find project.");
}
- return this.scratchProjectAPI;
+ return (await apiFetch.json()) as ProjectAPIResponse;
}
/**
- * Gets comments in the project
- * @param offset The offset of comments
- * @param limit The limit of comments to return
- * @returns The API response
+ * Gets comments in the project.
+ * @param offset The offset of comments.
+ * @param limit The limit of comments to return.
+ * @returns The comments.
*/
- async getComments(offset = 0, limit = 20): Promise {
+ async getComments(offset = 0, limit = 20) {
const apiData = await this.getAPIData();
const commentFetch = await fetch(
`https://api.scratch.mit.edu/users/${apiData.author.username}/projects/${this.id}/comments?offset=${offset}&limit=${limit}`,
@@ -139,21 +140,17 @@ class Project {
`Comments returned status ${commentFetch.status} - ${commentFetch.statusText}`
);
}
- return await commentFetch.json();
+ return (await commentFetch.json()) as ProjectComment[];
}
/**
- * Gets the comment replies to a comment
- * @param offset The offset of comments
- * @param limit The limit of comments to return
- * @param id The id of the comment to get
- * @returns The comment replies
+ * Gets the replies to a comment.
+ * @param offset The offset of comments.
+ * @param limit The limit of comments to return.
+ * @param id The id of the comment to get.
+ * @returns The comment replies.
*/
- async getCommentReplies(
- offset = 0,
- limit = 20,
- id: number | string
- ): Promise {
+ async getCommentReplies(id: number | string, offset = 0, limit = 20) {
const apiData = await this.getAPIData();
const commentFetch = await fetch(
`https://api.scratch.mit.edu/users/${apiData.author.username}/projects/${this.id}/comments/${id}/replies?offset=${offset}&limit=${limit}`,
@@ -168,12 +165,12 @@ class Project {
`Comments returned status ${commentFetch.status} - ${commentFetch.statusText}`
);
}
- return await commentFetch.json();
+ return (await commentFetch.json()) as ProjectCommentReply[];
}
/**
- * Sets the title of the project (requires ownership of the project)
- * @param value The value you want to set the title to
+ * Sets the title of the project (requires ownership of the project).
+ * @param value The value you want to set the title to.
*/
async setTitle(value: string) {
const setFetch = await fetch(
@@ -197,11 +194,10 @@ class Project {
if (!setFetch.ok) {
throw new Error(`Error in setting title. ${setFetch.status}`);
}
- this.scratchProjectAPI = undefined; // this is to reset it
}
/**
- * Sets the instructions of the project (requires ownership of the project)
- * @param value The value you want to set the instructions to
+ * Sets the instructions of the project (requires ownership of the project).
+ * @param value The value you want to set the instructions to.
*/
async setInstructions(value: string) {
const setFetch = await fetch(
@@ -225,12 +221,11 @@ class Project {
if (!setFetch.ok) {
throw new Error(`Error in setting instructions. ${setFetch.status}`);
}
- this.scratchProjectAPI = undefined; // this is to reset it
}
/**
- * Sets the Notes and Credits of the project (requires ownership of the project)
- * @param value The value you want to set the Notes and Credits to
+ * Sets the Notes and Credits of the project (requires ownership of the project).
+ * @param value The value you want to set the Notes and Credits to.
*/
async setNotesAndCredits(value: string) {
const setFetch = await fetch(
@@ -254,11 +249,10 @@ class Project {
if (!setFetch.ok) {
throw new Error(`Error in setting Notes and Credits. ${setFetch.status}`);
}
- this.scratchProjectAPI = undefined; // this is to reset it
}
/**
- * Unshares the project (requires ownership of the project)
+ * Unshares the project (requires ownership of the project).
*/
async unshare() {
const setFetch = await fetch(
@@ -286,7 +280,7 @@ class Project {
}
/**
- * Shares the project (requires ownership of the project)
+ * Shares the project (requires ownership of the project).
*/
async share() {
const setFetch = await fetch(
@@ -315,15 +309,6 @@ class Project {
throw new Error(`Error in sharing. ${setFetch.status}`);
}
}
-
- /**
- * Creates a cloud connection with the project
- * @returns {CloudConnection} The cloud connection for the project
- * TurboWarp support may be added in the future
- */
- createCloudConnection(): CloudConnection {
- return new CloudConnection({ id: this.id, session: this.session });
- }
}
export default Project;
diff --git a/src/classes/Studio.ts b/src/classes/Studio.ts
index 0fee5a9..975cbf3 100644
--- a/src/classes/Studio.ts
+++ b/src/classes/Studio.ts
@@ -39,34 +39,34 @@ interface StudioAPIResponse {
projects: number;
};
}
-
+/**
+ * Class for studios.
+ * @param session The ScratchSession that will be used.
+ * @param id The id of the studio you want to get.
+ */
class Studio {
id: number;
session: Session;
- scratchStudioAPI: StudioAPIResponse;
- constructor({ id, session }: { id: number; session: Session }) {
+ constructor(session: Session, id: number) {
this.id = id;
this.session = session;
}
- async getAPIData(): Promise {
- if (typeof this.scratchStudioAPI === "undefined") {
- const response = await fetch(
- `https://api.scratch.mit.edu/studios/${this.id}/`,
- {
- headers: {
- "User-Agent": UserAgent
- }
+ async getAPIData() {
+ const response = await fetch(
+ `https://api.scratch.mit.edu/studios/${this.id}/`,
+ {
+ headers: {
+ "User-Agent": UserAgent
}
- );
- this.scratchStudioAPI = await response.json();
- }
- return this.scratchStudioAPI;
+ }
+ );
+ return (await response.json()) as StudioAPIResponse;
}
/**
* Sets the title of the studio.
- * @param value The value to set the title to
+ * @param value The value to set the title to.
*/
async setTitle(value: string) {
const setFetch = await fetch(
@@ -86,12 +86,11 @@ class Studio {
if (!setFetch.ok) {
throw new Error(`Could not set title - ${setFetch.statusText}`);
}
- return setFetch;
}
/**
* Sets the description of the studio.
- * @param value The value to set the description to
+ * @param value The value to set the description to.
*/
async setDescription(value: string) {
const setFetch = await fetch(
@@ -111,12 +110,11 @@ class Studio {
if (!setFetch.ok) {
throw new Error(`Could not set description - ${setFetch.statusText}`);
}
- return setFetch;
}
/**
* Invites a curator to the studio.
- * @param username The username of the user to add
+ * @param username The username of the user to add.
*/
async inviteCurator(username: string) {
const inviteFetch = await fetch(
@@ -133,12 +131,11 @@ class Studio {
if (!inviteFetch.ok) {
throw new Error(`Could not invite curator - ${inviteFetch.statusText}`);
}
- return inviteFetch;
}
/**
* Removes a curator from the studio.
- * @param username The username of the user to remove
+ * @param username The username of the user to remove.
*/
async removeCurator(username: string) {
const removeFetch = await fetch(
@@ -155,12 +152,11 @@ class Studio {
if (!removeFetch.ok) {
throw new Error(`Could not remove curator - ${removeFetch.statusText}`);
}
- return removeFetch;
}
/**
* Adds a project to the studio.
- * @param project The project ID to add to the studio
+ * @param project The project ID to add to the studio.
*/
async addProject(project: number) {
const addFetch = await fetch(
@@ -176,12 +172,11 @@ class Studio {
if (!addFetch.ok) {
throw new Error(`Could not add project - ${addFetch.statusText}`);
}
- return addFetch;
}
/**
* Removes a project from the studio.
- * @param project The project ID to remove from the studio
+ * @param project The project ID to remove from the studio.
*/
async removeProject(project: number) {
const removeFetch = await fetch(
@@ -197,19 +192,15 @@ class Studio {
if (!removeFetch.ok) {
throw new Error(`Could not remove project - ${removeFetch.statusText}`);
}
- return removeFetch;
}
/**
* Gets the curators in a studio.
- * @param limit The limit of curators to return
- * @param offset The offset of the curators to return
- * @returns An array of curators
+ * @param limit The limit of curators to return.
+ * @param offset The offset of the curators to return.
+ * @returns An array of curators.
*/
- async getCurators(
- limit: number = 24,
- offset: number = 0
- ): Promise {
+ async getCurators(limit: number = 24, offset: number = 0) {
const getFetch = await fetch(
`https://api.scratch.mit.edu/studios/${this.id}/curators/?limit=${limit}&offset=${offset}`,
{
@@ -221,19 +212,16 @@ class Studio {
if (!getFetch.ok) {
throw new Error(`Could not get curators - ${getFetch.statusText}`);
}
- return await getFetch.json();
+ return (await getFetch.json()) as UserAPIResponse[];
}
/**
* Gets the managers in a studio.
- * @param limit The limit of managers to return
- * @param offset The offset of the managers to return
- * @returns An array of managers
+ * @param limit The limit of managers to return.
+ * @param offset The offset of the managers to return.
+ * @returns An array of managers.
*/
- async getManagers(
- limit: number = 24,
- offset: number = 0
- ): Promise {
+ async getManagers(limit: number = 24, offset: number = 0) {
const getFetch = await fetch(
`https://api.scratch.mit.edu/studios/${this.id}/managers/?limit=${limit}&offset=${offset}`,
{
@@ -245,19 +233,16 @@ class Studio {
if (!getFetch.ok) {
throw new Error(`Could not get managers - ${getFetch.statusText}`);
}
- return await getFetch.json();
+ return (await getFetch.json()) as UserAPIResponse[];
}
/**
* Gets the projects in a studio.
- * @param limit The limit of projects to return
- * @param offset The offset of the projects to return
- * @returns An array of users
+ * @param limit The limit of projects to return.
+ * @param offset The offset of the projects to return.
+ * @returns An array of users.
*/
- async getProjects(
- limit: number = 24,
- offset: number = 0
- ): Promise {
+ async getProjects(limit: number = 24, offset: number = 0) {
const getFetch = await fetch(
`https://api.scratch.mit.edu/studios/${this.id}/projects/?limit=${limit}&offset=${offset}`,
{
@@ -269,7 +254,7 @@ class Studio {
if (!getFetch.ok) {
throw new Error(`Could not get projects - ${getFetch.statusText}`);
}
- return await getFetch.json();
+ return (await getFetch.json()) as OldProjectResponse[];
}
}
diff --git a/src/classes/forums/Forum.ts b/src/classes/forums/Forum.ts
index 2051e48..df71300 100644
--- a/src/classes/forums/Forum.ts
+++ b/src/classes/forums/Forum.ts
@@ -2,18 +2,22 @@ import fetch from "cross-fetch";
import Topic from "./Topic";
import { parse } from "node-html-parser";
import { Session, UserAgent } from "../../Consts";
-
+/**
+ * Class for profiles.
+ * @param session The ScratchSession that will be used.
+ * @param [id] The ID of the forum you want to get.
+ */
class Forum {
id?: number;
session: Session;
- constructor({ id, session }: { id?: number; session: Session }) {
+ constructor(session: Session, id?: number) {
this.id = id;
this.session = session;
}
/**
- * Gets a list of topics
- * @returns An array of topics
+ * Gets a list of topics.
+ * @returns An array of topics.
*/
async getTopics() {
let topics: Topic[] = [];
@@ -55,24 +59,9 @@ class Forum {
return topics;
}
- /**
- * Gets a topic
- *
- * Note: Topic.sticky, Topic.title, and Topic.replyCount give undefined when using this!
- * @param id The ID of the topic
- * @returns {Topic} The topic
- */
- getTopic(id: number): Topic {
- return new Topic({
- id: id,
- session: this.session
- });
- }
-
/**
* Sets the currently logged in user's signature
* @param content The content to set the signature to
- * @returns {Request} The request to set the signature
*/
async setSignature(content: string) {
const editFetch = await fetch(
@@ -93,15 +82,12 @@ class Forum {
method: "POST",
body: `csrfmiddlewaretoken=${
this.session.csrfToken
- }&signature=${encodeURIComponent(content)
- .replace("%20", "+")
- .replace("\n", "\r\n")}&update=`
+ }&signature=${encodeURIComponent(content)}&update=`
}
);
if (!editFetch.ok) {
throw new Error(`Error editing signature - ${editFetch.statusText}`);
}
- return editFetch;
}
}
diff --git a/src/classes/forums/Post.ts b/src/classes/forums/Post.ts
index 548ff44..a82246f 100644
--- a/src/classes/forums/Post.ts
+++ b/src/classes/forums/Post.ts
@@ -35,7 +35,6 @@ class Post {
/**
* Edits the post (requires ownership of the post)
* @param content The new content of the post
- * @returns The API response
*/
async edit(content: string) {
const editFetch = await fetch(
@@ -56,9 +55,7 @@ class Post {
method: "POST",
body: `csrfmiddlewaretoken=${
this.session.csrfToken
- }&body=${encodeURIComponent(content)
- .replace("%20", "+")
- .replace("\n", "\r\n")}`
+ }&body=${encodeURIComponent(content)}`
}
);
if (!editFetch.ok) {
@@ -66,7 +63,6 @@ class Post {
`Error editing post ${this.id} - ${editFetch.statusText}`
);
}
- return editFetch;
}
}
diff --git a/src/classes/forums/Topic.ts b/src/classes/forums/Topic.ts
index 5a1cc4d..2ab4128 100644
--- a/src/classes/forums/Topic.ts
+++ b/src/classes/forums/Topic.ts
@@ -30,8 +30,8 @@ class Topic {
}
/**
- * Gets the posts in the topic
- * @returns An array of posts in the topic
+ * Gets the posts in the topic.
+ * @returns An array of posts in the topic.
*/
async getPosts() {
let posts = [];
@@ -77,8 +77,7 @@ class Topic {
}
/**
- * Follows the topic
- * @returns The request
+ * Follows the topic.
*/
async follow() {
const followFetch = await fetch(
@@ -104,12 +103,10 @@ class Topic {
`Error following topic ${this.id} - ${followFetch.statusText}`
);
}
- return followFetch;
}
/**
- * Unfollows the topic
- * @returns The request
+ * Unfollows the topic.
*/
async unfollow() {
const unfollowFetch = await fetch(
@@ -135,7 +132,6 @@ class Topic {
`Error unfollowing topic ${this.id} - ${unfollowFetch.statusText}`
);
}
- return unfollowFetch;
}
}
export default Topic;
diff --git a/src/index.ts b/src/index.ts
index 8be205b..c036d5c 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,2 +1,6 @@
-import ScratchSession from "./ScratchSession";
-export { ScratchSession };
+export { default as ScratchSession } from "./ScratchSession";
+export { default as Profile } from "./classes/Profile";
+export { default as Studio } from "./classes/Studio";
+export { default as Project } from "./classes/Project";
+export { default as CloudConnection } from "./classes/CloudConnection";
+export { default as Forum } from "./classes/forums/Forum";
diff --git a/tests/profile.spec.js b/tests/profile.spec.ts
similarity index 81%
rename from tests/profile.spec.js
rename to tests/profile.spec.ts
index 31f4b19..ec1080d 100644
--- a/tests/profile.spec.js
+++ b/tests/profile.spec.ts
@@ -1,24 +1,17 @@
import tap from "tap";
-import { ScratchSession } from "../dist/index.js";
+import { ScratchSession, Profile } from "../src";
const session = new ScratchSession();
// basic variables
const username = "-Akroation-";
-const user = session.getProfile(username);
+const user = new Profile(session, username);
tap.test("make sure status is string", async (t) => {
t.type(await user.getStatus(), "string");
t.end();
});
-tap.test("make sure status is not empty", async (t) => {
- if ((await user.getStatus()) === "") {
- throw new Error("Status is empty");
- }
- t.end();
-});
-
// profile comments
const profileComments = await user.getComments();
diff --git a/tests/project.spec.js b/tests/project.spec.ts
similarity index 83%
rename from tests/project.spec.js
rename to tests/project.spec.ts
index 9852fc7..1fe4f68 100644
--- a/tests/project.spec.js
+++ b/tests/project.spec.ts
@@ -1,11 +1,11 @@
import tap from "tap";
-import { ScratchSession } from "../dist/index.js";
+import { ScratchSession, Project } from "../src";
const session = new ScratchSession();
// basic variables
const projectID = 601968190;
-const project = session.getProject(projectID);
+const project = new Project(session, projectID);
const apiData = await project.getAPIData();
const comments = await project.getComments();
@@ -29,7 +29,7 @@ tap.test("make sure project comments are iterable", (t) => {
tap.test("make sure project comment replies work", async (t) => {
const id = comments[0].id;
- const replies = await project.getCommentReplies(0, 20, id);
+ const replies = await project.getCommentReplies(id, 0, 20);
const reply = replies[0];
t.type(reply, "object");
t.end();
diff --git a/tests/studio.spec.js b/tests/studio.spec.ts
similarity index 92%
rename from tests/studio.spec.js
rename to tests/studio.spec.ts
index 7e550e8..3ec3cbf 100644
--- a/tests/studio.spec.js
+++ b/tests/studio.spec.ts
@@ -1,10 +1,10 @@
import tap from "tap";
-import { ScratchSession } from "../dist/index.js";
+import { ScratchSession, Studio } from "../src";
const session = new ScratchSession();
// get studio
-const studio = session.getStudio(30136012);
+const studio = new Studio(session, 30136012);
const apiData = await studio.getAPIData();
// main tests
tap.test("make sure api data has correct types", (t) => {
diff --git a/tsconfig.json b/tsconfig.json
index dd32e4e..528b04b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,6 +3,9 @@
"exclude": ["node_modules", "**/*.spec.ts", "dist"],
"compilerOptions": {
"moduleResolution": "node",
- "allowSyntheticDefaultImports": true
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "module": "es2022",
+ "target": "es2020"
}
}