diff --git a/.templates/lecture.md b/.templates/lecture.md index 2117a476..9401fabe 100644 --- a/.templates/lecture.md +++ b/.templates/lecture.md @@ -10,18 +10,8 @@ description: A brief description of the lecture goes here. - [ ] Write TL;DR - [ ] Create per-file diff between `end` and `start` (use "Compare Folders") -- [Lecture Title](#lecture-title) - - [In this video... (TL;DR)](#in-this-video-tldr) - - [Code at the start of this lecture](#code-at-the-start-of-this-lecture) - - [Code written in this lecture](#code-written-in-this-lecture) - - [Final code at the end of this lecture](#final-code-at-the-end-of-this-lecture) -# Lecture Title - -## In this video... (TL;DR) -## Code at the start of this lecture +# Lecture Title -## Code written in this lecture -## Final code at the end of this lecture diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..9d40bbe8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# How to contribute to this course + +## E-book contributions + +### How to run the e-book + +Clone the repo and navigate to the `docs` folder. + +There, run: + +``` +npm install +``` + +Then you can run the e-book with: + +``` +npm run start +``` + +If you make any changes to the e-book, please keep changes as simple as possible and create a PR with your changes into the `develop` branch. + +If you are making larger changes, please create a Discussion first and let's talk about it! + +### Making changes to projects + +All the finished projects that we cover in the course are in the `projects` folder. Making changes to these projects is done very carefully, especially after recording. + +Please start a Discussion before making any changes, as doing so can make the experience for students confusing (if the videos and e-book are different). diff --git a/docs/docs/03_first_rest_api/01_project_overview/README.md b/docs/docs/03_first_rest_api/01_project_overview/README.md new file mode 100644 index 00000000..67beae7f --- /dev/null +++ b/docs/docs/03_first_rest_api/01_project_overview/README.md @@ -0,0 +1,111 @@ +--- +title: Project Overview +description: A first look at the project we'll build in this section. +--- + +# Overview of your first REST API + +In this section we'll make a simple REST API that allows us to: + +- Create stores, each with a `name` and a list of stocked `items`. +- Create an item within a store, each with a `name` and a `price`. +- Retrieve a list of all stores and their items. +- Given its `name`, retrieve an individual store and all its items. +- Given a store `name`, retrieve only a list of item within it. + +This is how the interaction will go! + +## Create stores + +Request: + +``` +POST /store {"name": "My Store"} +``` + +Response: + +``` +{"name": "My Store", "items": []} +``` + +## Create items + +Request: + +``` +POST /store/My Store/item {"name": "Chair", "price": 175.50} +``` + +Response: + +``` +{"name": "Chair", "price": 175.50} +``` + +## Retrieve all stores and their items + +Request: + +``` +GET /store +``` + +Response: + +``` +{ + "stores": [ + { + "name": "My Store", + "items": [ + { + "name": "Chair", + "price": 175.50 + } + ] + } + ] +} +``` + +## Get a particular store + +Request: + +``` +GET /store/My Store +``` + +Response: + +``` +{ + "name": "My Store", + "items": [ + { + "name": "Chair", + "price": 175.50 + } + ] +} +``` + +## Get only items in a store + +Request: + +``` +GET /store/My Store/item +``` + +Response: + +``` +[ + { + "name": "Chair", + "price": 175.50 + } +] +``` \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/02_getting_set_up/README.md b/docs/docs/03_first_rest_api/02_getting_set_up/README.md new file mode 100644 index 00000000..b6f0ff8d --- /dev/null +++ b/docs/docs/03_first_rest_api/02_getting_set_up/README.md @@ -0,0 +1,36 @@ +--- +title: Getting set up +description: Set up a Flask project and create the Flask app. +--- + +# Getting set up + +Create a virtual environment and activate it. + +``` +python3.10 -m venv .venv +source .venv/bin/activate +``` + +Install Flask. + +``` +pip install flask +``` + +Create a file for the Flask app (I like to call it `app.py`) +Create the Flask app. + +```py title="app.py" +from flask import Flask + +app = Flask(__name__) +``` + +Now you can run this app using the Flask Command-Line Interface (CLI): + +``` +flask run +``` + +But the app doesn't do anything yet! Let's work on our first API endpoint next. \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/03_first_rest_api_endpoint/README.md b/docs/docs/03_first_rest_api/03_first_rest_api_endpoint/README.md new file mode 100644 index 00000000..53ad5a38 --- /dev/null +++ b/docs/docs/03_first_rest_api/03_first_rest_api_endpoint/README.md @@ -0,0 +1,44 @@ +--- +title: Your First REST API Endpoint +description: Learn how to define a REST API endpoint using Flask. +--- + +# Your First REST API Endpoint + +Let's start off by defining where we'll store our data. In most REST APIs, you'd store your data in a database. For now, and for simplicity, we'll store it in a Python list. + +Later on we'll work on making this data dynamic. For now let's use some sample data. + +```py title="app.py" +from flask import Flask + +app = Flask(__name__) + +stores = [{"name": "My Store", "items": [{"name": "my item", "price": 15.99}]}] +``` + +Now that we've got the data stored, we can go ahead and make a Flask route that, when accessed, will return all our data. + +```py title="app.py" +from flask import Flask + +app = Flask(__name__) + +stores = [{"name": "My Store", "items": [{"name": "my item", "price": 15.99}]}] + + +@app.get("/store") +def get_stores(): + return {"stores": stores} +``` + +## Anatomy of a Flask route + +There are two parts to a Flask route: + +- The endpoint decorator +- The function that should run + +The endpoint decorator (`@app.get("/store")`) _registers_ the route's endpoint with Flask. That's the `/store` bit. That way, the Flask app knows that when it receives a request for `/store`, it should run the function. + +The function's job is to do everything that it should, and at the end return _something_. In most REST APIs, we return JSON, but you can return anything that can be represented as text (e.g. XML, HTML, YAML, plain text, or almost anything else). \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/04_what_is_json/README.md b/docs/docs/03_first_rest_api/04_what_is_json/README.md new file mode 100644 index 00000000..cf7a84e7 --- /dev/null +++ b/docs/docs/03_first_rest_api/04_what_is_json/README.md @@ -0,0 +1,71 @@ +--- +title: "What is JSON?" +description: JSON is the way we normally transfer data to and from REST APIs. +--- + +# What is JSON? + +JSON is just a (usually long) string whose contents follow a specific format. + +One example of JSON: + +```json +{ + "key": "value", + "another": 25, + "listic_data": [ + 1, + 3, + 7 + ], + "sub_objects": { + "name": "Rolf", + "age": 25 + } +} +``` + +So at its core, you've got: + +- Strings +- Numbers +- Booleans (`true` or `false`) +- Lists +- Objects (akin to dictionaries in Python) + - Note that objects are not ordered, so the keys could come back in any order. This is not a problem! + +At the top level of a piece of JSON you can have an object or a list. So this is also valid JSON: + +```json +[ + { + "name": "Rolf", + "age": 25 + }, + { + "name": "Anne", + "age": 27 + }, + { + "name": "Adam", + "age": 23 + } +] +``` + +When we return a Python dictionary in a Flask route, Flask automatically turns it into JSON for us, so we don't have to. + +Remember that "turning it into JSON" means two things: + +1. Change Python keywords and values so they match the JSON standard (e.g. `True` to `true`). +2. Turn the whole thing into a single string that our API can return. + +:::tip +Note that JSON can be "prettified" (as the above examples), although usually it is returned by our API "not-prettified": + +```json +[{"name":"Rolf","age":25},{"name":"Anne","age":27},{"name":"Adam","age":23}] +``` + +This removal of newlines and spaces, believe it or not, adds up and can save a lot of bandwidth since there is less data to transfer between the API server and the client. +::: \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/README.md b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/README.md new file mode 100644 index 00000000..ae3dc7c9 --- /dev/null +++ b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/README.md @@ -0,0 +1,79 @@ +--- +title: How to interact with your REST API +description: Use Postman and Insomnia REST Client to interact with your REST API. +--- + +# How to make a request to a REST API + +One of the most important things about any software development is to make sure that our projects work! + +So we need to be able to test our project, run it, and make sure it does what we think it does. + +There are two main ways of doing this: + +- With automated tests. +- With manual, exploratory testing. + +Usually you'd go with exploratory first, and then you'd make automated tests based on your manual tests. + +In this course we won't cover automated testing of your REST API (it's a long topic, and we've got another course on it). + +However, we will cover a lot of things you can do with manual testing. + +There are two tools I use for exploratory testing: Postman and Insomnia. It's up to you which one to use, but if you haven't used either one before, I recommend Insomnia. + +It's a bit easier to get started with, and it's free and open source. + +Start by [downloading Insomnia REST Client](https://insomnia.rest/). + +Once you've opened it, create a Project. I would call it "REST APIs with Flask and Python". + +![Creating the Project for this course](assets/creating-project.png) + +Then, create a new Request Collection. Call it "Stores REST API". + +![Creating the Stores REST API Request Collection](assets/making-request-collection.png) + +In the Request Collection, we can now add requests! Each request has a few parts: + +- A **method**, such as `GET` or `POST`. The method is just a piece of data sent to the server, but _usually_ certain methods are used for certain things. +- The **URL** that you want to request. For our API, this is formed of the "Base URL" (for Flask apps, that's `http://127.0.0.1:5000`), and the endpoint (e.g. `/stores`). +- The **body**, or any data that you want to send in the request. For example, when creating stores or items we might send some data. +- The **headers**, which are other pieces of data with specific names, that the server can use. For example, a header might be sent to help the server understand _who_ is making the request. + +Let's create our first request, `GET /store`. + +Make a new request using the Insomnia interface. First, use the dropdown to start: + +![How to make a request using the Insomnia interface](assets/making-request.png) + +Then enter the request name. Leave the method as `GET`: + +![Enter the request name and method](assets/set-request-name-and-method.png) + +Once you're done, you will see your request in the collection: + +![The request is shown in the collection](assets/before-setting-url.png) + +Next up, enter the URL for your request. Here we will be requesting the `/store` endpoint. Remember to include your Base URL as well: + +![Entering the full URL for the request in Insomnia](assets/url-set.png) + +Once you're done, make sure that your Flask app is running! If it isn't, remember to activate your virtual environment first and then run the app: + +``` +source .venv/bin/activate +flask run +``` + +:::caution +The Flask app will run, by default, on port 5000. If you have another (or the same) app already running, you'll get an error because the port will be "busy". + +If you get an error, read it carefully and make sure that no other Flask app is running on the same port. +::: + +Once your Flask app is running, you can hit "Send" on the Insomnia client, and you should see the JSON come back from your API! + +![Making a request to our API using Insomnia](assets/after-pressing-send.png) + +If that worked and you can see your JSON, you're good to go! You've made your first API request. Now we can continue developing our REST API, remembering to always create new Requests in Insomnia and test our code as we go along! \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/after-pressing-send.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/after-pressing-send.png new file mode 100644 index 00000000..40ec444d Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/after-pressing-send.png differ diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/before-setting-url.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/before-setting-url.png new file mode 100644 index 00000000..778ed6ff Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/before-setting-url.png differ diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/creating-project.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/creating-project.png new file mode 100644 index 00000000..ef3dd13d Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/creating-project.png differ diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/making-request-collection.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/making-request-collection.png new file mode 100644 index 00000000..802fa372 Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/making-request-collection.png differ diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/making-request.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/making-request.png new file mode 100644 index 00000000..1f7da052 Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/making-request.png differ diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/set-request-name-and-method.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/set-request-name-and-method.png new file mode 100644 index 00000000..1318a3ab Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/set-request-name-and-method.png differ diff --git a/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/url-set.png b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/url-set.png new file mode 100644 index 00000000..e57ccb85 Binary files /dev/null and b/docs/docs/03_first_rest_api/05_make_request_to_rest_api/assets/url-set.png differ diff --git a/docs/docs/03_first_rest_api/06_creating_stores/README.md b/docs/docs/03_first_rest_api/06_creating_stores/README.md new file mode 100644 index 00000000..9d2282cd --- /dev/null +++ b/docs/docs/03_first_rest_api/06_creating_stores/README.md @@ -0,0 +1,61 @@ +--- +title: How to create stores +description: Learn how to add data to our REST API. +--- + +# How to create stores in our REST API + +To create a store, we'll receive JSON from our client (in our case, Insomnia, but it could be another Python app, JavaScript, or any other language or tool). + +Our client will send us the name of the store they want to create, and we will add it to the database! + +For this, we will use a `POST` method. `POST` is usually used to receive data from clients and either use it, or create resources with it. + +In order to access the JSON body of a request, we will need to import `request` from `flask`. Your import list should now look like this: + +```py +from flask import Flask, request +``` + +Then, create your endpoint: + +```py title="app.py" +# highlight-start +from flask import Flask, request +# highlight-end + +app = Flask(__name__) + +stores = [{"name": "My Store", "items": [{"name": "my item", "price": 15.99}]}] + + +@app.get("/store") +def get_stores(): + return {"stores": stores} + + +# highlight-start +@app.post("/store") +def create_store(): + request_data = request.get_json() + new_store = {"name": request_data["name"], "items": []} + stores.append(new_store) + return new_store, 201 +# highlight-end +``` + +Here we use `request.get_json()` to retrieve the JSON content of our request. + +Then we create a new dictionary that represents our store. It has a `name` and `items` (which is an empty list). + +Then we append this store to our `stores` list. + +Finally we return the newly created `store`. It's empty, but it serves as a **success message**, to tell our client that we have successfully created what they wanted us to create. + +:::tip Returning a status code +Every response has a status code, which tells the client if the server was successful or not. You already know at least one status code: 404. This means "Not found". + +The most common status code is `200`, which means "OK". That's what Flask returns by default, such as in the `get_stores()` function. + +If we want to return a different status code using Flask, we can put it as the second value returned by an endpoint function. In `create_store()`, we are returning the code `201`, which means "Created". +::: \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/07_creating_items/README.md b/docs/docs/03_first_rest_api/07_creating_items/README.md new file mode 100644 index 00000000..a5132675 --- /dev/null +++ b/docs/docs/03_first_rest_api/07_creating_items/README.md @@ -0,0 +1,98 @@ +--- +title: How to create items in each store +description: A brief description of the lecture goes here. +--- + +# How to create items in our REST API + +Next up, let's work on adding items to a store! + +Here's how that's going to work: + +1. The client will send us the store name where they want their new item to go. +2. They will also send us the name and price of the new item. +3. We'll go through the stores one at a time, until we find the correct one (whose name matches what the user gave us). +4. We'll append a new item dictionary to that store's `items`. + +## URL parameters + +There are a few ways for clients to send us data. So far, we've seen that clients can send us JSON. + +But data can be included in a few other places: + +- The body (as JSON, form data, plain text, or a variety of other formats). +- Inside the URL, part of it can be dynamic. +- At the end of the URL, as _query string arguments_. +- In the request headers. + +For this request, the client will send us data in two of these at the same time: the body and the URL. + +How does a dynamic URL look like? + +Here's a couple examples: + +- `/store/My Store/item` +- `/store/another-store/item` +- `/store/a/item` + +In those three URLs, the "store name" was: + +- `My Store` +- `another-store` +- `a` + +We can use Flask to define dynamic endpoints for our routes, and then we can grab the value that the client put inside the URL. + +This allows us to make URLs that make interacting with them more natural. + +For example, it's nicer to make an item by going to `POST /store/My Store/item`, rather than going to `POST /add-item` and then pass in the store name in the JSON body. + +To create a dynamic endpoint for our route, we do this: + +```py +@app.route("/store//item") +``` + +That makes it so the route function will use a `name` parameter whose value will be what the client put in that part of the URL. + +Without further ado, let's make our route for creating items within a store! + +```py title="app.py" +from flask import Flask, request + +app = Flask(__name__) + +stores = [{"name": "My Store", "items": [{"name": "my item", "price": 15.99}]}] + + +@app.get("/store") +def get_stores(): + return {"stores": stores} + + +@app.post("/store") +def create_store(): + request_data = request.get_json() + new_store = {"name": request_data["name"], "items": []} + stores.append(new_store) + return new_store, 201 + + +# highlight-start +@app.post("/store//item") +def create_item_in_store(name): + request_data = request.get_json() + for store in stores: + if store["name"] == name: + new_item = {"name": request_data["name"], "price": request_data["price"]} + store["items"].append(new_item) + return new_item + return {"message": "Store not found"}, 404 +# highlight-end +``` + +:::tip Not the most efficient way +In this endpoint we're iterating over all stores in our list until we find the right one. This is very inefficient, but we'll look at better ways to do this kind of thing when we look at databases. + +For now, focus on Flask, and don't worry about efficiency of our code! +::: \ No newline at end of file diff --git a/docs/docs/03_first_rest_api/08_return_data_from_rest_api/README.md b/docs/docs/03_first_rest_api/08_return_data_from_rest_api/README.md new file mode 100644 index 00000000..b22bf944 --- /dev/null +++ b/docs/docs/03_first_rest_api/08_return_data_from_rest_api/README.md @@ -0,0 +1,30 @@ +--- +title: Get a specific store and its items +description: How to use Flask to return data from your REST API to your client. +--- + +# How to get a specific store and its items + +The last thing we want to look at in our first REST API is returning data that uses some filtering. + +Using URL parameters, we can select a specific store: + +```py +@app.get("/store/") +def get_store(name): + for store in stores: + if store["name"] == name: + return store + return {"message": "Store not found"}, 404 +``` + +And just as we did when creating an item in a store, you can use the same endpoint (with a `GET` method), to select the items in a store: + +```py +@app.get("/store//item") +def get_item_in_store(name): + for store in stores: + if store["name"] == name: + return {"items": store["items"]} + return {"message": "Store not found"}, 404 +``` diff --git a/docs/docs/03_first_rest_api/09_final_code/README.md b/docs/docs/03_first_rest_api/09_final_code/README.md new file mode 100644 index 00000000..24f49ff5 --- /dev/null +++ b/docs/docs/03_first_rest_api/09_final_code/README.md @@ -0,0 +1,56 @@ +--- +title: Final code of this section +description: Overview of the project we've built and all the code in it. +--- + +# Final code of this section + +Here's everything we've written in this section! + +```py title="app.py" +from flask import Flask, request + +app = Flask(__name__) + +stores = [] + + +@app.post("/store") +def create_store(): + request_data = request.get_json() + new_store = {"name": request_data["name"], "items": []} + stores.append(new_store) + return new_store, 201 + + +@app.get("/store/") +def get_store(name): + for store in stores: + if store["name"] == name: + return store + return {"message": "Store not found"}, 404 + + +@app.get("/store") +def get_stores(): + return {"stores": stores} + + +@app.post("/store//item") +def create_item_in_store(name): + request_data = request.get_json() + for store in stores: + if store["name"] == name: + new_item = {"name": request_data["name"], "price": request_data["price"]} + store["items"].append(new_item) + return new_item + return {"message": "Store not found"}, 404 + + +@app.get("/store//item") +def get_item_in_store(name): + for store in stores: + if store["name"] == name: + return {"items": store["items"]} + return {"message": "Store not found"}, 404 +``` \ No newline at end of file diff --git a/docs/docs-upcoming/03_first_rest_api/README.md b/docs/docs/03_first_rest_api/README.md similarity index 100% rename from docs/docs-upcoming/03_first_rest_api/README.md rename to docs/docs/03_first_rest_api/README.md diff --git a/docs/docs-upcoming/03_first_rest_api/_category_.json b/docs/docs/03_first_rest_api/_category_.json similarity index 100% rename from docs/docs-upcoming/03_first_rest_api/_category_.json rename to docs/docs/03_first_rest_api/_category_.json diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 59ef0c1d..9f81efa8 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -19,7 +19,7 @@ const config = { presets: [ [ - "classic", + "@docusaurus/preset-classic", /** @type {import('@docusaurus/preset-classic').Options} */ ({ docs: { diff --git a/docs/package-lock.json b/docs/package-lock.json index 450cae70..0d7c0983 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,8 +8,8 @@ "name": "website", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/preset-classic": "2.0.0-beta.18", + "@docusaurus/core": "^0.0.0-4999", + "@docusaurus/preset-classic": "^0.0.0-4999", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "prism-react-renderer": "^1.3.1", @@ -1898,63 +1898,61 @@ } }, "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.18.tgz", - "integrity": "sha512-puV7l+0/BPSi07Xmr8tVktfs1BzhC8P5pm6Bs2CfvysCJ4nefNCD1CosPc1PGBWy901KqeeEJ1aoGwj9tU3AUA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-0.0.0-4999.tgz", + "integrity": "sha512-LoZAyzKIIKRux9axoI674ZFv3aPZSHzYcTGWp6+Mn9OYNLgtiZyNdqqvqvEl2mEe9o4R0umu+13mnxnNT9TyfQ==", "dependencies": { - "@babel/core": "^7.17.8", - "@babel/generator": "^7.17.7", + "@babel/core": "^7.17.10", + "@babel/generator": "^7.17.10", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.17.0", - "@babel/preset-env": "^7.16.11", + "@babel/plugin-transform-runtime": "^7.17.10", + "@babel/preset-env": "^7.17.10", "@babel/preset-react": "^7.16.7", "@babel/preset-typescript": "^7.16.7", - "@babel/runtime": "^7.17.8", - "@babel/runtime-corejs3": "^7.17.8", - "@babel/traverse": "^7.17.3", - "@docusaurus/cssnano-preset": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", + "@babel/runtime": "^7.17.9", + "@babel/runtime-corejs3": "^7.17.9", + "@babel/traverse": "^7.17.10", + "@docusaurus/cssnano-preset": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "@slorber/static-site-generator-webpack-plugin": "^4.0.4", "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.4", - "babel-loader": "^8.2.4", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", "babel-plugin-dynamic-import-node": "2.3.0", "boxen": "^6.2.1", "chokidar": "^3.5.3", - "clean-css": "^5.2.4", - "cli-table3": "^0.6.1", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", "combine-promises": "^1.1.0", "commander": "^5.1.0", "copy-webpack-plugin": "^10.2.4", - "core-js": "^3.21.1", + "core-js": "^3.22.5", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^3.4.1", - "cssnano": "^5.1.5", + "cssnano": "^5.1.7", "del": "^6.0.0", "detect-port": "^1.3.0", "escape-html": "^1.0.3", "eta": "^1.12.3", "file-loader": "^6.2.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", - "html-tags": "^3.1.0", + "html-tags": "^3.2.0", "html-webpack-plugin": "^5.5.0", "import-fresh": "^3.3.0", - "is-root": "^2.1.0", "leven": "^3.1.0", "lodash": "^4.17.21", "mini-css-extract-plugin": "^2.6.0", - "nprogress": "^0.2.0", - "postcss": "^8.4.12", + "postcss": "^8.4.13", "postcss-loader": "^6.2.1", "prompts": "^2.4.2", - "react-dev-utils": "^12.0.0", - "react-helmet-async": "^1.2.3", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", "react-router": "^5.2.0", @@ -1962,17 +1960,17 @@ "react-router-dom": "^5.2.0", "remark-admonitions": "^1.2.1", "rtl-detect": "^1.0.4", - "semver": "^7.3.5", + "semver": "^7.3.7", "serve-handler": "^6.1.3", "shelljs": "^0.8.5", "terser-webpack-plugin": "^5.3.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", "wait-on": "^6.0.1", - "webpack": "^5.70.0", + "webpack": "^5.72.1", "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.7.4", + "webpack-dev-server": "^4.9.0", "webpack-merge": "^5.8.0", "webpackbar": "^5.0.2" }, @@ -1988,22 +1986,22 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.18.tgz", - "integrity": "sha512-VxhYmpyx16Wv00W9TUfLVv0NgEK/BwP7pOdWoaiELEIAMV7SO1+6iB8gsFUhtfKZ31I4uPVLMKrCyWWakoFeFA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-0.0.0-4999.tgz", + "integrity": "sha512-rLnqtmSs7MoRYOO1+QnoB0tbpKtX3fA5oVHxdGrOak+F8JgVLbzgBHhvtr1dYN6dmbZuqSmBlbuScavAWeiLlw==", "dependencies": { - "cssnano-preset-advanced": "^5.3.1", - "postcss": "^8.4.12", + "cssnano-preset-advanced": "^5.3.3", + "postcss": "^8.4.13", "postcss-sort-media-queries": "^4.2.1" } }, "node_modules/@docusaurus/logger": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.18.tgz", - "integrity": "sha512-frNe5vhH3mbPmH980Lvzaz45+n1PQl3TkslzWYXQeJOkFX17zUd3e3U7F9kR1+DocmAqHkgAoWuXVcvEoN29fg==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-0.0.0-4999.tgz", + "integrity": "sha512-tpFzK0O2mRTER8Jmi6caI0R5sMXnTdj7e/Lo+vxclv8bWcE2+CFnZTIXNn/+n1euQd4f6vBwubfRnNJyP9uQ9g==", "dependencies": { "chalk": "^4.1.2", - "tslib": "^2.3.1" + "tslib": "^2.4.0" }, "engines": { "node": ">=14" @@ -2074,26 +2072,26 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.18.tgz", - "integrity": "sha512-pOmAQM4Y1jhuZTbEhjh4ilQa74Mh6Q0pMZn1xgIuyYDdqvIOrOlM/H0i34YBn3+WYuwsGim4/X0qynJMLDUA4A==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-0.0.0-4999.tgz", + "integrity": "sha512-Emhdmf20Qi633vUoe2h3g5qFffvuYAahlYEaW6dxMF6T5NPw2Jr41oWdbjsPhSKOX6VRtDX6RmQUaUVVQWzc3A==", "dependencies": { - "@babel/parser": "^7.17.8", - "@babel/traverse": "^7.17.3", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", + "@babel/parser": "^7.17.10", + "@babel/traverse": "^7.17.10", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "image-size": "^1.0.1", "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", + "remark-emoji": "^2.2.0", "stringify-object": "^3.3.0", - "tslib": "^2.3.1", - "unist-util-visit": "^2.0.2", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", "url-loader": "^4.1.1", - "webpack": "^5.70.0" + "webpack": "^5.72.1" }, "engines": { "node": ">=14" @@ -2104,11 +2102,11 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.18.tgz", - "integrity": "sha512-e6mples8FZRyT7QyqidGS6BgkROjM+gljJsdOqoctbtBp+SZ5YDjwRHOmoY7eqEfsQNOaFZvT2hK38ui87hCRA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-0.0.0-4999.tgz", + "integrity": "sha512-mR2qwLff5qv9Nv47XmqnpMuHE9WwTGfeGpYNzLG5j3S4zLWJjAFzWPhudqGe0FCjySkAHHFf2EwikRUnHsJ0xQ==", "dependencies": { - "@docusaurus/types": "2.0.0-beta.18", + "@docusaurus/types": "0.0.0-4999", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", @@ -2120,25 +2118,26 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.18.tgz", - "integrity": "sha512-qzK83DgB+mxklk3PQC2nuTGPQD/8ogw1nXSmaQpyXAyhzcz4CXAZ9Swl/Ee9A/bvPwQGnSHSP3xqIYl8OkFtfw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-0.0.0-4999.tgz", + "integrity": "sha512-1jv2HnBWxc/wp35A7H2BGTzUCmwf9iSxSioNvQe7TS0UpRo2IiO2CRC8a0GKx37gKJBWUl3JBvOYwBW6ZS3yDg==", + "dependencies": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "cheerio": "^1.0.0-rc.10", "feed": "^4.2.2", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "lodash": "^4.17.21", "reading-time": "^1.5.0", "remark-admonitions": "^1.2.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", "utility-types": "^3.10.0", - "webpack": "^5.70.0" + "webpack": "^5.72.1" }, "engines": { "node": ">=14" @@ -2149,24 +2148,24 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.18.tgz", - "integrity": "sha512-z4LFGBJuzn4XQiUA7OEA2SZTqlp+IYVjd3NrCk/ZUfNi1tsTJS36ATkk9Y6d0Nsp7K2kRXqaXPsz4adDgeIU+Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-0.0.0-4999.tgz", + "integrity": "sha512-cv3fXhal2SjUNzHWeWiH6JGczdqKHLZ4ZFpFjNV7IYfoHAvC8pU31RfdLg7X4OxUG32lFDjQk132l/aTHEdmTQ==", + "dependencies": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "combine-promises": "^1.1.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "remark-admonitions": "^1.2.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "utility-types": "^3.10.0", - "webpack": "^5.70.0" + "webpack": "^5.72.1" }, "engines": { "node": ">=14" @@ -2177,18 +2176,18 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.18.tgz", - "integrity": "sha512-CJ2Xeb9hQrMeF4DGywSDVX2TFKsQpc8ZA7czyeBAAbSFsoRyxXPYeSh8aWljqR4F1u/EKGSKy0Shk/D4wumaHw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "fs-extra": "^10.0.1", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-0.0.0-4999.tgz", + "integrity": "sha512-RVPm2pj5HPNyfUO3FFW3Uazrhz8xEiDUcxWkr0FtNh8oG1alTW6KAPotmO9j4t/NAw+fEb4PzyPumfvYoH2H3w==", + "dependencies": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "fs-extra": "^10.1.0", "remark-admonitions": "^1.2.1", - "tslib": "^2.3.1", - "webpack": "^5.70.0" + "tslib": "^2.4.0", + "webpack": "^5.72.1" }, "engines": { "node": ">=14" @@ -2199,15 +2198,15 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.18.tgz", - "integrity": "sha512-inLnLERgG7q0WlVmK6nYGHwVqREz13ivkynmNygEibJZToFRdgnIPW+OwD8QzgC5MpQTJw7+uYjcitpBumy1Gw==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-0.0.0-4999.tgz", + "integrity": "sha512-CDjqbo6nTlc7GoJn5y29iTLbIVREZh6CdXlKZGCb31TDAYOnazugzY73jv7avxBGGJRQDaHs6zKJhQj26+f9QA==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "fs-extra": "^10.0.1", + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", - "tslib": "^2.3.1" + "tslib": "^2.4.0" }, "engines": { "node": ">=14" @@ -2218,13 +2217,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.18.tgz", - "integrity": "sha512-s9dRBWDrZ1uu3wFXPCF7yVLo/+5LUFAeoxpXxzory8gn9GYDt8ZDj80h5DUyCLxiy72OG6bXWNOYS/Vc6cOPXQ==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-0.0.0-4999.tgz", + "integrity": "sha512-YnLbqvebBSTBaBi3zqAR2hmp4thFm0yL84FQS8uMq5K+BKsLDuiA5kzgneldfJ4BEz8L/AFWU+aXFN3Ug5vt9w==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "tslib": "^2.3.1" + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "tslib": "^2.4.0" }, "engines": { "node": ">=14" @@ -2235,13 +2234,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.18.tgz", - "integrity": "sha512-h7vPuLVo/9pHmbFcvb4tCpjg4SxxX4k+nfVDyippR254FM++Z/nA5pRB0WvvIJ3ZTe0ioOb5Wlx2xdzJIBHUNg==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-0.0.0-4999.tgz", + "integrity": "sha512-AP9ioYmaSSLihOPWE5tRsmbL1NY33h9SrN1HQyUqhYm4wV2LTo31+qB+u8kxzts7/lqbcQJpazFc/PtQhj976w==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "tslib": "^2.3.1" + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "tslib": "^2.4.0" }, "engines": { "node": ">=14" @@ -2252,17 +2251,18 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.18.tgz", - "integrity": "sha512-Klonht0Ye3FivdBpS80hkVYNOH+8lL/1rbCPEV92rKhwYdwnIejqhdKct4tUTCl8TYwWiyeUFQqobC/5FNVZPQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "fs-extra": "^10.0.1", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-0.0.0-4999.tgz", + "integrity": "sha512-JyUNqOAPNyJjxLroE3QJQZL0045vKJz4G50MUUGBhgDlwEk+B8K0CTmcyef5jjFuRPSFRtJ23j3N1wzOAWfYOw==", + "dependencies": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "fs-extra": "^10.1.0", "sitemap": "^7.1.1", - "tslib": "^2.3.1" + "tslib": "^2.4.0" }, "engines": { "node": ">=14" @@ -2273,21 +2273,21 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.18.tgz", - "integrity": "sha512-TfDulvFt/vLWr/Yy7O0yXgwHtJhdkZ739bTlFNwEkRMAy8ggi650e52I1I0T79s67llecb4JihgHPW+mwiVkCQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/plugin-content-blog": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/plugin-content-pages": "2.0.0-beta.18", - "@docusaurus/plugin-debug": "2.0.0-beta.18", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.18", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.18", - "@docusaurus/plugin-sitemap": "2.0.0-beta.18", - "@docusaurus/theme-classic": "2.0.0-beta.18", - "@docusaurus/theme-common": "2.0.0-beta.18", - "@docusaurus/theme-search-algolia": "2.0.0-beta.18" + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-0.0.0-4999.tgz", + "integrity": "sha512-adpxuIUW+lsXsNqv69ISJoEoW1B/A0rqavTL+zKfeKHB8LNdFINOPspwE9oJAaIAQuDB/vTjts6wQlyED/EKZg==", + "dependencies": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/plugin-content-blog": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/plugin-content-pages": "0.0.0-4999", + "@docusaurus/plugin-debug": "0.0.0-4999", + "@docusaurus/plugin-google-analytics": "0.0.0-4999", + "@docusaurus/plugin-google-gtag": "0.0.0-4999", + "@docusaurus/plugin-sitemap": "0.0.0-4999", + "@docusaurus/theme-classic": "0.0.0-4999", + "@docusaurus/theme-common": "0.0.0-4999", + "@docusaurus/theme-search-algolia": "0.0.0-4999" }, "engines": { "node": ">=14" @@ -2310,27 +2310,28 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.18.tgz", - "integrity": "sha512-WJWofvSGKC4Luidk0lyUwkLnO3DDynBBHwmt4QrV+aAVWWSOHUjA2mPOF6GLGuzkZd3KfL9EvAfsU0aGE1Hh5g==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/plugin-content-blog": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/plugin-content-pages": "2.0.0-beta.18", - "@docusaurus/theme-common": "2.0.0-beta.18", - "@docusaurus/theme-translations": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-0.0.0-4999.tgz", + "integrity": "sha512-lX4bg8pAJfXzkaEclf5XCVV3/yIZaQy7v6Ow9SxXdxQHLU2gLmOoIdoe5g28YAIMHr7JnJu1J0SFO6cD6OTwsg==", + "dependencies": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/plugin-content-blog": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/plugin-content-pages": "0.0.0-4999", + "@docusaurus/theme-common": "0.0.0-4999", + "@docusaurus/theme-translations": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.38", + "infima": "0.2.0-alpha.39", "lodash": "^4.17.21", - "postcss": "^8.4.12", + "nprogress": "^0.2.0", + "postcss": "^8.4.13", "prism-react-renderer": "^1.3.1", - "prismjs": "^1.27.0", + "prismjs": "^1.28.0", "react-router-dom": "^5.2.0", "rtlcss": "^3.5.0" }, @@ -2343,18 +2344,18 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.18.tgz", - "integrity": "sha512-3pI2Q6ttScDVTDbuUKAx+TdC8wmwZ2hfWk8cyXxksvC9bBHcyzXhSgcK8LTsszn2aANyZ3e3QY2eNSOikTFyng==", - "dependencies": { - "@docusaurus/module-type-aliases": "2.0.0-beta.18", - "@docusaurus/plugin-content-blog": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/plugin-content-pages": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-0.0.0-4999.tgz", + "integrity": "sha512-KsmrS0NxaZkeMBuHe1gZ47KxW/CEuZtN1x1T9Q+BRbCbKcaW26jv2pzLOy80hRtDg5QA6IcxsH52PzJE2aGN7A==", + "dependencies": { + "@docusaurus/module-type-aliases": "0.0.0-4999", + "@docusaurus/plugin-content-blog": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/plugin-content-pages": "0.0.0-4999", "clsx": "^1.1.1", "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "utility-types": "^3.10.0" }, "engines": { @@ -2366,25 +2367,25 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.18.tgz", - "integrity": "sha512-2w97KO/gnjI49WVtYQqENpQ8iO1Sem0yaTxw7/qv/ndlmIAQD0syU4yx6GsA7bTQCOGwKOWWzZSetCgUmTnWgA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-0.0.0-4999.tgz", + "integrity": "sha512-JQ8pLgKMLCEG8tcbK2L2EC7xOuozchxQTlOc1YAJ4olSBbJt06r+8gBwwJ6TQHA1jzc3VYnVLtfU4HLDXA0ZZg==", "dependencies": { "@docsearch/react": "^3.0.0", - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/theme-common": "2.0.0-beta.18", - "@docusaurus/theme-translations": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/theme-common": "0.0.0-4999", + "@docusaurus/theme-translations": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "algoliasearch": "^4.13.0", - "algoliasearch-helper": "^3.7.4", + "algoliasearch-helper": "^3.8.2", "clsx": "^1.1.1", "eta": "^1.12.3", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "lodash": "^4.17.21", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "utility-types": "^3.10.0" }, "engines": { @@ -2396,38 +2397,44 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.18.tgz", - "integrity": "sha512-1uTEUXlKC9nco1Lx9H5eOwzB+LP4yXJG5wfv1PMLE++kJEdZ40IVorlUi3nJnaa9/lJNq5vFvvUDrmeNWsxy/Q==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-0.0.0-4999.tgz", + "integrity": "sha512-gOwkq+UZGzdJHuNbMRQTt2qYWWyWBH6jIVNe4wlzGoNZo6fWza4qpgHJ5QV191/wBSi1gOQ0Nnzo90Pw2n0ySA==", "dependencies": { - "fs-extra": "^10.0.1", - "tslib": "^2.3.1" + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" }, "engines": { "node": ">=14" } }, "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.18.tgz", - "integrity": "sha512-zkuSmPQYP3+z4IjGHlW0nGzSSpY7Sit0Nciu/66zSb5m07TK72t6T1MlpCAn/XijcB9Cq6nenC3kJh66nGsKYg==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-0.0.0-4999.tgz", + "integrity": "sha512-hwoTiIVaHXTeqRlh1dOmCFAO0K193zMNt4WsVqiO6qHkNchdHvdJ9ssumNKF5PwmxD5qHRY9OwlC/LDoa9YPlw==", "dependencies": { "commander": "^5.1.0", + "history": "^4.9.0", "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", "utility-types": "^3.10.0", - "webpack": "^5.70.0", + "webpack": "^5.72.1", "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.18.tgz", - "integrity": "sha512-v2vBmH7xSbPwx3+GB90HgLSQdj+Rh5ELtZWy7M20w907k0ROzDmPQ/8Ke2DK3o5r4pZPGnCrsB3SaYI83AEmAA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-0.0.0-4999.tgz", + "integrity": "sha512-xepIi3L2W7oYTeKpyLaFxih5dcjQqFJ3aTM8IkMmfqc3354k8NAEh08SZsII/5EsnCEMs9L7EfSJToIrrLI2Cw==", "dependencies": { - "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/logger": "0.0.0-4999", "@svgr/webpack": "^6.2.1", "file-loader": "^6.2.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", "globby": "^11.1.0", "gray-matter": "^4.0.3", @@ -2436,35 +2443,35 @@ "micromatch": "^4.0.5", "resolve-pathname": "^3.0.0", "shelljs": "^0.8.5", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "url-loader": "^4.1.1", - "webpack": "^5.70.0" + "webpack": "^5.72.1" }, "engines": { "node": ">=14" } }, "node_modules/@docusaurus/utils-common": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.18.tgz", - "integrity": "sha512-pK83EcOIiKCLGhrTwukZMo5jqd1sqqqhQwOVyxyvg+x9SY/lsnNzScA96OEfm+qQLBwK1OABA7Xc1wfkgkUxvw==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-0.0.0-4999.tgz", + "integrity": "sha512-QDQLKb9Jbt3GB2vZ6ymwD+3xDbqU3P2gxilaeUbWB1mw1CCtBziZKLDo4syCs2i3f8l+tqEft+e2KPkpuq05TQ==", "dependencies": { - "tslib": "^2.3.1" + "tslib": "^2.4.0" }, "engines": { "node": ">=14" } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.18.tgz", - "integrity": "sha512-3aDrXjJJ8Cw2MAYEk5JMNnr8UHPxmVNbPU/PIHFWmWK09nJvs3IQ8nc9+8I30aIjRdIyc/BIOCxgvAcJ4hsxTA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-0.0.0-4999.tgz", + "integrity": "sha512-2JSqhk3RkJzK+4rsAusZlFtZKc1dAVPUWmSvs9AyPamnGdbEMiawj0vXJji/eIkzVgUMy+qYLT+THLa3DLUCsA==", "dependencies": { - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", "joi": "^17.6.0", "js-yaml": "^4.1.0", - "tslib": "^2.3.1" + "tslib": "^2.4.0" }, "engines": { "node": ">=14" @@ -2526,9 +2533,9 @@ } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", - "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", @@ -3171,9 +3178,9 @@ "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, "node_modules/@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "dependencies": { "@types/node": "*" } @@ -3727,14 +3734,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3744,9 +3743,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", - "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", "funding": [ { "type": "opencollective", @@ -3758,8 +3757,8 @@ } ], "dependencies": { - "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001332", + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -4249,9 +4248,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001334", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", - "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==", + "version": "1.0.30001339", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz", + "integrity": "sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ==", "funding": [ { "type": "opencollective", @@ -4795,9 +4794,9 @@ } }, "node_modules/core-js": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.3.tgz", - "integrity": "sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg==", + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz", + "integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5745,9 +5744,9 @@ } }, "node_modules/express": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", - "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -7053,9 +7052,9 @@ } }, "node_modules/infima": { - "version": "0.2.0-alpha.38", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.38.tgz", - "integrity": "sha512-1WsmqSMI5IqzrUx3goq+miJznHBonbE3aoqZ1AR/i/oHhroxNeSV6Awv5VoVfXBhfTzLSnxkHaRI2qpAMYcCzw==", + "version": "0.2.0-alpha.39", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.39.tgz", + "integrity": "sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw==", "engines": { "node": ">=12" } @@ -7497,11 +7496,6 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -8060,17 +8054,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/mrmime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", @@ -8642,31 +8625,10 @@ "node": ">=4" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/postcss": { - "version": "8.4.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", - "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", + "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", "funding": [ { "type": "opencollective", @@ -8678,7 +8640,7 @@ } ], "dependencies": { - "nanoid": "^3.3.1", + "nanoid": "^3.3.3", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -12070,9 +12032,9 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "node_modules/webpack": { - "version": "5.72.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", - "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", + "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -12083,13 +12045,13 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", + "enhanced-resolve": "^5.9.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", @@ -12308,9 +12270,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.8.1.tgz", - "integrity": "sha512-dwld70gkgNJa33czmcj/PlKY/nOy/BimbrgZRaR9vDATBQAYgLzggR0nxDtPLJiLrMgZwbE6RRfJ5vnBBasTyg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz", + "integrity": "sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -12332,7 +12294,6 @@ "ipaddr.js": "^2.0.1", "open": "^8.0.9", "p-retry": "^4.5.0", - "portfinder": "^1.0.28", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", "selfsigned": "^2.0.1", @@ -12407,9 +12368,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "engines": { "node": ">=10.0.0" }, @@ -14111,63 +14072,61 @@ } }, "@docusaurus/core": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.18.tgz", - "integrity": "sha512-puV7l+0/BPSi07Xmr8tVktfs1BzhC8P5pm6Bs2CfvysCJ4nefNCD1CosPc1PGBWy901KqeeEJ1aoGwj9tU3AUA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-0.0.0-4999.tgz", + "integrity": "sha512-LoZAyzKIIKRux9axoI674ZFv3aPZSHzYcTGWp6+Mn9OYNLgtiZyNdqqvqvEl2mEe9o4R0umu+13mnxnNT9TyfQ==", "requires": { - "@babel/core": "^7.17.8", - "@babel/generator": "^7.17.7", + "@babel/core": "^7.17.10", + "@babel/generator": "^7.17.10", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.17.0", - "@babel/preset-env": "^7.16.11", + "@babel/plugin-transform-runtime": "^7.17.10", + "@babel/preset-env": "^7.17.10", "@babel/preset-react": "^7.16.7", "@babel/preset-typescript": "^7.16.7", - "@babel/runtime": "^7.17.8", - "@babel/runtime-corejs3": "^7.17.8", - "@babel/traverse": "^7.17.3", - "@docusaurus/cssnano-preset": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", + "@babel/runtime": "^7.17.9", + "@babel/runtime-corejs3": "^7.17.9", + "@babel/traverse": "^7.17.10", + "@docusaurus/cssnano-preset": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "@slorber/static-site-generator-webpack-plugin": "^4.0.4", "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.4", - "babel-loader": "^8.2.4", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", "babel-plugin-dynamic-import-node": "2.3.0", "boxen": "^6.2.1", "chokidar": "^3.5.3", - "clean-css": "^5.2.4", - "cli-table3": "^0.6.1", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", "combine-promises": "^1.1.0", "commander": "^5.1.0", "copy-webpack-plugin": "^10.2.4", - "core-js": "^3.21.1", + "core-js": "^3.22.5", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^3.4.1", - "cssnano": "^5.1.5", + "cssnano": "^5.1.7", "del": "^6.0.0", "detect-port": "^1.3.0", "escape-html": "^1.0.3", "eta": "^1.12.3", "file-loader": "^6.2.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", - "html-tags": "^3.1.0", + "html-tags": "^3.2.0", "html-webpack-plugin": "^5.5.0", "import-fresh": "^3.3.0", - "is-root": "^2.1.0", "leven": "^3.1.0", "lodash": "^4.17.21", "mini-css-extract-plugin": "^2.6.0", - "nprogress": "^0.2.0", - "postcss": "^8.4.12", + "postcss": "^8.4.13", "postcss-loader": "^6.2.1", "prompts": "^2.4.2", - "react-dev-utils": "^12.0.0", - "react-helmet-async": "^1.2.3", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", "react-router": "^5.2.0", @@ -14175,38 +14134,38 @@ "react-router-dom": "^5.2.0", "remark-admonitions": "^1.2.1", "rtl-detect": "^1.0.4", - "semver": "^7.3.5", + "semver": "^7.3.7", "serve-handler": "^6.1.3", "shelljs": "^0.8.5", "terser-webpack-plugin": "^5.3.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", "wait-on": "^6.0.1", - "webpack": "^5.70.0", + "webpack": "^5.72.1", "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.7.4", + "webpack-dev-server": "^4.9.0", "webpack-merge": "^5.8.0", "webpackbar": "^5.0.2" } }, "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.18.tgz", - "integrity": "sha512-VxhYmpyx16Wv00W9TUfLVv0NgEK/BwP7pOdWoaiELEIAMV7SO1+6iB8gsFUhtfKZ31I4uPVLMKrCyWWakoFeFA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-0.0.0-4999.tgz", + "integrity": "sha512-rLnqtmSs7MoRYOO1+QnoB0tbpKtX3fA5oVHxdGrOak+F8JgVLbzgBHhvtr1dYN6dmbZuqSmBlbuScavAWeiLlw==", "requires": { - "cssnano-preset-advanced": "^5.3.1", - "postcss": "^8.4.12", + "cssnano-preset-advanced": "^5.3.3", + "postcss": "^8.4.13", "postcss-sort-media-queries": "^4.2.1" } }, "@docusaurus/logger": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.18.tgz", - "integrity": "sha512-frNe5vhH3mbPmH980Lvzaz45+n1PQl3TkslzWYXQeJOkFX17zUd3e3U7F9kR1+DocmAqHkgAoWuXVcvEoN29fg==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-0.0.0-4999.tgz", + "integrity": "sha512-tpFzK0O2mRTER8Jmi6caI0R5sMXnTdj7e/Lo+vxclv8bWcE2+CFnZTIXNn/+n1euQd4f6vBwubfRnNJyP9uQ9g==", "requires": { "chalk": "^4.1.2", - "tslib": "^2.3.1" + "tslib": "^2.4.0" }, "dependencies": { "ansi-styles": { @@ -14255,34 +14214,34 @@ } }, "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.18.tgz", - "integrity": "sha512-pOmAQM4Y1jhuZTbEhjh4ilQa74Mh6Q0pMZn1xgIuyYDdqvIOrOlM/H0i34YBn3+WYuwsGim4/X0qynJMLDUA4A==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-0.0.0-4999.tgz", + "integrity": "sha512-Emhdmf20Qi633vUoe2h3g5qFffvuYAahlYEaW6dxMF6T5NPw2Jr41oWdbjsPhSKOX6VRtDX6RmQUaUVVQWzc3A==", "requires": { - "@babel/parser": "^7.17.8", - "@babel/traverse": "^7.17.3", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", + "@babel/parser": "^7.17.10", + "@babel/traverse": "^7.17.10", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "image-size": "^1.0.1", "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", + "remark-emoji": "^2.2.0", "stringify-object": "^3.3.0", - "tslib": "^2.3.1", - "unist-util-visit": "^2.0.2", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", "url-loader": "^4.1.1", - "webpack": "^5.70.0" + "webpack": "^5.72.1" } }, "@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.18.tgz", - "integrity": "sha512-e6mples8FZRyT7QyqidGS6BgkROjM+gljJsdOqoctbtBp+SZ5YDjwRHOmoY7eqEfsQNOaFZvT2hK38ui87hCRA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-0.0.0-4999.tgz", + "integrity": "sha512-mR2qwLff5qv9Nv47XmqnpMuHE9WwTGfeGpYNzLG5j3S4zLWJjAFzWPhudqGe0FCjySkAHHFf2EwikRUnHsJ0xQ==", "requires": { - "@docusaurus/types": "2.0.0-beta.18", + "@docusaurus/types": "0.0.0-4999", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", @@ -14290,125 +14249,127 @@ } }, "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.18.tgz", - "integrity": "sha512-qzK83DgB+mxklk3PQC2nuTGPQD/8ogw1nXSmaQpyXAyhzcz4CXAZ9Swl/Ee9A/bvPwQGnSHSP3xqIYl8OkFtfw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-0.0.0-4999.tgz", + "integrity": "sha512-1jv2HnBWxc/wp35A7H2BGTzUCmwf9iSxSioNvQe7TS0UpRo2IiO2CRC8a0GKx37gKJBWUl3JBvOYwBW6ZS3yDg==", + "requires": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "cheerio": "^1.0.0-rc.10", "feed": "^4.2.2", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "lodash": "^4.17.21", "reading-time": "^1.5.0", "remark-admonitions": "^1.2.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", "utility-types": "^3.10.0", - "webpack": "^5.70.0" + "webpack": "^5.72.1" } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.18.tgz", - "integrity": "sha512-z4LFGBJuzn4XQiUA7OEA2SZTqlp+IYVjd3NrCk/ZUfNi1tsTJS36ATkk9Y6d0Nsp7K2kRXqaXPsz4adDgeIU+Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-0.0.0-4999.tgz", + "integrity": "sha512-cv3fXhal2SjUNzHWeWiH6JGczdqKHLZ4ZFpFjNV7IYfoHAvC8pU31RfdLg7X4OxUG32lFDjQk132l/aTHEdmTQ==", + "requires": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "combine-promises": "^1.1.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "remark-admonitions": "^1.2.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "utility-types": "^3.10.0", - "webpack": "^5.70.0" + "webpack": "^5.72.1" } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.18.tgz", - "integrity": "sha512-CJ2Xeb9hQrMeF4DGywSDVX2TFKsQpc8ZA7czyeBAAbSFsoRyxXPYeSh8aWljqR4F1u/EKGSKy0Shk/D4wumaHw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/mdx-loader": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "fs-extra": "^10.0.1", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-0.0.0-4999.tgz", + "integrity": "sha512-RVPm2pj5HPNyfUO3FFW3Uazrhz8xEiDUcxWkr0FtNh8oG1alTW6KAPotmO9j4t/NAw+fEb4PzyPumfvYoH2H3w==", + "requires": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/mdx-loader": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "fs-extra": "^10.1.0", "remark-admonitions": "^1.2.1", - "tslib": "^2.3.1", - "webpack": "^5.70.0" + "tslib": "^2.4.0", + "webpack": "^5.72.1" } }, "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.18.tgz", - "integrity": "sha512-inLnLERgG7q0WlVmK6nYGHwVqREz13ivkynmNygEibJZToFRdgnIPW+OwD8QzgC5MpQTJw7+uYjcitpBumy1Gw==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-0.0.0-4999.tgz", + "integrity": "sha512-CDjqbo6nTlc7GoJn5y29iTLbIVREZh6CdXlKZGCb31TDAYOnazugzY73jv7avxBGGJRQDaHs6zKJhQj26+f9QA==", "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "fs-extra": "^10.0.1", + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", - "tslib": "^2.3.1" + "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.18.tgz", - "integrity": "sha512-s9dRBWDrZ1uu3wFXPCF7yVLo/+5LUFAeoxpXxzory8gn9GYDt8ZDj80h5DUyCLxiy72OG6bXWNOYS/Vc6cOPXQ==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-0.0.0-4999.tgz", + "integrity": "sha512-YnLbqvebBSTBaBi3zqAR2hmp4thFm0yL84FQS8uMq5K+BKsLDuiA5kzgneldfJ4BEz8L/AFWU+aXFN3Ug5vt9w==", "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "tslib": "^2.3.1" + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.18.tgz", - "integrity": "sha512-h7vPuLVo/9pHmbFcvb4tCpjg4SxxX4k+nfVDyippR254FM++Z/nA5pRB0WvvIJ3ZTe0ioOb5Wlx2xdzJIBHUNg==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-0.0.0-4999.tgz", + "integrity": "sha512-AP9ioYmaSSLihOPWE5tRsmbL1NY33h9SrN1HQyUqhYm4wV2LTo31+qB+u8kxzts7/lqbcQJpazFc/PtQhj976w==", "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "tslib": "^2.3.1" + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "tslib": "^2.4.0" } }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.18.tgz", - "integrity": "sha512-Klonht0Ye3FivdBpS80hkVYNOH+8lL/1rbCPEV92rKhwYdwnIejqhdKct4tUTCl8TYwWiyeUFQqobC/5FNVZPQ==", - "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", - "fs-extra": "^10.0.1", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-0.0.0-4999.tgz", + "integrity": "sha512-JyUNqOAPNyJjxLroE3QJQZL0045vKJz4G50MUUGBhgDlwEk+B8K0CTmcyef5jjFuRPSFRtJ23j3N1wzOAWfYOw==", + "requires": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", + "fs-extra": "^10.1.0", "sitemap": "^7.1.1", - "tslib": "^2.3.1" + "tslib": "^2.4.0" } }, "@docusaurus/preset-classic": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.18.tgz", - "integrity": "sha512-TfDulvFt/vLWr/Yy7O0yXgwHtJhdkZ739bTlFNwEkRMAy8ggi650e52I1I0T79s67llecb4JihgHPW+mwiVkCQ==", - "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/plugin-content-blog": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/plugin-content-pages": "2.0.0-beta.18", - "@docusaurus/plugin-debug": "2.0.0-beta.18", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.18", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.18", - "@docusaurus/plugin-sitemap": "2.0.0-beta.18", - "@docusaurus/theme-classic": "2.0.0-beta.18", - "@docusaurus/theme-common": "2.0.0-beta.18", - "@docusaurus/theme-search-algolia": "2.0.0-beta.18" + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-0.0.0-4999.tgz", + "integrity": "sha512-adpxuIUW+lsXsNqv69ISJoEoW1B/A0rqavTL+zKfeKHB8LNdFINOPspwE9oJAaIAQuDB/vTjts6wQlyED/EKZg==", + "requires": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/plugin-content-blog": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/plugin-content-pages": "0.0.0-4999", + "@docusaurus/plugin-debug": "0.0.0-4999", + "@docusaurus/plugin-google-analytics": "0.0.0-4999", + "@docusaurus/plugin-google-gtag": "0.0.0-4999", + "@docusaurus/plugin-sitemap": "0.0.0-4999", + "@docusaurus/theme-classic": "0.0.0-4999", + "@docusaurus/theme-common": "0.0.0-4999", + "@docusaurus/theme-search-algolia": "0.0.0-4999" } }, "@docusaurus/react-loadable": { @@ -14421,100 +14382,103 @@ } }, "@docusaurus/theme-classic": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.18.tgz", - "integrity": "sha512-WJWofvSGKC4Luidk0lyUwkLnO3DDynBBHwmt4QrV+aAVWWSOHUjA2mPOF6GLGuzkZd3KfL9EvAfsU0aGE1Hh5g==", - "requires": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/plugin-content-blog": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/plugin-content-pages": "2.0.0-beta.18", - "@docusaurus/theme-common": "2.0.0-beta.18", - "@docusaurus/theme-translations": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-common": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-0.0.0-4999.tgz", + "integrity": "sha512-lX4bg8pAJfXzkaEclf5XCVV3/yIZaQy7v6Ow9SxXdxQHLU2gLmOoIdoe5g28YAIMHr7JnJu1J0SFO6cD6OTwsg==", + "requires": { + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/plugin-content-blog": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/plugin-content-pages": "0.0.0-4999", + "@docusaurus/theme-common": "0.0.0-4999", + "@docusaurus/theme-translations": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-common": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.38", + "infima": "0.2.0-alpha.39", "lodash": "^4.17.21", - "postcss": "^8.4.12", + "nprogress": "^0.2.0", + "postcss": "^8.4.13", "prism-react-renderer": "^1.3.1", - "prismjs": "^1.27.0", + "prismjs": "^1.28.0", "react-router-dom": "^5.2.0", "rtlcss": "^3.5.0" } }, "@docusaurus/theme-common": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.18.tgz", - "integrity": "sha512-3pI2Q6ttScDVTDbuUKAx+TdC8wmwZ2hfWk8cyXxksvC9bBHcyzXhSgcK8LTsszn2aANyZ3e3QY2eNSOikTFyng==", - "requires": { - "@docusaurus/module-type-aliases": "2.0.0-beta.18", - "@docusaurus/plugin-content-blog": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/plugin-content-pages": "2.0.0-beta.18", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-0.0.0-4999.tgz", + "integrity": "sha512-KsmrS0NxaZkeMBuHe1gZ47KxW/CEuZtN1x1T9Q+BRbCbKcaW26jv2pzLOy80hRtDg5QA6IcxsH52PzJE2aGN7A==", + "requires": { + "@docusaurus/module-type-aliases": "0.0.0-4999", + "@docusaurus/plugin-content-blog": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/plugin-content-pages": "0.0.0-4999", "clsx": "^1.1.1", "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.1", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "utility-types": "^3.10.0" } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.18.tgz", - "integrity": "sha512-2w97KO/gnjI49WVtYQqENpQ8iO1Sem0yaTxw7/qv/ndlmIAQD0syU4yx6GsA7bTQCOGwKOWWzZSetCgUmTnWgA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-0.0.0-4999.tgz", + "integrity": "sha512-JQ8pLgKMLCEG8tcbK2L2EC7xOuozchxQTlOc1YAJ4olSBbJt06r+8gBwwJ6TQHA1jzc3VYnVLtfU4HLDXA0ZZg==", "requires": { "@docsearch/react": "^3.0.0", - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/plugin-content-docs": "2.0.0-beta.18", - "@docusaurus/theme-common": "2.0.0-beta.18", - "@docusaurus/theme-translations": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", - "@docusaurus/utils-validation": "2.0.0-beta.18", + "@docusaurus/core": "0.0.0-4999", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/plugin-content-docs": "0.0.0-4999", + "@docusaurus/theme-common": "0.0.0-4999", + "@docusaurus/theme-translations": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", + "@docusaurus/utils-validation": "0.0.0-4999", "algoliasearch": "^4.13.0", - "algoliasearch-helper": "^3.7.4", + "algoliasearch-helper": "^3.8.2", "clsx": "^1.1.1", "eta": "^1.12.3", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "lodash": "^4.17.21", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "utility-types": "^3.10.0" } }, "@docusaurus/theme-translations": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.18.tgz", - "integrity": "sha512-1uTEUXlKC9nco1Lx9H5eOwzB+LP4yXJG5wfv1PMLE++kJEdZ40IVorlUi3nJnaa9/lJNq5vFvvUDrmeNWsxy/Q==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-0.0.0-4999.tgz", + "integrity": "sha512-gOwkq+UZGzdJHuNbMRQTt2qYWWyWBH6jIVNe4wlzGoNZo6fWza4qpgHJ5QV191/wBSi1gOQ0Nnzo90Pw2n0ySA==", "requires": { - "fs-extra": "^10.0.1", - "tslib": "^2.3.1" + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" } }, "@docusaurus/types": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.18.tgz", - "integrity": "sha512-zkuSmPQYP3+z4IjGHlW0nGzSSpY7Sit0Nciu/66zSb5m07TK72t6T1MlpCAn/XijcB9Cq6nenC3kJh66nGsKYg==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-0.0.0-4999.tgz", + "integrity": "sha512-hwoTiIVaHXTeqRlh1dOmCFAO0K193zMNt4WsVqiO6qHkNchdHvdJ9ssumNKF5PwmxD5qHRY9OwlC/LDoa9YPlw==", "requires": { "commander": "^5.1.0", + "history": "^4.9.0", "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", "utility-types": "^3.10.0", - "webpack": "^5.70.0", + "webpack": "^5.72.1", "webpack-merge": "^5.8.0" } }, "@docusaurus/utils": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.18.tgz", - "integrity": "sha512-v2vBmH7xSbPwx3+GB90HgLSQdj+Rh5ELtZWy7M20w907k0ROzDmPQ/8Ke2DK3o5r4pZPGnCrsB3SaYI83AEmAA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-0.0.0-4999.tgz", + "integrity": "sha512-xepIi3L2W7oYTeKpyLaFxih5dcjQqFJ3aTM8IkMmfqc3354k8NAEh08SZsII/5EsnCEMs9L7EfSJToIrrLI2Cw==", "requires": { - "@docusaurus/logger": "2.0.0-beta.18", + "@docusaurus/logger": "0.0.0-4999", "@svgr/webpack": "^6.2.1", "file-loader": "^6.2.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", "globby": "^11.1.0", "gray-matter": "^4.0.3", @@ -14523,29 +14487,29 @@ "micromatch": "^4.0.5", "resolve-pathname": "^3.0.0", "shelljs": "^0.8.5", - "tslib": "^2.3.1", + "tslib": "^2.4.0", "url-loader": "^4.1.1", - "webpack": "^5.70.0" + "webpack": "^5.72.1" } }, "@docusaurus/utils-common": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.18.tgz", - "integrity": "sha512-pK83EcOIiKCLGhrTwukZMo5jqd1sqqqhQwOVyxyvg+x9SY/lsnNzScA96OEfm+qQLBwK1OABA7Xc1wfkgkUxvw==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-0.0.0-4999.tgz", + "integrity": "sha512-QDQLKb9Jbt3GB2vZ6ymwD+3xDbqU3P2gxilaeUbWB1mw1CCtBziZKLDo4syCs2i3f8l+tqEft+e2KPkpuq05TQ==", "requires": { - "tslib": "^2.3.1" + "tslib": "^2.4.0" } }, "@docusaurus/utils-validation": { - "version": "2.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.18.tgz", - "integrity": "sha512-3aDrXjJJ8Cw2MAYEk5JMNnr8UHPxmVNbPU/PIHFWmWK09nJvs3IQ8nc9+8I30aIjRdIyc/BIOCxgvAcJ4hsxTA==", + "version": "0.0.0-4999", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-0.0.0-4999.tgz", + "integrity": "sha512-2JSqhk3RkJzK+4rsAusZlFtZKc1dAVPUWmSvs9AyPamnGdbEMiawj0vXJji/eIkzVgUMy+qYLT+THLa3DLUCsA==", "requires": { - "@docusaurus/logger": "2.0.0-beta.18", - "@docusaurus/utils": "2.0.0-beta.18", + "@docusaurus/logger": "0.0.0-4999", + "@docusaurus/utils": "0.0.0-4999", "joi": "^17.6.0", "js-yaml": "^4.1.0", - "tslib": "^2.3.1" + "tslib": "^2.4.0" } }, "@hapi/hoek": { @@ -14595,9 +14559,9 @@ } }, "@leichtgewicht/ip-codec": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", - "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@mdx-js/mdx": { "version": "1.6.22", @@ -15067,9 +15031,9 @@ "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, "@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "requires": { "@types/node": "*" } @@ -15561,26 +15525,18 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "autoprefixer": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", - "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", "requires": { - "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001332", + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -15947,9 +15903,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001334", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", - "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==" + "version": "1.0.30001339", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz", + "integrity": "sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ==" }, "ccount": { "version": "1.1.0", @@ -16334,9 +16290,9 @@ } }, "core-js": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.3.tgz", - "integrity": "sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg==" + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz", + "integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==" }, "core-js-compat": { "version": "3.22.3", @@ -17003,9 +16959,9 @@ } }, "express": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", - "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -17962,9 +17918,9 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infima": { - "version": "0.2.0-alpha.38", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.38.tgz", - "integrity": "sha512-1WsmqSMI5IqzrUx3goq+miJznHBonbE3aoqZ1AR/i/oHhroxNeSV6Awv5VoVfXBhfTzLSnxkHaRI2qpAMYcCzw==" + "version": "0.2.0-alpha.39", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.39.tgz", + "integrity": "sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw==" }, "inflight": { "version": "1.0.6", @@ -18259,11 +18215,6 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -18689,14 +18640,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, "mrmime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", @@ -19107,32 +19050,12 @@ } } }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "postcss": { - "version": "8.4.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", - "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", + "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", "requires": { - "nanoid": "^3.3.1", + "nanoid": "^3.3.3", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -21543,9 +21466,9 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "webpack": { - "version": "5.72.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", - "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", + "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -21556,13 +21479,13 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.2", + "enhanced-resolve": "^5.9.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", @@ -21737,9 +21660,9 @@ } }, "webpack-dev-server": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.8.1.tgz", - "integrity": "sha512-dwld70gkgNJa33czmcj/PlKY/nOy/BimbrgZRaR9vDATBQAYgLzggR0nxDtPLJiLrMgZwbE6RRfJ5vnBBasTyg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz", + "integrity": "sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==", "requires": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -21761,7 +21684,6 @@ "ipaddr.js": "^2.0.1", "open": "^8.0.9", "p-retry": "^4.5.0", - "portfinder": "^1.0.28", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", "selfsigned": "^2.0.1", @@ -21808,9 +21730,9 @@ } }, "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "requires": {} } } diff --git a/docs/package.json b/docs/package.json index 2a644e89..a499102b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,8 +14,8 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/preset-classic": "2.0.0-beta.18", + "@docusaurus/core": "^0.0.0-4999", + "@docusaurus/preset-classic": "^0.0.0-4999", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "prism-react-renderer": "^1.3.1", diff --git a/project/01-first-rest-api/app.py b/project/01-first-rest-api/app.py new file mode 100644 index 00000000..9276b302 --- /dev/null +++ b/project/01-first-rest-api/app.py @@ -0,0 +1,45 @@ +from flask import Flask, request + +app = Flask(__name__) + +stores = [{"name": "My Store", "items": [{"name": "my item", "price": 15.99}]}] + + +@app.post("/store") +def create_store(): + request_data = request.get_json() + new_store = {"name": request_data["name"], "items": []} + stores.append(new_store) + return new_store, 201 + + +@app.get("/store/") +def get_store(name): + for store in stores: + if store["name"] == name: + return store + return {"message": "Store not found"}, 404 + + +@app.get("/store") +def get_stores(): + return {"stores": stores} + + +@app.post("/store//item") +def create_item_in_store(name): + request_data = request.get_json() + for store in stores: + if store["name"] == name: + new_item = {"name": request_data["name"], "price": request_data["price"]} + store["items"].append(new_item) + return new_item + return {"message": "Store not found"}, 404 + + +@app.get("/store//item") +def get_item_in_store(name): + for store in stores: + if store["name"] == name: + return {"items": store["items"]} + return {"message": "Store not found"}, 404