diff --git a/docs/10-intro.mdx b/docs/0-intro.mdx similarity index 100% rename from docs/10-intro.mdx rename to docs/0-intro.mdx diff --git a/docs/10-dev-env/1-dev-env-setup.mdx b/docs/10-dev-env/1-dev-env-setup.mdx new file mode 100644 index 0000000..23905e8 --- /dev/null +++ b/docs/10-dev-env/1-dev-env-setup.mdx @@ -0,0 +1,80 @@ +import Screenshot from "@site/src/components/Screenshot"; + +# 👐 Setup + +## GitHub Codespaces + +You will be working in GitHub Codespaces throughout this lab. A codespace is a cloud-hosted, containerized development environment that comes pre-configured with all the tools you need to run this lab. + +Navigate to [this](https://github.com/codespaces/new/mongodb-developer/rm-lab?quickstart=1) link. You will be prompted to sign into GitHub if you haven't already. Once signed in, click the **Create new codespace** button to create a new codespace. + + + +Let it run for a few minutes as it prepares a Docker container with all the required libraries and a MongoDB cluster. + +**That's it! You're ready for the lab!** + +:::caution + During the lab, we will use GitHub Codespaces. The following instructions are here just in case you can't use Codespaces or if you really, really, really want a local installation. +::: + + +
+ 🦹 __Run this lab locally__ + # + # 1. MongoDB Database + + As we'll be importing data from a Relational Database into MongoDB, you'll need to have a MongoDB database. You have a + few options to set up this database. + + ## 🦸 Option A: New MongoDB Atlas cluster + + The easiest way to run MongoDB is to use MongoDB Atlas, our cloud-hosted database offering. + You can set a MongoDB Atlas account and a free forever M0 Cluster. + + To get yours, follow the instructions on the [Intro Lab:](https://mongodb-developer.github.io/intro-lab/docs/mongodb-atlas/what-is-mongodb) + - [Create your Account](https://mongodb-developer.github.io/intro-lab/docs/mongodb-atlas/create-account) + - [Deploy a Database Cluster](https://mongodb-developer.github.io/intro-lab/docs/mongodb-atlas/create-cluster) + + Be sure to [open up the cluster to allow connections from your local computer](https://www.mongodb.com/docs/guides/atlas/network-connections/#overview), and configure a database user with the readWriteAnyDatabase role. + + + ## 🦸 Option B: Use an existing cluster + + If you have an existing MongoDB Atlas, Enterprise or Community cluster, you can use it as the migration target. Make sure you + know the URI for the cluster, and have a database user with the readWriteAnyDatabase role. + + ## 🦸 Option C: Run a MongoDB container using Docker + + + If you don't have an existing MongoDB server but have Docker installed, you can easily load a container pre-configured with + MongoDB by running the following command: + + ``` + docker run -p 27017:27017 mongo + ``` + + This will launch an empty MongoDB community cluster on localhost:27017, suitable to use for this lab. + You can connect with no username or password. Since this command does not use Docker volumes, any data will be lost when the container is stopped. + + + # 2. MongoDB Relational Migrator + + Download and install MongoDB Relational Migrator. + + - Go to the [MongoDB Relational Migrator downloads page](https://www.mongodb.com/try/download/relational-migrator), select your OS and download it + - Install the MongoDB Relational Migrator + - Start it + - It should open a browser at the address http://127.0.0.1:8278/ + + + + --- + + There are more advanced ways to install the MongoDB Relational Migrator. You can check them out in [the installation docs page](https://www.mongodb.com/docs/relational-migrator/installation/). These won't be covered during this Lab. + +
+ + + + diff --git a/docs/10-dev-env/10-postgres.mdx b/docs/10-dev-env/10-postgres.mdx new file mode 100644 index 0000000..6f8e02e --- /dev/null +++ b/docs/10-dev-env/10-postgres.mdx @@ -0,0 +1,52 @@ +--- +sidebar_position: 20 +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# PostgreSQL Database + +In this lab you will be migrating data from a PostgreSQL relational database. + +## Use a pre-configured database + +If you are participating in an instructor-led lab, they may have already set up this database for you. Ask your instructor for the connection URI and credentials. + +:::caution +In an intructor-led lab you will use the provisioned PostgreSQL database, no need to do anything else. +::: + +
+ 🦹 __Other database options__ + + ## 🦸 Option A: Load the schema and data into your own PostgreSQL server + + If you already have a PostgreSQL server set up, you can import the schema and data used in this lab. Download the file + [1-library-schema-and-data.sql](https://github.com/mongodb-developer/relational-migrator-lab/blob/main/docker/sample-postgres-library/init/1-library-schema-and-data.sql) + and load it using [psql](https://www.postgresql.org/docs/10/app-psql.html) or [pgAdmin](https://www.pgadmin.org/download/). + + ## 🦸 Option B: Run a PostgreSQL container using Docker + + If you don't have an existing PostgreSQL server but have Docker installed, you can easily load a container pre-configured with + PostgreSQL and the sample database: + + 1. Clone or download the code from this lab's [Github repo](https://github.com/mongodb-developer/relational-migrator-lab). + 2. Open a terminal window and navigate to the repo root. + 3. Build the Docker image by running the command: + ```sh + docker build -f ./docker/sample-postgres-library/Dockerfile -t sample-postgres-library . + ``` + 4. Start the Docker container by running the command: + ``` + docker run -p 5432:5432 sample-postgres-library + ``` + The PostgreSQL server can be accessed at localhost:5432 with a username of `postgres` and a password of `postgres`. + + ## 🦸 Option C: Load a SQL file + Choose this option if you just want a quick hands-on experience and you don't need to run an actual migration. + Download the file [library-schema.sql](https://github.com/mongodb-developer/relational-migrator-lab/blob/main/resource/library-schema.sql) + and upload this file to the Relational Migrator later, at the [create a project](/docs/category/-create-a-project) step. + + This is just the schema of the database, without actual data, so, you will not be able to perform an actual migration since you do not have a source database. But you can model the schema and play around with the Relational Migrator. + +
\ No newline at end of file diff --git a/docs/10-dev-env/_category_.json b/docs/10-dev-env/_category_.json new file mode 100644 index 0000000..1a878dc --- /dev/null +++ b/docs/10-dev-env/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Dev Environment", + "position": 10, + "link": { + "type": "generated-index", + "description": "Setup the dev environment and prerequisites" + } +} \ No newline at end of file diff --git a/docs/20-prerequisites/10-postgres.mdx b/docs/20-prerequisites/10-postgres.mdx deleted file mode 100644 index 6d12da7..0000000 --- a/docs/20-prerequisites/10-postgres.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 20 ---- - -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# 👐 PostgreSQL Database - -In this lab you will be migrating data from a PostgreSQL relational database. You have a few options to set up this database. __Choose just one option for your PostgreSQL database__. - -## 👐 Option 1: Use a pre-configured database - -If you are participating in an instructor-led lab, they may have already set up this database for you. Ask your instructor for the connection URI and credentials. - -:::info -In an intructor-led lab you will use the provisioned PostgreSQL database, no need to do anything else. -::: - -## 🦸 Option 2: Load the schema and data into your own PostgreSQL server - -If you already have a PostgreSQL server set up, you can import the schema and data used in this lab. Download the file -[1-library-schema-and-data.sql](https://github.com/mongodb-developer/relational-migrator-lab/blob/main/docker/sample-postgres-library/init/1-library-schema-and-data.sql) - and load it using [psql](https://www.postgresql.org/docs/10/app-psql.html) or [pgAdmin](https://www.pgadmin.org/download/). - -## 🦸 Option 3: Run a PostgreSQL container using Docker - -If you don't have an existing PostgreSQL server but have Docker installed, you can easily load a container pre-configured with -PostgreSQL and the sample database: - -1. Clone or download the code from this lab's [Github repo](https://github.com/mongodb-developer/relational-migrator-lab). -2. Open a terminal window and navigate to the repo root. -3. Build the Docker image by running the command: -```sh -docker build -f ./docker/sample-postgres-library/Dockerfile -t sample-postgres-library . -``` -4. Start the Docker container by running the command: -``` -docker run -p 5432:5432 sample-postgres-library -``` -The PostgreSQL server can be accessed at localhost:5432 with a username of `postgres` and a password of `postgres`. - -## 🦸 Option 4: Load a SQL file -Choose this option if you just want a quick hands-on experience and you don't need to run an actual migration. -Download the file [library-schema.sql](https://github.com/mongodb-developer/relational-migrator-lab/blob/main/resource/library-schema.sql) -and upload this file to the Relational Migrator later, at the [create a project](/docs/category/-create-a-project) step. - -This is just the schema of the database, without actual data, so, you will not be able to perform an actual migration since you do not have a source database. But you can model the schema and play around with the Relational Migrator. diff --git a/docs/20-prerequisites/20-mongodb.mdx b/docs/20-prerequisites/20-mongodb.mdx deleted file mode 100644 index 5a11b98..0000000 --- a/docs/20-prerequisites/20-mongodb.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 20 ---- - -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# 👐 MongoDB Database - -As we'll be importing data from a Relational Database into MongoDB, you'll need to have a MongoDB database. You have a -few options to set up this database. - -## 👐 Option 1: New MongoDB Atlas cluster - -The easiest way to run MongoDB is to use MongoDB Atlas, our cloud-hosted database offering. -You can set a MongoDB Atlas account and a free forever M0 Cluster. - -To get yours, follow the instructions on the [Intro Lab:](https://mongodb-developer.github.io/intro-lab/docs/mongodb-atlas/what-is-mongodb) -- [Create your Account](https://mongodb-developer.github.io/intro-lab/docs/mongodb-atlas/create-account) -- [Deploy a Database Cluster](https://mongodb-developer.github.io/intro-lab/docs/mongodb-atlas/create-cluster) - -Be sure to [open up the cluster to allow connections from your local computer](https://www.mongodb.com/docs/guides/atlas/network-connections/#overview), and configure a database user with the readWriteAnyDatabase role. - -:::info -In an intructor-led lab you will use an Atlas Cluster -::: - -## 🦸 Option 2: Use an existing cluster - -If you have an existing MongoDB Atlas, Enterprise or Community cluster, you can use it as the migration target. Make sure you -know the URI for the cluster, and have a database user with the readWriteAnyDatabase role. - -## 🦸 Option 3: Run a MongoDB container using Docker - - -If you don't have an existing MongoDB server but have Docker installed, you can easily load a container pre-configured with -MongoDB by running the following command: - -``` -docker run -p 27017:27017 mongo -``` - -This will launch an empty MongoDB community cluster on localhost:27017, suitable to use for this lab. -You can connect with no username or password. Since this command does not use Docker volumes, any data will be lost when the container is stopped. diff --git a/docs/20-prerequisites/30-relational-migrator.mdx b/docs/20-prerequisites/30-relational-migrator.mdx deleted file mode 100644 index 9ca41cd..0000000 --- a/docs/20-prerequisites/30-relational-migrator.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 20 ---- - -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# 👐 MongoDB Relational Migrator - -Download and install MongoDB Relational Migrator. - -- Go to the [MongoDB Relational Migrator downloads page](https://www.mongodb.com/try/download/relational-migrator), select your OS and download it -- Install the MongoDB Relational Migrator -- Start it -- It should open a browser at the address http://127.0.0.1:8278/ - - - ---- - -:::info -There are more advanced ways to install the MongoDB Relational Migrator. You can check them out in [the installation docs page](https://www.mongodb.com/docs/relational-migrator/installation/). These won't be covered during this Lab. -::: \ No newline at end of file diff --git a/docs/20-prerequisites/_category_.json b/docs/20-prerequisites/_category_.json deleted file mode 100644 index fad9c17..0000000 --- a/docs/20-prerequisites/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "👐 Prerequisites", - "link": { - "type": "generated-index", - "description": "Prerare everything you need to complete this Lab." - } -} \ No newline at end of file diff --git a/docs/50-create-project/50-create-new-project.mdx b/docs/50-create-project/50-create-new-project.mdx index 4dabc38..6155509 100644 --- a/docs/50-create-project/50-create-new-project.mdx +++ b/docs/50-create-project/50-create-new-project.mdx @@ -2,8 +2,7 @@ import Screenshot from "@site/src/components/Screenshot"; # 👐 Creating a New Project -Ensure the Relational Migrator is installed and running (usually at http://127.0.0.1:8278/). - +Ensure the Relational Migrator is installed and running (in your codespace or locally at http://127.0.0.1:8278/). ## Click on New Project diff --git a/docusaurus.config.js b/docusaurus.config.js index bbb76df..c261bf5 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -84,7 +84,7 @@ const config = { title: `${title}`, tagline: `${tagLine}`, url: `https://${workshopName}.github.io`, - baseUrl: `/${workshopName}/`, + baseUrl: `/`, projectName: `${organizationName}.github.io`, organizationName: `${organizationName}`, trailingSlash: false, diff --git a/package-lock.json b/package-lock.json index 74e613b..80813d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -272,13 +272,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -549,17 +550,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -586,23 +589,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -1776,36 +1781,35 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.7.tgz", - "integrity": "sha512-55gRV8vGrCIYZnaQHQrD92Lo/hYE3Sj5tmbuf0hhHR7sj2CWhEhHU89hbq+UVDXvFG1zUVXJhUkEq1eAfqXtFw==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.6.tgz", + "integrity": "sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==", + "license": "MIT", "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" + "core-js-pure": "^3.30.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1829,12 +1833,13 @@ } }, "node_modules/@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -8548,9 +8553,10 @@ } }, "node_modules/dompurify": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.2.tgz", - "integrity": "sha512-YMM+erhdZ2nkZ4fTNRTSI94mb7VG7uVF5vj5Zde7tImgnhZE3R6YW/IACGIHb2ux+QkEXMhe591N+5jWOmL4Zw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", + "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -8918,9 +8924,10 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.2.tgz", - "integrity": "sha512-hYH1aSvQI63Cvq3T3loaem6LW4u72F187zW4FHpTrReJSm6W66vYTFNO1vH/chmcOulp1HlAj1pxn8Ag0oXI5Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz", + "integrity": "sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==", + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" }, @@ -10747,9 +10754,10 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -10831,9 +10839,10 @@ } }, "node_modules/image-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.0.tgz", - "integrity": "sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", "dependencies": { "queue": "6.0.2" }, @@ -11400,13 +11409,14 @@ } }, "node_modules/katex": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz", - "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==", + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], + "license": "MIT", "dependencies": { "commander": "^8.3.0" }, @@ -16333,9 +16343,10 @@ } }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", "engines": { "node": ">=6" } @@ -16912,11 +16923,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", @@ -17628,9 +17634,10 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } diff --git a/static/img/10-dev-env/1-create-codespace.png b/static/img/10-dev-env/1-create-codespace.png new file mode 100644 index 0000000..82df7f4 Binary files /dev/null and b/static/img/10-dev-env/1-create-codespace.png differ