diff --git a/.github/workflows/docs_pull_request.yml b/.github/workflows/docs_pull_request.yml new file mode 100644 index 000000000..12e6f1c0a --- /dev/null +++ b/.github/workflows/docs_pull_request.yml @@ -0,0 +1,51 @@ +name: TRex - Release "daily" + +on: + push: + branches: + - daily + - docs/** + - fix/** + - refactor/** + paths: + - "docs/**" + - "platforms/guardoni/docs/**" + - "platforms/tktrex/docs/**" + - "platforms/yttrex/docs/**" + - "platforms/ycai/docs/**" + +jobs: + release: + name: Docs + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16.x] + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: "yarn" + cache-dependency-path: yarn.lock + + - name: Install dependencies + run: yarn + + # - name: Test project + # run: yarn test + + - name: Build Docs + env: + DEBUG: "@trex*,@YCAI*" + run: | + yarn tk:shared open-doc-api + yarn yt:shared open-doc-api + yarn ycai open-doc-api + yarn docs build diff --git a/.github/workflows/gh_release.yml b/.github/workflows/gh_release.yml index c360f8122..65c1c595d 100644 --- a/.github/workflows/gh_release.yml +++ b/.github/workflows/gh_release.yml @@ -49,8 +49,9 @@ jobs: yarn yt:ext dist:guardoni yarn tk:ext dist yarn tk:ext dist:guardoni - yarn guardoni build + yarn guardoni build:cli yarn guardoni pkg + yarn guardoni build:app yarn ycai build guardoni_build: diff --git a/.github/workflows/master_release.yml b/.github/workflows/master_release.yml index 3a083b865..bec8b0d09 100644 --- a/.github/workflows/master_release.yml +++ b/.github/workflows/master_release.yml @@ -96,8 +96,9 @@ jobs: yarn yt:ext dist:guardoni yarn tk:ext dist yarn tk:ext dist:guardoni - yarn guardoni build + yarn guardoni build:cli yarn guardoni pkg + yarn guardoni build:app yarn ycai build guardoni_build: diff --git a/.github/workflows/yttrex_pull_request.yml b/.github/workflows/yttrex_pull_request.yml index dd91203ce..d3ef1236d 100644 --- a/.github/workflows/yttrex_pull_request.yml +++ b/.github/workflows/yttrex_pull_request.yml @@ -42,9 +42,12 @@ jobs: - name: Lint code run: yarn yt:ext lint + - name: Type Check + run: yarn yt:ext tsc -b + - name: Build run: | - yarn shared build + yarn yt:ext clean yarn yt:ext build - name: Pack @@ -56,10 +59,14 @@ jobs: - name: Build backend run: yarn yt:backend build - - name: Test + - name: Test backend run: | yarn pm2 start platforms/yttrex/backend/ecosystem.config.js --env test yarn yt:backend test --runInBand --forceExit --ci - yarn yt:ext test --runInBand --ci - yarn pm2 stop all + + - name: Test Extension + run: yarn yt:ext test --runInBand --ci + + - name: Stop PM2 ecosystem + run: yarn pm2 stop all diff --git a/.yarn/cache/@algolia-autocomplete-core-npm-1.5.2-7b75b597c7-a8ab49c689.zip b/.yarn/cache/@algolia-autocomplete-core-npm-1.5.2-7b75b597c7-a8ab49c689.zip deleted file mode 100644 index e987c5da1..000000000 Binary files a/.yarn/cache/@algolia-autocomplete-core-npm-1.5.2-7b75b597c7-a8ab49c689.zip and /dev/null differ diff --git a/.yarn/cache/@algolia-autocomplete-core-npm-1.6.3-aa24e2b96c-2dec8ca313.zip b/.yarn/cache/@algolia-autocomplete-core-npm-1.6.3-aa24e2b96c-2dec8ca313.zip new file mode 100644 index 000000000..4ee3def12 Binary files /dev/null and b/.yarn/cache/@algolia-autocomplete-core-npm-1.6.3-aa24e2b96c-2dec8ca313.zip differ diff --git a/.yarn/cache/@algolia-autocomplete-preset-algolia-npm-1.5.2-42dbc0f992-56da979554.zip b/.yarn/cache/@algolia-autocomplete-preset-algolia-npm-1.5.2-42dbc0f992-56da979554.zip deleted file mode 100644 index b45625c57..000000000 Binary files a/.yarn/cache/@algolia-autocomplete-preset-algolia-npm-1.5.2-42dbc0f992-56da979554.zip and /dev/null differ diff --git a/.yarn/cache/@algolia-autocomplete-shared-npm-1.5.2-dbbb4e17f1-35d60ea6c3.zip b/.yarn/cache/@algolia-autocomplete-shared-npm-1.6.3-f774cb7927-2688f54bd8.zip similarity index 68% rename from .yarn/cache/@algolia-autocomplete-shared-npm-1.5.2-dbbb4e17f1-35d60ea6c3.zip rename to .yarn/cache/@algolia-autocomplete-shared-npm-1.6.3-f774cb7927-2688f54bd8.zip index 864491553..bd2671fda 100644 Binary files a/.yarn/cache/@algolia-autocomplete-shared-npm-1.5.2-dbbb4e17f1-35d60ea6c3.zip and b/.yarn/cache/@algolia-autocomplete-shared-npm-1.6.3-f774cb7927-2688f54bd8.zip differ diff --git a/.yarn/cache/@algolia-cache-browser-local-storage-npm-4.13.1-c6b6f3cb62-ee7674971a.zip b/.yarn/cache/@algolia-cache-browser-local-storage-npm-4.13.1-c6b6f3cb62-ee7674971a.zip new file mode 100644 index 000000000..9b808aef8 Binary files /dev/null and b/.yarn/cache/@algolia-cache-browser-local-storage-npm-4.13.1-c6b6f3cb62-ee7674971a.zip differ diff --git a/.yarn/cache/@algolia-cache-common-npm-4.13.1-e65eb6a114-0ec5f13441.zip b/.yarn/cache/@algolia-cache-common-npm-4.13.1-e65eb6a114-0ec5f13441.zip new file mode 100644 index 000000000..e0c2d5734 Binary files /dev/null and b/.yarn/cache/@algolia-cache-common-npm-4.13.1-e65eb6a114-0ec5f13441.zip differ diff --git a/.yarn/cache/@algolia-cache-in-memory-npm-4.13.1-3ea72a883f-d1a5935de6.zip b/.yarn/cache/@algolia-cache-in-memory-npm-4.13.1-3ea72a883f-d1a5935de6.zip new file mode 100644 index 000000000..8069f04f2 Binary files /dev/null and b/.yarn/cache/@algolia-cache-in-memory-npm-4.13.1-3ea72a883f-d1a5935de6.zip differ diff --git a/.yarn/cache/@algolia-client-account-npm-4.13.1-ba9b82e153-3a3fb580c5.zip b/.yarn/cache/@algolia-client-account-npm-4.13.1-ba9b82e153-3a3fb580c5.zip new file mode 100644 index 000000000..55b8296a6 Binary files /dev/null and b/.yarn/cache/@algolia-client-account-npm-4.13.1-ba9b82e153-3a3fb580c5.zip differ diff --git a/.yarn/cache/@algolia-client-analytics-npm-4.13.1-c1b43b438c-b593011160.zip b/.yarn/cache/@algolia-client-analytics-npm-4.13.1-c1b43b438c-b593011160.zip new file mode 100644 index 000000000..eb64b7cdd Binary files /dev/null and b/.yarn/cache/@algolia-client-analytics-npm-4.13.1-c1b43b438c-b593011160.zip differ diff --git a/.yarn/cache/@algolia-client-common-npm-4.13.1-b93cdb6d0d-4a3d5a14f4.zip b/.yarn/cache/@algolia-client-common-npm-4.13.1-b93cdb6d0d-4a3d5a14f4.zip new file mode 100644 index 000000000..920b16d3b Binary files /dev/null and b/.yarn/cache/@algolia-client-common-npm-4.13.1-b93cdb6d0d-4a3d5a14f4.zip differ diff --git a/.yarn/cache/@algolia-client-personalization-npm-4.13.1-02aaa55c87-9a318235f5.zip b/.yarn/cache/@algolia-client-personalization-npm-4.13.1-02aaa55c87-9a318235f5.zip new file mode 100644 index 000000000..d8061283e Binary files /dev/null and b/.yarn/cache/@algolia-client-personalization-npm-4.13.1-02aaa55c87-9a318235f5.zip differ diff --git a/.yarn/cache/@algolia-client-search-npm-4.13.1-9a4483967a-44e630b866.zip b/.yarn/cache/@algolia-client-search-npm-4.13.1-9a4483967a-44e630b866.zip new file mode 100644 index 000000000..b7a934932 Binary files /dev/null and b/.yarn/cache/@algolia-client-search-npm-4.13.1-9a4483967a-44e630b866.zip differ diff --git a/.yarn/cache/@algolia-logger-common-npm-4.13.1-83d2aed03f-7330b794af.zip b/.yarn/cache/@algolia-logger-common-npm-4.13.1-83d2aed03f-7330b794af.zip new file mode 100644 index 000000000..200aa337c Binary files /dev/null and b/.yarn/cache/@algolia-logger-common-npm-4.13.1-83d2aed03f-7330b794af.zip differ diff --git a/.yarn/cache/@algolia-logger-console-npm-4.13.1-934451a7d6-c78f50a784.zip b/.yarn/cache/@algolia-logger-console-npm-4.13.1-934451a7d6-c78f50a784.zip new file mode 100644 index 000000000..7729ab509 Binary files /dev/null and b/.yarn/cache/@algolia-logger-console-npm-4.13.1-934451a7d6-c78f50a784.zip differ diff --git a/.yarn/cache/@algolia-requester-browser-xhr-npm-4.13.1-66d7572617-6ae8e3b03b.zip b/.yarn/cache/@algolia-requester-browser-xhr-npm-4.13.1-66d7572617-6ae8e3b03b.zip new file mode 100644 index 000000000..24f63d225 Binary files /dev/null and b/.yarn/cache/@algolia-requester-browser-xhr-npm-4.13.1-66d7572617-6ae8e3b03b.zip differ diff --git a/.yarn/cache/@algolia-requester-common-npm-4.13.1-c0685bf000-4e8039f7fd.zip b/.yarn/cache/@algolia-requester-common-npm-4.13.1-c0685bf000-4e8039f7fd.zip new file mode 100644 index 000000000..0fb82fdcd Binary files /dev/null and b/.yarn/cache/@algolia-requester-common-npm-4.13.1-c0685bf000-4e8039f7fd.zip differ diff --git a/.yarn/cache/@algolia-requester-node-http-npm-4.13.1-c7924c91b4-d25fe56c4a.zip b/.yarn/cache/@algolia-requester-node-http-npm-4.13.1-c7924c91b4-d25fe56c4a.zip new file mode 100644 index 000000000..3ecc48ebb Binary files /dev/null and b/.yarn/cache/@algolia-requester-node-http-npm-4.13.1-c7924c91b4-d25fe56c4a.zip differ diff --git a/.yarn/cache/@algolia-transporter-npm-4.13.1-4c7713984b-c99451f371.zip b/.yarn/cache/@algolia-transporter-npm-4.13.1-4c7713984b-c99451f371.zip new file mode 100644 index 000000000..35b827984 Binary files /dev/null and b/.yarn/cache/@algolia-transporter-npm-4.13.1-4c7713984b-c99451f371.zip differ diff --git a/.yarn/cache/@babel-compat-data-npm-7.17.10-78bb00a360-e85051087c.zip b/.yarn/cache/@babel-compat-data-npm-7.17.10-78bb00a360-e85051087c.zip new file mode 100644 index 000000000..423f27d53 Binary files /dev/null and b/.yarn/cache/@babel-compat-data-npm-7.17.10-78bb00a360-e85051087c.zip differ diff --git a/.yarn/cache/@babel-core-npm-7.18.2-09406ae045-14a4142c12.zip b/.yarn/cache/@babel-core-npm-7.18.2-09406ae045-14a4142c12.zip new file mode 100644 index 000000000..d20e1db29 Binary files /dev/null and b/.yarn/cache/@babel-core-npm-7.18.2-09406ae045-14a4142c12.zip differ diff --git a/.yarn/cache/@babel-generator-npm-7.18.2-0f6d05ed9c-d0661e9553.zip b/.yarn/cache/@babel-generator-npm-7.18.2-0f6d05ed9c-d0661e9553.zip new file mode 100644 index 000000000..2ee8955cc Binary files /dev/null and b/.yarn/cache/@babel-generator-npm-7.18.2-0f6d05ed9c-d0661e9553.zip differ diff --git a/.yarn/cache/@babel-helper-compilation-targets-npm-7.18.2-dc0a980fcf-4f02e79f20.zip b/.yarn/cache/@babel-helper-compilation-targets-npm-7.18.2-dc0a980fcf-4f02e79f20.zip new file mode 100644 index 000000000..cc6a2641e Binary files /dev/null and b/.yarn/cache/@babel-helper-compilation-targets-npm-7.18.2-dc0a980fcf-4f02e79f20.zip differ diff --git a/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.18.0-014a2978be-9a6ef17535.zip b/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.18.0-014a2978be-9a6ef17535.zip new file mode 100644 index 000000000..48f4f664d Binary files /dev/null and b/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.18.0-014a2978be-9a6ef17535.zip differ diff --git a/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.17.12-a615eb0070-fe49d26b0f.zip b/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.17.12-a615eb0070-fe49d26b0f.zip new file mode 100644 index 000000000..92bed51ae Binary files /dev/null and b/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.17.12-a615eb0070-fe49d26b0f.zip differ diff --git a/.yarn/cache/@babel-helper-environment-visitor-npm-7.18.2-ef86d22a2e-1a9c8726fa.zip b/.yarn/cache/@babel-helper-environment-visitor-npm-7.18.2-ef86d22a2e-1a9c8726fa.zip new file mode 100644 index 000000000..240f90d73 Binary files /dev/null and b/.yarn/cache/@babel-helper-environment-visitor-npm-7.18.2-ef86d22a2e-1a9c8726fa.zip differ diff --git a/.yarn/cache/@babel-helper-function-name-npm-7.17.9-baf558fead-a59b2e5af5.zip b/.yarn/cache/@babel-helper-function-name-npm-7.17.9-baf558fead-a59b2e5af5.zip new file mode 100644 index 000000000..6775444d9 Binary files /dev/null and b/.yarn/cache/@babel-helper-function-name-npm-7.17.9-baf558fead-a59b2e5af5.zip differ diff --git a/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.17.7-b9e674a20e-70f361bab6.zip b/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.17.7-b9e674a20e-70f361bab6.zip new file mode 100644 index 000000000..7c507d2a1 Binary files /dev/null and b/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.17.7-b9e674a20e-70f361bab6.zip differ diff --git a/.yarn/cache/@babel-helper-module-transforms-npm-7.18.0-7aab6847ad-824c3967c0.zip b/.yarn/cache/@babel-helper-module-transforms-npm-7.18.0-7aab6847ad-824c3967c0.zip new file mode 100644 index 000000000..6c9cee085 Binary files /dev/null and b/.yarn/cache/@babel-helper-module-transforms-npm-7.18.0-7aab6847ad-824c3967c0.zip differ diff --git a/.yarn/cache/@babel-helper-simple-access-npm-7.18.2-e317ecdcbd-c0862b56db.zip b/.yarn/cache/@babel-helper-simple-access-npm-7.18.2-e317ecdcbd-c0862b56db.zip new file mode 100644 index 000000000..7152801f5 Binary files /dev/null and b/.yarn/cache/@babel-helper-simple-access-npm-7.18.2-e317ecdcbd-c0862b56db.zip differ diff --git a/.yarn/cache/@babel-helpers-npm-7.18.2-2e3a8cbf37-94620242f2.zip b/.yarn/cache/@babel-helpers-npm-7.18.2-2e3a8cbf37-94620242f2.zip new file mode 100644 index 000000000..cea1d7d2b Binary files /dev/null and b/.yarn/cache/@babel-helpers-npm-7.18.2-2e3a8cbf37-94620242f2.zip differ diff --git a/.yarn/cache/@babel-parser-npm-7.18.5-8654dc512a-4976349d86.zip b/.yarn/cache/@babel-parser-npm-7.18.5-8654dc512a-4976349d86.zip new file mode 100644 index 000000000..8eaaf5e33 Binary files /dev/null and b/.yarn/cache/@babel-parser-npm-7.18.5-8654dc512a-4976349d86.zip differ diff --git a/.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.17.12-be0fb80319-6ef739b3a2.zip b/.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.17.12-be0fb80319-6ef739b3a2.zip new file mode 100644 index 000000000..3fe2aa134 Binary files /dev/null and b/.yarn/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.17.12-be0fb80319-6ef739b3a2.zip differ diff --git a/.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.17.12-3b9097f27f-68520a8f26.zip b/.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.17.12-3b9097f27f-68520a8f26.zip new file mode 100644 index 000000000..769914f6d Binary files /dev/null and b/.yarn/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.17.12-3b9097f27f-68520a8f26.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.17.12-d40dff0630-16a3c7f68a.zip b/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.17.12-d40dff0630-16a3c7f68a.zip new file mode 100644 index 000000000..0889d6b22 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.17.12-d40dff0630-16a3c7f68a.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.17.12-f05345c9c2-884df6a461.zip b/.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.17.12-f05345c9c2-884df6a461.zip new file mode 100644 index 000000000..0de38773d Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.17.12-f05345c9c2-884df6a461.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.0-63904f3f14-70fd622fd7.zip b/.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.0-63904f3f14-70fd622fd7.zip new file mode 100644 index 000000000..865b767be Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-class-static-block-npm-7.18.0-63904f3f14-70fd622fd7.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.17.12-590b8c9c2a-41c9cd4c0a.zip b/.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.17.12-590b8c9c2a-41c9cd4c0a.zip new file mode 100644 index 000000000..047bc2a70 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-export-namespace-from-npm-7.17.12-590b8c9c2a-41c9cd4c0a.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.17.12-4951358b71-8ed4ee3fbc.zip b/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.17.12-4951358b71-8ed4ee3fbc.zip new file mode 100644 index 000000000..b90c37d5e Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.17.12-4951358b71-8ed4ee3fbc.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.17.12-6f46a088bb-0d48451836.zip b/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.17.12-6f46a088bb-0d48451836.zip new file mode 100644 index 000000000..198f1c19f Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-logical-assignment-operators-npm-7.17.12-6f46a088bb-0d48451836.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.17.12-4cd59b391b-7881d8005d.zip b/.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.17.12-4cd59b391b-7881d8005d.zip new file mode 100644 index 000000000..9c7a8c7a7 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-nullish-coalescing-operator-npm-7.17.12-4cd59b391b-7881d8005d.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.18.0-bd5ba90f45-2b49bcf9a6.zip b/.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.18.0-bd5ba90f45-2b49bcf9a6.zip new file mode 100644 index 000000000..52e121903 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.18.0-bd5ba90f45-2b49bcf9a6.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.17.12-6037fe9352-a27b220573.zip b/.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.17.12-6037fe9352-a27b220573.zip new file mode 100644 index 000000000..b812cd389 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-optional-chaining-npm-7.17.12-6037fe9352-a27b220573.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.17.12-8ced4a48ee-a1e5bd6a0a.zip b/.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.17.12-8ced4a48ee-a1e5bd6a0a.zip new file mode 100644 index 000000000..29062fa3a Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-private-methods-npm-7.17.12-8ced4a48ee-a1e5bd6a0a.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.17.12-8f1c21a7d0-056cb77994.zip b/.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.17.12-8f1c21a7d0-056cb77994.zip new file mode 100644 index 000000000..8c0b74108 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-private-property-in-object-npm-7.17.12-8f1c21a7d0-056cb77994.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.17.12-92805926f8-0e41945104.zip b/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.17.12-92805926f8-0e41945104.zip new file mode 100644 index 000000000..0f1d2e274 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.17.12-92805926f8-0e41945104.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.17.12-cd34146413-fef25c3247.zip b/.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.17.12-cd34146413-fef25c3247.zip new file mode 100644 index 000000000..3905d4e95 Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-import-assertions-npm-7.17.12-cd34146413-fef25c3247.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-typescript-npm-7.17.12-cc4750e4bf-50ab09f195.zip b/.yarn/cache/@babel-plugin-syntax-typescript-npm-7.17.12-cc4750e4bf-50ab09f195.zip new file mode 100644 index 000000000..2b7c50aa2 Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-typescript-npm-7.17.12-cc4750e4bf-50ab09f195.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.17.12-1d55e965f7-48f99e74f5.zip b/.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.17.12-1d55e965f7-48f99e74f5.zip new file mode 100644 index 000000000..9e3b11700 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.17.12-1d55e965f7-48f99e74f5.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.17.12-0e13ebe28a-052dd56eb3.zip b/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.17.12-0e13ebe28a-052dd56eb3.zip new file mode 100644 index 000000000..90223e881 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.17.12-0e13ebe28a-052dd56eb3.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.17.12-54ff324b0d-ea3d4d88e3.zip b/.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.17.12-54ff324b0d-ea3d4d88e3.zip new file mode 100644 index 000000000..fc5847a6e Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.17.12-54ff324b0d-ea3d4d88e3.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-classes-npm-7.17.12-f8386cd86b-0127b1cc43.zip b/.yarn/cache/@babel-plugin-transform-classes-npm-7.17.12-f8386cd86b-0127b1cc43.zip new file mode 100644 index 000000000..26a100560 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-classes-npm-7.17.12-f8386cd86b-0127b1cc43.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.17.12-68a3791927-5d05418617.zip b/.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.17.12-68a3791927-5d05418617.zip new file mode 100644 index 000000000..e4b8676b0 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.17.12-68a3791927-5d05418617.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-destructuring-npm-7.18.0-11bd760aa6-d85d60737c.zip b/.yarn/cache/@babel-plugin-transform-destructuring-npm-7.18.0-11bd760aa6-d85d60737c.zip new file mode 100644 index 000000000..deb6ac4fd Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-destructuring-npm-7.18.0-11bd760aa6-d85d60737c.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.17.12-56608f29a3-fb6ad55053.zip b/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.17.12-56608f29a3-fb6ad55053.zip new file mode 100644 index 000000000..4bd266e1a Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.17.12-56608f29a3-fb6ad55053.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-for-of-npm-7.18.1-b6a28b7eb3-cdc6e1f117.zip b/.yarn/cache/@babel-plugin-transform-for-of-npm-7.18.1-b6a28b7eb3-cdc6e1f117.zip new file mode 100644 index 000000000..78b0dddf6 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-for-of-npm-7.18.1-b6a28b7eb3-cdc6e1f117.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-literals-npm-7.17.12-09c49cee27-09280fc1ed.zip b/.yarn/cache/@babel-plugin-transform-literals-npm-7.17.12-09c49cee27-09280fc1ed.zip new file mode 100644 index 000000000..061e433cf Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-literals-npm-7.17.12-09c49cee27-09280fc1ed.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.0-3ecd6201db-bed3ff5cd8.zip b/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.0-3ecd6201db-bed3ff5cd8.zip new file mode 100644 index 000000000..a3df1520a Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.18.0-3ecd6201db-bed3ff5cd8.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.18.2-2c06bc35c9-99c1c5ce9c.zip b/.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.18.2-2c06bc35c9-99c1c5ce9c.zip new file mode 100644 index 000000000..279bac922 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.18.2-2c06bc35c9-99c1c5ce9c.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.0-8954e88849-80fccfc546.zip b/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.0-8954e88849-80fccfc546.zip new file mode 100644 index 000000000..bca5f810d Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.18.0-8954e88849-80fccfc546.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.0-b9c405f847-4081a79cfd.zip b/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.0-b9c405f847-4081a79cfd.zip new file mode 100644 index 000000000..7e95525d7 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.18.0-b9c405f847-4081a79cfd.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.17.12-d362a2bd05-cff9d91d0a.zip b/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.17.12-d362a2bd05-cff9d91d0a.zip new file mode 100644 index 000000000..b249a4141 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.17.12-d362a2bd05-cff9d91d0a.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-new-target-npm-7.17.12-0ca5523bd4-bec26350fa.zip b/.yarn/cache/@babel-plugin-transform-new-target-npm-7.17.12-0ca5523bd4-bec26350fa.zip new file mode 100644 index 000000000..d9d4699ab Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-new-target-npm-7.17.12-0ca5523bd4-bec26350fa.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-parameters-npm-7.17.12-27d8a22b7a-d9ed5ec61d.zip b/.yarn/cache/@babel-plugin-transform-parameters-npm-7.17.12-27d8a22b7a-d9ed5ec61d.zip new file mode 100644 index 000000000..52c39b1f6 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-parameters-npm-7.17.12-27d8a22b7a-d9ed5ec61d.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.17.12-55a08fa1bd-02e9974d14.zip b/.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.17.12-55a08fa1bd-02e9974d14.zip new file mode 100644 index 000000000..8eaefcb13 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.17.12-55a08fa1bd-02e9974d14.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.0-7c015c9d29-ebacf2bbe9.zip b/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.0-7c015c9d29-ebacf2bbe9.zip new file mode 100644 index 000000000..bc9a3f683 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.18.0-7c015c9d29-ebacf2bbe9.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.17.12-d8642c3fd9-d8a617cb79.zip b/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.17.12-d8642c3fd9-d8a617cb79.zip new file mode 100644 index 000000000..5a44b7e3f Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.17.12-d8642c3fd9-d8a617cb79.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-runtime-npm-7.17.0-a7754eaf5c-9a469d4389.zip b/.yarn/cache/@babel-plugin-transform-runtime-npm-7.18.2-cdb7b66e50-2f41b3a921.zip similarity index 55% rename from .yarn/cache/@babel-plugin-transform-runtime-npm-7.17.0-a7754eaf5c-9a469d4389.zip rename to .yarn/cache/@babel-plugin-transform-runtime-npm-7.18.2-cdb7b66e50-2f41b3a921.zip index 320ae753c..66c24e68e 100644 Binary files a/.yarn/cache/@babel-plugin-transform-runtime-npm-7.17.0-a7754eaf5c-9a469d4389.zip and b/.yarn/cache/@babel-plugin-transform-runtime-npm-7.18.2-cdb7b66e50-2f41b3a921.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-spread-npm-7.17.12-457e6ed1e8-3a95e4f163.zip b/.yarn/cache/@babel-plugin-transform-spread-npm-7.17.12-457e6ed1e8-3a95e4f163.zip new file mode 100644 index 000000000..74fb3731e Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-spread-npm-7.17.12-457e6ed1e8-3a95e4f163.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-template-literals-npm-7.18.2-84c4281b1c-bc0102ed8c.zip b/.yarn/cache/@babel-plugin-transform-template-literals-npm-7.18.2-84c4281b1c-bc0102ed8c.zip new file mode 100644 index 000000000..06c56ffec Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-template-literals-npm-7.18.2-84c4281b1c-bc0102ed8c.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.17.12-2c7d65a0df-e30bd03c8a.zip b/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.17.12-2c7d65a0df-e30bd03c8a.zip new file mode 100644 index 000000000..7a3137f60 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.17.12-2c7d65a0df-e30bd03c8a.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-typescript-npm-7.18.1-ca09c87966-3edc357696.zip b/.yarn/cache/@babel-plugin-transform-typescript-npm-7.18.1-ca09c87966-3edc357696.zip new file mode 100644 index 000000000..07f42ff7e Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-typescript-npm-7.18.1-ca09c87966-3edc357696.zip differ diff --git a/.yarn/cache/@babel-preset-env-npm-7.18.2-c0fe60d405-f81892a797.zip b/.yarn/cache/@babel-preset-env-npm-7.18.2-c0fe60d405-f81892a797.zip new file mode 100644 index 000000000..ad22ffa4f Binary files /dev/null and b/.yarn/cache/@babel-preset-env-npm-7.18.2-c0fe60d405-f81892a797.zip differ diff --git a/.yarn/cache/@babel-preset-react-npm-7.17.12-831a31a026-369712150d.zip b/.yarn/cache/@babel-preset-react-npm-7.17.12-831a31a026-369712150d.zip new file mode 100644 index 000000000..c5f3786ce Binary files /dev/null and b/.yarn/cache/@babel-preset-react-npm-7.17.12-831a31a026-369712150d.zip differ diff --git a/.yarn/cache/@babel-preset-typescript-npm-7.17.12-b5a09238cb-f4ee9eeb0e.zip b/.yarn/cache/@babel-preset-typescript-npm-7.17.12-b5a09238cb-f4ee9eeb0e.zip new file mode 100644 index 000000000..134d688b4 Binary files /dev/null and b/.yarn/cache/@babel-preset-typescript-npm-7.17.12-b5a09238cb-f4ee9eeb0e.zip differ diff --git a/.yarn/cache/@babel-runtime-corejs3-npm-7.18.3-076e6beb32-50319e107e.zip b/.yarn/cache/@babel-runtime-corejs3-npm-7.18.3-076e6beb32-50319e107e.zip new file mode 100644 index 000000000..a646cc2db Binary files /dev/null and b/.yarn/cache/@babel-runtime-corejs3-npm-7.18.3-076e6beb32-50319e107e.zip differ diff --git a/.yarn/cache/@babel-runtime-npm-7.18.3-1883c70fa6-db8526226a.zip b/.yarn/cache/@babel-runtime-npm-7.18.3-1883c70fa6-db8526226a.zip new file mode 100644 index 000000000..53f78dfd2 Binary files /dev/null and b/.yarn/cache/@babel-runtime-npm-7.18.3-1883c70fa6-db8526226a.zip differ diff --git a/.yarn/cache/@babel-traverse-npm-7.18.5-ae99434cd9-cc0470c880.zip b/.yarn/cache/@babel-traverse-npm-7.18.5-ae99434cd9-cc0470c880.zip new file mode 100644 index 000000000..98572046a Binary files /dev/null and b/.yarn/cache/@babel-traverse-npm-7.18.5-ae99434cd9-cc0470c880.zip differ diff --git a/.yarn/cache/@babel-types-npm-7.18.4-758c2695f8-85df59beb9.zip b/.yarn/cache/@babel-types-npm-7.18.4-758c2695f8-85df59beb9.zip new file mode 100644 index 000000000..f88d1e6fc Binary files /dev/null and b/.yarn/cache/@babel-types-npm-7.18.4-758c2695f8-85df59beb9.zip differ diff --git a/.yarn/cache/@docsearch-css-npm-3.0.0-f47b02b354-1a02fb8083.zip b/.yarn/cache/@docsearch-css-npm-3.0.0-f47b02b354-1a02fb8083.zip deleted file mode 100644 index 07e0d3497..000000000 Binary files a/.yarn/cache/@docsearch-css-npm-3.0.0-f47b02b354-1a02fb8083.zip and /dev/null differ diff --git a/.yarn/cache/@docsearch-css-npm-3.1.0-3adedce65e-05e6ed291e.zip b/.yarn/cache/@docsearch-css-npm-3.1.0-3adedce65e-05e6ed291e.zip new file mode 100644 index 000000000..6f495239e Binary files /dev/null and b/.yarn/cache/@docsearch-css-npm-3.1.0-3adedce65e-05e6ed291e.zip differ diff --git a/.yarn/cache/@docsearch-react-npm-3.0.0-22a1ddadbf-965ce14e4d.zip b/.yarn/cache/@docsearch-react-npm-3.0.0-22a1ddadbf-965ce14e4d.zip deleted file mode 100644 index d0aeae252..000000000 Binary files a/.yarn/cache/@docsearch-react-npm-3.0.0-22a1ddadbf-965ce14e4d.zip and /dev/null differ diff --git a/.yarn/cache/@docsearch-react-npm-3.1.0-8022c13aba-d812fd68e1.zip b/.yarn/cache/@docsearch-react-npm-3.1.0-8022c13aba-d812fd68e1.zip new file mode 100644 index 000000000..6fed78ddf Binary files /dev/null and b/.yarn/cache/@docsearch-react-npm-3.1.0-8022c13aba-d812fd68e1.zip differ diff --git a/.yarn/cache/@docusaurus-module-type-aliases-npm-2.0.0-beta.15-3419101392-dd7d3de46a.zip b/.yarn/cache/@docusaurus-module-type-aliases-npm-2.0.0-beta.15-3419101392-dd7d3de46a.zip deleted file mode 100644 index 59abdc3e8..000000000 Binary files a/.yarn/cache/@docusaurus-module-type-aliases-npm-2.0.0-beta.15-3419101392-dd7d3de46a.zip and /dev/null differ diff --git a/.yarn/cache/@isaacs-string-locale-compare-npm-1.1.0-3911094464-7287da5d11.zip b/.yarn/cache/@isaacs-string-locale-compare-npm-1.1.0-3911094464-7287da5d11.zip deleted file mode 100644 index 23f49f77a..000000000 Binary files a/.yarn/cache/@isaacs-string-locale-compare-npm-1.1.0-3911094464-7287da5d11.zip and /dev/null differ diff --git a/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.1-945956db05-e9e7bb3335.zip b/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.1-945956db05-e9e7bb3335.zip new file mode 100644 index 000000000..44dd454e2 Binary files /dev/null and b/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.1-945956db05-e9e7bb3335.zip differ diff --git a/.yarn/cache/@jridgewell-set-array-npm-1.1.1-0d86b67787-cc5d91e038.zip b/.yarn/cache/@jridgewell-set-array-npm-1.1.1-0d86b67787-cc5d91e038.zip new file mode 100644 index 000000000..53c73e503 Binary files /dev/null and b/.yarn/cache/@jridgewell-set-array-npm-1.1.1-0d86b67787-cc5d91e038.zip differ diff --git a/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.13-b1ff8985e7-e38254e830.zip b/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.13-b1ff8985e7-e38254e830.zip new file mode 100644 index 000000000..cf77c3b79 Binary files /dev/null and b/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.13-b1ff8985e7-e38254e830.zip differ diff --git a/.yarn/cache/@npmcli-arborist-npm-5.0.0-66c9fb7c69-f6f531ac77.zip b/.yarn/cache/@npmcli-arborist-npm-5.0.0-66c9fb7c69-f6f531ac77.zip deleted file mode 100644 index 6aac04305..000000000 Binary files a/.yarn/cache/@npmcli-arborist-npm-5.0.0-66c9fb7c69-f6f531ac77.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-ci-detect-npm-2.0.0-e78dfd352c-26e964eca9.zip b/.yarn/cache/@npmcli-ci-detect-npm-2.0.0-e78dfd352c-26e964eca9.zip deleted file mode 100644 index 908d90bc4..000000000 Binary files a/.yarn/cache/@npmcli-ci-detect-npm-2.0.0-e78dfd352c-26e964eca9.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-config-npm-4.0.0-efdc4dc90a-ad07d901fd.zip b/.yarn/cache/@npmcli-config-npm-4.0.0-efdc4dc90a-ad07d901fd.zip deleted file mode 100644 index 41157fe18..000000000 Binary files a/.yarn/cache/@npmcli-config-npm-4.0.0-efdc4dc90a-ad07d901fd.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-disparity-colors-npm-1.0.1-b51b43fcab-20aa252b2d.zip b/.yarn/cache/@npmcli-disparity-colors-npm-1.0.1-b51b43fcab-20aa252b2d.zip deleted file mode 100644 index 94c26ce63..000000000 Binary files a/.yarn/cache/@npmcli-disparity-colors-npm-1.0.1-b51b43fcab-20aa252b2d.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-git-npm-3.0.0-eadc825bfe-3978020d43.zip b/.yarn/cache/@npmcli-git-npm-3.0.0-eadc825bfe-3978020d43.zip deleted file mode 100644 index 309d34be0..000000000 Binary files a/.yarn/cache/@npmcli-git-npm-3.0.0-eadc825bfe-3978020d43.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-installed-package-contents-npm-1.0.7-b15a13ab4f-a4a29b99d4.zip b/.yarn/cache/@npmcli-installed-package-contents-npm-1.0.7-b15a13ab4f-a4a29b99d4.zip deleted file mode 100644 index 7855582b0..000000000 Binary files a/.yarn/cache/@npmcli-installed-package-contents-npm-1.0.7-b15a13ab4f-a4a29b99d4.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-map-workspaces-npm-2.0.1-4911719cd1-16c6738e15.zip b/.yarn/cache/@npmcli-map-workspaces-npm-2.0.1-4911719cd1-16c6738e15.zip deleted file mode 100644 index c33744408..000000000 Binary files a/.yarn/cache/@npmcli-map-workspaces-npm-2.0.1-4911719cd1-16c6738e15.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-metavuln-calculator-npm-3.0.0-b427a6cc1b-55cdfef295.zip b/.yarn/cache/@npmcli-metavuln-calculator-npm-3.0.0-b427a6cc1b-55cdfef295.zip deleted file mode 100644 index c8e295843..000000000 Binary files a/.yarn/cache/@npmcli-metavuln-calculator-npm-3.0.0-b427a6cc1b-55cdfef295.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-name-from-folder-npm-1.0.1-b2b2fde7e0-67339f4096.zip b/.yarn/cache/@npmcli-name-from-folder-npm-1.0.1-b2b2fde7e0-67339f4096.zip deleted file mode 100644 index 472b75fc3..000000000 Binary files a/.yarn/cache/@npmcli-name-from-folder-npm-1.0.1-b2b2fde7e0-67339f4096.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-node-gyp-npm-1.0.3-678a56ae5b-496d5eef2e.zip b/.yarn/cache/@npmcli-node-gyp-npm-1.0.3-678a56ae5b-496d5eef2e.zip deleted file mode 100644 index 11b6fe3a2..000000000 Binary files a/.yarn/cache/@npmcli-node-gyp-npm-1.0.3-678a56ae5b-496d5eef2e.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-package-json-npm-1.0.1-4a9d430114-08b66c8ddb.zip b/.yarn/cache/@npmcli-package-json-npm-1.0.1-4a9d430114-08b66c8ddb.zip deleted file mode 100644 index acb862a2c..000000000 Binary files a/.yarn/cache/@npmcli-package-json-npm-1.0.1-4a9d430114-08b66c8ddb.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-promise-spawn-npm-1.3.2-7762aaada5-543b7c1e26.zip b/.yarn/cache/@npmcli-promise-spawn-npm-1.3.2-7762aaada5-543b7c1e26.zip deleted file mode 100644 index 57ae893f9..000000000 Binary files a/.yarn/cache/@npmcli-promise-spawn-npm-1.3.2-7762aaada5-543b7c1e26.zip and /dev/null differ diff --git a/.yarn/cache/@npmcli-run-script-npm-3.0.0-b91ba156f9-5bf83ea79d.zip b/.yarn/cache/@npmcli-run-script-npm-3.0.0-b91ba156f9-5bf83ea79d.zip deleted file mode 100644 index d13638ce0..000000000 Binary files a/.yarn/cache/@npmcli-run-script-npm-3.0.0-b91ba156f9-5bf83ea79d.zip and /dev/null differ diff --git a/.yarn/cache/@semantic-release-commit-analyzer-npm-9.0.2-6c1ff15dac-f7f759e608.zip b/.yarn/cache/@semantic-release-commit-analyzer-npm-9.0.2-6c1ff15dac-f7f759e608.zip deleted file mode 100644 index cda6ace6e..000000000 Binary files a/.yarn/cache/@semantic-release-commit-analyzer-npm-9.0.2-6c1ff15dac-f7f759e608.zip and /dev/null differ diff --git a/.yarn/cache/@semantic-release-error-npm-2.2.0-284fed197a-a264a8e16a.zip b/.yarn/cache/@semantic-release-error-npm-2.2.0-284fed197a-a264a8e16a.zip deleted file mode 100644 index e2136cc95..000000000 Binary files a/.yarn/cache/@semantic-release-error-npm-2.2.0-284fed197a-a264a8e16a.zip and /dev/null differ diff --git a/.yarn/cache/@semantic-release-error-npm-3.0.0-238eebf38b-29c4391ecb.zip b/.yarn/cache/@semantic-release-error-npm-3.0.0-238eebf38b-29c4391ecb.zip deleted file mode 100644 index 2763afbf3..000000000 Binary files a/.yarn/cache/@semantic-release-error-npm-3.0.0-238eebf38b-29c4391ecb.zip and /dev/null differ diff --git a/.yarn/cache/@semantic-release-github-npm-8.0.2-d074f2abac-260ecf3fc0.zip b/.yarn/cache/@semantic-release-github-npm-8.0.2-d074f2abac-260ecf3fc0.zip deleted file mode 100644 index 94e425535..000000000 Binary files a/.yarn/cache/@semantic-release-github-npm-8.0.2-d074f2abac-260ecf3fc0.zip and /dev/null differ diff --git a/.yarn/cache/@semantic-release-npm-npm-9.0.1-ed6d302b00-cd18eab713.zip b/.yarn/cache/@semantic-release-npm-npm-9.0.1-ed6d302b00-cd18eab713.zip deleted file mode 100644 index 2bff4210c..000000000 Binary files a/.yarn/cache/@semantic-release-npm-npm-9.0.1-ed6d302b00-cd18eab713.zip and /dev/null differ diff --git a/.yarn/cache/@semantic-release-release-notes-generator-npm-10.0.3-91b5c0e396-0237e7e6eb.zip b/.yarn/cache/@semantic-release-release-notes-generator-npm-10.0.3-91b5c0e396-0237e7e6eb.zip deleted file mode 100644 index e8a89f889..000000000 Binary files a/.yarn/cache/@semantic-release-release-notes-generator-npm-10.0.3-91b5c0e396-0237e7e6eb.zip and /dev/null differ diff --git a/.yarn/cache/@slorber-static-site-generator-webpack-plugin-npm-4.0.1-c5e421ac55-6ddf70513c.zip b/.yarn/cache/@slorber-static-site-generator-webpack-plugin-npm-4.0.4-1f03b90622-b6005e5fb3.zip similarity index 71% rename from .yarn/cache/@slorber-static-site-generator-webpack-plugin-npm-4.0.1-c5e421ac55-6ddf70513c.zip rename to .yarn/cache/@slorber-static-site-generator-webpack-plugin-npm-4.0.4-1f03b90622-b6005e5fb3.zip index fbf3f47e6..f8b248ad8 100644 Binary files a/.yarn/cache/@slorber-static-site-generator-webpack-plugin-npm-4.0.1-c5e421ac55-6ddf70513c.zip and b/.yarn/cache/@slorber-static-site-generator-webpack-plugin-npm-4.0.4-1f03b90622-b6005e5fb3.zip differ diff --git a/.yarn/cache/@webpack-cli-configtest-npm-1.1.1-87de53d084-c4e7fca213.zip b/.yarn/cache/@webpack-cli-configtest-npm-1.1.1-87de53d084-c4e7fca213.zip deleted file mode 100644 index fd6faab46..000000000 Binary files a/.yarn/cache/@webpack-cli-configtest-npm-1.1.1-87de53d084-c4e7fca213.zip and /dev/null differ diff --git a/.yarn/cache/@webpack-cli-configtest-npm-1.2.0-728a6bf8bd-a2726cd9ec.zip b/.yarn/cache/@webpack-cli-configtest-npm-1.2.0-728a6bf8bd-a2726cd9ec.zip new file mode 100644 index 000000000..ab6e74d00 Binary files /dev/null and b/.yarn/cache/@webpack-cli-configtest-npm-1.2.0-728a6bf8bd-a2726cd9ec.zip differ diff --git a/.yarn/cache/@webpack-cli-info-npm-1.4.1-34c6d9b3f1-7a7cac2ba4.zip b/.yarn/cache/@webpack-cli-info-npm-1.4.1-34c6d9b3f1-7a7cac2ba4.zip deleted file mode 100644 index 93cc19df9..000000000 Binary files a/.yarn/cache/@webpack-cli-info-npm-1.4.1-34c6d9b3f1-7a7cac2ba4.zip and /dev/null differ diff --git a/.yarn/cache/@webpack-cli-info-npm-1.5.0-9d9627ae19-7f56fe037c.zip b/.yarn/cache/@webpack-cli-info-npm-1.5.0-9d9627ae19-7f56fe037c.zip new file mode 100644 index 000000000..64c90ae88 Binary files /dev/null and b/.yarn/cache/@webpack-cli-info-npm-1.5.0-9d9627ae19-7f56fe037c.zip differ diff --git a/.yarn/cache/@webpack-cli-serve-npm-1.6.1-e0ea59ed03-8b273f906a.zip b/.yarn/cache/@webpack-cli-serve-npm-1.6.1-e0ea59ed03-8b273f906a.zip deleted file mode 100644 index 6da188802..000000000 Binary files a/.yarn/cache/@webpack-cli-serve-npm-1.6.1-e0ea59ed03-8b273f906a.zip and /dev/null differ diff --git a/.yarn/cache/@webpack-cli-serve-npm-1.7.0-2869abfdb4-d475e8effa.zip b/.yarn/cache/@webpack-cli-serve-npm-1.7.0-2869abfdb4-d475e8effa.zip new file mode 100644 index 000000000..a341014c0 Binary files /dev/null and b/.yarn/cache/@webpack-cli-serve-npm-1.7.0-2869abfdb4-d475e8effa.zip differ diff --git a/.yarn/cache/algoliasearch-helper-npm-3.7.0-1e0b4c6909-34afebf5aa.zip b/.yarn/cache/algoliasearch-helper-npm-3.7.0-1e0b4c6909-34afebf5aa.zip deleted file mode 100644 index f66b60711..000000000 Binary files a/.yarn/cache/algoliasearch-helper-npm-3.7.0-1e0b4c6909-34afebf5aa.zip and /dev/null differ diff --git a/.yarn/cache/algoliasearch-helper-npm-3.8.2-df6b64d2eb-fc4daa23f7.zip b/.yarn/cache/algoliasearch-helper-npm-3.8.2-df6b64d2eb-fc4daa23f7.zip new file mode 100644 index 000000000..1adc36a41 Binary files /dev/null and b/.yarn/cache/algoliasearch-helper-npm-3.8.2-df6b64d2eb-fc4daa23f7.zip differ diff --git a/.yarn/cache/algoliasearch-npm-4.13.1-c21b78d633-c2083e7827.zip b/.yarn/cache/algoliasearch-npm-4.13.1-c21b78d633-c2083e7827.zip new file mode 100644 index 000000000..28334a150 Binary files /dev/null and b/.yarn/cache/algoliasearch-npm-4.13.1-c21b78d633-c2083e7827.zip differ diff --git a/.yarn/cache/ansi-escapes-npm-5.0.0-8a26b6a77d-d4b5eb8207.zip b/.yarn/cache/ansi-escapes-npm-5.0.0-8a26b6a77d-d4b5eb8207.zip deleted file mode 100644 index b0fcfc925..000000000 Binary files a/.yarn/cache/ansi-escapes-npm-5.0.0-8a26b6a77d-d4b5eb8207.zip and /dev/null differ diff --git a/.yarn/cache/ansicolors-npm-0.3.2-cc35882814-e84fae7ebc.zip b/.yarn/cache/ansicolors-npm-0.3.2-cc35882814-e84fae7ebc.zip deleted file mode 100644 index ca253e36f..000000000 Binary files a/.yarn/cache/ansicolors-npm-0.3.2-cc35882814-e84fae7ebc.zip and /dev/null differ diff --git a/.yarn/cache/ansistyles-npm-0.1.3-112dc5352d-0072507f97.zip b/.yarn/cache/ansistyles-npm-0.1.3-112dc5352d-0072507f97.zip deleted file mode 100644 index fdfad8ff1..000000000 Binary files a/.yarn/cache/ansistyles-npm-0.1.3-112dc5352d-0072507f97.zip and /dev/null differ diff --git a/.yarn/cache/app-builder-lib-npm-23.0.8-823529a104-c1f72f86ff.zip b/.yarn/cache/app-builder-lib-npm-23.1.0-3ed6c92842-f88982d3f9.zip similarity index 89% rename from .yarn/cache/app-builder-lib-npm-23.0.8-823529a104-c1f72f86ff.zip rename to .yarn/cache/app-builder-lib-npm-23.1.0-3ed6c92842-f88982d3f9.zip index ac0e29734..b855b4f08 100644 Binary files a/.yarn/cache/app-builder-lib-npm-23.0.8-823529a104-c1f72f86ff.zip and b/.yarn/cache/app-builder-lib-npm-23.1.0-3ed6c92842-f88982d3f9.zip differ diff --git a/.yarn/cache/archy-npm-1.0.0-7db8bfdc3b-504ae7af65.zip b/.yarn/cache/archy-npm-1.0.0-7db8bfdc3b-504ae7af65.zip deleted file mode 100644 index 2ab9f6694..000000000 Binary files a/.yarn/cache/archy-npm-1.0.0-7db8bfdc3b-504ae7af65.zip and /dev/null differ diff --git a/.yarn/cache/argv-formatter-npm-1.0.0-6601482fc9-cf95ea091f.zip b/.yarn/cache/argv-formatter-npm-1.0.0-6601482fc9-cf95ea091f.zip deleted file mode 100644 index c726a4daa..000000000 Binary files a/.yarn/cache/argv-formatter-npm-1.0.0-6601482fc9-cf95ea091f.zip and /dev/null differ diff --git a/.yarn/cache/autoprefixer-npm-10.4.7-463a114196-0e55d0d198.zip b/.yarn/cache/autoprefixer-npm-10.4.7-463a114196-0e55d0d198.zip new file mode 100644 index 000000000..ad2777709 Binary files /dev/null and b/.yarn/cache/autoprefixer-npm-10.4.7-463a114196-0e55d0d198.zip differ diff --git a/.yarn/cache/babel-loader-npm-8.2.3-855681b984-78e1e1a919.zip b/.yarn/cache/babel-loader-npm-8.2.3-855681b984-78e1e1a919.zip deleted file mode 100644 index 3332a4f5b..000000000 Binary files a/.yarn/cache/babel-loader-npm-8.2.3-855681b984-78e1e1a919.zip and /dev/null differ diff --git a/.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-a660555788.zip b/.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-a660555788.zip new file mode 100644 index 000000000..5907da00d Binary files /dev/null and b/.yarn/cache/babel-loader-npm-8.2.5-e749e26bb5-a660555788.zip differ diff --git a/.yarn/cache/bin-links-npm-3.0.0-6e5e94c609-61cec54a91.zip b/.yarn/cache/bin-links-npm-3.0.0-6e5e94c609-61cec54a91.zip deleted file mode 100644 index 7f9815c11..000000000 Binary files a/.yarn/cache/bin-links-npm-3.0.0-6e5e94c609-61cec54a91.zip and /dev/null differ diff --git a/.yarn/cache/bottleneck-npm-2.19.5-2c6092aa17-c5eef1bbea.zip b/.yarn/cache/bottleneck-npm-2.19.5-2c6092aa17-c5eef1bbea.zip deleted file mode 100644 index 5f14bbf11..000000000 Binary files a/.yarn/cache/bottleneck-npm-2.19.5-2c6092aa17-c5eef1bbea.zip and /dev/null differ diff --git a/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip b/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip deleted file mode 100644 index 11d5bd0db..000000000 Binary files a/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip and /dev/null differ diff --git a/.yarn/cache/browserslist-npm-4.20.3-d7ff9d00b4-1e4b719ac2.zip b/.yarn/cache/browserslist-npm-4.20.3-d7ff9d00b4-1e4b719ac2.zip new file mode 100644 index 000000000..06a6229a0 Binary files /dev/null and b/.yarn/cache/browserslist-npm-4.20.3-d7ff9d00b4-1e4b719ac2.zip differ diff --git a/.yarn/cache/builder-util-npm-23.0.8-7d72760d3b-926c09a396.zip b/.yarn/cache/builder-util-npm-23.0.9-683316d6e1-14cee9beb7.zip similarity index 81% rename from .yarn/cache/builder-util-npm-23.0.8-7d72760d3b-926c09a396.zip rename to .yarn/cache/builder-util-npm-23.0.9-683316d6e1-14cee9beb7.zip index 9c503e524..46a0ec2b2 100644 Binary files a/.yarn/cache/builder-util-npm-23.0.8-7d72760d3b-926c09a396.zip and b/.yarn/cache/builder-util-npm-23.0.9-683316d6e1-14cee9beb7.zip differ diff --git a/.yarn/cache/builtins-npm-1.0.3-f09d2d57f2-47ce94f7ee.zip b/.yarn/cache/builtins-npm-1.0.3-f09d2d57f2-47ce94f7ee.zip deleted file mode 100644 index 6d3afeb52..000000000 Binary files a/.yarn/cache/builtins-npm-1.0.3-f09d2d57f2-47ce94f7ee.zip and /dev/null differ diff --git a/.yarn/cache/caniuse-lite-npm-1.0.30001343-0bce4a89cb-b8770c0be8.zip b/.yarn/cache/caniuse-lite-npm-1.0.30001343-0bce4a89cb-b8770c0be8.zip new file mode 100644 index 000000000..3ff0c4524 Binary files /dev/null and b/.yarn/cache/caniuse-lite-npm-1.0.30001343-0bce4a89cb-b8770c0be8.zip differ diff --git a/.yarn/cache/cardinal-npm-2.1.1-b77e7b28a7-e8d4ae4643.zip b/.yarn/cache/cardinal-npm-2.1.1-b77e7b28a7-e8d4ae4643.zip deleted file mode 100644 index 7809eee0e..000000000 Binary files a/.yarn/cache/cardinal-npm-2.1.1-b77e7b28a7-e8d4ae4643.zip and /dev/null differ diff --git a/.yarn/cache/cidr-regex-npm-3.1.1-a5f3c156e7-ef9306d086.zip b/.yarn/cache/cidr-regex-npm-3.1.1-a5f3c156e7-ef9306d086.zip deleted file mode 100644 index e9c1144f1..000000000 Binary files a/.yarn/cache/cidr-regex-npm-3.1.1-a5f3c156e7-ef9306d086.zip and /dev/null differ diff --git a/.yarn/cache/clean-css-npm-5.3.0-8dc6397d0c-29e15ef467.zip b/.yarn/cache/clean-css-npm-5.3.0-8dc6397d0c-29e15ef467.zip new file mode 100644 index 000000000..3a2435143 Binary files /dev/null and b/.yarn/cache/clean-css-npm-5.3.0-8dc6397d0c-29e15ef467.zip differ diff --git a/.yarn/cache/cli-columns-npm-4.0.0-7c43bbe435-fa1a3a7f4e.zip b/.yarn/cache/cli-columns-npm-4.0.0-7c43bbe435-fa1a3a7f4e.zip deleted file mode 100644 index 447934e74..000000000 Binary files a/.yarn/cache/cli-columns-npm-4.0.0-7c43bbe435-fa1a3a7f4e.zip and /dev/null differ diff --git a/.yarn/cache/cli-table3-npm-0.6.1-310df32004-956e175f8e.zip b/.yarn/cache/cli-table3-npm-0.6.1-310df32004-956e175f8e.zip deleted file mode 100644 index bf3894cb0..000000000 Binary files a/.yarn/cache/cli-table3-npm-0.6.1-310df32004-956e175f8e.zip and /dev/null differ diff --git a/.yarn/cache/cmd-shim-npm-4.1.0-018e70f153-d25bb57a8a.zip b/.yarn/cache/cmd-shim-npm-4.1.0-018e70f153-d25bb57a8a.zip deleted file mode 100644 index bed795f3d..000000000 Binary files a/.yarn/cache/cmd-shim-npm-4.1.0-018e70f153-d25bb57a8a.zip and /dev/null differ diff --git a/.yarn/cache/colors-npm-1.4.0-7e2cf12234-98aa2c2418.zip b/.yarn/cache/colors-npm-1.4.0-7e2cf12234-98aa2c2418.zip deleted file mode 100644 index 74451b04a..000000000 Binary files a/.yarn/cache/colors-npm-1.4.0-7e2cf12234-98aa2c2418.zip and /dev/null differ diff --git a/.yarn/cache/columnify-npm-1.6.0-aa925d932b-0d59002361.zip b/.yarn/cache/columnify-npm-1.6.0-aa925d932b-0d59002361.zip deleted file mode 100644 index 978e26322..000000000 Binary files a/.yarn/cache/columnify-npm-1.6.0-aa925d932b-0d59002361.zip and /dev/null differ diff --git a/.yarn/cache/common-ancestor-path-npm-1.0.1-27534e68da-1d2e418606.zip b/.yarn/cache/common-ancestor-path-npm-1.0.1-27534e68da-1d2e418606.zip deleted file mode 100644 index 431dda39a..000000000 Binary files a/.yarn/cache/common-ancestor-path-npm-1.0.1-27534e68da-1d2e418606.zip and /dev/null differ diff --git a/.yarn/cache/conf-npm-10.1.1-7016e7965e-f67fd7b33b.zip b/.yarn/cache/conf-npm-10.1.2-b121274334-769459c85d.zip similarity index 70% rename from .yarn/cache/conf-npm-10.1.1-7016e7965e-f67fd7b33b.zip rename to .yarn/cache/conf-npm-10.1.2-b121274334-769459c85d.zip index d711a3325..a22beb416 100644 Binary files a/.yarn/cache/conf-npm-10.1.1-7016e7965e-f67fd7b33b.zip and b/.yarn/cache/conf-npm-10.1.2-b121274334-769459c85d.zip differ diff --git a/.yarn/cache/core-js-compat-npm-3.22.7-b3d0c47df0-036148c150.zip b/.yarn/cache/core-js-compat-npm-3.22.7-b3d0c47df0-036148c150.zip new file mode 100644 index 000000000..fbb47b900 Binary files /dev/null and b/.yarn/cache/core-js-compat-npm-3.22.7-b3d0c47df0-036148c150.zip differ diff --git a/.yarn/cache/core-js-npm-3.21.1-4b064616b4-d68eddd831.zip b/.yarn/cache/core-js-npm-3.21.1-4b064616b4-d68eddd831.zip deleted file mode 100644 index 7e62bb4be..000000000 Binary files a/.yarn/cache/core-js-npm-3.21.1-4b064616b4-d68eddd831.zip and /dev/null differ diff --git a/.yarn/cache/core-js-npm-3.22.7-33aacc1f9a-c5f1d8a96b.zip b/.yarn/cache/core-js-npm-3.22.7-33aacc1f9a-c5f1d8a96b.zip new file mode 100644 index 000000000..18f42f375 Binary files /dev/null and b/.yarn/cache/core-js-npm-3.22.7-33aacc1f9a-c5f1d8a96b.zip differ diff --git a/.yarn/cache/css-declaration-sorter-npm-6.2.2-65a7d02b60-afd3aea1b7.zip b/.yarn/cache/css-declaration-sorter-npm-6.2.2-65a7d02b60-afd3aea1b7.zip new file mode 100644 index 000000000..271e10b11 Binary files /dev/null and b/.yarn/cache/css-declaration-sorter-npm-6.2.2-65a7d02b60-afd3aea1b7.zip differ diff --git a/.yarn/cache/cssnano-npm-5.1.9-d622e9a677-25932e8318.zip b/.yarn/cache/cssnano-npm-5.1.9-d622e9a677-25932e8318.zip new file mode 100644 index 000000000..e27b0b406 Binary files /dev/null and b/.yarn/cache/cssnano-npm-5.1.9-d622e9a677-25932e8318.zip differ diff --git a/.yarn/cache/cssnano-preset-advanced-npm-5.1.12-0e99ee1710-875678aa09.zip b/.yarn/cache/cssnano-preset-advanced-npm-5.1.12-0e99ee1710-875678aa09.zip deleted file mode 100644 index 92757e7f5..000000000 Binary files a/.yarn/cache/cssnano-preset-advanced-npm-5.1.12-0e99ee1710-875678aa09.zip and /dev/null differ diff --git a/.yarn/cache/cssnano-preset-advanced-npm-5.3.5-b876119188-a4c26b684e.zip b/.yarn/cache/cssnano-preset-advanced-npm-5.3.5-b876119188-a4c26b684e.zip new file mode 100644 index 000000000..2f6137519 Binary files /dev/null and b/.yarn/cache/cssnano-preset-advanced-npm-5.3.5-b876119188-a4c26b684e.zip differ diff --git a/.yarn/cache/cssnano-preset-default-npm-5.2.9-ff1ec35352-a93ecc4127.zip b/.yarn/cache/cssnano-preset-default-npm-5.2.9-ff1ec35352-a93ecc4127.zip new file mode 100644 index 000000000..d4f56781c Binary files /dev/null and b/.yarn/cache/cssnano-preset-default-npm-5.2.9-ff1ec35352-a93ecc4127.zip differ diff --git a/.yarn/cache/cssnano-utils-npm-3.1.0-b64fb193eb-975c84ce91.zip b/.yarn/cache/cssnano-utils-npm-3.1.0-b64fb193eb-975c84ce91.zip new file mode 100644 index 000000000..0307f9993 Binary files /dev/null and b/.yarn/cache/cssnano-utils-npm-3.1.0-b64fb193eb-975c84ce91.zip differ diff --git a/.yarn/cache/debuglog-npm-1.0.1-c553c84ea5-970679f2eb.zip b/.yarn/cache/debuglog-npm-1.0.1-c553c84ea5-970679f2eb.zip deleted file mode 100644 index b27761581..000000000 Binary files a/.yarn/cache/debuglog-npm-1.0.1-c553c84ea5-970679f2eb.zip and /dev/null differ diff --git a/.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip b/.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip deleted file mode 100644 index 301b14287..000000000 Binary files a/.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip and /dev/null differ diff --git a/.yarn/cache/dmg-builder-npm-23.0.8-c2be20bef1-8a36e199e1.zip b/.yarn/cache/dmg-builder-npm-23.1.0-b7dd2f997e-e6b2ec5a6f.zip similarity index 96% rename from .yarn/cache/dmg-builder-npm-23.0.8-c2be20bef1-8a36e199e1.zip rename to .yarn/cache/dmg-builder-npm-23.1.0-b7dd2f997e-e6b2ec5a6f.zip index b196fd96c..6e8f57631 100644 Binary files a/.yarn/cache/dmg-builder-npm-23.0.8-c2be20bef1-8a36e199e1.zip and b/.yarn/cache/dmg-builder-npm-23.1.0-b7dd2f997e-e6b2ec5a6f.zip differ diff --git a/.yarn/cache/electron-builder-npm-23.0.8-ac47261c07-56da948ce6.zip b/.yarn/cache/electron-builder-npm-23.1.0-3a5544a633-189f97152e.zip similarity index 93% rename from .yarn/cache/electron-builder-npm-23.0.8-ac47261c07-56da948ce6.zip rename to .yarn/cache/electron-builder-npm-23.1.0-3a5544a633-189f97152e.zip index 0b4e8aba4..70ac745c0 100644 Binary files a/.yarn/cache/electron-builder-npm-23.0.8-ac47261c07-56da948ce6.zip and b/.yarn/cache/electron-builder-npm-23.1.0-3a5544a633-189f97152e.zip differ diff --git a/.yarn/cache/electron-log-npm-4.4.6-db51c7d0ad-cb385a3d22.zip b/.yarn/cache/electron-log-npm-4.4.7-65b9cb00ef-baa5c3cb75.zip similarity index 84% rename from .yarn/cache/electron-log-npm-4.4.6-db51c7d0ad-cb385a3d22.zip rename to .yarn/cache/electron-log-npm-4.4.7-65b9cb00ef-baa5c3cb75.zip index 212f0a893..96cfa3452 100644 Binary files a/.yarn/cache/electron-log-npm-4.4.6-db51c7d0ad-cb385a3d22.zip and b/.yarn/cache/electron-log-npm-4.4.7-65b9cb00ef-baa5c3cb75.zip differ diff --git a/.yarn/cache/electron-npm-16.2.4-f960d55846-f3944f75d4.zip b/.yarn/cache/electron-npm-16.2.4-f960d55846-f3944f75d4.zip deleted file mode 100644 index c5b25a4d1..000000000 Binary files a/.yarn/cache/electron-npm-16.2.4-f960d55846-f3944f75d4.zip and /dev/null differ diff --git a/.yarn/cache/electron-npm-16.2.8-c1e95628a2-05177c7a79.zip b/.yarn/cache/electron-npm-16.2.8-c1e95628a2-05177c7a79.zip new file mode 100644 index 000000000..cc5821c8a Binary files /dev/null and b/.yarn/cache/electron-npm-16.2.8-c1e95628a2-05177c7a79.zip differ diff --git a/.yarn/cache/electron-publish-npm-23.0.8-0127552c20-511ea2a71a.zip b/.yarn/cache/electron-publish-npm-23.0.9-b94ed33c9c-866515f5ee.zip similarity index 62% rename from .yarn/cache/electron-publish-npm-23.0.8-0127552c20-511ea2a71a.zip rename to .yarn/cache/electron-publish-npm-23.0.9-b94ed33c9c-866515f5ee.zip index 1e62f2738..f016f2bc7 100644 Binary files a/.yarn/cache/electron-publish-npm-23.0.8-0127552c20-511ea2a71a.zip and b/.yarn/cache/electron-publish-npm-23.0.9-b94ed33c9c-866515f5ee.zip differ diff --git a/.yarn/cache/electron-store-npm-8.0.1-b7d25b739d-3d708598c5.zip b/.yarn/cache/electron-store-npm-8.0.2-52a17e2f65-b44e5c1ee8.zip similarity index 74% rename from .yarn/cache/electron-store-npm-8.0.1-b7d25b739d-3d708598c5.zip rename to .yarn/cache/electron-store-npm-8.0.2-52a17e2f65-b44e5c1ee8.zip index 892bc3a0f..df7fd1c6c 100644 Binary files a/.yarn/cache/electron-store-npm-8.0.1-b7d25b739d-3d708598c5.zip and b/.yarn/cache/electron-store-npm-8.0.2-52a17e2f65-b44e5c1ee8.zip differ diff --git a/.yarn/cache/electron-to-chromium-npm-1.4.139-14dd94bd5d-b0156f56db.zip b/.yarn/cache/electron-to-chromium-npm-1.4.139-14dd94bd5d-b0156f56db.zip new file mode 100644 index 000000000..8b896c9d8 Binary files /dev/null and b/.yarn/cache/electron-to-chromium-npm-1.4.139-14dd94bd5d-b0156f56db.zip differ diff --git a/.yarn/cache/env-ci-npm-5.5.0-55c3b8f8eb-0984298e0e.zip b/.yarn/cache/env-ci-npm-5.5.0-55c3b8f8eb-0984298e0e.zip deleted file mode 100644 index 7ab886087..000000000 Binary files a/.yarn/cache/env-ci-npm-5.5.0-55c3b8f8eb-0984298e0e.zip and /dev/null differ diff --git a/.yarn/cache/eval-npm-0.1.6-be51e0f222-0e9246bb16.zip b/.yarn/cache/eval-npm-0.1.6-be51e0f222-0e9246bb16.zip deleted file mode 100644 index fcc958fe8..000000000 Binary files a/.yarn/cache/eval-npm-0.1.6-be51e0f222-0e9246bb16.zip and /dev/null differ diff --git a/.yarn/cache/eval-npm-0.1.8-0cd081d9ca-d005567f39.zip b/.yarn/cache/eval-npm-0.1.8-0cd081d9ca-d005567f39.zip new file mode 100644 index 000000000..c7bcc8df7 Binary files /dev/null and b/.yarn/cache/eval-npm-0.1.8-0cd081d9ca-d005567f39.zip differ diff --git a/.yarn/cache/find-versions-npm-4.0.0-e4bd62bace-2b4c749dc3.zip b/.yarn/cache/find-versions-npm-4.0.0-e4bd62bace-2b4c749dc3.zip deleted file mode 100644 index 0b0e9f7d2..000000000 Binary files a/.yarn/cache/find-versions-npm-4.0.0-e4bd62bace-2b4c749dc3.zip and /dev/null differ diff --git a/.yarn/cache/fork-ts-checker-webpack-plugin-npm-6.5.0-47c96d60fd-95d145ab79.zip b/.yarn/cache/fork-ts-checker-webpack-plugin-npm-6.5.2-4c2c717e6d-c823de02ee.zip similarity index 84% rename from .yarn/cache/fork-ts-checker-webpack-plugin-npm-6.5.0-47c96d60fd-95d145ab79.zip rename to .yarn/cache/fork-ts-checker-webpack-plugin-npm-6.5.2-4c2c717e6d-c823de02ee.zip index b2d295b5f..6d90e8be6 100644 Binary files a/.yarn/cache/fork-ts-checker-webpack-plugin-npm-6.5.0-47c96d60fd-95d145ab79.zip and b/.yarn/cache/fork-ts-checker-webpack-plugin-npm-6.5.2-4c2c717e6d-c823de02ee.zip differ diff --git a/.yarn/cache/fraction.js-npm-4.2.0-28efe4afc7-8c76a6e21d.zip b/.yarn/cache/fraction.js-npm-4.2.0-28efe4afc7-8c76a6e21d.zip new file mode 100644 index 000000000..ac7ea7886 Binary files /dev/null and b/.yarn/cache/fraction.js-npm-4.2.0-28efe4afc7-8c76a6e21d.zip differ diff --git a/.yarn/cache/fromentries-npm-1.3.2-f5392090b8-33729c529c.zip b/.yarn/cache/fromentries-npm-1.3.2-f5392090b8-33729c529c.zip deleted file mode 100644 index 060711fe3..000000000 Binary files a/.yarn/cache/fromentries-npm-1.3.2-f5392090b8-33729c529c.zip and /dev/null differ diff --git a/.yarn/cache/git-log-parser-npm-1.2.0-04639ce6bf-57294e72f9.zip b/.yarn/cache/git-log-parser-npm-1.2.0-04639ce6bf-57294e72f9.zip deleted file mode 100644 index e8fb5de0c..000000000 Binary files a/.yarn/cache/git-log-parser-npm-1.2.0-04639ce6bf-57294e72f9.zip and /dev/null differ diff --git a/.yarn/cache/hook-std-npm-2.0.0-26f4bcefd5-1e6051dd3b.zip b/.yarn/cache/hook-std-npm-2.0.0-26f4bcefd5-1e6051dd3b.zip deleted file mode 100644 index 83a105464..000000000 Binary files a/.yarn/cache/hook-std-npm-2.0.0-26f4bcefd5-1e6051dd3b.zip and /dev/null differ diff --git a/.yarn/cache/html-tags-npm-3.1.0-2be8f49b1e-67587f2d40.zip b/.yarn/cache/html-tags-npm-3.1.0-2be8f49b1e-67587f2d40.zip deleted file mode 100644 index c9ecdd4a9..000000000 Binary files a/.yarn/cache/html-tags-npm-3.1.0-2be8f49b1e-67587f2d40.zip and /dev/null differ diff --git a/.yarn/cache/html-tags-npm-3.2.0-cdd16b1446-a0c9e96ac2.zip b/.yarn/cache/html-tags-npm-3.2.0-cdd16b1446-a0c9e96ac2.zip new file mode 100644 index 000000000..272687d27 Binary files /dev/null and b/.yarn/cache/html-tags-npm-3.2.0-cdd16b1446-a0c9e96ac2.zip differ diff --git a/.yarn/cache/ignore-walk-npm-4.0.1-e301e7e75f-903cd5cb68.zip b/.yarn/cache/ignore-walk-npm-4.0.1-e301e7e75f-903cd5cb68.zip deleted file mode 100644 index a61782424..000000000 Binary files a/.yarn/cache/ignore-walk-npm-4.0.1-e301e7e75f-903cd5cb68.zip and /dev/null differ diff --git a/.yarn/cache/immer-npm-9.0.14-0baed19a8d-17f1365c06.zip b/.yarn/cache/immer-npm-9.0.14-0baed19a8d-17f1365c06.zip new file mode 100644 index 000000000..ef2facf42 Binary files /dev/null and b/.yarn/cache/immer-npm-9.0.14-0baed19a8d-17f1365c06.zip differ diff --git a/.yarn/cache/import-from-npm-4.0.0-e5a38cbb8a-1fa29c05b0.zip b/.yarn/cache/import-from-npm-4.0.0-e5a38cbb8a-1fa29c05b0.zip deleted file mode 100644 index 5459a58c3..000000000 Binary files a/.yarn/cache/import-from-npm-4.0.0-e5a38cbb8a-1fa29c05b0.zip and /dev/null differ diff --git a/.yarn/cache/init-package-json-npm-3.0.0-4fd82afb29-f8af9be20a.zip b/.yarn/cache/init-package-json-npm-3.0.0-4fd82afb29-f8af9be20a.zip deleted file mode 100644 index 9909633a5..000000000 Binary files a/.yarn/cache/init-package-json-npm-3.0.0-4fd82afb29-f8af9be20a.zip and /dev/null differ diff --git a/.yarn/cache/ip-regex-npm-4.3.0-4ac12c6be9-7ff904b891.zip b/.yarn/cache/ip-regex-npm-4.3.0-4ac12c6be9-7ff904b891.zip deleted file mode 100644 index 57f27084c..000000000 Binary files a/.yarn/cache/ip-regex-npm-4.3.0-4ac12c6be9-7ff904b891.zip and /dev/null differ diff --git a/.yarn/cache/is-cidr-npm-4.0.2-74bbb734d3-ee6e670e65.zip b/.yarn/cache/is-cidr-npm-4.0.2-74bbb734d3-ee6e670e65.zip deleted file mode 100644 index bc31e9020..000000000 Binary files a/.yarn/cache/is-cidr-npm-4.0.2-74bbb734d3-ee6e670e65.zip and /dev/null differ diff --git a/.yarn/cache/issue-parser-npm-6.0.0-ef081f1601-3357928af6.zip b/.yarn/cache/issue-parser-npm-6.0.0-ef081f1601-3357928af6.zip deleted file mode 100644 index 05ade293e..000000000 Binary files a/.yarn/cache/issue-parser-npm-6.0.0-ef081f1601-3357928af6.zip and /dev/null differ diff --git a/.yarn/cache/java-properties-npm-1.0.2-5b04acc097-9a08677834.zip b/.yarn/cache/java-properties-npm-1.0.2-5b04acc097-9a08677834.zip deleted file mode 100644 index 969270344..000000000 Binary files a/.yarn/cache/java-properties-npm-1.0.2-5b04acc097-9a08677834.zip and /dev/null differ diff --git a/.yarn/cache/json-stringify-nice-npm-1.1.4-0b0ddb188b-6ddf781148.zip b/.yarn/cache/json-stringify-nice-npm-1.1.4-0b0ddb188b-6ddf781148.zip deleted file mode 100644 index f9a271204..000000000 Binary files a/.yarn/cache/json-stringify-nice-npm-1.1.4-0b0ddb188b-6ddf781148.zip and /dev/null differ diff --git a/.yarn/cache/json5-npm-2.2.1-44675c859c-74b8a23b10.zip b/.yarn/cache/json5-npm-2.2.1-44675c859c-74b8a23b10.zip new file mode 100644 index 000000000..99c2b0de7 Binary files /dev/null and b/.yarn/cache/json5-npm-2.2.1-44675c859c-74b8a23b10.zip differ diff --git a/.yarn/cache/just-diff-apply-npm-4.0.1-dfc12fe759-fdb58c0c8d.zip b/.yarn/cache/just-diff-apply-npm-4.0.1-dfc12fe759-fdb58c0c8d.zip deleted file mode 100644 index d9747215b..000000000 Binary files a/.yarn/cache/just-diff-apply-npm-4.0.1-dfc12fe759-fdb58c0c8d.zip and /dev/null differ diff --git a/.yarn/cache/just-diff-npm-5.0.1-6477d7b637-efbdb65298.zip b/.yarn/cache/just-diff-npm-5.0.1-6477d7b637-efbdb65298.zip deleted file mode 100644 index f0bddd56f..000000000 Binary files a/.yarn/cache/just-diff-npm-5.0.1-6477d7b637-efbdb65298.zip and /dev/null differ diff --git a/.yarn/cache/libnpmaccess-npm-6.0.0-1de2ec1649-1032874218.zip b/.yarn/cache/libnpmaccess-npm-6.0.0-1de2ec1649-1032874218.zip deleted file mode 100644 index d7ca10f53..000000000 Binary files a/.yarn/cache/libnpmaccess-npm-6.0.0-1de2ec1649-1032874218.zip and /dev/null differ diff --git a/.yarn/cache/libnpmdiff-npm-4.0.0-e9278e144c-14c1287ee6.zip b/.yarn/cache/libnpmdiff-npm-4.0.0-e9278e144c-14c1287ee6.zip deleted file mode 100644 index dfcb67886..000000000 Binary files a/.yarn/cache/libnpmdiff-npm-4.0.0-e9278e144c-14c1287ee6.zip and /dev/null differ diff --git a/.yarn/cache/libnpmexec-npm-4.0.0-355549c3c1-2b12f80b73.zip b/.yarn/cache/libnpmexec-npm-4.0.0-355549c3c1-2b12f80b73.zip deleted file mode 100644 index 4fc6815d9..000000000 Binary files a/.yarn/cache/libnpmexec-npm-4.0.0-355549c3c1-2b12f80b73.zip and /dev/null differ diff --git a/.yarn/cache/libnpmfund-npm-3.0.0-9bcc511445-1742b170c0.zip b/.yarn/cache/libnpmfund-npm-3.0.0-9bcc511445-1742b170c0.zip deleted file mode 100644 index b8659333c..000000000 Binary files a/.yarn/cache/libnpmfund-npm-3.0.0-9bcc511445-1742b170c0.zip and /dev/null differ diff --git a/.yarn/cache/libnpmhook-npm-8.0.0-faa8b190c9-1921c9cfe8.zip b/.yarn/cache/libnpmhook-npm-8.0.0-faa8b190c9-1921c9cfe8.zip deleted file mode 100644 index 9c36836d5..000000000 Binary files a/.yarn/cache/libnpmhook-npm-8.0.0-faa8b190c9-1921c9cfe8.zip and /dev/null differ diff --git a/.yarn/cache/libnpmorg-npm-4.0.0-e94e240307-bab42f7f1a.zip b/.yarn/cache/libnpmorg-npm-4.0.0-e94e240307-bab42f7f1a.zip deleted file mode 100644 index 293cd5da7..000000000 Binary files a/.yarn/cache/libnpmorg-npm-4.0.0-e94e240307-bab42f7f1a.zip and /dev/null differ diff --git a/.yarn/cache/libnpmpack-npm-4.0.0-47f48e42f0-ecf49822fd.zip b/.yarn/cache/libnpmpack-npm-4.0.0-47f48e42f0-ecf49822fd.zip deleted file mode 100644 index ac1811a9a..000000000 Binary files a/.yarn/cache/libnpmpack-npm-4.0.0-47f48e42f0-ecf49822fd.zip and /dev/null differ diff --git a/.yarn/cache/libnpmpublish-npm-6.0.0-0f4d77d5c2-7722e54e3c.zip b/.yarn/cache/libnpmpublish-npm-6.0.0-0f4d77d5c2-7722e54e3c.zip deleted file mode 100644 index 70f752936..000000000 Binary files a/.yarn/cache/libnpmpublish-npm-6.0.0-0f4d77d5c2-7722e54e3c.zip and /dev/null differ diff --git a/.yarn/cache/libnpmsearch-npm-5.0.0-274266cfb4-78445bd936.zip b/.yarn/cache/libnpmsearch-npm-5.0.0-274266cfb4-78445bd936.zip deleted file mode 100644 index c97f4513f..000000000 Binary files a/.yarn/cache/libnpmsearch-npm-5.0.0-274266cfb4-78445bd936.zip and /dev/null differ diff --git a/.yarn/cache/libnpmteam-npm-4.0.0-fe88b5dda6-e3bcb382c1.zip b/.yarn/cache/libnpmteam-npm-4.0.0-fe88b5dda6-e3bcb382c1.zip deleted file mode 100644 index 129457392..000000000 Binary files a/.yarn/cache/libnpmteam-npm-4.0.0-fe88b5dda6-e3bcb382c1.zip and /dev/null differ diff --git a/.yarn/cache/libnpmversion-npm-3.0.0-212fadb795-2fa8314ba8.zip b/.yarn/cache/libnpmversion-npm-3.0.0-212fadb795-2fa8314ba8.zip deleted file mode 100644 index 729b73e5b..000000000 Binary files a/.yarn/cache/libnpmversion-npm-3.0.0-212fadb795-2fa8314ba8.zip and /dev/null differ diff --git a/.yarn/cache/loader-utils-npm-1.4.0-a56254a277-d150b15e7a.zip b/.yarn/cache/loader-utils-npm-1.4.0-a56254a277-d150b15e7a.zip deleted file mode 100644 index c13e2dc48..000000000 Binary files a/.yarn/cache/loader-utils-npm-1.4.0-a56254a277-d150b15e7a.zip and /dev/null differ diff --git a/.yarn/cache/lodash.capitalize-npm-4.2.1-fe742c2310-d9195f31d4.zip b/.yarn/cache/lodash.capitalize-npm-4.2.1-fe742c2310-d9195f31d4.zip deleted file mode 100644 index 84f315045..000000000 Binary files a/.yarn/cache/lodash.capitalize-npm-4.2.1-fe742c2310-d9195f31d4.zip and /dev/null differ diff --git a/.yarn/cache/lodash.uniqby-npm-4.7.0-8d0bd68e95-659264545a.zip b/.yarn/cache/lodash.uniqby-npm-4.7.0-8d0bd68e95-659264545a.zip deleted file mode 100644 index b1c78cb1a..000000000 Binary files a/.yarn/cache/lodash.uniqby-npm-4.7.0-8d0bd68e95-659264545a.zip and /dev/null differ diff --git a/.yarn/cache/lru-cache-npm-7.4.0-568d068d65-f966d8b683.zip b/.yarn/cache/lru-cache-npm-7.4.0-568d068d65-f966d8b683.zip deleted file mode 100644 index 897759553..000000000 Binary files a/.yarn/cache/lru-cache-npm-7.4.0-568d068d65-f966d8b683.zip and /dev/null differ diff --git a/.yarn/cache/magic-string-npm-0.25.7-0a0bd9c864-727a1fb70f.zip b/.yarn/cache/magic-string-npm-0.25.7-0a0bd9c864-727a1fb70f.zip deleted file mode 100644 index 80ff7d3a6..000000000 Binary files a/.yarn/cache/magic-string-npm-0.25.7-0a0bd9c864-727a1fb70f.zip and /dev/null differ diff --git a/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-9a0e55a15c.zip b/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-9a0e55a15c.zip new file mode 100644 index 000000000..caa6d6b49 Binary files /dev/null and b/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-9a0e55a15c.zip differ diff --git a/.yarn/cache/make-fetch-happen-npm-10.0.3-e552879254-edf3ba5119.zip b/.yarn/cache/make-fetch-happen-npm-10.0.3-e552879254-edf3ba5119.zip deleted file mode 100644 index f28390c3e..000000000 Binary files a/.yarn/cache/make-fetch-happen-npm-10.0.3-e552879254-edf3ba5119.zip and /dev/null differ diff --git a/.yarn/cache/marked-npm-4.0.12-1fc6e0ed31-7575117f85.zip b/.yarn/cache/marked-npm-4.0.12-1fc6e0ed31-7575117f85.zip deleted file mode 100644 index f149f56e5..000000000 Binary files a/.yarn/cache/marked-npm-4.0.12-1fc6e0ed31-7575117f85.zip and /dev/null differ diff --git a/.yarn/cache/marked-terminal-npm-5.1.1-dc605719af-24ceb02ebd.zip b/.yarn/cache/marked-terminal-npm-5.1.1-dc605719af-24ceb02ebd.zip deleted file mode 100644 index ec6cb7477..000000000 Binary files a/.yarn/cache/marked-terminal-npm-5.1.1-dc605719af-24ceb02ebd.zip and /dev/null differ diff --git a/.yarn/cache/mime-npm-3.0.0-8d911e4c06-f43f9b7bfa.zip b/.yarn/cache/mime-npm-3.0.0-8d911e4c06-f43f9b7bfa.zip deleted file mode 100644 index 530bd2509..000000000 Binary files a/.yarn/cache/mime-npm-3.0.0-8d911e4c06-f43f9b7bfa.zip and /dev/null differ diff --git a/.yarn/cache/mini-css-extract-plugin-npm-2.6.1-4e6d2beaf0-df60840404.zip b/.yarn/cache/mini-css-extract-plugin-npm-2.6.1-4e6d2beaf0-df60840404.zip new file mode 100644 index 000000000..4b57531c5 Binary files /dev/null and b/.yarn/cache/mini-css-extract-plugin-npm-2.6.1-4e6d2beaf0-df60840404.zip differ diff --git a/.yarn/cache/minimatch-npm-5.0.1-612724f6f0-b34b98463d.zip b/.yarn/cache/minimatch-npm-5.0.1-612724f6f0-b34b98463d.zip deleted file mode 100644 index 3e1e05a8e..000000000 Binary files a/.yarn/cache/minimatch-npm-5.0.1-612724f6f0-b34b98463d.zip and /dev/null differ diff --git a/.yarn/cache/minipass-json-stream-npm-1.0.1-96490706d6-791b696a27.zip b/.yarn/cache/minipass-json-stream-npm-1.0.1-96490706d6-791b696a27.zip deleted file mode 100644 index 8f95147be..000000000 Binary files a/.yarn/cache/minipass-json-stream-npm-1.0.1-96490706d6-791b696a27.zip and /dev/null differ diff --git a/.yarn/cache/mkdirp-infer-owner-npm-2.0.0-de1fb05d31-d8f4ecd32f.zip b/.yarn/cache/mkdirp-infer-owner-npm-2.0.0-de1fb05d31-d8f4ecd32f.zip deleted file mode 100644 index e38a4d3d9..000000000 Binary files a/.yarn/cache/mkdirp-infer-owner-npm-2.0.0-de1fb05d31-d8f4ecd32f.zip and /dev/null differ diff --git a/.yarn/cache/nerf-dart-npm-1.0.0-c73e718e56-0e5508d83e.zip b/.yarn/cache/nerf-dart-npm-1.0.0-c73e718e56-0e5508d83e.zip deleted file mode 100644 index 6a29177e6..000000000 Binary files a/.yarn/cache/nerf-dart-npm-1.0.0-c73e718e56-0e5508d83e.zip and /dev/null differ diff --git a/.yarn/cache/node-gyp-npm-9.0.0-0eccfca4d1-4d8ef8860f.zip b/.yarn/cache/node-gyp-npm-9.0.0-0eccfca4d1-4d8ef8860f.zip deleted file mode 100644 index 417b1c24f..000000000 Binary files a/.yarn/cache/node-gyp-npm-9.0.0-0eccfca4d1-4d8ef8860f.zip and /dev/null differ diff --git a/.yarn/cache/node-releases-npm-2.0.5-ddba717991-e85d949add.zip b/.yarn/cache/node-releases-npm-2.0.5-ddba717991-e85d949add.zip new file mode 100644 index 000000000..82aaf5227 Binary files /dev/null and b/.yarn/cache/node-releases-npm-2.0.5-ddba717991-e85d949add.zip differ diff --git a/.yarn/cache/npm-audit-report-npm-2.1.5-661eac8850-9199c4331a.zip b/.yarn/cache/npm-audit-report-npm-2.1.5-661eac8850-9199c4331a.zip deleted file mode 100644 index b90ed9115..000000000 Binary files a/.yarn/cache/npm-audit-report-npm-2.1.5-661eac8850-9199c4331a.zip and /dev/null differ diff --git a/.yarn/cache/npm-bundled-npm-1.1.2-e299e533ef-6e599155ef.zip b/.yarn/cache/npm-bundled-npm-1.1.2-e299e533ef-6e599155ef.zip deleted file mode 100644 index 65958555c..000000000 Binary files a/.yarn/cache/npm-bundled-npm-1.1.2-e299e533ef-6e599155ef.zip and /dev/null differ diff --git a/.yarn/cache/npm-install-checks-npm-4.0.0-4dabe69bc2-8308ff48e6.zip b/.yarn/cache/npm-install-checks-npm-4.0.0-4dabe69bc2-8308ff48e6.zip deleted file mode 100644 index bdeb39c5e..000000000 Binary files a/.yarn/cache/npm-install-checks-npm-4.0.0-4dabe69bc2-8308ff48e6.zip and /dev/null differ diff --git a/.yarn/cache/npm-normalize-package-bin-npm-1.0.1-2cf38a5d95-ae7f15155a.zip b/.yarn/cache/npm-normalize-package-bin-npm-1.0.1-2cf38a5d95-ae7f15155a.zip deleted file mode 100644 index e76c781b8..000000000 Binary files a/.yarn/cache/npm-normalize-package-bin-npm-1.0.1-2cf38a5d95-ae7f15155a.zip and /dev/null differ diff --git a/.yarn/cache/npm-npm-8.5.2-22eecd54ce-b43ffe2c8c.zip b/.yarn/cache/npm-npm-8.5.2-22eecd54ce-b43ffe2c8c.zip deleted file mode 100644 index 9a803bf9a..000000000 Binary files a/.yarn/cache/npm-npm-8.5.2-22eecd54ce-b43ffe2c8c.zip and /dev/null differ diff --git a/.yarn/cache/npm-package-arg-npm-9.0.0-cc084387d1-88cea0eb86.zip b/.yarn/cache/npm-package-arg-npm-9.0.0-cc084387d1-88cea0eb86.zip deleted file mode 100644 index b3a90bdb3..000000000 Binary files a/.yarn/cache/npm-package-arg-npm-9.0.0-cc084387d1-88cea0eb86.zip and /dev/null differ diff --git a/.yarn/cache/npm-packlist-npm-3.0.0-9671ff7386-8550ecdec5.zip b/.yarn/cache/npm-packlist-npm-3.0.0-9671ff7386-8550ecdec5.zip deleted file mode 100644 index 37854d61b..000000000 Binary files a/.yarn/cache/npm-packlist-npm-3.0.0-9671ff7386-8550ecdec5.zip and /dev/null differ diff --git a/.yarn/cache/npm-pick-manifest-npm-7.0.0-d584b9faa3-3ef8231429.zip b/.yarn/cache/npm-pick-manifest-npm-7.0.0-d584b9faa3-3ef8231429.zip deleted file mode 100644 index 90bc18ada..000000000 Binary files a/.yarn/cache/npm-pick-manifest-npm-7.0.0-d584b9faa3-3ef8231429.zip and /dev/null differ diff --git a/.yarn/cache/npm-profile-npm-6.0.2-a9c58e7b70-15ed13a350.zip b/.yarn/cache/npm-profile-npm-6.0.2-a9c58e7b70-15ed13a350.zip deleted file mode 100644 index adbbe895e..000000000 Binary files a/.yarn/cache/npm-profile-npm-6.0.2-a9c58e7b70-15ed13a350.zip and /dev/null differ diff --git a/.yarn/cache/npm-registry-fetch-npm-13.0.0-bba0767253-3cb3275e71.zip b/.yarn/cache/npm-registry-fetch-npm-13.0.0-bba0767253-3cb3275e71.zip deleted file mode 100644 index 5edd018a4..000000000 Binary files a/.yarn/cache/npm-registry-fetch-npm-13.0.0-bba0767253-3cb3275e71.zip and /dev/null differ diff --git a/.yarn/cache/npm-user-validate-npm-1.0.1-337763b5fd-38ec7eb78a.zip b/.yarn/cache/npm-user-validate-npm-1.0.1-337763b5fd-38ec7eb78a.zip deleted file mode 100644 index 05dd125bc..000000000 Binary files a/.yarn/cache/npm-user-validate-npm-1.0.1-337763b5fd-38ec7eb78a.zip and /dev/null differ diff --git a/.yarn/cache/p-each-series-npm-2.2.0-b9907a1ae6-5fbe2f1f19.zip b/.yarn/cache/p-each-series-npm-2.2.0-b9907a1ae6-5fbe2f1f19.zip deleted file mode 100644 index 9b881720e..000000000 Binary files a/.yarn/cache/p-each-series-npm-2.2.0-b9907a1ae6-5fbe2f1f19.zip and /dev/null differ diff --git a/.yarn/cache/p-reduce-npm-2.1.0-f5593a333c-99b26d3606.zip b/.yarn/cache/p-reduce-npm-2.1.0-f5593a333c-99b26d3606.zip deleted file mode 100644 index 13d12a3cd..000000000 Binary files a/.yarn/cache/p-reduce-npm-2.1.0-f5593a333c-99b26d3606.zip and /dev/null differ diff --git a/.yarn/cache/pacote-npm-13.0.3-f7f47a2dfa-d77427d3d3.zip b/.yarn/cache/pacote-npm-13.0.3-f7f47a2dfa-d77427d3d3.zip deleted file mode 100644 index d5915d6ef..000000000 Binary files a/.yarn/cache/pacote-npm-13.0.3-f7f47a2dfa-d77427d3d3.zip and /dev/null differ diff --git a/.yarn/cache/parse-conflict-json-npm-2.0.1-7cdcd9a753-398728731f.zip b/.yarn/cache/parse-conflict-json-npm-2.0.1-7cdcd9a753-398728731f.zip deleted file mode 100644 index 0ea0ac9ae..000000000 Binary files a/.yarn/cache/parse-conflict-json-npm-2.0.1-7cdcd9a753-398728731f.zip and /dev/null differ diff --git a/.yarn/cache/pkg-conf-npm-2.1.0-c6489a73d3-b507751572.zip b/.yarn/cache/pkg-conf-npm-2.1.0-c6489a73d3-b507751572.zip deleted file mode 100644 index 18d23ae7f..000000000 Binary files a/.yarn/cache/pkg-conf-npm-2.1.0-c6489a73d3-b507751572.zip and /dev/null differ diff --git a/.yarn/cache/postcss-colormin-npm-5.3.0-a0a0e0e004-3d3e3cc250.zip b/.yarn/cache/postcss-colormin-npm-5.3.0-a0a0e0e004-3d3e3cc250.zip new file mode 100644 index 000000000..9b0bfc40b Binary files /dev/null and b/.yarn/cache/postcss-colormin-npm-5.3.0-a0a0e0e004-3d3e3cc250.zip differ diff --git a/.yarn/cache/postcss-convert-values-npm-5.1.1-04620e5af5-5f582b2159.zip b/.yarn/cache/postcss-convert-values-npm-5.1.1-04620e5af5-5f582b2159.zip new file mode 100644 index 000000000..d6e38ec9e Binary files /dev/null and b/.yarn/cache/postcss-convert-values-npm-5.1.1-04620e5af5-5f582b2159.zip differ diff --git a/.yarn/cache/postcss-discard-comments-npm-5.1.1-81e5c07fcf-578c3cb3e8.zip b/.yarn/cache/postcss-discard-comments-npm-5.1.1-81e5c07fcf-578c3cb3e8.zip new file mode 100644 index 000000000..cd7d27685 Binary files /dev/null and b/.yarn/cache/postcss-discard-comments-npm-5.1.1-81e5c07fcf-578c3cb3e8.zip differ diff --git a/.yarn/cache/postcss-discard-duplicates-npm-5.1.0-c9479e6afc-88d6964201.zip b/.yarn/cache/postcss-discard-duplicates-npm-5.1.0-c9479e6afc-88d6964201.zip new file mode 100644 index 000000000..f9ab8388a Binary files /dev/null and b/.yarn/cache/postcss-discard-duplicates-npm-5.1.0-c9479e6afc-88d6964201.zip differ diff --git a/.yarn/cache/postcss-discard-empty-npm-5.1.1-7a8ea765fa-970adb12fa.zip b/.yarn/cache/postcss-discard-empty-npm-5.1.1-7a8ea765fa-970adb12fa.zip new file mode 100644 index 000000000..7de67ebf5 Binary files /dev/null and b/.yarn/cache/postcss-discard-empty-npm-5.1.1-7a8ea765fa-970adb12fa.zip differ diff --git a/.yarn/cache/postcss-discard-overridden-npm-5.1.0-0d3b10779a-d64d4a545a.zip b/.yarn/cache/postcss-discard-overridden-npm-5.1.0-0d3b10779a-d64d4a545a.zip new file mode 100644 index 000000000..c4bbb29bd Binary files /dev/null and b/.yarn/cache/postcss-discard-overridden-npm-5.1.0-0d3b10779a-d64d4a545a.zip differ diff --git a/.yarn/cache/postcss-discard-unused-npm-5.0.3-531b056a38-36074e7ce8.zip b/.yarn/cache/postcss-discard-unused-npm-5.0.3-531b056a38-36074e7ce8.zip deleted file mode 100644 index 66659cacf..000000000 Binary files a/.yarn/cache/postcss-discard-unused-npm-5.0.3-531b056a38-36074e7ce8.zip and /dev/null differ diff --git a/.yarn/cache/postcss-discard-unused-npm-5.1.0-ea3f591ada-5c09403a34.zip b/.yarn/cache/postcss-discard-unused-npm-5.1.0-ea3f591ada-5c09403a34.zip new file mode 100644 index 000000000..4a961117e Binary files /dev/null and b/.yarn/cache/postcss-discard-unused-npm-5.1.0-ea3f591ada-5c09403a34.zip differ diff --git a/.yarn/cache/postcss-merge-idents-npm-5.0.3-2909cdfa95-ed211d59df.zip b/.yarn/cache/postcss-merge-idents-npm-5.0.3-2909cdfa95-ed211d59df.zip deleted file mode 100644 index d745ab7a1..000000000 Binary files a/.yarn/cache/postcss-merge-idents-npm-5.0.3-2909cdfa95-ed211d59df.zip and /dev/null differ diff --git a/.yarn/cache/postcss-merge-idents-npm-5.1.1-91959f5d9c-ed8a673617.zip b/.yarn/cache/postcss-merge-idents-npm-5.1.1-91959f5d9c-ed8a673617.zip new file mode 100644 index 000000000..c7fb36d3c Binary files /dev/null and b/.yarn/cache/postcss-merge-idents-npm-5.1.1-91959f5d9c-ed8a673617.zip differ diff --git a/.yarn/cache/postcss-merge-longhand-npm-5.1.5-14d2257664-1d51e3d6a1.zip b/.yarn/cache/postcss-merge-longhand-npm-5.1.5-14d2257664-1d51e3d6a1.zip new file mode 100644 index 000000000..fcea3606b Binary files /dev/null and b/.yarn/cache/postcss-merge-longhand-npm-5.1.5-14d2257664-1d51e3d6a1.zip differ diff --git a/.yarn/cache/postcss-merge-rules-npm-5.1.1-5f6585416c-163cba5b68.zip b/.yarn/cache/postcss-merge-rules-npm-5.1.1-5f6585416c-163cba5b68.zip new file mode 100644 index 000000000..cade1ef6d Binary files /dev/null and b/.yarn/cache/postcss-merge-rules-npm-5.1.1-5f6585416c-163cba5b68.zip differ diff --git a/.yarn/cache/postcss-minify-font-values-npm-5.1.0-8f34fc7a1f-35e858fa41.zip b/.yarn/cache/postcss-minify-font-values-npm-5.1.0-8f34fc7a1f-35e858fa41.zip new file mode 100644 index 000000000..ef8e81fbe Binary files /dev/null and b/.yarn/cache/postcss-minify-font-values-npm-5.1.0-8f34fc7a1f-35e858fa41.zip differ diff --git a/.yarn/cache/postcss-minify-gradients-npm-5.1.1-ec88a4bfbc-27354072a0.zip b/.yarn/cache/postcss-minify-gradients-npm-5.1.1-ec88a4bfbc-27354072a0.zip new file mode 100644 index 000000000..db0e08e5c Binary files /dev/null and b/.yarn/cache/postcss-minify-gradients-npm-5.1.1-ec88a4bfbc-27354072a0.zip differ diff --git a/.yarn/cache/postcss-minify-params-npm-5.1.3-2f7c7bb18d-2d218f6b82.zip b/.yarn/cache/postcss-minify-params-npm-5.1.3-2f7c7bb18d-2d218f6b82.zip new file mode 100644 index 000000000..4ed105d4c Binary files /dev/null and b/.yarn/cache/postcss-minify-params-npm-5.1.3-2f7c7bb18d-2d218f6b82.zip differ diff --git a/.yarn/cache/postcss-minify-selectors-npm-5.2.0-74041b6cfd-651fbac038.zip b/.yarn/cache/postcss-minify-selectors-npm-5.2.0-74041b6cfd-651fbac038.zip new file mode 100644 index 000000000..6378dd471 Binary files /dev/null and b/.yarn/cache/postcss-minify-selectors-npm-5.2.0-74041b6cfd-651fbac038.zip differ diff --git a/.yarn/cache/postcss-normalize-charset-npm-5.1.0-13c3339544-e79d92971f.zip b/.yarn/cache/postcss-normalize-charset-npm-5.1.0-13c3339544-e79d92971f.zip new file mode 100644 index 000000000..db3c65ef8 Binary files /dev/null and b/.yarn/cache/postcss-normalize-charset-npm-5.1.0-13c3339544-e79d92971f.zip differ diff --git a/.yarn/cache/postcss-normalize-display-values-npm-5.1.0-ae5985a0b0-b6eb7b9b02.zip b/.yarn/cache/postcss-normalize-display-values-npm-5.1.0-ae5985a0b0-b6eb7b9b02.zip new file mode 100644 index 000000000..d8850387c Binary files /dev/null and b/.yarn/cache/postcss-normalize-display-values-npm-5.1.0-ae5985a0b0-b6eb7b9b02.zip differ diff --git a/.yarn/cache/postcss-normalize-positions-npm-5.1.0-d566de9fd1-08a1f12cc8.zip b/.yarn/cache/postcss-normalize-positions-npm-5.1.0-d566de9fd1-08a1f12cc8.zip new file mode 100644 index 000000000..f9e7be271 Binary files /dev/null and b/.yarn/cache/postcss-normalize-positions-npm-5.1.0-d566de9fd1-08a1f12cc8.zip differ diff --git a/.yarn/cache/postcss-normalize-repeat-style-npm-5.1.0-f755e7e0fa-65176c3774.zip b/.yarn/cache/postcss-normalize-repeat-style-npm-5.1.0-f755e7e0fa-65176c3774.zip new file mode 100644 index 000000000..3781073ac Binary files /dev/null and b/.yarn/cache/postcss-normalize-repeat-style-npm-5.1.0-f755e7e0fa-65176c3774.zip differ diff --git a/.yarn/cache/postcss-normalize-string-npm-5.1.0-bf32e478d0-6e549c6e5b.zip b/.yarn/cache/postcss-normalize-string-npm-5.1.0-bf32e478d0-6e549c6e5b.zip new file mode 100644 index 000000000..b4ed8e072 Binary files /dev/null and b/.yarn/cache/postcss-normalize-string-npm-5.1.0-bf32e478d0-6e549c6e5b.zip differ diff --git a/.yarn/cache/postcss-normalize-timing-functions-npm-5.1.0-fa42b95b44-da550f50e9.zip b/.yarn/cache/postcss-normalize-timing-functions-npm-5.1.0-fa42b95b44-da550f50e9.zip new file mode 100644 index 000000000..6055ef993 Binary files /dev/null and b/.yarn/cache/postcss-normalize-timing-functions-npm-5.1.0-fa42b95b44-da550f50e9.zip differ diff --git a/.yarn/cache/postcss-normalize-unicode-npm-5.1.0-84712377fd-3570c90050.zip b/.yarn/cache/postcss-normalize-unicode-npm-5.1.0-84712377fd-3570c90050.zip new file mode 100644 index 000000000..971fe1768 Binary files /dev/null and b/.yarn/cache/postcss-normalize-unicode-npm-5.1.0-84712377fd-3570c90050.zip differ diff --git a/.yarn/cache/postcss-normalize-url-npm-5.1.0-82c6c0bb7b-3bd4b3246d.zip b/.yarn/cache/postcss-normalize-url-npm-5.1.0-82c6c0bb7b-3bd4b3246d.zip new file mode 100644 index 000000000..0e5be40cc Binary files /dev/null and b/.yarn/cache/postcss-normalize-url-npm-5.1.0-82c6c0bb7b-3bd4b3246d.zip differ diff --git a/.yarn/cache/postcss-normalize-whitespace-npm-5.1.1-ff5cb53565-12d8fb6d1c.zip b/.yarn/cache/postcss-normalize-whitespace-npm-5.1.1-ff5cb53565-12d8fb6d1c.zip new file mode 100644 index 000000000..f3d399da0 Binary files /dev/null and b/.yarn/cache/postcss-normalize-whitespace-npm-5.1.1-ff5cb53565-12d8fb6d1c.zip differ diff --git a/.yarn/cache/postcss-npm-8.4.7-12e4add2ee-a515ed3662.zip b/.yarn/cache/postcss-npm-8.4.7-12e4add2ee-a515ed3662.zip new file mode 100644 index 000000000..021648a3b Binary files /dev/null and b/.yarn/cache/postcss-npm-8.4.7-12e4add2ee-a515ed3662.zip differ diff --git a/.yarn/cache/postcss-ordered-values-npm-5.1.1-c81d9dbb1f-d56825ef03.zip b/.yarn/cache/postcss-ordered-values-npm-5.1.1-c81d9dbb1f-d56825ef03.zip new file mode 100644 index 000000000..843c5f089 Binary files /dev/null and b/.yarn/cache/postcss-ordered-values-npm-5.1.1-c81d9dbb1f-d56825ef03.zip differ diff --git a/.yarn/cache/postcss-reduce-idents-npm-5.0.3-5c4324f325-a88acaeb8a.zip b/.yarn/cache/postcss-reduce-idents-npm-5.0.3-5c4324f325-a88acaeb8a.zip deleted file mode 100644 index 4bb2d8269..000000000 Binary files a/.yarn/cache/postcss-reduce-idents-npm-5.0.3-5c4324f325-a88acaeb8a.zip and /dev/null differ diff --git a/.yarn/cache/postcss-reduce-idents-npm-5.2.0-8f2ad980fd-f0d644c86e.zip b/.yarn/cache/postcss-reduce-idents-npm-5.2.0-8f2ad980fd-f0d644c86e.zip new file mode 100644 index 000000000..0ab555cf0 Binary files /dev/null and b/.yarn/cache/postcss-reduce-idents-npm-5.2.0-8f2ad980fd-f0d644c86e.zip differ diff --git a/.yarn/cache/postcss-reduce-initial-npm-5.1.0-65d2431422-2cb10fa3fa.zip b/.yarn/cache/postcss-reduce-initial-npm-5.1.0-65d2431422-2cb10fa3fa.zip new file mode 100644 index 000000000..f5c987358 Binary files /dev/null and b/.yarn/cache/postcss-reduce-initial-npm-5.1.0-65d2431422-2cb10fa3fa.zip differ diff --git a/.yarn/cache/postcss-reduce-transforms-npm-5.1.0-f02f02d8ba-0c6af2cba2.zip b/.yarn/cache/postcss-reduce-transforms-npm-5.1.0-f02f02d8ba-0c6af2cba2.zip new file mode 100644 index 000000000..ab9ae7bae Binary files /dev/null and b/.yarn/cache/postcss-reduce-transforms-npm-5.1.0-f02f02d8ba-0c6af2cba2.zip differ diff --git a/.yarn/cache/postcss-svgo-npm-5.1.0-6165516934-d86eb5213d.zip b/.yarn/cache/postcss-svgo-npm-5.1.0-6165516934-d86eb5213d.zip new file mode 100644 index 000000000..e17567d81 Binary files /dev/null and b/.yarn/cache/postcss-svgo-npm-5.1.0-6165516934-d86eb5213d.zip differ diff --git a/.yarn/cache/postcss-unique-selectors-npm-5.1.1-ed729740f2-637e7b786e.zip b/.yarn/cache/postcss-unique-selectors-npm-5.1.1-ed729740f2-637e7b786e.zip new file mode 100644 index 000000000..c45437f4a Binary files /dev/null and b/.yarn/cache/postcss-unique-selectors-npm-5.1.1-ed729740f2-637e7b786e.zip differ diff --git a/.yarn/cache/postcss-zindex-npm-5.0.2-cea30129da-bdd51f57d7.zip b/.yarn/cache/postcss-zindex-npm-5.0.2-cea30129da-bdd51f57d7.zip deleted file mode 100644 index 878c6c871..000000000 Binary files a/.yarn/cache/postcss-zindex-npm-5.0.2-cea30129da-bdd51f57d7.zip and /dev/null differ diff --git a/.yarn/cache/postcss-zindex-npm-5.1.0-7266d1f85e-8581e0ee55.zip b/.yarn/cache/postcss-zindex-npm-5.1.0-7266d1f85e-8581e0ee55.zip new file mode 100644 index 000000000..a49db3f04 Binary files /dev/null and b/.yarn/cache/postcss-zindex-npm-5.1.0-7266d1f85e-8581e0ee55.zip differ diff --git a/.yarn/cache/prismjs-npm-1.28.0-28f20a79ff-bde93fb2be.zip b/.yarn/cache/prismjs-npm-1.28.0-28f20a79ff-bde93fb2be.zip new file mode 100644 index 000000000..8f2e4f2ea Binary files /dev/null and b/.yarn/cache/prismjs-npm-1.28.0-28f20a79ff-bde93fb2be.zip differ diff --git a/.yarn/cache/proc-log-npm-2.0.0-d4c058bbfe-74ab7f7d47.zip b/.yarn/cache/proc-log-npm-2.0.0-d4c058bbfe-74ab7f7d47.zip deleted file mode 100644 index baf33cb69..000000000 Binary files a/.yarn/cache/proc-log-npm-2.0.0-d4c058bbfe-74ab7f7d47.zip and /dev/null differ diff --git a/.yarn/cache/promise-all-reject-late-npm-1.0.1-19ba0dce9c-d7d61ac412.zip b/.yarn/cache/promise-all-reject-late-npm-1.0.1-19ba0dce9c-d7d61ac412.zip deleted file mode 100644 index 3f9a0755c..000000000 Binary files a/.yarn/cache/promise-all-reject-late-npm-1.0.1-19ba0dce9c-d7d61ac412.zip and /dev/null differ diff --git a/.yarn/cache/promise-call-limit-npm-1.0.1-18d83007c3-e69aed17f5.zip b/.yarn/cache/promise-call-limit-npm-1.0.1-18d83007c3-e69aed17f5.zip deleted file mode 100644 index 49d9e5115..000000000 Binary files a/.yarn/cache/promise-call-limit-npm-1.0.1-18d83007c3-e69aed17f5.zip and /dev/null differ diff --git a/.yarn/cache/promzard-npm-0.3.0-a81958bbdb-443a3b39ac.zip b/.yarn/cache/promzard-npm-0.3.0-a81958bbdb-443a3b39ac.zip deleted file mode 100644 index d559c84af..000000000 Binary files a/.yarn/cache/promzard-npm-0.3.0-a81958bbdb-443a3b39ac.zip and /dev/null differ diff --git a/.yarn/cache/qrcode-terminal-npm-0.12.0-f81f8a6a67-51638d11d0.zip b/.yarn/cache/qrcode-terminal-npm-0.12.0-f81f8a6a67-51638d11d0.zip deleted file mode 100644 index 683f598ec..000000000 Binary files a/.yarn/cache/qrcode-terminal-npm-0.12.0-f81f8a6a67-51638d11d0.zip and /dev/null differ diff --git a/.yarn/cache/react-error-overlay-npm-6.0.10-3a2fed5ec4-e7384f086a.zip b/.yarn/cache/react-error-overlay-npm-6.0.11-021cdeaa92-ce7b44c38f.zip similarity index 99% rename from .yarn/cache/react-error-overlay-npm-6.0.10-3a2fed5ec4-e7384f086a.zip rename to .yarn/cache/react-error-overlay-npm-6.0.11-021cdeaa92-ce7b44c38f.zip index 4d4bb0686..5a8710ff2 100644 Binary files a/.yarn/cache/react-error-overlay-npm-6.0.10-3a2fed5ec4-e7384f086a.zip and b/.yarn/cache/react-error-overlay-npm-6.0.11-021cdeaa92-ce7b44c38f.zip differ diff --git a/.yarn/cache/react-refresh-typescript-npm-2.0.4-f0e0f80569-f415d306fe.zip b/.yarn/cache/react-refresh-typescript-npm-2.0.5-d904a69875-04b1765280.zip similarity index 89% rename from .yarn/cache/react-refresh-typescript-npm-2.0.4-f0e0f80569-f415d306fe.zip rename to .yarn/cache/react-refresh-typescript-npm-2.0.5-d904a69875-04b1765280.zip index 96ec08622..79a901c85 100644 Binary files a/.yarn/cache/react-refresh-typescript-npm-2.0.4-f0e0f80569-f415d306fe.zip and b/.yarn/cache/react-refresh-typescript-npm-2.0.5-d904a69875-04b1765280.zip differ diff --git a/.yarn/cache/read-cmd-shim-npm-2.0.0-bf49908226-024f0a092d.zip b/.yarn/cache/read-cmd-shim-npm-2.0.0-bf49908226-024f0a092d.zip deleted file mode 100644 index 101b9d2a9..000000000 Binary files a/.yarn/cache/read-cmd-shim-npm-2.0.0-bf49908226-024f0a092d.zip and /dev/null differ diff --git a/.yarn/cache/read-package-json-fast-npm-2.0.3-f163572d18-fca37b3b21.zip b/.yarn/cache/read-package-json-fast-npm-2.0.3-f163572d18-fca37b3b21.zip deleted file mode 100644 index 58beb5b15..000000000 Binary files a/.yarn/cache/read-package-json-fast-npm-2.0.3-f163572d18-fca37b3b21.zip and /dev/null differ diff --git a/.yarn/cache/read-package-json-npm-4.1.1-7696cd1b3e-d95f6e9747.zip b/.yarn/cache/read-package-json-npm-4.1.1-7696cd1b3e-d95f6e9747.zip deleted file mode 100644 index 2b340f96f..000000000 Binary files a/.yarn/cache/read-package-json-npm-4.1.1-7696cd1b3e-d95f6e9747.zip and /dev/null differ diff --git a/.yarn/cache/readdir-scoped-modules-npm-1.1.0-651d6882ac-6d9f334e40.zip b/.yarn/cache/readdir-scoped-modules-npm-1.1.0-651d6882ac-6d9f334e40.zip deleted file mode 100644 index 71f5e8980..000000000 Binary files a/.yarn/cache/readdir-scoped-modules-npm-1.1.0-651d6882ac-6d9f334e40.zip and /dev/null differ diff --git a/.yarn/cache/redeyed-npm-2.1.1-7cbceb60bb-39a1426e37.zip b/.yarn/cache/redeyed-npm-2.1.1-7cbceb60bb-39a1426e37.zip deleted file mode 100644 index 94faac820..000000000 Binary files a/.yarn/cache/redeyed-npm-2.1.1-7cbceb60bb-39a1426e37.zip and /dev/null differ diff --git a/.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-86e54849ab.zip b/.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-86e54849ab.zip new file mode 100644 index 000000000..3413001ae Binary files /dev/null and b/.yarn/cache/regenerator-transform-npm-0.15.0-c03f3a30a0-86e54849ab.zip differ diff --git a/.yarn/cache/semantic-release-npm-19.0.2-8e700fd456-0807cae8c5.zip b/.yarn/cache/semantic-release-npm-19.0.2-8e700fd456-0807cae8c5.zip deleted file mode 100644 index 4c901cd44..000000000 Binary files a/.yarn/cache/semantic-release-npm-19.0.2-8e700fd456-0807cae8c5.zip and /dev/null differ diff --git a/.yarn/cache/semver-regex-npm-3.1.3-2d32face69-a40c177166.zip b/.yarn/cache/semver-regex-npm-3.1.3-2d32face69-a40c177166.zip deleted file mode 100644 index fdfa9d775..000000000 Binary files a/.yarn/cache/semver-regex-npm-3.1.3-2d32face69-a40c177166.zip and /dev/null differ diff --git a/.yarn/cache/signale-npm-1.4.0-f7f88b1eb2-a6a540e054.zip b/.yarn/cache/signale-npm-1.4.0-f7f88b1eb2-a6a540e054.zip deleted file mode 100644 index dba707fd1..000000000 Binary files a/.yarn/cache/signale-npm-1.4.0-f7f88b1eb2-a6a540e054.zip and /dev/null differ diff --git a/.yarn/cache/spawn-error-forwarder-npm-1.0.0-38f2d288e0-ac7e69f980.zip b/.yarn/cache/spawn-error-forwarder-npm-1.0.0-38f2d288e0-ac7e69f980.zip deleted file mode 100644 index f6d2c0866..000000000 Binary files a/.yarn/cache/spawn-error-forwarder-npm-1.0.0-38f2d288e0-ac7e69f980.zip and /dev/null differ diff --git a/.yarn/cache/split2-npm-1.0.0-7324a8c8dd-84cb1713a9.zip b/.yarn/cache/split2-npm-1.0.0-7324a8c8dd-84cb1713a9.zip deleted file mode 100644 index bc8e07e24..000000000 Binary files a/.yarn/cache/split2-npm-1.0.0-7324a8c8dd-84cb1713a9.zip and /dev/null differ diff --git a/.yarn/cache/stream-combiner2-npm-1.1.1-72d11c75e4-dd32d179fa.zip b/.yarn/cache/stream-combiner2-npm-1.1.1-72d11c75e4-dd32d179fa.zip deleted file mode 100644 index 1e10605ad..000000000 Binary files a/.yarn/cache/stream-combiner2-npm-1.1.1-72d11c75e4-dd32d179fa.zip and /dev/null differ diff --git a/.yarn/cache/stringify-package-npm-1.0.1-dfc7255692-462036085a.zip b/.yarn/cache/stringify-package-npm-1.0.1-dfc7255692-462036085a.zip deleted file mode 100644 index b208a6485..000000000 Binary files a/.yarn/cache/stringify-package-npm-1.0.1-dfc7255692-462036085a.zip and /dev/null differ diff --git a/.yarn/cache/stylehacks-npm-5.1.0-f980a6a46f-310b3452c1.zip b/.yarn/cache/stylehacks-npm-5.1.0-f980a6a46f-310b3452c1.zip new file mode 100644 index 000000000..e06d15b0b Binary files /dev/null and b/.yarn/cache/stylehacks-npm-5.1.0-f980a6a46f-310b3452c1.zip differ diff --git a/.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip b/.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip deleted file mode 100644 index d84cb672a..000000000 Binary files a/.yarn/cache/temp-dir-npm-2.0.0-e8af180805-cc4f0404bf.zip and /dev/null differ diff --git a/.yarn/cache/tempy-npm-1.0.1-12882f05f7-e77ca4440a.zip b/.yarn/cache/tempy-npm-1.0.1-12882f05f7-e77ca4440a.zip deleted file mode 100644 index 8235a3fc4..000000000 Binary files a/.yarn/cache/tempy-npm-1.0.1-12882f05f7-e77ca4440a.zip and /dev/null differ diff --git a/.yarn/cache/tiny-relative-date-npm-1.3.0-4737b1ee94-82a1fa2f3b.zip b/.yarn/cache/tiny-relative-date-npm-1.3.0-4737b1ee94-82a1fa2f3b.zip deleted file mode 100644 index dab2e4379..000000000 Binary files a/.yarn/cache/tiny-relative-date-npm-1.3.0-4737b1ee94-82a1fa2f3b.zip and /dev/null differ diff --git a/.yarn/cache/treeverse-npm-1.0.4-dc3cd6f6c7-712640acd8.zip b/.yarn/cache/treeverse-npm-1.0.4-dc3cd6f6c7-712640acd8.zip deleted file mode 100644 index 893878885..000000000 Binary files a/.yarn/cache/treeverse-npm-1.0.4-dc3cd6f6c7-712640acd8.zip and /dev/null differ diff --git a/.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-1a4102c06d.zip b/.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-1a4102c06d.zip deleted file mode 100644 index 74a806014..000000000 Binary files a/.yarn/cache/type-fest-npm-0.16.0-e1b8ff05d9-1a4102c06d.zip and /dev/null differ diff --git a/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-b011c33886.zip b/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-b011c33886.zip deleted file mode 100644 index 9dbe9785a..000000000 Binary files a/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-b011c33886.zip and /dev/null differ diff --git a/.yarn/cache/type-fest-npm-2.13.1-7819e2b763-16f05cfd2b.zip b/.yarn/cache/type-fest-npm-2.13.1-7819e2b763-16f05cfd2b.zip new file mode 100644 index 000000000..69a41b35f Binary files /dev/null and b/.yarn/cache/type-fest-npm-2.13.1-7819e2b763-16f05cfd2b.zip differ diff --git a/.yarn/cache/validate-npm-package-name-npm-3.0.0-e44c263962-ce4c68207a.zip b/.yarn/cache/validate-npm-package-name-npm-3.0.0-e44c263962-ce4c68207a.zip deleted file mode 100644 index 28a83805d..000000000 Binary files a/.yarn/cache/validate-npm-package-name-npm-3.0.0-e44c263962-ce4c68207a.zip and /dev/null differ diff --git a/.yarn/cache/walk-up-path-npm-1.0.0-54fda77042-b8019ac4fb.zip b/.yarn/cache/walk-up-path-npm-1.0.0-54fda77042-b8019ac4fb.zip deleted file mode 100644 index a5652f870..000000000 Binary files a/.yarn/cache/walk-up-path-npm-1.0.0-54fda77042-b8019ac4fb.zip and /dev/null differ diff --git a/.yarn/cache/webpack-cli-npm-4.10.0-09cee8c457-2ff5355ac3.zip b/.yarn/cache/webpack-cli-npm-4.10.0-09cee8c457-2ff5355ac3.zip new file mode 100644 index 000000000..8919e5b5f Binary files /dev/null and b/.yarn/cache/webpack-cli-npm-4.10.0-09cee8c457-2ff5355ac3.zip differ diff --git a/.yarn/cache/webpack-cli-npm-4.9.2-5e7d77ef6f-ffb4c5d53a.zip b/.yarn/cache/webpack-cli-npm-4.9.2-5e7d77ef6f-ffb4c5d53a.zip deleted file mode 100644 index 35edd9071..000000000 Binary files a/.yarn/cache/webpack-cli-npm-4.9.2-5e7d77ef6f-ffb4c5d53a.zip and /dev/null differ diff --git a/.yarn/cache/webpack-dev-server-npm-4.9.2-741b789a9c-201e28445f.zip b/.yarn/cache/webpack-dev-server-npm-4.9.2-741b789a9c-201e28445f.zip new file mode 100644 index 000000000..33b05777f Binary files /dev/null and b/.yarn/cache/webpack-dev-server-npm-4.9.2-741b789a9c-201e28445f.zip differ diff --git a/.yarn/cache/webpack-npm-5.73.0-fc8c985a74-aa434a241b.zip b/.yarn/cache/webpack-npm-5.73.0-fc8c985a74-aa434a241b.zip new file mode 100644 index 000000000..9f77205ce Binary files /dev/null and b/.yarn/cache/webpack-npm-5.73.0-fc8c985a74-aa434a241b.zip differ diff --git a/.yarn/cache/write-file-atomic-npm-4.0.1-96ec744721-8f78023253.zip b/.yarn/cache/write-file-atomic-npm-4.0.1-96ec744721-8f78023253.zip deleted file mode 100644 index b23a2f047..000000000 Binary files a/.yarn/cache/write-file-atomic-npm-4.0.1-96ec744721-8f78023253.zip and /dev/null differ diff --git a/commitlint.config.js b/commitlint.config.js index 125aefae6..f0ada401b 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -11,7 +11,7 @@ module.exports = { 'workspace', 'shared', 'taboule', - 'backend', + 'docs', 'guardoni', 'tktrex', 'ycai', diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 500260230..0a54e02f9 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -2,46 +2,9 @@ sidebar_position: 1 --- -# Tutorial Intro +# TrEx -Let's discover **Docusaurus in less than 5 minutes**. +## Platforms -## Getting Started - -Get started by **creating a new site**. - -Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. - -### What you'll need - -- [Node.js](https://nodejs.org/en/download/) version 14 or above: - - When installing Node.js, you are recommended to check all checkboxes related to dependencies. - -## Generate a new site - -Generate a new Docusaurus site using the **classic template**. - -The classic template will automatically be added to your project after you run the command: - -```bash -npm init docusaurus@latest my-website classic -``` - -You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. - -The command also installs all necessary dependencies you need to run Docusaurus. - -## Start your site - -Run the development server: - -```bash -cd my-website -npm run start -``` - -The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. - -The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. - -Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. +- [@tktrex](/tktrex/docs/tktrex-intro) +- [@yttrex](/yttrex/docs/yttrex-intro) diff --git a/docs/docs/partials/extension/_build.mdx b/docs/docs/partials/extension/_build.mdx new file mode 100644 index 000000000..314e7730c --- /dev/null +++ b/docs/docs/partials/extension/_build.mdx @@ -0,0 +1,15 @@ +import CodeBlock from '@theme/CodeBlock'; + +## Build + +To produce a `production` extension run the following command in your terminal: + + + yarn {props.platformPrefix}:ext build + + +Or, if you need a version with `NODE_ENV=development` run: + + + NODE_ENV=development yarn {props.platformPrefix}:ext build + diff --git a/docs/docs/partials/extension/_development.mdx b/docs/docs/partials/extension/_development.mdx new file mode 100644 index 000000000..6af464916 --- /dev/null +++ b/docs/docs/partials/extension/_development.mdx @@ -0,0 +1,26 @@ +import CodeBlock from '@theme/CodeBlock'; + + +## Development + + + +### Prerequisites + + + +### Run "watch" mode + +To start developing the extension you need to compile the source code with `webpack` by running the following command: + + + yarn {props.platformPrefix}:ext watch + + +

then, you can open your browser's development panel and load the extension from the output folder {props.platformPrefix}.

diff --git a/docs/docs/partials/extension/_index.mdx b/docs/docs/partials/extension/_index.mdx new file mode 100644 index 000000000..8c1a08169 --- /dev/null +++ b/docs/docs/partials/extension/_index.mdx @@ -0,0 +1,12 @@ +import TOCInline from '@theme/TOCInline'; +import ExtensionDevelopmentPartial from './_development.mdx'; +import ExtensionBuildPartial from './_build.mdx' + +

+ This browser extension allows you to contribute to our researches and tracking + algorithm analyses on {props.platformName}. +

+ + + + diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 3eb279919..8d007ae9a 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -3,40 +3,80 @@ // const lightCodeTheme = require('prism-react-renderer/themes/github'); const darkCodeTheme = require('prism-react-renderer/themes/dracula'); -const path = require('path/posix'); -const { default: theme } = require('./theme'); +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const packageJson = require('../package.json'); +const path = require('path'); +// const { default: theme } = require('./theme'); + +const GITHUB_REPO = 'https://github.com/tracking-exposed/yttrex'; /** @type {import('@docusaurus/types').Config} */ const config = { title: '@trex', - tagline: 'Dinosaurs are cool', + tagline: + 'We develop tools to uncover how tracking and profiling have an impact on society', url: 'https://docs.tracking.exposed', baseUrl: '/', onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', - favicon: 'img/yttrex128.png', + favicon: 'img/trex128.png', organizationName: 'tracking-exposed', // Usually your GitHub org/user name. projectName: 'trex', // Usually your repo name. plugins: [ - // @tktrex open api + // @tktrex + // api [ 'docusaurus-plugin-openapi', { id: 'tktrex', - path: '../platforms/tktrex/shared/build/openapi-tktrex.json', + path: '../platforms/tktrex/shared/build/open-api.json', routeBasePath: 'tktrex/api', }, ], - // @tktrex open api - // [ - // 'docusaurus-plugin-openapi', - // { - // id: 'ycai-api', - // path: '../sercices/ycai/studio/docs/openapi-validated.json', - // routeBasePath: 'ycai/api', - // }, - // ], + // docs + [ + '@docusaurus/plugin-content-docs', + { + id: 'tktrex-docs', + path: path.resolve(__dirname, '../platforms/tktrex/docs/docs'), + routeBasePath: 'tktrex/docs', + sidebarPath: require.resolve('./sidebars.js'), + }, + ], + // @yttrex + // API + [ + 'docusaurus-plugin-openapi', + { + id: 'yttrex-api', + path: '../platforms/yttrex/shared/build/open-api.json', + routeBasePath: 'yttrex/api', + }, + ], + // docs + [ + '@docusaurus/plugin-content-docs', + { + id: 'yttrex-docs', + path: path.resolve(__dirname, '../platforms/yttrex/docs/docs'), + routeBasePath: 'yttrex/docs', + sidebarPath: require.resolve('./sidebars.js'), + }, + ], + // @ycai + // API + [ + 'docusaurus-plugin-openapi', + { + id: 'ycai-api', + path: '../platforms/ycai/studio/build/open-api.json', + routeBasePath: 'ycai/api', + }, + ], + + // tools + // guardoni [ '@docusaurus/plugin-content-docs', { @@ -46,15 +86,6 @@ const config = { sidebarPath: require.resolve('./sidebars.js'), }, ], - // [ - // '@docusaurus/plugin-content-docs', - // { - // id: 'ycai-docs', - // path: path.resolve(__dirname, '../YCAI/docs'), - // routeBasePath: 'ycai/docs', - // sidebarPath: require.resolve('../YCAI/sidebars.js'), - // }, - // ], ], presets: [ [ @@ -79,44 +110,52 @@ const config = { /** @type {import('docusaurus-theme-openapi').ThemeConfig} */ ({ navbar: { - title: '@trex', + // title: `@docs v${packageJson.version}`, logo: { alt: '@trex Logo', - src: 'img/yttrex128.png', + src: 'img/trexlogo_black.svg', + srcDark: 'img/trexlogo.svg', }, items: [ { - type: 'dropdown', - label: 'Services', - items: [ - { - type: 'doc', - docId: 'intro', - docsPluginId: 'guardoni-docs', - label: 'Guardoni', - }, - { - type: 'doc', - docId: 'intro', - docsPluginId: 'ycai-docs', - label: 'YCAI', - }, - ], + type: 'doc', + label: 'Guardoni', + docId: 'guardoni-intro', + docsPluginId: 'guardoni-docs', + }, + { + type: 'doc', + docId: 'tktrex-intro', + docsPluginId: 'tktrex-docs', + label: 'TikTok Scraper', + }, + { + type: 'doc', + docId: 'yttrex-intro', + docsPluginId: 'yttrex-docs', + label: 'Youtube Scraper', }, { type: 'dropdown', label: 'API', items: [ { to: '/tktrex/api', label: '@tktrex' }, + { to: '/yttrex/api', label: '@yttrex' }, { to: '/ycai/api', label: '@ycai' }, ], }, - { to: '/blog', label: 'Blog', position: 'left' }, + // { to: '/blog', label: 'Blog', position: 'left' }, { href: 'https://github.com/facebook/docusaurus', label: 'GitHub', position: 'right', }, + { + type: 'docsVersion', + position: 'right', + docsPluginId: 'guardoni-docs', + label: `v${packageJson.version}`, + }, ], }, footer: { @@ -125,7 +164,7 @@ const config = { title: 'Docs', items: [ { - label: 'Tutorial', + label: 'Getting started', to: '/docs/intro', }, ], @@ -134,16 +173,12 @@ const config = { title: 'Community', items: [ { - label: 'Stack Overflow', - href: 'https://stackoverflow.com/questions/tagged/docusaurus', - }, - { - label: 'Discord', - href: 'https://discordapp.com/invite/docusaurus', + label: 'Slack', + href: 'https://trackingexposed.slack.com/invite/trex-tk', }, { label: 'Twitter', - href: 'https://twitter.com/docusaurus', + href: 'https://twitter.com/trackingexposed', }, ], }, @@ -151,12 +186,37 @@ const config = { title: 'More', items: [ { - label: 'Blog', - to: '/blog', + label: 'Youchoose', + to: 'https://youchoose.ai', + }, + { + label: '@trex/facebook', + to: 'https://facebook.tracking.exposed', + }, + { + label: '@trex/youtube', + to: 'https://youtube.tracking.exposed', + }, + { + label: '@trex/pornhub', + to: 'https://pornhub.tracking.exposed', }, { - label: 'GitHub', - href: 'https://github.com/facebook/docusaurus', + label: '@trex/amazon', + to: 'https://amazon.tracking.exposed', + }, + // no blog at the moment + // { + // label: 'Blog', + // to: '/blog', + // }, + ], + }, + { + title: 'Dev', + items: [ + { + html: ``, }, ], }, @@ -164,7 +224,7 @@ const config = { copyright: `Copyright © ${new Date().getFullYear()} Tracking Exposed Team. Built with Docusaurus.`, }, prism: { - theme: theme, + theme: lightCodeTheme, darkTheme: darkCodeTheme, }, }), diff --git a/docs/package.json b/docs/package.json index 020205577..d1b192b30 100644 --- a/docs/package.json +++ b/docs/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@docusaurus/module-type-aliases": "2.0.0-beta.14", "@tsconfig/docusaurus": "^1.0.4", + "docusaurus-plugin-openapi": "^0.5.0", "docusaurus-preset-openapi": "^0.5.0", "typescript": "^4.7.2" }, diff --git a/docs/scripts/build.sh b/docs/scripts/build.sh new file mode 100755 index 000000000..1db39c2a3 --- /dev/null +++ b/docs/scripts/build.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e -x +# set -e + +# build shared +yarn shared build +yarn yt:shared build +yarn yt:shared open-doc-api +yarn tk:shared build +yarn tk:shared open-doc-api +yarn ycai open-doc-api +yarn docs build diff --git a/docs/sidebars.js b/docs/sidebars.js index 4f5feb68f..b98db4c8b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -16,14 +16,12 @@ /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [ - { type: 'autogenerated', dirName: '.' }, - // { - // type: 'link', - // label: '@ycai', - // href: '/ycai/intro', - // }, - ], + tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], + // { + // type: 'link', + // label: '@ycai', + // href: '/ycai/intro', + // }, // But you can create a sidebar manually /* diff --git a/docs/src/components/HomepageFeatures.tsx b/docs/src/components/HomepageFeatures.tsx index 80b9d5f9c..deb3b8a3b 100644 --- a/docs/src/components/HomepageFeatures.tsx +++ b/docs/src/components/HomepageFeatures.tsx @@ -1,4 +1,3 @@ -import useBaseUrl from '@docusaurus/useBaseUrl'; import React from 'react'; import clsx from 'clsx'; import styles from './HomepageFeatures.module.css'; @@ -7,55 +6,70 @@ interface FeatureItem { title: string; image: string; description: JSX.Element; + buttons?: JSX.Element; } const FeatureList: FeatureItem[] = [ { - title: 'Easy to Use', + title: 'Collect the data', image: '/img/undraw_docusaurus_mountain.svg', - description: ( - <> - Docusaurus was designed from the ground up to be easily installed and - used to get your website up and running quickly. - + description: <>Use the browser extension to collect data from TikTok., + buttons: ( +
+ + Chrome + + + firefox + +
), }, { - title: 'Focus on What Matters', + title: 'Run experiments', image: '/img/undraw_docusaurus_tree.svg', description: ( <> - Docusaurus lets you focus on your docs, and we'll do the chores. Go - ahead and move your docs into the docs directory. + Use our tool guardoni to run experiments with the data collected. ), }, { - title: 'Powered by React', + title: 'Explore collected data', image: '/img/undraw_docusaurus_react.svg', description: ( - <> - Extend or customize your website layout by reusing React. Docusaurus can - be extended while reusing the same header and footer. - + <>Collected data are transparent, anonymous and accessible to everyone. ), }, ]; -function Feature({ title, image, description }: FeatureItem): JSX.Element { +function Feature({ + title, + image, + buttons, + description, +}: FeatureItem): JSX.Element { return (
- {title} + /> */}

{title}

{description}

+ {buttons ?
{buttons}
: null}
); } diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 5f064714b..9114e0f62 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -4,15 +4,19 @@ * work well for content-centric websites. */ -@font-face { + @font-face { font-family: Trex-Regular; src: url('/fonts/Trex-Regular.ttf'); } /* You can override the default Infima variables here. */ :root { - --ifm-font-family-base: "Trex-Regular"; + --black: #1b1b1b; + --white: #f1f1f1; + /* --ifm-font-family-base: "Trex-Regular"; */ --ifm-heading-font-family: "Trex-Regular"; + /* --ifm-font-size-base: 120%; */ + --ifm-line-height-base: 2; --ifm-color-primary: #53c1b6; --ifm-color-primary-dark: #42b7ab; --ifm-color-primary-darker: #3eaca1; @@ -21,13 +25,11 @@ --ifm-color-primary-lighter: #71ccc3; --ifm-color-primary-lightest: #90d7d0; --ifm-code-font-size: 95%; - --ifm-navbar-background-color: #1b1b1b; - --ifm-navbar-link-color: white; --ifm-footer-background-color: #53c1b6; - --ifm-footer-color: white; - --ifm-footer-title-color: white; - --ifm-footer-link-color: white; - --ifm-footer-link-hover-color: #1b1b1b; + --ifm-footer-color: var(--white); + --ifm-footer-title-color: var(--black); + --ifm-footer-link-color: var(--white); + --ifm-footer-link-hover-color: var(--black); } /* For readability concerns, you should choose a lighter palette in dark mode. */ @@ -39,7 +41,8 @@ html[data-theme='dark'] { --ifm-color-primary-light: #29d5b0; --ifm-color-primary-lighter: #32d8b4; --ifm-color-primary-lightest: #4fddbf; - --ifm-color-navbar: #1b1b1b; + /* --ifm-color-navbar: #1b1b1b; */ + --ifm-navbar-background-color: #1b1b1b; --ifm-footer-background-color: #53c1b6; } @@ -53,3 +56,49 @@ html[data-theme='dark'] { html[data-theme='dark'] .docusaurus-highlight-code-line { background-color: rgba(0, 0, 0, 0.3); } + + +.header-github-link { + background-color: white; + width: 23px; + height: 23px; + border-radius: 11px; + position: relative; + margin-right: 20px; +} + +html[data-theme="dark"] .header-github-link { + background-color: black; +} + +.header-github-link:hover { + opacity: 0.6; +} + +.header-github-link:before { + content: ''; + width: 26px; + height: 26px; + display: flex; + top: -1px; + left: -1px; + position: absolute; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E"); + background-repeat: no-repeat; +} + +html[data-theme='dark'] .header-github-link:before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; +} + +p, li { + font-size: 21px; +} + +h1{ + padding-top: 2%; +} +h2 { + padding-top: 4%; +} \ No newline at end of file diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx index 7720d5308..a32991eec 100644 --- a/docs/src/pages/index.tsx +++ b/docs/src/pages/index.tsx @@ -18,7 +18,7 @@ function HomepageHeader(): JSX.Element { className="button button--secondary button--lg" to="/docs/intro" > - Try TrEx toolkit + Getting started diff --git a/docs/static/img/trex128.png b/docs/static/img/trex128.png new file mode 100644 index 000000000..ebd64c8fe Binary files /dev/null and b/docs/static/img/trex128.png differ diff --git a/docs/static/img/trexlogo.svg b/docs/static/img/trexlogo.svg new file mode 100644 index 000000000..e69373c3e --- /dev/null +++ b/docs/static/img/trexlogo.svg @@ -0,0 +1,381 @@ + + + + + + image/svg+xml + + TrackingExposed + + + + + + + + + TrackingExposed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/trexlogo_black.svg b/docs/static/img/trexlogo_black.svg new file mode 100644 index 000000000..61cb01d5a --- /dev/null +++ b/docs/static/img/trexlogo_black.svg @@ -0,0 +1,381 @@ + + + + + + image/svg+xml + + TrackingExposed + + + + + + + + + TrackingExposed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/package.json b/package.json index 324832698..a13918afb 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "docs", "extension", "packages/*", - "backend", "platforms/guardoni", "platforms/ycai/studio", "platforms/yttrex/*", @@ -22,7 +21,7 @@ "scripts": { "commit": "commit", "clean": "yarn workspaces foreach run clean", - "lint": "yarn workspaces foreach run lint", + "lint": "yarn workspaces foreach -v run lint", "type-check": "yarn workspaces foreach run tsc --noEmit", "build": "yarn workspaces foreach run build", "test": "jest", @@ -64,7 +63,7 @@ "release-it-yarn-workspaces": "^2.0.1", "ts-jest": "^27.1.5", "typescript": "^4.7.2", - "webpack": "^5.72.1" + "webpack": "^5.73.0" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ diff --git a/packages/shared/package.json b/packages/shared/package.json index b9f84d789..d8c34a012 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -56,18 +56,18 @@ "filemanager-webpack-plugin": "^6.1.7", "html-webpack-plugin": "^5.5.0", "jest": "^27.5.1", - "mini-css-extract-plugin": "^2.6.0", + "mini-css-extract-plugin": "^2.6.1", "node-loader": "^2.0.0", "node-sass": "^7.0.1", "prettier": "^2.6.2", "react-refresh": "^0.12.0", - "react-refresh-typescript": "^2.0.4", + "react-refresh-typescript": "^2.0.5", "sass-loader": "^12.6.0", "style-loader": "^3.3.1", "tsconfig-paths-webpack-plugin": "^3.5.2", "type-fest": "^2.11.1", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^4.9.2" + "webpack-cli": "^4.10.0" } } diff --git a/packages/shared/src/arbitraries/Directive.arb.ts b/packages/shared/src/arbitraries/Directive.arb.ts index 1e726b469..1307c65f7 100644 --- a/packages/shared/src/arbitraries/Directive.arb.ts +++ b/packages/shared/src/arbitraries/Directive.arb.ts @@ -1,9 +1,29 @@ import fc from 'fast-check'; import { getArbitrary } from 'fast-check-io-ts'; import * as t from 'io-ts'; -import { PostDirectiveSuccessResponse } from '../models/Directive'; +import { + OpenURLDirective, + PostDirectiveSuccessResponse, +} from '../models/Directive'; import { GuardoniExperiment } from '../models/Experiment'; import { propsOmit } from '../utils/arbitrary.utils'; +import { HumanReadableStringArb } from './HumanReadableString.arb'; +import { URLArb } from './URL.arb'; + +const WatchForArb = fc.oneof( + fc.constant('end'), + fc.integer({ min: 1, max: 30 }).map((n) => `${n}s`) +); + +/** + * Common directive + */ +export const CommonDirectiveArb = getArbitrary(OpenURLDirective).map(() => ({ + title: fc.sample(HumanReadableStringArb())[0], + url: fc.sample(URLArb, 1)[0], + urltag: fc.sample(HumanReadableStringArb(), 1)[0], + watchFor: fc.sample(WatchForArb, 1)[0], +})); const { status, since, ...CreateDirectiveResponseProps } = PostDirectiveSuccessResponse.type.props; @@ -20,9 +40,9 @@ export const PostDirectiveSuccessResponseArb = getArbitrary( })); export const GuardoniExperimentArb = getArbitrary( - t.strict(propsOmit(GuardoniExperiment, ['when', 'links'])) + t.strict(propsOmit(GuardoniExperiment, ['when', 'directives'])) ).map((exp) => ({ ...exp, when: new Date().toISOString(), - links: [], + directives: [], })); diff --git a/packages/shared/src/backend/index.ts b/packages/shared/src/backend/index.ts index 30f42b1b5..cf6e809eb 100644 --- a/packages/shared/src/backend/index.ts +++ b/packages/shared/src/backend/index.ts @@ -1,6 +1,5 @@ import express from 'express'; import { RouteContext } from './types'; -import { MakeV0Routes } from './v0'; interface BackendContext extends RouteContext {} @@ -9,7 +8,6 @@ export const makeBackend = ( router: express.Router ): express.Router => { // bind v0 routes to router - MakeV0Routes(router, ctx); return router; }; diff --git a/packages/shared/src/backend/utils/endpoint.ts b/packages/shared/src/backend/utils/endpoint.ts index 18810dc8b..58531fe42 100644 --- a/packages/shared/src/backend/utils/endpoint.ts +++ b/packages/shared/src/backend/utils/endpoint.ts @@ -1,6 +1,16 @@ import { failure } from 'io-ts/lib/PathReporter'; +import { + DocumentedEndpointInstance, + MinimalEndpointInstance, +} from '../../endpoints'; import { GetEndpointSubscriber } from 'ts-endpoint-express'; +import { RecordCodec, runtimeType } from 'ts-io-error/Codec'; import { IOError } from 'ts-io-error/lib'; +import { Controller } from 'ts-endpoint-express/Controller'; +import { Codec } from 'ts-io-error/lib/Codec'; +import { Kind } from 'ts-endpoint-express/HKT'; +import express from 'express'; +import { EndpointInstance, InferEndpointParams } from 'ts-endpoint'; const toError = (e: unknown): IOError => { // console.log(e); @@ -27,4 +37,34 @@ const toError = (e: unknown): IOError => { }; }; -export const AddEndpoint = GetEndpointSubscriber(toError); +declare type UndefinedOrRuntime = N extends RecordCodec + ? { + [k in keyof N['props']]: runtimeType; + } + : undefined; + +export declare type InferEndpointInstanceParams = + EI extends DocumentedEndpointInstance + ? InferEndpointParams + : EI extends EndpointInstance + ? InferEndpointParams + : never; + +export const AddEndpoint = GetEndpointSubscriber(toError) as ( + router: express.Router, + ...m: express.RequestHandler[] +) => ( + endpoint: E, + controller: Controller< + Kind<'IOError', NonNullable>, + UndefinedOrRuntime['params']>, + UndefinedOrRuntime['headers']>, + UndefinedOrRuntime['query']>, + InferEndpointInstanceParams['body'] extends undefined + ? undefined + : InferEndpointInstanceParams['body'] extends Codec + ? runtimeType['body']> + : undefined, + runtimeType['output']> + > +) => void; diff --git a/packages/shared/src/backend/v0.ts b/packages/shared/src/backend/v0.ts deleted file mode 100644 index cfb6dee8e..000000000 --- a/packages/shared/src/backend/v0.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Router } from 'express'; -import { MakeHealthRoute } from './routes/health/health.v0.route'; -import { RouteContext } from './types'; - -export const MakeV0Routes = (router: Router, ctx: RouteContext): void => { - MakeHealthRoute(router, ctx); -}; diff --git a/packages/shared/src/endpoints/utils.ts b/packages/shared/src/endpoints/DocumentedEndpoint.ts similarity index 62% rename from packages/shared/src/endpoints/utils.ts rename to packages/shared/src/endpoints/DocumentedEndpoint.ts index 7ca38e7e4..1ed4d35ad 100644 --- a/packages/shared/src/endpoints/utils.ts +++ b/packages/shared/src/endpoints/DocumentedEndpoint.ts @@ -12,8 +12,7 @@ export interface DocsOpts { tags: string[]; } -// export declare function Endpoint, H extends RecordCodec | undefined = undefined, Q extends RecordCodec | undefined = undefined, B extends Codec | undefined = undefined, P extends RecordCodec | undefined = undefined, E extends EndpointErrors> | undefined = undefined>(e: Endpoint): EndpointInstance>; -type DocumentedEndpointInstance< +export type DocumentedEndpoint< M extends HTTPMethod, O extends Codec, H extends RecordCodec | undefined = undefined, @@ -21,7 +20,41 @@ type DocumentedEndpointInstance< B extends Codec | undefined = undefined, P extends RecordCodec | undefined = undefined, E extends EndpointErrors> | undefined = undefined -> = EndpointInstance> & DocsOpts; +> = Endpoint & DocsOpts; + +export type MinimalEndpoint = + | (Omit< + Endpoint< + HTTPMethod, + Codec, + RecordCodec, + RecordCodec, + Codec, + RecordCodec, + EndpointErrors> + >, + 'getPath' + > & { + getPath: (i?: any) => string; + }) + | (Omit< + DocumentedEndpoint< + HTTPMethod, + Codec, + RecordCodec, + RecordCodec, + Codec, + RecordCodec, + EndpointErrors> + >, + 'getPath' + > & { + getPath: (i?: any) => string; + }); + +// export declare function Endpoint, H extends RecordCodec | undefined = undefined, Q extends RecordCodec | undefined = undefined, B extends Codec | undefined = undefined, P extends RecordCodec | undefined = undefined, E extends EndpointErrors> | undefined = undefined>(e: Endpoint): EndpointInstance>; +export type DocumentedEndpointInstance = + EndpointInstance & DocsOpts; export const DocumentedEndpoint = < M extends HTTPMethod, @@ -36,14 +69,8 @@ export const DocumentedEndpoint = < description, tags, ...opts -}: Endpoint & DocsOpts): DocumentedEndpointInstance< - M, - O, - H, - Q, - B, - P, - E +}: DocumentedEndpoint): DocumentedEndpointInstance< + DocumentedEndpoint > => { const endpoint = Endpoint(opts); return { diff --git a/packages/shared/src/endpoints/MinimalEndpoint.ts b/packages/shared/src/endpoints/MinimalEndpoint.ts new file mode 100644 index 000000000..754734c53 --- /dev/null +++ b/packages/shared/src/endpoints/MinimalEndpoint.ts @@ -0,0 +1,31 @@ +import { Codec, runtimeType } from 'ts-io-error/Codec'; +import { RequiredKeys } from 'typelevel-ts'; +import { MinimalEndpoint } from './DocumentedEndpoint'; + +export type MinimalEndpointInstance = MinimalEndpoint & { + getStaticPath: (f: (i?: any) => string) => string; +}; + +export interface TypeOfEndpointInstance { + getPath: E['getPath']; + getStaticPath: E['getStaticPath']; + Method: E['Method']; + Output: runtimeType; + Errors: { + [k in keyof NonNullable]: NonNullable< + E['Errors'] + >[k] extends Codec + ? runtimeType[k]> + : never; + }; + Input: [RequiredKeys] extends [never] + ? // eslint-disable-next-line @typescript-eslint/no-invalid-void-type + void + : { + [k in keyof NonNullable]: NonNullable< + E['Input'] + >[k] extends Codec + ? runtimeType[k]> + : never; + }; +} diff --git a/packages/shared/src/endpoints/endpoint.types.ts b/packages/shared/src/endpoints/ResourceEndpoints.ts similarity index 90% rename from packages/shared/src/endpoints/endpoint.types.ts rename to packages/shared/src/endpoints/ResourceEndpoints.ts index 29efa28c1..5d6705aa9 100644 --- a/packages/shared/src/endpoints/endpoint.types.ts +++ b/packages/shared/src/endpoints/ResourceEndpoints.ts @@ -1,4 +1,4 @@ -import { MinimalEndpoint } from 'ts-endpoint'; +import { MinimalEndpoint } from './DocumentedEndpoint'; export interface ResourceEndpoints< G extends MinimalEndpoint, diff --git a/packages/shared/src/endpoints/index.ts b/packages/shared/src/endpoints/index.ts index 6f276262c..1bf209d1b 100644 --- a/packages/shared/src/endpoints/index.ts +++ b/packages/shared/src/endpoints/index.ts @@ -1,6 +1,8 @@ -import v0 from './v0'; -import v1 from './v1'; -import v2 from './v2'; -import v3 from './v3'; - -export { v0, v1, v2, v3 }; +export type { + InferEndpointInstanceParams, + Endpoint, + EndpointInstance, +} from 'ts-endpoint'; +export * from './MinimalEndpoint'; +export * from './DocumentedEndpoint'; +export * from './ResourceEndpoints'; diff --git a/packages/shared/src/endpoints/v0/index.ts b/packages/shared/src/endpoints/v0/index.ts deleted file mode 100644 index 3cfaba144..000000000 --- a/packages/shared/src/endpoints/v0/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as t from 'io-ts'; -import { Endpoint } from 'ts-endpoint'; - -const GetHealth = Endpoint({ - Method: 'GET', - getPath: () => `/v0/health`, - Output: t.any, -}); - -export default { - Public: { - GetHealth, - }, -}; diff --git a/packages/shared/src/models/ContributionEvent.ts b/packages/shared/src/models/ContributionEvent.ts index 690c12cd1..566560be7 100644 --- a/packages/shared/src/models/ContributionEvent.ts +++ b/packages/shared/src/models/ContributionEvent.ts @@ -32,3 +32,14 @@ export const ADVContributionEvent = t.strict( ); export type ADVContributionEvent = t.TypeOf; + +export const ContributionEvent = t.union( + [VideoContributionEvent, ADVContributionEvent], + 'ContributionEvent' +); + +export type ContributionEvent = t.TypeOf; + +export const AddEventsBody = t.array(ContributionEvent, 'AddEventsBody'); + +export type AddEventsBody = t.TypeOf; diff --git a/packages/shared/src/models/Directive.ts b/packages/shared/src/models/Directive.ts index 1e8db988c..2168cd8bf 100644 --- a/packages/shared/src/models/Directive.ts +++ b/packages/shared/src/models/Directive.ts @@ -1,6 +1,6 @@ import * as t from 'io-ts'; import { DateFromISOString } from 'io-ts-types'; - +import type * as puppeteer from 'puppeteer-core'; // todo: this should be named CreateExperimentBody export const PostDirectiveSuccessResponse = t.strict( @@ -25,4 +25,77 @@ export const PostDirectiveResponse = t.union( ); export const CreateDirectiveBody = t.any; -export const DirectiveType = t.string; + +export const ComparisonDirectiveType = t.literal('comparison'); +export const SearchDirectiveType = t.literal('search'); +export const DirectiveType = t.union( + [ComparisonDirectiveType, SearchDirectiveType], + 'DirectiveType' +); +export type DirectiveType = t.TypeOf; + +export const ScrollForDirectiveType = t.literal('scroll'); +export const ScrollForDirective = t.strict( + { + type: ScrollForDirectiveType, + incrementScrollByPX: t.number, + totalScroll: t.number, + interval: t.union([t.number, t.undefined]), + }, + 'ScrollForDirective' +); +export type ScrollForDirective = t.TypeOf; + +export const CustomDirectiveType = t.literal('custom'); +export type CustomDirectiveType = t.TypeOf; + +export const CustomDirective = t.strict( + { + type: CustomDirectiveType, + handler: t.string, + }, + 'CustomDirective' +); +export interface CustomDirective { + type: CustomDirectiveType; + handler: (page: puppeteer.Page, directive: CustomDirective) => Promise; +} + +// export const DirectiveHook = t.union( +// [CustomDirective, ScrollForDirective], +// 'DirectiveHook' +// ); +// export type DirectiveHook = t.TypeOf; + +// export const DirectiveHooksMap = t.partial( +// { +// beforeLoad: t.array(DirectiveHook), +// beforeWait: t.array(DirectiveHook), +// afterWait: t.array(DirectiveHook), +// completed: t.array(DirectiveHook), +// }, +// 'DirectiveOptions' +// ); +// export type DirectiveHooksMap = t.TypeOf; + +export const OpenURLDirectiveType = t.literal('openURL'); +export const OpenURLDirective = t.strict( + { + type: t.union([OpenURLDirectiveType, t.undefined]), + title: t.union([t.string, t.undefined]), + url: t.string, + urltag: t.union([t.string, t.undefined]), + watchFor: t.union([ t.number, t.string, t.undefined]), + loadFor: t.union([t.number, t.string, t.undefined]), + }, + + 'OpenURLDirective' +); + +export type OpenURLDirective = t.TypeOf; + +export const Directive = t.union( + [ScrollForDirective, CustomDirective, OpenURLDirective], + 'Directive' +); +export type Directive = t.TypeOf; diff --git a/packages/shared/src/models/Experiment.ts b/packages/shared/src/models/Experiment.ts index 25c302927..48d5940b0 100644 --- a/packages/shared/src/models/Experiment.ts +++ b/packages/shared/src/models/Experiment.ts @@ -1,31 +1,23 @@ import * as t from 'io-ts'; import { nonEmptyArray } from 'io-ts-types'; - -export const ExperimentLink = t.strict( - { - title: t.union([t.string, t.undefined]), - urltag: t.string, - watchFor: t.union([t.string, t.number, t.null]), - url: t.string, - }, - 'ExperimentLink' -); -export type ExperimentLink = t.TypeOf; - -export const GetDirectiveOutput = nonEmptyArray(t.any, 'GetDirectiveOutput'); -export type GetDirectiveOutput = t.TypeOf; +import { Directive } from './Directive'; export const GuardoniExperiment = t.strict( { experimentId: t.string, when: t.string, - directiveType: t.string, - links: t.array(ExperimentLink), + directives: t.array(Directive), }, 'GuardoniExperiment' ); export type GuardoniExperiment = t.TypeOf; +export const GetDirectiveOutput = nonEmptyArray( + GuardoniExperiment, + 'GetDirectiveOutput' +); +export type GetDirectiveOutput = t.TypeOf; + export const ConcludeGuardoniExperimentOutput = t.type( { acknowledged: t.boolean, diff --git a/packages/shared/src/models/HandshakeBody.ts b/packages/shared/src/models/HandshakeBody.ts index d823c40dc..dae58c32e 100644 --- a/packages/shared/src/models/HandshakeBody.ts +++ b/packages/shared/src/models/HandshakeBody.ts @@ -1,5 +1,6 @@ import * as t from 'io-ts'; import { DateFromISOString } from 'io-ts-types/lib/DateFromISOString'; +import { StringOrNull } from './common/StringOrNull'; export const HandshakeBody = t.type( { @@ -30,7 +31,7 @@ export const HandshakeResponse = t.union( href: t.string, execount: t.union([t.number, t.undefined]), newProfile: t.union([t.boolean, t.undefined]), - testName: t.union([t.string, t.null]), + testName: StringOrNull, publicKey: t.string, status: t.literal('active'), }), diff --git a/packages/shared/src/models/common/StringOrNull.ts b/packages/shared/src/models/common/StringOrNull.ts new file mode 100644 index 000000000..0e495f6c0 --- /dev/null +++ b/packages/shared/src/models/common/StringOrNull.ts @@ -0,0 +1,4 @@ +import * as t from 'io-ts'; + +export const StringOrNull = t.union([t.string, t.null], 'StringOrNull'); +export type StringOrNull = t.TypeOf; diff --git a/packages/shared/src/models/contributor/ContributorPersonalStats.ts b/packages/shared/src/models/contributor/ContributorPersonalStats.ts index 7f5bae91c..517db4f54 100644 --- a/packages/shared/src/models/contributor/ContributorPersonalStats.ts +++ b/packages/shared/src/models/contributor/ContributorPersonalStats.ts @@ -1,10 +1,11 @@ import * as t from 'io-ts'; +import { StringOrNull } from '../common/StringOrNull'; export const HomeMetadata = t.strict( { id: t.string, savingTime: t.string, - selected: t.array(t.union([t.string, t.null])), + selected: t.array(StringOrNull, 'Selected'), }, 'HomeMetadata' ); diff --git a/packages/shared/src/models/contributor/ContributorPublicKey.ts b/packages/shared/src/models/contributor/ContributorPublicKey.ts new file mode 100644 index 000000000..d13b6283e --- /dev/null +++ b/packages/shared/src/models/contributor/ContributorPublicKey.ts @@ -0,0 +1,18 @@ +import * as t from 'io-ts'; + +export const ContributorPublicKeyResponse = t.strict( + { + success: t.boolean, + result: t.strict({ + metadata: t.strict({ + acknowledged: t.boolean, + deletedCount: t.number, + }), + }), + }, + 'ContributorPublicKeyResponse' +); + +export type ContributorPublicKeyResponse = t.TypeOf< + typeof ContributorPublicKeyResponse +>; diff --git a/packages/shared/src/models/http/tiktok/TikTokSearch.ts b/packages/shared/src/models/http/tiktok/TikTokSearch.ts deleted file mode 100644 index b3e5d6be1..000000000 --- a/packages/shared/src/models/http/tiktok/TikTokSearch.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as t from 'io-ts'; - -export const TikTokSearchMetadata = t.strict( - { - id: t.string, - order: t.number, - video: t.type({ - videoId: t.string, - type: t.string, - authorId: t.string, - }), - textdesc: t.string, - query: t.string, - thumbnail: t.string, - savingTime: t.string, - publishingDate: t.union([t.string, t.null]), - }, - 'TikTokSearchResult' -); - -export type TikTokSearchMetadata = t.TypeOf; - -export const TikTokSearch = t.array(TikTokSearchMetadata, 'TikTokSearch'); - -export type TikTokSearch = t.TypeOf; diff --git a/packages/shared/src/models/index.ts b/packages/shared/src/models/index.ts index 9c9fec407..0a22026a3 100644 --- a/packages/shared/src/models/index.ts +++ b/packages/shared/src/models/index.ts @@ -1,3 +1,4 @@ +import { StringOrNull } from './common/StringOrNull'; import { AuthResponse } from './Auth'; import { AuthorizedContentCreator, @@ -5,9 +6,9 @@ import { ContentCreatorVideosOutput, RegisterContentCreatorBody, } from './ContentCreator'; -import { ChannelADV } from './stats/ChannelADV'; +import { ChannelADV, ChannelADVStats } from './stats/ChannelADV'; import { CreatorStats, CreatorStatContent } from './CreatorStats'; -import { HandshakeBody } from './HandshakeBody'; +import { HandshakeBody, HandshakeResponse } from './HandshakeBody'; import { Recommendation, PartialRecommendation, @@ -16,30 +17,36 @@ import { } from './Recommendation'; import { GetRelatedChannelsOutput, ChannelRelated } from './ChannelRelated'; import { Video, UpdateVideoBody } from './Video'; -import { VideoContributionEvent } from './ContributionEvent'; +import { + AddEventsBody, + ContributionEvent, + VideoContributionEvent, +} from './ContributionEvent'; import { GuardoniExperiment, ConcludeGuardoniExperimentOutput, GetDirectiveOutput, GetPublicDirectivesOutput, GetExperimentListOutput, - ExperimentLink, } from './Experiment'; -import { PostDirectiveResponse } from './Directive'; +import * as Directive from './Directive'; export default { // common + StringOrNull, + // handshake HandshakeBody, + HandshakeResponse, + ContributionEvent, VideoContributionEvent, + AddEventsBody, // guardoni // guardoni experiments (to be moved) - PostDirectiveResponse, GuardoniExperiment, ConcludeGuardoniExperimentOutput, GetDirectiveOutput, GetExperimentListOutput, GetPublicDirectivesOutput, - ExperimentLink, // ycai // content creator RegisterContentCreatorBody, @@ -57,8 +64,10 @@ export default { ContentCreatorVideosOutput, // cc stats ChannelADV, + ChannelADVStats, CreatorStats, CreatorStatContent, ChannelRelated, GetRelatedChannelsOutput, + ...Directive }; diff --git a/packages/shared/src/providers/api.provider.ts b/packages/shared/src/providers/api.provider.ts index b85583f70..0cb28ebb0 100644 --- a/packages/shared/src/providers/api.provider.ts +++ b/packages/shared/src/providers/api.provider.ts @@ -14,7 +14,7 @@ import * as S from 'fp-ts/lib/string'; import * as TE from 'fp-ts/lib/TaskEither'; import * as t from 'io-ts'; import { PathReporter } from 'io-ts/lib/PathReporter'; -import { MinimalEndpointInstance, TypeOfEndpointInstance } from 'ts-endpoint'; +import { MinimalEndpointInstance, TypeOfEndpointInstance } from '../endpoints'; import { APIError } from '../errors/APIError'; import { trexLogger } from '../logger'; @@ -160,10 +160,16 @@ export const MakeHTTPClient = (client: AxiosInstance): HTTPClient => { return { apiFromEndpoint, request, get, post, put }; }; -export type TERequest = ( - input: TypeOfEndpointInstance['Input'], - ia?: any -) => TE.TaskEither['Output']>; +export type TERequest = + TypeOfEndpointInstance['Input'] extends never + ? ( + input?: TypeOfEndpointInstance['Input'], + ia?: any + ) => TE.TaskEither['Output']> + : ( + input: TypeOfEndpointInstance['Input'], + ia?: any + ) => TE.TaskEither['Output']>; export interface ResourceEndpointsRecord { [apiKey: string]: MinimalEndpointInstance; diff --git a/packages/shared/src/providers/browser.provider.ts b/packages/shared/src/providers/browser.provider.ts index 682df4725..052f20390 100644 --- a/packages/shared/src/providers/browser.provider.ts +++ b/packages/shared/src/providers/browser.provider.ts @@ -3,7 +3,7 @@ import { pipe } from 'fp-ts/lib/function'; import * as R from 'fp-ts/lib/Record'; import * as TE from 'fp-ts/lib/TaskEither'; import * as t from 'io-ts'; -import { MinimalEndpointInstance, TypeOfEndpointInstance } from 'ts-endpoint'; +import { MinimalEndpointInstance, TypeOfEndpointInstance } from '../endpoints'; import { bo } from '../extension/utils/browser.utils'; import { getStaticPath } from '../utils/endpoint.utils'; import { trexLogger } from '../logger'; diff --git a/packages/shared/src/providers/dataDonation.provider.ts b/packages/shared/src/providers/dataDonation.provider.ts index 4e9b5130c..353f9bcf1 100644 --- a/packages/shared/src/providers/dataDonation.provider.ts +++ b/packages/shared/src/providers/dataDonation.provider.ts @@ -3,14 +3,15 @@ import { differenceInSeconds } from 'date-fns'; import { pipe } from 'fp-ts/lib/function'; import * as TE from 'fp-ts/lib/TaskEither'; import _ from 'lodash'; -import { Keypair } from '../models/extension/Keypair'; -import * as Endpoints from '../endpoints'; +import { Endpoint, EndpointInstance } from '../endpoints'; +import { Codec, RecordCodec } from 'ts-io-error/Codec'; +import { trexLogger } from '../logger'; import { ADVContributionEvent, VideoContributionEvent, } from '../models/ContributionEvent'; +import { Keypair } from '../models/extension/Keypair'; import { getTimeISO8601 } from '../utils/date.utils'; -import { trexLogger } from '../logger'; import { BrowserProvider, MessagesAPI } from './browser.provider'; import bs58Provider from './bs58.provider'; @@ -333,6 +334,16 @@ interface DataDonationProviderContext { parents?: number; } >; + addEvent: EndpointInstance< + Endpoint< + 'POST', + Codec, + RecordCodec, + undefined, + Codec, + undefined + > + >; } export const GetDataDonationProvider = ( @@ -450,7 +461,7 @@ export const GetDataDonationProvider = ( void pipe( bs58Provider.makeSignature(state.content, keypair.secretKey), TE.chain((signature) => - ctx.browser.sendAPIMessage(Endpoints.v2.Public.AddEvents)({ + ctx.browser.sendAPIMessage(ctx.addEvent)({ Headers: { 'X-YTtrex-Build': ctx.version, 'X-YTtrex-Version': ctx.version, diff --git a/packages/shared/src/providers/puppeteer/DirectiveHook.ts b/packages/shared/src/providers/puppeteer/DirectiveHook.ts new file mode 100644 index 000000000..6c6532f73 --- /dev/null +++ b/packages/shared/src/providers/puppeteer/DirectiveHook.ts @@ -0,0 +1,34 @@ +import * as puppeteer from 'puppeteer-core'; +import { OpenURLDirective } from '../../models/Directive'; + +export type HookHandler = ( + page: puppeteer.Page, + directive: any, + options?: any +) => Promise; + +export interface DirectiveHooks< + DO extends string, + CS extends { + [key: string]: HookHandler; + } +> { + openURL: { + beforeDirectives: (page: puppeteer.Page) => Promise; + beforeLoad: ( + page: puppeteer.Page, + directive: OpenURLDirective + ) => Promise; + beforeWait: ( + page: puppeteer.Page, + directive: OpenURLDirective + ) => Promise; + afterWait: ( + page: puppeteer.Page, + directive: OpenURLDirective + ) => Promise; + completed: () => Promise; + }; + customs?: CS; + DOMAIN_NAME: DO; +} diff --git a/packages/shared/src/providers/puppeteer/directives/openURL.ts b/packages/shared/src/providers/puppeteer/directives/openURL.ts new file mode 100644 index 000000000..67f2510be --- /dev/null +++ b/packages/shared/src/providers/puppeteer/directives/openURL.ts @@ -0,0 +1,108 @@ +import * as TE from 'fp-ts/lib/TaskEither'; +import type * as puppeteer from 'puppeteer-core'; +import { AppError, toAppError } from '../../../errors/AppError'; +import { Logger } from '../../../logger'; +import { OpenURLDirective } from '../../../models/Directive'; +import { DirectiveHooks } from '../DirectiveHook'; + +interface OpenURLContext { + logger: Logger; + hooks: DirectiveHooks; +} + +interface OpenURLOptions { + loadFor: number; +} + +/** + * Directive with type `openURL` + * + * This is the default directive, which navigates to the given url and + * performs some domain specific hooks. + * + */ + +export const openURL = + (ctx: OpenURLContext) => + ( + page: puppeteer.Page, + directive: OpenURLDirective, + opts: OpenURLOptions + ): TE.TaskEither => { + return TE.tryCatch(async () => { + try { + await ctx.hooks.openURL.beforeLoad(page, directive); + // await throwTE(runHooks(ctx)(page, directive, 'beforeLoad')); + } catch (error) { + ctx.logger.debug( + 'error in beforeLoad %s %s directive %o', + (error as any).message, + (error as any).stack, + directive + ); + } + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + const loadFor = directive.loadFor ?? opts.loadFor ?? 6000; + + ctx.logger.info( + '— Loading %s (for %d ms) %O', + directive?.url, + loadFor, + directive + ); + // Remind you can exclude directive with env/--exclude=urltag + + // TODO the 'timeout' would allow to repeat this operation with + // different parameters. https://stackoverflow.com/questions/60051954/puppeteer-timeouterror-navigation-timeout-of-30000-ms-exceeded + try { + await page.goto(directive.url, { + waitUntil: 'networkidle0', + timeout: 10000, + }); + } catch (e) { + ctx.logger.error('Error during goto %O (networkidle0)', e); + + try { + await page.goto(directive.url, { + waitUntil: ['domcontentloaded'], + timeout: 5000, + }); + } catch (e) { + ctx.logger.error('Error during goto %O (docontentloaded)', e); + throw e; + } + } + + try { + await ctx.hooks.openURL.beforeWait(page, directive); + } catch (error) { + ctx.logger.error( + 'error in beforeWait %s (%s)', + (error as any).message, + (error as any).stack + ); + } + + ctx.logger.info( + 'Directive to URL %s, Loading delay %d (--load optional)', + directive.url, + loadFor + ); + + await page.waitForTimeout(typeof loadFor === 'string' ? parseInt(loadFor) : loadFor); + + try { + // debugger; + await ctx.hooks.openURL.afterWait(page, directive); + } catch (error) { + // eslint-disable-next-line no-console + console.log( + 'Error in afterWait', + (error as any).message, + (error as any).stack + ); + } + ctx.logger.info('— Completed %O \n', directive); + }, toAppError); + }; diff --git a/packages/shared/src/providers/puppeteer/directives/scroll.ts b/packages/shared/src/providers/puppeteer/directives/scroll.ts new file mode 100644 index 000000000..3c57c5865 --- /dev/null +++ b/packages/shared/src/providers/puppeteer/directives/scroll.ts @@ -0,0 +1,68 @@ +import * as TE from 'fp-ts/lib/TaskEither'; +import type * as puppeteer from 'puppeteer-core'; +import { AppError, toAppError } from '../../../errors/AppError'; +import { ScrollForDirective } from '../../../models/Directive'; +import { DirectiveContext } from './types'; + +async function autoScroll( + page: puppeteer.Page, + opts: ScrollForDirective +): Promise { + await page.evaluate(function autoScroll(opts) { + return new Promise((resolve) => { + const distance = opts.incrementScrollByPX; + + const timer = setInterval(() => { + window.scrollBy(0, distance); + + clearInterval(timer); + resolve(undefined); + }, opts.interval || 100); + }); + }, opts as any); +} + +/** + * Directive with type `scroll` + * + * Scroll page with an increment of `incrementScrollBy` until it reaches `totalScroll` + * + */ + +export const GetScrollFor = + (ctx: DirectiveContext) => + ( + page: puppeteer.Page, + directive: ScrollForDirective + ): TE.TaskEither => { + return TE.tryCatch( + async () => + new Promise((resolve, reject) => { + let i = 0; + ctx.logger.debug('Start scrolling: %O', directive); + const timer = setInterval(() => { + ctx.logger.debug('Running for time %d', i); + + void autoScroll(page, directive).then(() => { + ctx.logger.debug( + 'Scrolled by %d', + i * directive.incrementScrollByPX + ); + + if (directive.totalScroll < i * directive.incrementScrollByPX) { + ctx.logger.debug( + 'Scroll total reached: %d (%d)', + i * directive.incrementScrollByPX, + directive.totalScroll + ); + clearInterval(timer); + resolve(undefined); + } + + i++; + }); + }, directive.interval ?? 300); + }), + toAppError + ); + }; diff --git a/packages/shared/src/providers/puppeteer/directives/types.ts b/packages/shared/src/providers/puppeteer/directives/types.ts new file mode 100644 index 000000000..cfd9aa280 --- /dev/null +++ b/packages/shared/src/providers/puppeteer/directives/types.ts @@ -0,0 +1,5 @@ +import { Logger } from '../../../logger'; + +export interface DirectiveContext { + logger: Logger; +} diff --git a/packages/shared/src/providers/puppeteer/index.ts b/packages/shared/src/providers/puppeteer/index.ts new file mode 100644 index 000000000..6adabff2f --- /dev/null +++ b/packages/shared/src/providers/puppeteer/index.ts @@ -0,0 +1,3 @@ +import { GetPuppeteer } from './puppeteer.provider'; + +export { GetPuppeteer }; diff --git a/packages/shared/src/providers/puppeteer/puppeteer.provider.ts b/packages/shared/src/providers/puppeteer/puppeteer.provider.ts new file mode 100644 index 000000000..320b8f68d --- /dev/null +++ b/packages/shared/src/providers/puppeteer/puppeteer.provider.ts @@ -0,0 +1,135 @@ +import { pipe } from 'fp-ts/lib/function'; +import * as TE from 'fp-ts/lib/TaskEither'; +import type * as puppeteer from 'puppeteer-core'; +import { PuppeteerExtra } from 'puppeteer-extra'; +import StealthPlugin from 'puppeteer-extra-plugin-stealth'; +import { AppError, toAppError } from '../../errors/AppError'; +import { Logger } from '../../logger'; +import { + CustomDirective, + CustomDirectiveType, + Directive, + ScrollForDirective, + ScrollForDirectiveType, +} from '../../models/Directive'; +// import { throwTE } from '../../utils/task.utils'; +import { DirectiveHooks } from './DirectiveHook'; +import { openURL } from './directives/openURL'; +import { GetScrollFor } from './directives/scroll'; + +export type LaunchOptions = puppeteer.LaunchOptions & + puppeteer.BrowserLaunchArgumentOptions & + puppeteer.BrowserConnectOptions & { + product?: puppeteer.Product; + extraPrefsFirefox?: Record; + }; + +interface PuppeteerProviderContext { + logger: Logger; + config: { + loadFor: number; + }; + puppeteer: PuppeteerExtra; + hooks: DirectiveHooks; +} + +export const launch = + (ctx: PuppeteerProviderContext) => + (opts: LaunchOptions): TE.TaskEither => { + return TE.tryCatch(async () => { + ctx.logger.info('Launch puppeteer %O', opts); + ctx.puppeteer.use(StealthPlugin()); + const browser = await ctx.puppeteer.launch(opts as any); + + return browser as any; + }, toAppError); + }; + +/** + * automate directive execution for browser page + */ +const operateTab = + (ctx: PuppeteerProviderContext) => + (page: puppeteer.Page, h: Directive): TE.TaskEither => { + if (ScrollForDirective.is(h) || CustomDirective.is(h)) { + switch (h.type) { + case ScrollForDirectiveType.value: { + return GetScrollFor(ctx)(page, h); + } + case CustomDirectiveType.value: + return TE.tryCatch(() => { + ctx.logger.debug('Custom handler %s', h.handler); + const handler = ctx.hooks.customs?.[h.handler]; + if (handler) { + ctx.logger.debug('Handler found'); + try { + return handler(page, h); + } catch (e) { + ctx.logger.error(`Error in custom handler %s`, h.handler); + } + } + return Promise.resolve(undefined); + }, toAppError); + default: + return TE.right(undefined); + } + } + + return openURL(ctx)(page, h, { + loadFor: ctx.config.loadFor, + }); + }; + +export const operateBrowser = + (ctx: PuppeteerProviderContext) => + ( + page: puppeteer.Page, + directives: Directive[] + ): TE.TaskEither => { + return pipe( + TE.tryCatch( + () => ctx.hooks.openURL.beforeDirectives(page), + (e) => new AppError('BeforeDirectivesError', (e as any).message, []) + ), + TE.chain(() => + TE.sequenceSeqArray(directives.map((d) => operateTab(ctx)(page, d))) + ), + TE.chain(() => + TE.tryCatch( + () => ctx.hooks.openURL.completed(), + (e) => new AppError('Completed', (e as any).message, []) + ) + ), + TE.chainFirst(() => + TE.tryCatch(async () => { + if (ctx.config.loadFor < 20000) { + ctx.logger.debug('Wait for timeout %d', 15000); + await page.waitForTimeout(15000); + } + return undefined; + }, toAppError) + ) + ); + }; + +export interface PuppeteerProvider { + launch: (opts: LaunchOptions) => TE.TaskEither; + operateTab: ( + page: puppeteer.Page, + directive: Directive + ) => TE.TaskEither; + operateBrowser: ( + page: puppeteer.Page, + directive: Directive[] + ) => TE.TaskEither; +} + +export type GetPuppeteer = (ctx: PuppeteerProviderContext) => PuppeteerProvider; + +export const GetPuppeteer: GetPuppeteer = (ctx) => { + return { + launch: launch(ctx), + operateBrowser: operateBrowser(ctx), + operateTab: operateTab(ctx), + }; +}; diff --git a/packages/shared/src/providers/swagger/IOTSToOpenAPISchema.ts b/packages/shared/src/providers/swagger/IOTSToOpenAPISchema.ts index 4b556701d..92b106e61 100644 --- a/packages/shared/src/providers/swagger/IOTSToOpenAPISchema.ts +++ b/packages/shared/src/providers/swagger/IOTSToOpenAPISchema.ts @@ -3,7 +3,12 @@ import { keys, record } from 'fp-ts/lib/Record'; import * as t from 'io-ts'; import * as NEA from 'io-ts-types/lib/nonEmptyArray'; +import { Directive } from '../../models/Directive'; +import { swaggerLogger } from './utils'; +interface AnyType extends t.Type { + _tag: 'AnyType'; +} // interface NonEmptyArrayTypeT // extends t.Type< // NonEmptyArray>, @@ -23,6 +28,7 @@ interface IntersectionType extends t.IntersectionType {} interface BrandedType extends t.RefinementType {} export type HasOpenAPISchema = + | t.UnionC | t.UnknownType | t.UndefinedType | t.NullType @@ -33,6 +39,7 @@ export type HasOpenAPISchema = | t.KeyofType | t.LiteralType | t.PartialType + | AnyType | ArrayType | RecordType | StructType @@ -64,6 +71,7 @@ export const getInnerSchemaName = (tt: string): string => { return tt; }; + // const isNEA = (type: unknown): type is NEA.NonEmptyArrayC => { // console.log('is NEA', type); // return type !== undefined && (type as any).name.startsWith('NonEmptyArray<'); @@ -88,6 +96,8 @@ export const getOpenAPISchema = (codec: T): any => { } switch (type._tag) { + case 'AnyType': + return { type: 'object', description: 'any value' }; case 'UnknownType': return { type: 'object', description: type.name }; case 'UndefinedType': @@ -149,10 +159,10 @@ export const getOpenAPISchema = (codec: T): any => { return { type: 'array', items: type.types.map(getOpenAPISchema) }; case 'UnionType': const nonNullableTypes = type.types.filter( - (t) => t._tag !== 'UndefinedType' && t._tag !== 'NullType' + (tt: any) => tt._tag !== 'UndefinedType' && tt._tag !== 'NullType' ); const isRequired = type.types.length === nonNullableTypes.length; - if (nonNullableTypes.every((v) => v._tag === 'LiteralType')) { + if (nonNullableTypes.every((v: any) => v._tag === 'LiteralType')) { return { type: 'string', description: type.name, @@ -227,15 +237,15 @@ export const getOpenAPISchema = (codec: T): any => { }; } - // if (codec.name === 'GetDirectiveOutput') { - // return { - // type: 'array', - // items: Directive.types.map((tt: any) => ({ - // $ref: `#/components/schemas/${tt.name}`, - // })), - // required: true, - // }; - // } + if (codec.name === 'GetDirectiveOutput') { + return { + type: 'array', + items: Directive.types.map((tt: any) => ({ + $ref: `#/components/schemas/${tt.name}`, + })), + required: true, + }; + } if (codec.name === undefined) { return { @@ -244,7 +254,7 @@ export const getOpenAPISchema = (codec: T): any => { required: false, }; } - // console.log('unhandled codec', codec.name); + swaggerLogger.warn('unhandled codec %O', codec); } } }; diff --git a/packages/shared/src/providers/swagger/swagger.provider.node.ts b/packages/shared/src/providers/swagger/swagger.provider.node.ts index 11e2a8080..a9c67bc83 100644 --- a/packages/shared/src/providers/swagger/swagger.provider.node.ts +++ b/packages/shared/src/providers/swagger/swagger.provider.node.ts @@ -10,23 +10,33 @@ import * as fs from 'fs'; import * as path from 'path'; -import { MinimalEndpointInstance } from 'ts-endpoint'; +import { MinimalEndpointInstance } from '../../endpoints'; import { generateDoc, DocConfig } from './swagger.provider'; +import { swaggerLogger } from './utils'; // eslint-disable-next-line @typescript-eslint/no-var-requires const { validate } = require('@apidevtools/swagger-cli'); const getDocumentation = (e: MinimalEndpointInstance): string => { - const hasDocumentationMethod = (e as any).getDocumentation !== undefined; - const description = hasDocumentationMethod - ? (e as any).getDocumentation() - : `${e.Method}: ${e.getStaticPath((a) => `:${a}`)}`; - - return description; + swaggerLogger.debug('Getting documentation for endpoint %O', e); + const hasDocumentationMethod = (e as any).description !== undefined; + if (hasDocumentationMethod) { + if ((e as any).description.path) { + return fs.readFileSync((e as any).description.path, 'utf-8'); + } + } + return `${e.Method}: ${e.getStaticPath((a) => `:${a}`)}`; }; -export const writeOpenDocTo = (config: DocConfig, to: string): void => { +export const writeOpenDocTo = ( + config: DocConfig, + to: string, + v?: boolean +): void => { const openDocAPI = generateDoc(config, getDocumentation); + // swaggerLogger.debug('Open doc api %O', openDocAPI) + + fs.mkdirSync(to, { recursive: true }); // this file is unused, but is needed to see what // comes from generateDoc fs.writeFileSync( @@ -34,15 +44,26 @@ export const writeOpenDocTo = (config: DocConfig, to: string): void => { JSON.stringify(openDocAPI, null, 2) ); - validate(openDocAPI, { schema: false, spec: true }, (err: any, api: any) => { - if (err) { - // eslint-disable-next-line - console.log(JSON.stringify(err.details, null, 2)); - throw err; - } + if (v) { + validate( + openDocAPI, + { schema: false, spec: true }, + (err: any, api: any) => { + if (err) { + const jsonError = err.toJSON(); + swaggerLogger.error(`Error %s: %O`, jsonError.name, jsonError); + throw err; + } + + const openDocAPIJson = JSON.stringify(api, null, 2); + swaggerLogger.debug('Open doc api %O', openDocAPIJson); + fs.writeFileSync(path.resolve(to, 'open-api.json'), openDocAPIJson); + } + ); + } else { fs.writeFileSync( path.resolve(to, 'open-api.json'), - JSON.stringify(api, null, 2) + JSON.stringify(openDocAPI, null, 2) ); - }); + } }; diff --git a/packages/shared/src/providers/swagger/swagger.provider.ts b/packages/shared/src/providers/swagger/swagger.provider.ts index 9fcfc895f..216e0bff8 100644 --- a/packages/shared/src/providers/swagger/swagger.provider.ts +++ b/packages/shared/src/providers/swagger/swagger.provider.ts @@ -11,11 +11,10 @@ import { pipe } from 'fp-ts/lib/function'; import * as R from 'fp-ts/lib/Record'; import * as S from 'fp-ts/lib/string'; -import { - MinimalEndpoint, - MinimalEndpointInstance -} from 'ts-endpoint/lib/helpers'; +import { MinimalEndpoint, MinimalEndpointInstance } from '../../endpoints'; import { getOpenAPISchema, IOTOpenDocSchema } from './IOTSToOpenAPISchema'; +import { swaggerLogger } from './utils'; +import * as t from 'io-ts'; interface ServerConfig { protocol: 'http' | 'https'; @@ -129,7 +128,7 @@ const apiSchemaFromEndpoint = ( ) : []; - // console.log('endpoint query', e.Input.Params); + swaggerLogger.debug('endpoint query', e.Input?.Params); const Params = (input as any).Params; // derive path parameters from io-ts definition of e.Input.Params @@ -162,7 +161,7 @@ const apiSchemaFromEndpoint = ( 'application/json': { schema: { $ref: `#/components/schemas/${getInnerSchemaName( - (e.Input?.Body as any)?.name + (e.Input?.Body as any).name )}`, }, }, @@ -300,12 +299,15 @@ export const generateDoc = ( const { paths, schemas } = getPaths(config.endpoints, getDocumentation); const modelSchema = pipe( - config.models, + { + any: t.any, + ...config.models, + }, R.reduceWithIndex(S.Ord)( { any: { - type: 'object', - description: 'any value', + type: 'any', + description: 'Any value', }, string: { type: 'string', @@ -321,7 +323,9 @@ export const generateDoc = ( }, }, (key, acc, model) => { - const { required, ...modelSchema } = getOpenAPISchema(model); + swaggerLogger.debug('Model %O', model); + const modelSchema = getOpenAPISchema(model); + swaggerLogger.debug('Model schema %O', modelSchema); if (model.name) { return { ...acc, @@ -333,6 +337,9 @@ export const generateDoc = ( } ) ); + + swaggerLogger.debug('Model schema %O', modelSchema); + return { openapi: '3.0.3', info: { diff --git a/packages/shared/src/providers/swagger/utils.ts b/packages/shared/src/providers/swagger/utils.ts new file mode 100644 index 000000000..1ffddd100 --- /dev/null +++ b/packages/shared/src/providers/swagger/utils.ts @@ -0,0 +1,3 @@ +import { trexLogger } from '../../logger'; + +export const swaggerLogger = trexLogger.extend('swagger'); diff --git a/packages/shared/src/utils/endpoint.utils.ts b/packages/shared/src/utils/endpoint.utils.ts index fc1130d07..421646cba 100644 --- a/packages/shared/src/utils/endpoint.utils.ts +++ b/packages/shared/src/utils/endpoint.utils.ts @@ -1,10 +1,6 @@ -import { - MinimalEndpointInstance, - TypeOfEndpointInstance, -} from 'ts-endpoint/lib/helpers'; +import { MinimalEndpointInstance, TypeOfEndpointInstance } from '../endpoints'; import * as R from 'fp-ts/lib/Record'; import { pipe } from 'fp-ts/lib/function'; -import * as Endpoints from '../endpoints'; import * as S from 'fp-ts/lib/string'; import * as A from 'fp-ts/lib/Array'; @@ -29,21 +25,13 @@ const toArray = ( A.map(([k, e]) => e) ); -const allEndpoints = [ - Endpoints.v1.Public, - Endpoints.v2.Public, - Endpoints.v3.Public, - Endpoints.v3.Creator, -].flatMap(toArray); - -export const fromStaticPath = ( - staticPath?: string, - Params?: any -): MinimalEndpointInstance | undefined => { - if (staticPath !== undefined) { - return allEndpoints.find((e) => - S.Eq.equals(getStaticPath(e, Params), staticPath) - ); - } - return undefined; -}; +export const fromStaticPath = + (endpoints: Array>) => + (staticPath?: string, Params?: any): MinimalEndpointInstance | undefined => { + if (staticPath !== undefined) { + return endpoints + .flatMap(toArray) + .find((e) => S.Eq.equals(getStaticPath(e, Params), staticPath)); + } + return undefined; + }; diff --git a/packages/shared/src/utils/task.utils.ts b/packages/shared/src/utils/task.utils.ts new file mode 100644 index 000000000..a900cbac7 --- /dev/null +++ b/packages/shared/src/utils/task.utils.ts @@ -0,0 +1,10 @@ +import * as TE from 'fp-ts/lib/TaskEither'; + +export const throwTE = async (te: TE.TaskEither): Promise => { + return await te().then((rr) => { + if (rr._tag === 'Left') { + return Promise.reject(rr.left); + } + return Promise.resolve(rr.right); + }); +}; diff --git a/packages/taboule/package.json b/packages/taboule/package.json index f6099310f..1323d5f12 100644 --- a/packages/taboule/package.json +++ b/packages/taboule/package.json @@ -55,9 +55,9 @@ "prettier": "^2.6.2", "ts-loader": "^9.3.0", "typelevel-ts": "^0.4.0", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.9.0" + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.9.2" } } diff --git a/packages/taboule/src/config/index.tsx b/packages/taboule/src/config/index.tsx index 42c073be1..44dc19299 100644 --- a/packages/taboule/src/config/index.tsx +++ b/packages/taboule/src/config/index.tsx @@ -11,7 +11,7 @@ import { TikTokPSearchMetadata, // SummaryMetadata, } from '@shared/models/contributor/ContributorPersonalSummary'; -import { TikTokSearchMetadata } from '@shared/models/http/tiktok/TikTokSearch'; +import { SearchMetaData as TikTokSearchMetadata } from '@tktrex/shared/models/MetaData'; import { Metadata } from '@shared/models/Metadata'; import { GuardoniExperiment } from '@shared/models/Experiment'; import * as React from 'react'; @@ -107,7 +107,7 @@ export const defaultConfiguration = ( }, { ...columnDefault, - field: 'links', + field: 'directives', minWidth: 350, renderCell: (params) => { return ( @@ -389,11 +389,11 @@ export const defaultConfiguration = ( ); }, }, - { - ...columnDefault, - field: 'thumbnail', - renderCell: cells.avatarCell, - }, + // { + // ...columnDefault, + // field: 'thumbnails', + // renderCell: cells.avatarCell, + // }, { ...columnDefault, field: 'savingTime', diff --git a/packages/taboule/src/state/commands.ts b/packages/taboule/src/state/commands.ts index 6773716eb..0b34d8b25 100644 --- a/packages/taboule/src/state/commands.ts +++ b/packages/taboule/src/state/commands.ts @@ -1,6 +1,6 @@ import { MakeAPIClient, TERequest } from '@shared/providers/api.provider'; import { command } from 'avenger'; -import * as Endpoints from '@shared/endpoints'; +import * as Endpoints from '@yttrex/shared/endpoints'; import { TabouleQueries } from './queries'; import { pipe } from 'fp-ts/lib/function'; import * as TE from 'fp-ts/lib/TaskEither'; diff --git a/packages/taboule/src/state/queries.ts b/packages/taboule/src/state/queries.ts index 3c5505303..84c849d28 100644 --- a/packages/taboule/src/state/queries.ts +++ b/packages/taboule/src/state/queries.ts @@ -1,4 +1,5 @@ -import * as endpoints from '@shared/endpoints'; +import * as endpoints from '@yttrex/shared/endpoints'; +import * as tkEndpoints from '@tktrex/shared/endpoints'; import { APIError } from '@shared/errors/APIError'; import { ChannelRelated } from '@shared/models/ChannelRelated'; import { @@ -12,7 +13,7 @@ import { } from '@shared/models/contributor/ContributorPersonalSummary'; import { GuardoniExperiment } from '@shared/models/Experiment'; import { SearchQuery } from '@shared/models/http/SearchQuery'; -import { TikTokSearchMetadata } from '@shared/models/http/tiktok/TikTokSearch'; +import { SearchMetaData as TKSearchMetadata } from '@tktrex/shared/models/MetaData'; import { Metadata } from '@shared/models/Metadata'; import { MakeAPIClient } from '@shared/providers/api.provider'; import { available, queryStrict } from 'avenger'; @@ -43,7 +44,7 @@ export interface TabouleQueries { // tik tok tikTokPersonalHTMLSummary: EndpointQuery; tikTokPersonalSearch: EndpointQuery; - tikTokSearches: EndpointQuery; + tikTokSearches: EndpointQuery; } interface GetTabouleQueriesProps { @@ -55,7 +56,7 @@ export const GetTabouleQueries = ({ baseURL, accessToken, }: GetTabouleQueriesProps): TabouleQueries => { - const { API } = MakeAPIClient( + const { API: YTAPI } = MakeAPIClient( { baseURL, getAuth: async (req) => req, @@ -63,6 +64,14 @@ export const GetTabouleQueries = ({ }, endpoints ); + const { API: TK_API } = MakeAPIClient( + { + baseURL, + getAuth: async (req) => req, + onUnauthorized: async (res) => res, + }, + tkEndpoints + ); const ccRelatedUsers = queryStrict< SearchRequestInput, @@ -71,7 +80,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v3.Creator.CreatorRelatedChannels({ + YTAPI.v3.Creator.CreatorRelatedChannels({ ...input, Headers: { 'x-authorization': accessToken ?? '', @@ -79,7 +88,7 @@ export const GetTabouleQueries = ({ }), TE.map(({ totalRecommendations, ...r }) => ({ ...r, - total: totalRecommendations + total: totalRecommendations, })) ), available @@ -92,7 +101,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v2.Public.GetExperimentById(input), + YTAPI.v2.Public.GetExperimentById(input), TE.map((content) => ({ total: content.length, content })) ), available @@ -105,7 +114,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v2.Public.GetExperimentList(input), + YTAPI.v2.Public.GetExperimentList(input), TE.map((content) => { return { total: content.total, @@ -126,7 +135,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v1.Public.GetPersonalStatsByPublicKey(input), + YTAPI.v1.Public.GetPersonalStatsByPublicKey(input), TE.map((content) => ({ total: content.stats.home, content: content.homes, @@ -138,7 +147,7 @@ export const GetTabouleQueries = ({ const personalAds = queryStrict>( (input) => pipe( - API.v1.Public.GetPersonalStatsByPublicKey(input), + YTAPI.v1.Public.GetPersonalStatsByPublicKey(input), TE.map((content) => ({ total: content.ads.length, content: content.ads, @@ -154,7 +163,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v1.Public.GetPersonalStatsByPublicKey(input), + YTAPI.v1.Public.GetPersonalStatsByPublicKey(input), TE.map((content) => ({ total: content.stats.video, content: content.videos, @@ -170,7 +179,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v1.Public.GetPersonalStatsByPublicKey(input), + YTAPI.v1.Public.GetPersonalStatsByPublicKey(input), TE.map((content) => ({ total: content.stats.search, content: content.searches, @@ -186,7 +195,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v1.Public.GetPersonalSummaryByPublicKey(input), + YTAPI.v1.Public.GetPersonalSummaryByPublicKey(input), TE.map((content) => ({ total: content.htmls.length, content: content.htmls, @@ -202,7 +211,7 @@ export const GetTabouleQueries = ({ >( (input) => pipe( - API.v1.Public.GetPersonalSearchByPublicKey(input), + YTAPI.v1.Public.GetPersonalSearchByPublicKey(input), TE.map((content) => ({ total: content.metadata.length, content: content.metadata, @@ -214,11 +223,11 @@ export const GetTabouleQueries = ({ const tikTokSearches = queryStrict< SearchRequestInput, APIError, - Results + Results >( (input) => pipe( - API.v2.Public.TikTokSearches(input), + TK_API.v2.Public.GetSearchByQuery(input), TE.map((content) => ({ total: content.length, content: content, diff --git a/packages/taboule/tsconfig.json b/packages/taboule/tsconfig.json index 875bbe83f..f666a1d33 100644 --- a/packages/taboule/tsconfig.json +++ b/packages/taboule/tsconfig.json @@ -31,7 +31,9 @@ "moduleResolution": "Node", "isolatedModules": true, "paths": { - "@shared/*": ["../../shared/src/*"] + "@shared/*": ["../../shared/src/*"], + "@yttrex/shared/*": ["../../../platforms/yttrex/shared/src/*"], + "@tktrex/shared/*": ["../../../platforms/tktrex/shared/src/*"] } }, "include": ["./src", "./typings"], @@ -40,5 +42,13 @@ "module": "CommonJS" } }, - "references": [{ "path": "../shared" }] + "references": [ + { "path": "../shared" }, + { + "path": "../../platforms/yttrex/shared" + }, + { + "path": "../../platforms/tktrex/shared" + } + ] } diff --git a/platforms/guardoni/__mocks__/axios.mock.ts b/platforms/guardoni/__mocks__/axios.mock.ts new file mode 100644 index 000000000..523cc6edb --- /dev/null +++ b/platforms/guardoni/__mocks__/axios.mock.ts @@ -0,0 +1,8 @@ +jest.mock('axios'); +// eslint-disable-next-line import/first +import axios from 'axios'; + +const axiosMock = axios as jest.Mocked; +axiosMock.create.mockImplementation(() => axiosMock); + +export default axiosMock; diff --git a/platforms/guardoni/__tests__/cli.spec.ts b/platforms/guardoni/__tests__/cli.spec.ts index 4c2652a17..93bb69f37 100644 --- a/platforms/guardoni/__tests__/cli.spec.ts +++ b/platforms/guardoni/__tests__/cli.spec.ts @@ -1,27 +1,19 @@ /* eslint-disable import/first */ jest.mock('axios'); - import { + CommonDirectiveArb, GuardoniExperimentArb, PostDirectiveSuccessResponseArb, } from '@shared/arbitraries/Directive.arb'; -import { - ComparisonDirectiveRowArb, - ComparisonDirectiveArb, -} from '@yttrex/shared/arbitraries/ComparisonDirective.arb'; -import { SearchDirectiveArb } from '@tktrex/shared/arbitraries/SearchDirective.arb'; import * as tests from '@shared/test'; -import axios from 'axios'; import differenceInMilliseconds from 'date-fns/differenceInMilliseconds'; import * as fs from 'fs'; import * as path from 'path'; import { GetGuardoniCLI, GuardoniCLI } from '../src/guardoni/cli'; import { csvStringifyTE } from '../src/guardoni/utils'; +import axiosMock from '../__mocks__/axios.mock'; import { puppeteerMock } from '../__mocks__/puppeteer.mock'; -const axiosMock = axios as jest.Mocked; -axiosMock.create.mockImplementation(() => axiosMock); - const basePath = path.resolve(__dirname, '../'); const profileName = 'profile-test-99'; const ytExtensionDir = path.resolve(basePath, '../yttrex/extension/build'); @@ -43,7 +35,7 @@ describe('CLI', () => { fs.statSync(tkExtensionDir, { throwIfNoEntry: true }); const comparisonCSVContent = await csvStringifyTE( - tests.fc.sample(ComparisonDirectiveRowArb, 5), + tests.fc.sample(CommonDirectiveArb, 5), { header: true, encoding: 'utf-8' } )(); @@ -58,7 +50,7 @@ describe('CLI', () => { ); const searchCSVContent = await csvStringifyTE( - tests.fc.sample(SearchDirectiveArb, 10), + tests.fc.sample(CommonDirectiveArb, 10), { header: true, encoding: 'utf-8' } )(); @@ -131,7 +123,7 @@ describe('CLI', () => { }); }); - test('fails when csv file is incompatible with type "comparison"', async () => { + test.skip('fails when csv file is incompatible with type "comparison"', async () => { await expect( guardoni.run({ run: 'register-csv', @@ -289,7 +281,7 @@ describe('CLI', () => { }); test('fails when receive an error during experiment conclusion', async () => { - const data = tests.fc.sample(ComparisonDirectiveArb, 2).map((d) => ({ + const data = tests.fc.sample(CommonDirectiveArb, 2).map((d) => ({ ...d, loadFor: 1000, watchFor: '2s', @@ -329,7 +321,7 @@ describe('CLI', () => { test('succeed when experimentId has valid "comparison" directives', async () => { // return directive axiosMock.request.mockResolvedValueOnce({ - data: tests.fc.sample(ComparisonDirectiveArb, 2).map((d) => ({ + data: tests.fc.sample(CommonDirectiveArb, 2).map((d) => ({ ...d, loadFor: 1000, watchFor: '1s', @@ -365,7 +357,7 @@ describe('CLI', () => { test('succeeds when value is "1"', async () => { // return directive axiosMock.request.mockResolvedValueOnce({ - data: tests.fc.sample(ComparisonDirectiveArb, 2).map((d) => ({ + data: tests.fc.sample(CommonDirectiveArb, 2).map((d) => ({ ...d, loadFor: 1000, watchFor: '1s', @@ -397,7 +389,7 @@ describe('CLI', () => { test('succeeds when value is "2"', async () => { // return directive axiosMock.request.mockResolvedValueOnce({ - data: tests.fc.sample(ComparisonDirectiveArb, 10).map((d) => ({ + data: tests.fc.sample(CommonDirectiveArb, 10).map((d) => ({ ...d, watchFor: '1s', })), @@ -476,7 +468,7 @@ describe('CLI', () => { }); }); - test('fails when csv file is incompatible with type "search"', async () => { + test.skip('fails when csv file is incompatible with type "search"', async () => { await expect( guardoni.run({ run: 'register-csv', @@ -658,7 +650,7 @@ describe('CLI', () => { }); test('fails when receive an error during experiment conclusion', async () => { - const data = tests.fc.sample(SearchDirectiveArb, 2).map((d) => ({ + const data = tests.fc.sample(CommonDirectiveArb, 2).map((d) => ({ ...d, loadFor: 1000, watchFor: '2s', @@ -698,7 +690,7 @@ describe('CLI', () => { test('succeed when experimentId has valid "search" directive', async () => { // return directive axiosMock.request.mockResolvedValueOnce({ - data: tests.fc.sample(SearchDirectiveArb, 2).map((d) => ({ + data: tests.fc.sample(CommonDirectiveArb, 2).map((d) => ({ ...d, loadFor: 1500, watchFor: '1s', @@ -724,7 +716,7 @@ describe('CLI', () => { message: 'Experiment completed', values: [ { - directiveType: 'search', + // directiveType: 'search', }, ], }, @@ -738,7 +730,7 @@ describe('CLI', () => { test('succeed when experimentId has valid "search" directives', async () => { // return directive axiosMock.request.mockResolvedValueOnce({ - data: tests.fc.sample(SearchDirectiveArb, 2).map((d) => ({ + data: tests.fc.sample(CommonDirectiveArb, 2).map((d) => ({ ...d, loadFor: 1000, watchFor: '1s', @@ -762,7 +754,7 @@ describe('CLI', () => { message: 'Experiment completed', values: [ { - directiveType: 'search', + // directiveType: 'search', }, ], }, diff --git a/platforms/guardoni/__tests__/domainSpecific.spec.ts b/platforms/guardoni/__tests__/domainSpecific.spec.ts index 55573dad5..244c97884 100644 --- a/platforms/guardoni/__tests__/domainSpecific.spec.ts +++ b/platforms/guardoni/__tests__/domainSpecific.spec.ts @@ -2,7 +2,7 @@ import subSeconds from 'date-fns/subSeconds'; import { getMaybeScreenshotFilename, getScreenshotName, -} from '../src/guardoni/domainSpecific'; +} from '../src/guardoni/directives/yt.directives'; describe('Domain specific API', () => { describe('Screenshot path', () => { diff --git a/platforms/guardoni/__tests__/guardoni/guardoni.spec.ts b/platforms/guardoni/__tests__/guardoni/guardoni.spec.ts index 5a90b99a4..33b98230e 100644 --- a/platforms/guardoni/__tests__/guardoni/guardoni.spec.ts +++ b/platforms/guardoni/__tests__/guardoni/guardoni.spec.ts @@ -1,3 +1,5 @@ +import axiosMock from '../../__mocks__/axios.mock'; +import { puppeteerMock } from '../../__mocks__/puppeteer.mock'; /* eslint-disable import/first */ import { pipe } from 'fp-ts/lib/function'; import * as TE from 'fp-ts/lib/TaskEither'; @@ -11,7 +13,6 @@ import { } from '../../src/guardoni/profile'; import { csvStringifyTE } from '../../src/guardoni/utils'; import { guardoniLogger } from '../../src/logger'; -import { puppeteerMock } from '../../__mocks__/puppeteer.mock'; const directiveLinks = [ { @@ -32,6 +33,17 @@ const directiveLinks = [ url: 'https://www.youtube.com/watch?v=SmYuYEhT81c', urltag: 'trex-algorithm', watchFor: '5s', + hooks: { + beforeWait: [ + { + type: 'SCROLL_FOR', + options: { + deltaY: 400, + total: 1000, + }, + }, + ], + }, }, ]; @@ -217,6 +229,21 @@ describe('Guardoni', () => { // one minute jest.setTimeout(60 * 1000); + axiosMock.request.mockResolvedValueOnce({ + data: { + status: 'exist', + experimentId: '1', + }, + }); + axiosMock.request.mockResolvedValueOnce({ + data: directiveLinks, + }); + axiosMock.request.mockResolvedValueOnce({ + data: { + acknowledged: true, + }, + }); + const guardoni = GetGuardoni({ basePath, logger: guardoniLogger, diff --git a/platforms/guardoni/docs/cli/getting-started.md b/platforms/guardoni/docs/cli/getting-started.md new file mode 100644 index 000000000..ec4468328 --- /dev/null +++ b/platforms/guardoni/docs/cli/getting-started.md @@ -0,0 +1,16 @@ +--- +title: Getting Started +sidebar_position: 1 +--- + +## Install + +Download the proper executable from the [latest release](https://github.com/tracking-exposed/yttrex/releases/latest) and save it as `guardoni-cli`. + +Then check the executable is properly working by running the command that opens the tool for free browsing: + +```bash +./guardoni-cli yt-navigate +``` + +If the browser appears on the Youtube's home the installation has been successful. diff --git a/platforms/guardoni/docs/cli/usage.md b/platforms/guardoni/docs/cli/usage.md index cd3b9a391..c58e46edf 100644 --- a/platforms/guardoni/docs/cli/usage.md +++ b/platforms/guardoni/docs/cli/usage.md @@ -1,3 +1,127 @@ --- -sidebar_position: 1 +title: Usage +sidebar_position: 2 --- + + +```bash + +guardoni-cli + +Commands: + guardoni-cli yt-navigate Use guardoni browser with loaded yt e + xtension + guardoni-cli yt-experiment Run guardoni from a given experiment + guardoni-cli yt-register Register an experiment from a CSV + guardoni-cli yt-list List available experiments + guardoni-cli yt-auto YT automatic mode + guardoni-cli tk-navigate Use guardoni browser with loaded tk e + xtension + guardoni-cli tk-experiment Run guardoni from a given experiment + guardoni-cli tk-register Register an experiment from a CSV + guardoni-cli tk-list List available experiments + guardoni-cli tk-init [projectDirectory] Initialize an experiment directory + guardoni-cli tk-run [projectDirectory] Run an experiment from a directory pr + eviously initialized + guardoni-cli tk-dump [projectDirectory] Dump meta data from an experiment dir + ectory + +Options: + --help Show help [boolean] + --version Show version number [boolean] + -c, --config Path to JSON config file + [string] [default: "guardoni.config.json"] + --headless Run guardoni in headless mode. + [boolean] [default: false] + --evidenceTag The evidence related tag. [string] + --profile The current user profile [string] + --backend The API endpoint for server requests [string] + --proxy Socket proxy for puppeteer. [string] + --adv-screenshot-dir ADV screenshot directory path [string] + -v, --verbose Produce tons of logs [boolean] [default: false] + +Not enough non-option arguments: got 0, need at least 1 +``` + +## Configuration + +By default, the CLI loads the content of `guardoni.config.json` when is present, but the specific keys can be overridden by arguments. + +```bash +./guardoni-cli --basePath ~/.guardoni2 --verbose yt-list +``` + +## Commands + +Commands are now organized per-platform and so they're prefixed with a shortname of the platforms we suppport, e.g. `yt-list`, `tk-experiment`. + +Once the command is invoked, _Guardoni_ will read the configuration, extract the specific platform configuration and use it. + +### Register an experiment + +In order to add a new experiment, prepare your csv with the proper entries and use `yt-register` to send it to the API and create the entry. + +```bash +./guardoni-cli yt-register ./experiments/yt-home.csv + +# output + +Register-csv succeeded: Experiment created successfully + + +Output values: + +status: created +experimentId: d659fc7852b7a2878387773231054d534976bb12 +since: + +``` + +### List an experiment + +```bash +./guardoni-cli yt-list + +# output + +List succeeded: Experiments List + + +Output values: + +d659fc7852b7a2878387773231054d534976bb12: + +when: 2022-05-27T11:50:02.423Z +directiveType: comparison +links: + title: Yt Home + url: https://www.youtube.com/ + urltag: youtube home + watchFor: 42000 +experimentId: d659fc7852b7a2878387773231054d534976bb12 + +``` + +### Running an experiment + +```bash +guardoni-cli yt-experiment d659fc7852b7a2878387773231054d534976bb12 + +# output + +Experiment succeeded: Experiment completed + + +Output values: + +experimentId: d659fc7852b7a2878387773231054d534976bb12 +evidenceTag: no-tag-25368 +directiveType: comparison +execCount: 3 +profileName: profile-test-99 +newProfile: false +when: + +publicKey: XXX-your-public-key-XXX + +``` diff --git a/platforms/guardoni/docs/development/_category_.json b/platforms/guardoni/docs/development/_category_.json new file mode 100644 index 000000000..a7eccd6d6 --- /dev/null +++ b/platforms/guardoni/docs/development/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Development", + "position": 4 +} diff --git a/platforms/guardoni/docs/development/build.md b/platforms/guardoni/docs/development/build.md index e69de29bb..a81180683 100644 --- a/platforms/guardoni/docs/development/build.md +++ b/platforms/guardoni/docs/development/build.md @@ -0,0 +1,25 @@ +--- +title: Build +--- + +## Development + +Building `guardoni` for development requires to build the extensions first. This can be done by running: + +```bash +export NODE_ENV=development +yarn yt:ext build +yarn tk:ext build +``` + +Then guardoni can be built with: + +```bash +yarn guardoni build +``` + +When the build process is finished, the `CLI` can be run with `-c` option pointing to the `guardoni.config.json` located as `platforms/guardoni`: + +```bash +yarn guardoni cli --basePath ./ -c guardoni.config.json yt-navigate +``` diff --git a/platforms/guardoni/docs/development/pkg.md b/platforms/guardoni/docs/development/pkg.md new file mode 100644 index 000000000..76c6b9c6f --- /dev/null +++ b/platforms/guardoni/docs/development/pkg.md @@ -0,0 +1,11 @@ +--- +title: Packaging +--- + +The `guardoni` tool can be packaged easily after has been properly [`built`](./build.md), by runnung: + +```bash +NODE_ENV=development yarn guardoni pkg +``` + +This will produce executables for `Windows`, `MacOS` and `Linux` inside the `platforms/guardoni/dist` folder. diff --git a/platforms/guardoni/docs/development/test.md b/platforms/guardoni/docs/development/test.md new file mode 100644 index 000000000..a77839428 --- /dev/null +++ b/platforms/guardoni/docs/development/test.md @@ -0,0 +1,29 @@ +--- +title: Test +--- + +We ensure the stability and the compatibility of `guardoni` with different strategies. + +## Jest tests + +`jest` is the actual standard to test _javascript_ projects and we use it to manage all the tests in our _monorepo_. + +To run tests only for guardoni: + +```bash +yarn guardoni test +``` + +### Bash scripts + +Sometimes, during the development, we need to mimic a flow using the _CLI_ previously built and perform some actions like register the experiment csv and run the experiment. + +For this purpose there are two different scripts located at `platforms/guardoni/scripts` that performs the above flow for a specific platform: + +```bash +cd ./platforms/guardoni +# run test for youtube platform +./scripts/cli-yt-test.sh +# run test for titkok platform +./scripts/cli-tk-test.sh +``` diff --git a/platforms/guardoni/docs/electron-app/_category_.json b/platforms/guardoni/docs/electron-app/_category_.json deleted file mode 100644 index e9dbaeda9..000000000 --- a/platforms/guardoni/docs/electron-app/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "App (electron)", - "position": 3 -} diff --git a/platforms/guardoni/docs/getting-started/tx-automate.md b/platforms/guardoni/docs/getting-started/_tx-automate.md similarity index 95% rename from platforms/guardoni/docs/getting-started/tx-automate.md rename to platforms/guardoni/docs/getting-started/_tx-automate.md index 6043bf35e..2371059c1 100644 --- a/platforms/guardoni/docs/getting-started/tx-automate.md +++ b/platforms/guardoni/docs/getting-started/_tx-automate.md @@ -25,7 +25,7 @@ from there. A `project` is simply materialized as a directory. ## Installation ```bash -git clone git@github.com:tracking-exposed/yttrex.git +git clone git@github.com:tracking-exposed/trex.git git checkout cd yttrex yarn diff --git a/platforms/guardoni/docs/getting-started/assets/guardoni-intro.png b/platforms/guardoni/docs/getting-started/assets/guardoni-intro.png new file mode 100644 index 000000000..5f6235149 Binary files /dev/null and b/platforms/guardoni/docs/getting-started/assets/guardoni-intro.png differ diff --git a/platforms/guardoni/docs/getting-started/assets/guardoni-list-experiments.png b/platforms/guardoni/docs/getting-started/assets/guardoni-list-experiments.png new file mode 100644 index 000000000..38a73ee62 Binary files /dev/null and b/platforms/guardoni/docs/getting-started/assets/guardoni-list-experiments.png differ diff --git a/platforms/guardoni/docs/getting-started/assets/guardoni-run-experiment.png b/platforms/guardoni/docs/getting-started/assets/guardoni-run-experiment.png new file mode 100644 index 000000000..ae14b4a24 Binary files /dev/null and b/platforms/guardoni/docs/getting-started/assets/guardoni-run-experiment.png differ diff --git a/platforms/guardoni/docs/getting-started/assets/guardoni-select-experiment.png b/platforms/guardoni/docs/getting-started/assets/guardoni-select-experiment.png new file mode 100644 index 000000000..b8295d823 Binary files /dev/null and b/platforms/guardoni/docs/getting-started/assets/guardoni-select-experiment.png differ diff --git a/platforms/guardoni/docs/getting-started/configuration.md b/platforms/guardoni/docs/getting-started/configuration.md new file mode 100644 index 000000000..93758fb7a --- /dev/null +++ b/platforms/guardoni/docs/getting-started/configuration.md @@ -0,0 +1,38 @@ +--- +title: Configuration +sidebar_position: 2 +--- + +All configurations needed by `guardoni` are stored in a `guardoni.config.json` file that will be created at the first run in `~/.guardoni` + +Here is the default configuration file + +```typescript +{ + // The profile used by guardoni + "profileName": "default", + // Run in 'headless' mode + "headless": false, + "verbose": false, + "loadFor": 3000, + // YT platform config + "yt": { + "name": "youtube", + // the backend where to send data + "backend": "https://youtube.tracking.exposed/api", + // the dir to load the extension from + "extensionDir": "~/.guardoni/extension/yt" + }, + "tk": { + "name": "tiktok", + // the backend where to send data + "backend": "http://localhost:14000/api", + // the dir to load the extension from + "extensionDir": "~/.guardoni/extension/tk" + }, + // the chrome executable path + "chromePath": "/usr/bin/google-chrome" +} +``` + +When you use the [CLI](../cli/usage.md#configuration) you can override specific property. diff --git a/platforms/guardoni/docs/getting-started/installation.md b/platforms/guardoni/docs/getting-started/installation.md index 013edcc56..c094680de 100644 --- a/platforms/guardoni/docs/getting-started/installation.md +++ b/platforms/guardoni/docs/getting-started/installation.md @@ -1,24 +1,26 @@ --- title: Installation +sidebar_position: 1 --- -## Getting started +The app is packaged with [electron-builder](https://www.electron.build/) and can be downloaded from github [releases](https://github.com/tracking-exposed/yttrex/releases/latest). -By default guardoni downloads an extension version `.99` with default opt-in (meant for automation) already built and places it in `$basePath/extension` folder. -By default this extension sends the results to the server. +## Linux (Debian) -To get an extension which sends the results to the local server you have to build it yourself - as explained in details in the [extension project](../extension/README.md): +Download the executable from the [latest release](https://github.com/tracking-exposed/yttrex/releases/latest), then run the following command from your downloads folder: ```bash -# from the project's root -cd ../extension -yarn build +dpkg -i ./guardoni_VERSION_amd64.deb ``` -Once you build the extension you need to compile `guardoni` code too: +## Windows -```bash -yarn build -``` +Download the latest version from [here](https://github.com/tracking-exposed/yttrex/releases/latest), then double click on the `.exe` downloaded. + +## MacOS + +Download the latest version from [here](https://github.com/tracking-exposed/yttrex/releases/latest), then double click on the `.dmg` file. + +## Logs -Then you'll be able to execute both [cli](#cli) and [electron](#electron) programs. +The application uses [`electron-log`](https://github.com/megahertz/electron-log) and all log files are stored at `~/.guardoni/electron/logs`. diff --git a/platforms/guardoni/docs/getting-started/usage.md b/platforms/guardoni/docs/getting-started/usage.md new file mode 100644 index 000000000..ebb217652 --- /dev/null +++ b/platforms/guardoni/docs/getting-started/usage.md @@ -0,0 +1,33 @@ +--- +title: Usage +hide_table_of_content: false +image: ./assets/guardoni-intro.png +keywords: + - electron + - guardoni +--- + +![Guardoni intro](./assets/guardoni-intro.png) + +## First run + +When you open **Guardoni** for the first time you will see a brief introduction about the tool and what it does. To continue to the application you have to accept our Terms Of Service in the last page. + +The application saves all its data inside `~/.guardoni`: + +- the `electron` folder contains data related to the electron app +- the `guardoni.config.json` contains the configuration loaded by guardoni (both electron and cli) +- the `profiles` folder contains all the profiles created - The default is `default` + +## List experiments + +The experiments list appears in the default page, when you open the app. +![List experiments](assets/guardoni-list-experiments.png) + +## Run an experiment + +Open Guardoni and then select an experiment from the list: +![Select Experiment](assets/guardoni-select-experiment.png) + +Click on **"Run"** button in experiment page +![Run experiment](assets/guardoni-run-experiment.png) diff --git a/platforms/guardoni/docs/intro.md b/platforms/guardoni/docs/intro.md index 2cfe483e6..9f4ef9431 100644 --- a/platforms/guardoni/docs/intro.md +++ b/platforms/guardoni/docs/intro.md @@ -1,4 +1,65 @@ --- sidebar_position: 1 -title: Guardoni +title: Introduction +id: guardoni-intro --- + +# Guardoni documentation + +Guardoni is a free software **automated web scraper**, used to collect data about platforms as Youtube and Tik Tok. It is a [puppeteer](https://github.com/puppeteer/puppeteer)-based tool integrating Tracking Exposed extensions on its browser. Data is gathered and copied from platforms into our database for later retrieval or analysis. + +## 🤝 Getting help + +Having trouble? We’d like to help! + + + +- Feel free to ask questions by email. + +- Check the **[Github](https://github.com/tracking-exposed)** repo, report bugs or contribute. ❤️ + +- Join the community in Tracking Exposed **[Slack](https://trackingexposed.slack.com)**. + +- Send a **[Tweet](https://twitter.com/trackingexposed)** + +## 🛠 Disclaimer + +Guardoni is still **alpha** stage, the software is not thoroughly tested by the developers yet, it may contain serious errors, and any resulting instability could cause crashes or data loss. Alpha software may not contain all of the features that are planned for the final version. In general, free software often has publicly available alpha versions. + +## 👣 First steps + +- **[Guardoni at first sight](https://docs.tracking.exposed/guardoni/getting-started/usage)** + + Understand what Guardoni is and how it can help you. + +- **[Installation guide](https://docs.tracking.exposed/guardoni/getting-started/installation)** + + Get Scrapy installed on your computer. + +- **Coming soon:** Guardoni Tutorial + + Participate to our first experiment and learn how to create your first project. + +- **Coming soon:** Examples and ready made experiments + + Learn more by playing with a pre-made Tracking Exposed experiment. + + + +## 🔬 How we collect data + +_Guardoni_ is not the direct responsible of collecting data while browsing, as it is, in simple words, just a wrapper around puppeteer with some automation features. The data scraping and collection is made by our browser extensions, loaded by _Guardoni_ at bootstrap. + +## 🧪 Experiments + +Experiments are instructions prepared to perform a series of actions. They are csv files with a list of URLs and and watching time. They belong to an exploratory phase, allowing us to work on a common basis and compare differences. + +## 🏹 Design principles + +- **User friendly**. Guardoni should be easy to learn and use, users shall not feel overwhelmed. It should look intuitive and easy to build on top of, using approaches they are familiar with. + +- **Optimal Resource Consumption**. A wise, cost-efficient approach to system resources. Efficiency is one of the critical factors identifying high-quality softwares. + +- **Interoperability**. Common data formats and communication protocols to work with other products or systems. diff --git a/platforms/guardoni/experiments/yt-home.csv b/platforms/guardoni/experiments/yt-home.csv index 2511d5da0..512981abf 100644 --- a/platforms/guardoni/experiments/yt-home.csv +++ b/platforms/guardoni/experiments/yt-home.csv @@ -1,2 +1,2 @@ -title,url,urltag,watchFor -Yt Home,https://www.youtube.com/,youtube home,42s +title,url,urltag,watchFor,incrementScrollByPX,totalScroll +Yt Home,https://www.youtube.com/,youtube home,10s,400,2000 diff --git a/platforms/guardoni/experiments/yt-videos.csv b/platforms/guardoni/experiments/yt-videos.csv index 327a8ce9d..37b965afa 100644 --- a/platforms/guardoni/experiments/yt-videos.csv +++ b/platforms/guardoni/experiments/yt-videos.csv @@ -1,4 +1,4 @@ -title,url,urltag,watchFor -YouChoose: Customize your Recommendations,https://www.youtube.com/watch?v=3laqegktOuQ,youchoose-recommendations,3s -YouChoose.ai | Gain Control on your Recommendations!,https://www.youtube.com/watch?v=ReVMTcRA-E4,youchose-gain-Control,3s -with Tracking Exposed: knowledge is freedom — algorithm analysis is for anybody!,https://www.youtube.com/watch?v=SmYuYEhT81c,trex-algorithm,5s +title,url,urltag,watchFor,incrementScrollByPX,totalScroll +YouChoose: Customize your Recommendations,https://www.youtube.com/watch?v=3laqegktOuQ,youchoose-recommendations,3s,400,1000 +YouChoose.ai | Gain Control on your Recommendations!,https://www.youtube.com/watch?v=ReVMTcRA-E4,youchose-gain-Control,3s,400,1000 +with Tracking Exposed: knowledge is freedom — algorithm analysis is for anybody!,https://www.youtube.com/watch?v=SmYuYEhT81c,trex-algorithm,5s,400,1000 diff --git a/platforms/guardoni/guardoni.config.json b/platforms/guardoni/guardoni.config.json index eefbb936f..9676e8517 100644 --- a/platforms/guardoni/guardoni.config.json +++ b/platforms/guardoni/guardoni.config.json @@ -3,6 +3,7 @@ "headless": false, "verbose": false, "loadFor": 3000, + "basePath": "./", "yt": { "name": "youtube", "backend": "http://localhost:9000/api", diff --git a/platforms/guardoni/package.json b/platforms/guardoni/package.json index 1589cde4d..ef978b8c2 100644 --- a/platforms/guardoni/package.json +++ b/platforms/guardoni/package.json @@ -8,8 +8,10 @@ "lint": "eslint ./src", "format": "prettier -w ./src", "test": "jest", - "build": "webpack", - "watch": "NODE_ENV=development webpack watch", + "build:cli": "webpack -c webpack.cli.config.ts", + "build:app": "webpack -c webpack.app.config.ts", + "watch:cli": "NODE_ENV-development webpack watch -c webpack.cli.config.ts", + "watch:app": "NODE_ENV=development webpack watch -c webpack.app.config.ts", "dev": "DOTENV_CONFIG_PATH=../../.env.development electron ./reload.js", "start": "electron .", "pack": "electron-builder build --dir", @@ -28,7 +30,7 @@ "main": "./build/electron/main.js", "repository": { "type": "git", - "url": "git+https://github.com/tracking-exposed/yttrex.git" + "url": "git+https://github.com/tracking-exposed/trex.git" }, "keywords": [ "youtube", @@ -54,9 +56,9 @@ "csv-stringify": "^6.0.5", "debug": "^4.3.4", "electron-debug": "^3.2.0", - "electron-log": "^4.4.6", + "electron-log": "^4.4.7", "electron-squirrel-startup": "^1.0.0", - "electron-store": "^8.0.1", + "electron-store": "^8.0.2", "electron-unhandled": "^4.0.1", "extract-zip": "^2.0.1", "fp-ts": "^2.11.9", @@ -67,6 +69,7 @@ "lodash": "^4.17.21", "nconf": "^0.11.3", "node-fetch": "^2.6.7", + "puppeteer": "^13.7.0", "puppeteer-core": "^13.7.0", "puppeteer-extra": "^3.2.3", "puppeteer-extra-plugin-stealth": "^2.9.0", @@ -97,8 +100,8 @@ "bufferutil": "^4.0.6", "canvas": "^2.9.1", "chalk": "^5.0.0", - "electron": "16.2.4", - "electron-builder": "^23.0.3", + "electron": "16.2.8", + "electron-builder": "^23.1.0", "electron-reloader": "^1.2.3", "eslint": "^8.16.0", "eslint-config-prettier": "^8.5.0", @@ -121,9 +124,9 @@ "typescript": "^4.7.2", "unlazy-loader": "^0.1.3", "utf-8-validate": "^5.0.9", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^4.9.2", + "webpack-cli": "^4.10.0", "webpack-node-externals": "^3.0.0" }, "pkg": { diff --git a/platforms/guardoni/scripts/cli-build.sh b/platforms/guardoni/scripts/cli-build.sh index 471beb375..dd61efeb4 100755 --- a/platforms/guardoni/scripts/cli-build.sh +++ b/platforms/guardoni/scripts/cli-build.sh @@ -8,5 +8,5 @@ yarn clean yarn yt:ext build:guardoni yarn tk:ext build:guardoni -yarn build +yarn build:cli yarn pkg diff --git a/platforms/guardoni/scripts/dist-all.sh b/platforms/guardoni/scripts/dist-all.sh index 07640e634..56e38a3bb 100755 --- a/platforms/guardoni/scripts/dist-all.sh +++ b/platforms/guardoni/scripts/dist-all.sh @@ -4,7 +4,7 @@ set -e -x export NODE_ENV='production' -yarn guardoni build +yarn guardoni build:app yarn dist:linux # yarn dist:windows # yarn dist:mac diff --git a/platforms/guardoni/scripts/pkg.sh b/platforms/guardoni/scripts/pkg.sh index 44a333415..13f8e34c3 100755 --- a/platforms/guardoni/scripts/pkg.sh +++ b/platforms/guardoni/scripts/pkg.sh @@ -3,7 +3,7 @@ set -ex # this script is invoked by npm run pkg, and simply should rename the executabled with the proper version name. -pkg -c ./package.json -C GZip \ +pkg -c ./package.json --public -C GZip \ ./bin/guardoni-cli.js version=$(grep version package.json | cut -b 15- | sed -es/\".*//) diff --git a/platforms/guardoni/sidebars.js b/platforms/guardoni/sidebars.js index 937db436d..c81f3a70e 100644 --- a/platforms/guardoni/sidebars.js +++ b/platforms/guardoni/sidebars.js @@ -17,6 +17,12 @@ const sidebars = { // By default, Docusaurus generates a sidebar from the docs folder structure tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], + guardoniSidebar: [ + { type: 'autogenerated', dirName: '../../platforms/guardoni/docs' }, + ], + tkTrexSidebar: [ + { type: 'autogenerated', dirName: '../../platforms/tktrex/docs/docs' }, + ], // But you can create a sidebar manually /* diff --git a/platforms/guardoni/src/electron/app/components/ExperimentExecution.tsx b/platforms/guardoni/src/electron/app/components/ExperimentExecution.tsx index cfe5a1319..4283e9dc2 100644 --- a/platforms/guardoni/src/electron/app/components/ExperimentExecution.tsx +++ b/platforms/guardoni/src/electron/app/components/ExperimentExecution.tsx @@ -134,7 +134,7 @@ const ExperimentExecution: React.FC = ({ > - - {experiment.links.length} + - {experiment.directives.length} diff --git a/platforms/guardoni/src/electron/app/components/ExperimentList.tsx b/platforms/guardoni/src/electron/app/components/ExperimentList.tsx index 07d95b4c1..0981f32c1 100644 --- a/platforms/guardoni/src/electron/app/components/ExperimentList.tsx +++ b/platforms/guardoni/src/electron/app/components/ExperimentList.tsx @@ -21,6 +21,7 @@ import * as React from 'react'; import { RouteProps, useHistory } from 'react-router'; import { PlatformConfig } from '../../../guardoni/types'; import { EVENTS } from '../../models/events'; +import { OpenURLDirective } from '@shared/models/Directive'; const useStyle = makeStyles((theme) => ({ directiveRow: { @@ -99,7 +100,7 @@ export const ExperimentList: React.FC = ({ variant="body1" style={{ marginLeft: theme.spacing(1) }} > - {d.tags.join(', ')} + {d.directiveType} {d.tags.join(', ')} = ({ }} > - - {d.links.length} + + - {d.directives.length} + = ({ URLs - {d.links.map((l) => ( + {d.directives.filter(OpenURLDirective.is).map((l) => ( experiments.reduce((acc, e) => { - const { tags, time } = e.links.reduce( + const { tags, time } = e.directives.filter(OpenURLDirective.is).reduce( (accL, l) => { const time = t.number.is(l.watchFor) ? l.watchFor @@ -202,7 +205,7 @@ const ExperimentListRoute: React.FC< ? 60000 : 0; return { - tags: accL.tags.concat(l.urltag), + tags: accL.tags.concat(l.urltag ? [l.urltag] : []), time: accL.time + time, }; }, diff --git a/platforms/guardoni/src/electron/events/event.logger.ts b/platforms/guardoni/src/electron/events/event.logger.ts index 38e27c9d8..73acf353f 100644 --- a/platforms/guardoni/src/electron/events/event.logger.ts +++ b/platforms/guardoni/src/electron/events/event.logger.ts @@ -4,9 +4,7 @@ import { EVENTS } from '../models/events'; import log from 'electron-log'; import * as util from 'util'; -export const getEventsLogger = ( - w: Electron.BrowserWindow -): Pick => { +export const getEventsLogger = (w: Electron.BrowserWindow): Logger => { return { error: (m, ...args) => { log.error(m, ...args); @@ -44,5 +42,8 @@ export const getEventsLogger = ( // details: args.map((a) => JSON.stringify(a)), // }); }, + extend: (n: string) => { + return log as any; + }, }; }; diff --git a/platforms/guardoni/src/electron/events/renderer.events.ts b/platforms/guardoni/src/electron/events/renderer.events.ts index 4166111d5..4216a9f15 100644 --- a/platforms/guardoni/src/electron/events/renderer.events.ts +++ b/platforms/guardoni/src/electron/events/renderer.events.ts @@ -1,10 +1,12 @@ import { AppError, toAppError } from '@shared/errors/AppError'; import { Logger } from '@shared/logger'; +import { Directive } from '@shared/models/Directive'; import { AppEnv } from 'AppEnv'; import { app, BrowserView, dialog, ipcMain, shell } from 'electron'; import { pipe } from 'fp-ts/lib/function'; import * as TE from 'fp-ts/lib/TaskEither'; import { NonEmptyString } from 'io-ts-types'; +import * as path from 'path'; import type Puppeteer from 'puppeteer-core'; import puppeteer from 'puppeteer-extra'; import * as pie from 'puppeteer-in-electron'; @@ -14,20 +16,14 @@ import { getPlatformConfig, setConfig, } from '../../guardoni/config'; -import { GetGuardoni, Guardoni } from '../../guardoni/guardoni'; import { readCSVAndParse } from '../../guardoni/experiment'; -import { - GuardoniConfig, - PlatformConfig, - Platform, - Directive, -} from '../../guardoni/types'; +import { GetGuardoni, Guardoni } from '../../guardoni/guardoni'; +import { getExistingProfiles, getProfileDataDir } from '../../guardoni/profile'; +import { GuardoniConfig, Platform, PlatformConfig } from '../../guardoni/types'; import { guardoniLogger } from '../../logger'; import { EVENTS } from '../models/events'; import store from '../store'; import { getEventsLogger } from './event.logger'; -import * as path from 'path'; -import { getExistingProfiles, getProfileDataDir } from '../../guardoni/profile'; const guardoniEventsLogger = guardoniLogger.extend('events'); @@ -44,7 +40,7 @@ export interface Events { } const pickCSVFile = ( - logger: Pick + logger: Logger ): TE.TaskEither => { return pipe( TE.tryCatch( diff --git a/platforms/guardoni/src/electron/tabs/AutoRunTab.tsx b/platforms/guardoni/src/electron/tabs/AutoRunTab.tsx index a936a3c52..db2d21333 100644 --- a/platforms/guardoni/src/electron/tabs/AutoRunTab.tsx +++ b/platforms/guardoni/src/electron/tabs/AutoRunTab.tsx @@ -7,6 +7,7 @@ import { makeStyles, Typography, } from '@material-ui/core'; +import { OpenURLDirective } from '@shared/models/Directive'; import { GuardoniExperiment } from '@shared/models/Experiment'; import { formatDate } from '@shared/utils/date.utils'; import { ipcRenderer } from 'electron'; @@ -62,12 +63,15 @@ export const AutoRunTab: React.FC = ({ onSubmit }) => { - {d.links.map((l) => ( - + {d.directives.map((l, i) => ( + - {l.urltag} ({l.watchFor ?? 'end'}): + {OpenURLDirective.is(l) + ? `${l.urltag} ({l.watchFor ?? 'end'})` + : l.type} + : {' '} - {l.url} + {/* {l.url} */} ))} diff --git a/platforms/guardoni/src/electron/tabs/FromCSVFileTab.tsx b/platforms/guardoni/src/electron/tabs/FromCSVFileTab.tsx index bc39be85b..561824b8e 100644 --- a/platforms/guardoni/src/electron/tabs/FromCSVFileTab.tsx +++ b/platforms/guardoni/src/electron/tabs/FromCSVFileTab.tsx @@ -4,9 +4,10 @@ import { FormControlLabel, FormHelperText, } from '@material-ui/core'; +import { Directive } from '@shared/models/Directive'; import { ipcRenderer } from 'electron'; import * as React from 'react'; -import { GuardoniConfig, Directive } from '../../guardoni/types'; +import { GuardoniConfig } from '../../guardoni/types'; import { EVENTS } from '../models/events'; interface FromCSVFileTabProps { diff --git a/platforms/guardoni/src/electron/tabs/FromURLsTab.tsx b/platforms/guardoni/src/electron/tabs/FromURLsTab.tsx index cbb2769d3..5fef16754 100644 --- a/platforms/guardoni/src/electron/tabs/FromURLsTab.tsx +++ b/platforms/guardoni/src/electron/tabs/FromURLsTab.tsx @@ -9,7 +9,7 @@ import { ipcRenderer } from 'electron'; import * as React from 'react'; import { EVENTS } from '../models/events'; import { GuardoniConfig } from '../../guardoni/types'; -import { ExperimentLink } from '@shared/models/Experiment'; +import { OpenURLDirective } from '@shared/models/Directive'; interface FromCSVFileTabProps { config: GuardoniConfig; @@ -20,8 +20,8 @@ interface URLState { newURL: string | undefined; newTitle: string | undefined; newURLTag: string | undefined; - newWatchFor: string | number | null; - urls: ExperimentLink[]; + newWatchFor: string | number | undefined; + urls: OpenURLDirective[]; } export const FromURLsTab: React.FC = ({ @@ -33,16 +33,12 @@ export const FromURLsTab: React.FC = ({ newURL: undefined, newTitle: undefined, newURLTag: undefined, - newWatchFor: null, + newWatchFor: undefined, urls: [], }); const handleURLProcess = React.useCallback(() => { - ipcRenderer.send( - EVENTS.CREATE_EXPERIMENT_EVENT.value, - config, - urls.map((u) => ({ ...u, videoURL: u.url })) - ); + ipcRenderer.send(EVENTS.CREATE_EXPERIMENT_EVENT.value, config, urls); }, [config, urls]); React.useEffect(() => { @@ -54,7 +50,10 @@ export const FromURLsTab: React.FC = ({ onSubmit(args[0]); }; - ipcRenderer.on(EVENTS.CREATE_EXPERIMENT_EVENT.value, createExperimentHandler); + ipcRenderer.on( + EVENTS.CREATE_EXPERIMENT_EVENT.value, + createExperimentHandler + ); return () => { // remove the listener when component is unmount @@ -152,12 +151,14 @@ export const FromURLsTab: React.FC = ({ newURL: undefined, newTitle: undefined, newURLTag: undefined, - newWatchFor: null, + newWatchFor: undefined, urls: urls.concat({ + type: 'openURL', url: newURL, title: newTitle, urltag: newURLTag, watchFor: newWatchFor, + loadFor: undefined, }), }); } diff --git a/platforms/guardoni/src/guardoni/browser.ts b/platforms/guardoni/src/guardoni/browser.ts index 9d983632c..b6f183b2d 100644 --- a/platforms/guardoni/src/guardoni/browser.ts +++ b/platforms/guardoni/src/guardoni/browser.ts @@ -1,148 +1,50 @@ -import { AppError, toAppError } from '@shared/errors/AppError'; -import { pipe } from 'fp-ts/lib/function'; +import { AppError } from '@shared/errors/AppError'; +import { LaunchOptions } from '@shared/providers/puppeteer/puppeteer.provider'; import * as TE from 'fp-ts/lib/TaskEither'; import type * as puppeteer from 'puppeteer-core'; -import StealthPlugin from 'puppeteer-extra-plugin-stealth'; -import domainSpecific from './domainSpecific'; -import { GuardoniContext, Directive } from './types'; +import { GuardoniContext } from './types'; -export const dispatchBrowser = ( - ctx: GuardoniContext -): TE.TaskEither => { - const execCount = ctx.profile.execount; - const proxy = ctx.platform.proxy; - - const commandLineArg = [ - '--no-sandbox', - '--disabled-setuid-sandbox', - '--load-extension=' + ctx.platform.extensionDir, - '--disable-extensions-except=' + ctx.platform.extensionDir, - ]; - - if (proxy) { - if (!proxy.startsWith('socks5://')) { - return TE.left( - new AppError( - 'ProxyError', - 'Error, --proxy must start with socks5://', - [] - ) - ); - } - commandLineArg.push('--proxy-server=' + proxy); - ctx.logger.debug( - 'Dispatching browser: profile usage count %d proxy %s', - execCount, - proxy - ); - } else { - ctx.logger.debug( - 'Dispatching browser: profile usage count %d, with NO PROXY', - execCount - ); - } - return TE.tryCatch(async () => { - // ctx.puppeteer.use(pluginStealth()); - const opts = { - headless: ctx.config.headless, - userDataDir: ctx.profile.udd, - executablePath: ctx.config.chromePath, - args: commandLineArg, - }; - ctx.logger.info('Launch puppeteer %O', opts); - ctx.puppeteer.use(StealthPlugin()); - const browser = await ctx.puppeteer.launch(opts); - - return browser as any; - }, toAppError); -}; - -/** - * automate directive execution for browser page - */ -const operateTab = +export const dispatchBrowser = (ctx: GuardoniContext) => - ( - page: puppeteer.Page, - directive: Directive - ): TE.TaskEither => { - return TE.tryCatch(async () => { - try { - await domainSpecific.beforeLoad(page, ctx.profile); - } catch (error) { - ctx.logger.debug( - 'error in beforeLoad %s %s directive %o', - (error as any).message, - (error as any).stack, - directive + (opts: LaunchOptions): TE.TaskEither => { + const execCount = ctx.profile.execount; + const proxy = ctx.platform.proxy; + + const commandLineArg = [ + '--no-sandbox', + '--disabled-setuid-sandbox', + '--load-extension=' + ctx.platform.extensionDir, + '--disable-extensions-except=' + ctx.platform.extensionDir, + ]; + + if (proxy) { + if (!proxy.startsWith('socks5://')) { + return TE.left( + new AppError( + 'ProxyError', + 'Error, --proxy must start with socks5://', + [] + ) ); } - - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - const loadFor = (directive as any).loadFor ?? ctx.config.loadFor ?? 6000; - - ctx.logger.info( - '— Loading %s (for %d ms) %O', - (directive)?.url, - loadFor, - directive + commandLineArg.push('--proxy-server=' + proxy); + ctx.logger.debug( + 'Dispatching browser: profile usage count %d proxy %s', + execCount, + proxy ); - // Remind you can exclude directive with env/--exclude=urltag - - // TODO the 'timeout' would allow to repeat this operation with - // different parameters. https://stackoverflow.com/questions/60051954/puppeteer-timeouterror-navigation-timeout-of-30000-ms-exceeded - await page.goto(directive.url, { - waitUntil: 'networkidle0', - }); - - try { - await domainSpecific.beforeWait(page, ctx.profile); - } catch (error) { - ctx.logger.error( - 'error in beforeWait %s (%s)', - (error as any).message, - (error as any).stack - ); - } - - ctx.logger.info( - 'Directive to URL %s, Loading delay %d (--load optional)', - directive.url, - loadFor + } else { + ctx.logger.debug( + 'Dispatching browser: profile usage count %d, with NO PROXY', + execCount ); + } - await page.waitForTimeout(loadFor); - - try { - // debugger; - await domainSpecific.afterWait(page, directive); - } catch (error) { - // eslint-disable-next-line no-console - console.log( - 'Error in afterWait', - (error as any).message, - (error as any).stack - ); - } - ctx.logger.info('— Completed %O \n', directive); - }, toAppError); - }; - -export const operateBrowser = - (ctx: GuardoniContext) => - ( - page: puppeteer.Page, - directives: Directive[] - ): TE.TaskEither => { - return pipe( - TE.sequenceSeqArray(directives.map((d) => operateTab(ctx)(page, d))), - TE.chain(() => - TE.tryCatch(async () => { - if (ctx.config.loadFor < 20000) { - await page.waitForTimeout(15000); - } - return undefined; - }, toAppError) - ) - ); + return ctx.puppeteer.launch({ + headless: ctx.config.headless, + userDataDir: ctx.profile.udd, + executablePath: ctx.config.chromePath, + args: commandLineArg, + ...opts, + }); }; diff --git a/platforms/guardoni/src/guardoni/cli.ts b/platforms/guardoni/src/guardoni/cli.ts index e86f0d020..bc4b591e3 100644 --- a/platforms/guardoni/src/guardoni/cli.ts +++ b/platforms/guardoni/src/guardoni/cli.ts @@ -19,10 +19,10 @@ import { GuardoniOutput, GuardoniSuccessOutput, Platform, - DirectiveType, } from './types'; import D from 'debug'; import puppeteer, { PuppeteerExtra } from 'puppeteer-extra'; +import { DirectiveType } from '@shared/models/Directive'; export const cliLogger = guardoniLogger.extend('cli'); diff --git a/platforms/guardoni/src/guardoni/directives/tk.directives.ts b/platforms/guardoni/src/guardoni/directives/tk.directives.ts new file mode 100644 index 000000000..a92f4d22b --- /dev/null +++ b/platforms/guardoni/src/guardoni/directives/tk.directives.ts @@ -0,0 +1,51 @@ +import { DirectiveHooks } from '@shared/providers/puppeteer/DirectiveHook'; +import { tkLogin } from '@tktrex/shared/methodology/directives/tiktokLogin.directive'; +import * as puppeteer from 'puppeteer-core'; +import { GuardoniProfile } from '../types'; + +async function beforeDirectives( + page: puppeteer.Page, + directive: any +): Promise { + return Promise.resolve(); +} + +async function beforeLoad(page: puppeteer.Page, directive: any): Promise { + return Promise.resolve(); +} + +async function completed(): Promise { + return Promise.resolve(); +} + +async function beforeWait(page: puppeteer.Page, directive: any): Promise { + // debug("Nothing in beforeWait but might be screencapture or ad checking"); + return Promise.resolve(); +} + +async function afterWait(page: puppeteer.Page, directive: any): Promise { + return Promise.resolve(); +} + +type TKHooks = DirectiveHooks<'tiktok.com', {}>; + +interface TKHooksContext { + profile: GuardoniProfile; +} + +export type GetTKHooks = (ctx: TKHooksContext) => TKHooks; +export const GetTKHooks: GetTKHooks = (ctx) => { + return { + openURL: { + beforeDirectives: (p) => beforeDirectives(p, ctx.profile), + beforeLoad, + beforeWait, + afterWait, + completed, + }, + customs: { + tiktokLogin: tkLogin + }, + DOMAIN_NAME: 'tiktok.com', + }; +}; diff --git a/platforms/guardoni/src/guardoni/domainSpecific.ts b/platforms/guardoni/src/guardoni/directives/yt.directives.ts similarity index 90% rename from platforms/guardoni/src/guardoni/domainSpecific.ts rename to platforms/guardoni/src/guardoni/directives/yt.directives.ts index 056dff763..fb71baeff 100644 --- a/platforms/guardoni/src/guardoni/domainSpecific.ts +++ b/platforms/guardoni/src/guardoni/directives/yt.directives.ts @@ -1,3 +1,6 @@ +import { OpenURLDirective } from '@shared/models/Directive'; +import { DirectiveHooks } from '@shared/providers/puppeteer/DirectiveHook'; +import { formatDateTime } from '@shared/utils/date.utils'; import differenceInSeconds from 'date-fns/differenceInSeconds'; import subSeconds from 'date-fns/subSeconds'; import D from 'debug'; @@ -7,8 +10,8 @@ import nconf from 'nconf'; import path from 'path'; import * as puppeteer from 'puppeteer-core'; import url from 'url'; -import { GuardoniProfile } from './types'; -import { formatDateTime } from '@shared/utils/date.utils'; +import { GuardoniProfile } from '../types'; + const debug = D('guardoni:youtube'); const logreqst = D('guardoni:requests'); @@ -214,8 +217,8 @@ async function beforeLoad(page: puppeteer.Page, directive: any): Promise { return Promise.resolve(); } -async function completed(): Promise { - return globalConfig.publicKeySpot; +async function completed(): Promise { + return globalConfig.publicKeySpot as string; } async function beforeWait(page: puppeteer.Page, directive: any): Promise { @@ -277,9 +280,9 @@ async function getYTstatus(page: puppeteer.Page): Promise<{ async function interactWithYT( page: puppeteer.Page, - directive: any, + directive: OpenURLDirective, wantedState: string -): Promise { +): Promise { const DEFAULT_MAX_TIME = 1000 * 60 * 10; // 10 minutes // const DEFAULT_WATCH_TIME = 9000; const PERIODIC_CHECK_MS = 3000; @@ -357,7 +360,10 @@ async function interactWithYT( specialwatch, 'milliseconds' ); - await page.waitForTimeout(specialwatch); + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + await page.waitForTimeout(specialwatch as any); + debug('Finished special watchining time of:', specialwatch, 'milliseconds'); } else { // eslint-disable-next-line no-console @@ -366,33 +372,43 @@ async function interactWithYT( } } -interface DomainSpecific { - beforeLoad: (page: puppeteer.Page, profile: GuardoniProfile) => Promise; - beforeWait: (page: puppeteer.Page, profile: GuardoniProfile) => Promise; - afterWait: (page: puppeteer.Page, directive: any) => Promise; - beforeDirectives: ( - page: puppeteer.Page, - profile: GuardoniProfile - ) => Promise; - completed: () => Promise; - interactWithYT: ( - page: puppeteer.Page, - directive: any, - wantedState: string - ) => Promise; - getYTstatus: (page: puppeteer.Page) => Promise<{ name: string; player: any }>; - DOMAIN_NAME: 'youtube.com'; + +type YTHooks = DirectiveHooks< + 'youtube.com', + { + interactWithYT: ( + + page: puppeteer.Page, + directive: OpenURLDirective, + opts: string + ) => Promise; + + getYTstatus: ( + page: puppeteer.Page, + directive: OpenURLDirective + ) => Promise<{ name: string; player: any }>; + } +>; + +interface YTHooksContext { + profile: GuardoniProfile; } -const domainSpecific: DomainSpecific = { - beforeDirectives, - beforeLoad, - beforeWait, - afterWait, - completed, - getYTstatus, - interactWithYT, - DOMAIN_NAME: 'youtube.com', -}; +export type GetYTHooks = (ctx: YTHooksContext) => YTHooks; +export const GetYTHooks: GetYTHooks = (ctx) => { + return { + openURL: { + beforeDirectives: (p) => beforeDirectives(p, ctx.profile), + beforeLoad, + beforeWait, + afterWait, + completed, + }, + customs: { + getYTstatus, + interactWithYT, + }, + DOMAIN_NAME: 'youtube.com' as const, -export default domainSpecific; + }; +}; diff --git a/platforms/guardoni/src/guardoni/experiment.ts b/platforms/guardoni/src/guardoni/experiment.ts index 682c4e9f7..06430d0a9 100644 --- a/platforms/guardoni/src/guardoni/experiment.ts +++ b/platforms/guardoni/src/guardoni/experiment.ts @@ -1,27 +1,25 @@ import { AppError, toAppError } from '@shared/errors/AppError'; import { toValidationError } from '@shared/errors/ValidationError'; import { + ComparisonDirectiveType, + Directive, + DirectiveType, + OpenURLDirectiveType, PostDirectiveResponse, PostDirectiveSuccessResponse, + ScrollForDirectiveType, } from '@shared/models/Directive'; -import { ComparisonDirectiveType } from '@yttrex/shared/models/Directive'; -import { - SearchDirective, - SearchDirectiveType, -} from '@tktrex/shared/models/directive/SearchDirective'; import * as E from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/function'; +// import * as NEA from 'fp-ts/lib/NonEmptyArray'; import { NonEmptyArray } from 'fp-ts/lib/NonEmptyArray'; import * as TE from 'fp-ts/lib/TaskEither'; import * as fs from 'fs'; +import * as t from 'io-ts'; import { NonEmptyString } from 'io-ts-types/lib/NonEmptyString'; import { failure, PathReporter } from 'io-ts/lib/PathReporter'; import path from 'path'; -// import pluginStealth from "puppeteer-extra-plugin-stealth"; import { - Directive, - DirectiveKeysMap, - DirectiveType, ExperimentInfo, GuardoniContext, GuardoniProfile, @@ -82,10 +80,36 @@ export const readCSVAndParse = return TE.right({ records, info }); }), - TE.chainFirst(({ records }) => + TE.chain(({ records }) => pipe( - records, - DirectiveKeysMap.props[directiveType].decode, + t.array(Directive).decode( + records.reduce((acc: any[], r: any) => { + if (r.incrementScrollByPX && r.totalScroll) { + const { + incrementScrollByPX, + totalScroll, + interval, + ...rest + } = r; + return acc.concat([ + rest, + { + type: ScrollForDirectiveType.value, + incrementScrollByPX: +incrementScrollByPX, + totalScroll: +totalScroll, + interval: interval ? +r.interval : undefined, + }, + ]); + } + + return acc.concat({ + ...r, + loadFor: r.loadFor === '' ? undefined : r.loadFor, + watchFor: r.watchFor === '' ? undefined : r.watchFor, + type: OpenURLDirectiveType.value, + }); + }, [] as any[]) + ), TE.fromEither, TE.mapLeft((e) => { return new AppError( @@ -100,9 +124,9 @@ export const readCSVAndParse = }) ) ), - TE.map((csvContent) => { - logger.debug('CSV decoded content %O', csvContent.records); - return csvContent.records as NonEmptyArray; + TE.map((records) => { + logger.debug('CSV decoded content %O', records); + return records as NonEmptyArray; }) ) ) @@ -143,22 +167,31 @@ export const getDirective = }, }), TE.map((response) => { - const directiveType = SearchDirective.is(response[0]) - ? SearchDirectiveType.value - : ComparisonDirectiveType.value; + ctx.logger.warn('Response %O', response); + const directiveType = ComparisonDirectiveType.value; + + // const data = pipe( + // NEA.fromArray(response), + // NEA.map((d): Directive => { + // // if (CommonDirectiveTK.is(d)) { + // // const { videoURL, title, ...rest } = d; + // // const dd: CommonDirective = { + // // ...rest, + // // title, + // // url: videoURL, + // // watchFor: 'end', + // // urltag: undefined, + // // loadFor: undefined, + // // }; + // // return dd; + // // } + // return d; + // }) + // ) as NonEmptyArray; - const data = response.map((d) => { - if (SearchDirective.is(d)) { - const { videoURL, title } = d; - return { - title, - url: videoURL, - }; - } - return d; - }) as NonEmptyArray; + ctx.logger.debug(`Data for experiment (%s) %O`, experimentId, response); - ctx.logger.debug(`Data for experiment (%s) %O`, experimentId, data); + const data = response as any[] as NonEmptyArray; return { type: directiveType, data }; }) @@ -174,10 +207,7 @@ export const createExperimentInAPI = return pipe( API.v3.Public.PostDirective({ Params: { directiveType }, - Body: - directiveType === 'comparison' - ? { parsedCSV: parsedCSV as any } - : parsedCSV, + Body: parsedCSV, Headers: { 'Content-Type': 'application/json; charset=utf-8', }, diff --git a/platforms/guardoni/src/guardoni/guardoni.ts b/platforms/guardoni/src/guardoni/guardoni.ts index 5e618b13b..7897750cd 100755 --- a/platforms/guardoni/src/guardoni/guardoni.ts +++ b/platforms/guardoni/src/guardoni/guardoni.ts @@ -6,9 +6,11 @@ * - filter the directive with "exclude url tag" * */ -import * as Endpoints from '@shared/endpoints'; +import * as Endpoints from '@yttrex/shared/endpoints'; import { AppError, toAppError } from '@shared/errors/AppError'; +import { Directive, DirectiveType } from '@shared/models/Directive'; import { APIClient, MakeAPIClient } from '@shared/providers/api.provider'; +import { GetPuppeteer } from '@shared/providers/puppeteer/puppeteer.provider'; import { differenceInSeconds } from 'date-fns'; import debug from 'debug'; import { sequenceS } from 'fp-ts/lib/Apply'; @@ -20,14 +22,15 @@ import { NonEmptyString } from 'io-ts-types/lib/NonEmptyString'; import path from 'path'; import type puppeteer from 'puppeteer-core'; import { PuppeteerExtra } from 'puppeteer-extra'; -import { dispatchBrowser, operateBrowser } from './browser'; +import { dispatchBrowser } from './browser'; import { checkConfig, getConfig, getDefaultConfig, getPlatformConfig, } from './config'; -import domainSpecific from './domainSpecific'; +import { GetTKHooks } from './directives/tk.directives'; +import { GetYTHooks } from './directives/yt.directives'; import { concludeExperiment, getDirective, @@ -53,8 +56,6 @@ import { Platform, PlatformConfig, ProgressDetails, - Directive, - DirectiveType, } from './types'; import { getChromePath, getPackageVersion } from './utils'; @@ -65,12 +66,8 @@ const runNavigate = (ctx: GuardoniContext): TE.TaskEither => { : 'https://www.youtube.com'; return pipe( - dispatchBrowser({ - ...ctx, - config: { - ...ctx.config, - headless: false, - }, + dispatchBrowser(ctx)({ + headless: false, }), TE.chain((b) => { return TE.tryCatch(async () => { @@ -115,7 +112,7 @@ export const runBrowser = directives: NonEmptyArray ): TE.TaskEither => { return pipe( - dispatchBrowser(ctx), + dispatchBrowser(ctx)({}), TE.chain((browser) => { return TE.tryCatch(async () => { const [page, ...otherPages] = await browser.pages(); @@ -224,7 +221,7 @@ export const guardoniExecution = directiveType: DirectiveType, directives: NonEmptyArray, page: puppeteer.Page - ): TE.TaskEither => { + ): TE.TaskEither => { const start = new Date(); ctx.logger.debug( @@ -237,12 +234,7 @@ export const guardoniExecution = ctx.logger.debug('Config %O', ctx.config); return pipe( - TE.tryCatch( - () => domainSpecific.beforeDirectives(page, ctx.profile), - (e) => new AppError('BeforeDirectivesError', (e as any).message, []) - ), - TE.chain(() => operateBrowser(ctx)(page, directives)), - TE.chain(() => TE.tryCatch(() => domainSpecific.completed(), toAppError)), + ctx.puppeteer.operateBrowser(page, directives), TE.map((publicKey) => { const duration = differenceInSeconds(new Date(), start); @@ -305,7 +297,21 @@ const loadContext = ( chromePath, })), E.map((c) => ({ - puppeteer: p, + puppeteer: GetPuppeteer({ + logger: logger, + puppeteer: p, + config: { + loadFor: config.loadFor, + }, + hooks: + platform === 'youtube' + ? GetYTHooks({ + profile, + }) + : GetTKHooks({ + profile, + }), + }), API: MakeAPIClient( { baseURL: platformConf.backend, @@ -370,15 +376,17 @@ interface GuardoniLauncher { ) => TE.TaskEither; } -export type GetGuardoni = ({ - basePath, - logger, -}: { +export interface GuardoniOptions { basePath: string; logger: GuardoniContext['logger']; puppeteer: PuppeteerExtra; verbose?: boolean; -}) => GuardoniLauncher; +} + +export type GetGuardoni = ({ + basePath, + logger, +}: GuardoniOptions) => GuardoniLauncher; export const GetGuardoni: GetGuardoni = ({ basePath, diff --git a/platforms/guardoni/src/guardoni/types.ts b/platforms/guardoni/src/guardoni/types.ts index e157b3739..6261ac829 100644 --- a/platforms/guardoni/src/guardoni/types.ts +++ b/platforms/guardoni/src/guardoni/types.ts @@ -1,19 +1,10 @@ -import * as endpoints from '@shared/endpoints'; +import * as endpoints from '@yttrex/shared/endpoints'; import { Logger } from '@shared/logger'; -import { - SearchDirective, - SearchDirectiveType, -} from '@tktrex/shared/models/directive/SearchDirective'; -import { - ComparisonDirectiveRow, - ComparisonDirectiveType, -} from '@yttrex/shared/models/Directive'; +import { Directive, DirectiveType } from '@shared/models/Directive'; import { APIClient } from '@shared/providers/api.provider'; -import { pipe } from 'fp-ts/lib/function'; -import * as R from 'fp-ts/lib/Record'; +import { PuppeteerProvider } from '@shared/providers/puppeteer/puppeteer.provider'; import * as t from 'io-ts'; import { nonEmptyArray } from 'io-ts-types'; -import { PuppeteerExtra } from 'puppeteer-extra'; export const Platform = t.union( [t.literal('youtube'), t.literal('tiktok')], @@ -86,13 +77,13 @@ export const GuardoniProfile = t.strict( export type GuardoniProfile = t.TypeOf; export interface GuardoniContext { - puppeteer: PuppeteerExtra; + puppeteer: PuppeteerProvider; API: APIClient; config: GuardoniConfig; platform: PlatformConfig; profile: GuardoniProfile; guardoniConfigFile: string; - logger: Pick; + logger: Logger; version: string; } @@ -106,29 +97,21 @@ export interface ExperimentInfo { when: Date; } -export const Directive = t.union( - [ComparisonDirectiveRow, SearchDirective], - 'DirectiveRow' -); -export type Directive = t.TypeOf; - -export const CreateDirectiveBody = t.union( - [ - t.type({ parsedCSV: nonEmptyArray(Directive) }), - nonEmptyArray(SearchDirective), - ], - 'CreateDirectiveBody' -); +export const CreateDirectiveBody = nonEmptyArray(Directive); -const directiveKeysMap = pipe( - { search: SearchDirective, comparison: ComparisonDirectiveRow }, - R.map((type) => nonEmptyArray(type)) -); +// const directiveKeysMap = pipe( +// { +// search: SearchDirective, +// comparison: ComparisonDirectiveRow, +// common: CommonDirective, +// }, +// R.map((type) => nonEmptyArray(type)) +// ); -export const DirectiveKeysMap = t.type(directiveKeysMap, 'DirectiveKeysMap'); +// export const DirectiveKeysMap = t.type(directiveKeysMap, 'DirectiveKeysMap'); -export const DirectiveType = t.union( - [ComparisonDirectiveType, SearchDirectiveType], - 'DirectiveType' -); -export type DirectiveType = t.TypeOf; +// export const DirectiveType = t.union( +// [ComparisonDirectiveType, SearchDirectiveType], +// 'DirectiveType' +// ); +// export type DirectiveType = t.TypeOf; diff --git a/platforms/guardoni/typings/webpack.d.ts b/platforms/guardoni/typings/webpack.d.ts index 7b2523f27..51ddf67f2 100644 --- a/platforms/guardoni/typings/webpack.d.ts +++ b/platforms/guardoni/typings/webpack.d.ts @@ -1,14 +1,14 @@ declare module '*.css' { - const src: string; - export default src; + const css: string; + export default css; } declare module '*.png' { - const src: string; - export default src; + const png: string; + export default png; } declare module '*.svg' { - const src: string; - export default src; + const svg: string; + export default svg; } diff --git a/platforms/guardoni/webpack.app.config.ts b/platforms/guardoni/webpack.app.config.ts new file mode 100644 index 000000000..a724f9404 --- /dev/null +++ b/platforms/guardoni/webpack.app.config.ts @@ -0,0 +1,101 @@ +import * as path from 'path'; +import { getConfig } from '../../packages/shared/src/webpack/config'; +import { CopyWebpackPlugin } from '../../packages/shared/src/webpack/plugins'; +import packageJson from './package.json'; +import { AppEnv } from './src/AppEnv'; + +process.env.VERSION = packageJson.version; + +const { buildENV, ...config } = getConfig({ + cwd: __dirname, + target: 'electron-main', + outputDir: path.resolve(__dirname, 'build/electron'), + env: AppEnv, + hot: false, + entry: { + main: path.resolve(__dirname, './src/electron/main.ts'), + }, +}); + +config.plugins.push( + new CopyWebpackPlugin({ + patterns: [ + { + from: path.resolve( + __dirname, + config.mode === 'development' ? '.env.development' : '.env' + ), + to: path.resolve(__dirname, 'build/electron/.env'), + toType: 'file', + }, + ], + }) +); +config.module?.rules?.push( + { + // this is a hack to get webpack to be able to bundle + // puppeteer-extra, found here: + // https://github.com/berstend/puppeteer-extra/issues/93 + // this also requires the TypeScript to emit import / export statements + // i.e. ES6+ nodules to work + test: /node_modules\/puppeteer-extra\/dist\/index\.esm\.js/, + loader: 'string-replace-loader', + options: { + // match a require function call where the argument isn't a string + // also capture the first character of the args so we can ignore it later + search: 'require[(]([^\'"])', + // replace the 'require(' with a '__non_webpack_require__(', meaning it will require the files at runtime + // $1 grabs the first capture group from the regex, the one character we matched and don't want to lose + replace: '__non_webpack_require__($1', + flags: 'g', + }, + }, + { + // also part of the puppeteer-extra hack + test: /\.js$/, + use: 'unlazy-loader', + }, + { + // this is required by canvas, part of linkedom + test: /\.node$/, + use: 'node-loader', + } +); + +// renderer config +const { buildENV: rendererBuildENV, ...rendererConfig } = getConfig({ + cwd: __dirname, + outputDir: path.resolve(__dirname, 'build/electron/renderer'), + env: AppEnv, + hot: false, + target: 'electron-renderer', + entry: { + renderer: path.resolve(__dirname, 'src/electron/renderer.tsx'), + }, +}); + +rendererConfig.plugins.push( + new CopyWebpackPlugin({ + patterns: [ + { + from: 'static', + filter: (file: string) => { + const { base } = path.parse(file); + return ['guardoni.html'].includes(base); + }, + }, + ], + }) +); + +export default [ + { + ...rendererConfig, + mode: 'development', + devtool: 'source-map', + }, + { + ...config, + devtool: 'source-map', + }, +]; diff --git a/platforms/guardoni/webpack.cli.config.ts b/platforms/guardoni/webpack.cli.config.ts new file mode 100644 index 000000000..4ecabce15 --- /dev/null +++ b/platforms/guardoni/webpack.cli.config.ts @@ -0,0 +1,63 @@ +import * as t from 'io-ts'; +import * as path from 'path'; +import { getConfig } from '../../packages/shared/src/webpack/config'; +import packageJson from './package.json'; + +process.env.VERSION = packageJson.version; + +const { buildENV: guardoniBuildEnv, ...guardoniConfig } = getConfig({ + cwd: __dirname, + outputDir: path.resolve(__dirname, 'build/guardoni'), + env: t.strict({}), + hot: false, + target: 'node16', + entry: { + cli: path.resolve(__dirname, 'src/guardoni/cli.ts'), + }, +}); + +guardoniConfig.module?.rules?.push( + { + // this is a hack to get webpack to be able to bundle + // puppeteer-extra, found here: + // https://github.com/berstend/puppeteer-extra/issues/93 + // this also requires the TypeScript to emit import / export statements + // i.e. ES6+ nodules to work + test: /node_modules\/puppeteer-extra\/dist\/index\.esm\.js/, + loader: 'string-replace-loader', + options: { + // match a require function call where the argument isn't a string + // also capture the first character of the args so we can ignore it later + search: 'require[(]([^\'"])', + // replace the 'require(' with a '__non_webpack_require__(', meaning it will require the files at runtime + // $1 grabs the first capture group from the regex, the one character we matched and don't want to lose + replace: '__non_webpack_require__($1', + flags: 'g', + }, + }, + { + // also part of the puppeteer-extra hack + test: /\.js$/, + use: 'unlazy-loader', + }, + { + // this is required by canvas, part of linkedom + test: /\.node$/, + use: 'node-loader', + } +); + +export default [ + // guardoni cli + { + ...guardoniConfig, + output: { + ...guardoniConfig.output, + libraryTarget: 'commonjs', + }, + node: { + __dirname: false, + }, + devtool: 'source-map', + }, +]; diff --git a/platforms/guardoni/webpack.config.ts b/platforms/guardoni/webpack.config.ts deleted file mode 100644 index f4ab27554..000000000 --- a/platforms/guardoni/webpack.config.ts +++ /dev/null @@ -1,187 +0,0 @@ -import * as t from 'io-ts'; -import * as path from 'path'; -import { getConfig } from '../../packages/shared/src/webpack/config'; -import { CopyWebpackPlugin } from '../../packages/shared/src/webpack/plugins'; -import { AppEnv } from './src/AppEnv'; -import packageJson from './package.json'; - -process.env.VERSION = packageJson.version; - -const { buildENV, ...config } = getConfig({ - cwd: __dirname, - target: 'electron-main', - outputDir: path.resolve(__dirname, 'build/electron'), - env: AppEnv, - hot: false, - entry: { - main: path.resolve(__dirname, './src/electron/main.ts'), - }, -}); - -config.plugins.push( - new CopyWebpackPlugin({ - patterns: [ - { - from: path.resolve( - __dirname, - config.mode === 'development' ? '.env.development' : '.env' - ), - to: path.resolve(__dirname, 'build/electron/.env'), - toType: 'file', - }, - ], - }) -); -config.module?.rules?.push( - { - // this is a hack to get webpack to be able to bundle - // puppeteer-extra, found here: - // https://github.com/berstend/puppeteer-extra/issues/93 - // this also requires the TypeScript to emit import / export statements - // i.e. ES6+ nodules to work - test: /node_modules\/puppeteer-extra\/dist\/index\.esm\.js/, - loader: 'string-replace-loader', - options: { - // match a require function call where the argument isn't a string - // also capture the first character of the args so we can ignore it later - search: 'require[(]([^\'"])', - // replace the 'require(' with a '__non_webpack_require__(', meaning it will require the files at runtime - // $1 grabs the first capture group from the regex, the one character we matched and don't want to lose - replace: '__non_webpack_require__($1', - flags: 'g', - }, - }, - { - // also part of the puppeteer-extra hack - test: /\.js$/, - use: 'unlazy-loader', - }, - { - // this is required by canvas, part of linkedom - test: /\.node$/, - use: 'node-loader', - } -); - -// renderer config -const { buildENV: rendererBuildENV, ...rendererConfig } = getConfig({ - cwd: __dirname, - outputDir: path.resolve(__dirname, 'build/electron/renderer'), - env: AppEnv, - hot: false, - target: 'electron-renderer', - entry: { - renderer: path.resolve(__dirname, 'src/electron/renderer.tsx'), - }, -}); - -rendererConfig.plugins.push( - new CopyWebpackPlugin({ - patterns: [ - { - from: 'static', - filter: (file: string) => { - const { base } = path.parse(file); - return ['guardoni.html'].includes(base); - }, - }, - ], - }) -); - -// rendererConfig.module?.rules?.push( -// { -// // this is a hack to get webpack to be able to bundle -// // puppeteer-extra, found here: -// // https://github.com/berstend/puppeteer-extra/issues/93 -// // this also requires the TypeScript to emit import / export statements -// // i.e. ES6+ nodules to work -// test: /node_modules\/puppeteer-extra\/dist\/index\.esm\.js/, -// loader: 'string-replace-loader', -// options: { -// // match a require function call where the argument isn't a string -// // also capture the first character of the args so we can ignore it later -// search: 'require[(]([^\'"])', -// // replace the 'require(' with a '__non_webpack_require__(', meaning it will require the files at runtime -// // $1 grabs the first capture group from the regex, the one character we matched and don't want to lose -// replace: '__non_webpack_require__($1', -// flags: 'g', -// }, -// }, -// { -// // also part of the puppeteer-extra hack -// test: /\.js$/, -// use: 'unlazy-loader', -// }, -// { -// // this is required by canvas, part of linkedom -// test: /\.node$/, -// use: 'node-loader', -// } -// ); - -const { buildENV: guardoniBuildEnv, ...guardoniConfig } = getConfig({ - cwd: __dirname, - outputDir: path.resolve(__dirname, 'build/guardoni'), - env: t.strict({}), - hot: false, - target: 'node16', - entry: { - cli: path.resolve(__dirname, 'src/guardoni/cli.ts'), - }, -}); - -guardoniConfig.module?.rules?.push( - { - // this is a hack to get webpack to be able to bundle - // puppeteer-extra, found here: - // https://github.com/berstend/puppeteer-extra/issues/93 - // this also requires the TypeScript to emit import / export statements - // i.e. ES6+ nodules to work - test: /node_modules\/puppeteer-extra\/dist\/index\.esm\.js/, - loader: 'string-replace-loader', - options: { - // match a require function call where the argument isn't a string - // also capture the first character of the args so we can ignore it later - search: 'require[(]([^\'"])', - // replace the 'require(' with a '__non_webpack_require__(', meaning it will require the files at runtime - // $1 grabs the first capture group from the regex, the one character we matched and don't want to lose - replace: '__non_webpack_require__($1', - flags: 'g', - }, - }, - { - // also part of the puppeteer-extra hack - test: /\.js$/, - use: 'unlazy-loader', - }, - { - // this is required by canvas, part of linkedom - test: /\.node$/, - use: 'node-loader', - } -); - -export default [ - { - ...rendererConfig, - mode: 'development', - devtool: 'source-map', - }, - { - ...config, - devtool: 'source-map', - }, - // guardoni cli - { - ...guardoniConfig, - output: { - ...guardoniConfig.output, - libraryTarget: 'commonjs', - }, - node: { - __dirname: false, - }, - devtool: 'source-map', - }, -]; diff --git a/platforms/tktrex/backend/lib/experiments.js b/platforms/tktrex/backend/lib/experiments.js index 68c26d6a1..42e21bd9f 100644 --- a/platforms/tktrex/backend/lib/experiments.js +++ b/platforms/tktrex/backend/lib/experiments.js @@ -19,13 +19,13 @@ async function pickDirective(experimentId) { } -async function registerDirective(links, directiveType) { - debug("registering directived %j %s", links, directiveType); +async function registerDirective(directives, directiveType) { + debug("registering directived %j %s", directives, directiveType); /* this API is called by guardoni when --csv is used, the API is POST localhost:9000/api/v3/directives/comparison */ const experimentId = utils.hash({ type: directiveType, - links, + directives, }); const mongoc = await mongo3.clientConnect({concurrency: 1}); const exist = await mongo3.readOne(mongoc, @@ -49,7 +49,7 @@ async function registerDirective(links, directiveType) { nconf.get('schema').directives, { when: new Date(), directiveType, - links, + directives, experimentId, }) await mongoc.close(); @@ -109,4 +109,4 @@ module.exports = { registerDirective, concludeExperiment, saveExperiment, -} \ No newline at end of file +} diff --git a/platforms/tktrex/backend/package.json b/platforms/tktrex/backend/package.json index 70ca5d897..0d5ae3266 100644 --- a/platforms/tktrex/backend/package.json +++ b/platforms/tktrex/backend/package.json @@ -13,6 +13,10 @@ "parserv:watch": "DEBUG=\"*\" ts-node-dev bin/parserv3" }, "author": "https://github.com/tracking-exposed/tktrex/graphs/contributors", + "repository": { + "type": "git", + "url": "git+https://github.com/tracking-exposed/trex.git" + }, "license": "AGPL-3.0", "dependencies": { "body-parser": "^1.19.1", diff --git a/platforms/tktrex/backend/routes/directives.js b/platforms/tktrex/backend/routes/directives.js index b28585699..922788eeb 100644 --- a/platforms/tktrex/backend/routes/directives.js +++ b/platforms/tktrex/backend/routes/directives.js @@ -50,13 +50,15 @@ async function post(req) { /* warning, this is different from YOUTUBE, it uses a list of * queries instead of a CSV format parsed. */ - const data = req.body; // parsedCSV was the name from guardoni fmt + const directives = req.body; // parsedCSV was the name from guardoni fmt - const links = data; - - debug('Registering directive %s (%d urls)', directiveType, _.size(links)); + debug( + 'Registering directive %s (%d urls)', + directiveType, + _.size(directives) + ); - const feedback = await experlib.registerDirective(links, directiveType); + const feedback = await experlib.registerDirective(directives, directiveType); // this feedback is printed at terminal when --csv is used return { json: feedback }; } @@ -69,7 +71,7 @@ async function get(req) { debug('Directive %O', expinfo); // if(expinfo.directiveType === 'search') - const directives = expinfo.links; + const directives = expinfo.directives; debug( 'search directive type %s produced %d', experimentId, @@ -87,7 +89,6 @@ async function getPublic(req) { ]; const filter = { - directiveType: 'comparison', experimentId: { $nin: blackList, }, diff --git a/platforms/tktrex/docs/docs/automation/_category_.json b/platforms/tktrex/docs/docs/_automation/_category_.json similarity index 69% rename from platforms/tktrex/docs/docs/automation/_category_.json rename to platforms/tktrex/docs/docs/_automation/_category_.json index ae6622f52..29a1eed0d 100644 --- a/platforms/tktrex/docs/docs/automation/_category_.json +++ b/platforms/tktrex/docs/docs/_automation/_category_.json @@ -1,4 +1,4 @@ { "label": "@tktrex/automation", - "position": 3 + "position": 5 } diff --git a/platforms/tktrex/docs/docs/automation/intro.md b/platforms/tktrex/docs/docs/_automation/_intro.md similarity index 95% rename from platforms/tktrex/docs/docs/automation/intro.md rename to platforms/tktrex/docs/docs/_automation/_intro.md index eff6a33d3..0ac07135e 100644 --- a/platforms/tktrex/docs/docs/automation/intro.md +++ b/platforms/tktrex/docs/docs/_automation/_intro.md @@ -29,7 +29,7 @@ from there. A `project` is simply materialized as a directory. ## Installation ```bash -git clone git@github.com:tracking-exposed/yttrex.git +git clone git@github.com:tracking-exposed/trex.git git checkout cd yttrex yarn diff --git a/platforms/tktrex/docs/docs/backend.md b/platforms/tktrex/docs/docs/backend.md new file mode 100644 index 000000000..56c0d33a9 --- /dev/null +++ b/platforms/tktrex/docs/docs/backend.md @@ -0,0 +1,5 @@ +--- +title: Backend +sidebar_position: 3 +--- + diff --git a/platforms/tktrex/docs/docs/extension.mdx b/platforms/tktrex/docs/docs/extension.mdx new file mode 100644 index 000000000..3921e5d3f --- /dev/null +++ b/platforms/tktrex/docs/docs/extension.mdx @@ -0,0 +1,8 @@ +--- +title: Extension +sidebar_position: 2 +--- + +import ExtensionPartial from '@site/docs/partials/extension/_index.mdx'; + + diff --git a/platforms/tktrex/docs/docs/extension/_category_.json b/platforms/tktrex/docs/docs/extension/_category_.json deleted file mode 100644 index 7602ecb59..000000000 --- a/platforms/tktrex/docs/docs/extension/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "@tktrex/extension", - "position": 2 -} diff --git a/platforms/tktrex/docs/docs/extension/intro.md b/platforms/tktrex/docs/docs/extension/intro.md deleted file mode 100644 index 7547f195a..000000000 --- a/platforms/tktrex/docs/docs/extension/intro.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Getting started -sidebar_position: 1 ---- - -## title 2 - -### title 3 diff --git a/platforms/tktrex/docs/docs/intro.md b/platforms/tktrex/docs/docs/intro.md index c7d1bb076..ecc53f3f8 100644 --- a/platforms/tktrex/docs/docs/intro.md +++ b/platforms/tktrex/docs/docs/intro.md @@ -1,11 +1,13 @@ --- sidebar_position: 1 +title: Getting started +id: tktrex-intro --- -# Introduction +## API -## Packages +Check out latest api [here](/tktrex/api) -- [@tktrex/shared](./shared/intro) -- [@tktrex/extension](./extension/intro) -- [@tktrex/automation](./automation/intro) +## Extension + +Documentation relative to the extension can be found [here](./extension) diff --git a/platforms/tktrex/docs/docs/shared.md b/platforms/tktrex/docs/docs/shared.md new file mode 100644 index 000000000..42ed42364 --- /dev/null +++ b/platforms/tktrex/docs/docs/shared.md @@ -0,0 +1,6 @@ +--- +title: '@tktrex/shared' +sidebar_position: 4 +--- + +The `@tktrex/shared` module contains `endpoints`, `models` and other definitions needed by `@tktrex` ecosystem. diff --git a/platforms/tktrex/docs/docs/shared/_category_.json b/platforms/tktrex/docs/docs/shared/_category_.json deleted file mode 100644 index 038e74a2c..000000000 --- a/platforms/tktrex/docs/docs/shared/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "@tktrex/shared", - "position": 1 -} diff --git a/platforms/tktrex/docs/package.json b/platforms/tktrex/docs/package.json index a121631d6..53e3c1d22 100644 --- a/platforms/tktrex/docs/package.json +++ b/platforms/tktrex/docs/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "2.0.0-beta.15", - "@docusaurus/preset-classic": "2.0.0-beta.15", + "@docusaurus/core": "2.0.0-beta.14", + "@docusaurus/preset-classic": "2.0.0-beta.14", "@mdx-js/react": "^1.6.21", "clsx": "^1.1.1", "prism-react-renderer": "^1.2.1", @@ -24,7 +24,7 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@docusaurus/module-type-aliases": "2.0.0-beta.15", + "@docusaurus/module-type-aliases": "2.0.0-beta.14", "@tsconfig/docusaurus": "^1.0.4", "typescript": "^4.7.2" }, diff --git a/platforms/tktrex/extension/package.json b/platforms/tktrex/extension/package.json index bac3b70db..3ba6e30cf 100644 --- a/platforms/tktrex/extension/package.json +++ b/platforms/tktrex/extension/package.json @@ -46,6 +46,6 @@ "io-ts": "^2.2.16", "jest-environment-jsdom-global": "^3.1.2", "typescript": "^4.7.2", - "webpack": "^5.72.1" + "webpack": "^5.73.0" } } diff --git a/platforms/tktrex/methodology/README.md b/platforms/tktrex/methodology/README.md deleted file mode 100644 index cffd9f4cb..000000000 --- a/platforms/tktrex/methodology/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Guardoni v0 - - npm run pkg - bin/guardoni0.js --searches file.txt - - diff --git a/platforms/tktrex/methodology/bin/guardoni0-base.js b/platforms/tktrex/methodology/bin/guardoni0-base.js deleted file mode 100755 index bf36337e3..000000000 --- a/platforms/tktrex/methodology/bin/guardoni0-base.js +++ /dev/null @@ -1,419 +0,0 @@ -#!/usr/bin/env node -const _ = require('lodash'); -const debug = require('debug')('guardoni:notes'); -const info = require('debug')('guardoni:info'); -const puppeteer = require("puppeteer-extra") -const pluginStealth = require("puppeteer-extra-plugin-stealth"); -const fs = require('fs'); -const path = require('path'); -const nconf = require('nconf'); -const moment = require('moment'); -const fetch = require('node-fetch'); - -const domainSpecific = require('../src/domainSpecific'); - -const defaultCfgPath = path.join("config", "default.json"); -nconf.argv().env(); -nconf.defaults({ - config: defaultCfgPath -}); -const configFile = nconf.get('config'); -nconf.argv().env().file(configFile); - -/* this also happens in 'src/domainSpecific' and causes debug to print regardless of the - * environment variable sets */ -debug.enabled = info.enabled = true; - -const server = nconf.get('backend') ? - ( _.endsWith(nconf.get('backend'), '/') ? - nconf.get('backend').replace(/\/$/, '') : nconf.get('backend') ) : - 'https://tiktok.tracking.exposed'; - -async function keypress() { - process.stdin.setRawMode(true) - return new Promise(resolve => process.stdin.once('data', () => { - process.stdin.setRawMode(false) - resolve() - })) -} - -async function allowResearcherSomeTimeToSetupTheBrowser(profileName) { - console.log("\n\n.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:."); - console.log("Creating profile", profileName); - console.log("You should now LOGIN ON TikTok!\n\n...then press any key."); - console.log('\n~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~'); - await keypress(); - console.log("\n[Received] Reproduction starts now!") -} - -function getChromePath() { - // this function check for standard chrome executabled path and - // return it. If not found, raise an error - const knownPaths = [ - "/usr/bin/google-chrome", - "/Program Files (x86)/Google/Chrome/Application/chrome.exe", - "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe", - "/Applications/Chromium.app/Contents/MacOS/Chromium", - ]; - - const chromePath = _.find(knownPaths, function(p) { - return fs.existsSync(p); - }) - if(!chromePath) { - console.log("Tried to guess your Chrome executable and wasn't found"); - console.log("Solutions: Install Google Chrome in your system or contact the developers"); - process.exit(1); - } - return chromePath; -} - -function buildAPIurl(route, params) { - return `${server}/api/v3/${route}/${params}`; -} - -async function pullDirectives(sourceUrl) { - let directives = null; - try { - if (_.startsWith(sourceUrl, 'http')) { - const response = await fetch(sourceUrl); - if (response.status !== 200) { - console.log("Error in fetching directives from URL", response.status); - process.exit(1); - } - directives = await response.json(); - } else { - throw new Error("A local file isn't supported anymore"); - // directives = JSON.parse(fs.readFileSync(sourceUrl, 'utf-8')); - } - if (!directives.length) { - console.log("URL/file do not include any directive in expected format"); - console.log("Example is --directive ", COMMANDJSONEXAMPLE); - process.exit(1); - } - return directives; - } catch (error) { - console.log("Error in retriving directive URL: " + error.message); - // console.log(error.response.body); - process.exit(1); - } -} - -function profileExecount(profile, evidencetag) { - let data; let newProfile = false; - const udd = path.resolve(path.join('profiles', profile)); - const guardfile = path.join(udd, 'guardoni.json'); - if (!fs.existsSync(udd)) { - console.log("--profile hasn't a directory. Creating " + udd); - try { - fs.mkdirSync(udd, {recursive: true}); - } catch (error) { - console.log("Unable to create directory:", error.message); - process.exit(1) - } - newProfile = true; - } - - if (!newProfile) { - const jdata = fs.readFileSync(guardfile, 'utf-8'); - data = JSON.parse(jdata); - debug("Profile %s read %d execount", profile, data.execount); - data.execount += 1; - data.evidencetags.push(evidencetag); - } else { - data = { - execount: 1, - evidencetags: [evidencetag] - } - } - - data.newProfile = newProfile; - data.profileName = profile; - data.udd = udd; - fs.writeFileSync(guardfile, JSON.stringify(data, undefined, 2), 'utf-8'); - debug("profile %s wrote %j", profile, data); - return data; -} - -function printHelp() { - const helptext = `\nOptions can be set via: env , --longopts, and ${defaultCfgPath} file - -To quickly test the tool, execute and follow instructions: - --auto <1 or 2>:\tdefault 1, a.k.a. "Greta experiment" - -To register an experiment: - --csv FILENAME.csv\tdefault is --comparison, optional --shadowban - -To execute a known experiment: - --experiment - -Advanced options: - --evidencetag - --profile - --config - --proxy - --advdump - --3rd - --headless - -.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. -\nhttps://youtube.tracking.exposed/guardoni for full documentation. -You need a reliable internet connection to ensure a flawless collection`; - console.log(".:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:."); - console.log(helptext); - console.log('~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~'); -} - -async function writeExperimentInfo(experimentId, profinfo, evidencetag, directiveType) { - debug("Saving experiment info in extension/experiment.json (would be read by the extension)"); - const cfgfile = path.join('extension', 'experiment.json'); - const expinfo = { - experimentId, - evidencetag, - directiveType, - execount: profinfo.execount, - profileName: profinfo.profileName, - newProfile: profinfo.newProfile, - when: new Date() - }; - fs.writeFileSync(cfgfile, JSON.stringify(expinfo), 'utf-8'); - profinfo.expinfo = expinfo; -} - -async function main() { - - const searchFile= nconf.get('searches'); - - if(!searchFile) { - debug("Mandatory --searches option with a .txt file containing one search per line"); - process.exit(1); - } - - const rawf = fs.readFileSync(searchFile, 'utf-8'); - const queries = _.reduce(rawf.split('\n'), function(memo, query) { - const sureq = query.trim(); - if(sureq.length) - memo.push(sureq); - return memo; - }, []) - - if (!queries.length ) { - debug("Error, we need --searches and you should be a .txt FILE, with a query per each line"); - process.exit(1); - } - - const evidencetag = nconf.get('evidencetag') || 'no-tag-' + _.random(0, 0xffff); - let profile = nconf.get('profile'); - if (!profile) - profile = nconf.get('evidencetag') ? - evidencetag : `guardoni-${moment().format("YYYY-MM-DD")}`; - /* if not profile, if evidencetag take it, or use a daily profile */ - - debug("Configuring browser for profile %s (evidencetag %s)", profile, evidencetag); - const profinfo = await profileExecount(profile, evidencetag); - - /* pullDirectives SKIPPED! local generation, this is part of v0 */ - const directives = _.map(queries, function(q, counter) { - const u = "https://tiktok.com/search?q=" + q; - console.log(u); - return { - url: u, - loadFor: 5500, - name: `search-for-${q}-${counter}`, - query: q, - } - }); - - // debug("Fetching experiment directives (%s)", directiveurl); - // debug("Profile %s pulling directive %s", profile, directiveurl); - // const directives = await pullDirectives(directiveurl); - const directiveType = 'search'; - - // debug("Loaded %d directives, detected type [%s] from %s", - // directives.length, directiveType, directiveurl); - const experiment = "exp" + _.reduce(JSON.stringify(queries).split(''), function(memo, e) { return memo + e.charCodeAt(0) }, 0); - await writeExperimentInfo(experiment, profinfo, evidencetag, directiveType); - - const headless = (!!nconf.get('headless')); - const browser = await dispatchBrowser(headless, profinfo); - - if(browser.newProfile) - await allowResearcherSomeTimeToSetupTheBrowser(profinfo.profileName); - - const t = await guardoniExecution(experiment, directives, browser, profinfo); - console.log("— Guardoni execution completed in ", - moment.duration(t.end - t.start).humanize()); - - await concludeExperiment(experiment, profinfo); - process.exit(0); -} - -async function dispatchBrowser(headless, profinfo) { - - const cwd = process.cwd(); - const dist = path.resolve(path.join(cwd, 'extension')); - const newProfile = profinfo.newProfile; - const execount = profinfo.execount; - const chromePath = getChromePath(); - const proxy = nconf.get('proxy'); - - const commandLineArg = ["--no-sandbox", - "--disabled-setuid-sandbox", - "--load-extension=" + dist, - "--disable-extensions-except=" + dist, - ]; - - if(proxy) { - if(!_.startsWith(proxy, 'socks5://')) { - console.log("Error, --proxy must start with socks5://"); - process.exit(1); - } - commandLineArg.push("--proxy-server=" + proxy); - debug("Dispatching browser: profile usage count %d proxy %s", - execount, proxy); - } - else { - debug("Dispatching browser: profile usage count %d, with NO PROXY", - execount); - } - - try { - puppeteer.use(pluginStealth()); - const browser = await puppeteer.launch({ - headless, - userDataDir: profinfo.udd, - executablePath: chromePath, - args: commandLineArg, - }); - - // add this boolean to the return value as we need it in a case - browser.newProfile = newProfile; - return browser; - - } catch(error) { - console.log("Error in dispatchBrowser:", error.message); - await browser.close(); - process.exit(1); - } -} - -async function operateTab(page, directive) { - - try { - await domainSpecific.beforeLoad(page, directive); - } catch(error) { - debug("error in beforeLoad %s %s directive %o", - error.message, error.stack, directive); - } - - debug("— Loading %s (for %dms)", directive.urltag ? - directive.urltag : directive.name, directive.loadFor); - // Remind you can exclude directive with env/--exclude=urltag - - // TODO the 'timeout' would allow to repeat this operation with - // different parameters. https://stackoverflow.com/questions/60051954/puppeteer-timeouterror-navigation-timeout-of-30000-ms-exceeded - await page.goto(directive.url, { - waitUntil: "networkidle0", - }); - - try { - await domainSpecific.beforeWait(page, directive); - } catch(error) { - console.log("error in beforeWait", error.message, error.stack); - } - - const loadFor = _.parseInt(nconf.get('load')) || directive.loadFor; - debug("Directive to URL %s, Loading delay %d (--load optional)", directive.url, loadFor); - await page.waitForTimeout(loadFor); - - try { - await domainSpecific.afterWait(page, directive); - } catch(error) { - console.log("Error in afterWait", error.message, error.stack); - } - debug("— Completed %s", directive.urltag ? directive.urltag : directive.name); -} - - -async function operateBrowser(page, directives) { - // await page.setViewport({width: 1024, height: 768}); - for (const directive of directives) { - if(nconf.get('exclude') && directive.urltag == nconf.get('exclude')) { - debug("[!!!] excluded directive %s", directive.urltag); - } else { - try { - await operateTab(page, directive); - } catch(error) { - debug("operateTab in %s — error: %s", directive.urltag, error.message); - } - } - } - const loadFor = _.parseInt(nconf.get('load')) || directives[0].loadFor; - if(loadFor < 20000) { - await page.waitForTimeout(15000); - } -} - -async function guardoniExecution(experiment, directives, browser, profinfo) { - const retval = { start: null }; - retval.start = moment(); - const directiveType = _.first(directives).name ? "chiaroscuro" : "comparison"; - try { - const page = (await browser.pages())[0]; - _.tail(await browser.pages()).forEach(async function(opage) { - debug("Closing a tab that shouldn't be there!"); - await opage.close(); - }) - await domainSpecific.beforeDirectives(page, profinfo); - // the BS above should close existing open tabs except 1st - await operateBrowser(page, directives); - const publicKey = await domainSpecific.completed(); - console.log(`Operations completed: check results at ${server}/${directiveType === 'chiaroscuro' ? "shadowban" : "experiments"}/render/#${experiment}`); - console.log(`Personal log at ${server}/personal/#${publicKey}`); - await browser.close(); - } catch(error) { - console.log("Error in operateBrowser (collection fail):", error); - await browser.close(); - process.exit(1); - } - retval.end = moment(); - return retval; -} - -async function concludeExperiment(experiment, profinfo) { - // this conclude the API sent by extension remoteLookup, - // a connection to DELETE /api/v3/experiment/:publicKey - return; - - const url = buildAPIurl( - 'experiment', - moment(profinfo.expinfo.when).toISOString()); - const response = await fetch(url, { - method: 'DELETE' - }); - const body = await response.json(); - if(body.acknowledged !== true) - debug("Error in communication with the server o_O (%j)", body); - // debug("Experiment %s marked as completed on the server!", experiment); -} - -try { - - const cwd = process.cwd(); - const dist = path.resolve(path.join(cwd, 'extension')); - const manifest = path.resolve(path.join(cwd, 'extension', 'manifest.json')); - - if(!fs.existsSync(dist)) - fs.mkdirSync(dist); - - if(!fs.existsSync(manifest)) { - console.log('Manifest in ' + dist + ' not found: proceed with manual installation and remind opt-in'); - process.exit(1); - } - - main(); - -} catch(error) { - console.error(error); - console.error("⬆️ Unhandled error! =( ⬆️"); - process.exit(1); -} diff --git a/platforms/tktrex/methodology/bin/localext.sh b/platforms/tktrex/methodology/bin/localext.sh deleted file mode 100644 index 57f06829c..000000000 --- a/platforms/tktrex/methodology/bin/localext.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -x - -cd ../extension -npm run build -cd ../methodology -rm -rf extension -mkdir extension -cp -r ../extension/build/* ./extension - diff --git a/platforms/tktrex/methodology/bin/post-compile.sh b/platforms/tktrex/methodology/bin/post-compile.sh deleted file mode 100644 index 72fb7051f..000000000 --- a/platforms/tktrex/methodology/bin/post-compile.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/sh - -# this script is invoked by npm run pkt, and simply should rename the executabled with the proper version name. - -version=`grep version package.json | cut -b 15- | sed -es/\".*//` -echo $version - -cd dist -ls -l -mv guardoni0-base-win.exe guardoni0-$version.exe -mv guardoni0-base-macos guardoni0-$version-macos -mv guardoni0-base-linux guardoni0-$version-linux -ls -l -cd .. diff --git a/platforms/tktrex/methodology/bin/remotext.sh b/platforms/tktrex/methodology/bin/remotext.sh deleted file mode 100644 index 070f39885..000000000 --- a/platforms/tktrex/methodology/bin/remotext.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -x - -cd ../extension -npm run build:dist -cd ../methodology -rm -rf extension -mkdir extension -cp -r ../extension/build/* ./extension - diff --git a/platforms/tktrex/methodology/config/default.json b/platforms/tktrex/methodology/config/default.json deleted file mode 100644 index 5d080b62f..000000000 --- a/platforms/tktrex/methodology/config/default.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "backend":"", - "headless": false, - "proxy":"", - "fullpage": true -} diff --git a/platforms/tktrex/methodology/package.json b/platforms/tktrex/methodology/package.json deleted file mode 100644 index 8f152ed3e..000000000 --- a/platforms/tktrex/methodology/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "tktrex-guardoni", - "version": "2.6.0", - "packageManager": "yarn@3.1.1", - "description": "Guardoni is a tool to automate access and coordinate personalization algorithm analysis", - "scripts": { - "pkg": "pkg ./package.json && sh ./bin/post-compile.sh" - }, - "bin": "./bin/guardoni0-base.js", - "repository": { - "type": "git", - "url": "git+https://github.com/tracking-exposed/tktrex.git" - }, - "keywords": [ - "tiktok", - "algorithm", - "analysis" - ], - "author": "the Tracking Exposed team", - "license": "AGPL-3.0-or-later", - "homepage": "https://tiktok.tracking.exposed", - "dependencies": { - "csv-parse": "^4.16.3", - "debug": "^4.3.4", - "eslint": "^8.16.0", - "lodash": "^4.17.21", - "moment": "^2.29.2", - "nconf": "^0.11.3", - "node-fetch": "^2.6.7", - "puppeteer": "^13.7.0", - "puppeteer-extra": "^3.2.3", - "puppeteer-extra-plugin-stealth": "^2.9.0" - }, - "devDependencies": { - "pkg": "^5.7.0" - }, - "pkg": { - "scripts": [ - "./bin/guardoni0-base.js", - "./src/domainSpecific.js", - "./node_modules/**/*.js" - ], - "assets": [ - "extension/.keep", - "screenshots/.keep", - "experiments/.keep", - "config/default.json", - "profiles/.keep" - ], - "targets": [ - "node14-linux-x64", - "node14-win-x64", - "node14-macos-x64" - ], - "outputPath": "dist" - } -} diff --git a/platforms/tktrex/methodology/src/domainSpecific.js b/platforms/tktrex/methodology/src/domainSpecific.js deleted file mode 100644 index 19e8ff10c..000000000 --- a/platforms/tktrex/methodology/src/domainSpecific.js +++ /dev/null @@ -1,89 +0,0 @@ -const _ = require('lodash'); -const moment = require('moment'); -const debug = require('debug')('guardoni:tiktok'); -const logreqst = require('debug')('guardoni:requests'); -const bconsError = require('debug')('guardoni:error'); -const path = require('path'); -const url = require('url'); -const fs = require('fs'); -const nconf = require('nconf'); - -debug.enabled = logreqst.enabled = true; - -const SCREENSHOT_MARKER = "SCREENSHOTMARKER"; -const scrnshtrgxp = new RegExp(SCREENSHOT_MARKER); - -global.lastScreenTime = moment().subtract(4, 'seconds'); -global.currentURLlabel = null; -global.screenshotPrefix = null; -global.interval = null; -global.publicKeySpot = null; - -function getScreenshotFilename() { - /* this function return null if no screenshot has to be taken, - * and the criteria is to take max one screen every 5 seconds */ - const now = moment(); - if(moment.duration(now - global.lastScreenTime).asSeconds() < 5) - return null; - - global.lastScreenTime = now; - /* screenshotPrefix would exist as a directory */ - return path.join(global.screenshotPrefix, - `${global.currentURLlabel}-${global.lastScreenTime.toISOString()}.jpeg`); -} - -async function consoleLogParser(page, message) { - /* this function is primarly meant to collect the public key, - * but it is also an indirect, pseudo-efficent way to communicate - * between puppeteer evaluated selectors and action we had to do */ - const consoleline = message.text(); - if( global.publicKeySpot === null && consoleline.match(/publicKey/) ) { - const material = JSON.parse(consoleline); - global.publicKeySpot = material?.publicKey; - console.log(material); - } - if(consoleline.match(scrnshtrgxp)) { - const fdestname = getScreenshotFilename(); - // if the screenshot are less than 5 seconds close, the function - // above would return null, so we don't take it. - if(fdestname) { - screendebug("Taking screenshot in [%s]", fdestname) - await page.screenshot({ path: fdestname, - type: 'jpeg', - fullPage: nconf.get('fullpage') || false }); - } - } -}; - -async function beforeDirectives(page, profinfo) { - page.on('console', await _.partial(consoleLogParser, page)); - page.on('pageerror', message => bconsError('Error %s', message)); - page.on('requestfailed', request => bconsError(`Requestfail: ${request.failure().errorText} ${request.url()}`)); -} - - -async function beforeLoad(page, directive) { - global.currentURLlabel = directive.urltag; -} - -async function completed() { - return global.publicKeySpot; -} - -async function beforeWait(page, directive) { - // debug("Nothing in beforeWait but might be screencapture or ad checking"); -} - -async function afterWait(page, directive) { - // const innerWidth = await page.evaluate(_ => { return window.innerWidth }); - // const innerHeight = await page.evaluate(_ => { return window.innerHeight }); -} - -module.exports = { - beforeLoad, - beforeWait, - afterWait, - beforeDirectives, - completed, - DOMAIN_NAME: 'tiktok.com', -} diff --git a/platforms/tktrex/shared/.eslintignore b/platforms/tktrex/shared/.eslintignore new file mode 100644 index 000000000..ba077a403 --- /dev/null +++ b/platforms/tktrex/shared/.eslintignore @@ -0,0 +1 @@ +bin diff --git a/platforms/tktrex/shared/bin/open-doc-api.ts b/platforms/tktrex/shared/bin/open-doc-api.ts index 495e6bac3..c5ed87c9c 100644 --- a/platforms/tktrex/shared/bin/open-doc-api.ts +++ b/platforms/tktrex/shared/bin/open-doc-api.ts @@ -1,7 +1,7 @@ import * as endpoints from '../src/endpoints'; import * as apiModels from '../src/models'; -import * as sharedModels from '../../../../packages/shared/src/models'; -import * as swagger from '../../../../packages/shared/src/providers/swagger/swagger.provider.node'; +import * as sharedModels from '@shared/models'; +import * as swagger from '@shared/providers/swagger/swagger.provider.node'; import * as path from 'path'; import packageJson from '../package.json'; diff --git a/platforms/tktrex/shared/package.json b/platforms/tktrex/shared/package.json index cd7c05d84..494575165 100644 --- a/platforms/tktrex/shared/package.json +++ b/platforms/tktrex/shared/package.json @@ -3,6 +3,8 @@ "packageManager": "yarn@3.1.1", "scripts": { "clean": "rm -rf ./build", + "lint": "eslint ./src", + "build": "tsc -b", "test": "jest --maxWorkers=8", "tdd": "jest --watch --maxWorkers=8", "dump-parsed-data": "ts-node bin/dump-parsed-data.ts", @@ -31,7 +33,8 @@ "fp-ts": "^2.11.9", "io-ts": "^2.2.16", "linkedom": "^0.14.4", - "mongodb": "^4.3.1" + "mongodb": "^4.3.1", + "ts-endpoint": "^2.0.0" }, "version": "2.6.0" } diff --git a/platforms/tktrex/shared/src/arbitraries/SearchDirective.arb.ts b/platforms/tktrex/shared/src/arbitraries/SearchDirective.arb.ts deleted file mode 100644 index 477cde16f..000000000 --- a/platforms/tktrex/shared/src/arbitraries/SearchDirective.arb.ts +++ /dev/null @@ -1,12 +0,0 @@ -import fc from 'fast-check'; -import { getArbitrary } from 'fast-check-io-ts'; -import { HumanReadableStringArb } from '@shared/arbitraries/HumanReadableString.arb'; -import { URLArb } from '@shared/arbitraries/URL.arb'; -import { SearchDirective } from '../models/directive/SearchDirective'; - -export const SearchDirectiveArb = getArbitrary(SearchDirective).map((r) => ({ - ...r, - title: fc.sample(HumanReadableStringArb())[0], - url: fc.sample(URLArb, 1)[0], - videoURL: fc.sample(URLArb, 1)[0], -})); diff --git a/platforms/tktrex/shared/src/endpoints/v2/index.ts b/platforms/tktrex/shared/src/endpoints/v2/index.ts index 9cd33494d..68648ffcd 100644 --- a/platforms/tktrex/shared/src/endpoints/v2/index.ts +++ b/platforms/tktrex/shared/src/endpoints/v2/index.ts @@ -1,7 +1,7 @@ import Public from './public.endpoints'; -import personal from './personal.endpoints'; +import Personal from './personal.endpoints'; export default { Public, - personal, + Personal, }; diff --git a/platforms/tktrex/shared/src/endpoints/v2/personal.endpoints.ts b/platforms/tktrex/shared/src/endpoints/v2/personal.endpoints.ts index 7adf0a748..e3290e81a 100644 --- a/platforms/tktrex/shared/src/endpoints/v2/personal.endpoints.ts +++ b/platforms/tktrex/shared/src/endpoints/v2/personal.endpoints.ts @@ -1,6 +1,6 @@ import * as t from 'io-ts'; import * as apiModel from '../../models'; -import { DocumentedEndpoint } from '@shared/endpoints/utils'; +import { DocumentedEndpoint } from '@shared/endpoints'; const GetPersonalJSON = DocumentedEndpoint({ Method: 'GET', diff --git a/platforms/tktrex/shared/src/endpoints/v2/public.endpoints.ts b/platforms/tktrex/shared/src/endpoints/v2/public.endpoints.ts index 494d8a036..f3f520f68 100644 --- a/platforms/tktrex/shared/src/endpoints/v2/public.endpoints.ts +++ b/platforms/tktrex/shared/src/endpoints/v2/public.endpoints.ts @@ -1,4 +1,5 @@ -import { DocumentedEndpoint } from '@shared/endpoints/utils'; +import { DocumentedEndpoint } from '@shared/endpoints'; +import { SearchQuery } from '@shared/models/http/SearchQuery'; import * as t from 'io-ts'; import * as apiModel from '../../models'; @@ -24,7 +25,7 @@ const AddEvents = DocumentedEndpoint({ 'X-Tktrex-PublicKey': t.string, 'X-Tktrex-Signature': t.string, }), - Body: t.array(t.union([apiModel.Events.ContributionEvent, t.any])), + Body: t.array(apiModel.Events.ContributionEvent), }, Output: t.any, title: 'Add contribution events', @@ -49,6 +50,7 @@ const GetSearchByQuery = DocumentedEndpoint({ query: apiModel.Common.What, format: apiModel.Common.Format, }), + Query: SearchQuery, }, Output: apiModel.Public.GetSearchByQueryOutput, title: 'Search by query', diff --git a/platforms/tktrex/shared/src/tik-tok-searches.md b/platforms/tktrex/shared/src/endpoints/v2/tik-tok-searches.md similarity index 100% rename from platforms/tktrex/shared/src/tik-tok-searches.md rename to platforms/tktrex/shared/src/endpoints/v2/tik-tok-searches.md diff --git a/platforms/tktrex/shared/src/methodology/directives/tiktokLogin.directive.ts b/platforms/tktrex/shared/src/methodology/directives/tiktokLogin.directive.ts new file mode 100644 index 000000000..f418f25fb --- /dev/null +++ b/platforms/tktrex/shared/src/methodology/directives/tiktokLogin.directive.ts @@ -0,0 +1,51 @@ +import { HookHandler } from '@shared/providers/puppeteer/DirectiveHook'; +import { sleep } from '@shared/utils/promise.utils'; +import * as qs from 'qs'; +import { URL } from 'url'; + +interface TKLoginContext { + getUsername: () => Promise; + getPassword: () => Promise; +} + +export const tkLogin = + (ctx: TKLoginContext): HookHandler => + async (page, directive, opts) => { + const url = page.url(); + const search = qs.parse(new URL(url).search); + const redirectUrl = search.redirect_url as string; + await page.goto('https://www.tiktok.com/login'); + + const loginButton = await page.waitForSelector( + '[class*="login-container"] > [class*="social-container"] > [class*="channel-item-wrapper"]:nth-of-type(2)' + ); + + await loginButton?.click(); + + const loginWithEmailButton = await page.waitForSelector( + 'a[href="/login/phone-or-email/email"]' + ); + + await loginWithEmailButton?.click(); + + const username = await ctx.getUsername(); + await page.type('input[name="email"]', username); + + const password = await ctx.getPassword(); + await page.type('input[name="password"]', password); + + await sleep(10000); + + const submitButton = await page.waitForSelector( + 'button[class*="login-button"]:not(disabled)', + { + timeout: 10000, + } + ); + + await submitButton?.click(); + + await page.goto(redirectUrl); + + return Promise.resolve(undefined); + }; diff --git a/platforms/tktrex/shared/src/models/MetaData.ts b/platforms/tktrex/shared/src/models/MetaData.ts index e16cad4f7..484259681 100644 --- a/platforms/tktrex/shared/src/models/MetaData.ts +++ b/platforms/tktrex/shared/src/models/MetaData.ts @@ -1,103 +1,138 @@ import * as t from 'io-ts'; -const Music = t.type({ - url: t.string, - name: t.string, -}, 'Music'); +const Music = t.type( + { + url: t.string, + name: t.string, + }, + 'Music', +); type Music = t.TypeOf; -const Author = t.type({ - link: t.string, - username: t.string, -}, 'Author'); +const Author = t.type( + { + link: t.string, + username: t.string, + }, + 'Author', +); type Author = t.TypeOf; -const AuthorWithName = t.intersection([ - Author, - t.type({ - name: t.string, - }, 'name'), -], 'AuthorWithName'); +const AuthorWithName = t.intersection( + [ + Author, + t.type( + { + name: t.string, + }, + 'name', + ), + ], + 'AuthorWithName', +); type AuthorWithName = t.TypeOf; -const Metrics = t.type({ - liken: t.string, - commentn: t.string, - sharen: t.string, -}, 'Metrics'); +const Metrics = t.type( + { + liken: t.string, + commentn: t.string, + sharen: t.string, + }, + 'Metrics', +); type Metrics = t.TypeOf; -export const VideoMetaDataBase = t.type({ - type: t.union([ - t.literal('foryou'), - t.literal('search'), - t.literal('following'), - ]), - - // baretext is the smallest part of the description, - // not including the tags - baretext: t.string, - - // description is the whole text written below the video, - // including the tags - description: t.string, - - // the hashtags, with their leading # - // note: they do not seem to be cleaned at the moment, - // some have trailing whitespace - hashtags: t.array(t.string), - - metrics: Metrics, -}, 'VideoMetaDataBase'); - -export type VideoMetaDataBase = t.TypeOf; - -export const ForYouVideoMetaData = t.intersection([ - VideoMetaDataBase, - t.type({ - type: t.literal('foryou'), - author: AuthorWithName, - music: Music, - }, 'foryou'), -], 'ForYouVideoMetaData'); +export const MetaDataBase = t.type( + { + id: t.string, + savingTime: t.string, + publicKey: t.string, + }, + 'VideoMetaDataBase', +); + +export type MetaDataBase = t.TypeOf; + +export const ForYouVideoMetaData = t.intersection( + [ + MetaDataBase, + t.type( + { + type: t.literal('foryou'), + + // baretext is the smallest part of the description, + // not including the tags + baretext: t.string, + + // description is the whole text written below the video, + // including the tags + description: t.string, + + author: AuthorWithName, + music: Music, + // the hashtags, with their leading # + // note: they do not seem to be cleaned at the moment, + // some have trailing whitespace + hashtags: t.array(t.string), + metrics: Metrics, + }, + 'foryou', + ), + ], + 'ForYouVideoMetaData', +); export type ForYouVideoMetaData = t.TypeOf; -export const FollowingVideoMetaData = t.intersection([ - VideoMetaDataBase, - t.type({ - type: t.literal('following'), - author: AuthorWithName, - music: Music, - }, 'following'), -], 'FollowingVideoMetaData'); +export const FollowingVideoMetaData = t.intersection( + [ + MetaDataBase, + t.type( + { + type: t.literal('following'), + author: AuthorWithName, + music: Music, + }, + 'following', + ), + ], + 'FollowingVideoMetaData', +); export type FollowingVideoMetaData = t.TypeOf; -export const SearchVideoMetaData = t.intersection([ - VideoMetaDataBase, - t.type({ - type: t.literal('search'), - author: Author, - music: Music, - }, 'search'), -], 'SearchVideoMetaData'); - -export type SearchVideoMetaData = t.TypeOf; - -export const VideoMetaData = t.union([ - ForYouVideoMetaData, - FollowingVideoMetaData, - SearchVideoMetaData, -], 'VideoMetaData'); - -export type VideoMetaData = t.TypeOf; - -export const MetaData = VideoMetaData; +export const SearchMetaData = t.intersection( + [ + MetaDataBase, + t.type( + { + type: t.literal('search'), + results: t.array(t.any), + query: t.string, + thumbnails: t.array( + t.type({ + downloaded: t.boolean, + filename: t.string, + reason: t.number, + }), + ), + }, + 'search', + ), + ], + 'SearchVideoMetaData', +); + +export type SearchMetaData = t.TypeOf; + +export const MetaData = t.union( + [ForYouVideoMetaData, FollowingVideoMetaData, SearchMetaData], + 'VideoMetaData', +); export type MetaData = t.TypeOf; diff --git a/platforms/tktrex/shared/src/models/directive/SearchDirective.ts b/platforms/tktrex/shared/src/models/directive/SearchDirective.ts deleted file mode 100644 index 6a170d968..000000000 --- a/platforms/tktrex/shared/src/models/directive/SearchDirective.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as t from 'io-ts'; - -/** - * TikTok search directive - */ - -export const SearchDirectiveType = t.literal('search'); - -export const SearchDirective = t.strict( - { - title: t.string, - videoURL: t.string, - url: t.string - }, - 'SearchDirective', -); -export type SearchDirective = t.TypeOf; diff --git a/platforms/tktrex/shared/src/models/events/ContributionEvent.ts b/platforms/tktrex/shared/src/models/events/ContributionEvent.ts index 5983f79cc..2c2cc7dc8 100644 --- a/platforms/tktrex/shared/src/models/events/ContributionEvent.ts +++ b/platforms/tktrex/shared/src/models/events/ContributionEvent.ts @@ -4,12 +4,16 @@ export const ContributionEvent = t.strict( { html: t.string, href: t.string, - feedId: t.string, - feedCounter: t.number, - videoCounter: t.number, + feedId: t.union([t.string, t.undefined]), + feedCounter: t.union([t.number, t.undefined]), + videoCounter: t.union([t.number, t.undefined]), rect: t.any, clientTime: t.string, - type: t.literal('video'), + type: t.union([ + t.literal('search'), + t.literal('video'), + t.literal('profile'), + ]), incremental: t.number, }, 'ContributionEvent', diff --git a/platforms/tktrex/shared/src/models/http/Search.ts b/platforms/tktrex/shared/src/models/http/Search.ts new file mode 100644 index 000000000..3eff3c275 --- /dev/null +++ b/platforms/tktrex/shared/src/models/http/Search.ts @@ -0,0 +1,13 @@ +import * as t from 'io-ts'; + +export const GetSearchByQueryOutput = t.type( + { + total: t.number, + content: t.array(t.any), + }, + 'GetSearchByQueryOutput', +); +export type GetSearchByQueryOutput = t.TypeOf; + +export const GetQueryListOutput = t.type({}, 'GetQueryListOutput'); +export type GetQueryListOutput = t.TypeOf; diff --git a/platforms/tktrex/shared/src/models/public/index.ts b/platforms/tktrex/shared/src/models/public/index.ts index 167da8e91..3f3954332 100644 --- a/platforms/tktrex/shared/src/models/public/index.ts +++ b/platforms/tktrex/shared/src/models/public/index.ts @@ -52,8 +52,14 @@ export const PublicSearchList = t.strict( export type PublicSearchList = t.TypeOf; -export const GetSearchByQueryOutput = t.type({}, 'GetSearchByQueryOutput'); +export const GetSearchByQueryOutput = t.array(t.any, 'GetSearchByQueryOutput'); export type GetSearchByQueryOutput = t.TypeOf; -export const GetQueryListOutput = t.type({}, 'GetQueryListOutput'); +export const GetQueryListOutput = t.type( + { + total: t.number, + content: t.array(t.any), + }, + 'GetQueryListOutput', +); export type GetQueryListOutput = t.TypeOf; diff --git a/platforms/ycai/studio/bin/open-doc-api.ts b/platforms/ycai/studio/bin/open-doc-api.ts index ca555e884..f9a91caae 100644 --- a/platforms/ycai/studio/bin/open-doc-api.ts +++ b/platforms/ycai/studio/bin/open-doc-api.ts @@ -4,59 +4,41 @@ * imply the same keyname has the same description */ -import endpoints from '../../packages/shared/src/endpoints/v3'; -import models from '../../packages/shared/src/models'; -import * as swagger from '../../packages/shared/src/providers/swagger/swagger.provider'; -import * as fs from 'fs'; +import models from '@shared/models'; +import * as swagger from '@shared/providers/swagger/swagger.provider.node'; +import endpoints from '@yttrex/shared/endpoints/v3'; import * as path from 'path'; import packageJson from '../package.json'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { validate } = require('@apidevtools/swagger-cli'); -const openDocAPI = swagger.generateDoc({ - title: 'youchoose ai', - description: 'youchoose api description', - version: packageJson.version, - server: { - protocol: 'https', - host: 'api.youchoose.ai', - port: '443' as any, - basePath: '', - }, - components: { - security: { - ACTToken: { - type: 'apiKey', - in: 'header', - name: 'X-Authorization', +swagger.writeOpenDocTo( + { + title: 'youchoose ai', + description: 'youchoose api description', + version: packageJson.version, + server: { + protocol: 'https', + host: 'api.youchoose.ai', + port: '443' as any, + basePath: '', + }, + components: { + security: { + ACTToken: { + type: 'apiKey', + in: 'header', + name: 'X-Authorization', + }, }, }, - }, - security: [ - { - ACTToken: [], + security: [ + { + ACTToken: [], + }, + ], + endpoints: { + v3: endpoints, }, - ], - endpoints: { - v3: endpoints, + models: models as any, }, - models: models as any, -}); - -// print unvalidated open doc api -fs.writeFileSync( - path.resolve(process.cwd(), 'docs/openapi.json'), - JSON.stringify(openDocAPI, null, 2) + path.resolve(__dirname, '../build') ); - -validate(openDocAPI, { schema: false, spec: true }, (err: any, api: any) => { - if (err) { - // eslint-disable-next-line - console.log(err.toJSON()); - throw err; - } - fs.writeFileSync( - path.resolve(process.cwd(), 'docs/openapi-validated.json'), - JSON.stringify(api, null, 2) - ); -}); diff --git a/platforms/ycai/studio/package.json b/platforms/ycai/studio/package.json index 70d7d66b6..cbef588c3 100644 --- a/platforms/ycai/studio/package.json +++ b/platforms/ycai/studio/package.json @@ -8,7 +8,7 @@ "author": "Read the CREDITS file in the repository linked in https://youchoose.ai", "repository": { "type": "git", - "url": "git+https://github.com/tracking-exposed/yttrex.git" + "url": "git+https://github.com/tracking-exposed/trex.git" }, "scripts": { "clean": "rm -rf ./build", @@ -55,17 +55,16 @@ "jest-chrome": "^0.7.2", "prettier": "^2.6.2", "react-test-renderer": "^17.0.2", - "semantic-release": "^19.0.2", "style-loader": "^3.3.1", "svgdom": "^0.1.10", "ts-jest": "^27.1.5", "ts-loader": "^9.3.0", "ts-node": "^10.8.0", "typescript": "^4.7.2", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.9.0", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.9.2", "zenroom": "^2.2.3" }, "dependencies": { diff --git a/platforms/ycai/studio/src/background/index.ts b/platforms/ycai/studio/src/background/index.ts index 4622c289b..5b7098694 100644 --- a/platforms/ycai/studio/src/background/index.ts +++ b/platforms/ycai/studio/src/background/index.ts @@ -2,6 +2,7 @@ import * as sharedConst from '@shared/constants'; import { APIError } from '@shared/errors/APIError'; import { ContentCreator } from '@shared/models/ContentCreator'; import { Keypair } from '@shared/models/extension/Keypair'; +import * as Endpoints from '@yttrex/shared/endpoints'; import { catchRuntimeLastError, MessageType, @@ -171,7 +172,12 @@ const getMessageHandler = < ); case Messages.APIRequest.value: return pipe( - fromStaticPath(r.payload?.staticPath, r.payload?.Input), + fromStaticPath([ + Endpoints.v1.Public, + Endpoints.v2.Public, + Endpoints.v3.Public, + Endpoints.v3.Creator, + ])(r.payload?.staticPath, r.payload?.Input), O.fromNullable, TE.fromOption(() => toMessageHandlerError( diff --git a/platforms/ycai/studio/src/components/dashboard/settings/Swagger.tsx b/platforms/ycai/studio/src/components/dashboard/settings/Swagger.tsx index a11a7072e..e89a9d97d 100644 --- a/platforms/ycai/studio/src/components/dashboard/settings/Swagger.tsx +++ b/platforms/ycai/studio/src/components/dashboard/settings/Swagger.tsx @@ -1,4 +1,4 @@ -import * as endpoints from '@shared/endpoints'; +import * as endpoints from '@yttrex/shared/endpoints'; import models from '@shared/models'; import * as swagger from '@shared/providers/swagger/swagger.provider'; import * as React from 'react'; diff --git a/platforms/ycai/studio/src/providers/dataDonation.provider.ts b/platforms/ycai/studio/src/providers/dataDonation.provider.ts index 770521bc1..745d1c9fa 100644 --- a/platforms/ycai/studio/src/providers/dataDonation.provider.ts +++ b/platforms/ycai/studio/src/providers/dataDonation.provider.ts @@ -1,4 +1,5 @@ import { GetDataDonationProvider } from '@shared/providers/dataDonation.provider'; +import * as Endpoints from '@yttrex/shared/endpoints'; import { config } from '../config'; import { browser } from './browser.provider'; @@ -73,6 +74,7 @@ export const dataDonation = GetDataDonationProvider({ debug: config.NODE_ENV === 'development', version: config.VERSION, watchedPaths, + addEvent: Endpoints.v2.Public.AddEvents as any, }); export { GetDataDonationProvider }; diff --git a/platforms/ycai/studio/src/state/dashboard/creator.queries.ts b/platforms/ycai/studio/src/state/dashboard/creator.queries.ts index d993aa60e..351da23f5 100644 --- a/platforms/ycai/studio/src/state/dashboard/creator.queries.ts +++ b/platforms/ycai/studio/src/state/dashboard/creator.queries.ts @@ -17,7 +17,7 @@ import { APIError } from '@shared/errors/APIError'; import { GetRelatedChannelsOutput } from '@shared/models/ChannelRelated'; import * as sharedConst from '@shared/constants'; import { MakeAPIClient } from '@shared/providers/api.provider'; -import * as endpoints from '@shared/endpoints'; +import * as endpoints from '@yttrex/shared/endpoints'; import { config } from '../../config'; import { AuthResponse } from '@shared/models/Auth'; @@ -32,34 +32,37 @@ const logout = async (): Promise => { await localProfile.invalidate()(); }; -export const { API, HTTPClient } = MakeAPIClient({ - baseURL: config.API_URL, - getAuth: (req) => { - return pipe( - localProfile.run(), - TE.filterOrElse( - (s): s is AuthorizedContentCreator => s !== null, - () => new Error('Auth is null') - ), - TE.fold( - (e) => async () => { - return Promise.reject(e); - }, - (a) => async () => { - req.headers = { - ...req.headers, - 'x-authorization': a.accessToken, - }; - return req; - } - ) - )(); - }, - onUnauthorized: async (res) => { - await logout(); - return res; +export const { API, HTTPClient } = MakeAPIClient( + { + baseURL: config.API_URL, + getAuth: (req) => { + return pipe( + localProfile.run(), + TE.filterOrElse( + (s): s is AuthorizedContentCreator => s !== null, + () => new Error('Auth is null') + ), + TE.fold( + (e) => async () => { + return Promise.reject(e); + }, + (a) => async () => { + req.headers = { + ...req.headers, + 'x-authorization': a.accessToken, + }; + return req; + } + ) + )(); + }, + onUnauthorized: async (res) => { + await logout(); + return res; + }, }, -}, endpoints); + endpoints +); type AuthorizedContentCreator = Omit & { accessToken: string; @@ -90,7 +93,10 @@ export const accountLinkCompleted = queryStrict( // content creator export const localProfile = queryStrict( - () => TE.fromIO(getItem(sharedConst.CONTENT_CREATOR)), + () => + TE.fromIO( + getItem(sharedConst.CONTENT_CREATOR) + ), available ); diff --git a/platforms/ycai/studio/src/state/dashboard/public.queries.ts b/platforms/ycai/studio/src/state/dashboard/public.queries.ts index 878b3940f..918578f8d 100644 --- a/platforms/ycai/studio/src/state/dashboard/public.queries.ts +++ b/platforms/ycai/studio/src/state/dashboard/public.queries.ts @@ -8,14 +8,16 @@ import * as sharedConstants from '@shared/constants'; import { Keypair } from '@shared/models/extension/Keypair'; import { MakeAPIClient } from '@shared/providers/api.provider'; import { config } from '../../config'; -import * as endpoints from '@shared/endpoints'; - -export const { API, HTTPClient } = MakeAPIClient({ - baseURL: config.API_URL, - getAuth: async (req) => req, - onUnauthorized: async (res) => res, -}, endpoints); +import * as endpoints from '@yttrex/shared/endpoints'; +export const { API, HTTPClient } = MakeAPIClient( + { + baseURL: config.API_URL, + getAuth: async (req) => req, + onUnauthorized: async (res) => res, + }, + endpoints +); export const settingsRefetch = queryShallow(() => { return pipe( diff --git a/platforms/ycai/studio/src/state/popup/popup.queries.ts b/platforms/ycai/studio/src/state/popup/popup.queries.ts index 31336dd55..e4c3fabbc 100644 --- a/platforms/ycai/studio/src/state/popup/popup.queries.ts +++ b/platforms/ycai/studio/src/state/popup/popup.queries.ts @@ -1,4 +1,4 @@ -import * as Endpoints from '@shared/endpoints'; +import * as Endpoints from '@yttrex/shared/endpoints'; import { MakeAPIClient } from '@shared/providers/api.provider'; import { available, queryShallow, queryStrict, refetch } from 'avenger'; import { pipe } from 'fp-ts/lib/function'; @@ -10,33 +10,36 @@ import { browser, Messages } from '../../providers/browser.provider'; /** * The popup api client doesn't need any specific authorization */ -export const { API } = MakeAPIClient({ - baseURL: config.API_URL, - getAuth: (req) => - pipe( - browser.sendMessage(Messages.GetKeypair)(), - TE.fold( - (e) => () => Promise.resolve(req), - (k) => async () => { - // req.headers('X-YTtrex-Version', config.VERSION); - // req.headers('X-YTtrex-Build', config.BUILD); - // const signature = nacl.sign.detached( - // decodeString(payload), - // decodeKey(keypair.secretKey) - // ); - // xhr.setRequestHeader('X-YTtrex-NonAuthCookieId', cookieId); - // xhr.setRequestHeader('X-YTtrex-PublicKey', keypair.publicKey); - // xhr.setRequestHeader('X-YTtrex-Signature', bs58.encode(signature)); - // req.headers = { - // ...req.headers, - // Authorization: `Bearer ${k.publicKey}`, - // }; - return Promise.resolve(req); - } - ) - )(), - onUnauthorized: async (res) => res, -}, Endpoints); +export const { API } = MakeAPIClient( + { + baseURL: config.API_URL, + getAuth: (req) => + pipe( + browser.sendMessage(Messages.GetKeypair)(), + TE.fold( + (e) => () => Promise.resolve(req), + (k) => async () => { + // req.headers('X-YTtrex-Version', config.VERSION); + // req.headers('X-YTtrex-Build', config.BUILD); + // const signature = nacl.sign.detached( + // decodeString(payload), + // decodeKey(keypair.secretKey) + // ); + // xhr.setRequestHeader('X-YTtrex-NonAuthCookieId', cookieId); + // xhr.setRequestHeader('X-YTtrex-PublicKey', keypair.publicKey); + // xhr.setRequestHeader('X-YTtrex-Signature', bs58.encode(signature)); + // req.headers = { + // ...req.headers, + // Authorization: `Bearer ${k.publicKey}`, + // }; + return Promise.resolve(req); + } + ) + )(), + onUnauthorized: async (res) => res, + }, + Endpoints +); export const settingsRefetch = queryShallow(() => { return pipe( diff --git a/platforms/ycai/studio/tsconfig.json b/platforms/ycai/studio/tsconfig.json index 97afaf457..e551277cc 100644 --- a/platforms/ycai/studio/tsconfig.json +++ b/platforms/ycai/studio/tsconfig.json @@ -28,7 +28,9 @@ "isolatedModules": true, "paths": { "@shared/*": ["../../../../packages/shared/src/*"], - "@taboule/*": ["../../../../packages/taboule/src/*"] + "@taboule/*": ["../../../../packages/taboule/src/*"], + "@yttrex/shared/*": ["../../../yttrex/shared/src/*"], + "@tktrex/shared/*": ["../../../tktrex/shared/src/*"] } }, "references": [ @@ -37,15 +39,20 @@ }, { "path": "../../../packages/taboule" + }, + { + "path": "../../yttrex/shared" } ], "include": [ + "./bin", "./src", "./typings", "./webpack.config.ts", "./webpack.extension.config.ts" ], "ts-node": { + "require": ["tsconfig-paths/register"], "compilerOptions": { "module": "CommonJS" } diff --git a/platforms/yttrex/backend/lib/automo.js b/platforms/yttrex/backend/lib/automo.js index ab147f6a9..5c711e9b1 100644 --- a/platforms/yttrex/backend/lib/automo.js +++ b/platforms/yttrex/backend/lib/automo.js @@ -815,12 +815,12 @@ async function pullExperimentInfo(publicKey) { return null; } -async function registerDirective(links, directiveType) { +async function registerDirective(directives, directiveType) { /* this API is called by guardoni when --csv is used, the API is POST localhost:9000/api/v3/directives/comparison */ const experimentId = utils.hash({ type: directiveType, - links, + directives, }); const mongoc = await mongo3.clientConnect({ concurrency: 1 }); const exist = await mongo3.readOne(mongoc, nconf.get('schema').directives, { @@ -841,7 +841,7 @@ async function registerDirective(links, directiveType) { await mongo3.writeOne(mongoc, nconf.get('schema').directives, { when: new Date(), directiveType, - links, + directives, experimentId, }); await mongoc.close(); diff --git a/platforms/yttrex/backend/lib/endpoint.ts b/platforms/yttrex/backend/lib/endpoint.ts index e687b129a..d0d13cfc0 100644 --- a/platforms/yttrex/backend/lib/endpoint.ts +++ b/platforms/yttrex/backend/lib/endpoint.ts @@ -1,18 +1,21 @@ -import { sequenceS } from "fp-ts/lib/Apply"; -import * as E from "fp-ts/lib/Either"; -import { pipe } from "fp-ts/lib/function"; -import * as t from "io-ts"; -import { PathReporter } from "io-ts/lib/PathReporter"; -import { InferEndpointInstanceParams, MinimalEndpointInstance } from "ts-endpoint"; -import { serializedType } from "ts-io-error/lib/Codec"; +import { sequenceS } from 'fp-ts/lib/Apply'; +import * as E from 'fp-ts/lib/Either'; +import { pipe } from 'fp-ts/lib/function'; +import * as t from 'io-ts'; +import { PathReporter } from 'io-ts/lib/PathReporter'; +import { + InferEndpointInstanceParams, + MinimalEndpointInstance, +} from '@shared/endpoints'; +import { serializedType } from 'ts-io-error/lib/Codec'; type DecodeRequestResult = | { - type: "error"; + type: 'error'; result: string[]; } | { - type: "success"; + type: 'success'; result: { params: InferEndpointInstanceParams['params']; query: InferEndpointInstanceParams['query']; @@ -34,22 +37,22 @@ const decodeRequest = ( }), E.fold( (e): DecodeRequestResult => ({ - type: "error", + type: 'error', result: PathReporter.report(E.left(e)), }), - (result): DecodeRequestResult => ({ type: "success", result }) + (result): DecodeRequestResult => ({ type: 'success', result }) ) ); }; type DecodeResponseResult = | { - type: "error"; + type: 'error'; result: string[]; } | { - type: "success"; - result: serializedType; + type: 'success'; + result: serializedType; }; const decodeResponse = ( @@ -60,10 +63,10 @@ const decodeResponse = ( e.Output.decode(result), E.fold( (e): DecodeResponseResult => ({ - type: "error", + type: 'error', result: PathReporter.report(E.left(e)), }), - (result): DecodeResponseResult => ({ type: "success", result }) + (result): DecodeResponseResult => ({ type: 'success', result }) ) ); }; diff --git a/platforms/yttrex/backend/models/index.ts b/platforms/yttrex/backend/models/index.ts new file mode 100644 index 000000000..b9dc3e63a --- /dev/null +++ b/platforms/yttrex/backend/models/index.ts @@ -0,0 +1 @@ +export * from './Ad'; diff --git a/platforms/yttrex/backend/package.json b/platforms/yttrex/backend/package.json index a07aeea30..5dc028500 100644 --- a/platforms/yttrex/backend/package.json +++ b/platforms/yttrex/backend/package.json @@ -4,6 +4,7 @@ "description": "youtube.tracking.exposed - backend data collector", "private": true, "scripts": { + "clean": "rm -rf ./build", "build": "tsc -b", "watch": "key=fuffa DEBUG=\"*,-express:*,-body-parser:*,-follow-redirects\" ts-node-dev -r tsconfig-paths/register --respawn --transpile-only bin/server", "old_start_old": "log=$(bash -c 'git log -30 --stat --oneline --decorate --graph') DEBUG=\"*,-body-parser:*,-express:*,-lib:*,-follow-redirects\" ts-node -r tsconfig-paths/register bin/server", @@ -15,10 +16,15 @@ "test": "jest", "campaigns": "node bin/campaignUpdater.js --dest https://youtube.tracking.exposed", "type-check": "tsc", - "lint": "eslint ./bin ./lib ./models ./parsers ./routes" + "lint": "eslint ./bin ./lib ./models ./parsers ./routes", + "open-doc-api": "ts-node bin/open-doc-api.ts" }, "author": "Claudio Agosti and https://github.com/tracking-exposed/yttrex/graphs/contributors", "license": "AGPL-3.0", + "repository": { + "type": "git", + "url": "git+https://github.com/tracking-exposed/trex.git" + }, "dependencies": { "abort-controller": "^3.0.0", "body-parser": "^1.19.1", diff --git a/platforms/yttrex/backend/routes/directives.js b/platforms/yttrex/backend/routes/directives.js index e82faaca2..e8e2fa63d 100644 --- a/platforms/yttrex/backend/routes/directives.js +++ b/platforms/yttrex/backend/routes/directives.js @@ -112,7 +112,6 @@ function acquireComparison(parsedCSV) { } async function post(req) { - /* const directiveTypes = ['chiaroscuro', 'comparison']; if (directiveTypes.indexOf(directiveType) === -1) { debug( @@ -124,17 +123,25 @@ async function post(req) { } */ const directiveType = 'comparison'; - const parsedCSV = _.get(req.body, 'parsedCSV', []); + const parsedCSV = req.body ?? []; /* if (directiveType === "chiaroscuro") links = acquireChiaroscuro(parsedCSV); */ - let links = []; - links = acquireComparison(parsedCSV); + let directives = []; + directives = acquireComparison(parsedCSV); - debug('Registering directive %s (%d urls)', directiveType, _.size(links)); + debug( + 'Registering directive %s (%d urls)', + directiveType, + _.size(directives) + ); - const feedback = await automo.registerDirective(links, directiveType); + if (_.size(directives) === 0) { + throw new Error("Can't register csv without 'directives'"); + } + + const feedback = await automo.registerDirective(directives, directiveType); // this feedback is printed at terminal when --csv is used return { json: feedback }; } @@ -156,10 +163,9 @@ async function get(req) { } */ // expinfo.directiveType === 'comparison' - const directives = _.map(expinfo.links, comparison); + const directives = _.map(expinfo?.directives ?? [], comparison); debug('Comparison %s produced %d', experimentId, directives.length); return { json: directives }; - } async function getPublic(req) { diff --git a/packages/shared/src/backend/routes/health/health.v0.route.ts b/platforms/yttrex/backend/routes/health/health.v0.route.ts similarity index 61% rename from packages/shared/src/backend/routes/health/health.v0.route.ts rename to platforms/yttrex/backend/routes/health/health.v0.route.ts index 9c569e509..68542fe80 100644 --- a/packages/shared/src/backend/routes/health/health.v0.route.ts +++ b/platforms/yttrex/backend/routes/health/health.v0.route.ts @@ -1,9 +1,9 @@ -import { pipe } from 'fp-ts/lib/pipeable'; +import { toBackendError } from '@shared/backend/errors/BackendError'; +import { Route } from '@shared/backend/types'; +import { AddEndpoint } from '@shared/backend/utils/endpoint'; +import * as Endpoints from '@yttrex/shared/endpoints'; +import { pipe } from 'fp-ts/lib/function'; import * as TE from 'fp-ts/lib/TaskEither'; -import { toBackendError } from '../../errors/BackendError'; -import * as Endpoints from '../../../endpoints'; -import { Route } from '../../types'; -import { AddEndpoint } from '../../utils/endpoint'; export const MakeHealthRoute: Route = (r, { db, logger }) => { AddEndpoint(r)(Endpoints.v0.Public.GetHealth, () => { @@ -13,7 +13,9 @@ export const MakeHealthRoute: Route = (r, { db, logger }) => { // connect to db TE.tryCatch(() => db.clientConnect({ concurrency: 1 }), toBackendError), // count docs in a collection - TE.chain((c) => TE.tryCatch(() => db.count(c, 'ytvids', {}), toBackendError)), + TE.chain((c) => + TE.tryCatch(() => db.count(c, 'ytvids', {}), toBackendError) + ), // comment this out to see this fails // TE.chain((c) => // TE.tryCatch( @@ -23,8 +25,8 @@ export const MakeHealthRoute: Route = (r, { db, logger }) => { // ), TE.map((result) => ({ body: { - data: 'OK', - result + data: 'OK' as const, + result, }, statusCode: 201, })) diff --git a/platforms/yttrex/backend/routes/youchoose.js b/platforms/yttrex/backend/routes/youchoose.js index e3cb2b17e..9461265d9 100644 --- a/platforms/yttrex/backend/routes/youchoose.js +++ b/platforms/yttrex/backend/routes/youchoose.js @@ -6,7 +6,7 @@ const fetchOpengraph = require('fetch-opengraph'); const ycai = require('../lib/ycai'); const curly = require('../lib/curly'); const endpoints = require('../lib/endpoint'); -const { v3 } = require('@shared/endpoints'); +const { v3 } = require('@yttrex/shared/endpoints'); const structured = require('../lib/structured'); const PUBLIC_AMOUNT_ELEMS = 100; diff --git a/platforms/yttrex/backend/routes/youchoose/deleteRecommendation.route.ts b/platforms/yttrex/backend/routes/youchoose/deleteRecommendation.route.ts index 23ee1bb04..602800ca5 100644 --- a/platforms/yttrex/backend/routes/youchoose/deleteRecommendation.route.ts +++ b/platforms/yttrex/backend/routes/youchoose/deleteRecommendation.route.ts @@ -5,7 +5,7 @@ import { import { Route } from '@shared/backend/types'; import { authenticationMiddleware } from '@shared/backend/utils/authenticationMiddleware'; import { AddEndpoint } from '@shared/backend/utils/endpoint'; -import * as Endpoints from '@shared/endpoints'; +import * as Endpoints from '@yttrex/shared/endpoints'; import { pipe } from 'fp-ts/lib/pipeable'; import * as TE from 'fp-ts/lib/TaskEither'; import * as ycai from '../../lib/ycai'; diff --git a/platforms/yttrex/backend/tests/arbitraries/parsers/Home.arb.ts b/platforms/yttrex/backend/tests/arbitraries/parsers/Home.arb.ts index 6bbad0256..004dd0ae9 100644 --- a/platforms/yttrex/backend/tests/arbitraries/parsers/Home.arb.ts +++ b/platforms/yttrex/backend/tests/arbitraries/parsers/Home.arb.ts @@ -2,10 +2,10 @@ import { fc } from '@shared/test'; import { propsOmit } from '@shared/utils/arbitrary.utils'; import { getArbitrary } from 'fast-check-io-ts'; import * as t from 'io-ts'; -import { HomeProcessResult } from '../../../parsers/home'; +import { HomeMetadata } from '../../../models/Metadata'; import { VideoResultArb } from './Video.arb'; -const htmlMetadataProps = propsOmit(HomeProcessResult, ['id', 'selected']); +const htmlMetadataProps = propsOmit(HomeMetadata, ['id', 'selected']); export const HTMLMetadataResult = getArbitrary( t.strict({ ...htmlMetadataProps, diff --git a/platforms/yttrex/docs/.gitignore b/platforms/yttrex/docs/.gitignore new file mode 100644 index 000000000..b2d6de306 --- /dev/null +++ b/platforms/yttrex/docs/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/platforms/yttrex/docs/README.md b/platforms/yttrex/docs/README.md new file mode 100644 index 000000000..aaba2fa1e --- /dev/null +++ b/platforms/yttrex/docs/README.md @@ -0,0 +1,41 @@ +# Website + +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/platforms/yttrex/docs/babel.config.js b/platforms/yttrex/docs/babel.config.js new file mode 100644 index 000000000..e00595dae --- /dev/null +++ b/platforms/yttrex/docs/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/platforms/yttrex/docs/blog/2019-05-28-first-blog-post.md b/platforms/yttrex/docs/blog/2019-05-28-first-blog-post.md new file mode 100644 index 000000000..02f3f81bd --- /dev/null +++ b/platforms/yttrex/docs/blog/2019-05-28-first-blog-post.md @@ -0,0 +1,12 @@ +--- +slug: first-blog-post +title: First Blog Post +authors: + name: Gao Wei + title: Docusaurus Core Team + url: https://github.com/wgao19 + image_url: https://github.com/wgao19.png +tags: [hola, docusaurus] +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/platforms/yttrex/docs/blog/2019-05-29-long-blog-post.md b/platforms/yttrex/docs/blog/2019-05-29-long-blog-post.md new file mode 100644 index 000000000..26ffb1b1f --- /dev/null +++ b/platforms/yttrex/docs/blog/2019-05-29-long-blog-post.md @@ -0,0 +1,44 @@ +--- +slug: long-blog-post +title: Long Blog Post +authors: endi +tags: [hello, docusaurus] +--- + +This is the summary of a very long blog post, + +Use a `` comment to limit blog post size in the list view. + + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/platforms/yttrex/docs/blog/2021-08-01-mdx-blog-post.mdx b/platforms/yttrex/docs/blog/2021-08-01-mdx-blog-post.mdx new file mode 100644 index 000000000..c04ebe323 --- /dev/null +++ b/platforms/yttrex/docs/blog/2021-08-01-mdx-blog-post.mdx @@ -0,0 +1,20 @@ +--- +slug: mdx-blog-post +title: MDX Blog Post +authors: [slorber] +tags: [docusaurus] +--- + +Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). + +:::tip + +Use the power of React to create interactive blog posts. + +```js + +``` + + + +::: diff --git a/platforms/yttrex/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/platforms/yttrex/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg new file mode 100644 index 000000000..11bda0928 Binary files /dev/null and b/platforms/yttrex/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg differ diff --git a/platforms/yttrex/docs/blog/2021-08-26-welcome/index.md b/platforms/yttrex/docs/blog/2021-08-26-welcome/index.md new file mode 100644 index 000000000..9455168f1 --- /dev/null +++ b/platforms/yttrex/docs/blog/2021-08-26-welcome/index.md @@ -0,0 +1,25 @@ +--- +slug: welcome +title: Welcome +authors: [slorber, yangshun] +tags: [facebook, hello, docusaurus] +--- + +[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog). + +Simply add Markdown files (or folders) to the `blog` directory. + +Regular blog authors can be added to `authors.yml`. + +The blog post date can be extracted from filenames, such as: + +- `2019-05-30-welcome.md` +- `2019-05-30-welcome/index.md` + +A blog post folder can be convenient to co-locate blog post images: + +![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg) + +The blog supports tags as well! + +**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config. diff --git a/platforms/yttrex/docs/blog/authors.yml b/platforms/yttrex/docs/blog/authors.yml new file mode 100644 index 000000000..bcb299156 --- /dev/null +++ b/platforms/yttrex/docs/blog/authors.yml @@ -0,0 +1,17 @@ +endi: + name: Endilie Yacop Sucipto + title: Maintainer of Docusaurus + url: https://github.com/endiliey + image_url: https://github.com/endiliey.png + +yangshun: + name: Yangshun Tay + title: Front End Engineer @ Facebook + url: https://github.com/yangshun + image_url: https://github.com/yangshun.png + +slorber: + name: Sébastien Lorber + title: Docusaurus maintainer + url: https://sebastienlorber.com + image_url: https://github.com/slorber.png diff --git a/platforms/tktrex/docs/docs/shared/intro.md b/platforms/yttrex/docs/docs/backend.md similarity index 73% rename from platforms/tktrex/docs/docs/shared/intro.md rename to platforms/yttrex/docs/docs/backend.md index 4c8a7bd9e..2cf45a6fe 100644 --- a/platforms/tktrex/docs/docs/shared/intro.md +++ b/platforms/yttrex/docs/docs/backend.md @@ -1,6 +1,6 @@ --- -title: Getting started -sidebar_position: 1 +title: Backend +sidebar_position: 3 --- The `@tktrex/shared` module contains `endpoints`, `models` and other definitions needed by `@tktrex` ecosystem. diff --git a/platforms/yttrex/docs/docs/extension.mdx b/platforms/yttrex/docs/docs/extension.mdx new file mode 100644 index 000000000..2b989e808 --- /dev/null +++ b/platforms/yttrex/docs/docs/extension.mdx @@ -0,0 +1,8 @@ +--- +title: Extension +sidebar_position: 2 +--- + +import ExtensionPartial from '@site/docs/partials/extension/_index.mdx'; + + diff --git a/platforms/yttrex/docs/docs/intro.md b/platforms/yttrex/docs/docs/intro.md new file mode 100644 index 000000000..26279482e --- /dev/null +++ b/platforms/yttrex/docs/docs/intro.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +title: YT TrEx +id: yttrex-intro +--- + +# Introduction diff --git a/platforms/yttrex/docs/docusaurus.config.js b/platforms/yttrex/docs/docusaurus.config.js new file mode 100644 index 000000000..231d6c718 --- /dev/null +++ b/platforms/yttrex/docs/docusaurus.config.js @@ -0,0 +1,152 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); +const packageJson = require('./package.json'); + +const GITHUB_REPO = 'https://github.com/tracking-exposed/yttrex'; + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: '@tktrex', + tagline: 'Tiktok service from tracking.exposed', + url: 'https://tiktok.tracking.exposed/', + baseUrl: '/docs/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/yttrex128.png', + organizationName: 'tracking-exposed', // Usually your GitHub org/user name. + projectName: 'tktrex', // Usually your repo name. + + plugins: [ + // @tktrex open api + [ + 'docusaurus-plugin-openapi', + { + id: 'tktrex', + path: '../shared/build/open-api.json', + routeBasePath: 'tktrex/api', + }, + ], + ], + presets: [ + [ + '@docusaurus/preset-classic', + /** @type {import('docusaurus-preset-openapi').Options} */ + ({ + docs: { + routeBasePath: '/', + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + editUrl: + 'https://github.com/tracking-exposed/yttrex/edit/master/services/tktrex/docs/', + }, + blog: false, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }), + ], + ], + themes: ['docusaurus-theme-openapi'], + themeConfig: + /** @type {import('docusaurus-theme-openapi').ThemeConfig} */ + ({ + navbar: { + title: `@tktrex v${packageJson.version}`, + logo: { + alt: '@tktrex Logo', + src: '/img/yttrex128.png', + }, + items: [ + { + type: 'doc', + docId: 'intro', + label: 'Docs', + }, + { + label: 'API', + to: '/docs/tktrex/api', + }, + { + href: GITHUB_REPO, + className: 'header-github-link', + position: 'right', + 'aria-label': '@tktrex repo', + }, + ], + }, + footer: { + links: [ + { + title: 'Docs', + items: [ + { + label: 'Getting started', + to: '/docs/intro', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Slack', + href: 'https://trackingexposed.slack.com/invite/trex-tk', + }, + { + label: 'Twitter', + href: 'https://twitter.com/trackingexposed', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'Youchoose', + to: 'https://youchoose.ai', + }, + { + label: '@trex/facebook', + to: 'https://facebook.tracking.exposed', + }, + { + label: '@trex/youtube', + to: 'https://youtube.tracking.exposed', + }, + { + label: '@trex/pornhub', + to: 'https://pornhub.tracking.exposed', + }, + { + label: '@trex/amazon', + to: 'https://amazon.tracking.exposed', + }, + // no blog at the moment + // { + // label: 'Blog', + // to: '/blog', + // }, + ], + }, + { + title: 'Dev', + items: [ + { + html: ``, + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Tracking Exposed Team. Built with Docusaurus.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }), +}; + +module.exports = config; diff --git a/platforms/yttrex/docs/package.json b/platforms/yttrex/docs/package.json new file mode 100644 index 000000000..0c5baf952 --- /dev/null +++ b/platforms/yttrex/docs/package.json @@ -0,0 +1,43 @@ +{ + "name": "@yttrex/docs", + "version": "2.4.6", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "2.0.0-beta.14", + "@docusaurus/preset-classic": "2.0.0-beta.14", + "@mdx-js/react": "^1.6.21", + "clsx": "^1.1.1", + "prism-react-renderer": "^1.2.1", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.0.0-beta.14", + "@tsconfig/docusaurus": "^1.0.4", + "typescript": "^4.7.2" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/platforms/yttrex/docs/sidebars.js b/platforms/yttrex/docs/sidebars.js new file mode 100644 index 000000000..54ba60940 --- /dev/null +++ b/platforms/yttrex/docs/sidebars.js @@ -0,0 +1,31 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + { + type: 'category', + label: 'Tutorial', + items: ['hello'], + }, + ], + */ +}; + +module.exports = sidebars; diff --git a/platforms/yttrex/docs/src/components/HomepageFeatures.module.css b/platforms/yttrex/docs/src/components/HomepageFeatures.module.css new file mode 100644 index 000000000..b248eb2e5 --- /dev/null +++ b/platforms/yttrex/docs/src/components/HomepageFeatures.module.css @@ -0,0 +1,11 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/platforms/yttrex/docs/src/components/HomepageFeatures.tsx b/platforms/yttrex/docs/src/components/HomepageFeatures.tsx new file mode 100644 index 000000000..deb3b8a3b --- /dev/null +++ b/platforms/yttrex/docs/src/components/HomepageFeatures.tsx @@ -0,0 +1,89 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './HomepageFeatures.module.css'; + +interface FeatureItem { + title: string; + image: string; + description: JSX.Element; + buttons?: JSX.Element; +} + +const FeatureList: FeatureItem[] = [ + { + title: 'Collect the data', + image: '/img/undraw_docusaurus_mountain.svg', + description: <>Use the browser extension to collect data from TikTok., + buttons: ( + + ), + }, + { + title: 'Run experiments', + image: '/img/undraw_docusaurus_tree.svg', + description: ( + <> + Use our tool guardoni to run experiments with the data collected. + + ), + }, + { + title: 'Explore collected data', + image: '/img/undraw_docusaurus_react.svg', + description: ( + <>Collected data are transparent, anonymous and accessible to everyone. + ), + }, +]; + +function Feature({ + title, + image, + buttons, + description, +}: FeatureItem): JSX.Element { + return ( +
+
+ {/* {title} */} +
+
+

{title}

+

{description}

+
+ {buttons ?
{buttons}
: null} +
+ ); +} + +export default function HomepageFeatures(): JSX.Element { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/platforms/yttrex/docs/src/css/custom.css b/platforms/yttrex/docs/src/css/custom.css new file mode 100644 index 000000000..f2c772159 --- /dev/null +++ b/platforms/yttrex/docs/src/css/custom.css @@ -0,0 +1,93 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +@font-face { + font-family: Trex-Regular; + src: url('/fonts/Trex-Regular.ttf'); +} + +/* You can override the default Infima variables here. */ +:root { + --black: #1b1b1b; + --white: #f1f1f1; + /* --ifm-font-family-base: "Trex-Regular"; */ + --ifm-heading-font-family: "Trex-Regular"; + /* --ifm-font-size-base: 120%; */ + --ifm-line-height-base: 2; + --ifm-color-primary: #53c1b6; + --ifm-color-primary-dark: #42b7ab; + --ifm-color-primary-darker: #3eaca1; + --ifm-color-primary-darkest: #338e85; + --ifm-color-primary-light: #67c8bf; + --ifm-color-primary-lighter: #71ccc3; + --ifm-color-primary-lightest: #90d7d0; + --ifm-code-font-size: 95%; + --ifm-footer-background-color: #53c1b6; + --ifm-footer-color: var(--white); + --ifm-footer-title-color: var(--black); + --ifm-footer-link-color: var(--white); + --ifm-footer-link-hover-color: var(--black); +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +html[data-theme='dark'] { + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + /* --ifm-color-navbar: #1b1b1b; */ + --ifm-navbar-background-color: #1b1b1b; + --ifm-footer-background-color: #53c1b6; +} + +.docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.1); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); +} + +html[data-theme='dark'] .docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.3); +} + + +.header-github-link { + background-color: white; + width: 23px; + height: 23px; + border-radius: 11px; + position: relative; + margin-right: 20px; +} + +html[data-theme="dark"] .header-github-link { + background-color: black; +} + +.header-github-link:hover { + opacity: 0.6; +} + +.header-github-link:before { + content: ''; + width: 26px; + height: 26px; + display: flex; + top: -1px; + left: -1px; + position: absolute; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E"); + background-repeat: no-repeat; +} + +html[data-theme='dark'] .header-github-link:before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; +} diff --git a/platforms/yttrex/docs/src/pages/index.module.css b/platforms/yttrex/docs/src/pages/index.module.css new file mode 100644 index 000000000..666feb6a1 --- /dev/null +++ b/platforms/yttrex/docs/src/pages/index.module.css @@ -0,0 +1,23 @@ +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; +} + +@media screen and (max-width: 966px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/platforms/yttrex/docs/src/pages/index.tsx b/platforms/yttrex/docs/src/pages/index.tsx new file mode 100644 index 000000000..a32991eec --- /dev/null +++ b/platforms/yttrex/docs/src/pages/index.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import clsx from 'clsx'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import styles from './index.module.css'; +import HomepageFeatures from '../components/HomepageFeatures'; + +function HomepageHeader(): JSX.Element { + const { siteConfig } = useDocusaurusContext(); + return ( +
+
+

{siteConfig.title}

+

{siteConfig.tagline}

+
+ + Getting started + +
+
+
+ ); +} + +export default function Home(): JSX.Element { + const { siteConfig } = useDocusaurusContext(); + return ( + + +
+ +
+
+ ); +} diff --git a/platforms/yttrex/docs/src/pages/markdown-page.md b/platforms/yttrex/docs/src/pages/markdown-page.md new file mode 100644 index 000000000..9756c5b66 --- /dev/null +++ b/platforms/yttrex/docs/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/platforms/yttrex/docs/static/.nojekyll b/platforms/yttrex/docs/static/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/platforms/yttrex/docs/static/fonts/Trex-Regular.ttf b/platforms/yttrex/docs/static/fonts/Trex-Regular.ttf new file mode 100644 index 000000000..071d9d824 Binary files /dev/null and b/platforms/yttrex/docs/static/fonts/Trex-Regular.ttf differ diff --git a/platforms/yttrex/docs/static/img/docusaurus.png b/platforms/yttrex/docs/static/img/docusaurus.png new file mode 100644 index 000000000..f458149e3 Binary files /dev/null and b/platforms/yttrex/docs/static/img/docusaurus.png differ diff --git a/platforms/yttrex/docs/static/img/favicon.ico b/platforms/yttrex/docs/static/img/favicon.ico new file mode 100644 index 000000000..c01d54bcd Binary files /dev/null and b/platforms/yttrex/docs/static/img/favicon.ico differ diff --git a/platforms/yttrex/docs/static/img/logo.svg b/platforms/yttrex/docs/static/img/logo.svg new file mode 100644 index 000000000..9db6d0d06 --- /dev/null +++ b/platforms/yttrex/docs/static/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/platforms/yttrex/docs/static/img/tutorial/docsVersionDropdown.png b/platforms/yttrex/docs/static/img/tutorial/docsVersionDropdown.png new file mode 100644 index 000000000..ff1cbe688 Binary files /dev/null and b/platforms/yttrex/docs/static/img/tutorial/docsVersionDropdown.png differ diff --git a/platforms/yttrex/docs/static/img/tutorial/localeDropdown.png b/platforms/yttrex/docs/static/img/tutorial/localeDropdown.png new file mode 100644 index 000000000..d7163f967 Binary files /dev/null and b/platforms/yttrex/docs/static/img/tutorial/localeDropdown.png differ diff --git a/platforms/yttrex/docs/static/img/undraw_docusaurus_mountain.svg b/platforms/yttrex/docs/static/img/undraw_docusaurus_mountain.svg new file mode 100644 index 000000000..431cef2f7 --- /dev/null +++ b/platforms/yttrex/docs/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platforms/yttrex/docs/static/img/undraw_docusaurus_react.svg b/platforms/yttrex/docs/static/img/undraw_docusaurus_react.svg new file mode 100644 index 000000000..e41705043 --- /dev/null +++ b/platforms/yttrex/docs/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platforms/yttrex/docs/static/img/undraw_docusaurus_tree.svg b/platforms/yttrex/docs/static/img/undraw_docusaurus_tree.svg new file mode 100644 index 000000000..a05cc03dd --- /dev/null +++ b/platforms/yttrex/docs/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1 @@ +docu_tree \ No newline at end of file diff --git a/docs/static/img/yttrex128.png b/platforms/yttrex/docs/static/img/yttrex128.png similarity index 100% rename from docs/static/img/yttrex128.png rename to platforms/yttrex/docs/static/img/yttrex128.png diff --git a/platforms/yttrex/docs/tsconfig.json b/platforms/yttrex/docs/tsconfig.json new file mode 100644 index 000000000..6f4756980 --- /dev/null +++ b/platforms/yttrex/docs/tsconfig.json @@ -0,0 +1,7 @@ +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "baseUrl": "." + } +} diff --git a/platforms/yttrex/extension/package.json b/platforms/yttrex/extension/package.json index a47231f6b..d97c83940 100644 --- a/platforms/yttrex/extension/package.json +++ b/platforms/yttrex/extension/package.json @@ -9,7 +9,7 @@ "author": "Claudio Agosti, Alberto Granzotto, and the tracking exposed team", "repository": { "type": "git", - "url": "git+https://github.com/tracking-exposed/yttrex.git" + "url": "git+https://github.com/tracking-exposed/trex.git" }, "scripts": { "clean": "rm -rf ./build ./dist", @@ -41,16 +41,16 @@ "jest-chrome": "^0.7.2", "jest-cli": "^27.5.1", "jest-environment-jsdom-global": "^3.1.2", - "mini-css-extract-plugin": "^2.6.0", + "mini-css-extract-plugin": "^2.6.1", "sass-loader": "^12.6.0", "style-loader": "^3.3.1", "ts-loader": "^9.3.0", "ts-node": "^10.8.0", "typescript": "^4.7.2", "uglifyjs-webpack-plugin": "^2.2.0", - "webpack": "^5.72.1", + "webpack": "^5.73.0", "webpack-combine-loaders": "^2.0.4", - "webpack-dev-server": "^4.9.0", + "webpack-dev-server": "^4.9.2", "webpack-notifier": "^1.15.0" }, "dependencies": { diff --git a/platforms/yttrex/extension/src/chrome/background/api.ts b/platforms/yttrex/extension/src/chrome/background/api.ts index 4ef860c21..bfe079d7e 100644 --- a/platforms/yttrex/extension/src/chrome/background/api.ts +++ b/platforms/yttrex/extension/src/chrome/background/api.ts @@ -1,4 +1,4 @@ -import * as endpoints from '@shared/endpoints'; +import * as endpoints from '@yttrex/shared/endpoints'; import { SyncReq } from '@shared/extension/chrome/background/sync'; import db from '@shared/extension/chrome/db'; import config from '@shared/extension/config'; diff --git a/platforms/yttrex/shared/.eslintrc b/platforms/yttrex/shared/.eslintrc index d57ca290d..c3e2013a8 100644 --- a/platforms/yttrex/shared/.eslintrc +++ b/platforms/yttrex/shared/.eslintrc @@ -26,7 +26,6 @@ "version": "14" } }, - "ignorePatterns": ["__tests__"], "rules": { "no-console": 1, "no-use-before-define": "off", diff --git a/platforms/yttrex/shared/bin/open-doc-api.ts b/platforms/yttrex/shared/bin/open-doc-api.ts new file mode 100644 index 000000000..a332bc984 --- /dev/null +++ b/platforms/yttrex/shared/bin/open-doc-api.ts @@ -0,0 +1,50 @@ +import sharedModels from '@shared/models'; +import * as contributorPersonalStats from '@shared/models/contributor/ContributorPersonalStats'; +import * as contributorModels from '@shared/models/contributor/ContributorPersonalSummary'; +import * as contributorPublicKey from '@shared/models/contributor/ContributorPublicKey'; +import * as swagger from '@shared/providers/swagger/swagger.provider.node'; +import * as path from 'path'; +import * as endpoints from '../src/endpoints'; +import * as apiModels from '../src/models'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const packageJson = require('../package.json'); + +const models = { + ...contributorPublicKey, + ...contributorModels, + ...contributorPersonalStats, + ...sharedModels, + ...apiModels, +}; + +swagger.writeOpenDocTo( + { + title: 'YT TrEx API Docs', + description: 'Tracking exposed API documentation for youtube platform', + server: { + host: 'youtube.tracking.exposed', + port: '' as any, + protocol: 'https', + basePath: 'api', + }, + endpoints, + version: packageJson.version, + models, + components: { + security: { + ACTToken: { + type: 'apiKey', + in: 'header', + name: 'X-Authorization', + }, + }, + }, + security: [ + { + ACTToken: [], + }, + ], + }, + path.resolve(process.cwd(), './build'), + true +); diff --git a/platforms/yttrex/shared/package.json b/platforms/yttrex/shared/package.json index 4c3bcf7af..318664c56 100644 --- a/platforms/yttrex/shared/package.json +++ b/platforms/yttrex/shared/package.json @@ -4,10 +4,12 @@ "description": "youtube.tracking.exposed - shared", "private": true, "scripts": { + "clean": "rm -rf ./build", "build": "tsc -b", "test": "jest", "type-check": "tsc", - "lint": "eslint ./bin ./lib ./models ./parsers ./routes" + "lint": "eslint ./src", + "open-doc-api": "ts-node ./bin/open-doc-api.ts" }, "author": "Claudio Agosti and https://github.com/tracking-exposed/yttrex/graphs/contributors", "license": "AGPL-3.0", @@ -36,6 +38,7 @@ "jest": "^27.5.1", "prettier": "^2.6.2", "ts-jest": "^27.1.5", + "ts-node": "^10.8.0", "tsconfig-paths": "^3.14.1", "typescript": "^4.7.2" } diff --git a/platforms/yttrex/shared/src/arbitraries/ComparisonDirective.arb.ts b/platforms/yttrex/shared/src/arbitraries/ComparisonDirective.arb.ts deleted file mode 100644 index 8f71de7d7..000000000 --- a/platforms/yttrex/shared/src/arbitraries/ComparisonDirective.arb.ts +++ /dev/null @@ -1,30 +0,0 @@ -import fc from 'fast-check'; -import { getArbitrary } from 'fast-check-io-ts'; -import { HumanReadableStringArb } from '@shared/arbitraries/HumanReadableString.arb'; -import { URLArb } from '@shared/arbitraries/URL.arb'; -import { - ComparisonDirective, - ComparisonDirectiveRow, -} from '../models/Directive'; - -const WatchForArb = fc.oneof( - fc.constant('end'), - fc.integer({ min: 1, max: 30 }).map((n) => `${n}s`) -); - -export const ComparisonDirectiveRowArb = getArbitrary( - ComparisonDirectiveRow -).map(() => ({ - title: fc.sample(HumanReadableStringArb())[0], - url: fc.sample(URLArb, 1)[0], - urltag: fc.sample(HumanReadableStringArb(), 1)[0], - watchFor: fc.sample(WatchForArb, 1)[0], -})); - -export const ComparisonDirectiveArb = getArbitrary(ComparisonDirective).map( - (r) => ({ - ...r, - url: fc.sample(URLArb, 1)[0], - watchFor: fc.sample(WatchForArb, 1)[0], - }) -); diff --git a/platforms/yttrex/shared/src/endpoints/index.ts b/platforms/yttrex/shared/src/endpoints/index.ts new file mode 100644 index 000000000..6f276262c --- /dev/null +++ b/platforms/yttrex/shared/src/endpoints/index.ts @@ -0,0 +1,6 @@ +import v0 from './v0'; +import v1 from './v1'; +import v2 from './v2'; +import v3 from './v3'; + +export { v0, v1, v2, v3 }; diff --git a/platforms/yttrex/shared/src/endpoints/v0/index.ts b/platforms/yttrex/shared/src/endpoints/v0/index.ts new file mode 100644 index 000000000..7e91fb5e6 --- /dev/null +++ b/platforms/yttrex/shared/src/endpoints/v0/index.ts @@ -0,0 +1,17 @@ +import * as t from 'io-ts'; +import { DocumentedEndpoint } from '@shared/endpoints/DocumentedEndpoint'; + +const GetHealth = DocumentedEndpoint({ + title: 'GET health', + description: 'Check server health', + tags: ['health'], + Method: 'GET', + getPath: () => `/v0/health`, + Output: t.strict({ data: t.literal('OK') }), +}); + +export default { + Public: { + GetHealth, + }, +}; diff --git a/packages/shared/src/endpoints/v1/index.ts b/platforms/yttrex/shared/src/endpoints/v1/index.ts similarity index 100% rename from packages/shared/src/endpoints/v1/index.ts rename to platforms/yttrex/shared/src/endpoints/v1/index.ts diff --git a/packages/shared/src/endpoints/v1/public.endpoints.ts b/platforms/yttrex/shared/src/endpoints/v1/public.endpoints.ts similarity index 73% rename from packages/shared/src/endpoints/v1/public.endpoints.ts rename to platforms/yttrex/shared/src/endpoints/v1/public.endpoints.ts index 4632d632d..8d62936b5 100644 --- a/packages/shared/src/endpoints/v1/public.endpoints.ts +++ b/platforms/yttrex/shared/src/endpoints/v1/public.endpoints.ts @@ -1,10 +1,13 @@ +import { ContributorPersonalStats } from '@shared/models/contributor/ContributorPersonalStats'; +import { + ContributorPersonalSearch, + ContributorPersonalSummary, +} from '@shared/models/contributor/ContributorPersonalSummary'; +import { CreatorStats } from '@shared/models/CreatorStats'; +import { PublicKeyParams } from '@shared/models/http/params/PublicKey'; +import { SearchQuery } from '@shared/models/http/SearchQuery'; import * as t from 'io-ts'; import { Endpoint } from 'ts-endpoint'; -import { ContributorPersonalStats } from '../../models/contributor/ContributorPersonalStats'; -import { ContributorPersonalSearch, ContributorPersonalSummary } from '../../models/contributor/ContributorPersonalSummary'; -import { CreatorStats } from '../../models/CreatorStats'; -import { PublicKeyParams } from '../../models/http/params/PublicKey'; -import { SearchQuery } from '../../models/http/SearchQuery'; const GetAuthorStatsByVideoId = Endpoint({ Method: 'GET', diff --git a/packages/shared/src/endpoints/v2/index.ts b/platforms/yttrex/shared/src/endpoints/v2/index.ts similarity index 76% rename from packages/shared/src/endpoints/v2/index.ts rename to platforms/yttrex/shared/src/endpoints/v2/index.ts index 899c63f83..e54298bed 100644 --- a/packages/shared/src/endpoints/v2/index.ts +++ b/platforms/yttrex/shared/src/endpoints/v2/index.ts @@ -1,17 +1,14 @@ import * as t from 'io-ts'; import { Endpoint } from 'ts-endpoint'; -import { - ADVContributionEvent, - VideoContributionEvent, -} from '../../models/ContributionEvent'; -import { GetExperimentListOutput } from '../../models/Experiment'; -import { HandshakeBody, HandshakeResponse } from '../../models/HandshakeBody'; -import { PublicKeyParams } from '../../models/http/params/PublicKey'; -import { SearchQuery } from '../../models/http/SearchQuery'; -import { TikTokSearch } from '../../models/http/tiktok/TikTokSearch'; -import { Metadata } from '../../models/Metadata'; -import { ChannelADVStats } from '../../models/stats/ChannelADV'; -import { DocumentedEndpoint } from '../utils'; +import { AddEventsBody } from '@shared/models/ContributionEvent'; +import { ContributorPublicKeyResponse } from '@shared/models/contributor/ContributorPublicKey'; +import { GetExperimentListOutput } from '@shared/models/Experiment'; +import { HandshakeBody, HandshakeResponse } from '@shared/models/HandshakeBody'; +import { PublicKeyParams } from '@shared/models/http/params/PublicKey'; +import { SearchQuery } from '@shared/models/http/SearchQuery'; +import { Metadata } from '@shared/models/Metadata'; +import { ChannelADVStats } from '@shared/models/stats/ChannelADV'; +import { DocumentedEndpoint } from '@shared/endpoints'; export const Handshake = Endpoint({ Method: 'POST', @@ -70,15 +67,6 @@ const SearchesAsCSV = Endpoint({ Output: t.any, }); -const TikTokSearches = Endpoint({ - Method: 'GET', - getPath: () => `/v2/searches`, - Input: { - Query: SearchQuery, - }, - Output: TikTokSearch, -}); - const GetPersonalCSV = Endpoint({ Method: 'GET', getPath: ({ publicKey, type }) => `/v2/personal/${publicKey}/${type}/csv`, @@ -105,10 +93,7 @@ const AddEvents = Endpoint({ 'X-YTtrex-PublicKey': t.string, 'X-YTtrex-Signature': t.string, }), - Body: t.array( - t.union([VideoContributionEvent, ADVContributionEvent]), - 'AddEventsBody' - ), + Body: AddEventsBody, }, Output: t.any, }); @@ -123,7 +108,7 @@ const AddAPIEvents = Endpoint({ 'X-TrEx-PublicKey': t.string, 'X-TrEx-Signature': t.string, }), - Body: t.array(t.union([VideoContributionEvent, ADVContributionEvent])), + Body: AddEventsBody, }, Output: t.any, }); @@ -178,15 +163,7 @@ const DeletePersonalContributionByPublicKey = Endpoint({ selector: t.union([t.string, t.undefined]), }), }, - Output: t.strict({ - success: t.boolean, - result: t.strict({ - metadata: t.strict({ - acknowledged: t.boolean, - deletedCount: t.number, - }), - }), - }), + Output: ContributorPublicKeyResponse, }); export default { @@ -197,7 +174,6 @@ export default { VideoAuthor, Searches, SearchesAsCSV, - TikTokSearches, AddEvents, AddAPIEvents, GetChannelADVStats, diff --git a/packages/shared/src/endpoints/v3/creator.endpoints.ts b/platforms/yttrex/shared/src/endpoints/v3/creator.endpoints.ts similarity index 88% rename from packages/shared/src/endpoints/v3/creator.endpoints.ts rename to platforms/yttrex/shared/src/endpoints/v3/creator.endpoints.ts index 7d204fe7c..786a3e57a 100644 --- a/packages/shared/src/endpoints/v3/creator.endpoints.ts +++ b/platforms/yttrex/shared/src/endpoints/v3/creator.endpoints.ts @@ -1,16 +1,16 @@ import * as t from 'io-ts'; -import { SearchQuery } from '../../models/http/SearchQuery'; +import { SearchQuery } from '@shared/models/http/SearchQuery'; import { Endpoint } from 'ts-endpoint'; -import { AuthorizationHeader, AuthResponse } from '../../models/Auth'; -import { GetRelatedChannelsOutput } from '../../models/ChannelRelated'; +import { AuthorizationHeader, AuthResponse } from '@shared/models/Auth'; +import { GetRelatedChannelsOutput } from '@shared/models/ChannelRelated'; import { ContentCreator, ContentCreatorVideosOutput, RegisterContentCreatorBody, -} from '../../models/ContentCreator'; -import { CreatorStats } from '../../models/CreatorStats'; -import * as Recommendation from '../../models/Recommendation'; -import * as Video from '../../models/Video'; +} from '@shared/models/ContentCreator'; +import { CreatorStats } from '@shared/models/CreatorStats'; +import * as Recommendation from '@shared/models/Recommendation'; +import * as Video from '@shared/models/Video'; const GetCreator = Endpoint({ Method: 'GET', diff --git a/packages/shared/src/endpoints/v3/index.ts b/platforms/yttrex/shared/src/endpoints/v3/index.ts similarity index 100% rename from packages/shared/src/endpoints/v3/index.ts rename to platforms/yttrex/shared/src/endpoints/v3/index.ts diff --git a/packages/shared/src/endpoints/v3/public.endpoints.ts b/platforms/yttrex/shared/src/endpoints/v3/public.endpoints.ts similarity index 90% rename from packages/shared/src/endpoints/v3/public.endpoints.ts rename to platforms/yttrex/shared/src/endpoints/v3/public.endpoints.ts index 98d61cb74..cabc32bdb 100644 --- a/packages/shared/src/endpoints/v3/public.endpoints.ts +++ b/platforms/yttrex/shared/src/endpoints/v3/public.endpoints.ts @@ -2,20 +2,20 @@ import * as t from 'io-ts'; import { Endpoint } from 'ts-endpoint'; import { CreateDirectiveBody, + Directive, DirectiveType, PostDirectiveResponse, -} from '../../models/Directive'; +} from '@shared/models/Directive'; import { ConcludeGuardoniExperimentOutput, - GetDirectiveOutput, GetPublicDirectivesOutput, -} from '../../models/Experiment'; -import { HandshakeBody } from '../../models/HandshakeBody'; +} from '@shared/models/Experiment'; +import { HandshakeBody } from '@shared/models/HandshakeBody'; import { GetRecommendationsParams, GetRecommendationsQuery, RecommendationList, -} from '../../models/Recommendation'; +} from '@shared/models/Recommendation'; const Handshake = Endpoint({ Method: 'POST', @@ -73,7 +73,7 @@ const GetDirective = Endpoint({ experimentId: t.string, }), }, - Output: GetDirectiveOutput, + Output: t.array(Directive), }); const GetPublicDirectives = Endpoint({ diff --git a/platforms/yttrex/shared/src/models/Directive.ts b/platforms/yttrex/shared/src/models/Directive.ts deleted file mode 100644 index ddf728499..000000000 --- a/platforms/yttrex/shared/src/models/Directive.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as t from 'io-ts'; - -export const ComparisonDirectiveType = t.literal('comparison'); - -export const ComparisonDirectiveRow = t.type( - { - title: t.string, - url: t.string, - urltag: t.string, - watchFor: t.union([t.number, t.string, t.undefined]), - }, - 'ComparisonDirectiveRow' -); - -export type ComparisonDirectiveRow = t.TypeOf; - -export const ComparisonDirective = t.strict( - { - title: t.union([t.string, t.undefined]), - url: t.string, - urltag: t.union([t.string, t.undefined]), - watchFor: t.union([t.number, t.string, t.undefined, t.null]), - }, - 'ComparisonDirective' -); -export type ComparisonDirective = t.TypeOf; diff --git a/platforms/yttrex/shared/src/models/index.ts b/platforms/yttrex/shared/src/models/index.ts new file mode 100644 index 000000000..6a330d8a5 --- /dev/null +++ b/platforms/yttrex/shared/src/models/index.ts @@ -0,0 +1,4 @@ +import { Ad } from './Ad'; +import { Answer } from './Answer'; + +export { Ad, Answer }; diff --git a/platforms/yttrex/shared/src/providers/api.provider.ts b/platforms/yttrex/shared/src/providers/api.provider.ts index 337b76b1c..196fd8bae 100644 --- a/platforms/yttrex/shared/src/providers/api.provider.ts +++ b/platforms/yttrex/shared/src/providers/api.provider.ts @@ -4,7 +4,7 @@ import { MakeAPIClient, HTTPClient, } from '@shared/providers/api.provider'; -import * as Endpoints from '@shared/endpoints'; +import * as Endpoints from '../endpoints'; type YTAPIClient = APIClient; diff --git a/platforms/yttrex/shared/tsconfig.json b/platforms/yttrex/shared/tsconfig.json index 47978c905..7b848aad8 100644 --- a/platforms/yttrex/shared/tsconfig.json +++ b/platforms/yttrex/shared/tsconfig.json @@ -6,7 +6,7 @@ "strict": false, "outDir": "./build", "baseUrl": "./src", - "rootDir": "./src", + "rootDir": "./", "noEmit": false, "esModuleInterop": true, "skipLibCheck": true, @@ -16,7 +16,7 @@ "@shared/*": ["../../../../packages/shared/src/*"] } }, - "include": ["./src"], + "include": ["./bin", "./src"], "exclude": ["./tests", "jest.config.js"], "watchOptions": { "watchFile": "useFsEvents", diff --git a/scripts/build.sh b/scripts/build.sh index c8627782a..bad35e10c 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# set -e -x -set -e +set -e -x +# set -e export DEBUG="@trex*" export NODE_ENV=development @@ -11,6 +11,8 @@ yarn workspaces foreach run clean # build shared yarn shared build +./docs/scripts/build.sh + # build yttrex extension yarn yt:ext build @@ -19,5 +21,5 @@ yarn yt:ext build yarn tk:ext build # build guardoni -yarn guardoni build +yarn guardoni build:cli # yarn guardoni pkg diff --git a/scripts/release-it-after-bump.sh b/scripts/release-it-after-bump.sh index ba4fd8e99..54a9ef7f1 100755 --- a/scripts/release-it-after-bump.sh +++ b/scripts/release-it-after-bump.sh @@ -8,9 +8,11 @@ yarn shared build yarn taboule build yarn yt:ext dist yarn yt:ext dist:guardoni -yarn guardoni build -yarn guardoni pkg yarn tk:ext build +yarn guardoni build:cli +yarn guardoni pkg +yarn guardoni build:app + export DOTENV_CONFIG_PATH=$YCAI_DOTENV_CONFIG_PATH yarn ycai build diff --git a/yarn.lock b/yarn.lock index 3f499acb7..cc90398ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,31 +12,19 @@ __metadata: languageName: node linkType: hard -"@algolia/autocomplete-core@npm:1.5.2": - version: 1.5.2 - resolution: "@algolia/autocomplete-core@npm:1.5.2" - dependencies: - "@algolia/autocomplete-shared": 1.5.2 - checksum: a8ab49c689c7fe7782980af167dfd9bea0feb9fe9809d003da509096550852f48abff27b59e0bc9909a455fb998ff4b8a7ce45b7dd42cef42f675c81340a47e9 - languageName: node - linkType: hard - -"@algolia/autocomplete-preset-algolia@npm:1.5.2": - version: 1.5.2 - resolution: "@algolia/autocomplete-preset-algolia@npm:1.5.2" +"@algolia/autocomplete-core@npm:1.6.3": + version: 1.6.3 + resolution: "@algolia/autocomplete-core@npm:1.6.3" dependencies: - "@algolia/autocomplete-shared": 1.5.2 - peerDependencies: - "@algolia/client-search": ^4.9.1 - algoliasearch: ^4.9.1 - checksum: 56da97955467414b381cd93cb2d693aeda5f908e7c2b13afeda10c5919abb994cf75db7d9d08eb327d8e7475f018ad13da53a76733ed6094723f6f11fee01dc3 + "@algolia/autocomplete-shared": 1.6.3 + checksum: 2dec8ca31360c595a596e83ac0c075e21cf7d3235b0e069d13d8e4e9de7305eaa75f8247475e813ed8cc0e35740cb79099ebfb0cde3a83d2c79db2084e8c62b4 languageName: node linkType: hard -"@algolia/autocomplete-shared@npm:1.5.2": - version: 1.5.2 - resolution: "@algolia/autocomplete-shared@npm:1.5.2" - checksum: 35d60ea6c38d0cae79e431460e3014da5a71408061fafa9bb5882e91de26dd923c18b5ed905fbea87639875f1d0c0857057a27eac6e786856646b8553a2aa61f +"@algolia/autocomplete-shared@npm:1.6.3": + version: 1.6.3 + resolution: "@algolia/autocomplete-shared@npm:1.6.3" + checksum: 2688f54bd82506ac1e6580476772a4d310a9cfa28fbd29c6e207ddc327f62b55e007d5ed5a83af3edd2faf06b09f2e989f9eb7c14d2472fb7a657bb9539fb730 languageName: node linkType: hard @@ -49,6 +37,15 @@ __metadata: languageName: node linkType: hard +"@algolia/cache-browser-local-storage@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/cache-browser-local-storage@npm:4.13.1" + dependencies: + "@algolia/cache-common": 4.13.1 + checksum: ee7674971ab22c34f17cdf06589286695b40efaa7fd9b8f25833735bbd39919f2fe4973ca4de314f639574ae28d087ff43abef50e9e16b2f51b459a451e4c38d + languageName: node + linkType: hard + "@algolia/cache-common@npm:4.12.1": version: 4.12.1 resolution: "@algolia/cache-common@npm:4.12.1" @@ -56,6 +53,13 @@ __metadata: languageName: node linkType: hard +"@algolia/cache-common@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/cache-common@npm:4.13.1" + checksum: 0ec5f1344177fbcfa5e2386e3841d7e162f0f9de06a9c3faa31a5f4793153f4d084ec08f22a10645ebce35d5146944f52c59d657c980c19a0bb9079b1f338f47 + languageName: node + linkType: hard + "@algolia/cache-in-memory@npm:4.12.1": version: 4.12.1 resolution: "@algolia/cache-in-memory@npm:4.12.1" @@ -65,6 +69,15 @@ __metadata: languageName: node linkType: hard +"@algolia/cache-in-memory@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/cache-in-memory@npm:4.13.1" + dependencies: + "@algolia/cache-common": 4.13.1 + checksum: d1a5935de618d2480bc25f9c563fd45383a024d3f64e44ad35d1eb18b59b7654ec1cfd7dcb1fc7bd391709e85f4cd7f4602f54772ba85d1993520ce48252f22e + languageName: node + linkType: hard + "@algolia/client-account@npm:4.12.1": version: 4.12.1 resolution: "@algolia/client-account@npm:4.12.1" @@ -76,6 +89,17 @@ __metadata: languageName: node linkType: hard +"@algolia/client-account@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/client-account@npm:4.13.1" + dependencies: + "@algolia/client-common": 4.13.1 + "@algolia/client-search": 4.13.1 + "@algolia/transporter": 4.13.1 + checksum: 3a3fb580c5ef2b57dbcf005a74a56590a87658532d114b4be8c0eb20eb1169d932090b9688eb8690782c71e99650f37896d4e3386b325c292f01f4c0821502c5 + languageName: node + linkType: hard + "@algolia/client-analytics@npm:4.12.1": version: 4.12.1 resolution: "@algolia/client-analytics@npm:4.12.1" @@ -88,6 +112,18 @@ __metadata: languageName: node linkType: hard +"@algolia/client-analytics@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/client-analytics@npm:4.13.1" + dependencies: + "@algolia/client-common": 4.13.1 + "@algolia/client-search": 4.13.1 + "@algolia/requester-common": 4.13.1 + "@algolia/transporter": 4.13.1 + checksum: b593011160d024cddd1871ed70e7ef5231d7e6a7bac94a6b990d81aea6965b51181232b98c64f0eab7a45ab639d43d252b8655f34c8c9b8d1563ab8653da8c9b + languageName: node + linkType: hard + "@algolia/client-common@npm:4.12.1": version: 4.12.1 resolution: "@algolia/client-common@npm:4.12.1" @@ -98,6 +134,16 @@ __metadata: languageName: node linkType: hard +"@algolia/client-common@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/client-common@npm:4.13.1" + dependencies: + "@algolia/requester-common": 4.13.1 + "@algolia/transporter": 4.13.1 + checksum: 4a3d5a14f4ad95740414419ceb4b2df60ebbc53a25a0ffb2a96e46f34fe797bf82e85c376bb5cdd9456717cd2e3115444dd18aaa238005efe622c0589ec9e9a5 + languageName: node + linkType: hard + "@algolia/client-personalization@npm:4.12.1": version: 4.12.1 resolution: "@algolia/client-personalization@npm:4.12.1" @@ -109,6 +155,17 @@ __metadata: languageName: node linkType: hard +"@algolia/client-personalization@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/client-personalization@npm:4.13.1" + dependencies: + "@algolia/client-common": 4.13.1 + "@algolia/requester-common": 4.13.1 + "@algolia/transporter": 4.13.1 + checksum: 9a318235f54e9e0a9cc5a6b54d84fe2cfd78fdc616172ca9be4ace9519d89ac1c32025f7d365db349b48e23f7e9c2a46da7b24c435584f633e5f55050df340d4 + languageName: node + linkType: hard + "@algolia/client-search@npm:4.12.1": version: 4.12.1 resolution: "@algolia/client-search@npm:4.12.1" @@ -120,6 +177,17 @@ __metadata: languageName: node linkType: hard +"@algolia/client-search@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/client-search@npm:4.13.1" + dependencies: + "@algolia/client-common": 4.13.1 + "@algolia/requester-common": 4.13.1 + "@algolia/transporter": 4.13.1 + checksum: 44e630b866756ce5ece0c86eaa9f48fe9d4e8faabcc63d3eece851f9496d97e14f2576ea83cdbc154a7af6e11e75ec3671356053026577c7db316a8405d6ebfc + languageName: node + linkType: hard + "@algolia/events@npm:^4.0.1": version: 4.0.1 resolution: "@algolia/events@npm:4.0.1" @@ -134,6 +202,13 @@ __metadata: languageName: node linkType: hard +"@algolia/logger-common@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/logger-common@npm:4.13.1" + checksum: 7330b794af2e4d648b2e4edcfbdda9ea1c154b2f4107505f6d6b0ec513d90df9e809ef55775c2baccfb909ed894ccc55c626665d44a86a12fb9e9b499eb25d6f + languageName: node + linkType: hard + "@algolia/logger-console@npm:4.12.1": version: 4.12.1 resolution: "@algolia/logger-console@npm:4.12.1" @@ -143,6 +218,15 @@ __metadata: languageName: node linkType: hard +"@algolia/logger-console@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/logger-console@npm:4.13.1" + dependencies: + "@algolia/logger-common": 4.13.1 + checksum: c78f50a784196387c3b1577b683acd66f8aa2d37fc022638f0e8d9635f0c003407d7595c4080e46bd47e1d1e635cace396f75b93c71c465bb0cfbd456dc91ad7 + languageName: node + linkType: hard + "@algolia/requester-browser-xhr@npm:4.12.1": version: 4.12.1 resolution: "@algolia/requester-browser-xhr@npm:4.12.1" @@ -152,6 +236,15 @@ __metadata: languageName: node linkType: hard +"@algolia/requester-browser-xhr@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/requester-browser-xhr@npm:4.13.1" + dependencies: + "@algolia/requester-common": 4.13.1 + checksum: 6ae8e3b03b66410e809aa649b93d6f72fd4520c8f50517b37646b37d80c55ec1f519f2059ecc5a63929ba9ca0ce1ef45cd3a7d20f7abdda4f216a67d93736765 + languageName: node + linkType: hard + "@algolia/requester-common@npm:4.12.1": version: 4.12.1 resolution: "@algolia/requester-common@npm:4.12.1" @@ -159,6 +252,13 @@ __metadata: languageName: node linkType: hard +"@algolia/requester-common@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/requester-common@npm:4.13.1" + checksum: 4e8039f7fda7dd8bfb8689bfda9cb7297972e27c329e2b813e8df7390d6dd7ce169907e307b039c57905010d6468e85908830d6be0eeef3664c8fc01fafff957 + languageName: node + linkType: hard + "@algolia/requester-node-http@npm:4.12.1": version: 4.12.1 resolution: "@algolia/requester-node-http@npm:4.12.1" @@ -168,6 +268,15 @@ __metadata: languageName: node linkType: hard +"@algolia/requester-node-http@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/requester-node-http@npm:4.13.1" + dependencies: + "@algolia/requester-common": 4.13.1 + checksum: d25fe56c4acc5e032a2a1d0b5a85b2cebb58c0a581ed9f862df9e43378e7523948ca9aa377589405efe7bc951b0ea6e0011963d73a8b11a5f0d426123f9bb4ec + languageName: node + linkType: hard + "@algolia/transporter@npm:4.12.1": version: 4.12.1 resolution: "@algolia/transporter@npm:4.12.1" @@ -179,6 +288,17 @@ __metadata: languageName: node linkType: hard +"@algolia/transporter@npm:4.13.1": + version: 4.13.1 + resolution: "@algolia/transporter@npm:4.13.1" + dependencies: + "@algolia/cache-common": 4.13.1 + "@algolia/logger-common": 4.13.1 + "@algolia/requester-common": 4.13.1 + checksum: c99451f37172ae499bf0aa83d32b1785b63744498c1978c274ddf865ae5a91c05d92570450ebb39ae91a3d4d4593415aaad9c93c4d78229ddc8ba8b42fb0ce3a + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.1.0": version: 2.1.2 resolution: "@ampproject/remapping@npm:2.1.2" @@ -260,6 +380,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.17.10": + version: 7.17.10 + resolution: "@babel/compat-data@npm:7.17.10" + checksum: e85051087cd4690de5061909a2dd2d7f8b6434a3c2e30be6c119758db2027ae1845bcd75a81127423dd568b706ac6994a1a3d7d701069a23bf5cfe900728290b + languageName: node + linkType: hard + "@babel/core@npm:7.12.9": version: 7.12.9 resolution: "@babel/core@npm:7.12.9" @@ -284,7 +411,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.15.5, @babel/core@npm:^7.16.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.15.5, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": version: 7.17.5 resolution: "@babel/core@npm:7.17.5" dependencies: @@ -307,7 +434,30 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.16.0, @babel/generator@npm:^7.17.3, @babel/generator@npm:^7.7.2": +"@babel/core@npm:^7.16.0": + version: 7.18.2 + resolution: "@babel/core@npm:7.18.2" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.18.2 + "@babel/helper-compilation-targets": ^7.18.2 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helpers": ^7.18.2 + "@babel/parser": ^7.18.0 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.18.2 + "@babel/types": ^7.18.2 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 14a4142c12e004cd2477b7610408d5788ee5dd821ee9e4de204cbb72d9c399d858d9deabc3d49914d5d7c2927548160c19bdc7524b1a9f6acc1ec96a8d9848dd + languageName: node + linkType: hard + +"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.17.3, @babel/generator@npm:^7.7.2": version: 7.17.3 resolution: "@babel/generator@npm:7.17.3" dependencies: @@ -318,6 +468,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.16.0, @babel/generator@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/generator@npm:7.18.2" + dependencies: + "@babel/types": ^7.18.2 + "@jridgewell/gen-mapping": ^0.3.0 + jsesc: ^2.5.1 + checksum: d0661e95532ddd97566d41fec26355a7b28d1cbc4df95fe80cc084c413342935911b48db20910708db39714844ddd614f61c2ec4cca3fb10181418bdcaa2e7a3 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-annotate-as-pure@npm:7.16.7" @@ -351,6 +512,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.17.10, @babel/helper-compilation-targets@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-compilation-targets@npm:7.18.2" + dependencies: + "@babel/compat-data": ^7.17.10 + "@babel/helper-validator-option": ^7.16.7 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4f02e79f20c0b3f8db5049ba8c35027c41ccb3fc7884835d04e49886538e0f55702959db1bb75213c94a5708fec2dc81a443047559a4f184abb884c72c0059b4 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.16.10, @babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.6": version: 7.17.6 resolution: "@babel/helper-create-class-features-plugin@npm:7.17.6" @@ -368,6 +543,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.17.12, @babel/helper-create-class-features-plugin@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.17.9 + "@babel/helper-member-expression-to-functions": ^7.17.7 + "@babel/helper-optimise-call-expression": ^7.16.7 + "@babel/helper-replace-supers": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 9a6ef175350f1cf87abe7a738e8c9b603da7fcdb153c74e49af509183f8705278020baddb62a12c7f9ca059487fef97d75a4adea6a1446598ad9901d010e4296 + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.16.7": version: 7.17.0 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.17.0" @@ -380,6 +572,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.17.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + regexpu-core: ^5.0.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: fe49d26b0f6c58d4c1748a4d0e98b343882b428e6db43c4ba5e0aa7ff2296b3a557f0a88de9f000599bb95640a6c47c0b0c9a952b58c11f61aabb06bcc304329 + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.3.1": version: 0.3.1 resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" @@ -407,6 +611,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-environment-visitor@npm:7.18.2" + checksum: 1a9c8726fad454a082d077952a90f17188e92eabb3de236cb4782c49b39e3f69c327e272b965e9a20ff8abf37d30d03ffa6fd7974625a6c23946f70f7527f5e9 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-explode-assignable-expression@npm:7.16.7" @@ -427,6 +638,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.17.9": + version: 7.17.9 + resolution: "@babel/helper-function-name@npm:7.17.9" + dependencies: + "@babel/template": ^7.16.7 + "@babel/types": ^7.17.0 + checksum: a59b2e5af56d8f43b9b0019939a43774754beb7cb01a211809ca8031c71890999d07739e955343135ec566c4d8ff725435f1f60fb0af3bb546837c1f9f84f496 + languageName: node + linkType: hard + "@babel/helper-get-function-arity@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-get-function-arity@npm:7.16.7" @@ -454,6 +675,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.17.7": + version: 7.17.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.17.7" + dependencies: + "@babel/types": ^7.17.0 + checksum: 70f361bab627396c714c3938e94a569cb0da522179328477cdbc4318e4003c2666387ad4931d6bd5de103338c667c9e4bbe3e917fc8c527b3f3eb6175b888b7d + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-module-imports@npm:7.16.7" @@ -479,6 +709,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/helper-module-transforms@npm:7.18.0" + dependencies: + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-simple-access": ^7.17.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/helper-validator-identifier": ^7.16.7 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.18.0 + "@babel/types": ^7.18.0 + checksum: 824c3967c08d75bb36adc18c31dcafebcd495b75b723e2e17c6185e88daf5c6db62a6a75d9f791b5f38618a349e7cb32503e715a1b9a4e8bad4d0f43e3e6b523 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-optimise-call-expression@npm:7.16.7" @@ -535,6 +781,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.17.7, @babel/helper-simple-access@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-simple-access@npm:7.18.2" + dependencies: + "@babel/types": ^7.18.2 + checksum: c0862b56db7e120754d89273a039b128c27517389f6a4425ff24e49779791e8fe10061579171fb986be81fa076778acb847c709f6f5e396278d9c5e01360c375 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.16.0" @@ -590,6 +845,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helpers@npm:7.18.2" + dependencies: + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.18.2 + "@babel/types": ^7.18.2 + checksum: 94620242f23f6d5f9b83a02b1aa1632ffb05b0815e1bb53d3b46d64aa8e771066bba1db8bd267d9091fb00134cfaeda6a8d69d1d4cc2c89658631adfa077ae70 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.16.7": version: 7.16.10 resolution: "@babel/highlight@npm:7.16.10" @@ -610,6 +876,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.18.0, @babel/parser@npm:^7.18.5": + version: 7.18.5 + resolution: "@babel/parser@npm:7.18.5" + bin: + parser: ./bin/babel-parser.js + checksum: 4976349d8681af215fd5771bd5b74568cc95a2e8bf2afcf354bf46f73f3d6f08d54705f354b1d0012f914dd02a524b7d37c5c1204ccaafccb9db3c37dba96a9b + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.16.7" @@ -621,6 +896,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6ef739b3a2b0ac0b22b60ff472c118163ceb8d414dd08c8186cc563fddc2be62ad4d8681e02074a1c7f0056a72e7146493a85d12ded02e50904b0009ed85d8bf + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.16.7" @@ -634,6 +920,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 + "@babel/plugin-proposal-optional-chaining": ^7.17.12 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 68520a8f26e56bc8d90c22133537a9819e82598e3c82007f30bdaf8898b0e12a7bfa0cd3044aca35a7f362fd6bc04e4cd8052a571fc2eb40ad8f1cf24e0fc45f + languageName: node + linkType: hard + "@babel/plugin-proposal-async-generator-functions@npm:^7.16.8": version: 7.16.8 resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.16.8" @@ -647,6 +946,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-async-generator-functions@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-remap-async-to-generator": ^7.16.8 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 16a3c7f68a27031b4973b7c64ca009873c91b91afd7b3a4694ec7f1c6d8e91a6ee142eafd950113810fae122faa1031de71140333b2b1bd03d5367b1a05b1d91 + languageName: node + linkType: hard + "@babel/plugin-proposal-class-properties@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-class-properties@npm:7.16.7" @@ -659,6 +971,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-class-properties@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-class-properties@npm:7.17.12" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 884df6a4617a18cdc2a630096b2a10954bcc94757c893bb01abd6702fdc73343ca5c611f4884c4634e0608f5e86c3093ea6b973ce00bf21b248ba54de92c837d + languageName: node + linkType: hard + "@babel/plugin-proposal-class-static-block@npm:^7.16.7": version: 7.17.6 resolution: "@babel/plugin-proposal-class-static-block@npm:7.17.6" @@ -672,6 +996,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-class-static-block@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.0" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 70fd622fd7c62cca2aa99c70532766340a5c30105e35cb3f1187b450580d43adc78b3fcb1142ed339bcfccf84be95ea03407adf467331b318ce6874432736c89 + languageName: node + linkType: hard + "@babel/plugin-proposal-dynamic-import@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-dynamic-import@npm:7.16.7" @@ -696,6 +1033,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-export-namespace-from@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41c9cd4c0a5629b65725d2554867c15b199f534cea5538bd1ae379c0d13e7206d8590e23b23cb05a8b243e33e6eb88c1de3fd03a55cdbc6d4cf8634a6bebe43d + languageName: node + linkType: hard + "@babel/plugin-proposal-json-strings@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-json-strings@npm:7.16.7" @@ -708,6 +1057,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-json-strings@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-json-strings@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ed4ee3fbc28e44fac17c48bd95b5b8c3ffc852053a9fffd36ab498ec0b0ba069b8b2f5658edc18332748948433b9d3e1e376f564a1d65cb54592ba9943be09b + languageName: node + linkType: hard + "@babel/plugin-proposal-logical-assignment-operators@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.16.7" @@ -720,6 +1081,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0d48451836219b7beeca4be22a8aeb4a177a4944be4727afb94a4a11f201dde8b0b186dd2ad65b537d61e9af3fa1afda734f7096bec8602debd76d07aa342e21 + languageName: node + linkType: hard + "@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.16.7" @@ -732,6 +1105,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7881d8005d0d4e17a94f3bfbfa4a0d8af016d2f62ed90912fabb8c5f8f0cc0a15fd412f09c230984c40b5c893086987d403c73198ef388ffcb3726ff72efc009 + languageName: node + linkType: hard + "@babel/plugin-proposal-numeric-separator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-numeric-separator@npm:7.16.7" @@ -772,6 +1157,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-object-rest-spread@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.0" + dependencies: + "@babel/compat-data": ^7.17.10 + "@babel/helper-compilation-targets": ^7.17.10 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2b49bcf9a6b11fd8b6a1d4962a64f3c846a63f8340eca9824c907f75bfcff7422ca35b135607fc3ef2d4e7e77ce6b6d955b772dc3c1c39f7ed24a0d8a560ec78 + languageName: node + linkType: hard + "@babel/plugin-proposal-optional-catch-binding@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.16.7" @@ -797,6 +1197,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-optional-chaining@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a27b220573441a0ad3eecf8ddcb249556a64de45add236791d76cfa164a8fd34181857528fa7d21d03d6b004e7c043bd929cce068e611ee1ac72aaf4d397aa12 + languageName: node + linkType: hard + "@babel/plugin-proposal-private-methods@npm:^7.16.11": version: 7.16.11 resolution: "@babel/plugin-proposal-private-methods@npm:7.16.11" @@ -809,13 +1222,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.16.7" +"@babel/plugin-proposal-private-methods@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-private-methods@npm:7.17.12" dependencies: - "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-create-class-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-create-class-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a1e5bd6a0a541af55d133d7bcf51ff8eb4ac7417a30f518c2f38107d7d033a3d5b7128ea5b3a910b458d7ceb296179b6ff9d972be60d1c686113d25fede8bed3 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.16.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-create-class-features-plugin": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 @@ -823,6 +1248,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-private-property-in-object@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.17.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-create-class-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 056cb77994b2ee367301cdf8c5b7ed71faf26d60859bbba1368b342977481b0884712a1b97fbd9b091750162923d0265bf901119d46002775aa66e4a9f30f411 + languageName: node + linkType: hard + "@babel/plugin-proposal-unicode-property-regex@npm:^7.16.7, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": version: 7.16.7 resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.16.7" @@ -835,6 +1274,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-unicode-property-regex@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.17.12" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0e4194510415ed11849f1617fcb32d996df746ba93cd05ebbabecb63cfc02c0e97b585c97da3dcf68acdd3c8b71cfae964abe5d5baba6bd3977a475d9225ad9e + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -901,6 +1352,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fef25c3247d18dc7b8e432ed07f4afb92d70113fcfc3db0ca52388f8083b4bd60f88fe9ec0085e8a5a6daf18a619042376e76e2b4bd9470cddb7362cd268bea5 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" @@ -934,7 +1396,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.12.13, @babel/plugin-syntax-jsx@npm:^7.16.7": +"@babel/plugin-syntax-jsx@npm:^7.12.13, @babel/plugin-syntax-jsx@npm:^7.16.7, @babel/plugin-syntax-jsx@npm:^7.17.12": version: 7.17.12 resolution: "@babel/plugin-syntax-jsx@npm:7.17.12" dependencies: @@ -1044,6 +1506,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-syntax-typescript@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 50ab09f1953a2b0586cff9e29bf7cea3d886b48c1361a861687c2aef46356c6d73778c3341b0c051dc82a34417f19e9d759ae918353c5a98d25e85f2f6d24181 + languageName: node + linkType: hard + "@babel/plugin-transform-arrow-functions@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" @@ -1055,6 +1528,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-arrow-functions@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 48f99e74f523641696d5d9fb3f5f02497eca2e97bc0e9b8230a47f388e37dc5fd84b8b29e9f5a0c82d63403f7ba5f085a28e26939678f6e917d5c01afd884b50 + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.16.8": version: 7.16.8 resolution: "@babel/plugin-transform-async-to-generator@npm:7.16.8" @@ -1068,6 +1552,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-to-generator@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.17.12" + dependencies: + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-remap-async-to-generator": ^7.16.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 052dd56eb3b10bc31f5aaced0f75fc7307713f74049ccfb91cd087bebfc890a6d462b59445c5299faaca9030814172cac290c941c76b731a38dcb267377c9187 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.16.7" @@ -1090,6 +1587,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-block-scoping@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ea3d4d88e38367d62a1029d204c5cc0ac410b00779179c8507448001c64784bf8e34c6fa57f23d8b95a835541a2fc67d1076650b1efc99c78f699de354472e49 + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-classes@npm:7.16.7" @@ -1108,6 +1616,24 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-classes@npm:7.17.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.17.9 + "@babel/helper-optimise-call-expression": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-replace-supers": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0127b1cc432373965edf28cbfd9e85df5bc77e974ceb80ba32691e050e8fb6792f207d1941529c81d1b9e7a6e82da26ecc445f6f547f0ad5076cd2b27adc18ac + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-computed-properties@npm:7.16.7" @@ -1119,6 +1645,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-computed-properties@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-computed-properties@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5d05418617e0967bec4818556b7febb6f8c40813e32035f0bd6b7dbd7b9d63e9ab7c7c8fd7bd05bab2a599dad58e7b69957d9559b41079d112c219bbc3649aa1 + languageName: node + linkType: hard + "@babel/plugin-transform-destructuring@npm:^7.16.7": version: 7.17.3 resolution: "@babel/plugin-transform-destructuring@npm:7.17.3" @@ -1130,6 +1667,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.0" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d85d60737c3b05c4db71bc94270e952122d360bd6ebf91b5f98cf16fb8564558b615d115354fe0ef41e2aae9c4540e6e16144284d881ecaef687693736cd2a79 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.16.7, @babel/plugin-transform-dotall-regex@npm:^7.4.4": version: 7.16.7 resolution: "@babel/plugin-transform-dotall-regex@npm:7.16.7" @@ -1153,6 +1701,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-keys@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fb6ad550538830b0dc5b1b547734359f2d782209570e9d61fe9b84a6929af570fcc38ab579a67ee7cd6a832147db91a527f4cceb1248974f006fe815980816bb + languageName: node + linkType: hard + "@babel/plugin-transform-exponentiation-operator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.16.7" @@ -1176,6 +1735,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-for-of@npm:^7.18.1": + version: 7.18.1 + resolution: "@babel/plugin-transform-for-of@npm:7.18.1" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cdc6e1f1170218cc6ac5b26b4b8f011ec5c36666101e00e0061aaa5772969b093bad5b2af8ce908c184126d5bb0c26b89dd4debb96b2375aba2e20e427a623a8 + languageName: node + linkType: hard + "@babel/plugin-transform-function-name@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-function-name@npm:7.16.7" @@ -1200,6 +1770,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-literals@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 09280fc1ed23b81deafd4fcd7a35d6c0944668de2317f14c1b8b78c5c201f71a063bb8d174d2fc97d86df480ff23104c8919d3aacf19f33c2b5ada584203bf1c + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.16.7" @@ -1224,6 +1805,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-amd@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-modules-amd@npm:7.18.0" + dependencies: + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bed3ff5cd81f236981360fc4a6fd2262685c1202772c657ce3ab95b7930437f8fa22361021b481c977b6f47988dfcc07c7782a1c91b90d3a5552c91401f4631a + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.16.8": version: 7.16.8 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.16.8" @@ -1238,6 +1832,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.2" + dependencies: + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-simple-access": ^7.18.2 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 99c1c5ce9c353e29eb680ebb5bdf27c076c6403e133a066999298de642423cc7f38cfbac02372d33ed73278da13be23c4be7d60169c3e27bd900a373e61a599a + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.16.7" @@ -1253,6 +1861,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.0" + dependencies: + "@babel/helper-hoist-variables": ^7.16.7 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-validator-identifier": ^7.16.7 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 80fccfc546aab76238d3f4aeb454f61ed885670578f1ab6dc063bba5b5d4cbdf821439ac6ca8bc24449eed752359600b47be717196103d2eabba06de1bf3f732 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-modules-umd@npm:7.16.7" @@ -1265,6 +1888,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-umd@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-modules-umd@npm:7.18.0" + dependencies: + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4081a79cfd4c6fda785c2137f9f2721e35c06a9d2f23c304172838d12e9317a24d3cb5b652a9db61e58319b370c57b1b44991429efe709679f98e114d98597fb + languageName: node + linkType: hard + "@babel/plugin-transform-named-capturing-groups-regex@npm:^7.16.8": version: 7.16.8 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.16.8" @@ -1276,6 +1911,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.17.12" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: cff9d91d0abd87871da6574583e79093ed75d5faecea45b6a13350ba243b1a595d349a6e7d906f5dfdf6c69c643cba9df662c3d01eaa187c5b1a01cb5838e848 + languageName: node + linkType: hard + "@babel/plugin-transform-new-target@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-new-target@npm:7.16.7" @@ -1287,6 +1934,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-new-target@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-new-target@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bec26350fa49c9a9431d23b4ff234f8eb60554b8cdffca432a94038406aae5701014f343568c0e0cc8afae6f95d492f6bae0d0e2c101c1a484fb20eec75b2c07 + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-object-super@npm:7.16.7" @@ -1310,6 +1968,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-parameters@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d9ed5ec61dc460835bade8fa710b42ec9f207bd448ead7e8abd46b87db0afedbb3f51284700fd2a6892fdf6544ec9b949c505c6542c5ba0a41ca4e8749af00f0 + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-property-literals@npm:7.16.7" @@ -1369,6 +2038,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-react-jsx@npm:7.17.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-jsx": ^7.17.12 + "@babel/types": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 02e9974d14821173bb8e84db4bdfccd546bfdbf445d91d6345f953591f16306cf5741861d72e0d0910f3ffa7d4084fafed99cedf736e7ba8bed0cf64320c2ea6 + languageName: node + linkType: hard + "@babel/plugin-transform-react-pure-annotations@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.16.7" @@ -1392,6 +2076,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-regenerator@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.18.0" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + regenerator-transform: ^0.15.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ebacf2bbe9e2fb6f2bd7996e19b41bfc9848628950ae06a1a832802a0b8e32a32003c6b89318da6ca521f79045c91324dcb4c97247ed56f86fa58d7401a7316f + languageName: node + linkType: hard + "@babel/plugin-transform-reserved-words@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-reserved-words@npm:7.16.7" @@ -1403,19 +2099,30 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-reserved-words@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-reserved-words@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d8a617cb79ca5852ac2736a9f81c15a3b0760919720c3b9069a864e2288006ebcaab557dbb36a3eba936defd6699f82e3bf894915925aa9185f5d9bcbf3b29fd + languageName: node + linkType: hard + "@babel/plugin-transform-runtime@npm:^7.16.0": - version: 7.17.0 - resolution: "@babel/plugin-transform-runtime@npm:7.17.0" + version: 7.18.2 + resolution: "@babel/plugin-transform-runtime@npm:7.18.2" dependencies: "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 babel-plugin-polyfill-corejs2: ^0.3.0 babel-plugin-polyfill-corejs3: ^0.5.0 babel-plugin-polyfill-regenerator: ^0.3.0 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9a469d4389cb265d50f1e83e6b524ceda7abd24a0bd7cda57e54a1e6103ca7c36efc99eebd485cf0a468f048739e21d940126df40b11db34f4692bdd2d5beacd + checksum: 2f41b3a9213ddb795de0f7598e9e6dfe20781bab4346e34585f2ceab187dac03860db6e41c4819fb3ddb51111ee910c8b45971d6e886cd715e06ba0f3ea19481 languageName: node linkType: hard @@ -1442,6 +2149,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-spread@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-spread@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a95e4f163d598c0efc9d983e5ce3e8716998dd2af62af8102b11cb8d6383c71b74c7106adbce73cda6e48d3d3e927627847d36d76c2eb688cd0e2e07f67fb51 + languageName: node + linkType: hard + "@babel/plugin-transform-sticky-regex@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-sticky-regex@npm:7.16.7" @@ -1464,6 +2183,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-template-literals@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/plugin-transform-template-literals@npm:7.18.2" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bc0102ed8c789e5bc01053088e2de85b82cebcd4d57af9fdc32ca62f559d3dd19c33e9d26caa71c5fd8e94152e5ce4fc4da19badc2d537620e6dea83bce7eb05 + languageName: node + linkType: hard + "@babel/plugin-transform-typeof-symbol@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.16.7" @@ -1475,6 +2205,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e30bd03c8abc1b095f8b2a10289df6850e3bc3cd0aea1cbc29050aa3b421cbb77d0428b0cd012333632a7a930dc8301cd888e762b2dd601e7dc5dac50f4140c9 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.16.7": version: 7.16.8 resolution: "@babel/plugin-transform-typescript@npm:7.16.8" @@ -1488,6 +2229,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.17.12": + version: 7.18.1 + resolution: "@babel/plugin-transform-typescript@npm:7.18.1" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-typescript": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3edc35769662bdff85da8cdfca65c79a03e856834bb0884e13740bb2d723781b7a6dae083496e64330f28d331b266961c558316ac7d92acc9c589fcc7b12df11 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.16.7" @@ -1511,7 +2265,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.15.6, @babel/preset-env@npm:^7.16.4": +"@babel/preset-env@npm:^7.15.6": version: 7.16.11 resolution: "@babel/preset-env@npm:7.16.11" dependencies: @@ -1530,17 +2284,102 @@ __metadata: "@babel/plugin-proposal-logical-assignment-operators": ^7.16.7 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.16.7 "@babel/plugin-proposal-numeric-separator": ^7.16.7 - "@babel/plugin-proposal-object-rest-spread": ^7.16.7 + "@babel/plugin-proposal-object-rest-spread": ^7.16.7 + "@babel/plugin-proposal-optional-catch-binding": ^7.16.7 + "@babel/plugin-proposal-optional-chaining": ^7.16.7 + "@babel/plugin-proposal-private-methods": ^7.16.11 + "@babel/plugin-proposal-private-property-in-object": ^7.16.7 + "@babel/plugin-proposal-unicode-property-regex": ^7.16.7 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-transform-arrow-functions": ^7.16.7 + "@babel/plugin-transform-async-to-generator": ^7.16.8 + "@babel/plugin-transform-block-scoped-functions": ^7.16.7 + "@babel/plugin-transform-block-scoping": ^7.16.7 + "@babel/plugin-transform-classes": ^7.16.7 + "@babel/plugin-transform-computed-properties": ^7.16.7 + "@babel/plugin-transform-destructuring": ^7.16.7 + "@babel/plugin-transform-dotall-regex": ^7.16.7 + "@babel/plugin-transform-duplicate-keys": ^7.16.7 + "@babel/plugin-transform-exponentiation-operator": ^7.16.7 + "@babel/plugin-transform-for-of": ^7.16.7 + "@babel/plugin-transform-function-name": ^7.16.7 + "@babel/plugin-transform-literals": ^7.16.7 + "@babel/plugin-transform-member-expression-literals": ^7.16.7 + "@babel/plugin-transform-modules-amd": ^7.16.7 + "@babel/plugin-transform-modules-commonjs": ^7.16.8 + "@babel/plugin-transform-modules-systemjs": ^7.16.7 + "@babel/plugin-transform-modules-umd": ^7.16.7 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.16.8 + "@babel/plugin-transform-new-target": ^7.16.7 + "@babel/plugin-transform-object-super": ^7.16.7 + "@babel/plugin-transform-parameters": ^7.16.7 + "@babel/plugin-transform-property-literals": ^7.16.7 + "@babel/plugin-transform-regenerator": ^7.16.7 + "@babel/plugin-transform-reserved-words": ^7.16.7 + "@babel/plugin-transform-shorthand-properties": ^7.16.7 + "@babel/plugin-transform-spread": ^7.16.7 + "@babel/plugin-transform-sticky-regex": ^7.16.7 + "@babel/plugin-transform-template-literals": ^7.16.7 + "@babel/plugin-transform-typeof-symbol": ^7.16.7 + "@babel/plugin-transform-unicode-escapes": ^7.16.7 + "@babel/plugin-transform-unicode-regex": ^7.16.7 + "@babel/preset-modules": ^0.1.5 + "@babel/types": ^7.16.8 + babel-plugin-polyfill-corejs2: ^0.3.0 + babel-plugin-polyfill-corejs3: ^0.5.0 + babel-plugin-polyfill-regenerator: ^0.3.0 + core-js-compat: ^3.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c8029c272073df787309d983ae458dd094b57f87152b8ccad95c7c8b1e82b042c1077e169538aae5f98b7659de0632d10708d9c85acf21a5e9406d7dd3656d8c + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.16.4": + version: 7.18.2 + resolution: "@babel/preset-env@npm:7.18.2" + dependencies: + "@babel/compat-data": ^7.17.10 + "@babel/helper-compilation-targets": ^7.18.2 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-validator-option": ^7.16.7 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.17.12 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.17.12 + "@babel/plugin-proposal-async-generator-functions": ^7.17.12 + "@babel/plugin-proposal-class-properties": ^7.17.12 + "@babel/plugin-proposal-class-static-block": ^7.18.0 + "@babel/plugin-proposal-dynamic-import": ^7.16.7 + "@babel/plugin-proposal-export-namespace-from": ^7.17.12 + "@babel/plugin-proposal-json-strings": ^7.17.12 + "@babel/plugin-proposal-logical-assignment-operators": ^7.17.12 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.17.12 + "@babel/plugin-proposal-numeric-separator": ^7.16.7 + "@babel/plugin-proposal-object-rest-spread": ^7.18.0 "@babel/plugin-proposal-optional-catch-binding": ^7.16.7 - "@babel/plugin-proposal-optional-chaining": ^7.16.7 - "@babel/plugin-proposal-private-methods": ^7.16.11 - "@babel/plugin-proposal-private-property-in-object": ^7.16.7 - "@babel/plugin-proposal-unicode-property-regex": ^7.16.7 + "@babel/plugin-proposal-optional-chaining": ^7.17.12 + "@babel/plugin-proposal-private-methods": ^7.17.12 + "@babel/plugin-proposal-private-property-in-object": ^7.17.12 + "@babel/plugin-proposal-unicode-property-regex": ^7.17.12 "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-class-properties": ^7.12.13 "@babel/plugin-syntax-class-static-block": ^7.14.5 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.17.12 "@babel/plugin-syntax-json-strings": ^7.8.3 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 @@ -1550,48 +2389,48 @@ __metadata: "@babel/plugin-syntax-optional-chaining": ^7.8.3 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-transform-arrow-functions": ^7.16.7 - "@babel/plugin-transform-async-to-generator": ^7.16.8 + "@babel/plugin-transform-arrow-functions": ^7.17.12 + "@babel/plugin-transform-async-to-generator": ^7.17.12 "@babel/plugin-transform-block-scoped-functions": ^7.16.7 - "@babel/plugin-transform-block-scoping": ^7.16.7 - "@babel/plugin-transform-classes": ^7.16.7 - "@babel/plugin-transform-computed-properties": ^7.16.7 - "@babel/plugin-transform-destructuring": ^7.16.7 + "@babel/plugin-transform-block-scoping": ^7.17.12 + "@babel/plugin-transform-classes": ^7.17.12 + "@babel/plugin-transform-computed-properties": ^7.17.12 + "@babel/plugin-transform-destructuring": ^7.18.0 "@babel/plugin-transform-dotall-regex": ^7.16.7 - "@babel/plugin-transform-duplicate-keys": ^7.16.7 + "@babel/plugin-transform-duplicate-keys": ^7.17.12 "@babel/plugin-transform-exponentiation-operator": ^7.16.7 - "@babel/plugin-transform-for-of": ^7.16.7 + "@babel/plugin-transform-for-of": ^7.18.1 "@babel/plugin-transform-function-name": ^7.16.7 - "@babel/plugin-transform-literals": ^7.16.7 + "@babel/plugin-transform-literals": ^7.17.12 "@babel/plugin-transform-member-expression-literals": ^7.16.7 - "@babel/plugin-transform-modules-amd": ^7.16.7 - "@babel/plugin-transform-modules-commonjs": ^7.16.8 - "@babel/plugin-transform-modules-systemjs": ^7.16.7 - "@babel/plugin-transform-modules-umd": ^7.16.7 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.16.8 - "@babel/plugin-transform-new-target": ^7.16.7 + "@babel/plugin-transform-modules-amd": ^7.18.0 + "@babel/plugin-transform-modules-commonjs": ^7.18.2 + "@babel/plugin-transform-modules-systemjs": ^7.18.0 + "@babel/plugin-transform-modules-umd": ^7.18.0 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.17.12 + "@babel/plugin-transform-new-target": ^7.17.12 "@babel/plugin-transform-object-super": ^7.16.7 - "@babel/plugin-transform-parameters": ^7.16.7 + "@babel/plugin-transform-parameters": ^7.17.12 "@babel/plugin-transform-property-literals": ^7.16.7 - "@babel/plugin-transform-regenerator": ^7.16.7 - "@babel/plugin-transform-reserved-words": ^7.16.7 + "@babel/plugin-transform-regenerator": ^7.18.0 + "@babel/plugin-transform-reserved-words": ^7.17.12 "@babel/plugin-transform-shorthand-properties": ^7.16.7 - "@babel/plugin-transform-spread": ^7.16.7 + "@babel/plugin-transform-spread": ^7.17.12 "@babel/plugin-transform-sticky-regex": ^7.16.7 - "@babel/plugin-transform-template-literals": ^7.16.7 - "@babel/plugin-transform-typeof-symbol": ^7.16.7 + "@babel/plugin-transform-template-literals": ^7.18.2 + "@babel/plugin-transform-typeof-symbol": ^7.17.12 "@babel/plugin-transform-unicode-escapes": ^7.16.7 "@babel/plugin-transform-unicode-regex": ^7.16.7 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.16.8 + "@babel/types": ^7.18.2 babel-plugin-polyfill-corejs2: ^0.3.0 babel-plugin-polyfill-corejs3: ^0.5.0 babel-plugin-polyfill-regenerator: ^0.3.0 - core-js-compat: ^3.20.2 + core-js-compat: ^3.22.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c8029c272073df787309d983ae458dd094b57f87152b8ccad95c7c8b1e82b042c1077e169538aae5f98b7659de0632d10708d9c85acf21a5e9406d7dd3656d8c + checksum: f81892a7970cb34643b93917cbbc9b581d5066d892639867521f4a85ec258e69362a37bbb7b899b351e71d26095a97cd2d6e35e5f9ee110715146e0ccc19e700 languageName: node linkType: hard @@ -1610,7 +2449,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.14.5, @babel/preset-react@npm:^7.16.0": +"@babel/preset-react@npm:^7.14.5": version: 7.16.7 resolution: "@babel/preset-react@npm:7.16.7" dependencies: @@ -1626,7 +2465,23 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.15.0, @babel/preset-typescript@npm:^7.16.0": +"@babel/preset-react@npm:^7.16.0": + version: 7.17.12 + resolution: "@babel/preset-react@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-validator-option": ^7.16.7 + "@babel/plugin-transform-react-display-name": ^7.16.7 + "@babel/plugin-transform-react-jsx": ^7.17.12 + "@babel/plugin-transform-react-jsx-development": ^7.16.7 + "@babel/plugin-transform-react-pure-annotations": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 369712150d6a152720069db8d024320f3d9d2a6611e9b0be4aa03dcab8502fa0e9efc0693c93ba2d818d5243c9d03b015163d76efe65df600f15b9b0a206f674 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.15.0": version: 7.16.7 resolution: "@babel/preset-typescript@npm:7.16.7" dependencies: @@ -1639,7 +2494,20 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.16.3, @babel/runtime-corejs3@npm:^7.16.8": +"@babel/preset-typescript@npm:^7.16.0": + version: 7.17.12 + resolution: "@babel/preset-typescript@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-validator-option": ^7.16.7 + "@babel/plugin-transform-typescript": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f4ee9eeb0ef631a47d1c9bd7f6e365ae0bacefa3f47c702b03c51652ea764c267b26fdcf2814718b26c73accdd0fff7fcec1bb2d00625a967ecd7dac2f5fdce1 + languageName: node + linkType: hard + +"@babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.16.8": version: 7.17.2 resolution: "@babel/runtime-corejs3@npm:7.17.2" dependencies: @@ -1649,7 +2517,17 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime-corejs3@npm:^7.16.3": + version: 7.18.3 + resolution: "@babel/runtime-corejs3@npm:7.18.3" + dependencies: + core-js-pure: ^3.20.2 + regenerator-runtime: ^0.13.4 + checksum: 50319e107e4c3dc6662404daf1079ab1ecd1cb232577bf50e645c5051fa8977f6ce48a44aa1d158ce2beaec76a43df4fc404999bf4f03c66719c3f8b8fe50a4e + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.18.0 resolution: "@babel/runtime@npm:7.18.0" dependencies: @@ -1658,6 +2536,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.16.3": + version: 7.18.3 + resolution: "@babel/runtime@npm:7.18.3" + dependencies: + regenerator-runtime: ^0.13.4 + checksum: db8526226aa02cfa35a5a7ac1a34b5f303c62a1f000c7db48cb06c6290e616483e5036ab3c4e7a84d0f3be6d4e2148d5fe5cec9564bf955f505c3e764b83d7f1 + languageName: node + linkType: hard + "@babel/template@npm:^7.12.7, @babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": version: 7.16.7 resolution: "@babel/template@npm:7.16.7" @@ -1669,7 +2556,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.16.3, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.0, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.0, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.7.2": version: 7.17.3 resolution: "@babel/traverse@npm:7.17.3" dependencies: @@ -1687,6 +2574,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.16.3, @babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2": + version: 7.18.5 + resolution: "@babel/traverse@npm:7.18.5" + dependencies: + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.18.2 + "@babel/helper-environment-visitor": ^7.18.2 + "@babel/helper-function-name": ^7.17.9 + "@babel/helper-hoist-variables": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/parser": ^7.18.5 + "@babel/types": ^7.18.4 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: cc0470c880e15a748ca3424665c65836dba450fd0331fb28f9d30aa42acd06387b6321996517ab1761213f781fe8d657e2c3ad67c34afcb766d50653b393810f + languageName: node + linkType: hard + "@babel/types@npm:7.17.10, @babel/types@npm:^7.0.0, @babel/types@npm:^7.12.7, @babel/types@npm:^7.15.6, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.17.10 resolution: "@babel/types@npm:7.17.10" @@ -1697,6 +2602,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.17.12, @babel/types@npm:^7.18.0, @babel/types@npm:^7.18.2, @babel/types@npm:^7.18.4": + version: 7.18.4 + resolution: "@babel/types@npm:7.18.4" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 85df59beb99c1b95e9e41590442f2ffa1e5b1b558d025489db40c9f7c906bd03a17da26c3ec486e5800e80af27c42ca7eee9506d9212ab17766d2d68d30fbf52 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1981,26 +2896,25 @@ __metadata: languageName: node linkType: hard -"@docsearch/css@npm:3.0.0": - version: 3.0.0 - resolution: "@docsearch/css@npm:3.0.0" - checksum: 1a02fb808369908f9ae0174cd18fd152fa1cbebe5725d197fd52588696794ecfd384c504c09be55926cc2b36360173216365b46aae72769d581496d0418a0f16 +"@docsearch/css@npm:3.1.0": + version: 3.1.0 + resolution: "@docsearch/css@npm:3.1.0" + checksum: 05e6ed291e47fed4382790aec726317e37418ee4a600b64525a30a6cf54c187bb35ab0fd24fadad0125b8ceb66cb58d456992666d78233bfd8bce29ebe64b599 languageName: node linkType: hard "@docsearch/react@npm:^3.0.0-alpha.39": - version: 3.0.0 - resolution: "@docsearch/react@npm:3.0.0" + version: 3.1.0 + resolution: "@docsearch/react@npm:3.1.0" dependencies: - "@algolia/autocomplete-core": 1.5.2 - "@algolia/autocomplete-preset-algolia": 1.5.2 - "@docsearch/css": 3.0.0 + "@algolia/autocomplete-core": 1.6.3 + "@docsearch/css": 3.1.0 algoliasearch: ^4.0.0 peerDependencies: - "@types/react": ">= 16.8.0 < 18.0.0" - react: ">= 16.8.0 < 18.0.0" - react-dom: ">= 16.8.0 < 18.0.0" - checksum: 965ce14e4df8b63d32235d79a35241c40cbaa2e87f6513bf86d79467cb3940b8ba1111ec0a37c5e9f5a27d10b2d7f6a2b1e73910320091dbf3331dac9be8c52e + "@types/react": ">= 16.8.0 < 19.0.0" + react: ">= 16.8.0 < 19.0.0" + react-dom: ">= 16.8.0 < 19.0.0" + checksum: d812fd68e1274281e1cedeba2414e33b568488b00ac77c6d27dc36c49cee7bb6f8945e438fece937e9613c3e0f2cceb02c09bd3b11c104f14a876c429dfb6377 languageName: node linkType: hard @@ -2154,19 +3068,6 @@ __metadata: languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:2.0.0-beta.15": - version: 2.0.0-beta.15 - resolution: "@docusaurus/module-type-aliases@npm:2.0.0-beta.15" - dependencies: - "@docusaurus/types": 2.0.0-beta.15 - "@types/react": "*" - "@types/react-helmet": "*" - "@types/react-router-config": "*" - "@types/react-router-dom": "*" - checksum: dd7d3de46a6886d3e367b31d0107eef7a5ffc54acae557625e6fb937619152ddbabafd774ffa6beb7783e039b09a3b916655393ca1a09d3d8e36a75c12e2c569 - languageName: node - linkType: hard - "@docusaurus/plugin-content-blog@npm:2.0.0-beta.14": version: 2.0.0-beta.14 resolution: "@docusaurus/plugin-content-blog@npm:2.0.0-beta.14" @@ -2751,13 +3652,6 @@ __metadata: languageName: node linkType: hard -"@isaacs/string-locale-compare@npm:*, @isaacs/string-locale-compare@npm:^1.1.0": - version: 1.1.0 - resolution: "@isaacs/string-locale-compare@npm:1.1.0" - checksum: 7287da5d11497b82c542d3c2abe534808015be4f4883e71c26853277b5456f6bbe4108535db847a29f385ad6dc9318ffb0f55ee79bb5f39993233d7dccf8751d - languageName: node - linkType: hard - "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -2979,6 +3873,17 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.0": + version: 0.3.1 + resolution: "@jridgewell/gen-mapping@npm:0.3.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: e9e7bb3335dea9e60872089761d4e8e089597360cdb1af90370e9d53b7d67232c1e0a3ab65fbfef4fc785745193fbc56bff9f3a6cab6c6ce3f15e12b4191f86b + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.0.5 resolution: "@jridgewell/resolve-uri@npm:3.0.5" @@ -2986,6 +3891,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.0.0": + version: 1.1.1 + resolution: "@jridgewell/set-array@npm:1.1.1" + checksum: cc5d91e0381c347e3edee4ca90b3c292df9e6e55f29acbe0dd97de8651b4730e9ab761406fd572effa79972a0edc55647b627f8c72315e276d959508853d9bf2 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.11 resolution: "@jridgewell/sourcemap-codec@npm:1.4.11" @@ -3003,6 +3915,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.13 + resolution: "@jridgewell/trace-mapping@npm:0.3.13" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: e38254e830472248ca10a6ed1ae75af5e8514f0680245a5e7b53bc3c030fd8691d4d3115d80595b45d3badead68269769ed47ecbbdd67db1343a11f05700e75a + languageName: node + linkType: hard + "@jsdevtools/ono@npm:^7.1.3": version: 7.1.3 resolution: "@jsdevtools/ono@npm:7.1.3" @@ -3534,82 +4456,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/arborist@npm:*, @npmcli/arborist@npm:^5.0.0": - version: 5.0.0 - resolution: "@npmcli/arborist@npm:5.0.0" - dependencies: - "@isaacs/string-locale-compare": ^1.1.0 - "@npmcli/installed-package-contents": ^1.0.7 - "@npmcli/map-workspaces": ^2.0.0 - "@npmcli/metavuln-calculator": ^3.0.0 - "@npmcli/move-file": ^1.1.0 - "@npmcli/name-from-folder": ^1.0.1 - "@npmcli/node-gyp": ^1.0.3 - "@npmcli/package-json": ^1.0.1 - "@npmcli/run-script": ^3.0.0 - bin-links: ^3.0.0 - cacache: ^15.0.3 - common-ancestor-path: ^1.0.1 - json-parse-even-better-errors: ^2.3.1 - json-stringify-nice: ^1.1.4 - mkdirp: ^1.0.4 - mkdirp-infer-owner: ^2.0.0 - nopt: ^5.0.0 - npm-install-checks: ^4.0.0 - npm-package-arg: ^9.0.0 - npm-pick-manifest: ^7.0.0 - npm-registry-fetch: ^13.0.0 - npmlog: ^6.0.1 - pacote: ^13.0.2 - parse-conflict-json: ^2.0.1 - proc-log: ^2.0.0 - promise-all-reject-late: ^1.0.0 - promise-call-limit: ^1.0.1 - read-package-json-fast: ^2.0.2 - readdir-scoped-modules: ^1.1.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - ssri: ^8.0.1 - treeverse: ^1.0.4 - walk-up-path: ^1.0.0 - bin: - arborist: bin/index.js - checksum: f6f531ac7795ed76ba0f557631199744eb11a829ca2eb613502b3eab12fc8a5c75e5a05138ecd5d318f34aa68151f6a02729431e8fb3603e05020829226fd0fb - languageName: node - linkType: hard - -"@npmcli/ci-detect@npm:*, @npmcli/ci-detect@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/ci-detect@npm:2.0.0" - checksum: 26e964eca908706c1a612915cbc5614860ac7dbfacbb07870396c82b1377794f123a7aaa821c4a68575b67ff7e3ad170e296d3aa6a5e03dbab9b3f1e61491812 - languageName: node - linkType: hard - -"@npmcli/config@npm:*": - version: 4.0.0 - resolution: "@npmcli/config@npm:4.0.0" - dependencies: - "@npmcli/map-workspaces": ^2.0.0 - ini: ^2.0.0 - mkdirp-infer-owner: ^2.0.0 - nopt: ^5.0.0 - proc-log: ^2.0.0 - read-package-json-fast: ^2.0.3 - semver: ^7.3.5 - walk-up-path: ^1.0.0 - checksum: ad07d901fde88a92dc1f39faa5e317ce3985ffe36ae65df7ef101f9b6ea26fa30385b0f6e85f60f477989235e5fe1bf44518359d56fdc6dd68b9b2bbab6b628e - languageName: node - linkType: hard - -"@npmcli/disparity-colors@npm:^1.0.1": - version: 1.0.1 - resolution: "@npmcli/disparity-colors@npm:1.0.1" - dependencies: - ansi-styles: ^4.3.0 - checksum: 20aa252b2d66694050e867da92d8479192a864288c5f47443392ea34d990f6785cc4c0c5f6e89b8c297b1c2765614fc8ffe928050909f1353394d414b9b1115f - languageName: node - linkType: hard - "@npmcli/fs@npm:^1.0.0": version: 1.1.1 resolution: "@npmcli/fs@npm:1.1.1" @@ -3620,60 +4466,7 @@ __metadata: languageName: node linkType: hard -"@npmcli/git@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/git@npm:3.0.0" - dependencies: - "@npmcli/promise-spawn": ^1.3.2 - lru-cache: ^7.3.1 - mkdirp: ^1.0.4 - npm-pick-manifest: ^7.0.0 - proc-log: ^2.0.0 - promise-inflight: ^1.0.1 - promise-retry: ^2.0.1 - semver: ^7.3.5 - which: ^2.0.2 - checksum: 3978020d439fd2cd9a7b00ebdbbefbbe8a81b99399ac9ecdd1984d1a236f1a75fb1292f30f6a94a8f576e34419b7e240954424e68d9d8d9cde49fb8a77a16a1d - languageName: node - linkType: hard - -"@npmcli/installed-package-contents@npm:^1.0.7": - version: 1.0.7 - resolution: "@npmcli/installed-package-contents@npm:1.0.7" - dependencies: - npm-bundled: ^1.1.1 - npm-normalize-package-bin: ^1.0.1 - bin: - installed-package-contents: index.js - checksum: a4a29b99d439827ce2e7817c1f61b56be160e640696e31dc513a2c8a37c792f75cdb6258ec15a1e22904f20df0a8a3019dd3766de5e6619f259834cf64233538 - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:*, @npmcli/map-workspaces@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/map-workspaces@npm:2.0.1" - dependencies: - "@npmcli/name-from-folder": ^1.0.1 - glob: ^7.2.0 - minimatch: ^5.0.0 - read-package-json-fast: ^2.0.3 - checksum: 16c6738e154536580bbca00ededc9e0ed04e008c980319e06b2cdcee055f40f3e9e55c1d51d23a8226aa998d3b4e845e52b658409538880f0f9af403c44c03e8 - languageName: node - linkType: hard - -"@npmcli/metavuln-calculator@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/metavuln-calculator@npm:3.0.0" - dependencies: - cacache: ^15.3.0 - json-parse-even-better-errors: ^2.3.1 - pacote: ^13.0.1 - semver: ^7.3.5 - checksum: 55cdfef295b9731a56244b3f7dcd7188228774bd7c2c5a85bff2f4f6b5c3c8d1bd82a52b04cd2139496201826b8140a70583357fac7a2b592178c8088106577c - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^1.0.1, @npmcli/move-file@npm:^1.1.0": +"@npmcli/move-file@npm:^1.0.1": version: 1.1.2 resolution: "@npmcli/move-file@npm:1.1.2" dependencies: @@ -3683,50 +4476,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/name-from-folder@npm:^1.0.1": - version: 1.0.1 - resolution: "@npmcli/name-from-folder@npm:1.0.1" - checksum: 67339f4096e32b712d2df0250cc95c087569f09e657d7f81a1760fa2cc5123e29c3c3e1524388832310ba2d96ec4679985b643b44627f6a51f4a00c3b0075de9 - languageName: node - linkType: hard - -"@npmcli/node-gyp@npm:^1.0.3": - version: 1.0.3 - resolution: "@npmcli/node-gyp@npm:1.0.3" - checksum: 496d5eef2e90e34bb07e96adbcbbce3dba5370ae87e8c46ff5b28570848f35470c8e008b8f69e50863632783e0a9190e6f55b2e4b049c537142821153942d26a - languageName: node - linkType: hard - -"@npmcli/package-json@npm:*, @npmcli/package-json@npm:^1.0.1": - version: 1.0.1 - resolution: "@npmcli/package-json@npm:1.0.1" - dependencies: - json-parse-even-better-errors: ^2.3.1 - checksum: 08b66c8ddb1d6b678975a83006d2fe5070b3013bcb68ea9d54c0142538a614596ddfd1143183fbb8f82c5cecf477d98f3c4e473ef34df3bbf3814e97e37e18d3 - languageName: node - linkType: hard - -"@npmcli/promise-spawn@npm:^1.2.0, @npmcli/promise-spawn@npm:^1.3.2": - version: 1.3.2 - resolution: "@npmcli/promise-spawn@npm:1.3.2" - dependencies: - infer-owner: ^1.0.4 - checksum: 543b7c1e26230499b4100b10d45efa35b1077e8f25595050f34930ca3310abe9524f7387279fe4330139e0f28a0207595245503439276fd4b686cca2b6503080 - languageName: node - linkType: hard - -"@npmcli/run-script@npm:*, @npmcli/run-script@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/run-script@npm:3.0.0" - dependencies: - "@npmcli/node-gyp": ^1.0.3 - "@npmcli/promise-spawn": ^1.3.2 - node-gyp: ^8.4.1 - read-package-json-fast: ^2.0.3 - checksum: 5bf83ea79d36017d471c6db0607f67d42bdaf5360e1b3fec7985e0ace20b90814188d0b402996f76765d344be4231b1764442998e81944400e944fb85eef3d2b - languageName: node - linkType: hard - "@octokit/auth-token@npm:^2.4.4": version: 2.5.0 resolution: "@octokit/auth-token@npm:2.5.0" @@ -3837,7 +4586,7 @@ __metadata: languageName: node linkType: hard -"@octokit/rest@npm:18.12.0, @octokit/rest@npm:^18.0.0": +"@octokit/rest@npm:18.12.0": version: 18.12.0 resolution: "@octokit/rest@npm:18.12.0" dependencies: @@ -4040,145 +4789,45 @@ __metadata: peerDependencies: react: ^16.9.0 || ^17.0.0 || 18.0.0-beta react-redux: ^7.2.1 || ^8.0.0-beta - peerDependenciesMeta: - react: - optional: true - react-redux: - optional: true - checksum: 41c17c660f7c95d776658b9a101f9803c37589b2c08861e90283abe5fab70f99c37af064fae0c5b7501f67308946fa072504f6a801e272f157b9f7427a5e571e - languageName: node - linkType: hard - -"@release-it/bumper@npm:^3": - version: 3.0.1 - resolution: "@release-it/bumper@npm:3.0.1" - dependencies: - "@iarna/toml": ^2.2.5 - detect-indent: ^6.1.0 - fast-glob: ^3.2.7 - ini: ^2.0.0 - js-yaml: ^4.1.0 - lodash.castarray: ^4.4.0 - lodash.get: ^4.4.2 - lodash.set: ^4.3.2 - mock-fs: ^4.14.0 - semver: ^7.3.5 - peerDependencies: - release-it: ^14.0.0 - checksum: 27a3f04ae08c11d891c8e8b12588c7adde20ea267df5db69f7580689a8bfff829905e384e0931695d73f5ee67ee0ff8bbf8352441957ec317e9953b1dc0b50ff - languageName: node - linkType: hard - -"@release-it/conventional-changelog@npm:^4.3.0": - version: 4.3.0 - resolution: "@release-it/conventional-changelog@npm:4.3.0" - dependencies: - concat-stream: ^2.0.0 - conventional-changelog: ^3.1.25 - conventional-recommended-bump: ^6.1.0 - peerDependencies: - release-it: ^14.12.1 - checksum: 57823757b4f6262551c1fa219cb8319aadec46f835192dbd619ef61e1a64321f43367a78d4d16f95a700056676a725d72d81f8b407693dc41d5ddf32decd6b1b - languageName: node - linkType: hard - -"@semantic-release/commit-analyzer@npm:^9.0.2": - version: 9.0.2 - resolution: "@semantic-release/commit-analyzer@npm:9.0.2" - dependencies: - conventional-changelog-angular: ^5.0.0 - conventional-commits-filter: ^2.0.0 - conventional-commits-parser: ^3.2.3 - debug: ^4.0.0 - import-from: ^4.0.0 - lodash: ^4.17.4 - micromatch: ^4.0.2 - peerDependencies: - semantic-release: ">=18.0.0-beta.1" - checksum: f7f759e608c0c044ba8ec1b3aabad4305ac057cc45156b60a2f8dc355f5193b84ff7c661aefd4522659172f4d6ecf80219b8b28714bd76e4eb32e734b2e6ead9 - languageName: node - linkType: hard - -"@semantic-release/error@npm:^2.2.0": - version: 2.2.0 - resolution: "@semantic-release/error@npm:2.2.0" - checksum: a264a8e16a89e5fcb104ffb2c4339fde3135b90a6d8fe4497a95fe0776a2bf77771d4c702343c47324aefee2e2a2af72f48b5310c84e8a0902fadb631272700f - languageName: node - linkType: hard - -"@semantic-release/error@npm:^3.0.0": - version: 3.0.0 - resolution: "@semantic-release/error@npm:3.0.0" - checksum: 29c4391ecbefd9ea991f8fdf5ab3ceb9c4830281da56d9dbacd945c476cb86f10c3b55cd4a6597098c0ea3a59f1ec4752132abeea633e15972f49f4704e61d35 - languageName: node - linkType: hard - -"@semantic-release/github@npm:^8.0.0": - version: 8.0.2 - resolution: "@semantic-release/github@npm:8.0.2" - dependencies: - "@octokit/rest": ^18.0.0 - "@semantic-release/error": ^2.2.0 - aggregate-error: ^3.0.0 - bottleneck: ^2.18.1 - debug: ^4.0.0 - dir-glob: ^3.0.0 - fs-extra: ^10.0.0 - globby: ^11.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - issue-parser: ^6.0.0 - lodash: ^4.17.4 - mime: ^3.0.0 - p-filter: ^2.0.0 - p-retry: ^4.0.0 - url-join: ^4.0.0 - peerDependencies: - semantic-release: ">=18.0.0-beta.1" - checksum: 260ecf3fc0aaf2dad87ba85aadf779083015b8c413f8526c28cf10a9cc0c0faa72ddc742ea1170c848985f33d5f3adfe67c2a171e658c13d3819253e701a9231 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + checksum: 41c17c660f7c95d776658b9a101f9803c37589b2c08861e90283abe5fab70f99c37af064fae0c5b7501f67308946fa072504f6a801e272f157b9f7427a5e571e languageName: node linkType: hard -"@semantic-release/npm@npm:^9.0.0": - version: 9.0.1 - resolution: "@semantic-release/npm@npm:9.0.1" +"@release-it/bumper@npm:^3": + version: 3.0.1 + resolution: "@release-it/bumper@npm:3.0.1" dependencies: - "@semantic-release/error": ^3.0.0 - aggregate-error: ^3.0.0 - execa: ^5.0.0 - fs-extra: ^10.0.0 - lodash: ^4.17.15 - nerf-dart: ^1.0.0 - normalize-url: ^6.0.0 - npm: ^8.3.0 - rc: ^1.2.8 - read-pkg: ^5.0.0 - registry-auth-token: ^4.0.0 - semver: ^7.1.2 - tempy: ^1.0.0 + "@iarna/toml": ^2.2.5 + detect-indent: ^6.1.0 + fast-glob: ^3.2.7 + ini: ^2.0.0 + js-yaml: ^4.1.0 + lodash.castarray: ^4.4.0 + lodash.get: ^4.4.2 + lodash.set: ^4.3.2 + mock-fs: ^4.14.0 + semver: ^7.3.5 peerDependencies: - semantic-release: ">=19.0.0" - checksum: cd18eab713521566ba9aacaa63c2cf76ba1796d00e3f94579c56a591b21e050340a9021127685d10d55419a6eb0b545842a7a3b785ad10a94449ea32d588ee10 + release-it: ^14.0.0 + checksum: 27a3f04ae08c11d891c8e8b12588c7adde20ea267df5db69f7580689a8bfff829905e384e0931695d73f5ee67ee0ff8bbf8352441957ec317e9953b1dc0b50ff languageName: node linkType: hard -"@semantic-release/release-notes-generator@npm:^10.0.0": - version: 10.0.3 - resolution: "@semantic-release/release-notes-generator@npm:10.0.3" +"@release-it/conventional-changelog@npm:^4.3.0": + version: 4.3.0 + resolution: "@release-it/conventional-changelog@npm:4.3.0" dependencies: - conventional-changelog-angular: ^5.0.0 - conventional-changelog-writer: ^5.0.0 - conventional-commits-filter: ^2.0.0 - conventional-commits-parser: ^3.2.3 - debug: ^4.0.0 - get-stream: ^6.0.0 - import-from: ^4.0.0 - into-stream: ^6.0.0 - lodash: ^4.17.4 - read-pkg-up: ^7.0.0 + concat-stream: ^2.0.0 + conventional-changelog: ^3.1.25 + conventional-recommended-bump: ^6.1.0 peerDependencies: - semantic-release: ">=18.0.0-beta.1" - checksum: 0237e7e6ebf41b7c6a72eea704b007442cfd05910ded7059235a5684a0e4a233b2ca3c3e39923901131e7f0a4dcb5e95737af469081529acc393223c04715505 + release-it: ^14.12.1 + checksum: 57823757b4f6262551c1fa219cb8319aadec46f835192dbd619ef61e1a64321f43367a78d4d16f95a700056676a725d72d81f8b407693dc41d5ddf32decd6b1b languageName: node linkType: hard @@ -4231,15 +4880,14 @@ __metadata: linkType: hard "@slorber/static-site-generator-webpack-plugin@npm:^4.0.0": - version: 4.0.1 - resolution: "@slorber/static-site-generator-webpack-plugin@npm:4.0.1" + version: 4.0.4 + resolution: "@slorber/static-site-generator-webpack-plugin@npm:4.0.4" dependencies: bluebird: ^3.7.1 cheerio: ^0.22.0 - eval: ^0.1.4 - url: ^0.11.0 + eval: ^0.1.8 webpack-sources: ^1.4.3 - checksum: 6ddf70513c869d23044abf74574392c4c98f8a79bcd29a2a07e06b8aca8945dab48eb48a61d7bae7217fe7d9b9ce16abe50fe4b8e75bfa35b4aae4d16c637fd3 + checksum: b6005e5fb306347d18d6823a070f50c59f690f4814fc928b048c8cbd56d00bb19332a4f18ad5824c1af1e9d19ec8b6deb365bd4a63cfcfb062020bda65ae0319 languageName: node linkType: hard @@ -4495,9 +5143,9 @@ __metadata: version: 0.0.0-use.local resolution: "@tktrex/docs@workspace:platforms/tktrex/docs" dependencies: - "@docusaurus/core": 2.0.0-beta.15 - "@docusaurus/module-type-aliases": 2.0.0-beta.15 - "@docusaurus/preset-classic": 2.0.0-beta.15 + "@docusaurus/core": 2.0.0-beta.14 + "@docusaurus/module-type-aliases": 2.0.0-beta.14 + "@docusaurus/preset-classic": 2.0.0-beta.14 "@mdx-js/react": ^1.6.21 "@tsconfig/docusaurus": ^1.0.4 clsx: ^1.1.1 @@ -4542,7 +5190,7 @@ __metadata: react: ^17.0.2 react-dom: ^17.0.2 typescript: ^4.7.2 - webpack: ^5.72.1 + webpack: ^5.73.0 languageName: unknown linkType: soft @@ -4567,6 +5215,7 @@ __metadata: jest: ^27.5.1 linkedom: ^0.14.4 mongodb: ^4.3.1 + ts-endpoint: ^2.0.0 ts-jest: ^27.1.5 ts-node: ^10.8.0 typescript: ^4.7.2 @@ -4597,6 +5246,7 @@ __metadata: "@mdx-js/react": ^1.6.21 "@tsconfig/docusaurus": ^1.0.4 clsx: ^1.1.1 + docusaurus-plugin-openapi: ^0.5.0 docusaurus-preset-openapi: ^0.5.0 prism-react-renderer: ^1.2.1 react: ^17.0.2 @@ -4644,7 +5294,7 @@ __metadata: io-ts: ^2.2.16 io-ts-types: ^0.5.16 jest: ^27.5.1 - mini-css-extract-plugin: ^2.6.0 + mini-css-extract-plugin: ^2.6.1 node-loader: ^2.0.0 node-sass: ^7.0.1 prettier: ^2.6.2 @@ -4652,7 +5302,7 @@ __metadata: react-dom: ^17.0.2 react-i18next: ^11.15.3 react-refresh: ^0.12.0 - react-refresh-typescript: ^2.0.4 + react-refresh-typescript: ^2.0.5 sass-loader: ^12.6.0 style-loader: ^3.3.1 ts-endpoint: ^2.0.0 @@ -4662,9 +5312,9 @@ __metadata: type-fest: ^2.11.1 typelevel-ts: ^0.4.0 typescript: ^4.7.2 - webpack: ^5.72.1 + webpack: ^5.73.0 webpack-bundle-analyzer: ^4.5.0 - webpack-cli: ^4.9.2 + webpack-cli: ^4.10.0 languageName: unknown linkType: soft @@ -4711,10 +5361,10 @@ __metadata: ts-loader: ^9.3.0 typelevel-ts: ^0.4.0 typescript: ^4.7.2 - webpack: ^5.72.1 + webpack: ^5.73.0 webpack-bundle-analyzer: ^4.5.0 - webpack-cli: ^4.9.2 - webpack-dev-server: ^4.9.0 + webpack-cli: ^4.10.0 + webpack-dev-server: ^4.9.2 languageName: unknown linkType: soft @@ -4786,7 +5436,6 @@ __metadata: react-i18next: ^11.15.3 react-test-renderer: ^17.0.2 react-use-clipboard: ^1.0.7 - semantic-release: ^19.0.2 style-loader: ^3.3.1 svgdom: ^0.1.10 swagger-ui: ^4.4.1 @@ -4799,10 +5448,10 @@ __metadata: typescript: ^4.7.2 uuid: ^2.0.3 web-vitals: ^2.1.4 - webpack: ^5.72.1 + webpack: ^5.73.0 webpack-bundle-analyzer: ^4.5.0 - webpack-cli: ^4.9.2 - webpack-dev-server: ^4.9.0 + webpack-cli: ^4.10.0 + webpack-dev-server: ^4.9.2 zenroom: ^2.2.3 languageName: unknown linkType: soft @@ -5894,7 +6543,7 @@ __metadata: languageName: node linkType: hard -"@types/serve-static@npm:*": +"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": version: 1.13.10 resolution: "@types/serve-static@npm:1.13.10" dependencies: @@ -6558,36 +7207,36 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^1.1.1": - version: 1.1.1 - resolution: "@webpack-cli/configtest@npm:1.1.1" +"@webpack-cli/configtest@npm:^1.2.0": + version: 1.2.0 + resolution: "@webpack-cli/configtest@npm:1.2.0" peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x - checksum: c4e7fca21315e487655fbdc7d079092c3f88b274a720d245ca2e13dce7553009fb3f9d82218c33f5c9b208832d72bb4114a9cca97d53b66212eff5da1d3ad44b + checksum: a2726cd9ec601d2b57e5fc15e0ebf5200a8892065e735911269ac2038e62be4bfc176ea1f88c2c46ff09b4d05d4c10ae045e87b3679372483d47da625a327e28 languageName: node linkType: hard -"@webpack-cli/info@npm:^1.4.1": - version: 1.4.1 - resolution: "@webpack-cli/info@npm:1.4.1" +"@webpack-cli/info@npm:^1.5.0": + version: 1.5.0 + resolution: "@webpack-cli/info@npm:1.5.0" dependencies: envinfo: ^7.7.3 peerDependencies: webpack-cli: 4.x.x - checksum: 7a7cac2ba4f2528caa329311599da1685b1bc099bfc5b7210932b7c86024c1277fd7857b08557902b187ea01247a8e8f72f7f5719af72b0c8d97f22087aa0c14 + checksum: 7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296 languageName: node linkType: hard -"@webpack-cli/serve@npm:^1.6.1": - version: 1.6.1 - resolution: "@webpack-cli/serve@npm:1.6.1" +"@webpack-cli/serve@npm:^1.7.0": + version: 1.7.0 + resolution: "@webpack-cli/serve@npm:1.7.0" peerDependencies: webpack-cli: 4.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: 8b273f906aeffa60c7d5700ae25f98d4b66b7e922cad38acb9575d55ff83872cd20b9894aacfa81c4d54e5b51b16253ae0e70c5e9e0608dc8768276e15c74536 + checksum: d475e8effa23eb7ff9a48b14d4de425989fd82f906ce71c210921cc3852327c22873be00c35e181a25a6bd03d424ae2b83e7f3b3f410ac7ee31b128ab4ac7713 languageName: node linkType: hard @@ -6660,6 +7309,23 @@ __metadata: languageName: unknown linkType: soft +"@yttrex/docs@workspace:platforms/yttrex/docs": + version: 0.0.0-use.local + resolution: "@yttrex/docs@workspace:platforms/yttrex/docs" + dependencies: + "@docusaurus/core": 2.0.0-beta.14 + "@docusaurus/module-type-aliases": 2.0.0-beta.14 + "@docusaurus/preset-classic": 2.0.0-beta.14 + "@mdx-js/react": ^1.6.21 + "@tsconfig/docusaurus": ^1.0.4 + clsx: ^1.1.1 + prism-react-renderer: ^1.2.1 + react: ^17.0.2 + react-dom: ^17.0.2 + typescript: ^4.7.2 + languageName: unknown + linkType: soft + "@yttrex/extension@workspace:platforms/yttrex/extension": version: 0.0.0-use.local resolution: "@yttrex/extension@workspace:platforms/yttrex/extension" @@ -6692,7 +7358,7 @@ __metadata: jest-environment-jsdom-global: ^3.1.2 jquery: ^3.6.0 lodash: ^4.17.21 - mini-css-extract-plugin: ^2.6.0 + mini-css-extract-plugin: ^2.6.1 react: ^17.0.2 react-dom: ^17.0.2 sass-loader: ^12.6.0 @@ -6704,9 +7370,9 @@ __metadata: typescript: ^4.7.2 uglifyjs-webpack-plugin: ^2.2.0 uuid: ^2.0.3 - webpack: ^5.72.1 + webpack: ^5.73.0 webpack-combine-loaders: ^2.0.4 - webpack-dev-server: ^4.9.0 + webpack-dev-server: ^4.9.2 webpack-notifier: ^1.15.0 languageName: unknown linkType: soft @@ -6737,6 +7403,7 @@ __metadata: ts-endpoint: ^2.0.0 ts-io-error: ^2.0.0 ts-jest: ^27.1.5 + ts-node: ^10.8.0 tsconfig-paths: ^3.14.1 typescript: ^4.7.2 languageName: unknown @@ -6761,7 +7428,7 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:*, abbrev@npm:1": +"abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 @@ -6912,7 +7579,7 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.2.0": +"agentkeepalive@npm:^4.1.3": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" dependencies: @@ -7013,17 +7680,17 @@ __metadata: linkType: hard "algoliasearch-helper@npm:^3.5.5": - version: 3.7.0 - resolution: "algoliasearch-helper@npm:3.7.0" + version: 3.8.2 + resolution: "algoliasearch-helper@npm:3.8.2" dependencies: "@algolia/events": ^4.0.1 peerDependencies: algoliasearch: ">= 3.1 < 5" - checksum: 34afebf5aa6db2f032b6e8aab7e3a3bdd062ea2eebd9120000dbc02367126ac99e7402ea3cb4e8cdff58df0661805adc52219fd932ed4435fb1058b8e78a61d4 + checksum: fc4daa23f7e237e79f9ba73d732bf54f27be6af8775b1b8cb31741b19783fe73b8fd571fb7312530977fd9fe44184d2a7d11d22cd6fa4a5e3149c54f5bd6ab64 languageName: node linkType: hard -"algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.10.5": +"algoliasearch@npm:^4.0.0": version: 4.12.1 resolution: "algoliasearch@npm:4.12.1" dependencies: @@ -7045,6 +7712,28 @@ __metadata: languageName: node linkType: hard +"algoliasearch@npm:^4.10.5": + version: 4.13.1 + resolution: "algoliasearch@npm:4.13.1" + dependencies: + "@algolia/cache-browser-local-storage": 4.13.1 + "@algolia/cache-common": 4.13.1 + "@algolia/cache-in-memory": 4.13.1 + "@algolia/client-account": 4.13.1 + "@algolia/client-analytics": 4.13.1 + "@algolia/client-common": 4.13.1 + "@algolia/client-personalization": 4.13.1 + "@algolia/client-search": 4.13.1 + "@algolia/logger-common": 4.13.1 + "@algolia/logger-console": 4.13.1 + "@algolia/requester-browser-xhr": 4.13.1 + "@algolia/requester-common": 4.13.1 + "@algolia/requester-node-http": 4.13.1 + "@algolia/transporter": 4.13.1 + checksum: c2083e7827a5d0d980716f9cc129d5136f6205f46019917b7b23a63eb13ec665c029299d14752c12429903af59a0b6f73393d152a0eec409a2cac3b708e25c2c + languageName: node + linkType: hard + "amdefine@npm:>=0.0.4": version: 1.0.1 resolution: "amdefine@npm:1.0.1" @@ -7109,15 +7798,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^5.0.0": - version: 5.0.0 - resolution: "ansi-escapes@npm:5.0.0" - dependencies: - type-fest: ^1.0.2 - checksum: d4b5eb8207df38367945f5dd2ef41e08c28edc192dc766ef18af6b53736682f49d8bfcfa4e4d6ecbc2e2f97c258fda084fb29a9e43b69170b71090f771afccac - languageName: node - linkType: hard - "ansi-html-community@npm:^0.0.8": version: 0.0.8 resolution: "ansi-html-community@npm:0.0.8" @@ -7178,7 +7858,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0, ansi-styles@npm:^4.3.0": +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -7201,20 +7881,6 @@ __metadata: languageName: node linkType: hard -"ansicolors@npm:*, ansicolors@npm:~0.3.2": - version: 0.3.2 - resolution: "ansicolors@npm:0.3.2" - checksum: e84fae7ebc27ac96d9dbb57f35f078cd6dde1b7046b0f03f73dcefc9fbb1f2e82e3685d083466aded8faf038f9fa9ebb408d215282bcd7aaa301d5ac3c486815 - languageName: node - linkType: hard - -"ansistyles@npm:*": - version: 0.1.3 - resolution: "ansistyles@npm:0.1.3" - checksum: 0072507f97e46cc3cb71439f1c0935ceec5c8bca812ebb5034b9f8f6a9ee7d65cdc150c375b8d56643fc8305a08542f6df3a1cd6c80e32eba0b27c4e72da4efd - languageName: node - linkType: hard - "anymatch@npm:^2.0.0": version: 2.0.0 resolution: "anymatch@npm:2.0.0" @@ -7242,9 +7908,9 @@ __metadata: languageName: node linkType: hard -"app-builder-lib@npm:23.0.8": - version: 23.0.8 - resolution: "app-builder-lib@npm:23.0.8" +"app-builder-lib@npm:23.1.0": + version: 23.1.0 + resolution: "app-builder-lib@npm:23.1.0" dependencies: 7zip-bin: ~5.1.1 "@develar/schema-utils": ~2.6.5 @@ -7252,13 +7918,13 @@ __metadata: "@malept/flatpak-bundler": ^0.4.0 async-exit-hook: ^2.0.1 bluebird-lst: ^1.0.9 - builder-util: 23.0.8 + builder-util: 23.0.9 builder-util-runtime: 9.0.2 chromium-pickle-js: ^0.2.0 debug: ^4.3.4 ejs: ^3.1.7 electron-osx-sign: ^0.6.0 - electron-publish: 23.0.8 + electron-publish: 23.0.9 form-data: ^4.0.0 fs-extra: ^10.1.0 hosted-git-info: ^4.1.0 @@ -7272,11 +7938,11 @@ __metadata: semver: ^7.3.7 tar: ^6.1.11 temp-file: ^3.4.0 - checksum: c1f72f86ffa0f69ef91e43ba9792e0b3f90d844ac620dbc64a320e067a172b8b55b276fe3d2174e177ee347fe4cba9bfc12e830792be91893f414bea7fead6a7 + checksum: f88982d3f9d1f9680371fa6a6f28082dcce8b0501432898ab09e70068586aa7c534512c4fdd1cd8b070981ee6c4bfad2c3ce192efee4ee77d896b3ca2635155a languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0, aproba@npm:^2.0.0": +"aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 @@ -7323,13 +7989,6 @@ __metadata: languageName: node linkType: hard -"archy@npm:*": - version: 1.0.0 - resolution: "archy@npm:1.0.0" - checksum: 504ae7af655130bab9f471343cfdb054feaec7d8e300e13348bc9fe9e660f83d422e473069584f73233c701ae37d1c8452ff2522f2a20c38849e0f406f1732ac - languageName: node - linkType: hard - "are-we-there-yet@npm:^2.0.0": version: 2.0.0 resolution: "are-we-there-yet@npm:2.0.0" @@ -7390,13 +8049,6 @@ __metadata: languageName: node linkType: hard -"argv-formatter@npm:~1.0.0": - version: 1.0.0 - resolution: "argv-formatter@npm:1.0.0" - checksum: cf95ea091f4eb0fefdbbc595dbe2e307afee16fc87aad48d72e5e45d5b0b59566dbaa77e45d515242289670904838a501313efffb48ff02f49c6de0c03536a54 - languageName: node - linkType: hard - "aria-query@npm:^5.0.0": version: 5.0.0 resolution: "aria-query@npm:5.0.0" @@ -7768,7 +8420,25 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.3.5, autoprefixer@npm:^10.3.7": +"autoprefixer@npm:^10.3.5": + version: 10.4.7 + resolution: "autoprefixer@npm:10.4.7" + dependencies: + browserslist: ^4.20.3 + caniuse-lite: ^1.0.30001335 + fraction.js: ^4.2.0 + normalize-range: ^0.1.2 + picocolors: ^1.0.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 0e55d0d19806c672ec0c79cc23c27cf77e90edf2600670735266ba33ec5294458f404baaa2f7cd4cfe359cf7a97b3c86f01886bdbdc129a4f2f76ca5977a91af + languageName: node + linkType: hard + +"autoprefixer@npm:^10.3.7": version: 10.4.2 resolution: "autoprefixer@npm:10.4.2" dependencies: @@ -7879,17 +8549,17 @@ __metadata: linkType: hard "babel-loader@npm:^8.2.2": - version: 8.2.3 - resolution: "babel-loader@npm:8.2.3" + version: 8.2.5 + resolution: "babel-loader@npm:8.2.5" dependencies: find-cache-dir: ^3.3.1 - loader-utils: ^1.4.0 + loader-utils: ^2.0.0 make-dir: ^3.1.0 schema-utils: ^2.6.5 peerDependencies: "@babel/core": ^7.0.0 webpack: ">=2" - checksum: 78e1e1a91954d644b6ce66366834d4d245febbc0fde33e4e2831725e83d6e760d12b3a78e9534ce92af69067bef1d9d9674df36d8c1f20ee127bc2354b2203ba + checksum: a6605557885eabbc3250412405f2c63ca87287a95a439c643fdb47d5ea3d5326f72e43ab97be070316998cb685d5dfbc70927ce1abe8be7a6a4f5919287773fb languageName: node linkType: hard @@ -8158,20 +8828,6 @@ __metadata: languageName: node linkType: hard -"bin-links@npm:^3.0.0": - version: 3.0.0 - resolution: "bin-links@npm:3.0.0" - dependencies: - cmd-shim: ^4.0.1 - mkdirp-infer-owner: ^2.0.0 - npm-normalize-package-bin: ^1.0.0 - read-cmd-shim: ^2.0.0 - rimraf: ^3.0.0 - write-file-atomic: ^4.0.0 - checksum: 61cec54a913bf1897c29db1ac277c022cc97a7189a55b2ed7343e75955800e4ec149e76b134f9c685947e37196282d652bf1f9fa893919283827b61ca289b170 - languageName: node - linkType: hard - "binary-extensions@npm:^1.0.0": version: 1.13.1 resolution: "binary-extensions@npm:1.13.1" @@ -8179,7 +8835,7 @@ __metadata: languageName: node linkType: hard -"binary-extensions@npm:^2.0.0, binary-extensions@npm:^2.2.0": +"binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 @@ -8313,13 +8969,6 @@ __metadata: languageName: node linkType: hard -"bottleneck@npm:^2.18.1": - version: 2.19.5 - resolution: "bottleneck@npm:2.19.5" - checksum: c5eef1bbea12cef1f1405e7306e7d24860568b0f7ac5eeab706a86762b3fc65ef6d1c641c8a166e4db90f412fc5c948fc5ce8008a8cd3d28c7212ef9c3482bda - languageName: node - linkType: hard - "boxen@npm:^1.2.1": version: 1.3.0 resolution: "boxen@npm:1.3.0" @@ -8361,15 +9010,6 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - "braces@npm:^2.3.1, braces@npm:^2.3.2": version: 2.3.2 resolution: "braces@npm:2.3.2" @@ -8539,7 +9179,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.5, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5, browserslist@npm:^4.19.1": +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5, browserslist@npm:^4.19.1": version: 4.19.3 resolution: "browserslist@npm:4.19.3" dependencies: @@ -8554,6 +9194,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.16.5, browserslist@npm:^4.20.2, browserslist@npm:^4.20.3": + version: 4.20.3 + resolution: "browserslist@npm:4.20.3" + dependencies: + caniuse-lite: ^1.0.30001332 + electron-to-chromium: ^1.4.118 + escalade: ^3.1.1 + node-releases: ^2.0.3 + picocolors: ^1.0.0 + bin: + browserslist: cli.js + checksum: 1e4b719ac2ca0fe235218a606e8b8ef16b8809e0973b924158c39fbc435a0b0fe43437ea52dd6ef5ad2efcb83fcb07431244e472270177814217f7c563651f7d + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -8738,9 +9393,9 @@ __metadata: languageName: node linkType: hard -"builder-util@npm:23.0.8": - version: 23.0.8 - resolution: "builder-util@npm:23.0.8" +"builder-util@npm:23.0.9": + version: 23.0.9 + resolution: "builder-util@npm:23.0.9" dependencies: 7zip-bin: ~5.1.1 "@types/debug": ^4.1.6 @@ -8759,7 +9414,7 @@ __metadata: source-map-support: ^0.5.19 stat-mode: ^1.0.0 temp-file: ^3.4.0 - checksum: 926c09a3962f56aad5483be1258c49ed4935c90ec4ea7c342e5998fbb5652cbee0e18a047e0c644786a63c9b4cecfa6de1e64b1c49fb2961109c892c11941b0e + checksum: 14cee9beb7d32cc158bcd8d7107d5a6c527d6f01fe5d94091ddaef8604b6bf32ad63197fa6ef26802784c2a5773c655680ec6acaaf9c66f52129913156be8281 languageName: node linkType: hard @@ -8770,13 +9425,6 @@ __metadata: languageName: node linkType: hard -"builtins@npm:^1.0.3": - version: 1.0.3 - resolution: "builtins@npm:1.0.3" - checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 - languageName: node - linkType: hard - "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" @@ -8800,7 +9448,30 @@ __metadata: languageName: node linkType: hard -"cacache@npm:*, cacache@npm:^15.0.3, cacache@npm:^15.2.0, cacache@npm:^15.3.0": +"cacache@npm:^12.0.2": + version: 12.0.4 + resolution: "cacache@npm:12.0.4" + dependencies: + bluebird: ^3.5.5 + chownr: ^1.1.1 + figgy-pudding: ^3.5.1 + glob: ^7.1.4 + graceful-fs: ^4.1.15 + infer-owner: ^1.0.3 + lru-cache: ^5.1.1 + mississippi: ^3.0.0 + mkdirp: ^0.5.1 + move-concurrently: ^1.0.1 + promise-inflight: ^1.0.1 + rimraf: ^2.6.3 + ssri: ^6.0.1 + unique-filename: ^1.1.1 + y18n: ^4.0.0 + checksum: c88a72f36939b2523533946ffb27828443db5bf5995d761b35ae17af1eb6c8e20ac55b00b74c2ca900b2e1e917f0afba6847bf8cc16bee05ccca6aa150e0830c + languageName: node + linkType: hard + +"cacache@npm:^15.2.0": version: 15.3.0 resolution: "cacache@npm:15.3.0" dependencies: @@ -8826,29 +9497,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^12.0.2": - version: 12.0.4 - resolution: "cacache@npm:12.0.4" - dependencies: - bluebird: ^3.5.5 - chownr: ^1.1.1 - figgy-pudding: ^3.5.1 - glob: ^7.1.4 - graceful-fs: ^4.1.15 - infer-owner: ^1.0.3 - lru-cache: ^5.1.1 - mississippi: ^3.0.0 - mkdirp: ^0.5.1 - move-concurrently: ^1.0.1 - promise-inflight: ^1.0.1 - rimraf: ^2.6.3 - ssri: ^6.0.1 - unique-filename: ^1.1.1 - y18n: ^4.0.0 - checksum: c88a72f36939b2523533946ffb27828443db5bf5995d761b35ae17af1eb6c8e20ac55b00b74c2ca900b2e1e917f0afba6847bf8cc16bee05ccca6aa150e0830c - languageName: node - linkType: hard - "cache-base@npm:^1.0.1": version: 1.0.1 resolution: "cache-base@npm:1.0.1" @@ -8987,6 +9635,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001332, caniuse-lite@npm:^1.0.30001335": + version: 1.0.30001343 + resolution: "caniuse-lite@npm:1.0.30001343" + checksum: b8770c0be83e8f1bf52b26d2c9564796195c268bda995ccebc5e67bcb5540cbed9fb03a33500c954628fa99735cddb9c69c54c2af15c37da487cebbdba1f5c60 + languageName: node + linkType: hard + "canvas@npm:^2.9.1": version: 2.9.1 resolution: "canvas@npm:2.9.1" @@ -9006,18 +9661,6 @@ __metadata: languageName: node linkType: hard -"cardinal@npm:^2.1.1": - version: 2.1.1 - resolution: "cardinal@npm:2.1.1" - dependencies: - ansicolors: ~0.3.2 - redeyed: ~2.1.0 - bin: - cdl: ./bin/cdl.js - checksum: e8d4ae46439cf8fed481c0efd267711ee91e199aa7821a9143e784ed94a6495accd01a0b36d84d377e8ee2cc9928a6c9c123b03be761c60b805f2c026b8a99ad - languageName: node - linkType: hard - "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -9041,13 +9684,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:*, chalk@npm:^5.0.0": - version: 5.0.0 - resolution: "chalk@npm:5.0.0" - checksum: 6eba7c518b9aa5fe882ae6d14a1ffa58c418d72a3faa7f72af56641f1bbef51b645fca1d6e05d42357b7d3c846cd504c0b7b64d12309cdd07867e3b4411e0d01 - languageName: node - linkType: hard - "chalk@npm:3.0.0, chalk@npm:^3.0.0, chalk@npm:~3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -9081,7 +9717,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.3.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -9092,6 +9728,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.0.0": + version: 5.0.0 + resolution: "chalk@npm:5.0.0" + checksum: 6eba7c518b9aa5fe882ae6d14a1ffa58c418d72a3faa7f72af56641f1bbef51b645fca1d6e05d42357b7d3c846cd504c0b7b64d12309cdd07867e3b4411e0d01 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -9214,13 +9857,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:*, chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - "chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -9228,6 +9864,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + "chrome-trace-event@npm:^1.0.2": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" @@ -9263,15 +9906,6 @@ __metadata: languageName: node linkType: hard -"cidr-regex@npm:^3.1.1": - version: 3.1.1 - resolution: "cidr-regex@npm:3.1.1" - dependencies: - ip-regex: ^4.1.0 - checksum: ef9306d086928ee82b3f841b3bdab6e072230f3623a57cf19e06174946f2cbfeb70ca52bc106b127db27a628b9e84fb39284f5851003898ffdb957fe330478ee - languageName: node - linkType: hard - "cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": version: 1.0.4 resolution: "cipher-base@npm:1.0.4" @@ -9308,7 +9942,16 @@ __metadata: languageName: node linkType: hard -"clean-css@npm:^5.1.5, clean-css@npm:^5.2.2": +"clean-css@npm:^5.1.5": + version: 5.3.0 + resolution: "clean-css@npm:5.3.0" + dependencies: + source-map: ~0.6.0 + checksum: 29e15ef4678e1eb571546128cb7a922c5301c1bd12ee30a6e8141c72789b8130739a9a5b335435a6ee108400336a561ebd9faabe1a7d8808eb48d39cff390cd7 + languageName: node + linkType: hard + +"clean-css@npm:^5.2.2": version: 5.2.4 resolution: "clean-css@npm:5.2.4" dependencies: @@ -9338,16 +9981,6 @@ __metadata: languageName: node linkType: hard -"cli-columns@npm:*": - version: 4.0.0 - resolution: "cli-columns@npm:4.0.0" - dependencies: - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - checksum: fa1a3a7f4e8f26a18e47969c248a2b9a016391bca2588abbe77026255390bee71dc9b7b876f317f46e40164c3c5200972e77ec58b823a05154f26e81a74a54c3 - languageName: node - linkType: hard - "cli-cursor@npm:^2.1.0": version: 2.1.0 resolution: "cli-cursor@npm:2.1.0" @@ -9373,19 +10006,6 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:*, cli-table3@npm:^0.6.1": - version: 0.6.1 - resolution: "cli-table3@npm:0.6.1" - dependencies: - colors: 1.4.0 - string-width: ^4.2.0 - dependenciesMeta: - colors: - optional: true - checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9 - languageName: node - linkType: hard - "cli-tableau@npm:^2.0.0": version: 2.0.1 resolution: "cli-tableau@npm:2.0.1" @@ -9516,15 +10136,6 @@ __metadata: languageName: node linkType: hard -"cmd-shim@npm:^4.0.1": - version: 4.1.0 - resolution: "cmd-shim@npm:4.1.0" - dependencies: - mkdirp-infer-owner: ^2.0.0 - checksum: d25bb57a8accab681bcfc632e085573b9395cdc60aed8d0ce479f988f9ced16720c89732aef81020140e43fd223b6573c22402e5a1c0cbd0149443104df88d68 - languageName: node - linkType: hard - "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -9619,26 +10230,9 @@ __metadata: linkType: hard "colors@npm:1.0.3": - version: 1.0.3 - resolution: "colors@npm:1.0.3" - checksum: 234e8d3ab7e4003851cdd6a1f02eaa16dabc502ee5f4dc576ad7959c64b7477b15bd21177bab4055a4c0a66aa3d919753958030445f87c39a253d73b7a3637f5 - languageName: node - linkType: hard - -"colors@npm:1.4.0": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec - languageName: node - linkType: hard - -"columnify@npm:*": - version: 1.6.0 - resolution: "columnify@npm:1.6.0" - dependencies: - strip-ansi: ^6.0.1 - wcwidth: ^1.0.0 - checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 + version: 1.0.3 + resolution: "colors@npm:1.0.3" + checksum: 234e8d3ab7e4003851cdd6a1f02eaa16dabc502ee5f4dc576ad7959c64b7477b15bd21177bab4055a4c0a66aa3d919753958030445f87c39a253d73b7a3637f5 languageName: node linkType: hard @@ -9716,13 +10310,6 @@ __metadata: languageName: node linkType: hard -"common-ancestor-path@npm:^1.0.1": - version: 1.0.1 - resolution: "common-ancestor-path@npm:1.0.1" - checksum: 1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 - languageName: node - linkType: hard - "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -9828,9 +10415,9 @@ __metadata: languageName: node linkType: hard -"conf@npm:^10.0.3": - version: 10.1.1 - resolution: "conf@npm:10.1.1" +"conf@npm:^10.1.2": + version: 10.1.2 + resolution: "conf@npm:10.1.2" dependencies: ajv: ^8.6.3 ajv-formats: ^2.1.1 @@ -9842,7 +10429,7 @@ __metadata: onetime: ^5.1.2 pkg-up: ^3.1.0 semver: ^7.3.5 - checksum: f67fd7b33b39b76e1b62316d4ed5943f9ac95a774f5a86a63aea2c594ff5b4ba7673bf6d42f806a23c07248e90f4699b24321640b1dffaf2d81d10d56476a203 + checksum: 769459c85d018d32fe6bd76d5445785ccfb609868eb5c7ee31ff3884bf74aabf3df84aeb6b43a5e8b84e423eb93787d85dbc3d3336774d902753d4f5b64d98cf languageName: node linkType: hard @@ -9952,7 +10539,7 @@ __metadata: languageName: node linkType: hard -"conventional-changelog-angular@npm:^5.0.0, conventional-changelog-angular@npm:^5.0.11, conventional-changelog-angular@npm:^5.0.12": +"conventional-changelog-angular@npm:^5.0.11, conventional-changelog-angular@npm:^5.0.12": version: 5.0.13 resolution: "conventional-changelog-angular@npm:5.0.13" dependencies: @@ -10104,7 +10691,7 @@ __metadata: languageName: node linkType: hard -"conventional-commits-filter@npm:^2.0.0, conventional-commits-filter@npm:^2.0.7": +"conventional-commits-filter@npm:^2.0.7": version: 2.0.7 resolution: "conventional-commits-filter@npm:2.0.7" dependencies: @@ -10114,7 +10701,7 @@ __metadata: languageName: node linkType: hard -"conventional-commits-parser@npm:^3.2.0, conventional-commits-parser@npm:^3.2.2, conventional-commits-parser@npm:^3.2.3": +"conventional-commits-parser@npm:^3.2.0, conventional-commits-parser@npm:^3.2.2": version: 3.2.4 resolution: "conventional-commits-parser@npm:3.2.4" dependencies: @@ -10264,6 +10851,16 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.22.1": + version: 3.22.7 + resolution: "core-js-compat@npm:3.22.7" + dependencies: + browserslist: ^4.20.3 + semver: 7.0.0 + checksum: 036148c150ae6dec864cf175100d56ba0fa2ee9e43b94e6e3d9605d39d53c367aa2409aa1affc485a3135fd73bcab7a4f5f3ab2707420923f7f144ac1997eccf + languageName: node + linkType: hard + "core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.8.1": version: 3.21.0 resolution: "core-js-pure@npm:3.21.0" @@ -10279,9 +10876,9 @@ __metadata: linkType: hard "core-js@npm:^3.18.0": - version: 3.21.1 - resolution: "core-js@npm:3.21.1" - checksum: d68eddd831340ad5b24ac29c72fda022a43b17f194c4278b6b875a843283d316502cb4abd07f28631d6ebc4387f66aa06e2b1b3c8fd7e08096a751b5c63f6889 + version: 3.22.7 + resolution: "core-js@npm:3.22.7" + checksum: c5f1d8a96b6d1828d02583603d9df1fcbf45f95454585ff9d49ba7ea1470bf1422d00561044939bf4952465ae4ae2bf30a39b4874da8ed2741a3f3996bd175ab languageName: node linkType: hard @@ -10583,6 +11180,15 @@ __metadata: languageName: node linkType: hard +"css-declaration-sorter@npm:^6.2.2": + version: 6.2.2 + resolution: "css-declaration-sorter@npm:6.2.2" + peerDependencies: + postcss: ^8.0.9 + checksum: afd3aea1b763b7abb5a9d0e10e973e99520b528522be421d9ef13d4fa7ead2cd48acd85d48c0fd0e954f596da2181dafbafc176a080ab017ebd1909a8231c9b4 + languageName: node + linkType: hard + "css-line-break@npm:^2.1.0": version: 2.1.0 resolution: "css-line-break@npm:2.1.0" @@ -10742,18 +11348,18 @@ __metadata: linkType: hard "cssnano-preset-advanced@npm:^5.1.4": - version: 5.1.12 - resolution: "cssnano-preset-advanced@npm:5.1.12" + version: 5.3.5 + resolution: "cssnano-preset-advanced@npm:5.3.5" dependencies: autoprefixer: ^10.3.7 - cssnano-preset-default: ^5.1.12 - postcss-discard-unused: ^5.0.3 - postcss-merge-idents: ^5.0.3 - postcss-reduce-idents: ^5.0.3 - postcss-zindex: ^5.0.2 + cssnano-preset-default: ^5.2.9 + postcss-discard-unused: ^5.1.0 + postcss-merge-idents: ^5.1.1 + postcss-reduce-idents: ^5.2.0 + postcss-zindex: ^5.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 875678aa09ed84204bebd87fd07c1ccc049a9e989b04c9fb68e82eba8ca239ed0badad68263b4e53e1c842084a9ea4d4f1ea4088610b47a80e4382275d6c1722 + checksum: a4c26b684ed8b1ca1e5c70fba91ff120eabeacf532d8e917c818698206aae473bcd47847c7505b66d5763f9a604a848036ba9f6a9f4534fd5d7bd83a4ea0092a languageName: node linkType: hard @@ -10796,6 +11402,45 @@ __metadata: languageName: node linkType: hard +"cssnano-preset-default@npm:^5.2.9": + version: 5.2.9 + resolution: "cssnano-preset-default@npm:5.2.9" + dependencies: + css-declaration-sorter: ^6.2.2 + cssnano-utils: ^3.1.0 + postcss-calc: ^8.2.3 + postcss-colormin: ^5.3.0 + postcss-convert-values: ^5.1.1 + postcss-discard-comments: ^5.1.1 + postcss-discard-duplicates: ^5.1.0 + postcss-discard-empty: ^5.1.1 + postcss-discard-overridden: ^5.1.0 + postcss-merge-longhand: ^5.1.5 + postcss-merge-rules: ^5.1.1 + postcss-minify-font-values: ^5.1.0 + postcss-minify-gradients: ^5.1.1 + postcss-minify-params: ^5.1.3 + postcss-minify-selectors: ^5.2.0 + postcss-normalize-charset: ^5.1.0 + postcss-normalize-display-values: ^5.1.0 + postcss-normalize-positions: ^5.1.0 + postcss-normalize-repeat-style: ^5.1.0 + postcss-normalize-string: ^5.1.0 + postcss-normalize-timing-functions: ^5.1.0 + postcss-normalize-unicode: ^5.1.0 + postcss-normalize-url: ^5.1.0 + postcss-normalize-whitespace: ^5.1.1 + postcss-ordered-values: ^5.1.1 + postcss-reduce-initial: ^5.1.0 + postcss-reduce-transforms: ^5.1.0 + postcss-svgo: ^5.1.0 + postcss-unique-selectors: ^5.1.1 + peerDependencies: + postcss: ^8.2.15 + checksum: a93ecc41274456f2e482700df795d1e431142987d94ff54b3d0b49fe02f092945aa5eaf90d9f65f135ebea2b8c22efe71b944e489c8ef1a397a8257571bd6477 + languageName: node + linkType: hard + "cssnano-utils@npm:^3.0.2": version: 3.0.2 resolution: "cssnano-utils@npm:3.0.2" @@ -10805,7 +11450,16 @@ __metadata: languageName: node linkType: hard -"cssnano@npm:^5.0.6, cssnano@npm:^5.0.8": +"cssnano-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "cssnano-utils@npm:3.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 + languageName: node + linkType: hard + +"cssnano@npm:^5.0.6": version: 5.0.17 resolution: "cssnano@npm:5.0.17" dependencies: @@ -10818,6 +11472,19 @@ __metadata: languageName: node linkType: hard +"cssnano@npm:^5.0.8": + version: 5.1.9 + resolution: "cssnano@npm:5.1.9" + dependencies: + cssnano-preset-default: ^5.2.9 + lilconfig: ^2.0.3 + yaml: ^1.10.2 + peerDependencies: + postcss: ^8.2.15 + checksum: 25932e83187bfffbe6116d4d5fef20f6bfa9fbd1cdc1145173bc757579740a4ae6b9d40ca67bdf7b644ff2c65784a1a168e1a3e08208120ab6c822056b356b95 + languageName: node + linkType: hard + "csso@npm:^4.2.0": version: 4.2.0 resolution: "csso@npm:4.2.0" @@ -11400,7 +12067,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1": +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -11421,13 +12088,6 @@ __metadata: languageName: node linkType: hard -"debuglog@npm:^1.0.1": - version: 1.0.1 - resolution: "debuglog@npm:1.0.1" - checksum: 970679f2eb7a73867e04d45b52583e7ec6dee1f33c058e9147702e72a665a9647f9c3d6e7c2f66f6bf18510b23eb5ded1b617e48ac1db23603809c5ddbbb9763 - languageName: node - linkType: hard - "decamelize-keys@npm:^1.1.0": version: 1.1.0 resolution: "decamelize-keys@npm:1.1.0" @@ -11758,7 +12418,7 @@ __metadata: languageName: node linkType: hard -"dezalgo@npm:1.0.3, dezalgo@npm:^1.0.0": +"dezalgo@npm:1.0.3": version: 1.0.3 resolution: "dezalgo@npm:1.0.3" dependencies: @@ -11789,13 +12449,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:^5.0.0": - version: 5.0.0 - resolution: "diff@npm:5.0.0" - checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 - languageName: node - linkType: hard - "diffie-hellman@npm:^5.0.0": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" @@ -11830,7 +12483,7 @@ __metadata: languageName: node linkType: hard -"dir-glob@npm:^3.0.0, dir-glob@npm:^3.0.1": +"dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" dependencies: @@ -11839,12 +12492,12 @@ __metadata: languageName: node linkType: hard -"dmg-builder@npm:23.0.8": - version: 23.0.8 - resolution: "dmg-builder@npm:23.0.8" +"dmg-builder@npm:23.1.0": + version: 23.1.0 + resolution: "dmg-builder@npm:23.1.0" dependencies: - app-builder-lib: 23.0.8 - builder-util: 23.0.8 + app-builder-lib: 23.1.0 + builder-util: 23.0.9 builder-util-runtime: 9.0.2 dmg-license: ^1.0.11 fs-extra: ^10.0.0 @@ -11853,7 +12506,7 @@ __metadata: dependenciesMeta: dmg-license: optional: true - checksum: 8a36e199e1739cc9b3a242136e6ffb6cd7971417c2a14866097b4b348fab0ae5b96509ca946bb5e22e1359590d7c7b93b7cbff0997cbd1c3a6c8cc5bec1d17a6 + checksum: e6b2ec5a6feca5b92a8a99c1d2638999b01f82fa86ced9cbf6b18eb223a9cbcfbff861a404d4e2998f04d623061489eacaba7f511891f53f194f5f08fee9d34d languageName: node linkType: hard @@ -12224,7 +12877,7 @@ __metadata: languageName: node linkType: hard -"duplexer2@npm:~0.1.0, duplexer2@npm:~0.1.4": +"duplexer2@npm:~0.1.4": version: 0.1.4 resolution: "duplexer2@npm:0.1.4" dependencies: @@ -12303,16 +12956,16 @@ __metadata: languageName: node linkType: hard -"electron-builder@npm:^23.0.3": - version: 23.0.8 - resolution: "electron-builder@npm:23.0.8" +"electron-builder@npm:^23.1.0": + version: 23.1.0 + resolution: "electron-builder@npm:23.1.0" dependencies: "@types/yargs": ^17.0.1 - app-builder-lib: 23.0.8 - builder-util: 23.0.8 + app-builder-lib: 23.1.0 + builder-util: 23.0.9 builder-util-runtime: 9.0.2 chalk: ^4.1.1 - dmg-builder: 23.0.8 + dmg-builder: 23.1.0 fs-extra: ^10.0.0 is-ci: ^3.0.0 lazy-val: ^1.0.5 @@ -12322,7 +12975,7 @@ __metadata: bin: electron-builder: cli.js install-app-deps: install-app-deps.js - checksum: 56da948ce639b3a24b7a746bb9598bcabffb948d0494cc410b927d5e623a6b16e3ea1a9ef567b4c8a3f121b44e90200defde2289e8ef7f5942e0946a43e9ffae + checksum: 189f97152ed903fda43f1e3acb13f6bdc44603ac14fd1cf09b91ae389b08eb3970de833de0f25757eb3f8dfb2c0b93f37bacc37956eae795e8d00346892c5821 languageName: node linkType: hard @@ -12369,10 +13022,10 @@ __metadata: languageName: node linkType: hard -"electron-log@npm:^4.4.6": - version: 4.4.6 - resolution: "electron-log@npm:4.4.6" - checksum: cb385a3d220eaf13ff5a7d7ae2f6421ee6b4a3cf9c4026ae66dad37fc005c04ef224a511a01731c489c82a8ed78202dd6ead99e93d0fe951bdc215684df0b3b5 +"electron-log@npm:^4.4.7": + version: 4.4.7 + resolution: "electron-log@npm:4.4.7" + checksum: baa5c3cb751ac52e465b116075440365d4664b5e1b0c9754664bd21f63bc70ef9ace3340932465a9b980fd8d39c4288ea599648920135856392a9a893eea2555 languageName: node linkType: hard @@ -12393,18 +13046,18 @@ __metadata: languageName: node linkType: hard -"electron-publish@npm:23.0.8": - version: 23.0.8 - resolution: "electron-publish@npm:23.0.8" +"electron-publish@npm:23.0.9": + version: 23.0.9 + resolution: "electron-publish@npm:23.0.9" dependencies: "@types/fs-extra": ^9.0.11 - builder-util: 23.0.8 + builder-util: 23.0.9 builder-util-runtime: 9.0.2 chalk: ^4.1.1 fs-extra: ^10.0.0 lazy-val: ^1.0.5 mime: ^2.5.2 - checksum: 511ea2a71aa48e6990c2fb8b38684c31e7026f6dd82eebeacf9822e13160474382a91233a280e92e160717f250ebcc81be92f61b92bb231d815d99e52300ba16 + checksum: 866515f5eeabf1369e84c4d449184ae9292231f68d25e6cb1f170595d69ad23f83135fb63646601bd83e9a9092167e6b59773863a535e099cf8fe6a88db7e457 languageName: node linkType: hard @@ -12430,13 +13083,13 @@ __metadata: languageName: node linkType: hard -"electron-store@npm:^8.0.1": - version: 8.0.1 - resolution: "electron-store@npm:8.0.1" +"electron-store@npm:^8.0.2": + version: 8.0.2 + resolution: "electron-store@npm:8.0.2" dependencies: - conf: ^10.0.3 - type-fest: ^1.0.2 - checksum: 3d708598c554c55ede73569879c9e538b4a644a693af9e5fd49d3c091e1ee6d2a32b6a4d6a1834a4f116a59724a7263ddebd42ded1e15119303b3132c4194a38 + conf: ^10.1.2 + type-fest: ^2.12.2 + checksum: b44e5c1ee8d76e19db62bc95670b4fcf150bbf81b8559f12cb7d983e622c309714b0a04080abad83f8b2aa8f27572c7dda76b7777d6e1551c23e91b605d02da2 languageName: node linkType: hard @@ -12447,6 +13100,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.118": + version: 1.4.139 + resolution: "electron-to-chromium@npm:1.4.139" + checksum: b0156f56db6a84b471bdacaecc5779952c9e4612cbe29867a818c5799ff2cd6a83617b68c3c020ce94b7a396b8288db8236a23d52148a05f567fa19ee309c9c1 + languageName: node + linkType: hard + "electron-unhandled@npm:^4.0.1": version: 4.0.1 resolution: "electron-unhandled@npm:4.0.1" @@ -12460,16 +13120,16 @@ __metadata: languageName: node linkType: hard -"electron@npm:16.2.4": - version: 16.2.4 - resolution: "electron@npm:16.2.4" +"electron@npm:16.2.8": + version: 16.2.8 + resolution: "electron@npm:16.2.8" dependencies: "@electron/get": ^1.13.0 "@types/node": ^14.6.2 extract-zip: ^1.0.3 bin: electron: cli.js - checksum: f3944f75d476e27e5544d20ceaeefe534475ece2019bb420cafadbf8d9f42fc1bce753b3625e7ff33dcb6aaf2271d2d513f643d019ab4cfa70e1fa6062c3cba2 + checksum: 05177c7a798ff43d4a9df333cc5537e46235a14560b4400e9a9993972abb2e599e22e59a0c0b385bc4090ef665719ce0e90179b652d295fb1fea79bbb0fd786b languageName: node linkType: hard @@ -12611,17 +13271,6 @@ __metadata: languageName: node linkType: hard -"env-ci@npm:^5.0.0": - version: 5.5.0 - resolution: "env-ci@npm:5.5.0" - dependencies: - execa: ^5.0.0 - fromentries: ^1.3.2 - java-properties: ^1.0.0 - checksum: 0984298e0eca8461f898f5ab92edb8d1d440a117aa1864ee04b8e3cb785a8f48d3a30d1ede88f9775da8e8ae38b2afdb890072d819170f085ae47507e324e915 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -13204,7 +13853,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -13298,12 +13947,13 @@ __metadata: languageName: node linkType: hard -"eval@npm:^0.1.4": - version: 0.1.6 - resolution: "eval@npm:0.1.6" +"eval@npm:^0.1.8": + version: 0.1.8 + resolution: "eval@npm:0.1.8" dependencies: + "@types/node": "*" require-like: ">= 0.1.1" - checksum: 0e9246bb16256eef07afa7f31408310a784407d2fec2ddd2d7fe1f885a45b7cf37e30739e658a65d000c3dcff8d5b5c96f9819188b00e1f667b6638e75eaf23c + checksum: d005567f394cfbe60948e34982e4637d2665030f9aa7dcac581ea6f9ec6eceb87133ed3dc0ae21764aa362485c242a731dbb6371f1f1a86807c58676431e9d1a languageName: node linkType: hard @@ -13748,7 +14398,7 @@ __metadata: languageName: node linkType: hard -"fastest-levenshtein@npm:*, fastest-levenshtein@npm:^1.0.12": +"fastest-levenshtein@npm:^1.0.12": version: 1.0.12 resolution: "fastest-levenshtein@npm:1.0.12" checksum: e1a013698dd1d302c7a78150130c7d50bb678c2c2f8839842a796d66cc7cdf50ea6b3d7ca930b0c8e7e8c2cd84fea8ab831023b382f7aab6922c318c1451beab @@ -14113,15 +14763,6 @@ __metadata: languageName: node linkType: hard -"find-versions@npm:^4.0.0": - version: 4.0.0 - resolution: "find-versions@npm:4.0.0" - dependencies: - semver-regex: ^3.1.2 - checksum: 2b4c749dc33e3fa73a457ca4df616ac13b4b32c53f6297bc862b0814d402a6cfec93a0d308d5502eeb47f2c125906e0f861bf01b756f08395640892186357711 - languageName: node - linkType: hard - "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -14244,8 +14885,8 @@ __metadata: linkType: hard "fork-ts-checker-webpack-plugin@npm:^6.0.5": - version: 6.5.0 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" + version: 6.5.2 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.2" dependencies: "@babel/code-frame": ^7.8.3 "@types/json-schema": ^7.0.5 @@ -14270,7 +14911,7 @@ __metadata: optional: true vue-template-compiler: optional: true - checksum: 95d145ab7936445f3a9bfa4116ef73537f97196cfaa3f5b24473dff36d034e839d3b0e034a23beefc9619eceb7a9866816bfd55afd1968e955eb3b3f8cfc35ed + checksum: c823de02ee258a26ea5c0c488b2f1825b941f72292417478689862468a9140b209ad7df52f67bd134228fe9f40e9115b604fc8f88a69338929fe52be869469b6 languageName: node linkType: hard @@ -14382,6 +15023,13 @@ __metadata: languageName: node linkType: hard +"fraction.js@npm:^4.2.0": + version: 4.2.0 + resolution: "fraction.js@npm:4.2.0" + checksum: 8c76a6e21dedea87109d6171a0ac77afa14205794a565d71cb10d2925f629a3922da61bf45ea52dbc30bce4d8636dc0a27213a88cbd600eab047d82f9a3a94c5 + languageName: node + linkType: hard + "fragment-cache@npm:^0.2.1": version: 0.2.1 resolution: "fragment-cache@npm:0.2.1" @@ -14415,13 +15063,6 @@ __metadata: languageName: node linkType: hard -"fromentries@npm:^1.3.2": - version: 1.3.2 - resolution: "fromentries@npm:1.3.2" - checksum: 33729c529ce19f5494f846f0dd4945078f4e37f4e8955f4ae8cc7385c218f600e9d93a7d225d17636c20d1889106fd87061f911550861b7072f53bf891e6b341 - languageName: node - linkType: hard - "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" @@ -14482,7 +15123,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": +"fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: @@ -14843,20 +15484,6 @@ __metadata: languageName: node linkType: hard -"git-log-parser@npm:^1.2.0": - version: 1.2.0 - resolution: "git-log-parser@npm:1.2.0" - dependencies: - argv-formatter: ~1.0.0 - spawn-error-forwarder: ~1.0.0 - split2: ~1.0.0 - stream-combiner2: ~1.1.1 - through2: ~2.0.0 - traverse: ~0.6.6 - checksum: 57294e72f91920d3262ff51fb0fd81dba1465c9e1b25961e19c757ae39bb38e72dd4a5da40649eeb368673b08be449a0844a2bafc0c0ded7375a8a56a6af8640 - languageName: node - linkType: hard - "git-node-fs@npm:^1.0.0": version: 1.0.0 resolution: "git-node-fs@npm:1.0.0" @@ -15015,29 +15642,29 @@ __metadata: languageName: node linkType: hard -"glob@npm:*, glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": - version: 7.2.0 - resolution: "glob@npm:7.2.0" +"glob@npm:^4.3.1": + version: 4.5.3 + resolution: "glob@npm:4.5.3" dependencies: - fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 - minimatch: ^3.0.4 + minimatch: ^2.0.1 once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 + checksum: b6d620ec53976c83e86a0c66b079009222c6270bdc872258397b0486e463707f8971944a492526924de966fcf7ccf67d5ed5446fe12a02f5a6e9b49e147848d9 languageName: node linkType: hard -"glob@npm:^4.3.1": - version: 4.5.3 - resolution: "glob@npm:4.5.3" +"glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": + version: 7.2.0 + resolution: "glob@npm:7.2.0" dependencies: + fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 - minimatch: ^2.0.1 + minimatch: ^3.0.4 once: ^1.3.0 - checksum: b6d620ec53976c83e86a0c66b079009222c6270bdc872258397b0486e463707f8971944a492526924de966fcf7ccf67d5ed5446fe12a02f5a6e9b49e147848d9 + path-is-absolute: ^1.0.0 + checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 languageName: node linkType: hard @@ -15180,7 +15807,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0": +"globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -15272,7 +15899,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:*, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.9 resolution: "graceful-fs@npm:4.2.9" checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 @@ -15352,13 +15979,13 @@ __metadata: csv-parse: ^4.16.3 csv-stringify: ^6.0.5 debug: ^4.3.4 - electron: 16.2.4 - electron-builder: ^23.0.3 + electron: 16.2.8 + electron-builder: ^23.1.0 electron-debug: ^3.2.0 - electron-log: ^4.4.6 + electron-log: ^4.4.7 electron-reloader: ^1.2.3 electron-squirrel-startup: ^1.0.0 - electron-store: ^8.0.1 + electron-store: ^8.0.2 electron-unhandled: ^4.0.1 eslint: ^8.16.0 eslint-config-prettier: ^8.5.0 @@ -15380,6 +16007,7 @@ __metadata: node-polyfill-webpack-plugin: ^1.1.4 pkg: ^5.7.0 prettier: ^2.6.2 + puppeteer: ^13.7.0 puppeteer-core: ^13.7.0 puppeteer-extra: ^3.2.3 puppeteer-extra-plugin-stealth: ^2.9.0 @@ -15399,9 +16027,9 @@ __metadata: unlazy-loader: ^0.1.3 unzipper: ^0.10.11 utf-8-validate: ^5.0.9 - webpack: ^5.72.1 + webpack: ^5.73.0 webpack-bundle-analyzer: ^4.5.0 - webpack-cli: ^4.9.2 + webpack-cli: ^4.10.0 webpack-node-externals: ^3.0.0 ws: ^8.5.0 yaml: ^1.10.2 @@ -15804,14 +16432,14 @@ __metadata: languageName: node linkType: hard -"hook-std@npm:^2.0.0": - version: 2.0.0 - resolution: "hook-std@npm:2.0.0" - checksum: 1e6051dd3ba89980027f9fe9675874e890958ee416f239d2a83bea6d3a2ae00bdca3da525933036d2b63638bdadd71b74aeb37f9cdb90338e555a0da5b9e74f9 +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd languageName: node linkType: hard -"hosted-git-info@npm:*, hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1, hosted-git-info@npm:^4.1.0": +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1, hosted-git-info@npm:^4.1.0": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" dependencies: @@ -15820,13 +16448,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd - languageName: node - linkType: hard - "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -15896,9 +16517,9 @@ __metadata: linkType: hard "html-tags@npm:^3.1.0": - version: 3.1.0 - resolution: "html-tags@npm:3.1.0" - checksum: 67587f2d4022390d7bc34b1313773ecb0b0e0c79fb331aa3e20023eb4c862c7188a1ff775d126fcd75f4e4f08f956666a1c57688c4d24d85a77f9d4b1a42f345 + version: 3.2.0 + resolution: "html-tags@npm:3.2.0" + checksum: a0c9e96ac26c84adad9cc66d15d6711a17f60acda8d987218f1d4cbaacd52864939b230e635cce5a1179f3ddab2a12b9231355617dfbae7945fcfec5e96d2041 languageName: node linkType: hard @@ -16239,15 +16860,6 @@ __metadata: languageName: node linkType: hard -"ignore-walk@npm:^4.0.1": - version: 4.0.1 - resolution: "ignore-walk@npm:4.0.1" - dependencies: - minimatch: ^3.0.4 - checksum: 903cd5cb68d57b2e70fddb83d885aea55f137a44636254a29b08037797376d8d3e09d1c58935778f3a271bf6a2b41ecc54fc22260ac07190e09e1ec7253b49f3 - languageName: node - linkType: hard - "ignore@npm:^4.0.3": version: 4.0.6 resolution: "ignore@npm:4.0.6" @@ -16280,7 +16892,14 @@ __metadata: languageName: node linkType: hard -"immer@npm:^9.0.6, immer@npm:^9.0.7": +"immer@npm:^9.0.6": + version: 9.0.14 + resolution: "immer@npm:9.0.14" + checksum: 17f1365c06d653e672a4f609f08e7203e9ab4b4284818332d6ca9b3f3577a0e3c0066ca7933b636fbae560df79a4b3fde70ed717ce3c6e95c39bf3d5861d5be9 + languageName: node + linkType: hard + +"immer@npm:^9.0.7": version: 9.0.12 resolution: "immer@npm:9.0.12" checksum: bcbec6d76dac65e49068eb67ece4d407116e62b8cde3126aa89c801e408f5047763ba0aeb62f1938c1aa704bb6612f1d8302bb2a86fa1fc60fcc12d8b25dc895 @@ -16322,13 +16941,6 @@ __metadata: languageName: node linkType: hard -"import-from@npm:^4.0.0": - version: 4.0.0 - resolution: "import-from@npm:4.0.0" - checksum: 1fa29c05b048da18914e91d9a529e5d9b91774bebbfab10e53f59bcc1667917672b971cf102fee857f142e5e433ce69fa1f0a596e1c7d82f9947a5ec352694b9 - languageName: node - linkType: hard - "import-lazy@npm:^2.1.0": version: 2.1.0 resolution: "import-lazy@npm:2.1.0" @@ -16400,7 +17012,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:*, ini@npm:2.0.0, ini@npm:^2.0.0": +"ini@npm:2.0.0, ini@npm:^2.0.0": version: 2.0.0 resolution: "ini@npm:2.0.0" checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e @@ -16414,21 +17026,6 @@ __metadata: languageName: node linkType: hard -"init-package-json@npm:*": - version: 3.0.0 - resolution: "init-package-json@npm:3.0.0" - dependencies: - npm-package-arg: ^9.0.0 - promzard: ^0.3.0 - read: ^1.0.7 - read-package-json: ^4.1.1 - semver: ^7.3.5 - validate-npm-package-license: ^3.0.4 - validate-npm-package-name: ^3.0.0 - checksum: f8af9be20a3c3a433236d047ad07890fbda0db3e9fb5c258e3ea8d16bc247f5007979dc6c66e88391fbbe1fc074de82eb5648401da983e30d1f06a0bb232b55a - languageName: node - linkType: hard - "inline-style-parser@npm:0.1.1": version: 0.1.1 resolution: "inline-style-parser@npm:0.1.1" @@ -16569,13 +17166,6 @@ __metadata: languageName: node linkType: hard -"ip-regex@npm:^4.1.0": - version: 4.3.0 - resolution: "ip-regex@npm:4.3.0" - checksum: 7ff904b891221b1847f3fdf3dbb3e6a8660dc39bc283f79eb7ed88f5338e1a3d1104b779bc83759159be266249c59c2160e779ee39446d79d4ed0890dfd06f08 - languageName: node - linkType: hard - "ip@npm:^1.1.5": version: 1.1.5 resolution: "ip@npm:1.1.5" @@ -16740,15 +17330,6 @@ __metadata: languageName: node linkType: hard -"is-cidr@npm:*": - version: 4.0.2 - resolution: "is-cidr@npm:4.0.2" - dependencies: - cidr-regex: ^3.1.1 - checksum: ee6e670e655a835710a7fa15268b428adbf80267114a494ce1c2ca2b09e1ca0b629fe1375aae621d4c093b32930d5ff7c4ee6da97eae14e3836bc7b3a07b171f - languageName: node - linkType: hard - "is-core-module@npm:2.9.0, is-core-module@npm:^2.2.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": version: 2.9.0 resolution: "is-core-module@npm:2.9.0" @@ -17384,19 +17965,6 @@ __metadata: languageName: node linkType: hard -"issue-parser@npm:^6.0.0": - version: 6.0.0 - resolution: "issue-parser@npm:6.0.0" - dependencies: - lodash.capitalize: ^4.2.1 - lodash.escaperegexp: ^4.1.2 - lodash.isplainobject: ^4.0.6 - lodash.isstring: ^4.0.1 - lodash.uniqby: ^4.7.0 - checksum: 3357928af6c78c4803340f978bd55dc922b6b15b3f6c76aaa78a08999d39002729502ce1650863d1a9d728a7e31ccc0a865087244225ef6e8fc85aaf2f9c0f67 - languageName: node - linkType: hard - "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" @@ -17480,13 +18048,6 @@ __metadata: languageName: node linkType: hard -"java-properties@npm:^1.0.0": - version: 1.0.2 - resolution: "java-properties@npm:1.0.2" - checksum: 9a086778346e3adbe2395e370f5c779033ed60360055a15e2cead49e3d676d2c73786cf2f6563a1860277dea3dd0a859432e546ed89c03ee08c1f53e31a5d420 - languageName: node - linkType: hard - "jest-changed-files@npm:^27.5.1": version: 27.5.1 resolution: "jest-changed-files@npm:27.5.1" @@ -18185,7 +18746,7 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:*, json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f @@ -18245,13 +18806,6 @@ __metadata: languageName: node linkType: hard -"json-stringify-nice@npm:^1.1.4": - version: 1.1.4 - resolution: "json-stringify-nice@npm:1.1.4" - checksum: 6ddf781148b46857ab04e97f47be05f14c4304b86eb5478369edbeacd070c21c697269964b982fc977e8989d4c59091103b1d9dc291aba40096d6cbb9a392b72 - languageName: node - linkType: hard - "json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -18281,6 +18835,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.1": + version: 2.2.1 + resolution: "json5@npm:2.2.1" + bin: + json5: lib/cli.js + checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b + languageName: node + linkType: hard + "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -18313,7 +18876,7 @@ __metadata: languageName: node linkType: hard -"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": +"jsonparse@npm:^1.2.0": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d @@ -18435,20 +18998,6 @@ __metadata: languageName: node linkType: hard -"just-diff-apply@npm:^4.0.1": - version: 4.0.1 - resolution: "just-diff-apply@npm:4.0.1" - checksum: fdb58c0c8da766943fb316158d823fe485058d6b31ec6c51f99076df76363fa1ca35d79fb23f53184bf5b7443ae470fe5f087b4a504e913a8f96474963907e2e - languageName: node - linkType: hard - -"just-diff@npm:^5.0.1": - version: 5.0.1 - resolution: "just-diff@npm:5.0.1" - checksum: efbdb652987ca109839dba385904ea152cc73ef4c165eebb4be0af261734cf91387e529fcd52aea5ba9567b4ef76c584ee6254ccf0030dc5d0ccdab3b890a085 - languageName: node - linkType: hard - "keyboardevent-from-electron-accelerator@npm:^2.0.0": version: 2.0.0 resolution: "keyboardevent-from-electron-accelerator@npm:2.0.0" @@ -18646,140 +19195,6 @@ __metadata: languageName: node linkType: hard -"libnpmaccess@npm:*": - version: 6.0.0 - resolution: "libnpmaccess@npm:6.0.0" - dependencies: - aproba: ^2.0.0 - minipass: ^3.1.1 - npm-package-arg: ^9.0.0 - npm-registry-fetch: ^13.0.0 - checksum: 10328742187eb0a3d48cab27396628309e9012aac331b8e383f9dd5274ab4d77888f10d2bdb2d07aa6205f3a1d44301d0bc86e37af890b835537b771b3eb8816 - languageName: node - linkType: hard - -"libnpmdiff@npm:*": - version: 4.0.0 - resolution: "libnpmdiff@npm:4.0.0" - dependencies: - "@npmcli/disparity-colors": ^1.0.1 - "@npmcli/installed-package-contents": ^1.0.7 - binary-extensions: ^2.2.0 - diff: ^5.0.0 - minimatch: ^3.0.4 - npm-package-arg: ^9.0.0 - pacote: ^13.0.2 - tar: ^6.1.0 - checksum: 14c1287ee62e3b2aac0b9ff170cadd37fe82b6367ede2ba18de219d5d5688ac6bf1021ef920d804ce1919a1bec767d0f06d1c800f9369b387c6260a0dd6daaf9 - languageName: node - linkType: hard - -"libnpmexec@npm:*": - version: 4.0.0 - resolution: "libnpmexec@npm:4.0.0" - dependencies: - "@npmcli/arborist": ^5.0.0 - "@npmcli/ci-detect": ^2.0.0 - "@npmcli/run-script": ^3.0.0 - chalk: ^4.1.0 - mkdirp-infer-owner: ^2.0.0 - npm-package-arg: ^9.0.0 - npmlog: ^6.0.1 - pacote: ^13.0.2 - proc-log: ^2.0.0 - read: ^1.0.7 - read-package-json-fast: ^2.0.2 - walk-up-path: ^1.0.0 - checksum: 2b12f80b730832f555b8c98310975156072dce4211239e2ed3fb0485bc234ec4385945fd9b943a25d8bf03b26aaef33207b790663d1f429909d0e6b7b950dbf1 - languageName: node - linkType: hard - -"libnpmfund@npm:*": - version: 3.0.0 - resolution: "libnpmfund@npm:3.0.0" - dependencies: - "@npmcli/arborist": ^5.0.0 - checksum: 1742b170c0e52fd2bbd5b2185f06077d74d2e4bc8f6812a20a70a977243f39b53af7bfc4badf75a199e2fbbbbabd3f90462ae27f1e952b9906e47556af0bb529 - languageName: node - linkType: hard - -"libnpmhook@npm:*": - version: 8.0.0 - resolution: "libnpmhook@npm:8.0.0" - dependencies: - aproba: ^2.0.0 - npm-registry-fetch: ^13.0.0 - checksum: 1921c9cfe8d8804e09fe5761d4ed1de4f639871a50248ff7fe53a7e7903007cfc2614cc43d2d6800ac0e8ee2de630d3e8fcf5039d4e90bf7b95feb97d5bdde54 - languageName: node - linkType: hard - -"libnpmorg@npm:*": - version: 4.0.0 - resolution: "libnpmorg@npm:4.0.0" - dependencies: - aproba: ^2.0.0 - npm-registry-fetch: ^13.0.0 - checksum: bab42f7f1a066f41a914b828a03d54cba7752e86537d9fc13fb5a95359cd277b504c4312888f2d13b8096cabdf3bf5e912a77053d4edc3b21d123f5dcc5421e3 - languageName: node - linkType: hard - -"libnpmpack@npm:*": - version: 4.0.0 - resolution: "libnpmpack@npm:4.0.0" - dependencies: - "@npmcli/run-script": ^3.0.0 - npm-package-arg: ^9.0.0 - pacote: ^13.0.2 - checksum: ecf49822fde5df0b6321a5e286154726f87ab55f1e1a10f17bd5283c95513fe74ec365d335631faa875e9128fb5b7b0edc81f91b50132fdbe79f580c6539143b - languageName: node - linkType: hard - -"libnpmpublish@npm:*": - version: 6.0.0 - resolution: "libnpmpublish@npm:6.0.0" - dependencies: - normalize-package-data: ^3.0.2 - npm-package-arg: ^9.0.0 - npm-registry-fetch: ^13.0.0 - semver: ^7.1.3 - ssri: ^8.0.1 - checksum: 7722e54e3c94dfda5317b221a095afd77d1628204f2e8de06fee080767608cc3ba464a23a8671a193d2cddd1a00ab42c9b5acc41f39ff683fa6bb8b57eac251d - languageName: node - linkType: hard - -"libnpmsearch@npm:*": - version: 5.0.0 - resolution: "libnpmsearch@npm:5.0.0" - dependencies: - npm-registry-fetch: ^13.0.0 - checksum: 78445bd93670008501c3f52cb9845148ee245a01588e42e0b75b6eb6af65b02c5a5022ec7fd40fbaed213897f525e9fff6318a181505780f570caacf69f4cfe3 - languageName: node - linkType: hard - -"libnpmteam@npm:*": - version: 4.0.0 - resolution: "libnpmteam@npm:4.0.0" - dependencies: - aproba: ^2.0.0 - npm-registry-fetch: ^13.0.0 - checksum: e3bcb382c121ced8d65ca1e5890118888b6dc58497e92b9dcd52448963dde59e705cf446455ba46a4ccbb6914129d6e3a020ee32135a0beb975172ae40111244 - languageName: node - linkType: hard - -"libnpmversion@npm:*": - version: 3.0.0 - resolution: "libnpmversion@npm:3.0.0" - dependencies: - "@npmcli/git": ^3.0.0 - "@npmcli/run-script": ^3.0.0 - json-parse-even-better-errors: ^2.3.1 - proc-log: ^2.0.0 - semver: ^7.3.5 - stringify-package: ^1.0.1 - checksum: 2fa8314ba8d35f31c6a285f2c34bc5d3270fbaeda7cc2c60cfacbe72e389387b3d182f6b7843c73ea8e1290ff20e43474b257fb5e0e224f4210941bc0ced66ce - languageName: node - linkType: hard - "lilconfig@npm:2.0.4, lilconfig@npm:^2.0.3": version: 2.0.4 resolution: "lilconfig@npm:2.0.4" @@ -18884,17 +19299,6 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:^1.4.0": - version: 1.4.0 - resolution: "loader-utils@npm:1.4.0" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^1.0.1 - checksum: d150b15e7a42ac47d935c8b484b79e44ff6ab4c75df7cc4cb9093350cf014ec0b17bdb60c5d6f91a37b8b218bd63b973e263c65944f58ca2573e402b9a27e717 - languageName: node - linkType: hard - "loader-utils@npm:^2.0.0": version: 2.0.2 resolution: "loader-utils@npm:2.0.2" @@ -19018,13 +19422,6 @@ __metadata: languageName: node linkType: hard -"lodash.capitalize@npm:^4.2.1": - version: 4.2.1 - resolution: "lodash.capitalize@npm:4.2.1" - checksum: d9195f31d48c105206f1099946d8bbc8ab71435bc1c8708296992a31a992bb901baf120fdcadd773098ac96e62a79e6b023ee7d26a2deb0d6c6aada930e6ad0a - languageName: node - linkType: hard - "lodash.castarray@npm:^4.4.0": version: 4.4.0 resolution: "lodash.castarray@npm:4.4.0" @@ -19246,13 +19643,6 @@ __metadata: languageName: node linkType: hard -"lodash.uniqby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.uniqby@npm:4.7.0" - checksum: 659264545a95726d1493123345aad8cbf56e17810fa9a0b029852c6d42bc80517696af09d99b23bef1845d10d95e01b8b4a1da578f22aeba7a30d3e0022a4938 - languageName: node - linkType: hard - "lodash@npm:4.17.20": version: 4.17.20 resolution: "lodash@npm:4.17.20" @@ -19260,7 +19650,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.10": +"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0, lodash@npm:~4.17.10": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -19368,13 +19758,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.3.1": - version: 7.4.0 - resolution: "lru-cache@npm:7.4.0" - checksum: f966d8b6832ae4b6d454b96b5814a81fdd7312d393208c8ff1456981bafa7c6d5e28f8814813ec196ffac4e33a57c22c7daa24e79192f4c7f0b16acb1b9e7ed1 - languageName: node - linkType: hard - "lz-string@npm:^1.4.4": version: 1.4.4 resolution: "lz-string@npm:1.4.4" @@ -19401,11 +19784,11 @@ __metadata: linkType: hard "magic-string@npm:^0.25.3": - version: 0.25.7 - resolution: "magic-string@npm:0.25.7" + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" dependencies: - sourcemap-codec: ^1.4.4 - checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 + sourcemap-codec: ^1.4.8 + checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a languageName: node linkType: hard @@ -19444,30 +19827,6 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:*, make-fetch-happen@npm:^10.0.2, make-fetch-happen@npm:^10.0.3": - version: 10.0.3 - resolution: "make-fetch-happen@npm:10.0.3" - dependencies: - agentkeepalive: ^4.2.0 - cacache: ^15.3.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.3.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.4.1 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^6.1.1 - ssri: ^8.0.1 - checksum: edf3ba5119c7cf528485dbeafd14dc84c01c97038c13696d20ff5edb5274d9fddc418be3dffe7c542f7dc4691dc221e9faf913b207f6ccb7c81b43f479525c0c - languageName: node - linkType: hard - "make-fetch-happen@npm:^9.1.0": version: 9.1.0 resolution: "make-fetch-happen@npm:9.1.0" @@ -19545,22 +19904,6 @@ __metadata: languageName: node linkType: hard -"marked-terminal@npm:^5.0.0": - version: 5.1.1 - resolution: "marked-terminal@npm:5.1.1" - dependencies: - ansi-escapes: ^5.0.0 - cardinal: ^2.1.1 - chalk: ^5.0.0 - cli-table3: ^0.6.1 - node-emoji: ^1.11.0 - supports-hyperlinks: ^2.2.0 - peerDependencies: - marked: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - checksum: 24ceb02ebd10e9c6c2fac2240a2cc019093c95029732779ea41ba7a81c45867e956d1f6f1ae7426d5247ab5185b9cdaea31a9663e4d624c17335660fa9474c3d - languageName: node - linkType: hard - "marked@npm:1.1.1": version: 1.1.1 resolution: "marked@npm:1.1.1" @@ -19588,15 +19931,6 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.10": - version: 4.0.12 - resolution: "marked@npm:4.0.12" - bin: - marked: bin/marked.js - checksum: 7575117f85a8986652f3ac8b8a7b95056c4c5fce01a1fc76dc4c7960412cb4c9bd9da8133487159b6b3ff84f52b543dfe9a36f826a5f358892b5ec4b6824f192 - languageName: node - linkType: hard - "matcher-collection@npm:^2.0.0": version: 2.0.1 resolution: "matcher-collection@npm:2.0.1" @@ -19958,15 +20292,6 @@ __metadata: languageName: node linkType: hard -"mime@npm:^3.0.0": - version: 3.0.0 - resolution: "mime@npm:3.0.0" - bin: - mime: cli.js - checksum: f43f9b7bfa64534e6b05bd6062961681aeb406a5b53673b53b683f27fcc4e739989941836a355eef831f4478923651ecc739f4a5f6e20a76487b432bfd4db928 - languageName: node - linkType: hard - "mimic-fn@npm:^1.0.0": version: 1.2.0 resolution: "mimic-fn@npm:1.2.0" @@ -20022,7 +20347,7 @@ __metadata: languageName: node linkType: hard -"mini-css-extract-plugin@npm:*, mini-css-extract-plugin@npm:^2.6.0": +"mini-css-extract-plugin@npm:*": version: 2.6.0 resolution: "mini-css-extract-plugin@npm:2.6.0" dependencies: @@ -20046,6 +20371,17 @@ __metadata: languageName: node linkType: hard +"mini-css-extract-plugin@npm:^2.6.1": + version: 2.6.1 + resolution: "mini-css-extract-plugin@npm:2.6.1" + dependencies: + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^5.0.0 + checksum: df60840404878c4832b4104799fd29c5a89b06b1e377956c8d4a5729efe0ef301a52e5087d6f383871df5e69a8445922a0ae635c11abf412d7645a7096d0e973 + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -20087,15 +20423,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.0": - version: 5.0.1 - resolution: "minimatch@npm:5.0.1" - dependencies: - brace-expansion: ^2.0.1 - checksum: b34b98463da4754bc526b244d680c69d4d6089451ebe512edaf6dd9eeed0279399cfa3edb19233513b8f830bf4bfcad911dddcdf125e75074100d52f724774f0 - languageName: node - linkType: hard - "minimatch@npm:~3.0.2": version: 3.0.8 resolution: "minimatch@npm:3.0.8" @@ -20132,7 +20459,7 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^1.3.2, minipass-fetch@npm:^1.4.1": +"minipass-fetch@npm:^1.3.2": version: 1.4.1 resolution: "minipass-fetch@npm:1.4.1" dependencies: @@ -20156,17 +20483,7 @@ __metadata: languageName: node linkType: hard -"minipass-json-stream@npm:^1.0.1": - version: 1.0.1 - resolution: "minipass-json-stream@npm:1.0.1" - dependencies: - jsonparse: ^1.3.1 - minipass: ^3.0.0 - checksum: 791b696a27d1074c4c08dab1bf5a9f3201145c2933e428f45d880467bce12c60de4703203d2928de4b162d0ae77b0bb4b55f96cb846645800aa0eb4919b3e796 - languageName: node - linkType: hard - -"minipass-pipeline@npm:*, minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -20184,7 +20501,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:*, minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3": version: 3.1.6 resolution: "minipass@npm:3.1.6" dependencies: @@ -20193,7 +20510,7 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": +"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -20248,18 +20565,14 @@ __metadata: languageName: node linkType: hard -"mkdirp-infer-owner@npm:*, mkdirp-infer-owner@npm:^2.0.0": - version: 2.0.0 - resolution: "mkdirp-infer-owner@npm:2.0.0" - dependencies: - chownr: ^2.0.0 - infer-owner: ^1.0.4 - mkdirp: ^1.0.3 - checksum: d8f4ecd32f6762459d6b5714eae6487c67ae9734ab14e26d14377ddd9b2a1bf868d8baa18c0f3e73d3d513f53ec7a698e0f81a9367102c870a55bef7833880f7 +"mkdirp@npm:0.3.x, mkdirp@npm:~0.3.5": + version: 0.3.5 + resolution: "mkdirp@npm:0.3.5" + checksum: 5b7db0f7db199b87f5b0e563b919ad214d1a2c55c3896db332ef1e66c2192b2077112a4733b2c6ff99c833a6f85ba5686f05a768c411fe461b667a17421d37a8 languageName: node linkType: hard -"mkdirp@npm:*, mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -20268,13 +20581,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:0.3.x, mkdirp@npm:~0.3.5": - version: 0.3.5 - resolution: "mkdirp@npm:0.3.5" - checksum: 5b7db0f7db199b87f5b0e563b919ad214d1a2c55c3896db332ef1e66c2192b2077112a4733b2c6ff99c833a6f85ba5686f05a768c411fe461b667a17421d37a8 - languageName: node - linkType: hard - "mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.4": version: 0.5.5 resolution: "mkdirp@npm:0.5.5" @@ -20377,13 +20683,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:*, ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -20398,6 +20697,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + "multicast-dns@npm:^7.2.4": version: 7.2.4 resolution: "multicast-dns@npm:7.2.4" @@ -20460,7 +20766,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.4": +"nanoid@npm:^3.3.1, nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" bin: @@ -20562,7 +20868,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3, negotiator@npm:^0.6.2": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -20576,13 +20882,6 @@ __metadata: languageName: node linkType: hard -"nerf-dart@npm:^1.0.0": - version: 1.0.0 - resolution: "nerf-dart@npm:1.0.0" - checksum: 0e5508d83eae21a6ed0bd32b3a048c849741023811f06efa972800f4ad55eaa8205442e81c406ad051771f232c4ed3d3ee262f6c850bbcad9660f54a6471a4b9 - languageName: node - linkType: hard - "nested-error-stacks@npm:^2.0.0, nested-error-stacks@npm:^2.1.0": version: 2.1.0 resolution: "nested-error-stacks@npm:2.1.0" @@ -20658,7 +20957,7 @@ __metadata: languageName: node linkType: hard -"node-emoji@npm:^1.10.0, node-emoji@npm:^1.11.0": +"node-emoji@npm:^1.10.0": version: 1.11.0 resolution: "node-emoji@npm:1.11.0" dependencies: @@ -20719,26 +21018,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:*": - version: 9.0.0 - resolution: "node-gyp@npm:9.0.0" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^5.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 4d8ef8860f7e4f4d86c91db3f519d26ed5cc23b48fe54543e2afd86162b4acbd14f21de42a5db344525efb69a991e021b96a68c70c6e2d5f4a5cb770793da6d3 - languageName: node - linkType: hard - "node-gyp@npm:^8.4.1, node-gyp@npm:latest": version: 8.4.1 resolution: "node-gyp@npm:8.4.1" @@ -20832,6 +21111,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.3": + version: 2.0.5 + resolution: "node-releases@npm:2.0.5" + checksum: e85d949addd19f8827f32569d2be5751e7812ccf6cc47879d49f79b5234ff4982225e39a3929315f96370823b070640fb04d79fc0ddec8b515a969a03493a42f + languageName: node + linkType: hard + "node-sass@npm:^7.0.1": version: 7.0.1 resolution: "node-sass@npm:7.0.1" @@ -20877,7 +21163,7 @@ __metadata: languageName: node linkType: hard -"nopt@npm:*, nopt@npm:^5.0.0": +"nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" dependencies: @@ -20911,7 +21197,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.2": +"normalize-package-data@npm:^3.0.0": version: 3.0.3 resolution: "normalize-package-data@npm:3.0.3" dependencies: @@ -20953,31 +21239,13 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^6.0.0, normalize-url@npm:^6.0.1, normalize-url@npm:^6.1.0": +"normalize-url@npm:^6.0.1, normalize-url@npm:^6.1.0": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 languageName: node linkType: hard -"npm-audit-report@npm:*": - version: 2.1.5 - resolution: "npm-audit-report@npm:2.1.5" - dependencies: - chalk: ^4.0.0 - checksum: 9199c4331a29b478b7adbafe1bf463943f65cfd840f62ffe9e6263f0ae64d77725ea102126b3892ef3379a6770a6fe11e1f68ab4cb196c0045db2e1aeafc593d - languageName: node - linkType: hard - -"npm-bundled@npm:^1.1.1": - version: 1.1.2 - resolution: "npm-bundled@npm:1.1.2" - dependencies: - npm-normalize-package-bin: ^1.0.1 - checksum: 6e599155ef28d0b498622f47f1ba189dfbae05095a1ed17cb3a5babf961e965dd5eab621f0ec6f0a98de774e5836b8f5a5ee639010d64f42850a74acec3d4d09 - languageName: node - linkType: hard - "npm-conf@npm:^1.1.3": version: 1.1.3 resolution: "npm-conf@npm:1.1.3" @@ -20988,84 +21256,6 @@ __metadata: languageName: node linkType: hard -"npm-install-checks@npm:*, npm-install-checks@npm:^4.0.0": - version: 4.0.0 - resolution: "npm-install-checks@npm:4.0.0" - dependencies: - semver: ^7.1.1 - checksum: 8308ff48e61e0863d7f148f62543e1f6c832525a7d8002ea742d5e478efa8b29bf65a87f9fb82786e15232e4b3d0362b126c45afdceed4c051c0d3c227dd0ace - languageName: node - linkType: hard - -"npm-normalize-package-bin@npm:^1.0.0, npm-normalize-package-bin@npm:^1.0.1": - version: 1.0.1 - resolution: "npm-normalize-package-bin@npm:1.0.1" - checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 - languageName: node - linkType: hard - -"npm-package-arg@npm:*, npm-package-arg@npm:^9.0.0": - version: 9.0.0 - resolution: "npm-package-arg@npm:9.0.0" - dependencies: - hosted-git-info: ^4.1.0 - semver: ^7.3.5 - validate-npm-package-name: ^3.0.0 - checksum: 88cea0eb8691915dcd13bf206fecacda52bfbf7724ada55359449b2a2a5965fe865dd319ff1832bf47b4d87bb9885ec4e80da2f7fdac5b37414d96211c316c86 - languageName: node - linkType: hard - -"npm-packlist@npm:^3.0.0": - version: 3.0.0 - resolution: "npm-packlist@npm:3.0.0" - dependencies: - glob: ^7.1.6 - ignore-walk: ^4.0.1 - npm-bundled: ^1.1.1 - npm-normalize-package-bin: ^1.0.1 - bin: - npm-packlist: bin/index.js - checksum: 8550ecdec5feb2708aa8289e71c3e9ed72dd792642dd3d2c871955504c0e460bc1c2106483a164eb405b3cdfcfddf311315d4a647fca1a511f710654c015a91e - languageName: node - linkType: hard - -"npm-pick-manifest@npm:*, npm-pick-manifest@npm:^7.0.0": - version: 7.0.0 - resolution: "npm-pick-manifest@npm:7.0.0" - dependencies: - npm-install-checks: ^4.0.0 - npm-normalize-package-bin: ^1.0.1 - npm-package-arg: ^9.0.0 - semver: ^7.3.5 - checksum: 3ef8231429dd0785ca069b9a54066f49b879a9a487abcd04d4c67cbf858772ce441fd15aa530fb8dd53786c19f01c77d876b02e244a3f38e718353e96ac825db - languageName: node - linkType: hard - -"npm-profile@npm:*": - version: 6.0.2 - resolution: "npm-profile@npm:6.0.2" - dependencies: - npm-registry-fetch: ^13.0.0 - proc-log: ^2.0.0 - checksum: 15ed13a350c81a9b469cd7d7874c693edf7d427e65b76da8d4c40260275747d4f6d80c11b65a91159ff61ddecea517571da5ac8be197464f2fedab3a22177805 - languageName: node - linkType: hard - -"npm-registry-fetch@npm:*, npm-registry-fetch@npm:^13.0.0": - version: 13.0.0 - resolution: "npm-registry-fetch@npm:13.0.0" - dependencies: - make-fetch-happen: ^10.0.2 - minipass: ^3.1.6 - minipass-fetch: ^1.4.1 - minipass-json-stream: ^1.0.1 - minizlib: ^2.1.2 - npm-package-arg: ^9.0.0 - proc-log: ^2.0.0 - checksum: 3cb3275e71ec9922bfe4118cc30a6b25dee8ffed1c47d2f8f122c9e78ef3f67c1fa8adc8c7b5c22e1d8c159224a76fb25f01b6e6f39d01c7825b6cee92f8b58c - languageName: node - linkType: hard - "npm-run-path@npm:^2.0.0": version: 2.0.2 resolution: "npm-run-path@npm:2.0.2" @@ -21084,107 +21274,6 @@ __metadata: languageName: node linkType: hard -"npm-user-validate@npm:*": - version: 1.0.1 - resolution: "npm-user-validate@npm:1.0.1" - checksum: 38ec7eb78a0c001adc220798cd986592e03f6232f171af64c10c28fb5053d058d7f2748d1c42346338fa04fbeb5c0529f704cd5794aed1c33d303d978ac97b77 - languageName: node - linkType: hard - -"npm@npm:^8.3.0": - version: 8.5.2 - resolution: "npm@npm:8.5.2" - dependencies: - "@isaacs/string-locale-compare": "*" - "@npmcli/arborist": "*" - "@npmcli/ci-detect": "*" - "@npmcli/config": "*" - "@npmcli/map-workspaces": "*" - "@npmcli/package-json": "*" - "@npmcli/run-script": "*" - abbrev: "*" - ansicolors: "*" - ansistyles: "*" - archy: "*" - cacache: "*" - chalk: "*" - chownr: "*" - cli-columns: "*" - cli-table3: "*" - columnify: "*" - fastest-levenshtein: "*" - glob: "*" - graceful-fs: "*" - hosted-git-info: "*" - ini: "*" - init-package-json: "*" - is-cidr: "*" - json-parse-even-better-errors: "*" - libnpmaccess: "*" - libnpmdiff: "*" - libnpmexec: "*" - libnpmfund: "*" - libnpmhook: "*" - libnpmorg: "*" - libnpmpack: "*" - libnpmpublish: "*" - libnpmsearch: "*" - libnpmteam: "*" - libnpmversion: "*" - make-fetch-happen: "*" - minipass: "*" - minipass-pipeline: "*" - mkdirp: "*" - mkdirp-infer-owner: "*" - ms: "*" - node-gyp: "*" - nopt: "*" - npm-audit-report: "*" - npm-install-checks: "*" - npm-package-arg: "*" - npm-pick-manifest: "*" - npm-profile: "*" - npm-registry-fetch: "*" - npm-user-validate: "*" - npmlog: "*" - opener: "*" - pacote: "*" - parse-conflict-json: "*" - proc-log: "*" - qrcode-terminal: "*" - read: "*" - read-package-json: "*" - read-package-json-fast: "*" - readdir-scoped-modules: "*" - rimraf: "*" - semver: "*" - ssri: "*" - tar: "*" - text-table: "*" - tiny-relative-date: "*" - treeverse: "*" - validate-npm-package-name: "*" - which: "*" - write-file-atomic: "*" - bin: - npm: bin/npm-cli.js - npx: bin/npx-cli.js - checksum: b43ffe2c8c7ca56f7e0efbec889281b682784b5286451ac62f548d8c4ccaa6fc550fe0590546caaf8d833d42270f4b000a34bc78add4268650f55dda055984c9 - languageName: node - linkType: hard - -"npmlog@npm:*, npmlog@npm:^6.0.0, npmlog@npm:^6.0.1": - version: 6.0.1 - resolution: "npmlog@npm:6.0.1" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.0 - set-blocking: ^2.0.0 - checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 - languageName: node - linkType: hard - "npmlog@npm:^4.0.1": version: 4.1.2 resolution: "npmlog@npm:4.1.2" @@ -21209,6 +21298,18 @@ __metadata: languageName: node linkType: hard +"npmlog@npm:^6.0.0": + version: 6.0.1 + resolution: "npmlog@npm:6.0.1" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.0 + set-blocking: ^2.0.0 + checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 + languageName: node + linkType: hard + "nprogress@npm:^0.2.0": version: 0.2.0 resolution: "nprogress@npm:0.2.0" @@ -21519,7 +21620,7 @@ __metadata: languageName: node linkType: hard -"opener@npm:*, opener@npm:^1.5.2": +"opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" bin: @@ -21636,13 +21737,6 @@ __metadata: languageName: node linkType: hard -"p-each-series@npm:^2.1.0": - version: 2.2.0 - resolution: "p-each-series@npm:2.2.0" - checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c - languageName: node - linkType: hard - "p-event@npm:^4.1.0": version: 4.2.0 resolution: "p-event@npm:4.2.0" @@ -21652,7 +21746,7 @@ __metadata: languageName: node linkType: hard -"p-filter@npm:^2.0.0, p-filter@npm:^2.1.0": +"p-filter@npm:^2.1.0": version: 2.1.0 resolution: "p-filter@npm:2.1.0" dependencies: @@ -21763,14 +21857,7 @@ __metadata: languageName: node linkType: hard -"p-reduce@npm:^2.0.0": - version: 2.1.0 - resolution: "p-reduce@npm:2.1.0" - checksum: 99b26d36066a921982f25c575e78355824da0787c486e3dd9fc867460e8bf17d5fb3ce98d006b41bdc81ffc0aa99edf5faee53d11fe282a20291fb721b0cb1c7 - languageName: node - linkType: hard - -"p-retry@npm:^4.0.0, p-retry@npm:^4.5.0": +"p-retry@npm:^4.5.0": version: 4.6.1 resolution: "p-retry@npm:4.6.1" dependencies: @@ -21855,37 +21942,6 @@ __metadata: languageName: node linkType: hard -"pacote@npm:*, pacote@npm:^13.0.1, pacote@npm:^13.0.2": - version: 13.0.3 - resolution: "pacote@npm:13.0.3" - dependencies: - "@npmcli/git": ^3.0.0 - "@npmcli/installed-package-contents": ^1.0.7 - "@npmcli/promise-spawn": ^1.2.0 - "@npmcli/run-script": ^3.0.0 - cacache: ^15.3.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - infer-owner: ^1.0.4 - minipass: ^3.1.6 - mkdirp: ^1.0.4 - npm-package-arg: ^9.0.0 - npm-packlist: ^3.0.0 - npm-pick-manifest: ^7.0.0 - npm-registry-fetch: ^13.0.0 - proc-log: ^2.0.0 - promise-retry: ^2.0.1 - read-package-json: ^4.1.1 - read-package-json-fast: ^2.0.3 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.1.11 - bin: - pacote: lib/bin.js - checksum: d77427d3d3f6ff822fbd06247400cffcb084c07e2da907a8e8f7982d9239fe9c179aef192156a715ba9b397481e41f8a39bbb1123d0d9bfbb68e4eeb2f07e743 - languageName: node - linkType: hard - "pako@npm:^0.2.5": version: 0.2.9 resolution: "pako@npm:0.2.9" @@ -21943,17 +21999,6 @@ __metadata: languageName: node linkType: hard -"parse-conflict-json@npm:*, parse-conflict-json@npm:^2.0.1": - version: 2.0.1 - resolution: "parse-conflict-json@npm:2.0.1" - dependencies: - json-parse-even-better-errors: ^2.3.1 - just-diff: ^5.0.1 - just-diff-apply: ^4.0.1 - checksum: 398728731f3b7330d2885075f1dad0abd6fb943fca6aaa5f0edf46ccf06fe72b3ae09327f19447e98052fdfbf8bcfeee3aa14d7eb843846ec158b871a7fc1bba - languageName: node - linkType: hard - "parse-entities@npm:^2.0.0": version: 2.0.0 resolution: "parse-entities@npm:2.0.0" @@ -22307,16 +22352,6 @@ __metadata: languageName: node linkType: hard -"pkg-conf@npm:^2.1.0": - version: 2.1.0 - resolution: "pkg-conf@npm:2.1.0" - dependencies: - find-up: ^2.0.0 - load-json-file: ^4.0.0 - checksum: b50775157262abd1bfb4d3d948f3fc6c009d10266c6507d4de296af4e2cbb6d2738310784432185886d83144466fbb286b6e8ff0bc23dc5ee7d81810dc6c4788 - languageName: node - linkType: hard - "pkg-dir@npm:4.2.0, pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -22514,7 +22549,7 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^8.2.0": +"postcss-calc@npm:^8.2.0, postcss-calc@npm:^8.2.3": version: 8.2.4 resolution: "postcss-calc@npm:8.2.4" dependencies: @@ -22540,6 +22575,20 @@ __metadata: languageName: node linkType: hard +"postcss-colormin@npm:^5.3.0": + version: 5.3.0 + resolution: "postcss-colormin@npm:5.3.0" + dependencies: + browserslist: ^4.16.6 + caniuse-api: ^3.0.0 + colord: ^2.9.1 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 3d3e3cc25071407fb73d68541ca1039ebd154fceb649041461a8a3cab0400cc89b42dbb34a4eeaf573be4ba2370ce23af5e01aff5e03a8d72275f40605577212 + languageName: node + linkType: hard + "postcss-convert-values@npm:^5.0.4": version: 5.0.4 resolution: "postcss-convert-values@npm:5.0.4" @@ -22551,6 +22600,18 @@ __metadata: languageName: node linkType: hard +"postcss-convert-values@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-convert-values@npm:5.1.1" + dependencies: + browserslist: ^4.20.3 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 5f582b2159a27faf8667fcba27bc0bbe953d89ceba33579a7b9cc6363555bf05e6aaad9708a2496a335d82e67e5164bdb69f9a58cdc7e3f68abd2e7a3178e5f8 + languageName: node + linkType: hard + "postcss-discard-comments@npm:^5.0.3": version: 5.0.3 resolution: "postcss-discard-comments@npm:5.0.3" @@ -22560,6 +22621,15 @@ __metadata: languageName: node linkType: hard +"postcss-discard-comments@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-discard-comments@npm:5.1.1" + peerDependencies: + postcss: ^8.2.15 + checksum: 578c3cb3e8c6194cf8b5f2170abd6636bf2fe1ec9ba6e03431f5a7e4aae22c6c6605a5e8e2731e824df07c1188f3defa2f4ba28da4adafe45c068af1189f1f2c + languageName: node + linkType: hard + "postcss-discard-duplicates@npm:^5.0.3": version: 5.0.3 resolution: "postcss-discard-duplicates@npm:5.0.3" @@ -22569,6 +22639,15 @@ __metadata: languageName: node linkType: hard +"postcss-discard-duplicates@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-duplicates@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 + languageName: node + linkType: hard + "postcss-discard-empty@npm:^5.0.3": version: 5.0.3 resolution: "postcss-discard-empty@npm:5.0.3" @@ -22578,23 +22657,41 @@ __metadata: languageName: node linkType: hard +"postcss-discard-empty@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-discard-empty@npm:5.1.1" + peerDependencies: + postcss: ^8.2.15 + checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 + languageName: node + linkType: hard + "postcss-discard-overridden@npm:^5.0.4": version: 5.0.4 resolution: "postcss-discard-overridden@npm:5.0.4" peerDependencies: postcss: ^8.2.15 - checksum: 85887026ce5b67bddf96a7bed73eb5c0b94727c9517663dba89da1f610cf65ddb8856653b180780fab773bb74d6d249b89fb46c2a63ec965bdad2dd4a332ff78 + checksum: 85887026ce5b67bddf96a7bed73eb5c0b94727c9517663dba89da1f610cf65ddb8856653b180780fab773bb74d6d249b89fb46c2a63ec965bdad2dd4a332ff78 + languageName: node + linkType: hard + +"postcss-discard-overridden@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-overridden@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 languageName: node linkType: hard -"postcss-discard-unused@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-discard-unused@npm:5.0.3" +"postcss-discard-unused@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-unused@npm:5.1.0" dependencies: postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 36074e7ce881915a574322ab4b04691582fb580065edcb929e208c253b9ca9c890f435ac99cc3ccee5d4308a77dd32e754cea0124c5217e13da645ea1af1346a + checksum: 5c09403a342a065033f5f22cefe6b402c76c2dc0aac31a736a2062d82c2a09f0ff2525b3df3a0c6f4e0ffc7a0392efd44bfe7f9d018e4cae30d15b818b216622 languageName: node linkType: hard @@ -22612,15 +22709,15 @@ __metadata: languageName: node linkType: hard -"postcss-merge-idents@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-merge-idents@npm:5.0.3" +"postcss-merge-idents@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-merge-idents@npm:5.1.1" dependencies: - cssnano-utils: ^3.0.2 + cssnano-utils: ^3.1.0 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: ed211d59dff06633a6e98f5df5baf12c75311b4070e178bce9b2864790d0ce5740cbd10e29784e00dc3b2a7f1f7c92e8728c299c750b3eabba116dc1307f139d + checksum: ed8a673617ea6ae3e15d69558063cb1a5eeee01732f78cdc0196ab910324abc30828724ab8dfc4cda27e8c0077542e25688470f829819a2604625a673387ec72 languageName: node linkType: hard @@ -22636,6 +22733,18 @@ __metadata: languageName: node linkType: hard +"postcss-merge-longhand@npm:^5.1.5": + version: 5.1.5 + resolution: "postcss-merge-longhand@npm:5.1.5" + dependencies: + postcss-value-parser: ^4.2.0 + stylehacks: ^5.1.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 1d51e3d6a10f799473e46009ea69ce53c4a82eb2861fd58e6eab17bde3022a3350f440a1d2237a4fa65dde49fa5173f2ffae7781cf4f4e9c5cd15d0d88c7c3d7 + languageName: node + linkType: hard + "postcss-merge-rules@npm:^5.0.6": version: 5.0.6 resolution: "postcss-merge-rules@npm:5.0.6" @@ -22650,6 +22759,20 @@ __metadata: languageName: node linkType: hard +"postcss-merge-rules@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-merge-rules@npm:5.1.1" + dependencies: + browserslist: ^4.16.6 + caniuse-api: ^3.0.0 + cssnano-utils: ^3.1.0 + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 163cba5b688346b6bd142b677439257ada6f910dd32dbcffa2a7a58719a609bb9859f597da382bbd8be14a259bea26248aefd99aa890e8fd3753424dfedbde6e + languageName: node + linkType: hard + "postcss-minify-font-values@npm:^5.0.4": version: 5.0.4 resolution: "postcss-minify-font-values@npm:5.0.4" @@ -22661,6 +22784,17 @@ __metadata: languageName: node linkType: hard +"postcss-minify-font-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-font-values@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece + languageName: node + linkType: hard + "postcss-minify-gradients@npm:^5.0.6": version: 5.0.6 resolution: "postcss-minify-gradients@npm:5.0.6" @@ -22674,6 +22808,19 @@ __metadata: languageName: node linkType: hard +"postcss-minify-gradients@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-minify-gradients@npm:5.1.1" + dependencies: + colord: ^2.9.1 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 + languageName: node + linkType: hard + "postcss-minify-params@npm:^5.0.5": version: 5.0.5 resolution: "postcss-minify-params@npm:5.0.5" @@ -22687,6 +22834,19 @@ __metadata: languageName: node linkType: hard +"postcss-minify-params@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-minify-params@npm:5.1.3" + dependencies: + browserslist: ^4.16.6 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 2d218f6b82474310c866b690210595a5e6a4c695f174f9100b018adb4a171bd67b1adaba26c241b3d41a4ea0f4962e0f5a77cf12ae60d9db76f80b0c7cbd6bcd + languageName: node + linkType: hard + "postcss-minify-selectors@npm:^5.1.3": version: 5.1.3 resolution: "postcss-minify-selectors@npm:5.1.3" @@ -22698,6 +22858,17 @@ __metadata: languageName: node linkType: hard +"postcss-minify-selectors@npm:^5.2.0": + version: 5.2.0 + resolution: "postcss-minify-selectors@npm:5.2.0" + dependencies: + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 651fbac038aaba10efaf4ed793d008439042954e5025462c14964ce24ca4bde868bb25ee846a4ff41df8a719fb8ee9f159ef0a036f54e6a09ed937bcc6884cf0 + languageName: node + linkType: hard + "postcss-modules-extract-imports@npm:^3.0.0": version: 3.0.0 resolution: "postcss-modules-extract-imports@npm:3.0.0" @@ -22751,6 +22922,15 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-charset@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-charset@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 + languageName: node + linkType: hard + "postcss-normalize-display-values@npm:^5.0.3": version: 5.0.3 resolution: "postcss-normalize-display-values@npm:5.0.3" @@ -22762,6 +22942,17 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-display-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-display-values@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 + languageName: node + linkType: hard + "postcss-normalize-positions@npm:^5.0.4": version: 5.0.4 resolution: "postcss-normalize-positions@npm:5.0.4" @@ -22773,6 +22964,17 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-positions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-positions@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 08a1f12cc8e192120c1ee14dc93e603546be507d826a75c2c6ef3224b5e3a17628a42a952317e8349b2708ffdef0560b84dcc20521104317eaa62291cca009f6 + languageName: node + linkType: hard + "postcss-normalize-repeat-style@npm:^5.0.4": version: 5.0.4 resolution: "postcss-normalize-repeat-style@npm:5.0.4" @@ -22784,6 +22986,17 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-repeat-style@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-repeat-style@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 65176c37741d3321fd346586bf42c292a9dab1e4b77a1004d9cde2ae9e015f6fe330c57b44d0ca854a48bd7db0b169875b8d2b5ca501ac9b5381068c337aac19 + languageName: node + linkType: hard + "postcss-normalize-string@npm:^5.0.4": version: 5.0.4 resolution: "postcss-normalize-string@npm:5.0.4" @@ -22795,6 +23008,17 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-string@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-string@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada + languageName: node + linkType: hard + "postcss-normalize-timing-functions@npm:^5.0.3": version: 5.0.3 resolution: "postcss-normalize-timing-functions@npm:5.0.3" @@ -22806,6 +23030,17 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-timing-functions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-timing-functions@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa + languageName: node + linkType: hard + "postcss-normalize-unicode@npm:^5.0.4": version: 5.0.4 resolution: "postcss-normalize-unicode@npm:5.0.4" @@ -22818,6 +23053,18 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-unicode@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-unicode@npm:5.1.0" + dependencies: + browserslist: ^4.16.6 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 3570c90050f190811b5dbf7b4cf4f30f0b627c1ba5fbe5ad332e8b0aa7ef14b3d0aa2af1cb1074d0267aec8c9771e28866d867c8a8a0c433b6c34e50445f9c16 + languageName: node + linkType: hard + "postcss-normalize-url@npm:^5.0.5": version: 5.0.5 resolution: "postcss-normalize-url@npm:5.0.5" @@ -22830,6 +23077,18 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-url@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-url@npm:5.1.0" + dependencies: + normalize-url: ^6.0.1 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 + languageName: node + linkType: hard + "postcss-normalize-whitespace@npm:^5.0.4": version: 5.0.4 resolution: "postcss-normalize-whitespace@npm:5.0.4" @@ -22841,6 +23100,17 @@ __metadata: languageName: node linkType: hard +"postcss-normalize-whitespace@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-whitespace@npm:5.1.1" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 + languageName: node + linkType: hard + "postcss-ordered-values@npm:^5.0.5": version: 5.0.5 resolution: "postcss-ordered-values@npm:5.0.5" @@ -22853,14 +23123,26 @@ __metadata: languageName: node linkType: hard -"postcss-reduce-idents@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-reduce-idents@npm:5.0.3" +"postcss-ordered-values@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-ordered-values@npm:5.1.1" + dependencies: + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: d56825ef03225ccaeff9704b86008d012b91b0ace4b219f6d443aca628b7f0a1da922abc4a3fb8ca802baf09320abaa983f278ac416e1caf2658d119491686a4 + languageName: node + linkType: hard + +"postcss-reduce-idents@npm:^5.2.0": + version: 5.2.0 + resolution: "postcss-reduce-idents@npm:5.2.0" dependencies: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: a88acaeb8a4e828b848535be3f0e4d5477d8b1dc2f4bb1af67e1262d96d583468b77db9d5688bcfc748c7c1549f4fb28558c48d0aac3af86d6b0fcb96e3dd996 + checksum: f0d644c86e160dd36ee4dd924ab7d6feacac867c87702e2f98f96b409430a62de4fec2dfc3c8731bda4e14196e29a752b4558942f0af2a3e6cd7f1f4b173db8e languageName: node linkType: hard @@ -22876,6 +23158,18 @@ __metadata: languageName: node linkType: hard +"postcss-reduce-initial@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-initial@npm:5.1.0" + dependencies: + browserslist: ^4.16.6 + caniuse-api: ^3.0.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 2cb10fa3fa7d7df9e4376df64d19177debd5cfe6d8fde52327d27de425eb28d5d85fa45c857cf7c0aed35d16455b6f4762b53959480f92a1dfa4b51a1d780a32 + languageName: node + linkType: hard + "postcss-reduce-transforms@npm:^5.0.4": version: 5.0.4 resolution: "postcss-reduce-transforms@npm:5.0.4" @@ -22887,6 +23181,17 @@ __metadata: languageName: node linkType: hard +"postcss-reduce-transforms@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-transforms@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.2.15 + checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f + languageName: node + linkType: hard + "postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": version: 6.0.9 resolution: "postcss-selector-parser@npm:6.0.9" @@ -22920,6 +23225,18 @@ __metadata: languageName: node linkType: hard +"postcss-svgo@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-svgo@npm:5.1.0" + dependencies: + postcss-value-parser: ^4.2.0 + svgo: ^2.7.0 + peerDependencies: + postcss: ^8.2.15 + checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd + languageName: node + linkType: hard + "postcss-unique-selectors@npm:^5.0.4": version: 5.0.4 resolution: "postcss-unique-selectors@npm:5.0.4" @@ -22931,6 +23248,17 @@ __metadata: languageName: node linkType: hard +"postcss-unique-selectors@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-unique-selectors@npm:5.1.1" + dependencies: + postcss-selector-parser: ^6.0.5 + peerDependencies: + postcss: ^8.2.15 + checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 + languageName: node + linkType: hard + "postcss-value-parser@npm:^3.2.3": version: 3.3.1 resolution: "postcss-value-parser@npm:3.3.1" @@ -22945,12 +23273,12 @@ __metadata: languageName: node linkType: hard -"postcss-zindex@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-zindex@npm:5.0.2" +"postcss-zindex@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-zindex@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: bdd51f57d768a4245522c712669199e977f0a4e25484d6023ebbf9b13ba941c16a5a6241ea5e8f59e5147b2c64ad58e496bb330ab9c8df03a948ed22aff1a4fb + checksum: 8581e0ee552622489dcb9fb9609a3ccc261a67a229ba91a70bd138fe102a2d04cedb14642b82b673d4cac7b559ef32574f2dafde2ff7816eecac024d231c5ead languageName: node linkType: hard @@ -22976,7 +23304,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.3.5, postcss@npm:^8.3.7, postcss@npm:^8.4.14, postcss@npm:^8.4.7": +"postcss@npm:^8.2.15, postcss@npm:^8.3.7, postcss@npm:^8.4.14, postcss@npm:^8.4.7": version: 8.4.14 resolution: "postcss@npm:8.4.14" dependencies: @@ -22987,6 +23315,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.3.11, postcss@npm:^8.3.5": + version: 8.4.7 + resolution: "postcss@npm:8.4.7" + dependencies: + nanoid: ^3.3.1 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: a515ed36622edbee1d3ba153298d3b62ae9826dfa6de19204c2a6f975c8d3ad36808423b5119a9d82b78efd486de3ce35a1faf882a36ac8aa09492be4fbb7fe1 + languageName: node + linkType: hard + "postman-code-generators@npm:^1.0.0": version: 1.1.5 resolution: "postman-code-generators@npm:1.1.5" @@ -23227,17 +23566,17 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.23.0, prismjs@npm:^1.25.0, prismjs@npm:~1.27.0": - version: 1.27.0 - resolution: "prismjs@npm:1.27.0" - checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc +"prismjs@npm:^1.23.0": + version: 1.28.0 + resolution: "prismjs@npm:1.28.0" + checksum: bde93fb2beb45b7243219fc53855f59ee54b3fa179f315e8f9d66244d756ef984462e10561bbdc6713d3d7e051852472d7c284f5794a8791eeaefea2fb910b16 languageName: node linkType: hard -"proc-log@npm:*, proc-log@npm:^2.0.0": - version: 2.0.0 - resolution: "proc-log@npm:2.0.0" - checksum: 74ab7f7d47fee1fa81e068e9a7f4cdca7e20b6b14fe51fad1f595bf9d4ce5451c858922a25f447835021ec89192788b56700cd7740ede50966099c41ebe0c70c +"prismjs@npm:^1.25.0, prismjs@npm:~1.27.0": + version: 1.27.0 + resolution: "prismjs@npm:1.27.0" + checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc languageName: node linkType: hard @@ -23262,20 +23601,6 @@ __metadata: languageName: node linkType: hard -"promise-all-reject-late@npm:^1.0.0": - version: 1.0.1 - resolution: "promise-all-reject-late@npm:1.0.1" - checksum: d7d61ac412352e2c8c3463caa5b1c3ca0f0cc3db15a09f180a3da1446e33d544c4261fc716f772b95e4c27d559cfd2388540f44104feb356584f9c73cfb9ffcb - languageName: node - linkType: hard - -"promise-call-limit@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-call-limit@npm:1.0.1" - checksum: e69aed17f5f34bbd7aecff28faedb456e3500a08af31ee759ef75f2d8c2219d7c0e59f153f4d8c339056de8c304e0dd4acc500c339e7ea1e9c0e7bb1444367c8 - languageName: node - linkType: hard - "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -23335,15 +23660,6 @@ __metadata: languageName: node linkType: hard -"promzard@npm:^0.3.0": - version: 0.3.0 - resolution: "promzard@npm:0.3.0" - dependencies: - read: 1 - checksum: 443a3b39ac916099988ee0161ab4e22edd1fa27e3d39a38d60e48c11ca6df3f5a90bfe44d95af06ed8659c4050b789ffe64c3f9f8e49a4bea1ea19105c98445a - languageName: node - linkType: hard - "prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.8, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -23651,15 +23967,6 @@ __metadata: languageName: node linkType: hard -"qrcode-terminal@npm:*": - version: 0.12.0 - resolution: "qrcode-terminal@npm:0.12.0" - bin: - qrcode-terminal: ./bin/qrcode-terminal.js - checksum: 51638d11d080e06ef79ef2d5cfe911202159e48d2873d6a80a3c5489b4b767acf4754811ceba4e113db8f41f61a06c163bcb17e6e18e6b34e04a7a5155dac974 - languageName: node - linkType: hard - "qs@npm:6.9.3": version: 6.9.3 resolution: "qs@npm:6.9.3" @@ -23953,9 +24260,9 @@ __metadata: linkType: hard "react-error-overlay@npm:^6.0.9": - version: 6.0.10 - resolution: "react-error-overlay@npm:6.0.10" - checksum: e7384f086a0162eecac8e081fe3c79b32f4ac8690c56bde35ab6b6380d10e6c8375bbb689a450902b6615261fcf6c95ea016fc0b200934667089ca83536bc4a7 + version: 6.0.11 + resolution: "react-error-overlay@npm:6.0.11" + checksum: ce7b44c38fadba9cedd7c095cf39192e632daeccf1d0747292ed524f17dcb056d16bc197ddee5723f9dd888f0b9b19c3b486c430319e30504289b9296f2d2c42 languageName: node linkType: hard @@ -24110,13 +24417,13 @@ __metadata: languageName: node linkType: hard -"react-refresh-typescript@npm:^2.0.4": - version: 2.0.4 - resolution: "react-refresh-typescript@npm:2.0.4" +"react-refresh-typescript@npm:^2.0.5": + version: 2.0.5 + resolution: "react-refresh-typescript@npm:2.0.5" peerDependencies: - react-refresh: 0.10.x || 0.11.x || 0.12.x + react-refresh: 0.10.x || 0.11.x || 0.12.x || 0.13.x typescript: ^4 - checksum: f415d306fe22ed55b674367456e1824f760c1a2a8389a8a3dbadd6209e2da27736a04c72c836fe3843a6bacfd5b4f110cb6a85341da02a52aabb4d86938530ba + checksum: 04b1765280a828e9c989c024fff71ce8290d2374c28bd05a063eed741b660b2820b5223694eec2e2aa5a78b3f8200891fbb6bd6ec17bc8a3d4e1a231c7edae35 languageName: node linkType: hard @@ -24288,13 +24595,6 @@ __metadata: languageName: node linkType: hard -"read-cmd-shim@npm:^2.0.0": - version: 2.0.0 - resolution: "read-cmd-shim@npm:2.0.0" - checksum: 024f0a092d3630ad344af63eb0539bce90978883dd06a93e7bfbb26913168ab034473eae4a85685ea76a982eb31b0e8e16dee9c1138dabb3a925e7c4757952bc - languageName: node - linkType: hard - "read-config-file@npm:6.2.0": version: 6.2.0 resolution: "read-config-file@npm:6.2.0" @@ -24308,28 +24608,6 @@ __metadata: languageName: node linkType: hard -"read-package-json-fast@npm:*, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": - version: 2.0.3 - resolution: "read-package-json-fast@npm:2.0.3" - dependencies: - json-parse-even-better-errors: ^2.3.0 - npm-normalize-package-bin: ^1.0.1 - checksum: fca37b3b2160b9dda7c5588b767f6a2b8ce68d03a044000e568208e20bea0cf6dd2de17b90740ce8da8b42ea79c0b3859649dadf29510bbe77224ea65326a903 - languageName: node - linkType: hard - -"read-package-json@npm:*, read-package-json@npm:^4.1.1": - version: 4.1.1 - resolution: "read-package-json@npm:4.1.1" - dependencies: - glob: ^7.1.1 - json-parse-even-better-errors: ^2.3.0 - normalize-package-data: ^3.0.0 - npm-normalize-package-bin: ^1.0.0 - checksum: d95f6e9747bcce9bdbfae8442a86c41cde3a73691a8a8cdc46e0711e7768718e1f0955a38cbde01a6e571f490bbdc9d6a83713a89eca85646a816e659a78f6f4 - languageName: node - linkType: hard - "read-pkg-up@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg-up@npm:3.0.0" @@ -24340,7 +24618,7 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^7.0.0, read-pkg-up@npm:^7.0.1": +"read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" dependencies: @@ -24362,7 +24640,7 @@ __metadata: languageName: node linkType: hard -"read-pkg@npm:^5.0.0, read-pkg@npm:^5.2.0": +"read-pkg@npm:^5.2.0": version: 5.2.0 resolution: "read-pkg@npm:5.2.0" dependencies: @@ -24374,7 +24652,7 @@ __metadata: languageName: node linkType: hard -"read@npm:*, read@npm:1, read@npm:^1.0.4, read@npm:^1.0.7": +"read@npm:^1.0.4": version: 1.0.7 resolution: "read@npm:1.0.7" dependencies: @@ -24442,18 +24720,6 @@ __metadata: languageName: node linkType: hard -"readdir-scoped-modules@npm:*, readdir-scoped-modules@npm:^1.1.0": - version: 1.1.0 - resolution: "readdir-scoped-modules@npm:1.1.0" - dependencies: - debuglog: ^1.0.1 - dezalgo: ^1.0.0 - graceful-fs: ^4.1.2 - once: ^1.3.0 - checksum: 6d9f334e40dfd0f5e4a8aab5e67eb460c95c85083c690431f87ab2c9135191170e70c2db6d71afcafb78e073d23eb95dcb3fc33ef91308f6ebfe3197be35e608 - languageName: node - linkType: hard - "readdirp@npm:^2.2.1": version: 2.2.1 resolution: "readdirp@npm:2.2.1" @@ -24518,15 +24784,6 @@ __metadata: languageName: node linkType: hard -"redeyed@npm:~2.1.0": - version: 2.1.1 - resolution: "redeyed@npm:2.1.1" - dependencies: - esprima: ~4.0.0 - checksum: 39a1426e377727cfb47a0e24e95c1cf78d969fbc388dc1e0fa1e2ef8a8756450cefb8b0c2598f63b85f1a331986fca7604c0db798427a5775a1dbdb9c1291979 - languageName: node - linkType: hard - "reduce-css-calc@npm:^1.3.0": version: 1.3.0 resolution: "reduce-css-calc@npm:1.3.0" @@ -24649,6 +24906,15 @@ __metadata: languageName: node linkType: hard +"regenerator-transform@npm:^0.15.0": + version: 0.15.0 + resolution: "regenerator-transform@npm:0.15.0" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 86e54849ab1167618d28bb56d214c52a983daf29b0d115c976d79840511420049b6b42c9ebdf187defa8e7129bdd74b6dd266420d0d3868c9fa7f793b5d15d49 + languageName: node + linkType: hard + "regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": version: 1.0.2 resolution: "regex-not@npm:1.0.2" @@ -25303,17 +25569,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:*, rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - "rimraf@npm:2, rimraf@npm:2.5.2 - 2.7.1, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.3": version: 2.7.1 resolution: "rimraf@npm:2.7.1" @@ -25325,6 +25580,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + "rimraf@npm:~2.2.0": version: 2.2.8 resolution: "rimraf@npm:2.2.8" @@ -25381,7 +25647,7 @@ __metadata: release-it-yarn-workspaces: ^2.0.1 ts-jest: ^27.1.5 typescript: ^4.7.2 - webpack: ^5.72.1 + webpack: ^5.73.0 languageName: unknown linkType: soft @@ -25731,44 +25997,6 @@ __metadata: languageName: node linkType: hard -"semantic-release@npm:^19.0.2": - version: 19.0.2 - resolution: "semantic-release@npm:19.0.2" - dependencies: - "@semantic-release/commit-analyzer": ^9.0.2 - "@semantic-release/error": ^3.0.0 - "@semantic-release/github": ^8.0.0 - "@semantic-release/npm": ^9.0.0 - "@semantic-release/release-notes-generator": ^10.0.0 - aggregate-error: ^3.0.0 - cosmiconfig: ^7.0.0 - debug: ^4.0.0 - env-ci: ^5.0.0 - execa: ^5.0.0 - figures: ^3.0.0 - find-versions: ^4.0.0 - get-stream: ^6.0.0 - git-log-parser: ^1.2.0 - hook-std: ^2.0.0 - hosted-git-info: ^4.0.0 - lodash: ^4.17.21 - marked: ^4.0.10 - marked-terminal: ^5.0.0 - micromatch: ^4.0.2 - p-each-series: ^2.1.0 - p-reduce: ^2.0.0 - read-pkg-up: ^7.0.0 - resolve-from: ^5.0.0 - semver: ^7.3.2 - semver-diff: ^3.1.1 - signale: ^1.2.1 - yargs: ^16.2.0 - bin: - semantic-release: bin/semantic-release.js - checksum: 0807cae8c57445793d3181a15cd587950aaf6b9c6ea9f4b7876b85a4ac78d1cd8d53f309512fe53eca2a8ed48600dd4d5483ac403bb42bfcf1c88a2c2340cf65 - languageName: node - linkType: hard - "semver-compare@npm:^1.0.0": version: 1.0.0 resolution: "semver-compare@npm:1.0.0" @@ -25794,24 +26022,6 @@ __metadata: languageName: node linkType: hard -"semver-regex@npm:^3.1.2": - version: 3.1.3 - resolution: "semver-regex@npm:3.1.3" - checksum: a40c17716679f413994ba4723cf32cf94160a4a3db36e3f730f840cb36bbdbcfda2a34df051d1adb56ed2c67c2a00badfaa9e1e4b755ae6addc7d23ebf55c32b - languageName: node - linkType: hard - -"semver@npm:*, semver@npm:7.3.7, semver@npm:7.x, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": - version: 7.3.7 - resolution: "semver@npm:7.3.7" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 2fa3e877568cd6ce769c75c211beaed1f9fce80b28338cadd9d0b6c40f2e2862bafd62c19a6cff42f3d54292b7c623277bcab8816a2b5521cf15210d43e75232 - languageName: node - linkType: hard - "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.0.3, semver@npm:^5.1.0, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.1": version: 5.7.1 resolution: "semver@npm:5.7.1" @@ -25859,6 +26069,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.3.7, semver@npm:7.x, semver@npm:^7.1.3, semver@npm:^7.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": + version: 7.3.7 + resolution: "semver@npm:7.3.7" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 2fa3e877568cd6ce769c75c211beaed1f9fce80b28338cadd9d0b6c40f2e2862bafd62c19a6cff42f3d54292b7c623277bcab8816a2b5521cf15210d43e75232 + languageName: node + linkType: hard + "semver@npm:~7.2.0": version: 7.2.3 resolution: "semver@npm:7.2.3" @@ -26143,24 +26364,13 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.6, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.6": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard -"signale@npm:^1.2.1": - version: 1.4.0 - resolution: "signale@npm:1.4.0" - dependencies: - chalk: ^2.3.2 - figures: ^2.0.0 - pkg-conf: ^2.1.0 - checksum: a6a540e054096a1f4cf8b1f21fea62ca3e44a19faa63bd486723b736348609caab1fa59a87f16559de347dde8ae1fdebfc25a8b6723c88ae8239f176ffb0dda5 - languageName: node - linkType: hard - "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -26307,7 +26517,7 @@ __metadata: languageName: node linkType: hard -"sockjs@npm:^0.3.21": +"sockjs@npm:^0.3.21, sockjs@npm:^0.3.24": version: 0.3.24 resolution: "sockjs@npm:0.3.24" dependencies: @@ -26329,7 +26539,7 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^6.0.0, socks-proxy-agent@npm:^6.1.1": +"socks-proxy-agent@npm:^6.0.0": version: 6.1.1 resolution: "socks-proxy-agent@npm:6.1.1" dependencies: @@ -26451,7 +26661,7 @@ __metadata: languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.1, sourcemap-codec@npm:^1.4.4": +"sourcemap-codec@npm:^1.4.1, sourcemap-codec@npm:^1.4.8": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 @@ -26474,13 +26684,6 @@ __metadata: languageName: node linkType: hard -"spawn-error-forwarder@npm:~1.0.0": - version: 1.0.0 - resolution: "spawn-error-forwarder@npm:1.0.0" - checksum: ac7e69f980ce8dbcdd6323b7e30bc7dc6cbfcc7ebaefa63d71cb2150e153798f4ad20e5182f16137f1537fb8ecea386c3a1f241ade4711ef6c6e1f4a1bc971e5 - languageName: node - linkType: hard - "spawnd@npm:^6.0.2": version: 6.0.2 resolution: "spawnd@npm:6.0.2" @@ -26578,15 +26781,6 @@ __metadata: languageName: node linkType: hard -"split2@npm:~1.0.0": - version: 1.0.0 - resolution: "split2@npm:1.0.0" - dependencies: - through2: ~2.0.0 - checksum: 84cb1713a9b5ef7da06dbcb60780051f34a3b68f737a4bd5e807804ba742e3667f9e9e49eb589c1d7adb0bda4cf1eac9ea27a1040d480c785fc339c40b78396e - languageName: node - linkType: hard - "split@npm:0.2": version: 0.2.10 resolution: "split@npm:0.2.10" @@ -26650,15 +26844,6 @@ __metadata: languageName: node linkType: hard -"ssri@npm:*, ssri@npm:^8.0.0, ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" - dependencies: - minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 - languageName: node - linkType: hard - "ssri@npm:^6.0.1": version: 6.0.2 resolution: "ssri@npm:6.0.2" @@ -26668,6 +26853,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^8.0.0, ssri@npm:^8.0.1": + version: 8.0.1 + resolution: "ssri@npm:8.0.1" + dependencies: + minipass: ^3.1.1 + checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 + languageName: node + linkType: hard + "stable@npm:^0.1.8": version: 0.1.8 resolution: "stable@npm:0.1.8" @@ -26793,16 +26987,6 @@ __metadata: languageName: node linkType: hard -"stream-combiner2@npm:~1.1.1": - version: 1.1.1 - resolution: "stream-combiner2@npm:1.1.1" - dependencies: - duplexer2: ~0.1.0 - readable-stream: ^2.0.2 - checksum: dd32d179fa8926619c65471a7396fc638ec8866616c0b8747c4e05563ccdb0b694dd4e83cd799f1c52789c965a40a88195942b82b8cea2ee7a5536f1954060f9 - languageName: node - linkType: hard - "stream-combiner@npm:~0.0.3": version: 0.0.4 resolution: "stream-combiner@npm:0.0.4" @@ -27003,13 +27187,6 @@ __metadata: languageName: node linkType: hard -"stringify-package@npm:^1.0.1": - version: 1.0.1 - resolution: "stringify-package@npm:1.0.1" - checksum: 462036085a0cf7ae073d9b88a2bbf7efb3792e3df3e1fd436851f64196eb0234c8f8ffac436357e355687d6030b7af42e98af9515929e41a6a5c8653aa62a5aa - languageName: node - linkType: hard - "strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": version: 3.0.1 resolution: "strip-ansi@npm:3.0.1" @@ -27143,6 +27320,18 @@ __metadata: languageName: node linkType: hard +"stylehacks@npm:^5.1.0": + version: 5.1.0 + resolution: "stylehacks@npm:5.1.0" + dependencies: + browserslist: ^4.16.6 + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.2.15 + checksum: 310b3452c11fd443b0d327aa2d5b43ae7479407339204b7ad11cf2e16d33b690c1cbf47a21b737ef112411e53563f0f996c5fa3642d135c896329950a008277f + languageName: node + linkType: hard + "stylis@npm:4.0.13": version: 4.0.13 resolution: "stylis@npm:4.0.13" @@ -27256,7 +27445,7 @@ __metadata: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0, supports-hyperlinks@npm:^2.2.0": +"supports-hyperlinks@npm:^2.0.0": version: 2.2.0 resolution: "supports-hyperlinks@npm:2.2.0" dependencies: @@ -27438,7 +27627,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:*, tar@npm:^6.0.2, tar@npm:^6.1.0, tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" dependencies: @@ -27452,13 +27641,6 @@ __metadata: languageName: node linkType: hard -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa - languageName: node - linkType: hard - "temp-file@npm:^3.4.0": version: 3.4.0 resolution: "temp-file@npm:3.4.0" @@ -27469,19 +27651,6 @@ __metadata: languageName: node linkType: hard -"tempy@npm:^1.0.0": - version: 1.0.1 - resolution: "tempy@npm:1.0.1" - dependencies: - del: ^6.0.0 - is-stream: ^2.0.0 - temp-dir: ^2.0.0 - type-fest: ^0.16.0 - unique-string: ^2.0.0 - checksum: e77ca4440af18e42dc64d8903b7ed0be673455b76680ff94a7d7c6ee7c16f7604bdcdee3c39436342b1082c23eda010dbe48f6094e836e0bd53c8b1aa63e5b95 - languageName: node - linkType: hard - "term-size@npm:^1.2.0": version: 1.2.0 resolution: "term-size@npm:1.2.0" @@ -27564,7 +27733,7 @@ __metadata: languageName: node linkType: hard -"text-table@npm:*, text-table@npm:^0.2.0": +"text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a @@ -27588,7 +27757,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.0, through2@npm:~2.0.0, through2@npm:~2.0.3": +"through2@npm:^2.0.0, through2@npm:~2.0.3": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: @@ -27665,13 +27834,6 @@ __metadata: languageName: node linkType: hard -"tiny-relative-date@npm:*": - version: 1.3.0 - resolution: "tiny-relative-date@npm:1.3.0" - checksum: 82a1fa2f3b00cd77c3ff0cf45380dad9e5befa8ee344d8de8076525efda4e6bd6af8f7f483e103b5834dc34bbed337fab7ac151f1d1a429a20f434a3744057b4 - languageName: node - linkType: hard - "tiny-warning@npm:^1.0.0, tiny-warning@npm:^1.0.2, tiny-warning@npm:^1.0.3": version: 1.0.3 resolution: "tiny-warning@npm:1.0.3" @@ -27679,26 +27841,6 @@ __metadata: languageName: node linkType: hard -"tktrex-guardoni@workspace:platforms/tktrex/methodology": - version: 0.0.0-use.local - resolution: "tktrex-guardoni@workspace:platforms/tktrex/methodology" - dependencies: - csv-parse: ^4.16.3 - debug: ^4.3.4 - eslint: ^8.16.0 - lodash: ^4.17.21 - moment: ^2.29.2 - nconf: ^0.11.3 - node-fetch: ^2.6.7 - pkg: ^5.7.0 - puppeteer: ^13.7.0 - puppeteer-extra: ^3.2.3 - puppeteer-extra-plugin-stealth: ^2.9.0 - bin: - tktrex-guardoni: ./bin/guardoni0-base.js - languageName: unknown - linkType: soft - "tmp-promise@npm:^3.0.2": version: 3.0.3 resolution: "tmp-promise@npm:3.0.3" @@ -27888,13 +28030,6 @@ __metadata: languageName: node linkType: hard -"treeverse@npm:*, treeverse@npm:^1.0.4": - version: 1.0.4 - resolution: "treeverse@npm:1.0.4" - checksum: 712640acd811060ff552a3c761f700d18d22a4da544d31b4e290817ac4bbbfcfe33b58f85e7a5787e6ff7351d3a9100670721a289ca14eb87b36ad8a0c20ebd8 - languageName: node - linkType: hard - "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -28280,13 +28415,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.16.0": - version: 0.16.0 - resolution: "type-fest@npm:0.16.0" - checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 - languageName: node - linkType: hard - "type-fest@npm:^0.18.0": version: 0.18.1 resolution: "type-fest@npm:0.18.1" @@ -28329,13 +28457,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^1.0.2": - version: 1.4.0 - resolution: "type-fest@npm:1.4.0" - checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 - languageName: node - linkType: hard - "type-fest@npm:^2.11.1": version: 2.11.2 resolution: "type-fest@npm:2.11.2" @@ -28343,6 +28464,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^2.12.2": + version: 2.13.1 + resolution: "type-fest@npm:2.13.1" + checksum: 16f05cfd2b701f923176b2d6c5656d26435e71dc874851c95df9b0a287ce18a31f5b14e487cc325df6286daac02124cb0551d48c2ae7039f8a763aa376f3b479 + languageName: node + linkType: hard + "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -28864,7 +28992,7 @@ __metadata: languageName: node linkType: hard -"url-join@npm:4.0.1, url-join@npm:^4.0.0, url-join@npm:^4.0.1": +"url-join@npm:4.0.1, url-join@npm:^4.0.1": version: 4.0.1 resolution: "url-join@npm:4.0.1" checksum: f74e868bf25dbc8be6a8d7237d4c36bb5b6c62c72e594d5ab1347fe91d6af7ccd9eb5d621e30152e4da45c2e9a26bec21390e911ab54a62d4d82e76028374ee5 @@ -29095,7 +29223,7 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": +"validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" dependencies: @@ -29105,15 +29233,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-name@npm:*, validate-npm-package-name@npm:^3.0.0": - version: 3.0.0 - resolution: "validate-npm-package-name@npm:3.0.0" - dependencies: - builtins: ^1.0.3 - checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 - languageName: node - linkType: hard - "validate-peer-dependencies@npm:^1.0.0": version: 1.2.0 resolution: "validate-peer-dependencies@npm:1.2.0" @@ -29279,13 +29398,6 @@ __metadata: languageName: node linkType: hard -"walk-up-path@npm:^1.0.0": - version: 1.0.0 - resolution: "walk-up-path@npm:1.0.0" - checksum: b8019ac4fb9ba1576839ec66d2217f62ab773c1cc4c704bfd1c79b1359fef5366f1382d3ab230a66a14c3adb1bf0fe102d1fdaa3437881e69154dfd1432abd32 - languageName: node - linkType: hard - "walk@npm:~2.2.1": version: 2.2.1 resolution: "walk@npm:2.2.1" @@ -29323,7 +29435,7 @@ __metadata: languageName: node linkType: hard -"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": +"wcwidth@npm:^1.0.1": version: 1.0.1 resolution: "wcwidth@npm:1.0.1" dependencies: @@ -29400,17 +29512,17 @@ __metadata: languageName: node linkType: hard -"webpack-cli@npm:^4.9.2": - version: 4.9.2 - resolution: "webpack-cli@npm:4.9.2" +"webpack-cli@npm:^4.10.0": + version: 4.10.0 + resolution: "webpack-cli@npm:4.10.0" dependencies: "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^1.1.1 - "@webpack-cli/info": ^1.4.1 - "@webpack-cli/serve": ^1.6.1 + "@webpack-cli/configtest": ^1.2.0 + "@webpack-cli/info": ^1.5.0 + "@webpack-cli/serve": ^1.7.0 colorette: ^2.0.14 commander: ^7.0.0 - execa: ^5.0.0 + cross-spawn: ^7.0.3 fastest-levenshtein: ^1.0.12 import-local: ^3.0.2 interpret: ^2.2.0 @@ -29429,7 +29541,7 @@ __metadata: optional: true bin: webpack-cli: bin/cli.js - checksum: ffb4c5d53ab65ce9f1e8efd34fca4cb858ec6afc91ece0d9375094edff2e7615708c8a586991057fd9cc8d37aab0eb0511913b178daac534e51bcf7d3583e61c + checksum: 2ff5355ac348e6b40f2630a203b981728834dca96d6d621be96249764b2d0fc01dd54edfcc37f02214d02935de2cf0eefd6ce689d970d154ef493f01ba922390 languageName: node linkType: hard @@ -29457,7 +29569,7 @@ __metadata: languageName: node linkType: hard -"webpack-dev-server@npm:^4.5.0, webpack-dev-server@npm:^4.9.0": +"webpack-dev-server@npm:^4.5.0": version: 4.9.0 resolution: "webpack-dev-server@npm:4.9.0" dependencies: @@ -29500,6 +29612,50 @@ __metadata: languageName: node linkType: hard +"webpack-dev-server@npm:^4.9.2": + version: 4.9.2 + resolution: "webpack-dev-server@npm:4.9.2" + dependencies: + "@types/bonjour": ^3.5.9 + "@types/connect-history-api-fallback": ^1.3.5 + "@types/express": ^4.17.13 + "@types/serve-index": ^1.9.1 + "@types/serve-static": ^1.13.10 + "@types/sockjs": ^0.3.33 + "@types/ws": ^8.5.1 + ansi-html-community: ^0.0.8 + bonjour-service: ^1.0.11 + chokidar: ^3.5.3 + colorette: ^2.0.10 + compression: ^1.7.4 + connect-history-api-fallback: ^1.6.0 + default-gateway: ^6.0.3 + express: ^4.17.3 + graceful-fs: ^4.2.6 + html-entities: ^2.3.2 + http-proxy-middleware: ^2.0.3 + ipaddr.js: ^2.0.1 + open: ^8.0.9 + p-retry: ^4.5.0 + rimraf: ^3.0.2 + schema-utils: ^4.0.0 + selfsigned: ^2.0.1 + serve-index: ^1.9.1 + sockjs: ^0.3.24 + spdy: ^4.0.2 + webpack-dev-middleware: ^5.3.1 + ws: ^8.4.2 + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 201e28445f59df55a31728885defe5bf5ae7880fa1dd563f370131794f8c02fd63fcd51bbca67a34f0df232e83b5f883d452d2b0ed1954eb257d574c0c76b46d + languageName: node + linkType: hard + "webpack-merge@npm:^5.7.3, webpack-merge@npm:^5.8.0": version: 5.8.0 resolution: "webpack-merge@npm:5.8.0" @@ -29549,7 +29705,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.61.0, webpack@npm:^5.72.1": +"webpack@npm:^5, webpack@npm:^5.61.0": version: 5.72.1 resolution: "webpack@npm:5.72.1" dependencies: @@ -29586,6 +29742,43 @@ __metadata: languageName: node linkType: hard +"webpack@npm:^5.73.0": + version: 5.73.0 + resolution: "webpack@npm:5.73.0" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^0.0.51 + "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/wasm-edit": 1.11.1 + "@webassemblyjs/wasm-parser": 1.11.1 + acorn: ^8.4.1 + acorn-import-assertions: ^1.7.6 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.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-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.1.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.1.3 + watchpack: ^2.3.1 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: aa434a241bad6176b68e1bf0feb1972da4dcbf27cb3d94ae24f6eb31acc37dceb9c4aae55e068edca75817bfe91f13cd20b023ac55d9b1b2f8b66a4037c9468f + languageName: node + linkType: hard + "webpackbar@npm:^5.0.0-3": version: 5.0.2 resolution: "webpackbar@npm:5.0.2" @@ -29699,25 +29892,25 @@ __metadata: languageName: node linkType: hard -"which@npm:*, which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" +"which@npm:^1.2.12, which@npm:^1.2.9, which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" dependencies: isexe: ^2.0.0 bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 languageName: node linkType: hard -"which@npm:^1.2.12, which@npm:^1.2.9, which@npm:^1.3.1": - version: 1.3.1 - resolution: "which@npm:1.3.1" +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" dependencies: isexe: ^2.0.0 bin: - which: ./bin/which - checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 languageName: node linkType: hard @@ -29842,16 +30035,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:*, write-file-atomic@npm:^4.0.0": - version: 4.0.1 - resolution: "write-file-atomic@npm:4.0.1" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc - languageName: node - linkType: hard - "write-file-atomic@npm:^2.0.0": version: 2.4.3 resolution: "write-file-atomic@npm:2.4.3"