diff --git a/.github/workflows/temporary-container-checks.yml b/.github/workflows/temporary-container-checks.yml index bdda98cb33b..e45e88bfe84 100644 --- a/.github/workflows/temporary-container-checks.yml +++ b/.github/workflows/temporary-container-checks.yml @@ -28,23 +28,6 @@ jobs: - name: Checkout Source Files uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - - name: Checkout client-config - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - with: - repository: freeCodeCamp/client-config - path: client-config - - - name: Setup pnpm - uses: pnpm/action-setup@v2 - with: - version: 8 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3 - with: - node-version: ${{ matrix.node-version }} - cache: pnpm - - name: Create Image run: | docker build \ @@ -88,6 +71,32 @@ jobs: # name: webpack-stats # path: client/public/stats.json + build-api: + name: Build Api (Container) + runs-on: ubuntu-20.04 + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout Source Files + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 + + - name: Create Image + run: | + docker build \ + -t fcc-api \ + -f docker/api/Dockerfile . + + - name: Save Image + run: docker save fcc-api > api-artifact.tar + + - name: Upload Api Artifact + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3 + with: + name: api-artifact + path: api-artifact.tar + build-new-api: name: Build New Api (Container) runs-on: ubuntu-20.04 @@ -108,7 +117,7 @@ jobs: cypress-run: name: Test runs-on: ubuntu-20.04 - needs: build-client + needs: [build-client, build-api] strategy: fail-fast: false matrix: @@ -116,17 +125,6 @@ jobs: browsers: [chrome] node-version: [18.x] - services: - mongodb: - image: mongo:4.4 - ports: - - 27017:27017 - # We need mailhog to catch any emails the api tries to send. - mailhog: - image: mailhog/mailhog - ports: - - 1025:1025 - steps: - name: Set Action Environment Variables run: | @@ -137,13 +135,8 @@ jobs: uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3 - with: - name: client-artifact - - - name: Load Client Image - run: | - docker load < client-artifact.tar + # Cypress calls some pnpm scripts, so we need to install pnpm. - name: Setup pnpm uses: pnpm/action-setup@v2 with: @@ -153,34 +146,24 @@ jobs: uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3 with: node-version: ${{ matrix.node-version }} - # cypress-io/github-action caches the store, so we should not cache it - # here. - - name: Set freeCodeCamp Environment Variables - run: cp sample.env .env + - name: Install Dependencies + run: pnpm install - - name: Install and Build + - name: Load Images run: | - pnpm install - pnpm run create:shared - pnpm run build:curriculum - pnpm run build:server + docker load < client-artifact/client-artifact.tar + docker load < api-artifact/api-artifact.tar - - name: Seed Database - run: pnpm run seed - - # start-ci uses pm2, so it needs to be installed globally - - name: Install pm2 - run: npm i -g pm2 + - name: Set freeCodeCamp Environment Variables (needed by api) + run: cp sample.env .env - name: Cypress run uses: cypress-io/github-action@v4 with: record: ${{ env.CYPRESS_RECORD_KEY != 0 }} - start: | - pnpm start:server - docker compose up -d - wait-on: http://localhost:8000 + start: docker compose up -d + wait-on: http://localhost:8000, http://localhost:3000 wait-on-timeout: 1200 config: baseUrl=http://localhost:8000 browser: ${{ matrix.browsers }} diff --git a/api-server/ecosystem.config.js b/api-server/ecosystem.config.js index 00baae398c0..592d95cbbcb 100644 --- a/api-server/ecosystem.config.js +++ b/api-server/ecosystem.config.js @@ -4,7 +4,15 @@ const path = require('path'); const dotenv = require('dotenv'); const filePath = path.resolve(__dirname, '..', '.env'); -const env = dotenv.parse(fs.readFileSync(filePath)); +let env = {}; +try { + env = dotenv.parse(fs.readFileSync(filePath)); +} catch (e) { + console.log( + "If you're setting the env vars in the shell, it should be fine (you can probably ignore the error)." + ); + console.log(e); +} // without this, loopback cannot find strong-error-handler. Node can, so we know // there's no _real_ issue, but loopback is not able to find it. const loopbackModuleResolutionHack = path.resolve( diff --git a/api-server/package.json b/api-server/package.json index 532aa90b126..ed97701eaf3 100644 --- a/api-server/package.json +++ b/api-server/package.json @@ -20,7 +20,10 @@ "main": "none", "scripts": { "babel-dev-server": "babel-node --inspect=0.0.0.0 ./src/server/index.js", + "prebuild": "pnpm common-setup", "build": "babel src --out-dir lib --ignore '/**/*.test.js' --copy-files --no-copy-ignored", + "common-setup": "pnpm -w run create:shared", + "predevelop": "pnpm common-setup", "develop": "node src/development-start.js", "start": "cross-env DEBUG=fcc* node lib/production-start.js" }, @@ -47,6 +50,8 @@ "express-validator": "6.14.1", "helmet": "3.23.3", "helmet-csp": "2.10.0", + "joi": "17.9.2", + "joi-objectid": "3.0.1", "jsonwebtoken": "8.5.1", "lodash": "4.17.21", "loopback": "3.28.0", @@ -82,8 +87,6 @@ "@babel/plugin-proposal-optional-chaining": "7.17.12", "@babel/preset-env": "7.18.0", "@babel/register": "7.17.7", - "joi": "17.9.2", - "joi-objectid": "3.0.1", "loopback-component-explorer": "6.4.0", "nodemon": "2.0.16", "smee-client": "1.2.3" diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index 8c281d87ab3..9d7834246a1 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -20,6 +20,7 @@ module.exports = (on, config) => { // `on` is used to hook into various events Cypress emits // `config` is the resolved Cypress config config.env = config.env || {}; + // TODO: once we've containerized the API, we can remove this. on('before:run', () => { if (!existsSync('../../shared/config/curriculum.json')) { execSync('pnpm run build:curriculum'); diff --git a/docker-compose.yml b/docker-compose.yml index 7399a780558..78eeb32e66b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,32 @@ services: + mongo: + image: mongo + ports: + - '27017:27017' + mailhog: + restart: unless-stopped + image: mailhog/mailhog + ports: + - '1025:1025' + - '8025:8025' + api: + depends_on: + - mongo + - mailhog + image: fcc-api + env_file: + - .env + environment: + # The api cannot connect to mongodb or mailhog via localhost from inside the + # container, so we have to override these variables. + - MONGOHQ_URL=mongodb://mongo:27017/freecodecamp?directConnection=true + - MAILHOG_HOST=mailhog + ports: + # PORT is used by the new api, so we use the less generic API_PORT to + # avoid conflicts. + - '${API_PORT:-3000}:3000' client: image: fcc-client ports: - # PORT is used by the new api, so we use the less generic HOST_PORT to avoid - # conflicts. - - '${HOST_PORT:-8000}:8000' + # Same principle as above (avoiding conflicts) + - '${CLIENT_PORT:-8000}:8000' diff --git a/docker/api/Dockerfile b/docker/api/Dockerfile index 4055baaf978..d9dd8ef599a 100644 --- a/docker/api/Dockerfile +++ b/docker/api/Dockerfile @@ -1,35 +1,61 @@ -FROM node:16-buster AS builder -# Install doppler CLI -RUN (curl -Ls --tlsv1.2 --proto "=https" --retry 3 https://cli.doppler.com/install.sh) | sh -s -- --verify-signature +# bookworm was only released on 10-6-2023, so is a little too new. +FROM node:18-bullseye AS builder +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +# global installs need root permissions, so have to happen before we switch to +# the node user +RUN npm i -g pnpm@8 # node images create a non-root user that we can use USER node WORKDIR /home/node/build COPY --chown=node:node . . -# Pass `DOPPLER_TOKEN` at build time to create an encrypted snapshot for high-availability -ARG DOPPLER_TOKEN -RUN \ - doppler secrets download doppler.encrypted.json &&\ - pnpm install --no-progress --ignore-scripts &&\ - doppler run --fallback=doppler.encrypted.json --command="npm run create:config" &&\ - doppler run --fallback=doppler.encrypted.json --command="npm run build:curriculum" &&\ - doppler run --fallback=doppler.encrypted.json --command="npm run build:server" -FROM node:16-alpine as depends -USER node -WORKDIR /home/node/depends -COPY --chown=node:node . . -RUN pnpm install --production --workspace=api-server --no-progress --ignore-scripts +# TODO: figure out why the cache is getting invalidated. Is it in part because +# we're not ignoring THIS file? Or do we need corepack? -FROM node:16-alpine +# We have to prevent pnpm from deduping peer dependencies because otherwise it +# will install all of the packages, not just api-server. Also, pnpm deploy is +# not useful since we need to install more than one package. + +RUN pnpm config set dedupe-peer-dependents false +RUN pnpm -F=api-server -F=tools/scripts/build -F=challenge-parser -F=curriculum -F=shared \ + install --frozen-lockfile --ignore-scripts + +# The api needs to source curriculum.json and build:curriculum relies on the +# following env vars. +ARG SHOW_UPCOMING_CHANGES=false +ENV SHOW_UPCOMING_CHANGES=$SHOW_UPCOMING_CHANGES +ARG SHOW_NEW_CURRICULUM=true +ENV SHOW_NEW_CURRICULUM=$SHOW_NEW_CURRICULUM +RUN pnpm build:curriculum + +RUN pnpm build:server + +FROM node:18-bullseye AS deps + +WORKDIR /home/node/build +COPY --chown=node:node pnpm*.yaml . +COPY --chown=node:node api-server/package.json api-server/package.json +COPY --chown=node:node shared/package.json shared/package.json + +RUN npm i -g pnpm@8 +# Prevent pnpm installing unnecessary packages (see above) +RUN pnpm config set dedupe-peer-dependents false +RUN pnpm -F=api-server -F=shared install --prod --ignore-scripts + +FROM node:18-alpine RUN npm i -g pm2@4 USER node -WORKDIR /home/node/api +WORKDIR /home/node/fcc +COPY --from=builder --chown=node:node /home/node/build/api-server/config/ api-server/config/ COPY --from=builder --chown=node:node /home/node/build/api-server/lib/ api-server/lib/ -COPY --from=builder --chown=node:node /home/node/build/utils/ utils/ -COPY --from=builder --chown=node:node /home/node/build/config/ config/ -COPY --from=depends --chown=node:node /home/node/depends/api-server/node_modules/ api-server/node_modules/ -COPY --from=depends --chown=node:node /home/node/depends/node_modules/ node_modules/ -WORKDIR /home/node/api/api-server -CMD ["pm2-runtime", "./lib/production-start.js"] +COPY --from=builder --chown=node:node /home/node/build/api-server/ecosystem.config.js api-server/ecosystem.config.js +COPY --from=builder --chown=node:node /home/node/build/api-server/package.json api-server/package.json +COPY --from=builder --chown=node:node /home/node/build/shared/ shared/ +COPY --from=builder --chown=node:node /home/node/build/package.json package.json +COPY --from=deps --chown=node:node /home/node/build/node_modules/ node_modules/ +COPY --from=deps --chown=node:node /home/node/build/api-server/node_modules/ api-server/node_modules/ +COPY --from=deps --chown=node:node /home/node/build/shared/node_modules/ shared/node_modules/ + +CMD ["pm2-runtime", "start", "api-server/ecosystem.config.js"] -# TODO: don't copy mocks/fixtures diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca7d435826c..ecc4e524962 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -352,6 +352,12 @@ importers: helmet-csp: specifier: 2.10.0 version: 2.10.0 + joi: + specifier: 17.9.2 + version: 17.9.2 + joi-objectid: + specifier: 3.0.1 + version: 3.0.1 jsonwebtoken: specifier: 8.5.1 version: 8.5.1 @@ -452,12 +458,6 @@ importers: '@babel/register': specifier: 7.17.7 version: 7.17.7(@babel/core@7.18.0) - joi: - specifier: 17.9.2 - version: 17.9.2 - joi-objectid: - specifier: 3.0.1 - version: 3.0.1 loopback-component-explorer: specifier: 6.4.0 version: 6.4.0 @@ -1379,7 +1379,7 @@ importers: devDependencies: debug: specifier: 4.3.4 - version: 4.3.4(supports-color@8.1.1) + version: 4.3.4 dotenv: specifier: 16.3.1 version: 16.3.1 @@ -2892,7 +2892,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.11 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -2915,7 +2915,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.11 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -2941,7 +2941,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.11 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2964,7 +2964,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.11 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3146,7 +3146,7 @@ packages: '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/traverse': 7.22.11 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.4 semver: 6.3.1 @@ -3162,7 +3162,7 @@ packages: '@babel/core': 7.18.0 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.4 semver: 6.3.1 @@ -3178,7 +3178,7 @@ packages: '@babel/core': 7.22.11 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.4 semver: 6.3.1 @@ -3194,7 +3194,7 @@ packages: '@babel/core': 7.22.10 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.4 transitivePeerDependencies: @@ -6705,7 +6705,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 espree: 7.3.1 globals: 13.21.0 ignore: 4.0.6 @@ -7221,7 +7221,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -7787,6 +7787,7 @@ packages: /@leichtgewicht/ip-codec@2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false /@loadable/component@5.15.3(react@16.14.0): resolution: {integrity: sha512-VOgYgCABn6+/7aGIpg7m0Ruj34tGetaJzt4bQ345FwEovDQZ+dua+NWLmuJKv8rWZyxOUSfoJkmGnzyDXH2BAQ==} @@ -8008,8 +8009,48 @@ packages: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-dev-server: 4.15.1(webpack@5.88.2) + dev: false + + /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack@5.88.2): + resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <5.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.32.1 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.4.0 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.3.0 + source-map: 0.7.4 + webpack: 5.88.2 + dev: true /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} @@ -9219,7 +9260,7 @@ packages: react-dom: 16.14.0(react@16.14.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 transitivePeerDependencies: - '@storybook/mdx2-csf' - eslint @@ -9530,7 +9571,7 @@ packages: ts-dedent: 2.2.0 typescript: 4.9.5 util-deprecate: 1.0.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-dev-middleware: 4.3.0(webpack@5.88.2) webpack-hot-middleware: 2.25.4 webpack-virtual-modules: 0.4.6 @@ -9701,7 +9742,7 @@ packages: typescript: 4.9.5 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: true /@storybook/core-common@6.5.16(eslint@8.49.0)(react-dom@16.14.0)(react@16.14.0)(typescript@4.9.5): @@ -9884,7 +9925,7 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) typescript: 4.9.5 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 transitivePeerDependencies: - '@storybook/mdx2-csf' - bluebird @@ -10046,7 +10087,7 @@ packages: ts-dedent: 2.2.0 typescript: 4.9.5 util-deprecate: 1.0.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-dev-middleware: 4.3.0(webpack@5.88.2) webpack-virtual-modules: 0.4.6 transitivePeerDependencies: @@ -10128,7 +10169,7 @@ packages: typescript: '>= 3.x' webpack: '>= 4' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.1.0 @@ -10136,7 +10177,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@4.9.5) tslib: 2.6.2 typescript: 4.9.5 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 transitivePeerDependencies: - supports-color dev: true @@ -10172,7 +10213,7 @@ packages: '@babel/core': 7.22.11 '@babel/preset-flow': 7.22.5(@babel/core@7.22.11) '@babel/preset-react': 7.22.5(@babel/core@7.22.11) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.88.2) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack@5.88.2) '@storybook/addons': 6.5.16(react-dom@16.14.0)(react@16.14.0) '@storybook/builder-webpack5': 6.5.16(eslint@8.49.0)(react-dom@16.14.0)(react@16.14.0)(typescript@4.9.5) '@storybook/client-logger': 6.5.16 @@ -10210,7 +10251,7 @@ packages: ts-dedent: 2.2.0 typescript: 4.9.5 util-deprecate: 1.0.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 transitivePeerDependencies: - '@storybook/mdx2-csf' - '@swc/core' @@ -10678,6 +10719,7 @@ packages: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: '@types/node': 20.5.9 + dev: false /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -10721,6 +10763,7 @@ packages: dependencies: '@types/express-serve-static-core': 4.17.36 '@types/node': 20.5.9 + dev: false /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} @@ -11204,6 +11247,7 @@ packages: /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: false /@types/rimraf@2.0.5: resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} @@ -11233,6 +11277,7 @@ packages: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} dependencies: '@types/express': 4.17.17 + dev: false /@types/serve-static@1.15.2: resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} @@ -11253,6 +11298,7 @@ packages: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: '@types/node': 20.5.9 + dev: false /@types/source-list-map@0.1.2: resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} @@ -11383,6 +11429,7 @@ packages: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: '@types/node': 20.5.9 + dev: false /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} @@ -11427,7 +11474,7 @@ packages: '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@4.9.5) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 4.33.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 7.32.0 functional-red-black-tree: 1.0.1 ignore: 5.2.4 @@ -11524,7 +11571,7 @@ packages: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 7.32.0 typescript: 4.9.5 transitivePeerDependencies: @@ -11605,7 +11652,7 @@ packages: dependencies: '@typescript-eslint/types': 3.10.1 '@typescript-eslint/visitor-keys': 3.10.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 glob: 7.2.3 is-glob: 4.0.3 lodash: 4.17.21 @@ -11626,7 +11673,7 @@ packages: dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -12158,6 +12205,7 @@ packages: optional: true dependencies: ajv: 8.12.0 + dev: false /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -12173,6 +12221,7 @@ packages: dependencies: ajv: 8.12.0 fast-deep-equal: 3.1.3 + dev: false /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -12446,6 +12495,7 @@ packages: /array-flatten@2.1.2: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: false /array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} @@ -14115,6 +14165,7 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + requiresBuild: true /bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -14196,6 +14247,7 @@ packages: dns-equal: 1.0.0 fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 + dev: false /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -14617,7 +14669,7 @@ packages: minipass-pipeline: 1.2.4 mkdirp: 1.0.4 p-map: 4.0.0 - promise-inflight: 1.0.1(bluebird@3.7.2) + promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 8.0.1 tar: 6.1.15 @@ -15326,6 +15378,7 @@ packages: /connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} + dev: false /connect-livereload@0.6.1: resolution: {integrity: sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==} @@ -15782,7 +15835,7 @@ packages: postcss-value-parser: 4.2.0 schema-utils: 2.7.1 semver: 6.3.1 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: true /css-loader@5.2.7(webpack@5.88.2): @@ -15870,7 +15923,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: false /css-prefers-color-scheme@6.0.3(postcss@8.4.29): @@ -16251,6 +16304,7 @@ packages: dependencies: ms: 2.1.3 supports-color: 8.1.1 + dev: true /debug@4.3.1: resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} @@ -16286,6 +16340,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -16404,6 +16459,7 @@ packages: engines: {node: '>= 10'} dependencies: execa: 5.1.1 + dev: false /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -16543,6 +16599,7 @@ packages: /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false /detect-package-manager@2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} @@ -16566,7 +16623,7 @@ packages: hasBin: true dependencies: address: 1.1.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -16593,7 +16650,7 @@ packages: '@types/tmp': 0.0.33 application-config-path: 0.1.1 command-exists: 1.2.9 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eol: 0.9.1 get-port: 3.2.0 glob: 7.2.3 @@ -16694,12 +16751,14 @@ packages: /dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: false /dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} dependencies: '@leichtgewicht/ip-codec': 2.0.4 + dev: false /docsify-cli@4.4.4: resolution: {integrity: sha512-NAZgg6b0BsDuq/Pe+P19Qb2J1d+ZVbS0eGkeCNxyu4F9/CQSsRqZqAvPJ9/0I+BCHn4sgftA2jluqhQVzKzrSA==} @@ -17062,7 +17121,7 @@ packages: dependencies: base64-arraybuffer: 0.1.4 component-emitter: 1.3.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 engine.io-parser: 4.0.3 has-cors: 1.1.0 parseqs: 0.0.6 @@ -17089,7 +17148,7 @@ packages: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 engine.io-parser: 4.0.3 ws: 7.4.6 transitivePeerDependencies: @@ -17549,7 +17608,7 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@4.9.5) - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eslint: 7.32.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0) @@ -17681,7 +17740,7 @@ packages: array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 doctrine: 2.1.0 eslint: 7.32.0 eslint-import-resolver-node: 0.3.9 @@ -18006,7 +18065,7 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: false /eslint@7.32.0: @@ -18020,7 +18079,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -18515,6 +18574,20 @@ packages: resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.0 + transitivePeerDependencies: + - supports-color + dev: true + /extract-zip@2.0.1(supports-color@8.1.1): resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -18969,6 +19042,16 @@ packages: readable-stream: 2.3.8 dev: true + /follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /follow-redirects@1.15.2(debug@2.2.0): resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} @@ -18990,7 +19073,7 @@ packages: debug: optional: true dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 /follow-redirects@1.15.2(debug@4.3.4): resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} @@ -19139,7 +19222,7 @@ packages: semver: 7.5.4 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 /form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} @@ -19612,7 +19695,7 @@ packages: chokidar: 3.5.3 contentful-management: 7.54.2(debug@4.3.4) cors: 2.8.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 detect-port: 1.5.1 dotenv: 8.6.0 execa: 5.1.1 @@ -19811,7 +19894,7 @@ packages: css-minimizer-webpack-plugin: 2.0.0(webpack@5.88.2) css.escape: 1.5.1 date-fns: 2.30.0 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 deepmerge: 4.3.1 del: 5.1.0 detect-port: 1.5.1 @@ -20428,6 +20511,7 @@ packages: /handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} @@ -20775,6 +20859,7 @@ packages: obuf: 1.1.2 readable-stream: 2.3.8 wbuf: 1.7.3 + dev: false /hpkp@2.0.0: resolution: {integrity: sha512-TaZpC6cO/k3DFsjfzz1LnOobbVSq+J+7WpJxrVtN4L+8+BPQj8iBDRB2Dx49613N+e7/+ZSQ9ra+xZm7Blf4wg==} @@ -20885,7 +20970,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 /htmlescape@1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} @@ -20936,6 +21021,7 @@ packages: /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false /http-errors@1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} @@ -20986,7 +21072,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -20996,7 +21082,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -21018,16 +21104,18 @@ packages: micromatch: 4.0.5 transitivePeerDependencies: - debug + dev: false /http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.2 requires-port: 1.0.0 transitivePeerDependencies: - debug + dev: false /http-proxy@1.18.1(debug@3.2.7): resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} @@ -21090,7 +21178,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -21394,6 +21482,7 @@ packages: /ipaddr.js@2.1.0: resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} engines: {node: '>= 10'} + dev: false /is-absolute-url@3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} @@ -21773,6 +21862,7 @@ packages: /is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} + dev: false /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} @@ -23231,7 +23321,6 @@ packages: /joi-objectid@3.0.1: resolution: {integrity: sha512-V/3hbTlGpvJ03Me6DJbdBI08hBTasFOmipsauOsxOSnsF1blxV537WTl1zPwbfcKle4AK0Ma4OPnzMH4LlvTpQ==} - dev: true /joi@17.10.1: resolution: {integrity: sha512-vIiDxQKmRidUVp8KngT8MZSOcmRVm2zV7jbMjNYWuHcJWI0bUck3nRTGQjhpPlQenIQIBC5Vp9AhcnHbWQqafw==} @@ -23250,7 +23339,7 @@ packages: '@sideway/address': 4.1.4 '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - dev: true + dev: false /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} @@ -23649,6 +23738,7 @@ packages: dependencies: picocolors: 1.0.0 shell-quote: 1.8.1 + dev: false /lazy-ass@1.6.0: resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} @@ -24031,7 +24121,7 @@ packages: dependencies: async: 0.9.2 commondir: 1.0.1 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 lodash: 4.17.21 semver: 5.7.2 strong-globalize: 4.1.3 @@ -24044,7 +24134,7 @@ packages: resolution: {integrity: sha512-vDRR4gqkvGOEXh5yL383xGuGxUW9xtF+NCY6/lJu1VAgupKltZxEx3Vw+L3nsGvQrlkJTSmiK3jk72qxkoBtbw==} engines: {node: '>=6'} dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 lodash: 4.17.21 loopback-swagger: 5.9.0 strong-globalize: 4.1.3 @@ -24059,7 +24149,7 @@ packages: dependencies: async: 2.6.4 bson: 1.1.6 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 loopback-connector: 4.11.1 mongodb: 3.6.9 strong-globalize: 4.1.3 @@ -24089,7 +24179,7 @@ packages: dependencies: async: 3.2.4 bluebird: 3.7.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 msgpack5: 4.5.1 strong-globalize: 5.1.0 uuid: 7.0.3 @@ -24103,7 +24193,7 @@ packages: dependencies: async: 2.6.4 bluebird: 3.7.2 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 depd: 1.1.2 inflection: 1.13.4 lodash: 4.17.21 @@ -24127,7 +24217,7 @@ packages: resolution: {integrity: sha512-p0qSzuuX7eATe5Bxy+RqCj3vSfSFfdCtqyf3yuC+DpchMvgal33XlhEi2UmywyK/Ym28oVnZxxWmfrwFMzSwLQ==} engines: {node: '>=4.0.0'} dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 transitivePeerDependencies: - supports-color dev: false @@ -24137,7 +24227,7 @@ packages: engines: {node: '>=8.9'} dependencies: async: 2.6.4 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 strong-globalize: 4.1.3 transitivePeerDependencies: - supports-color @@ -24148,7 +24238,7 @@ packages: engines: {node: '>=8'} dependencies: async: 2.6.4 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 ejs: 2.7.4 lodash: 4.17.21 strong-globalize: 4.1.3 @@ -25258,7 +25348,7 @@ packages: /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -25268,7 +25358,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.8 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -25291,7 +25381,7 @@ packages: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} dependencies: '@types/debug': 4.1.8 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -25431,7 +25521,7 @@ packages: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: false /minimalistic-assert@1.0.1: @@ -25815,6 +25905,7 @@ packages: dependencies: dns-packet: 5.6.1 thunky: 1.1.0 + dev: false /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -26015,6 +26106,7 @@ packages: /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} + dev: false /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -26366,6 +26458,7 @@ packages: /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false /on-exit-leak-free@2.1.0: resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} @@ -26645,6 +26738,7 @@ packages: dependencies: '@types/retry': 0.12.0 retry: 0.13.1 + dev: false /p-throttle@4.1.1: resolution: {integrity: sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==} @@ -27581,7 +27675,7 @@ packages: postcss: 7.0.39 schema-utils: 3.3.0 semver: 7.5.4 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: true /postcss-loader@4.3.0(postcss@8.4.29)(webpack@5.88.2): @@ -27624,7 +27718,7 @@ packages: klona: 2.0.6 postcss: 8.4.29 semver: 7.5.4 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: false /postcss-logical@5.0.4(postcss@8.4.29): @@ -28245,6 +28339,15 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + /promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: true + /promise-inflight@1.0.1(bluebird@3.7.2): resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -28450,7 +28553,7 @@ packages: dependencies: debug: 4.3.1 devtools-protocol: 0.0.901419 - extract-zip: 2.0.1(supports-color@8.1.1) + extract-zip: 2.0.1 https-proxy-agent: 5.0.0 node-fetch: 2.6.1 pkg-dir: 4.2.0 @@ -28768,7 +28871,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 transitivePeerDependencies: - eslint - supports-color @@ -29133,7 +29236,7 @@ packages: tailwindcss: 3.3.3(ts-node@10.9.1) terser-webpack-plugin: 5.3.9(webpack@5.88.2) typescript: 4.9.5 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-dev-server: 4.15.1(webpack@5.88.2) webpack-manifest-plugin: 4.1.1(webpack@5.88.2) workbox-webpack-plugin: 6.6.0(webpack@5.88.2) @@ -30090,6 +30193,7 @@ packages: /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} + dev: false /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -30344,7 +30448,7 @@ packages: dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: false /sass.js@0.11.1: @@ -30418,6 +30522,7 @@ packages: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) ajv-keywords: 5.1.0(ajv@8.12.0) + dev: false /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} @@ -30432,12 +30537,14 @@ packages: /select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false /selfsigned@2.1.1: resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} engines: {node: '>=10'} dependencies: node-forge: 1.3.1 + dev: false /semver-diff@3.1.1: resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} @@ -30868,7 +30975,7 @@ packages: '@types/component-emitter': 1.2.11 backo2: 1.0.2 component-emitter: 1.3.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 engine.io-client: 4.1.4 parseuri: 0.0.6 socket.io-parser: 4.0.5 @@ -30883,7 +30990,7 @@ packages: dependencies: '@types/component-emitter': 1.2.11 component-emitter: 1.3.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -30896,7 +31003,7 @@ packages: '@types/node': 14.18.56 accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 engine.io: 4.1.2 socket.io-adapter: 2.1.0 socket.io-parser: 4.0.5 @@ -30911,6 +31018,7 @@ packages: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 + dev: false /socks@2.7.1: resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} @@ -30941,7 +31049,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: false /source-map-resolve@0.5.3: @@ -31041,7 +31149,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -31049,18 +31157,20 @@ packages: wbuf: 1.7.3 transitivePeerDependencies: - supports-color + dev: false /spdy@4.0.2: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 spdy-transport: 3.0.0 transitivePeerDependencies: - supports-color + dev: false /split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} @@ -31570,7 +31680,7 @@ packages: dependencies: '@types/express': 4.17.17 accepts: 1.3.8 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 ejs: 3.1.9 fast-safe-stringify: 2.1.1 http-status: 1.6.2 @@ -31585,7 +31695,7 @@ packages: engines: {node: '>=6'} dependencies: accept-language: 3.0.18 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globalize: 1.7.0 lodash: 4.17.21 md5: 2.3.0 @@ -31600,7 +31710,7 @@ packages: engines: {node: '>=8.9'} dependencies: accept-language: 3.0.18 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globalize: 1.7.0 lodash: 4.17.21 md5: 2.3.0 @@ -31616,7 +31726,7 @@ packages: engines: {node: '>=10'} dependencies: accept-language: 3.0.18 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globalize: 1.7.0 lodash: 4.17.21 md5: 2.3.0 @@ -31633,7 +31743,7 @@ packages: dependencies: async: 3.2.4 body-parser: 1.20.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 depd: 2.0.0 escape-string-regexp: 2.0.0 eventemitter2: 5.0.1 @@ -31685,7 +31795,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 2.7.1 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 dev: true /style-loader@2.0.0(webpack@5.88.2): @@ -31764,7 +31874,7 @@ packages: dependencies: component-emitter: 1.3.0 cookiejar: 2.1.4 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 @@ -32191,6 +32301,7 @@ packages: /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false /timers-browserify@1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} @@ -33540,6 +33651,7 @@ packages: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 + dev: false /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -33689,7 +33801,8 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 + dev: false /webpack-dev-server@4.15.1(webpack@5.88.2): resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} @@ -33732,7 +33845,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-dev-middleware: 5.3.3(webpack@5.88.2) ws: 8.13.0 transitivePeerDependencies: @@ -33740,6 +33853,7 @@ packages: - debug - supports-color - utf-8-validate + dev: false /webpack-filter-warnings-plugin@1.2.1(webpack@4.46.0): resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} @@ -33773,7 +33887,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-sources: 2.3.1 dev: false @@ -33808,7 +33922,7 @@ packages: /webpack-virtual-modules@0.2.2: resolution: {integrity: sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==} dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 transitivePeerDependencies: - supports-color dev: true @@ -33816,7 +33930,7 @@ packages: /webpack-virtual-modules@0.3.2: resolution: {integrity: sha512-RXQXioY6MhzM4CNQwmBwKXYgBs6ulaiQ8bkNQEl2J6Z+V+s7lgl/wGvaI/I0dLnYKB8cKsxQc17QOAVIphPLDw==} dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 transitivePeerDependencies: - supports-color @@ -33864,6 +33978,45 @@ packages: - supports-color dev: true + /webpack@5.88.2: + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.10 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.88.2) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + /webpack@5.88.2(webpack-cli@4.10.0): resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} @@ -34197,7 +34350,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.88.2(webpack-cli@4.10.0) + webpack: 5.88.2 webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: