diff --git a/.github/file-filters.yml b/.github/file-filters.yml
index d7f9cb6c0..8d2d93fac 100644
--- a/.github/file-filters.yml
+++ b/.github/file-filters.yml
@@ -1,4 +1,5 @@
backend: &backend
+ - '.github/workflows/test-backend.yml'
- 'backend/**/*'
- 'neo4j/**/*'
@@ -6,4 +7,5 @@ docker: &docker
- 'docker-compose.*'
webapp: &webapp
+ - '.github/workflows/test-webapp.yml'
- 'webapp/**/*'
diff --git a/.github/workflows/cleanup-cache-at-pr-closing.yml b/.github/workflows/cleanup-cache-at-pr-closing.yml
new file mode 100644
index 000000000..284702e76
--- /dev/null
+++ b/.github/workflows/cleanup-cache-at-pr-closing.yml
@@ -0,0 +1,42 @@
+###############################################################################
+# A Github repo has max 10 GB of cache.
+# https://github.blog/changelog/2021-11-23-github-actions-cache-size-is-now-increased-to-10gb-per-repository/
+#
+# To avoid "cache thrashing" by their cache eviction policy it is recommended
+# to apply a cache cleanup workflow at PR closing to dele cache leftovers of
+# the current branch:
+# https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
+###############################################################################
+
+name: ocelot.social cache cleanup on pr closing
+
+on:
+ pull_request:
+ types:
+ - closed
+
+jobs:
+ clean-branch-cache:
+ name: Cleanup branch cache
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Cleanup
+ run: |
+ gh extension install actions/gh-actions-cache
+ REPO=${{ github.repository }}
+ BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
+ echo "Fetching list of cache key"
+ cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
+ set +e
+ echo "Deleting caches..."
+ for cacheKey in $cacheKeysForPR
+ do
+ gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
+ done
+ echo "Done"
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/test-backend.yml b/.github/workflows/test-backend.yml
index 84d87c770..03e517826 100644
--- a/.github/workflows/test-backend.yml
+++ b/.github/workflows/test-backend.yml
@@ -1,7 +1,7 @@
name: ocelot.social backend test CI
-on: [push]
+on: push
jobs:
files-changed:
@@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v3.3.0
- - name: Check for frontend file changes
+ - name: Check for backend file changes
uses: dorny/paths-filter@v2.11.1
id: changes
with:
@@ -34,12 +34,13 @@ jobs:
run: |
docker build --target community -t "ocelotsocialnetwork/neo4j-community:test" neo4j/
docker save "ocelotsocialnetwork/neo4j-community:test" > /tmp/neo4j.tar
-
- - name: Upload Artifact
- uses: actions/upload-artifact@v3
+
+ - name: Cache docker images
+ id: cache-neo4j
+ uses: actions/cache/save@v3.3.1
with:
- name: docker-neo4j-image
path: /tmp/neo4j.tar
+ key: ${{ github.run_id }}-backend-neo4j-cache
build_test_backend:
name: Docker Build Test - Backend
@@ -54,12 +55,13 @@ jobs:
run: |
docker build --target test -t "ocelotsocialnetwork/backend:test" backend/
docker save "ocelotsocialnetwork/backend:test" > /tmp/backend.tar
-
- - name: Upload Artifact
- uses: actions/upload-artifact@v3
+
+ - name: Cache docker images
+ id: cache-backend
+ uses: actions/cache/save@v3.3.1
with:
- name: docker-backend-test
path: /tmp/backend.tar
+ key: ${{ github.run_id }}-backend-cache
lint_backend:
name: Lint Backend
@@ -84,28 +86,29 @@ jobs:
- name: Checkout code
uses: actions/checkout@v3
- - name: Download Docker Image (Neo4J)
- uses: actions/download-artifact@v3
+ - name: Restore Neo4J cache
+ uses: actions/cache/restore@v3.3.1
with:
- name: docker-neo4j-image
- path: /tmp
+ path: /tmp/neo4j.tar
+ key: ${{ github.run_id }}-backend-neo4j-cache
+ fail-on-cache-miss: true
- - name: Load Docker Image
- run: docker load < /tmp/neo4j.tar
-
- - name: Download Docker Image (Backend)
- uses: actions/download-artifact@v3
+ - name: Restore Backend cache
+ uses: actions/cache/restore@v3.3.1
with:
- name: docker-backend-test
- path: /tmp
+ path: /tmp/backend.tar
+ key: ${{ github.run_id }}-backend-cache
+ fail-on-cache-miss: true
- - name: Load Docker Image
- run: docker load < /tmp/backend.tar
+ - name: Load Docker Images
+ run: |
+ docker load < /tmp/neo4j.tar
+ docker load < /tmp/backend.tar
- - name: backend | copy env files webapp
- run: cp webapp/.env.template webapp/.env
- - name: backend | copy env files backend
- run: cp backend/.env.template backend/.env
+ - name: backend | copy env files
+ run: |
+ cp webapp/.env.template webapp/.env
+ cp backend/.env.template backend/.env
- name: backend | docker-compose
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps neo4j backend
@@ -118,3 +121,20 @@ jobs:
- name: backend | Unit test incl. coverage check
run: docker-compose exec -T backend yarn test
+
+ cleanup:
+ name: Cleanup
+ if: ${{ needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.docker == 'true' }}
+ needs: [files-changed, unit_test_backend]
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - name: Delete cache
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ gh extension install actions/gh-actions-cache
+ KEY="${{ github.run_id }}-backend-neo4j-cache"
+ gh actions-cache delete $KEY -R Ocelot-Social-Community/Ocelot-Social --confirm
+ KEY="${{ github.run_id }}-backend-cache"
+ gh actions-cache delete $KEY -R Ocelot-Social-Community/Ocelot-Social --confirm
diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml
index 9d007c451..02d65ba9e 100644
--- a/.github/workflows/test-e2e.yml
+++ b/.github/workflows/test-e2e.yml
@@ -1,9 +1,54 @@
name: ocelot.social end-to-end test CI
+
on: push
jobs:
+ docker_preparation:
+ name: Fullstack test preparation
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Copy env files
+ run: |
+ cp webapp/.env.template webapp/.env
+ cp backend/.env.template backend/.env
+
+ - name: Build docker images
+ run: |
+ mkdir /tmp/images
+ docker build --target community -t "ocelotsocialnetwork/neo4j-community:test" neo4j/
+ docker save "ocelotsocialnetwork/neo4j-community:test" > /tmp/images/neo4j.tar
+ docker build --target test -t "ocelotsocialnetwork/backend:test" backend/
+ docker save "ocelotsocialnetwork/backend:test" > /tmp/images/backend.tar
+ docker build --target test -t "ocelotsocialnetwork/webapp:test" webapp/
+ docker save "ocelotsocialnetwork/webapp:test" > /tmp/images/webapp.tar
+
+ - name: Install cypress requirements
+ run: |
+ wget --no-verbose -O /opt/cucumber-json-formatter "https://github.com/cucumber/json-formatter/releases/download/v19.0.0/cucumber-json-formatter-linux-386"
+ cd backend
+ yarn install
+ yarn build
+ cd ..
+ yarn install
+
+ - name: Cache docker images
+ id: cache
+ uses: actions/cache/save@v3.3.1
+ with:
+ path: |
+ /opt/cucumber-json-formatter
+ /home/runner/.cache/Cypress
+ /home/runner/work/Ocelot-Social/Ocelot-Social
+ /tmp/images/
+ key: ${{ github.run_id }}-e2e-preparation-cache
+
fullstack_tests:
name: Fullstack tests
+ if: success()
+ needs: docker_preparation
runs-on: ubuntu-latest
env:
jobs: 8
@@ -12,34 +57,56 @@ jobs:
# run copies of the current job in parallel
job: [1, 2, 3, 4, 5, 6, 7, 8]
steps:
- - name: Checkout code
- uses: actions/checkout@v3
+ - name: Restore cache
+ uses: actions/cache/restore@v3.3.1
+ id: cache
+ with:
+ path: |
+ /opt/cucumber-json-formatter
+ /home/runner/.cache/Cypress
+ /home/runner/work/Ocelot-Social/Ocelot-Social
+ /tmp/images/
+ key: ${{ github.run_id }}-e2e-preparation-cache
+ fail-on-cache-miss: true
- - name: webapp | copy env file
- run: cp webapp/.env.template webapp/.env
-
- - name: backend | copy env file
- run: cp backend/.env.template backend/.env
-
- - name: boot up test system | docker-compose
- run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend
-
- - name: cypress | Fullstack tests
- id: e2e-tests
+ - name: Boot up test system | docker-compose
run: |
- cd backend
- yarn install
- yarn build
- cd ..
- yarn install
- yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} )
+ chmod +x /opt/cucumber-json-formatter
+ sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter
+ docker load < /tmp/images/neo4j.tar
+ docker load < /tmp/images/backend.tar
+ docker load < /tmp/images/webapp.tar
+ docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend
+ sleep 90s
- ##########################################################################
- # UPLOAD SCREENSHOTS - IF TESTS FAIL #####################################
- ##########################################################################
- - name: Full stack tests | if any test failed, upload screenshots
+ - name: Full stack tests | run tests
+ id: e2e-tests
+ run: yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} )
+
+ - name: Full stack tests | if tests failed, compile html report
+ if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }}
+ run: |
+ cd cypress/
+ node create-cucumber-html-report.js
+
+ - name: Full stack tests | if tests failed, upload report
+ id: e2e-report
if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }}
uses: actions/upload-artifact@v3
with:
- name: cypress-screenshots
- path: cypress/screenshots/
+ name: ocelot-e2e-test-report-pr${{ needs.docker_preparation.outputs.pr-number }}
+ path: /home/runner/work/Ocelot-Social/Ocelot-Social/cypress/reports/cucumber_html_report
+
+ cleanup:
+ name: Cleanup
+ needs: [docker_preparation, fullstack_tests]
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - name: Delete cache
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ gh extension install actions/gh-actions-cache
+ KEY="${{ github.run_id }}-e2e-preparation-cache"
+ gh actions-cache delete $KEY -R Ocelot-Social-Community/Ocelot-Social --confirm
\ No newline at end of file
diff --git a/.github/workflows/test-webapp.yml b/.github/workflows/test-webapp.yml
index 9ca3023cc..2b1e144a5 100644
--- a/.github/workflows/test-webapp.yml
+++ b/.github/workflows/test-webapp.yml
@@ -1,7 +1,7 @@
name: ocelot.social webapp test CI
-on: [push]
+on: push
jobs:
files-changed:
@@ -23,7 +23,7 @@ jobs:
prepare:
name: Prepare
- if: needs.files-changed.outputs.webapp
+ if: needs.files-changed.outputs.webapp == 'true'
needs: files-changed
runs-on: ubuntu-latest
steps:
@@ -34,30 +34,30 @@ jobs:
run: |
scripts/translations/sort.sh
scripts/translations/missing-keys.sh
-
+
build_test_webapp:
name: Docker Build Test - Webapp
- if: needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.webapp
+ if: needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.webapp == 'true'
needs: [files-changed, prepare]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- - name: webapp | Build 'test' image
+ - name: Webapp | Build 'test' image
run: |
docker build --target test -t "ocelotsocialnetwork/webapp:test" webapp/
docker save "ocelotsocialnetwork/webapp:test" > /tmp/webapp.tar
- - name: Upload Artifact
- uses: actions/upload-artifact@v3
+ - name: Cache docker image
+ uses: actions/cache/save@v3.3.1
with:
- name: docker-webapp-test
path: /tmp/webapp.tar
+ key: ${{ github.run_id }}-webapp-cache
lint_webapp:
name: Lint Webapp
- if: needs.files-changed.outputs.webapp
+ if: needs.files-changed.outputs.webapp == 'true'
needs: files-changed
runs-on: ubuntu-latest
steps:
@@ -69,7 +69,7 @@ jobs:
unit_test_webapp:
name: Unit Tests - Webapp
- if: needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.webapp
+ if: needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.webapp == 'true'
needs: [files-changed, build_test_webapp]
runs-on: ubuntu-latest
permissions:
@@ -78,20 +78,19 @@ jobs:
- name: Checkout code
uses: actions/checkout@v3
- - name: Download Docker Image (Webapp)
- uses: actions/download-artifact@v3
+ - name: Restore webapp cache
+ uses: actions/cache/restore@v3.3.1
with:
- name: docker-webapp-test
- path: /tmp
+ path: /tmp/webapp.tar
+ key: ${{ github.run_id }}-webapp-cache
- name: Load Docker Image
run: docker load < /tmp/webapp.tar
- - name: backend | copy env files webapp
- run: cp webapp/.env.template webapp/.env
-
- - name: backend | copy env files backend
- run: cp backend/.env.template backend/.env
+ - name: Copy env files
+ run: |
+ cp webapp/.env.template webapp/.env
+ cp backend/.env.template backend/.env
- name: backend | docker-compose
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp
@@ -99,3 +98,18 @@ jobs:
- name: webapp | Unit tests incl. coverage check
run: docker-compose exec -T webapp yarn test
+ cleanup:
+ name: Cleanup
+ if: ${{ needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.webapp == 'true' }}
+ needs: [files-changed, unit_test_webapp]
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - name: Delete cache
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ gh extension install actions/gh-actions-cache
+ KEY="${{ github.run_id }}-webapp-cache"
+ gh actions-cache delete $KEY -R Ocelot-Social-Community/Ocelot-Social --confirm
+
diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js
index 0000bb066..cc5440d82 100644
--- a/backend/.eslintrc.js
+++ b/backend/.eslintrc.js
@@ -1,25 +1,219 @@
module.exports = {
+ root: true,
env: {
- es6: true,
+ // es6: true,
node: true,
- jest: true
},
- parserOptions: {
+ /* parserOptions: {
parser: 'babel-eslint'
- },
+ },*/
+ parser: '@typescript-eslint/parser',
+ plugins: ['prettier', '@typescript-eslint' /*, 'import', 'n', 'promise'*/],
extends: [
'standard',
- 'plugin:prettier/recommended'
+ // 'eslint:recommended',
+ 'plugin:prettier/recommended',
+ // 'plugin:import/recommended',
+ // 'plugin:import/typescript',
+ // 'plugin:security/recommended',
+ // 'plugin:@eslint-community/eslint-comments/recommended',
],
- plugins: [
- 'jest'
- ],
- rules: {
+ settings: {
+ 'import/parsers': {
+ '@typescript-eslint/parser': ['.ts', '.tsx'],
+ },
+ 'import/resolver': {
+ typescript: {
+ project: ['./tsconfig.json'],
+ },
+ node: true,
+ },
+ },
+ /* rules: {
//'indent': [ 'error', 2 ],
//'quotes': [ "error", "single"],
// 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
- 'no-console': ['error'],
- 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
- 'prettier/prettier': ['error'],
+ > 'no-console': ['error'],
+ > 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+ > 'prettier/prettier': ['error'],
+ }, */
+ rules: {
+ 'no-console': 'error',
+ camelcase: 'error',
+ 'no-debugger': 'error',
+ 'prettier/prettier': [
+ 'error',
+ {
+ htmlWhitespaceSensitivity: 'ignore',
+ },
+ ],
+ // import
+ // 'import/export': 'error',
+ // 'import/no-deprecated': 'error',
+ // 'import/no-empty-named-blocks': 'error',
+ // 'import/no-extraneous-dependencies': 'error',
+ // 'import/no-mutable-exports': 'error',
+ // 'import/no-unused-modules': 'error',
+ // 'import/no-named-as-default': 'error',
+ // 'import/no-named-as-default-member': 'error',
+ // 'import/no-amd': 'error',
+ // 'import/no-commonjs': 'error',
+ // 'import/no-import-module-exports': 'error',
+ // 'import/no-nodejs-modules': 'off',
+ // 'import/unambiguous': 'error',
+ // 'import/default': 'error',
+ // 'import/named': 'error',
+ // 'import/namespace': 'error',
+ // 'import/no-absolute-path': 'error',
+ // 'import/no-cycle': 'error',
+ // 'import/no-dynamic-require': 'error',
+ // 'import/no-internal-modules': 'off',
+ // 'import/no-relative-packages': 'error',
+ // 'import/no-relative-parent-imports': ['error', { ignore: ['@/*'] }],
+ // 'import/no-self-import': 'error',
+ // 'import/no-unresolved': 'error',
+ // 'import/no-useless-path-segments': 'error',
+ // 'import/no-webpack-loader-syntax': 'error',
+ // 'import/consistent-type-specifier-style': 'error',
+ // 'import/exports-last': 'off',
+ // 'import/extensions': 'error',
+ // 'import/first': 'error',
+ // 'import/group-exports': 'off',
+ // 'import/newline-after-import': 'error',
+ // 'import/no-anonymous-default-export': 'error',
+ // 'import/no-default-export': 'error',
+ // 'import/no-duplicates': 'error',
+ // 'import/no-named-default': 'error',
+ // 'import/no-namespace': 'error',
+ // 'import/no-unassigned-import': 'error',
+ // 'import/order': [
+ // 'error',
+ // {
+ // groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
+ // 'newlines-between': 'always',
+ // pathGroups: [
+ // {
+ // pattern: '@?*/**',
+ // group: 'external',
+ // position: 'after',
+ // },
+ // {
+ // pattern: '@/**',
+ // group: 'external',
+ // position: 'after',
+ // },
+ // ],
+ // alphabetize: {
+ // order: 'asc' /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */,
+ // caseInsensitive: true /* ignore case. Options: [true, false] */,
+ // },
+ // distinctGroup: true,
+ // },
+ // ],
+ // 'import/prefer-default-export': 'off',
+ // n
+ // 'n/handle-callback-err': 'error',
+ // 'n/no-callback-literal': 'error',
+ // 'n/no-exports-assign': 'error',
+ // 'n/no-extraneous-import': 'error',
+ // 'n/no-extraneous-require': 'error',
+ // 'n/no-hide-core-modules': 'error',
+ // 'n/no-missing-import': 'off', // not compatible with typescript
+ // 'n/no-missing-require': 'error',
+ // 'n/no-new-require': 'error',
+ // 'n/no-path-concat': 'error',
+ // 'n/no-process-exit': 'error',
+ // 'n/no-unpublished-bin': 'error',
+ // 'n/no-unpublished-import': 'off', // TODO need to exclude seeds
+ // 'n/no-unpublished-require': 'error',
+ // 'n/no-unsupported-features': ['error', { ignores: ['modules'] }],
+ // 'n/no-unsupported-features/es-builtins': 'error',
+ // 'n/no-unsupported-features/es-syntax': 'error',
+ // 'n/no-unsupported-features/node-builtins': 'error',
+ // 'n/process-exit-as-throw': 'error',
+ // 'n/shebang': 'error',
+ // 'n/callback-return': 'error',
+ // 'n/exports-style': 'error',
+ // 'n/file-extension-in-import': 'off',
+ // 'n/global-require': 'error',
+ // 'n/no-mixed-requires': 'error',
+ // 'n/no-process-env': 'error',
+ // 'n/no-restricted-import': 'error',
+ // 'n/no-restricted-require': 'error',
+ // 'n/no-sync': 'error',
+ // 'n/prefer-global/buffer': 'error',
+ // 'n/prefer-global/console': 'error',
+ // 'n/prefer-global/process': 'error',
+ // 'n/prefer-global/text-decoder': 'error',
+ // 'n/prefer-global/text-encoder': 'error',
+ // 'n/prefer-global/url': 'error',
+ // 'n/prefer-global/url-search-params': 'error',
+ // 'n/prefer-promises/dns': 'error',
+ // 'n/prefer-promises/fs': 'error',
+ // promise
+ // 'promise/catch-or-return': 'error',
+ // 'promise/no-return-wrap': 'error',
+ // 'promise/param-names': 'error',
+ // 'promise/always-return': 'error',
+ // 'promise/no-native': 'off',
+ // 'promise/no-nesting': 'warn',
+ // 'promise/no-promise-in-callback': 'warn',
+ // 'promise/no-callback-in-promise': 'warn',
+ // 'promise/avoid-new': 'warn',
+ // 'promise/no-new-statics': 'error',
+ // 'promise/no-return-in-finally': 'warn',
+ // 'promise/valid-params': 'warn',
+ // 'promise/prefer-await-to-callbacks': 'error',
+ // 'promise/no-multiple-resolved': 'error',
+ // eslint comments
+ // '@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }],
+ // '@eslint-community/eslint-comments/no-restricted-disable': 'error',
+ // '@eslint-community/eslint-comments/no-use': 'off',
+ // '@eslint-community/eslint-comments/require-description': 'off',
},
+ overrides: [
+ // only for ts files
+ {
+ files: ['*.ts', '*.tsx'],
+ extends: [
+ // 'plugin:@typescript-eslint/recommended',
+ // 'plugin:@typescript-eslint/recommended-requiring-type-checking',
+ // 'plugin:@typescript-eslint/strict',
+ ],
+ rules: {
+ // allow explicitly defined dangling promises
+ // '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }],
+ 'no-void': ['error', { allowAsStatement: true }],
+ // ignore prefer-regexp-exec rule to allow string.match(regex)
+ '@typescript-eslint/prefer-regexp-exec': 'off',
+ // this should not run on ts files: https://github.com/import-js/eslint-plugin-import/issues/2215#issuecomment-911245486
+ 'import/unambiguous': 'off',
+ // this is not compatible with typeorm, due to joined tables can be null, but are not defined as nullable
+ '@typescript-eslint/no-unnecessary-condition': 'off',
+ },
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./tsconfig.json'],
+ // this is to properly reference the referenced project database without requirement of compiling it
+ // eslint-disable-next-line camelcase
+ EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true,
+ },
+ },
+ {
+ files: ['*.spec.ts'],
+ plugins: ['jest'],
+ env: {
+ jest: true,
+ },
+ rules: {
+ 'jest/no-disabled-tests': 'error',
+ 'jest/no-focused-tests': 'error',
+ 'jest/no-identical-title': 'error',
+ 'jest/prefer-to-have-length': 'error',
+ 'jest/valid-expect': 'error',
+ '@typescript-eslint/unbound-method': 'off',
+ // 'jest/unbound-method': 'error',
+ },
+ },
+ ],
};
diff --git a/backend/jest.config.js b/backend/jest.config.js
index 264ad13c0..d1cc7bd3f 100644
--- a/backend/jest.config.js
+++ b/backend/jest.config.js
@@ -11,7 +11,7 @@ module.exports = {
],
coverageThreshold: {
global: {
- lines: 70,
+ lines: 67,
},
},
testMatch: ['**/src/**/?(*.)+(spec|test).ts?(x)'],
diff --git a/backend/package.json b/backend/package.json
index f236338bd..48703b649 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -9,12 +9,12 @@
"main": "src/index.ts",
"scripts": {
"__migrate": "migrate --compiler 'ts:./src/db/compiler.ts' --migrations-dir ./src/db/migrations",
- "prod:migrate": "migrate --migrations-dir ./build/db/migrations --store ./build/db/migrate/store.js",
- "start": "node build/",
+ "prod:migrate": "migrate --migrations-dir ./build/src/db/migrations --store ./build/src/db/migrate/store.js",
+ "start": "node build/src/",
"build": "tsc && ./scripts/build.copy.files.sh",
"dev": "nodemon --exec ts-node src/ -e js,ts,gql",
"dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/ -e js,ts,gql",
- "lint": "eslint src --config .eslintrc.js",
+ "lint": "eslint --max-warnings=0 --ext .js,.ts ./src",
"test": "cross-env NODE_ENV=test NODE_OPTIONS=--max-old-space-size=8192 jest --runInBand --coverage --forceExit --detectOpenHandles",
"db:clean": "ts-node src/db/clean.ts",
"db:reset": "yarn run db:clean",
@@ -45,7 +45,6 @@
"cheerio": "~1.0.0-rc.3",
"cors": "~2.8.5",
"cross-env": "~7.0.3",
- "debug": "~4.1.1",
"dotenv": "~8.2.0",
"express": "^4.17.1",
"graphql": "^14.6.0",
@@ -97,27 +96,30 @@
},
"devDependencies": {
"@faker-js/faker": "7.6.0",
- "@types/jest": "^29.5.2",
+ "@types/jest": "^27.0.2",
"@types/node": "^20.2.5",
+ "@typescript-eslint/eslint-plugin": "^5.57.1",
+ "@typescript-eslint/parser": "^5.57.1",
"apollo-server-testing": "~2.11.0",
"chai": "~4.2.0",
"cucumber": "~6.0.5",
- "eslint": "~6.8.0",
- "eslint-config-prettier": "~6.15.0",
- "eslint-config-standard": "~14.1.1",
- "eslint-plugin-import": "~2.20.2",
- "eslint-plugin-jest": "~23.8.2",
- "eslint-plugin-node": "~11.1.0",
- "eslint-plugin-prettier": "~3.4.1",
- "eslint-plugin-promise": "~4.3.1",
- "eslint-plugin-standard": "~4.0.1",
- "jest": "29.4",
+ "eslint": "^8.37.0",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-config-standard": "^17.0.0",
+ "eslint-import-resolver-typescript": "^3.5.4",
+ "eslint-plugin-import": "^2.27.5",
+ "eslint-plugin-jest": "^27.2.1",
+ "eslint-plugin-n": "^15.7.0",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-security": "^1.7.1",
+ "prettier": "^2.8.7",
+ "jest": "^27.2.4",
"nodemon": "~2.0.2",
- "prettier": "~2.3.2",
"rosie": "^2.0.1",
- "ts-jest": "^29.1.0",
+ "ts-jest": "^27.0.5",
"ts-node": "^10.9.1",
- "typescript": "^5.0.4"
+ "typescript": "^4.9.4"
},
"resolutions": {
"**/**/fs-capacitor": "^6.2.0",
diff --git a/backend/scripts/build.copy.files.sh b/backend/scripts/build.copy.files.sh
index 85022ba9b..9d17f46ae 100755
--- a/backend/scripts/build.copy.files.sh
+++ b/backend/scripts/build.copy.files.sh
@@ -1,24 +1,24 @@
#!/bin/sh
# html files
-mkdir -p build/middleware/helpers/email/templates/
-cp -r src/middleware/helpers/email/templates/*.html build/middleware/helpers/email/templates/
+mkdir -p build/src/middleware/helpers/email/templates/
+cp -r src/middleware/helpers/email/templates/*.html build/src/middleware/helpers/email/templates/
-mkdir -p build/middleware/helpers/email/templates/en/
-cp -r src/middleware/helpers/email/templates/en/*.html build/middleware/helpers/email/templates/en/
+mkdir -p build/src/middleware/helpers/email/templates/en/
+cp -r src/middleware/helpers/email/templates/en/*.html build/src/middleware/helpers/email/templates/en/
-mkdir -p build/middleware/helpers/email/templates/de/
-cp -r src/middleware/helpers/email/templates/de/*.html build/middleware/helpers/email/templates/de/
+mkdir -p build/src/middleware/helpers/email/templates/de/
+cp -r src/middleware/helpers/email/templates/de/*.html build/src/middleware/helpers/email/templates/de/
# gql files
-mkdir -p build/schema/types/
-cp -r src/schema/types/*.gql build/schema/types/
+mkdir -p build/src/schema/types/
+cp -r src/schema/types/*.gql build/src/schema/types/
-mkdir -p build/schema/types/enum/
-cp -r src/schema/types/enum/*.gql build/schema/types/enum/
+mkdir -p build/src/schema/types/enum/
+cp -r src/schema/types/enum/*.gql build/src/schema/types/enum/
-mkdir -p build/schema/types/scalar/
-cp -r src/schema/types/scalar/*.gql build/schema/types/scalar/
+mkdir -p build/src/schema/types/scalar/
+cp -r src/schema/types/scalar/*.gql build/src/schema/types/scalar/
-mkdir -p build/schema/types/type/
-cp -r src/schema/types/type/*.gql build/schema/types/type/
\ No newline at end of file
+mkdir -p build/src/schema/types/type/
+cp -r src/schema/types/type/*.gql build/src/schema/types/type/
\ No newline at end of file
diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts
index d1dca3781..b6098df11 100644
--- a/backend/src/config/index.ts
+++ b/backend/src/config/index.ts
@@ -15,7 +15,7 @@ if (require.resolve) {
}
// Use Cypress env or process.env
-declare var Cypress: any | undefined
+declare let Cypress: any | undefined
const env = typeof Cypress !== 'undefined' ? Cypress.env() : process.env // eslint-disable-line no-undef
const environment = {
@@ -95,6 +95,7 @@ Object.entries(required).map((entry) => {
if (!entry[1]) {
throw new Error(`ERROR: "${entry[0]}" env variable is missing.`)
}
+ return entry
})
export default {
diff --git a/backend/src/db/compiler.ts b/backend/src/db/compiler.ts
index e01518c3d..8b09ac9c3 100644
--- a/backend/src/db/compiler.ts
+++ b/backend/src/db/compiler.ts
@@ -1,2 +1,2 @@
-const tsNode = require('ts-node');
-module.exports = tsNode.register;
\ No newline at end of file
+const tsNode = require('ts-node')
+module.exports = tsNode.register
diff --git a/backend/src/db/seed.ts b/backend/src/db/seed.ts
index d594f4852..53cd4cea6 100644
--- a/backend/src/db/seed.ts
+++ b/backend/src/db/seed.ts
@@ -11,6 +11,8 @@ import {
changeGroupMemberRoleMutation,
} from '../graphql/groups'
import { createPostMutation } from '../graphql/posts'
+import { createRoomMutation } from '../graphql/rooms'
+import { createMessageMutation } from '../graphql/messages'
import { createCommentMutation } from '../graphql/comments'
import { categories } from '../constants/categories'
@@ -38,628 +40,579 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
})
const { mutate } = createTestClient(server)
- const [Hamburg, Berlin, Germany, Paris, France] = await Promise.all([
- Factory.build('location', {
- id: 'region.5127278006398860',
- name: 'Hamburg',
- type: 'region',
- lng: 10.0,
- lat: 53.55,
- nameES: 'Hamburgo',
- nameFR: 'Hambourg',
- nameIT: 'Amburgo',
- nameEN: 'Hamburg',
- namePT: 'Hamburgo',
- nameDE: 'Hamburg',
- nameNL: 'Hamburg',
- namePL: 'Hamburg',
- nameRU: 'Гамбург',
- }),
- Factory.build('location', {
- id: 'region.14880313158564380',
- type: 'region',
- name: 'Berlin',
- lng: 13.38333,
- lat: 52.51667,
- nameES: 'Berlín',
- nameFR: 'Berlin',
- nameIT: 'Berlino',
- nameEN: 'Berlin',
- namePT: 'Berlim',
- nameDE: 'Berlin',
- nameNL: 'Berlijn',
- namePL: 'Berlin',
- nameRU: 'Берлин',
- }),
- Factory.build('location', {
- id: 'country.10743216036480410',
- name: 'Germany',
- type: 'country',
- namePT: 'Alemanha',
- nameDE: 'Deutschland',
- nameES: 'Alemania',
- nameNL: 'Duitsland',
- namePL: 'Niemcy',
- nameFR: 'Allemagne',
- nameIT: 'Germania',
- nameEN: 'Germany',
- nameRU: 'Германия',
- }),
- Factory.build('location', {
- id: 'region.9397217726497330',
- name: 'Paris',
- type: 'region',
- lng: 2.35183,
- lat: 48.85658,
- nameES: 'París',
- nameFR: 'Paris',
- nameIT: 'Parigi',
- nameEN: 'Paris',
- namePT: 'Paris',
- nameDE: 'Paris',
- nameNL: 'Parijs',
- namePL: 'Paryż',
- nameRU: 'Париж',
- }),
- Factory.build('location', {
- id: 'country.9759535382641660',
- name: 'France',
- type: 'country',
- namePT: 'França',
- nameDE: 'Frankreich',
- nameES: 'Francia',
- nameNL: 'Frankrijk',
- namePL: 'Francja',
- nameFR: 'France',
- nameIT: 'Francia',
- nameEN: 'France',
- nameRU: 'Франция',
- }),
- ])
- await Promise.all([
- Berlin.relateTo(Germany, 'isIn'),
- Hamburg.relateTo(Germany, 'isIn'),
- Paris.relateTo(France, 'isIn'),
- ])
+ // locations
+ const Hamburg = await Factory.build('location', {
+ id: 'region.5127278006398860',
+ name: 'Hamburg',
+ type: 'region',
+ lng: 10.0,
+ lat: 53.55,
+ nameES: 'Hamburgo',
+ nameFR: 'Hambourg',
+ nameIT: 'Amburgo',
+ nameEN: 'Hamburg',
+ namePT: 'Hamburgo',
+ nameDE: 'Hamburg',
+ nameNL: 'Hamburg',
+ namePL: 'Hamburg',
+ nameRU: 'Гамбург',
+ })
+ const Berlin = await Factory.build('location', {
+ id: 'region.14880313158564380',
+ type: 'region',
+ name: 'Berlin',
+ lng: 13.38333,
+ lat: 52.51667,
+ nameES: 'Berlín',
+ nameFR: 'Berlin',
+ nameIT: 'Berlino',
+ nameEN: 'Berlin',
+ namePT: 'Berlim',
+ nameDE: 'Berlin',
+ nameNL: 'Berlijn',
+ namePL: 'Berlin',
+ nameRU: 'Берлин',
+ })
+ const Germany = await Factory.build('location', {
+ id: 'country.10743216036480410',
+ name: 'Germany',
+ type: 'country',
+ namePT: 'Alemanha',
+ nameDE: 'Deutschland',
+ nameES: 'Alemania',
+ nameNL: 'Duitsland',
+ namePL: 'Niemcy',
+ nameFR: 'Allemagne',
+ nameIT: 'Germania',
+ nameEN: 'Germany',
+ nameRU: 'Германия',
+ })
+ const Paris = await Factory.build('location', {
+ id: 'region.9397217726497330',
+ name: 'Paris',
+ type: 'region',
+ lng: 2.35183,
+ lat: 48.85658,
+ nameES: 'París',
+ nameFR: 'Paris',
+ nameIT: 'Parigi',
+ nameEN: 'Paris',
+ namePT: 'Paris',
+ nameDE: 'Paris',
+ nameNL: 'Parijs',
+ namePL: 'Paryż',
+ nameRU: 'Париж',
+ })
+ const France = await Factory.build('location', {
+ id: 'country.9759535382641660',
+ name: 'France',
+ type: 'country',
+ namePT: 'França',
+ nameDE: 'Frankreich',
+ nameES: 'Francia',
+ nameNL: 'Frankrijk',
+ namePL: 'Francja',
+ nameFR: 'France',
+ nameIT: 'Francia',
+ nameEN: 'France',
+ nameRU: 'Франция',
+ })
+ await Berlin.relateTo(Germany, 'isIn')
+ await Hamburg.relateTo(Germany, 'isIn')
+ await Paris.relateTo(France, 'isIn')
- const [racoon, rabbit, wolf, bear, turtle, rhino] = await Promise.all([
- Factory.build('badge', {
- id: 'indiegogo_en_racoon',
- icon: '/img/badges/indiegogo_en_racoon.svg',
- }),
- Factory.build('badge', {
- id: 'indiegogo_en_rabbit',
- icon: '/img/badges/indiegogo_en_rabbit.svg',
- }),
- Factory.build('badge', {
- id: 'indiegogo_en_wolf',
- icon: '/img/badges/indiegogo_en_wolf.svg',
- }),
- Factory.build('badge', {
- id: 'indiegogo_en_bear',
- icon: '/img/badges/indiegogo_en_bear.svg',
- }),
- Factory.build('badge', {
- id: 'indiegogo_en_turtle',
- icon: '/img/badges/indiegogo_en_turtle.svg',
- }),
- Factory.build('badge', {
- id: 'indiegogo_en_rhino',
- icon: '/img/badges/indiegogo_en_rhino.svg',
- }),
- ])
+ // badges
+ const racoon = await Factory.build('badge', {
+ id: 'indiegogo_en_racoon',
+ icon: '/img/badges/indiegogo_en_racoon.svg',
+ })
+ const rabbit = await Factory.build('badge', {
+ id: 'indiegogo_en_rabbit',
+ icon: '/img/badges/indiegogo_en_rabbit.svg',
+ })
+ const wolf = await Factory.build('badge', {
+ id: 'indiegogo_en_wolf',
+ icon: '/img/badges/indiegogo_en_wolf.svg',
+ })
+ const bear = await Factory.build('badge', {
+ id: 'indiegogo_en_bear',
+ icon: '/img/badges/indiegogo_en_bear.svg',
+ })
+ const turtle = await Factory.build('badge', {
+ id: 'indiegogo_en_turtle',
+ icon: '/img/badges/indiegogo_en_turtle.svg',
+ })
+ const rhino = await Factory.build('badge', {
+ id: 'indiegogo_en_rhino',
+ icon: '/img/badges/indiegogo_en_rhino.svg',
+ })
- const [peterLustig, bobDerBaumeister, jennyRostock, huey, dewey, louie, dagobert] =
- await Promise.all([
- Factory.build(
- 'user',
- {
- id: 'u1',
- name: 'Peter Lustig',
- slug: 'peter-lustig',
- role: 'admin',
- },
- {
- email: 'admin@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u2',
- name: 'Bob der Baumeister',
- slug: 'bob-der-baumeister',
- role: 'moderator',
- },
- {
- email: 'moderator@example.org',
- avatar: null,
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u3',
- name: 'Jenny Rostock',
- slug: 'jenny-rostock',
- role: 'user',
- },
- {
- email: 'user@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u4',
- name: 'Huey',
- slug: 'huey',
- role: 'user',
- },
- {
- email: 'huey@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u5',
- name: 'Dewey',
- slug: 'dewey',
- role: 'user',
- },
- {
- email: 'dewey@example.org',
- avatar: null,
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u6',
- name: 'Louie',
- slug: 'louie',
- role: 'user',
- },
- {
- email: 'louie@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u7',
- name: 'Dagobert',
- slug: 'dagobert',
- role: 'user',
- },
- {
- email: 'dagobert@example.org',
- },
- ),
- ])
-
- await Promise.all([
- peterLustig.relateTo(Berlin, 'isIn'),
- bobDerBaumeister.relateTo(Hamburg, 'isIn'),
- jennyRostock.relateTo(Paris, 'isIn'),
- huey.relateTo(Paris, 'isIn'),
- ])
-
- await Promise.all([
- peterLustig.relateTo(racoon, 'rewarded'),
- peterLustig.relateTo(rhino, 'rewarded'),
- peterLustig.relateTo(wolf, 'rewarded'),
- bobDerBaumeister.relateTo(racoon, 'rewarded'),
- bobDerBaumeister.relateTo(turtle, 'rewarded'),
- jennyRostock.relateTo(bear, 'rewarded'),
- dagobert.relateTo(rabbit, 'rewarded'),
-
- peterLustig.relateTo(bobDerBaumeister, 'friends'),
- peterLustig.relateTo(jennyRostock, 'friends'),
- bobDerBaumeister.relateTo(jennyRostock, 'friends'),
-
- peterLustig.relateTo(jennyRostock, 'following'),
- peterLustig.relateTo(huey, 'following'),
- bobDerBaumeister.relateTo(huey, 'following'),
- jennyRostock.relateTo(huey, 'following'),
- huey.relateTo(dewey, 'following'),
- dewey.relateTo(huey, 'following'),
- louie.relateTo(jennyRostock, 'following'),
-
- huey.relateTo(dagobert, 'muted'),
- dewey.relateTo(dagobert, 'muted'),
- louie.relateTo(dagobert, 'muted'),
-
- dagobert.relateTo(huey, 'blocked'),
- dagobert.relateTo(dewey, 'blocked'),
- dagobert.relateTo(louie, 'blocked'),
- ])
-
- await Promise.all(
- categories.map(({ icon, name }, index) => {
- Factory.build('category', {
- id: `cat${index + 1}`,
- slug: name,
- name,
- icon,
- })
- }),
+ // users
+ const peterLustig = await Factory.build(
+ 'user',
+ {
+ id: 'u1',
+ name: 'Peter Lustig',
+ slug: 'peter-lustig',
+ role: 'admin',
+ },
+ {
+ email: 'admin@example.org',
+ },
+ )
+ const bobDerBaumeister = await Factory.build(
+ 'user',
+ {
+ id: 'u2',
+ name: 'Bob der Baumeister',
+ slug: 'bob-der-baumeister',
+ role: 'moderator',
+ },
+ {
+ email: 'moderator@example.org',
+ avatar: null,
+ },
+ )
+ const jennyRostock = await Factory.build(
+ 'user',
+ {
+ id: 'u3',
+ name: 'Jenny Rostock',
+ slug: 'jenny-rostock',
+ role: 'user',
+ },
+ {
+ email: 'user@example.org',
+ },
+ )
+ const huey = await Factory.build(
+ 'user',
+ {
+ id: 'u4',
+ name: 'Huey',
+ slug: 'huey',
+ role: 'user',
+ },
+ {
+ email: 'huey@example.org',
+ },
+ )
+ const dewey = await Factory.build(
+ 'user',
+ {
+ id: 'u5',
+ name: 'Dewey',
+ slug: 'dewey',
+ role: 'user',
+ },
+ {
+ email: 'dewey@example.org',
+ avatar: null,
+ },
+ )
+ const louie = await Factory.build(
+ 'user',
+ {
+ id: 'u6',
+ name: 'Louie',
+ slug: 'louie',
+ role: 'user',
+ },
+ {
+ email: 'louie@example.org',
+ },
+ )
+ const dagobert = await Factory.build(
+ 'user',
+ {
+ id: 'u7',
+ name: 'Dagobert',
+ slug: 'dagobert',
+ role: 'user',
+ },
+ {
+ email: 'dagobert@example.org',
+ },
)
- const [environment, nature, democracy, freedom] = await Promise.all([
- Factory.build('tag', {
- id: 'Environment',
- }),
- Factory.build('tag', {
- id: 'Nature',
- }),
- Factory.build('tag', {
- id: 'Democracy',
- }),
- Factory.build('tag', {
- id: 'Freedom',
- }),
- ])
+ await peterLustig.relateTo(Berlin, 'isIn')
+ await bobDerBaumeister.relateTo(Hamburg, 'isIn')
+ await jennyRostock.relateTo(Paris, 'isIn')
+ await huey.relateTo(Paris, 'isIn')
- // Create Groups
+ await peterLustig.relateTo(racoon, 'rewarded')
+ await peterLustig.relateTo(rhino, 'rewarded')
+ await peterLustig.relateTo(wolf, 'rewarded')
+ await bobDerBaumeister.relateTo(racoon, 'rewarded')
+ await bobDerBaumeister.relateTo(turtle, 'rewarded')
+ await jennyRostock.relateTo(bear, 'rewarded')
+ await dagobert.relateTo(rabbit, 'rewarded')
+ await peterLustig.relateTo(bobDerBaumeister, 'friends')
+ await peterLustig.relateTo(jennyRostock, 'friends')
+ await bobDerBaumeister.relateTo(jennyRostock, 'friends')
+
+ await peterLustig.relateTo(jennyRostock, 'following')
+ await peterLustig.relateTo(huey, 'following')
+ await bobDerBaumeister.relateTo(huey, 'following')
+ await jennyRostock.relateTo(huey, 'following')
+ await huey.relateTo(dewey, 'following')
+ await dewey.relateTo(huey, 'following')
+ await louie.relateTo(jennyRostock, 'following')
+
+ await huey.relateTo(dagobert, 'muted')
+ await dewey.relateTo(dagobert, 'muted')
+ await louie.relateTo(dagobert, 'muted')
+
+ await dagobert.relateTo(huey, 'blocked')
+ await dagobert.relateTo(dewey, 'blocked')
+ await dagobert.relateTo(louie, 'blocked')
+
+ // categories
+ let i = 0
+ for (const category of categories) {
+ await Factory.build('category', {
+ id: `cat${i++}`,
+ slug: category.name,
+ naem: category.name,
+ icon: category.icon,
+ })
+ }
+
+ // tags
+ const environment = await Factory.build('tag', {
+ id: 'Environment',
+ })
+ const nature = await Factory.build('tag', {
+ id: 'Nature',
+ })
+ const democracy = await Factory.build('tag', {
+ id: 'Democracy',
+ })
+ const freedom = await Factory.build('tag', {
+ id: 'Freedom',
+ })
+
+ // groups
authenticatedUser = await peterLustig.toJson()
- await Promise.all([
- mutate({
- mutation: createGroupMutation(),
- variables: {
- id: 'g0',
- name: 'Investigative Journalism',
- about: 'Investigative journalists share ideas and insights and can collaborate.',
- description: `
English:
This group is hidden.
What is our group for? This group was created to allow investigative journalists to share and collaborate.
How does it work? Here you can internally share posts and comments about them.
Deutsch:
Diese Gruppe ist verborgen.
Wofür ist unsere Gruppe? Diese Gruppe wurde geschaffen, um investigativen Journalisten den Austausch und die Zusammenarbeit zu ermöglichen.
Wie funktioniert das? Hier könnt ihr euch intern über Beiträge und Kommentare zu ihnen austauschen.
`,
- groupType: 'hidden',
- actionRadius: 'global',
- categoryIds: ['cat6', 'cat12', 'cat16'],
- locationName: 'Hamburg, Germany',
- },
- }),
- ])
- await Promise.all([
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g0',
- userId: 'u2',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g0',
- userId: 'u4',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g0',
- userId: 'u6',
- },
- }),
- ])
- await Promise.all([
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g0',
- userId: 'u2',
- roleInGroup: 'usual',
- },
- }),
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g0',
- userId: 'u4',
- roleInGroup: 'admin',
- },
- }),
- ])
+ await mutate({
+ mutation: createGroupMutation(),
+ variables: {
+ id: 'g0',
+ name: 'Investigative Journalism',
+ about: 'Investigative journalists share ideas and insights and can collaborate.',
+ description: `English:
This group is hidden.
What is our group for? This group was created to allow investigative journalists to share and collaborate.
How does it work? Here you can internally share posts and comments about them.
Deutsch:
Diese Gruppe ist verborgen.
Wofür ist unsere Gruppe? Diese Gruppe wurde geschaffen, um investigativen Journalisten den Austausch und die Zusammenarbeit zu ermöglichen.
Wie funktioniert das? Hier könnt ihr euch intern über Beiträge und Kommentare zu ihnen austauschen.
`,
+ groupType: 'hidden',
+ actionRadius: 'global',
+ categoryIds: ['cat6', 'cat12', 'cat16'],
+ locationName: 'Hamburg, Germany',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g0',
+ userId: 'u2',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g0',
+ userId: 'u4',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g0',
+ userId: 'u6',
+ },
+ })
+
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g0',
+ userId: 'u2',
+ roleInGroup: 'usual',
+ },
+ })
+
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g0',
+ userId: 'u4',
+ roleInGroup: 'admin',
+ },
+ })
// post into group
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p0-g0',
- groupId: 'g0',
- title: `What happend in Shanghai?`,
- content: 'A sack of rise dropped in Shanghai. Should we further investigate?',
- categoryIds: ['cat6'],
- },
- }),
- ])
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p0-g0',
+ groupId: 'g0',
+ title: `What happend in Shanghai?`,
+ content: 'A sack of rise dropped in Shanghai. Should we further investigate?',
+ categoryIds: ['cat6'],
+ },
+ })
+
authenticatedUser = await bobDerBaumeister.toJson()
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p1-g0',
- groupId: 'g0',
- title: `The man on the moon`,
- content: 'We have to further investigate about the stories of a man living on the moon.',
- categoryIds: ['cat12', 'cat16'],
- },
- }),
- ])
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p1-g0',
+ groupId: 'g0',
+ title: `The man on the moon`,
+ content: 'We have to further investigate about the stories of a man living on the moon.',
+ categoryIds: ['cat12', 'cat16'],
+ },
+ })
authenticatedUser = await jennyRostock.toJson()
- await Promise.all([
- mutate({
- mutation: createGroupMutation(),
- variables: {
- id: 'g1',
- name: 'School For Citizens',
- about: 'Our children shall receive education for life.',
- description: `English
Our goal Only those who enjoy learning and do not lose their curiosity can obtain a good education for life and continue to learn with joy throughout their lives.
Curiosity For this we need a school that takes up the curiosity of the children, the people, and satisfies it through a lot of experience.
Deutsch
Unser Ziel Nur wer Spaß am Lernen hat und seine Neugier nicht verliert, kann gute Bildung für's Leben erlangen und sein ganzes Leben mit Freude weiter lernen.
Neugier Dazu benötigen wir eine Schule, die die Neugier der Kinder, der Menschen, aufnimmt und durch viel Erfahrung befriedigt.
`,
- groupType: 'closed',
- actionRadius: 'national',
- categoryIds: ['cat8', 'cat14'],
- locationName: 'France',
- },
- }),
- ])
- await Promise.all([
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u1',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u2',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u5',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u6',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u7',
- },
- }),
- ])
- await Promise.all([
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u1',
- roleInGroup: 'usual',
- },
- }),
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u5',
- roleInGroup: 'admin',
- },
- }),
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g1',
- userId: 'u6',
- roleInGroup: 'owner',
- },
- }),
- ])
+ await mutate({
+ mutation: createGroupMutation(),
+ variables: {
+ id: 'g1',
+ name: 'School For Citizens',
+ about: 'Our children shall receive education for life.',
+ description: `English
Our goal Only those who enjoy learning and do not lose their curiosity can obtain a good education for life and continue to learn with joy throughout their lives.
Curiosity For this we need a school that takes up the curiosity of the children, the people, and satisfies it through a lot of experience.
Deutsch
Unser Ziel Nur wer Spaß am Lernen hat und seine Neugier nicht verliert, kann gute Bildung für's Leben erlangen und sein ganzes Leben mit Freude weiter lernen.
Neugier Dazu benötigen wir eine Schule, die die Neugier der Kinder, der Menschen, aufnimmt und durch viel Erfahrung befriedigt.
`,
+ groupType: 'closed',
+ actionRadius: 'national',
+ categoryIds: ['cat8', 'cat14'],
+ locationName: 'France',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u1',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u2',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u5',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u6',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u7',
+ },
+ })
+
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u1',
+ roleInGroup: 'usual',
+ },
+ })
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u5',
+ roleInGroup: 'admin',
+ },
+ })
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g1',
+ userId: 'u6',
+ roleInGroup: 'owner',
+ },
+ })
// post into group
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p0-g1',
- groupId: 'g1',
- title: `Can we use ocelot for education?`,
- content: 'I like the concept of this school. Can we use our software in this?',
- categoryIds: ['cat8'],
- },
- }),
- ])
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p0-g1',
+ groupId: 'g1',
+ title: `Can we use ocelot for education?`,
+ content: 'I like the concept of this school. Can we use our software in this?',
+ categoryIds: ['cat8'],
+ },
+ })
authenticatedUser = await peterLustig.toJson()
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p1-g1',
- groupId: 'g1',
- title: `Can we push this idea out of France?`,
- content: 'This idea is too inportant to have the scope only on France.',
- categoryIds: ['cat14'],
- },
- }),
- ])
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p1-g1',
+ groupId: 'g1',
+ title: `Can we push this idea out of France?`,
+ content: 'This idea is too inportant to have the scope only on France.',
+ categoryIds: ['cat14'],
+ },
+ })
authenticatedUser = await bobDerBaumeister.toJson()
- await Promise.all([
- mutate({
- mutation: createGroupMutation(),
- variables: {
- id: 'g2',
- name: 'Yoga Practice',
- about: 'We do yoga around the clock.',
- description: `What Is yoga? Yoga is not just about practicing asanas. It's about how we do it.
And practicing asanas doesn't have to be yoga, it can be more athletic than yogic.
What makes practicing asanas yogic? The important thing is:
`,
- groupType: 'public',
- actionRadius: 'interplanetary',
- categoryIds: ['cat4', 'cat5', 'cat17'],
- },
- }),
- ])
- await Promise.all([
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u3',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u4',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u5',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u6',
- },
- }),
- mutate({
- mutation: joinGroupMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u7',
- },
- }),
- ])
- await Promise.all([
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u3',
- roleInGroup: 'usual',
- },
- }),
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u4',
- roleInGroup: 'pending',
- },
- }),
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u5',
- roleInGroup: 'admin',
- },
- }),
- mutate({
- mutation: changeGroupMemberRoleMutation(),
- variables: {
- groupId: 'g2',
- userId: 'u6',
- roleInGroup: 'usual',
- },
- }),
- ])
+ await mutate({
+ mutation: createGroupMutation(),
+ variables: {
+ id: 'g2',
+ name: 'Yoga Practice',
+ about: 'We do yoga around the clock.',
+ description: `What Is yoga? Yoga is not just about practicing asanas. It's about how we do it.
And practicing asanas doesn't have to be yoga, it can be more athletic than yogic.
What makes practicing asanas yogic? The important thing is:
`,
+ groupType: 'public',
+ actionRadius: 'interplanetary',
+ categoryIds: ['cat4', 'cat5', 'cat17'],
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u3',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u4',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u5',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u6',
+ },
+ })
+ await mutate({
+ mutation: joinGroupMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u7',
+ },
+ })
+
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u3',
+ roleInGroup: 'usual',
+ },
+ })
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u4',
+ roleInGroup: 'pending',
+ },
+ })
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u5',
+ roleInGroup: 'admin',
+ },
+ })
+ await mutate({
+ mutation: changeGroupMemberRoleMutation(),
+ variables: {
+ groupId: 'g2',
+ userId: 'u6',
+ roleInGroup: 'usual',
+ },
+ })
authenticatedUser = await louie.toJson()
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p0-g2',
- groupId: 'g2',
- title: `I am a Noob`,
- content: 'I am new to Yoga and did not join this group so far.',
- categoryIds: ['cat4'],
- },
- }),
- ])
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p0-g2',
+ groupId: 'g2',
+ title: `I am a Noob`,
+ content: 'I am new to Yoga and did not join this group so far.',
+ categoryIds: ['cat4'],
+ },
+ })
// Create Events (by peter lustig)
authenticatedUser = await peterLustig.toJson()
const now = new Date()
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'e0',
- title: 'Illegaler Kindergeburtstag',
- content: 'Elli hat nächste Woche Geburtstag. Wir feiern das!',
- categoryIds: ['cat4'],
- postType: 'Event',
- eventInput: {
- eventStart: new Date(
- now.getFullYear(),
- now.getMonth(),
- now.getDate() + 7,
- ).toISOString(),
- eventVenue: 'Ellis Kinderzimmer',
- eventLocationName: 'Deutschland',
- },
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'e0',
+ title: 'Illegaler Kindergeburtstag',
+ content: 'Elli hat nächste Woche Geburtstag. Wir feiern das!',
+ categoryIds: ['cat4'],
+ postType: 'Event',
+ eventInput: {
+ eventStart: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 7).toISOString(),
+ eventVenue: 'Ellis Kinderzimmer',
+ eventLocationName: 'Deutschland',
},
- }),
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'e1',
- title: 'Wir Schützen den Stuttgarter Schlossgarten',
- content: 'Kein Baum wird gefällt werden!',
- categoryIds: ['cat5'],
- postType: 'Event',
- eventInput: {
- eventStart: new Date(
- now.getFullYear(),
- now.getMonth(),
- now.getDate() + 1,
- ).toISOString(),
- eventVenue: 'Schlossgarten',
- eventLocationName: 'Stuttgart',
- },
+ },
+ })
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'e1',
+ title: 'Wir Schützen den Stuttgarter Schlossgarten',
+ content: 'Kein Baum wird gefällt werden!',
+ categoryIds: ['cat5'],
+ postType: 'Event',
+ eventInput: {
+ eventStart: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1).toISOString(),
+ eventVenue: 'Schlossgarten',
+ eventLocationName: 'Stuttgart',
},
- }),
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'e2',
- title: 'IT 4 Change Treffen',
- content: 'Wir sitzen eine Woche zusammen rum und glotzen uns blöde an.',
- categoryIds: ['cat5'],
- postType: 'Event',
- eventInput: {
- eventStart: new Date(
- now.getFullYear(),
- now.getMonth(),
- now.getDate() + 1,
- ).toISOString(),
- eventEnd: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 4).toISOString(),
- eventVenue: 'Ferienlager',
- eventLocationName: 'Bahra, Sachsen',
- },
+ },
+ })
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'e2',
+ title: 'IT 4 Change Treffen',
+ content: 'Wir sitzen eine Woche zusammen rum und glotzen uns blöde an.',
+ categoryIds: ['cat5'],
+ postType: 'Event',
+ eventInput: {
+ eventStart: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1).toISOString(),
+ eventEnd: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 4).toISOString(),
+ eventVenue: 'Ferienlager',
+ eventLocationName: 'Bahra, Sachsen',
},
- }),
- ])
+ },
+ })
let passedEvent = await neode.find('Post', 'e1')
await passedEvent.update({ eventStart: new Date(2010, 8, 30, 10).toISOString() })
@@ -668,166 +621,164 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
eventStart: new Date(now.getFullYear(), now.getMonth(), now.getDate() - 3).toISOString(),
})
- // Create Posts (Articles)
-
- const [p0, p1, p3, p4, p5, p6, p9, p10, p11, p13, p14, p15] = await Promise.all([
- Factory.build(
- 'post',
- {
- id: 'p0',
- language: sample(languages),
- },
- {
- categoryIds: ['cat16'],
- author: peterLustig,
- image: Factory.build('image', {
- url: faker.image.unsplash.food(300, 169),
- sensitive: true,
- aspectRatio: 300 / 169,
- }),
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p1',
- language: sample(languages),
- },
- {
- categoryIds: ['cat1'],
- author: bobDerBaumeister,
- image: Factory.build('image', {
- url: faker.image.unsplash.technology(300, 1500),
- aspectRatio: 300 / 1500,
- }),
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p3',
- language: sample(languages),
- },
- {
- categoryIds: ['cat3'],
- author: huey,
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p4',
- language: sample(languages),
- },
- {
- categoryIds: ['cat4'],
- author: dewey,
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p5',
- language: sample(languages),
- },
- {
- categoryIds: ['cat5'],
- author: louie,
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p6',
- language: sample(languages),
- },
- {
- categoryIds: ['cat6'],
- author: peterLustig,
- image: Factory.build('image', {
- url: faker.image.unsplash.buildings(300, 857),
- aspectRatio: 300 / 857,
- }),
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p9',
- language: sample(languages),
- },
- {
- categoryIds: ['cat9'],
- author: huey,
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p10',
- },
- {
- categoryIds: ['cat10'],
- author: dewey,
- image: Factory.build('image', {
- sensitive: true,
- }),
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p11',
- language: sample(languages),
- },
- {
- categoryIds: ['cat11'],
- author: louie,
- image: Factory.build('image', {
- url: faker.image.unsplash.people(300, 901),
- aspectRatio: 300 / 901,
- }),
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p13',
- language: sample(languages),
- },
- {
- categoryIds: ['cat13'],
- author: bobDerBaumeister,
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p14',
- language: sample(languages),
- },
- {
- categoryIds: ['cat14'],
- author: jennyRostock,
- image: Factory.build('image', {
- url: faker.image.unsplash.objects(300, 200),
- aspectRatio: 300 / 450,
- }),
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p15',
- language: sample(languages),
- },
- {
- categoryIds: ['cat15'],
- author: huey,
- },
- ),
- ])
+ // posts (articles)
+ const p0 = await Factory.build(
+ 'post',
+ {
+ id: 'p0',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat16'],
+ author: peterLustig,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.food(300, 169),
+ sensitive: true,
+ aspectRatio: 300 / 169,
+ }),
+ },
+ )
+ const p1 = await Factory.build(
+ 'post',
+ {
+ id: 'p1',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat1'],
+ author: bobDerBaumeister,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.technology(300, 1500),
+ aspectRatio: 300 / 1500,
+ }),
+ },
+ )
+ const p3 = await Factory.build(
+ 'post',
+ {
+ id: 'p3',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat3'],
+ author: huey,
+ },
+ )
+ const p4 = await Factory.build(
+ 'post',
+ {
+ id: 'p4',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat4'],
+ author: dewey,
+ },
+ )
+ const p5 = await Factory.build(
+ 'post',
+ {
+ id: 'p5',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat5'],
+ author: louie,
+ },
+ )
+ const p6 = await Factory.build(
+ 'post',
+ {
+ id: 'p6',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat6'],
+ author: peterLustig,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.buildings(300, 857),
+ aspectRatio: 300 / 857,
+ }),
+ },
+ )
+ const p9 = await Factory.build(
+ 'post',
+ {
+ id: 'p9',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat9'],
+ author: huey,
+ },
+ )
+ const p10 = await Factory.build(
+ 'post',
+ {
+ id: 'p10',
+ },
+ {
+ categoryIds: ['cat10'],
+ author: dewey,
+ image: Factory.build('image', {
+ sensitive: true,
+ }),
+ },
+ )
+ const p11 = await Factory.build(
+ 'post',
+ {
+ id: 'p11',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat11'],
+ author: louie,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.people(300, 901),
+ aspectRatio: 300 / 901,
+ }),
+ },
+ )
+ const p13 = await Factory.build(
+ 'post',
+ {
+ id: 'p13',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat13'],
+ author: bobDerBaumeister,
+ },
+ )
+ const p14 = await Factory.build(
+ 'post',
+ {
+ id: 'p14',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat14'],
+ author: jennyRostock,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.objects(300, 200),
+ aspectRatio: 300 / 450,
+ }),
+ },
+ )
+ const p15 = await Factory.build(
+ 'post',
+ {
+ id: 'p15',
+ language: sample(languages),
+ },
+ {
+ categoryIds: ['cat15'],
+ author: huey,
+ },
+ )
+ // invite code
await Factory.build(
'inviteCode',
{
@@ -848,48 +799,49 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
const hashtagAndMention1 =
'The new physics of #QuantenFlussTheorie can explain #QuantumGravity ! @peter-lustig got that already. ;-)'
- await Promise.all([
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p2',
- title: `Nature Philosophy Yoga`,
- content: hashtag1,
- categoryIds: ['cat2'],
- },
- }),
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p7',
- title: 'This is post #7',
- content: `${mention1} ${faker.lorem.paragraph()}`,
- categoryIds: ['cat7'],
- },
- }),
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p8',
- image: faker.image.unsplash.nature(),
- title: `Quantum Flow Theory explains Quantum Gravity`,
- content: hashtagAndMention1,
- categoryIds: ['cat8'],
- },
- }),
- mutate({
- mutation: createPostMutation(),
- variables: {
- id: 'p12',
- title: 'This is post #12',
- content: `${mention2} ${faker.lorem.paragraph()}`,
- categoryIds: ['cat12'],
- },
- }),
- ])
- const [p2, p7, p8, p12] = await Promise.all(
- ['p2', 'p7', 'p8', 'p12'].map((id) => neode.find('Post', id)),
- )
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p2',
+ title: `Nature Philosophy Yoga`,
+ content: hashtag1,
+ categoryIds: ['cat2'],
+ },
+ })
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p7',
+ title: 'This is post #7',
+ content: `${mention1} ${faker.lorem.paragraph()}`,
+ categoryIds: ['cat7'],
+ },
+ })
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p8',
+ image: faker.image.unsplash.nature(),
+ title: `Quantum Flow Theory explains Quantum Gravity`,
+ content: hashtagAndMention1,
+ categoryIds: ['cat8'],
+ },
+ })
+ await mutate({
+ mutation: createPostMutation(),
+ variables: {
+ id: 'p12',
+ title: 'This is post #12',
+ content: `${mention2} ${faker.lorem.paragraph()}`,
+ categoryIds: ['cat12'],
+ },
+ })
+
+ const p2 = await neode.find('Post', 'p2')
+ const p7 = await neode.find('Post', 'p7')
+ const p8 = await neode.find('Post', 'p8')
+ const p12 = await neode.find('Post', 'p12')
+
authenticatedUser = null
authenticatedUser = await dewey.toJson()
@@ -897,35 +849,35 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
'I heard @jenny-rostock has practiced it for 3 years now.'
const mentionInComment2 =
'Did @peter-lustig tell you?'
- await Promise.all([
- mutate({
- mutation: createCommentMutation,
- variables: {
- id: 'c4',
- postId: 'p2',
- content: mentionInComment1,
- },
- }),
- mutate({
- mutation: createCommentMutation,
- variables: {
- id: 'c4-1',
- postId: 'p2',
- content: mentionInComment2,
- },
- }),
- mutate({
- mutation: createCommentMutation,
- variables: {
- postId: 'p14',
- content: faker.lorem.paragraph(),
- },
- }), // should send a notification
- ])
+ await mutate({
+ mutation: createCommentMutation,
+ variables: {
+ id: 'c4',
+ postId: 'p2',
+ content: mentionInComment1,
+ },
+ })
+ await mutate({
+ mutation: createCommentMutation,
+ variables: {
+ id: 'c4-1',
+ postId: 'p2',
+ content: mentionInComment2,
+ },
+ })
+ await mutate({
+ mutation: createCommentMutation,
+ variables: {
+ postId: 'p14',
+ content: faker.lorem.paragraph(),
+ },
+ }) // should send a notification
+
authenticatedUser = null
- const comments = await Promise.all([
- Factory.build(
+ const comments: any[] = []
+ comments.push(
+ await Factory.build(
'comment',
{
id: 'c1',
@@ -935,7 +887,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p1',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c2',
@@ -945,7 +897,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p1',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c3',
@@ -955,7 +907,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p3',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c5',
@@ -965,7 +917,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p3',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c6',
@@ -975,7 +927,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p4',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c7',
@@ -985,7 +937,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p2',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c8',
@@ -995,7 +947,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p15',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c9',
@@ -1005,7 +957,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p15',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c10',
@@ -1015,7 +967,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p15',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c11',
@@ -1025,7 +977,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p15',
},
),
- Factory.build(
+ await Factory.build(
'comment',
{
id: 'c12',
@@ -1035,84 +987,81 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
postId: 'p15',
},
),
- ])
+ )
const trollingComment = comments[0]
- await Promise.all([
- democracy.relateTo(p3, 'post'),
- democracy.relateTo(p11, 'post'),
- democracy.relateTo(p15, 'post'),
- democracy.relateTo(p7, 'post'),
- environment.relateTo(p1, 'post'),
- environment.relateTo(p5, 'post'),
- environment.relateTo(p9, 'post'),
- environment.relateTo(p13, 'post'),
- freedom.relateTo(p0, 'post'),
- freedom.relateTo(p4, 'post'),
- freedom.relateTo(p8, 'post'),
- freedom.relateTo(p12, 'post'),
- nature.relateTo(p2, 'post'),
- nature.relateTo(p6, 'post'),
- nature.relateTo(p10, 'post'),
- nature.relateTo(p14, 'post'),
- peterLustig.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- bobDerBaumeister.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- jennyRostock.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- huey.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- dewey.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- louie.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- dagobert.relateTo(p15, 'emoted', { emotion: 'surprised' }),
- bobDerBaumeister.relateTo(p14, 'emoted', { emotion: 'cry' }),
- jennyRostock.relateTo(p13, 'emoted', { emotion: 'angry' }),
- huey.relateTo(p12, 'emoted', { emotion: 'funny' }),
- dewey.relateTo(p11, 'emoted', { emotion: 'surprised' }),
- louie.relateTo(p10, 'emoted', { emotion: 'cry' }),
- dewey.relateTo(p9, 'emoted', { emotion: 'happy' }),
- huey.relateTo(p8, 'emoted', { emotion: 'angry' }),
- jennyRostock.relateTo(p7, 'emoted', { emotion: 'funny' }),
- bobDerBaumeister.relateTo(p6, 'emoted', { emotion: 'surprised' }),
- peterLustig.relateTo(p5, 'emoted', { emotion: 'cry' }),
- bobDerBaumeister.relateTo(p4, 'emoted', { emotion: 'happy' }),
- jennyRostock.relateTo(p3, 'emoted', { emotion: 'angry' }),
- huey.relateTo(p2, 'emoted', { emotion: 'funny' }),
- dewey.relateTo(p1, 'emoted', { emotion: 'surprised' }),
- louie.relateTo(p0, 'emoted', { emotion: 'cry' }),
- ])
+ await democracy.relateTo(p3, 'post')
+ await democracy.relateTo(p11, 'post')
+ await democracy.relateTo(p15, 'post')
+ await democracy.relateTo(p7, 'post')
+ await environment.relateTo(p1, 'post')
+ await environment.relateTo(p5, 'post')
+ await environment.relateTo(p9, 'post')
+ await environment.relateTo(p13, 'post')
+ await freedom.relateTo(p0, 'post')
+ await freedom.relateTo(p4, 'post')
+ await freedom.relateTo(p8, 'post')
+ await freedom.relateTo(p12, 'post')
+ await nature.relateTo(p2, 'post')
+ await nature.relateTo(p6, 'post')
+ await nature.relateTo(p10, 'post')
+ await nature.relateTo(p14, 'post')
+ await peterLustig.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await bobDerBaumeister.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await jennyRostock.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await huey.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await dewey.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await louie.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await dagobert.relateTo(p15, 'emoted', { emotion: 'surprised' })
+ await bobDerBaumeister.relateTo(p14, 'emoted', { emotion: 'cry' })
+ await jennyRostock.relateTo(p13, 'emoted', { emotion: 'angry' })
+ await huey.relateTo(p12, 'emoted', { emotion: 'funny' })
+ await dewey.relateTo(p11, 'emoted', { emotion: 'surprised' })
+ await louie.relateTo(p10, 'emoted', { emotion: 'cry' })
+ await dewey.relateTo(p9, 'emoted', { emotion: 'happy' })
+ await huey.relateTo(p8, 'emoted', { emotion: 'angry' })
+ await jennyRostock.relateTo(p7, 'emoted', { emotion: 'funny' })
+ await bobDerBaumeister.relateTo(p6, 'emoted', { emotion: 'surprised' })
+ await peterLustig.relateTo(p5, 'emoted', { emotion: 'cry' })
+ await bobDerBaumeister.relateTo(p4, 'emoted', { emotion: 'happy' })
+ await jennyRostock.relateTo(p3, 'emoted', { emotion: 'angry' })
+ await huey.relateTo(p2, 'emoted', { emotion: 'funny' })
+ await dewey.relateTo(p1, 'emoted', { emotion: 'surprised' })
+ await louie.relateTo(p0, 'emoted', { emotion: 'cry' })
- await Promise.all([
- peterLustig.relateTo(p1, 'shouted'),
- peterLustig.relateTo(p6, 'shouted'),
- bobDerBaumeister.relateTo(p0, 'shouted'),
- bobDerBaumeister.relateTo(p6, 'shouted'),
- jennyRostock.relateTo(p6, 'shouted'),
- jennyRostock.relateTo(p7, 'shouted'),
- huey.relateTo(p8, 'shouted'),
- huey.relateTo(p9, 'shouted'),
- dewey.relateTo(p10, 'shouted'),
- peterLustig.relateTo(p2, 'shouted'),
- peterLustig.relateTo(p6, 'shouted'),
- bobDerBaumeister.relateTo(p0, 'shouted'),
- bobDerBaumeister.relateTo(p6, 'shouted'),
- jennyRostock.relateTo(p6, 'shouted'),
- jennyRostock.relateTo(p7, 'shouted'),
- huey.relateTo(p8, 'shouted'),
- huey.relateTo(p9, 'shouted'),
- louie.relateTo(p10, 'shouted'),
- ])
- const reports = await Promise.all([
- Factory.build('report'),
- Factory.build('report'),
- Factory.build('report'),
- Factory.build('report'),
- ])
+ await peterLustig.relateTo(p1, 'shouted')
+ await peterLustig.relateTo(p6, 'shouted')
+ await bobDerBaumeister.relateTo(p0, 'shouted')
+ await bobDerBaumeister.relateTo(p6, 'shouted')
+ await jennyRostock.relateTo(p6, 'shouted')
+ await jennyRostock.relateTo(p7, 'shouted')
+ await huey.relateTo(p8, 'shouted')
+ await huey.relateTo(p9, 'shouted')
+ await dewey.relateTo(p10, 'shouted')
+ await peterLustig.relateTo(p2, 'shouted')
+ await peterLustig.relateTo(p6, 'shouted')
+ await bobDerBaumeister.relateTo(p0, 'shouted')
+ await bobDerBaumeister.relateTo(p6, 'shouted')
+ await jennyRostock.relateTo(p6, 'shouted')
+ await jennyRostock.relateTo(p7, 'shouted')
+ await huey.relateTo(p8, 'shouted')
+ await huey.relateTo(p9, 'shouted')
+ await louie.relateTo(p10, 'shouted')
+
+ const reports: any[] = []
+ reports.push(
+ await Factory.build('report'),
+ await Factory.build('report'),
+ await Factory.build('report'),
+ await Factory.build('report'),
+ )
const reportAgainstDagobert = reports[0]
const reportAgainstTrollingPost = reports[1]
const reportAgainstTrollingComment = reports[2]
const reportAgainstDewey = reports[3]
// report resource first time
-
await reportAgainstDagobert.relateTo(jennyRostock, 'filed', {
resourceId: 'u7',
reasonCategory: 'discrimination_etc',
@@ -1139,27 +1088,25 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
await reportAgainstDewey.relateTo(dewey, 'belongsTo')
// report resource a second time
- await Promise.all([
- reportAgainstDagobert.relateTo(louie, 'filed', {
- resourceId: 'u7',
- reasonCategory: 'discrimination_etc',
- reasonDescription: 'this user is attacking me for who I am!',
- }),
- reportAgainstDagobert.relateTo(dagobert, 'belongsTo'),
- reportAgainstTrollingPost.relateTo(peterLustig, 'filed', {
- resourceId: 'p2',
- reasonCategory: 'discrimination_etc',
- reasonDescription: 'This post is bigoted',
- }),
- reportAgainstTrollingPost.relateTo(p2, 'belongsTo'),
+ await reportAgainstDagobert.relateTo(louie, 'filed', {
+ resourceId: 'u7',
+ reasonCategory: 'discrimination_etc',
+ reasonDescription: 'this user is attacking me for who I am!',
+ })
+ await reportAgainstDagobert.relateTo(dagobert, 'belongsTo')
+ await reportAgainstTrollingPost.relateTo(peterLustig, 'filed', {
+ resourceId: 'p2',
+ reasonCategory: 'discrimination_etc',
+ reasonDescription: 'This post is bigoted',
+ })
+ await reportAgainstTrollingPost.relateTo(p2, 'belongsTo')
- reportAgainstTrollingComment.relateTo(bobDerBaumeister, 'filed', {
- resourceId: 'c1',
- reasonCategory: 'pornographic_content_links',
- reasonDescription: 'This comment is porno!!!',
- }),
- reportAgainstTrollingComment.relateTo(trollingComment, 'belongsTo'),
- ])
+ await reportAgainstTrollingComment.relateTo(bobDerBaumeister, 'filed', {
+ resourceId: 'c1',
+ reasonCategory: 'pornographic_content_links',
+ reasonDescription: 'This comment is porno!!!',
+ })
+ await reportAgainstTrollingComment.relateTo(trollingComment, 'belongsTo')
const disableVariables = {
resourceId: 'undefined-resource',
@@ -1168,409 +1115,451 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
}
// review resource first time
- await Promise.all([
- reportAgainstDagobert.relateTo(bobDerBaumeister, 'reviewed', {
- ...disableVariables,
- resourceId: 'u7',
- }),
- dagobert.update({ disabled: true, updatedAt: new Date().toISOString() }),
- reportAgainstTrollingPost.relateTo(peterLustig, 'reviewed', {
- ...disableVariables,
- resourceId: 'p2',
- }),
- p2.update({ disabled: true, updatedAt: new Date().toISOString() }),
- reportAgainstTrollingComment.relateTo(bobDerBaumeister, 'reviewed', {
- ...disableVariables,
- resourceId: 'c1',
- }),
- trollingComment.update({ disabled: true, updatedAt: new Date().toISOString() }),
- ])
+ await reportAgainstDagobert.relateTo(bobDerBaumeister, 'reviewed', {
+ ...disableVariables,
+ resourceId: 'u7',
+ })
+ await dagobert.update({ disabled: true, updatedAt: new Date().toISOString() })
+ await reportAgainstTrollingPost.relateTo(peterLustig, 'reviewed', {
+ ...disableVariables,
+ resourceId: 'p2',
+ })
+ await p2.update({ disabled: true, updatedAt: new Date().toISOString() })
+ await reportAgainstTrollingComment.relateTo(bobDerBaumeister, 'reviewed', {
+ ...disableVariables,
+ resourceId: 'c1',
+ })
+ await trollingComment.update({ disabled: true, updatedAt: new Date().toISOString() })
// second review of resource and close report
- await Promise.all([
- reportAgainstDagobert.relateTo(peterLustig, 'reviewed', {
- resourceId: 'u7',
- disable: false,
- closed: true,
- }),
- dagobert.update({ disabled: false, updatedAt: new Date().toISOString(), closed: true }),
- reportAgainstTrollingPost.relateTo(bobDerBaumeister, 'reviewed', {
- resourceId: 'p2',
- disable: true,
- closed: true,
- }),
- p2.update({ disabled: true, updatedAt: new Date().toISOString(), closed: true }),
- reportAgainstTrollingComment.relateTo(peterLustig, 'reviewed', {
- ...disableVariables,
- resourceId: 'c1',
- disable: true,
- closed: true,
- }),
- trollingComment.update({ disabled: true, updatedAt: new Date().toISOString(), closed: true }),
- ])
+ await reportAgainstDagobert.relateTo(peterLustig, 'reviewed', {
+ resourceId: 'u7',
+ disable: false,
+ closed: true,
+ })
+ await dagobert.update({ disabled: false, updatedAt: new Date().toISOString(), closed: true })
+ await reportAgainstTrollingPost.relateTo(bobDerBaumeister, 'reviewed', {
+ resourceId: 'p2',
+ disable: true,
+ closed: true,
+ })
+ await p2.update({ disabled: true, updatedAt: new Date().toISOString(), closed: true })
+ await reportAgainstTrollingComment.relateTo(peterLustig, 'reviewed', {
+ ...disableVariables,
+ resourceId: 'c1',
+ disable: true,
+ closed: true,
+ })
+ await trollingComment.update({
+ disabled: true,
+ updatedAt: new Date().toISOString(),
+ closed: true,
+ })
- const additionalUsers = await Promise.all(
- [...Array(30).keys()].map(() => Factory.build('user')),
- )
+ const additionalUsers: any[] = []
+ for (let i = 0; i < 30; i++) {
+ const user = await Factory.build('user')
+ await jennyRostock.relateTo(user, 'following')
+ await user.relateTo(jennyRostock, 'following')
+ additionalUsers.push(user)
+ }
- await Promise.all(
- additionalUsers.map(async (user) => {
- await jennyRostock.relateTo(user, 'following')
- await user.relateTo(jennyRostock, 'following')
- }),
- )
+ // Jenny users
+ for (let i = 0; i < 30; i++) {
+ await Factory.build('user', { name: `Jenny${i}` })
+ }
- await Promise.all(
- [...Array(30).keys()].map((index) => Factory.build('user', { name: `Jenny${index}` })),
- )
+ // Jenny posts
+ for (let i = 0; i < 30; i++) {
+ await Factory.build(
+ 'post',
+ { content: `Jenny ${faker.lorem.sentence()}` },
+ {
+ categoryIds: ['cat1'],
+ author: jennyRostock,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.objects(),
+ }),
+ },
+ )
+ }
- await Promise.all(
- [...Array(30).keys()].map(() =>
- Factory.build(
- 'post',
- { content: `Jenny ${faker.lorem.sentence()}` },
- {
- categoryIds: ['cat1'],
- author: jennyRostock,
- image: Factory.build('image', {
- url: faker.image.unsplash.objects(),
- }),
- },
- ),
- ),
- )
+ // comments on p2 jenny
+ for (let i = 0; i < 6; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: jennyRostock,
+ postId: 'p2',
+ },
+ )
+ }
- await Promise.all(
- [...Array(30).keys()].map(() =>
- Factory.build(
- 'post',
- {},
- {
- categoryIds: ['cat1'],
- author: jennyRostock,
- image: Factory.build('image', {
- url: faker.image.unsplash.objects(),
- }),
- },
- ),
- ),
- )
+ // comments on p15 jenny
+ for (let i = 0; i < 4; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: jennyRostock,
+ postId: 'p15',
+ },
+ )
+ }
- await Promise.all(
- [...Array(6).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: jennyRostock,
- postId: 'p2',
- },
- ),
- ),
- )
+ // comments on p4 jenny
+ for (let i = 0; i < 2; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: jennyRostock,
+ postId: 'p4',
+ },
+ )
+ }
- await Promise.all(
- [...Array(4).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: jennyRostock,
- postId: 'p15',
- },
- ),
- ),
- )
+ // Posts Peter Lustig
+ for (let i = 0; i < 21; i++) {
+ await Factory.build(
+ 'post',
+ {},
+ {
+ categoryIds: ['cat1'],
+ author: peterLustig,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.buildings(),
+ }),
+ },
+ )
+ }
- await Promise.all(
- [...Array(2).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: jennyRostock,
- postId: 'p4',
- },
- ),
- ),
- )
+ // comments p4 peter
+ for (let i = 0; i < 3; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: peterLustig,
+ postId: 'p4',
+ },
+ )
+ }
- await Promise.all(
- [...Array(21).keys()].map(() =>
- Factory.build(
- 'post',
- {},
- {
- categoryIds: ['cat1'],
- author: peterLustig,
- image: Factory.build('image', {
- url: faker.image.unsplash.buildings(),
- }),
- },
- ),
- ),
- )
+ // comments p14 peter
+ for (let i = 0; i < 3; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: peterLustig,
+ postId: 'p14',
+ },
+ )
+ }
- await Promise.all(
- [...Array(3).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: peterLustig,
- postId: 'p4',
- },
- ),
- ),
- )
+ // comments p0 peter
+ for (let i = 0; i < 3; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: peterLustig,
+ postId: 'p0',
+ },
+ )
+ }
- await Promise.all(
- [...Array(3).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: peterLustig,
- postId: 'p14',
- },
- ),
- ),
- )
+ // Posts dewey
+ for (let i = 0; i < 11; i++) {
+ await Factory.build(
+ 'post',
+ {},
+ {
+ categoryIds: ['cat1'],
+ author: dewey,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.food(),
+ }),
+ },
+ )
+ }
- await Promise.all(
- [...Array(6).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: peterLustig,
- postId: 'p0',
- },
- ),
- ),
- )
+ // Comments p2 dewey
+ for (let i = 0; i < 7; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: dewey,
+ postId: 'p2',
+ },
+ )
+ }
- await Promise.all(
- [...Array(11).keys()].map(() =>
- Factory.build(
- 'post',
- {},
- {
- categoryIds: ['cat1'],
- author: dewey,
- image: Factory.build('image', {
- url: faker.image.unsplash.food(),
- }),
- },
- ),
- ),
- )
+ // Comments p6 dewey
+ for (let i = 0; i < 5; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: dewey,
+ postId: 'p6',
+ },
+ )
+ }
- await Promise.all(
- [...Array(7).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: dewey,
- postId: 'p2',
- },
- ),
- ),
- )
+ // Comments p9 dewey
+ for (let i = 0; i < 2; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: dewey,
+ postId: 'p9',
+ },
+ )
+ }
- await Promise.all(
- [...Array(5).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: dewey,
- postId: 'p6',
- },
- ),
- ),
- )
+ // Posts louie
+ for (let i = 0; i < 16; i++) {
+ await Factory.build(
+ 'post',
+ {},
+ {
+ categoryIds: ['cat1'],
+ author: louie,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.technology(),
+ }),
+ },
+ )
+ }
- await Promise.all(
- [...Array(2).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: dewey,
- postId: 'p9',
- },
- ),
- ),
- )
+ // Comments p1 louie
+ for (let i = 0; i < 4; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ postId: 'p1',
+ author: louie,
+ },
+ )
+ }
- await Promise.all(
- [...Array(16).keys()].map(() =>
- Factory.build(
- 'post',
- {},
- {
- categoryIds: ['cat1'],
- author: louie,
- image: Factory.build('image', {
- url: faker.image.unsplash.technology(),
- }),
- },
- ),
- ),
- )
+ // Comments p10 louie
+ for (let i = 0; i < 8; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: louie,
+ postId: 'p10',
+ },
+ )
+ }
- await Promise.all(
- [...Array(4).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- postId: 'p1',
- author: louie,
- },
- ),
- ),
- )
+ // Comments p13 louie
+ for (let i = 0; i < 5; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: louie,
+ postId: 'p13',
+ },
+ )
+ }
- await Promise.all(
- [...Array(8).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: louie,
- postId: 'p10',
- },
- ),
- ),
- )
+ // Posts Bob der Baumeister
+ for (let i = 0; i < 45; i++) {
+ await Factory.build(
+ 'post',
+ {},
+ {
+ categoryIds: ['cat1'],
+ author: bobDerBaumeister,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.people(),
+ }),
+ },
+ )
+ }
- await Promise.all(
- [...Array(5).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: louie,
- postId: 'p13',
- },
- ),
- ),
- )
+ // Comments p2 bob
+ for (let i = 0; i < 2; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: bobDerBaumeister,
+ postId: 'p2',
+ },
+ )
+ }
- await Promise.all(
- [...Array(45).keys()].map(() =>
- Factory.build(
- 'post',
- {},
- {
- categoryIds: ['cat1'],
- author: bobDerBaumeister,
- image: Factory.build('image', {
- url: faker.image.unsplash.people(),
- }),
- },
- ),
- ),
- )
+ // Comments p12 bob
+ for (let i = 0; i < 3; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: bobDerBaumeister,
+ postId: 'p12',
+ },
+ )
+ }
- await Promise.all(
- [...Array(2).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: bobDerBaumeister,
- postId: 'p2',
- },
- ),
- ),
- )
+ // Comments p13 bob
+ for (let i = 0; i < 7; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: bobDerBaumeister,
+ postId: 'p13',
+ },
+ )
+ }
- await Promise.all(
- [...Array(3).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: bobDerBaumeister,
- postId: 'p12',
- },
- ),
- ),
- )
+ // Posts huey
+ for (let i = 0; i < 8; i++) {
+ await Factory.build(
+ 'post',
+ {},
+ {
+ categoryIds: ['cat1'],
+ author: huey,
+ image: Factory.build('image', {
+ url: faker.image.unsplash.nature(),
+ }),
+ },
+ )
+ }
- await Promise.all(
- [...Array(7).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: bobDerBaumeister,
- postId: 'p13',
- },
- ),
- ),
- )
+ // Comments p0 huey
+ for (let i = 0; i < 6; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: huey,
+ postId: 'p0',
+ },
+ )
+ }
- await Promise.all(
- [...Array(8).keys()].map(() =>
- Factory.build(
- 'post',
- {},
- {
- categoryIds: ['cat1'],
- author: huey,
- image: Factory.build('image', {
- url: faker.image.unsplash.nature(),
- }),
- },
- ),
- ),
- )
+ // Comments p13 huey
+ for (let i = 0; i < 8; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: huey,
+ postId: 'p13',
+ },
+ )
+ }
- await Promise.all(
- [...Array(6).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: huey,
- postId: 'p0',
- },
- ),
- ),
- )
-
- await Promise.all(
- [...Array(8).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: huey,
- postId: 'p13',
- },
- ),
- ),
- )
-
- await Promise.all(
- [...Array(8).keys()].map(() =>
- Factory.build(
- 'comment',
- {},
- {
- author: huey,
- postId: 'p15',
- },
- ),
- ),
- )
+ // Comments p15 huey
+ for (let i = 0; i < 8; i++) {
+ await Factory.build(
+ 'comment',
+ {},
+ {
+ author: huey,
+ postId: 'p15',
+ },
+ )
+ }
await Factory.build('donations')
+
+ // Chat
+ authenticatedUser = await huey.toJson()
+ const { data: roomHueyPeter } = await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: (await peterLustig.toJson()).id,
+ },
+ })
+
+ for (let i = 0; i < 30; i++) {
+ authenticatedUser = await huey.toJson()
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: roomHueyPeter?.CreateRoom.id,
+ content: faker.lorem.sentence(),
+ },
+ })
+ authenticatedUser = await peterLustig.toJson()
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: roomHueyPeter?.CreateRoom.id,
+ content: faker.lorem.sentence(),
+ },
+ })
+ }
+
+ authenticatedUser = await huey.toJson()
+ const { data: roomHueyJenny } = await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: (await jennyRostock.toJson()).id,
+ },
+ })
+ for (let i = 0; i < 1000; i++) {
+ authenticatedUser = await huey.toJson()
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: roomHueyJenny?.CreateRoom.id,
+ content: faker.lorem.sentence(),
+ },
+ })
+ authenticatedUser = await jennyRostock.toJson()
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: roomHueyJenny?.CreateRoom.id,
+ content: faker.lorem.sentence(),
+ },
+ })
+ }
+
+ for (const user of additionalUsers) {
+ authenticatedUser = await jennyRostock.toJson()
+ const { data: room } = await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: (await user.toJson()).id,
+ },
+ })
+
+ for (let i = 0; i < 29; i++) {
+ authenticatedUser = await jennyRostock.toJson()
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: room?.CreateRoom.id,
+ content: faker.lorem.sentence(),
+ },
+ })
+ authenticatedUser = await user.toJson()
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: room?.CreateRoom.id,
+ content: faker.lorem.sentence(),
+ },
+ })
+ }
+ }
+
/* eslint-disable-next-line no-console */
console.log('Seeded Data...')
await driver.close()
diff --git a/backend/src/graphql/messages.ts b/backend/src/graphql/messages.ts
index c51950cc8..2842c7230 100644
--- a/backend/src/graphql/messages.ts
+++ b/backend/src/graphql/messages.ts
@@ -2,16 +2,17 @@ import gql from 'graphql-tag'
export const createMessageMutation = () => {
return gql`
- mutation (
- $roomId: ID!
- $content: String!
- ) {
- CreateMessage(
- roomId: $roomId
- content: $content
- ) {
+ mutation ($roomId: ID!, $content: String!) {
+ CreateMessage(roomId: $roomId, content: $content) {
id
content
+ senderId
+ username
+ avatar
+ date
+ saved
+ distributed
+ seen
}
}
`
@@ -19,16 +20,31 @@ export const createMessageMutation = () => {
export const messageQuery = () => {
return gql`
- query($roomId: ID!) {
- Message(roomId: $roomId) {
+ query ($roomId: ID!, $first: Int, $offset: Int) {
+ Message(roomId: $roomId, first: $first, offset: $offset, orderBy: indexId_desc) {
_id
id
+ indexId
content
senderId
+ author {
+ id
+ }
username
avatar
date
+ saved
+ distributed
+ seen
}
}
`
}
+
+export const markMessagesAsSeen = () => {
+ return gql`
+ mutation ($messageIds: [String!]) {
+ MarkMessagesAsSeen(messageIds: $messageIds)
+ }
+ `
+}
diff --git a/backend/src/graphql/rooms.ts b/backend/src/graphql/rooms.ts
index 1c2120fb0..7612641f3 100644
--- a/backend/src/graphql/rooms.ts
+++ b/backend/src/graphql/rooms.ts
@@ -2,26 +2,14 @@ import gql from 'graphql-tag'
export const createRoomMutation = () => {
return gql`
- mutation (
- $userId: ID!
- ) {
- CreateRoom(
- userId: $userId
- ) {
- id
- roomId
- }
- }
- `
-}
-
-export const roomQuery = () => {
- return gql`
- query {
- Room {
+ mutation ($userId: ID!) {
+ CreateRoom(userId: $userId) {
id
roomId
roomName
+ lastMessageAt
+ unreadCount
+ #avatar
users {
_id
id
@@ -34,3 +22,46 @@ export const roomQuery = () => {
}
`
}
+
+export const roomQuery = () => {
+ return gql`
+ query Room($first: Int, $offset: Int, $id: ID) {
+ Room(first: $first, offset: $offset, id: $id, orderBy: lastMessageAt_desc) {
+ id
+ roomId
+ roomName
+ avatar
+ lastMessageAt
+ unreadCount
+ lastMessage {
+ _id
+ id
+ content
+ senderId
+ username
+ avatar
+ date
+ saved
+ distributed
+ seen
+ }
+ users {
+ _id
+ id
+ name
+ avatar {
+ url
+ }
+ }
+ }
+ }
+ `
+}
+
+export const unreadRoomsQuery = () => {
+ return gql`
+ query {
+ UnreadRooms
+ }
+ `
+}
diff --git a/backend/src/helpers/walkRecursive.ts b/backend/src/helpers/walkRecursive.ts
index f560cf9cb..f3be67575 100644
--- a/backend/src/helpers/walkRecursive.ts
+++ b/backend/src/helpers/walkRecursive.ts
@@ -9,10 +9,9 @@ function walkRecursive(data, fields, fieldName, callback, _key?) {
if (!Array.isArray(fields)) {
throw new Error('please provide an fields array for the walkRecursive helper')
}
- if (data && typeof data === 'string' && fields.includes(_key)) {
- // well we found what we searched for, lets replace the value with our callback result
- const key = _key.split('!')
- if (key.length === 1 || key[1] !== fieldName) data = callback(data, key[0])
+ const fieldDef = fields.find((f) => f.field === _key)
+ if (data && typeof data === 'string' && fieldDef) {
+ if (!fieldDef.excludes?.includes(fieldName)) data = callback(data, _key)
} else if (data && Array.isArray(data)) {
// go into the rabbit hole and dig through that array
data.forEach((res, index) => {
diff --git a/backend/src/middleware/chatMiddleware.ts b/backend/src/middleware/chatMiddleware.ts
new file mode 100644
index 000000000..8ae252e13
--- /dev/null
+++ b/backend/src/middleware/chatMiddleware.ts
@@ -0,0 +1,60 @@
+import { isArray } from 'lodash'
+
+const setRoomProps = (room) => {
+ if (room.users) {
+ room.users.forEach((user) => {
+ user._id = user.id
+ })
+ }
+ if (room.lastMessage) {
+ room.lastMessage._id = room.lastMessage.id
+ }
+}
+
+const setMessageProps = (message, context) => {
+ message._id = message.id
+ if (message.senderId !== context.user.id) {
+ message.distributed = true
+ }
+}
+
+const roomProperties = async (resolve, root, args, context, info) => {
+ const resolved = await resolve(root, args, context, info)
+ if (resolved) {
+ if (isArray(resolved)) {
+ resolved.forEach((room) => {
+ setRoomProps(room)
+ })
+ } else {
+ setRoomProps(resolved)
+ }
+ }
+ return resolved
+}
+
+const messageProperties = async (resolve, root, args, context, info) => {
+ const resolved = await resolve(root, args, context, info)
+ if (resolved) {
+ if (isArray(resolved)) {
+ resolved.forEach((message) => {
+ setMessageProps(message, context)
+ })
+ } else {
+ setMessageProps(resolved, context)
+ }
+ }
+ return resolved
+}
+
+export default {
+ Query: {
+ Room: roomProperties,
+ Message: messageProperties,
+ },
+ Mutation: {
+ CreateRoom: roomProperties,
+ },
+ Subscription: {
+ chatMessageAdded: messageProperties,
+ },
+}
diff --git a/backend/src/middleware/helpers/cleanHtml.ts b/backend/src/middleware/helpers/cleanHtml.ts
index ac71f6bdc..84497760d 100644
--- a/backend/src/middleware/helpers/cleanHtml.ts
+++ b/backend/src/middleware/helpers/cleanHtml.ts
@@ -30,6 +30,7 @@ const standardSanitizeHtmlOptions = {
'strike',
'span',
'blockquote',
+ 'usertag',
],
allowedAttributes: {
a: ['href', 'class', 'target', 'data-*', 'contenteditable'],
diff --git a/backend/src/middleware/index.ts b/backend/src/middleware/index.ts
index 813bbe9a7..08c872db7 100644
--- a/backend/src/middleware/index.ts
+++ b/backend/src/middleware/index.ts
@@ -14,6 +14,7 @@ import login from './login/loginMiddleware'
import sentry from './sentryMiddleware'
import languages from './languages/languages'
import userInteractions from './userInteractions'
+import chatMiddleware from './chatMiddleware'
export default (schema) => {
const middlewares = {
@@ -31,6 +32,7 @@ export default (schema) => {
orderBy,
languages,
userInteractions,
+ chatMiddleware,
}
let order = [
@@ -49,6 +51,7 @@ export default (schema) => {
'softDelete',
'includedFields',
'orderBy',
+ 'chatMiddleware',
]
// add permisions middleware at the first position (unless we're seeding)
diff --git a/backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.js b/backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.ts
similarity index 100%
rename from backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.js
rename to backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.ts
diff --git a/backend/src/middleware/notifications/mentions/extractMentionedUsers.ts b/backend/src/middleware/notifications/mentions/extractMentionedUsers.ts
index e7e23ace7..ccee18af9 100644
--- a/backend/src/middleware/notifications/mentions/extractMentionedUsers.ts
+++ b/backend/src/middleware/notifications/mentions/extractMentionedUsers.ts
@@ -1,6 +1,6 @@
import cheerio from 'cheerio'
-export default (content) => {
+export default (content?) => {
if (!content) return []
const $ = cheerio.load(content)
const userIds = $('a.mention[data-mention-id]')
diff --git a/backend/src/middleware/notifications/notificationsMiddleware.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.spec.ts
index f0857ee29..6cec5c940 100644
--- a/backend/src/middleware/notifications/notificationsMiddleware.spec.ts
+++ b/backend/src/middleware/notifications/notificationsMiddleware.spec.ts
@@ -50,7 +50,7 @@ beforeAll(async () => {
context: () => {
return {
user: authenticatedUser,
- neode: neode,
+ neode,
driver,
}
},
diff --git a/backend/src/middleware/notifications/notificationsMiddleware.ts b/backend/src/middleware/notifications/notificationsMiddleware.ts
index 7922af90c..706e46c51 100644
--- a/backend/src/middleware/notifications/notificationsMiddleware.ts
+++ b/backend/src/middleware/notifications/notificationsMiddleware.ts
@@ -140,16 +140,18 @@ const postAuthorOfComment = async (commentId, { context }) => {
const notifyOwnersOfGroup = async (groupId, userId, reason, context) => {
const cypher = `
+ MATCH (user:User { id: $userId })
MATCH (group:Group { id: $groupId })<-[membership:MEMBER_OF]-(owner:User)
WHERE membership.role = 'owner'
- WITH owner, group
+ WITH owner, group, user, membership
MERGE (group)-[notification:NOTIFIED {reason: $reason}]->(owner)
- WITH group, owner, notification
+ WITH group, owner, notification, user, membership
SET notification.read = FALSE
SET notification.createdAt = COALESCE(notification.createdAt, toString(datetime()))
SET notification.updatedAt = toString(datetime())
SET notification.relatedUserId = $userId
- RETURN notification {.*, from: group, to: properties(owner)}
+ WITH owner, group { __typename: 'Group', .*, myRole: membership.roleInGroup } AS finalGroup, user, notification
+ RETURN notification {.*, from: finalGroup, to: properties(owner), relatedUser: properties(user) }
`
const session = context.driver.session()
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
@@ -173,16 +175,20 @@ const notifyOwnersOfGroup = async (groupId, userId, reason, context) => {
const notifyMemberOfGroup = async (groupId, userId, reason, context) => {
const { user: owner } = context
const cypher = `
+ MATCH (owner:User { id: $ownerId })
MATCH (user:User { id: $userId })
MATCH (group:Group { id: $groupId })
- WITH user, group
+ OPTIONAL MATCH (user)-[membership:MEMBER_OF]->(group)
+ WITH user, group, owner, membership
MERGE (group)-[notification:NOTIFIED {reason: $reason}]->(user)
- WITH group, user, notification
+ WITH group, user, notification, owner, membership
SET notification.read = FALSE
SET notification.createdAt = COALESCE(notification.createdAt, toString(datetime()))
SET notification.updatedAt = toString(datetime())
SET notification.relatedUserId = $ownerId
- RETURN notification {.*, from: group, to: properties(user)}
+ WITH group { __typename: 'Group', .*, myRole: membership.roleInGroup } AS finalGroup,
+ notification, user, owner
+ RETURN notification {.*, from: finalGroup, to: properties(user), relatedUser: properties(owner) }
`
const session = context.driver.session()
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
@@ -242,7 +248,7 @@ const notifyUsersOfMention = async (label, id, idsOfUsers, reason, context) => {
SET notification.read = FALSE
SET notification.createdAt = COALESCE(notification.createdAt, toString(datetime()))
SET notification.updatedAt = toString(datetime())
- RETURN notification {.*, from: finalResource, to: properties(user)}
+ RETURN notification {.*, from: finalResource, to: properties(user), relatedUser: properties(user) }
`
const session = context.driver.session()
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
@@ -276,9 +282,14 @@ const notifyUsersOfComment = async (label, commentId, postAuthorId, reason, cont
SET notification.read = FALSE
SET notification.createdAt = COALESCE(notification.createdAt, toString(datetime()))
SET notification.updatedAt = toString(datetime())
- WITH notification, postAuthor, post,
+ WITH notification, postAuthor, post, commenter,
comment {.*, __typename: labels(comment)[0], author: properties(commenter), post: post {.*, author: properties(postAuthor) } } AS finalResource
- RETURN notification {.*, from: finalResource, to: properties(postAuthor)}
+ RETURN notification {
+ .*,
+ from: finalResource,
+ to: properties(postAuthor),
+ relatedUser: properties(commenter)
+ }
`,
{ commentId, postAuthorId, reason },
)
diff --git a/backend/src/middleware/permissionsMiddleware.ts b/backend/src/middleware/permissionsMiddleware.ts
index 81ba93e3c..f87f4b079 100644
--- a/backend/src/middleware/permissionsMiddleware.ts
+++ b/backend/src/middleware/permissionsMiddleware.ts
@@ -408,6 +408,7 @@ export default shield(
getInviteCode: isAuthenticated, // and inviteRegistration
Room: isAuthenticated,
Message: isAuthenticated,
+ UnreadRooms: isAuthenticated,
},
Mutation: {
'*': deny,
@@ -463,6 +464,7 @@ export default shield(
saveCategorySettings: isAuthenticated,
CreateRoom: isAuthenticated,
CreateMessage: isAuthenticated,
+ MarkMessagesAsSeen: isAuthenticated,
},
User: {
email: or(isMyOwn, isAdmin),
diff --git a/backend/src/middleware/slugify/uniqueSlug.spec.ts b/backend/src/middleware/slugify/uniqueSlug.spec.ts
index d002eae03..659a439c2 100644
--- a/backend/src/middleware/slugify/uniqueSlug.spec.ts
+++ b/backend/src/middleware/slugify/uniqueSlug.spec.ts
@@ -1,22 +1,22 @@
import uniqueSlug from './uniqueSlug'
describe('uniqueSlug', () => {
- it('slugifies given string', () => {
+ it('slugifies given string', async () => {
const string = 'Hello World'
const isUnique = jest.fn().mockResolvedValue(true)
- expect(uniqueSlug(string, isUnique)).resolves.toEqual('hello-world')
+ await expect(uniqueSlug(string, isUnique)).resolves.toEqual('hello-world')
})
- it('increments slugified string until unique', () => {
+ it('increments slugified string until unique', async () => {
const string = 'Hello World'
const isUnique = jest.fn().mockResolvedValueOnce(false).mockResolvedValueOnce(true)
- expect(uniqueSlug(string, isUnique)).resolves.toEqual('hello-world-1')
+ await expect(uniqueSlug(string, isUnique)).resolves.toEqual('hello-world-1')
})
- it('slugify null string', () => {
+ it('slugify null string', async () => {
const string = null
const isUnique = jest.fn().mockResolvedValue(true)
- expect(uniqueSlug(string, isUnique)).resolves.toEqual('anonymous')
+ await expect(uniqueSlug(string, isUnique)).resolves.toEqual('anonymous')
})
it('Converts umlaut to a two letter equivalent', async () => {
diff --git a/backend/src/middleware/xssMiddleware.ts b/backend/src/middleware/xssMiddleware.ts
index ede0cc199..c10997e8d 100644
--- a/backend/src/middleware/xssMiddleware.ts
+++ b/backend/src/middleware/xssMiddleware.ts
@@ -3,11 +3,11 @@ import { cleanHtml } from '../middleware/helpers/cleanHtml'
// exclamation mark separetes field names, that should not be sanitized
const fields = [
- 'content',
- 'contentExcerpt',
- 'reasonDescription',
- 'description!embed',
- 'descriptionExcerpt',
+ { field: 'content', excludes: ['CreateMessage', 'Message'] },
+ { field: 'contentExcerpt' },
+ { field: 'reasonDescription' },
+ { field: 'description', excludes: ['embed'] },
+ { field: 'descriptionExcerpt' },
]
export default {
diff --git a/backend/src/models/index.ts b/backend/src/models/index.ts
index c75ad31ef..f7d338684 100644
--- a/backend/src/models/index.ts
+++ b/backend/src/models/index.ts
@@ -1,38 +1,29 @@
// NOTE: We cannot use `fs` here to clean up the code. Cypress breaks on any npm
// module that is not browser-compatible. Node's `fs` module is server-side only
-declare var Cypress: any | undefined
+declare let Cypress: any | undefined
export default {
Image: typeof Cypress !== 'undefined' ? require('./Image') : require('./Image').default,
Badge: typeof Cypress !== 'undefined' ? require('./Badge') : require('./Badge').default,
User: typeof Cypress !== 'undefined' ? require('./User') : require('./User').default,
Group: typeof Cypress !== 'undefined' ? require('./Group') : require('./Group').default,
EmailAddress:
- typeof Cypress !== 'undefined'
- ? require('./EmailAddress')
- : require('./EmailAddress').default,
+ typeof Cypress !== 'undefined' ? require('./EmailAddress') : require('./EmailAddress').default,
UnverifiedEmailAddress:
typeof Cypress !== 'undefined'
? require('./UnverifiedEmailAddress')
: require('./UnverifiedEmailAddress').default,
SocialMedia:
- typeof Cypress !== 'undefined'
- ? require('./SocialMedia')
- : require('./SocialMedia').default,
+ typeof Cypress !== 'undefined' ? require('./SocialMedia') : require('./SocialMedia').default,
Post: typeof Cypress !== 'undefined' ? require('./Post') : require('./Post').default,
- Comment:
- typeof Cypress !== 'undefined' ? require('./Comment') : require('./Comment').default,
- Category:
- typeof Cypress !== 'undefined' ? require('./Category') : require('./Category').default,
+ Comment: typeof Cypress !== 'undefined' ? require('./Comment') : require('./Comment').default,
+ Category: typeof Cypress !== 'undefined' ? require('./Category') : require('./Category').default,
Tag: typeof Cypress !== 'undefined' ? require('./Tag') : require('./Tag').default,
- Location:
- typeof Cypress !== 'undefined' ? require('./Location') : require('./Location').default,
+ Location: typeof Cypress !== 'undefined' ? require('./Location') : require('./Location').default,
Donations:
typeof Cypress !== 'undefined' ? require('./Donations') : require('./Donations').default,
Report: typeof Cypress !== 'undefined' ? require('./Report') : require('./Report').default,
Migration:
typeof Cypress !== 'undefined' ? require('./Migration') : require('./Migration').default,
InviteCode:
- typeof Cypress !== 'undefined'
- ? require('./InviteCode')
- : require('./InviteCode').default,
+ typeof Cypress !== 'undefined' ? require('./InviteCode') : require('./InviteCode').default,
}
diff --git a/backend/src/schema/resolvers/images/images.spec.ts b/backend/src/schema/resolvers/images/images.spec.ts
index b14c59f28..d46972ce0 100644
--- a/backend/src/schema/resolvers/images/images.spec.ts
+++ b/backend/src/schema/resolvers/images/images.spec.ts
@@ -170,6 +170,7 @@ describe('mergeImage', () => {
})
})
+ // eslint-disable-next-line jest/no-disabled-tests
it.skip('automatically creates different image sizes', async () => {
await expect(
mergeImage(post, 'HERO_IMAGE', imageInput, { uploadCallback, deleteCallback }),
diff --git a/backend/src/schema/resolvers/messages.spec.ts b/backend/src/schema/resolvers/messages.spec.ts
index 3ee905be9..83d9fdc6b 100644
--- a/backend/src/schema/resolvers/messages.spec.ts
+++ b/backend/src/schema/resolvers/messages.spec.ts
@@ -1,13 +1,15 @@
import { createTestClient } from 'apollo-server-testing'
import Factory, { cleanDatabase } from '../../db/factories'
import { getNeode, getDriver } from '../../db/neo4j'
-import { createRoomMutation } from '../../graphql/rooms'
-import { createMessageMutation, messageQuery } from '../../graphql/messages'
-import createServer from '../../server'
+import { createRoomMutation, roomQuery } from '../../graphql/rooms'
+import { createMessageMutation, messageQuery, markMessagesAsSeen } from '../../graphql/messages'
+import createServer, { pubsub } from '../../server'
const driver = getDriver()
const neode = getNeode()
+const pubsubSpy = jest.spyOn(pubsub, 'publish')
+
let query
let mutate
let authenticatedUser
@@ -22,6 +24,9 @@ beforeAll(async () => {
driver,
neode,
user: authenticatedUser,
+ cypherParams: {
+ currentUserId: authenticatedUser ? authenticatedUser.id : null,
+ },
}
},
})
@@ -34,43 +39,44 @@ afterAll(async () => {
driver.close()
})
-
describe('Message', () => {
let roomId: string
beforeAll(async () => {
- [chattingUser, otherChattingUser, notChattingUser] = await Promise.all([
- Factory.build(
- 'user',
- {
- id: 'chatting-user',
- name: 'Chatting User',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'other-chatting-user',
- name: 'Other Chatting User',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'not-chatting-user',
- name: 'Not Chatting User',
- },
- ),
+ ;[chattingUser, otherChattingUser, notChattingUser] = await Promise.all([
+ Factory.build('user', {
+ id: 'chatting-user',
+ name: 'Chatting User',
+ }),
+ Factory.build('user', {
+ id: 'other-chatting-user',
+ name: 'Other Chatting User',
+ }),
+ Factory.build('user', {
+ id: 'not-chatting-user',
+ name: 'Not Chatting User',
+ }),
])
})
describe('create message', () => {
+ beforeEach(() => {
+ jest.clearAllMocks()
+ })
+
describe('unauthenticated', () => {
it('throws authorization error', async () => {
- await expect(mutate({ mutation: createMessageMutation(), variables: {
- roomId: 'some-id', content: 'Some bla bla bla', } })).resolves.toMatchObject({
- errors: [{ message: 'Not Authorized!' }],
- })
+ await expect(
+ mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: 'some-id',
+ content: 'Some bla bla bla',
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [{ message: 'Not Authorized!' }],
+ })
})
})
@@ -80,14 +86,22 @@ describe('Message', () => {
})
describe('room does not exist', () => {
- it('returns null', async () => {
- await expect(mutate({ mutation: createMessageMutation(), variables: {
- roomId: 'some-id', content: 'Some bla bla bla', } })).resolves.toMatchObject({
- errors: undefined,
- data: {
- CreateMessage: null,
+ it('returns null and does not publish subscription', async () => {
+ await expect(
+ mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: 'some-id',
+ content: 'Some bla bla bla',
},
- })
+ }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ CreateMessage: null,
+ },
+ })
+ expect(pubsubSpy).not.toBeCalled()
})
})
@@ -103,21 +117,107 @@ describe('Message', () => {
})
describe('user chats in room', () => {
- it('returns the message', async () => {
- await expect(mutate({
- mutation: createMessageMutation(),
- variables: {
- roomId,
+ it('returns the message and publishes subscriptions', async () => {
+ await expect(
+ mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId,
+ content: 'Some nice message to other chatting user',
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ CreateMessage: {
+ id: expect.any(String),
+ content: 'Some nice message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ saved: true,
+ distributed: false,
+ seen: false,
+ },
+ },
+ })
+ expect(pubsubSpy).toBeCalledWith('ROOM_COUNT_UPDATED', {
+ roomCountUpdated: '1',
+ userId: 'other-chatting-user',
+ })
+ expect(pubsubSpy).toBeCalledWith('CHAT_MESSAGE_ADDED', {
+ chatMessageAdded: expect.objectContaining({
+ id: expect.any(String),
content: 'Some nice message to other chatting user',
- } })).resolves.toMatchObject({
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ saved: true,
+ distributed: false,
+ seen: false,
+ }),
+ userId: 'other-chatting-user',
+ })
+ })
+
+ describe('room is updated as well', () => {
+ it('has last message set', async () => {
+ const result = await query({ query: roomQuery() })
+ await expect(result).toMatchObject({
errors: undefined,
data: {
- CreateMessage: {
- id: expect.any(String),
- content: 'Some nice message to other chatting user',
- },
+ Room: [
+ expect.objectContaining({
+ lastMessageAt: expect.any(String),
+ unreadCount: 0,
+ lastMessage: expect.objectContaining({
+ _id: result.data.Room[0].lastMessage.id,
+ id: expect.any(String),
+ content: 'Some nice message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ saved: true,
+ distributed: false,
+ seen: false,
+ }),
+ }),
+ ],
},
})
+ })
+ })
+
+ describe('unread count for other user', () => {
+ it('has unread count = 1', async () => {
+ authenticatedUser = await otherChattingUser.toJson()
+ await expect(query({ query: roomQuery() })).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ Room: [
+ expect.objectContaining({
+ lastMessageAt: expect.any(String),
+ unreadCount: 1,
+ lastMessage: expect.objectContaining({
+ _id: expect.any(String),
+ id: expect.any(String),
+ content: 'Some nice message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ saved: true,
+ distributed: false,
+ seen: false,
+ }),
+ }),
+ ],
+ },
+ })
+ })
})
})
@@ -125,19 +225,22 @@ describe('Message', () => {
beforeAll(async () => {
authenticatedUser = await notChattingUser.toJson()
})
-
+
it('returns null', async () => {
- await expect(mutate({
- mutation: createMessageMutation(),
- variables: {
- roomId,
- content: 'I have no access to this room!',
- } })).resolves.toMatchObject({
- errors: undefined,
- data: {
- CreateMessage: null,
+ await expect(
+ mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId,
+ content: 'I have no access to this room!',
},
- })
+ }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ CreateMessage: null,
+ },
+ })
})
})
})
@@ -151,14 +254,17 @@ describe('Message', () => {
})
it('throws authorization error', async () => {
- await expect(query({
- query: messageQuery(),
- variables: {
- roomId: 'some-id' }
- })).resolves.toMatchObject({
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId: 'some-id',
+ },
+ }),
+ ).resolves.toMatchObject({
errors: [{ message: 'Not Authorized!' }],
})
- })
+ })
})
describe('authenticated', () => {
@@ -168,12 +274,14 @@ describe('Message', () => {
describe('room does not exists', () => {
it('returns null', async () => {
- await expect(query({
- query: messageQuery(),
- variables: {
- roomId: 'some-id'
- },
- })).resolves.toMatchObject({
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId: 'some-id',
+ },
+ }),
+ ).resolves.toMatchObject({
errors: undefined,
data: {
Message: [],
@@ -193,15 +301,21 @@ describe('Message', () => {
expect(result).toMatchObject({
errors: undefined,
data: {
- Message: [{
- id: expect.any(String),
- _id: result.data.Message[0].id,
- content: 'Some nice message to other chatting user',
- senderId: 'chatting-user',
- username: 'Chatting User',
- avatar: expect.any(String),
- date: expect.any(String),
- }],
+ Message: [
+ {
+ id: expect.any(String),
+ _id: result.data.Message[0].id,
+ indexId: 0,
+ content: 'Some nice message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ saved: true,
+ distributed: true,
+ seen: false,
+ },
+ ],
},
})
})
@@ -213,7 +327,7 @@ describe('Message', () => {
variables: {
roomId,
content: 'A nice response message to chatting user',
- }
+ },
})
authenticatedUser = await chattingUser.toJson()
await mutate({
@@ -221,49 +335,126 @@ describe('Message', () => {
variables: {
roomId,
content: 'And another nice message to other chatting user',
- }
- })
- })
-
- it('returns the messages', async () => {
- await expect(query({
- query: messageQuery(),
- variables: {
- roomId,
},
- })).resolves.toMatchObject({
+ })
+ })
+
+ it('returns the messages', async () => {
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId,
+ },
+ }),
+ ).resolves.toMatchObject({
errors: undefined,
data: {
Message: [
- {
+ expect.objectContaining({
id: expect.any(String),
+ indexId: 0,
content: 'Some nice message to other chatting user',
senderId: 'chatting-user',
username: 'Chatting User',
avatar: expect.any(String),
date: expect.any(String),
- },
- {
+ saved: true,
+ distributed: true,
+ seen: false,
+ }),
+ expect.objectContaining({
id: expect.any(String),
+ indexId: 1,
content: 'A nice response message to chatting user',
senderId: 'other-chatting-user',
username: 'Other Chatting User',
avatar: expect.any(String),
date: expect.any(String),
- },
- {
+ saved: true,
+ distributed: true,
+ seen: false,
+ }),
+ expect.objectContaining({
id: expect.any(String),
+ indexId: 2,
content: 'And another nice message to other chatting user',
senderId: 'chatting-user',
username: 'Chatting User',
avatar: expect.any(String),
date: expect.any(String),
- },
+ saved: true,
+ distributed: false,
+ seen: false,
+ }),
],
},
})
})
- })
+
+ it('returns the messages paginated', async () => {
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId,
+ first: 2,
+ offset: 0,
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ Message: [
+ expect.objectContaining({
+ id: expect.any(String),
+ indexId: 1,
+ content: 'A nice response message to chatting user',
+ senderId: 'other-chatting-user',
+ username: 'Other Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ }),
+ expect.objectContaining({
+ id: expect.any(String),
+ indexId: 2,
+ content: 'And another nice message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ }),
+ ],
+ },
+ })
+
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId,
+ first: 2,
+ offset: 2,
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ Message: [
+ expect.objectContaining({
+ id: expect.any(String),
+ indexId: 0,
+ content: 'Some nice message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ }),
+ ],
+ },
+ })
+ })
+ })
})
describe('room exists, authenticated user not in room', () => {
@@ -272,19 +463,91 @@ describe('Message', () => {
})
it('returns null', async () => {
- await expect(query({
- query: messageQuery(),
- variables: {
- roomId,
- },
- })).resolves.toMatchObject({
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId,
+ },
+ }),
+ ).resolves.toMatchObject({
errors: undefined,
data: {
Message: [],
},
})
})
- })
+ })
+ })
+ })
+
+ describe('marks massges as seen', () => {
+ describe('unauthenticated', () => {
+ beforeAll(() => {
+ authenticatedUser = null
+ })
+
+ it('throws authorization error', async () => {
+ await expect(
+ mutate({
+ mutation: markMessagesAsSeen(),
+ variables: {
+ messageIds: ['some-id'],
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [{ message: 'Not Authorized!' }],
+ })
+ })
+ })
+
+ describe('authenticated', () => {
+ const messageIds: string[] = []
+ beforeAll(async () => {
+ authenticatedUser = await otherChattingUser.toJson()
+ const msgs = await query({
+ query: messageQuery(),
+ variables: {
+ roomId,
+ },
+ })
+ msgs.data.Message.forEach((m) => messageIds.push(m.id))
+ })
+
+ it('returns true', async () => {
+ await expect(
+ mutate({
+ mutation: markMessagesAsSeen(),
+ variables: {
+ messageIds,
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ MarkMessagesAsSeen: true,
+ },
+ })
+ })
+
+ it('has seen prop set to true', async () => {
+ await expect(
+ query({
+ query: messageQuery(),
+ variables: {
+ roomId,
+ },
+ }),
+ ).resolves.toMatchObject({
+ data: {
+ Message: [
+ expect.objectContaining({ seen: true }),
+ expect.objectContaining({ seen: false }),
+ expect.objectContaining({ seen: true }),
+ ],
+ },
+ })
+ })
})
})
})
diff --git a/backend/src/schema/resolvers/messages.ts b/backend/src/schema/resolvers/messages.ts
index 0be0298d1..c1381045f 100644
--- a/backend/src/schema/resolvers/messages.ts
+++ b/backend/src/schema/resolvers/messages.ts
@@ -1,7 +1,36 @@
import { neo4jgraphql } from 'neo4j-graphql-js'
import Resolver from './helpers/Resolver'
+import { getUnreadRoomsCount } from './rooms'
+import { pubsub, ROOM_COUNT_UPDATED, CHAT_MESSAGE_ADDED } from '../../server'
+import { withFilter } from 'graphql-subscriptions'
+
+const setMessagesAsDistributed = async (undistributedMessagesIds, session) => {
+ return session.writeTransaction(async (transaction) => {
+ const setDistributedCypher = `
+ MATCH (m:Message) WHERE m.id IN $undistributedMessagesIds
+ SET m.distributed = true
+ RETURN m { .* }
+ `
+ const setDistributedTxResponse = await transaction.run(setDistributedCypher, {
+ undistributedMessagesIds,
+ })
+ const messages = await setDistributedTxResponse.records.map((record) => record.get('m'))
+ return messages
+ })
+}
+
export default {
+ Subscription: {
+ chatMessageAdded: {
+ subscribe: withFilter(
+ () => pubsub.asyncIterator(CHAT_MESSAGE_ADDED),
+ (payload, variables, context) => {
+ return payload.userId === context.user?.id
+ },
+ ),
+ },
+ },
Query: {
Message: async (object, params, context, resolveInfo) => {
const { roomId } = params
@@ -13,47 +42,121 @@ export default {
id: context.user.id,
},
}
+
const resolved = await neo4jgraphql(object, params, context, resolveInfo)
+
if (resolved) {
- resolved.forEach((message) => {
- message._id = message.id
- })
+ const undistributedMessagesIds = resolved
+ .filter((msg) => !msg.distributed && msg.senderId !== context.user.id)
+ .map((msg) => msg.id)
+ const session = context.driver.session()
+ try {
+ if (undistributedMessagesIds.length > 0) {
+ await setMessagesAsDistributed(undistributedMessagesIds, session)
+ }
+ } finally {
+ session.close()
+ }
+ // send subscription to author to updated the messages
}
- return resolved
+ return resolved.reverse()
},
},
Mutation: {
CreateMessage: async (_parent, params, context, _resolveInfo) => {
const { roomId, content } = params
- const { user: { id: currentUserId } } = context
+ const {
+ user: { id: currentUserId },
+ } = context
const session = context.driver.session()
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
const createMessageCypher = `
MATCH (currentUser:User { id: $currentUserId })-[:CHATS_IN]->(room:Room { id: $roomId })
+ OPTIONAL MATCH (currentUser)-[:AVATAR_IMAGE]->(image:Image)
+ OPTIONAL MATCH (m:Message)-[:INSIDE]->(room)
+ OPTIONAL MATCH (room)<-[:CHATS_IN]-(recipientUser:User)
+ WHERE NOT recipientUser.id = $currentUserId
+ WITH MAX(m.indexId) as maxIndex, room, currentUser, image, recipientUser
CREATE (currentUser)-[:CREATED]->(message:Message {
createdAt: toString(datetime()),
id: apoc.create.uuid(),
- content: $content
+ indexId: CASE WHEN maxIndex IS NOT NULL THEN maxIndex + 1 ELSE 0 END,
+ content: LEFT($content,2000),
+ saved: true,
+ distributed: false,
+ seen: false
})-[:INSIDE]->(room)
- RETURN message { .* }
+ SET room.lastMessageAt = toString(datetime())
+ RETURN message {
+ .*,
+ indexId: toString(message.indexId),
+ recipientId: recipientUser.id,
+ senderId: currentUser.id,
+ username: currentUser.name,
+ avatar: image.url,
+ date: message.createdAt
+ }
`
- const createMessageTxResponse = await transaction.run(
- createMessageCypher,
- { currentUserId, roomId, content }
- )
+ const createMessageTxResponse = await transaction.run(createMessageCypher, {
+ currentUserId,
+ roomId,
+ content,
+ })
+
const [message] = await createMessageTxResponse.records.map((record) =>
- record.get('message'),
- )
+ record.get('message'),
+ )
+
return message
})
try {
const message = await writeTxResultPromise
+ if (message) {
+ const roomCountUpdated = await getUnreadRoomsCount(message.recipientId, session)
+
+ // send subscriptions
+ void pubsub.publish(ROOM_COUNT_UPDATED, {
+ roomCountUpdated,
+ userId: message.recipientId,
+ })
+ void pubsub.publish(CHAT_MESSAGE_ADDED, {
+ chatMessageAdded: message,
+ userId: message.recipientId,
+ })
+ }
+
return message
} catch (error) {
throw new Error(error)
} finally {
session.close()
- }
+ }
+ },
+ MarkMessagesAsSeen: async (_parent, params, context, _resolveInfo) => {
+ const { messageIds } = params
+ const currentUserId = context.user.id
+ const session = context.driver.session()
+ const writeTxResultPromise = session.writeTransaction(async (transaction) => {
+ const setSeenCypher = `
+ MATCH (m:Message)<-[:CREATED]-(user:User)
+ WHERE m.id IN $messageIds AND NOT user.id = $currentUserId
+ SET m.seen = true
+ RETURN m { .* }
+ `
+ const setSeenTxResponse = await transaction.run(setSeenCypher, {
+ messageIds,
+ currentUserId,
+ })
+ const messages = await setSeenTxResponse.records.map((record) => record.get('m'))
+ return messages
+ })
+ try {
+ await writeTxResultPromise
+ // send subscription to author to updated the messages
+ return true
+ } finally {
+ session.close()
+ }
},
},
Message: {
@@ -61,7 +164,7 @@ export default {
hasOne: {
author: '<-[:CREATED]-(related:User)',
room: '-[:INSIDE]->(related:Room)',
- }
+ },
}),
- }
+ },
}
diff --git a/backend/src/schema/resolvers/notifications.spec.ts b/backend/src/schema/resolvers/notifications.spec.ts
index 9deaea457..60539d77f 100644
--- a/backend/src/schema/resolvers/notifications.spec.ts
+++ b/backend/src/schema/resolvers/notifications.spec.ts
@@ -238,7 +238,7 @@ describe('given some notifications', () => {
variables: { ...variables, read: false },
})
await expect(response).toMatchObject(expected)
- await expect(response.data.notifications.length).toEqual(2) // double-check
+ await expect(response.data.notifications).toHaveLength(2) // double-check
})
describe('if a resource gets deleted', () => {
diff --git a/backend/src/schema/resolvers/notifications.ts b/backend/src/schema/resolvers/notifications.ts
index e427de227..6a3e232cc 100644
--- a/backend/src/schema/resolvers/notifications.ts
+++ b/backend/src/schema/resolvers/notifications.ts
@@ -7,8 +7,8 @@ export default {
notificationAdded: {
subscribe: withFilter(
() => pubsub.asyncIterator(NOTIFICATION_ADDED),
- (payload, variables) => {
- return payload.notificationAdded.to.id === variables.userId
+ (payload, variables, context) => {
+ return payload.notificationAdded.to.id === context.user?.id
},
),
},
diff --git a/backend/src/schema/resolvers/posts.spec.ts b/backend/src/schema/resolvers/posts.spec.ts
index 87d09e262..7a549449f 100644
--- a/backend/src/schema/resolvers/posts.spec.ts
+++ b/backend/src/schema/resolvers/posts.spec.ts
@@ -907,6 +907,7 @@ describe('UpdatePost', () => {
})
})
+ // eslint-disable-next-line jest/no-disabled-tests
describe.skip('params.image', () => {
describe('is object', () => {
beforeEach(() => {
diff --git a/backend/src/schema/resolvers/registration.ts b/backend/src/schema/resolvers/registration.ts
index c988acfb2..8d5aac346 100644
--- a/backend/src/schema/resolvers/registration.ts
+++ b/backend/src/schema/resolvers/registration.ts
@@ -28,7 +28,7 @@ export default {
},
SignupVerification: async (_parent, args, context) => {
const { termsAndConditionsAgreedVersion } = args
- const regEx = new RegExp(/^[0-9]+\.[0-9]+\.[0-9]+$/g)
+ const regEx = /^[0-9]+\.[0-9]+\.[0-9]+$/g
if (!regEx.test(termsAndConditionsAgreedVersion)) {
throw new UserInputError('Invalid version format!')
}
diff --git a/backend/src/schema/resolvers/reports.spec.ts b/backend/src/schema/resolvers/reports.spec.ts
index 96ef07d03..bc47778c1 100644
--- a/backend/src/schema/resolvers/reports.spec.ts
+++ b/backend/src/schema/resolvers/reports.spec.ts
@@ -728,7 +728,7 @@ describe('file a report on a resource', () => {
describe('unauthenticated', () => {
it('throws authorization error', async () => {
authenticatedUser = null
- expect(query({ query: reportsQuery })).resolves.toMatchObject({
+ await expect(query({ query: reportsQuery })).resolves.toMatchObject({
data: { reports: null },
errors: [{ message: 'Not Authorized!' }],
})
@@ -738,7 +738,7 @@ describe('file a report on a resource', () => {
describe('authenticated', () => {
it('role "user" gets no reports', async () => {
authenticatedUser = await currentUser.toJson()
- expect(query({ query: reportsQuery })).resolves.toMatchObject({
+ await expect(query({ query: reportsQuery })).resolves.toMatchObject({
data: { reports: null },
errors: [{ message: 'Not Authorized!' }],
})
diff --git a/backend/src/schema/resolvers/rooms.spec.ts b/backend/src/schema/resolvers/rooms.spec.ts
index 945facd05..2e26dc1e3 100644
--- a/backend/src/schema/resolvers/rooms.spec.ts
+++ b/backend/src/schema/resolvers/rooms.spec.ts
@@ -1,7 +1,8 @@
import { createTestClient } from 'apollo-server-testing'
import Factory, { cleanDatabase } from '../../db/factories'
import { getNeode, getDriver } from '../../db/neo4j'
-import { createRoomMutation, roomQuery } from '../../graphql/rooms'
+import { createRoomMutation, roomQuery, unreadRoomsQuery } from '../../graphql/rooms'
+import { createMessageMutation } from '../../graphql/messages'
import createServer from '../../server'
const driver = getDriver()
@@ -21,6 +22,9 @@ beforeAll(async () => {
driver,
neode,
user: authenticatedUser,
+ cypherParams: {
+ currentUserId: authenticatedUser ? authenticatedUser.id : null,
+ },
}
},
})
@@ -34,57 +38,64 @@ afterAll(async () => {
})
describe('Room', () => {
+ let roomId: string
+
beforeAll(async () => {
- [chattingUser, otherChattingUser, notChattingUser] = await Promise.all([
- Factory.build(
- 'user',
- {
- id: 'chatting-user',
- name: 'Chatting User',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'other-chatting-user',
- name: 'Other Chatting User',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'not-chatting-user',
- name: 'Not Chatting User',
- },
- ),
+ ;[chattingUser, otherChattingUser, notChattingUser] = await Promise.all([
+ Factory.build('user', {
+ id: 'chatting-user',
+ name: 'Chatting User',
+ }),
+ Factory.build('user', {
+ id: 'other-chatting-user',
+ name: 'Other Chatting User',
+ }),
+ Factory.build('user', {
+ id: 'not-chatting-user',
+ name: 'Not Chatting User',
+ }),
+ Factory.build('user', {
+ id: 'second-chatting-user',
+ name: 'Second Chatting User',
+ }),
+ Factory.build('user', {
+ id: 'third-chatting-user',
+ name: 'Third Chatting User',
+ }),
])
})
describe('create room', () => {
describe('unauthenticated', () => {
it('throws authorization error', async () => {
- await expect(mutate({ mutation: createRoomMutation(), variables: {
- userId: 'some-id' } })).resolves.toMatchObject({
- errors: [{ message: 'Not Authorized!' }],
- })
+ await expect(
+ mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'some-id',
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [{ message: 'Not Authorized!' }],
+ })
})
})
describe('authenticated', () => {
- let roomId: string
-
beforeAll(async () => {
authenticatedUser = await chattingUser.toJson()
})
describe('user id does not exist', () => {
it('returns null', async () => {
- await expect(mutate({
- mutation: createRoomMutation(),
- variables: {
- userId: 'not-existing-user',
- },
- })).resolves.toMatchObject({
+ await expect(
+ mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'not-existing-user',
+ },
+ }),
+ ).resolves.toMatchObject({
errors: undefined,
data: {
CreateRoom: null,
@@ -92,7 +103,22 @@ describe('Room', () => {
})
})
})
-
+
+ describe('user id is self', () => {
+ it('throws error', async () => {
+ await expect(
+ mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'chatting-user',
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [{ message: 'Cannot create a room with self' }],
+ })
+ })
+ })
+
describe('user id exists', () => {
it('returns the id of the room', async () => {
const result = await mutate({
@@ -108,6 +134,26 @@ describe('Room', () => {
CreateRoom: {
id: expect.any(String),
roomId: result.data.CreateRoom.id,
+ roomName: 'Other Chatting User',
+ unreadCount: 0,
+ users: expect.arrayContaining([
+ {
+ _id: 'chatting-user',
+ id: 'chatting-user',
+ name: 'Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ },
+ {
+ _id: 'other-chatting-user',
+ id: 'other-chatting-user',
+ name: 'Other Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ },
+ ]),
},
},
})
@@ -116,12 +162,14 @@ describe('Room', () => {
describe('create room with same user id', () => {
it('returns the id of the room', async () => {
- await expect(mutate({
- mutation: createRoomMutation(),
- variables: {
- userId: 'other-chatting-user',
- },
- })).resolves.toMatchObject({
+ await expect(
+ mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'other-chatting-user',
+ },
+ }),
+ ).resolves.toMatchObject({
errors: undefined,
data: {
CreateRoom: {
@@ -130,7 +178,7 @@ describe('Room', () => {
},
})
})
- })
+ })
})
})
@@ -139,11 +187,11 @@ describe('Room', () => {
beforeAll(() => {
authenticatedUser = null
})
-
+
it('throws authorization error', async () => {
await expect(query({ query: roomQuery() })).resolves.toMatchObject({
- errors: [{ message: 'Not Authorized!' }],
- })
+ errors: [{ message: 'Not Authorized!' }],
+ })
})
})
@@ -194,7 +242,7 @@ describe('Room', () => {
})
it('returns the room', async () => {
- const result = await query({ query: roomQuery() })
+ const result = await query({ query: roomQuery() })
expect(result).toMatchObject({
errors: undefined,
data: {
@@ -203,6 +251,7 @@ describe('Room', () => {
id: expect.any(String),
roomId: result.data.Room[0].id,
roomName: 'Chatting User',
+ unreadCount: 0,
users: expect.arrayContaining([
{
_id: 'chatting-user',
@@ -241,7 +290,322 @@ describe('Room', () => {
},
})
})
- })
+ })
+ })
+ })
+
+ describe('unread rooms query', () => {
+ describe('unauthenticated', () => {
+ it('throws authorization error', async () => {
+ authenticatedUser = null
+ await expect(
+ query({
+ query: unreadRoomsQuery(),
+ }),
+ ).resolves.toMatchObject({
+ errors: [{ message: 'Not Authorized!' }],
+ })
+ })
+ })
+
+ describe('authenticated', () => {
+ let otherRoomId: string
+
+ beforeAll(async () => {
+ authenticatedUser = await chattingUser.toJson()
+ const result = await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'not-chatting-user',
+ },
+ })
+ otherRoomId = result.data.CreateRoom.roomId
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: otherRoomId,
+ content: 'Message to not chatting user',
+ },
+ })
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId,
+ content: '1st message to other chatting user',
+ },
+ })
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId,
+ content: '2nd message to other chatting user',
+ },
+ })
+ authenticatedUser = await otherChattingUser.toJson()
+ const result2 = await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'not-chatting-user',
+ },
+ })
+ otherRoomId = result2.data.CreateRoom.roomId
+ await mutate({
+ mutation: createMessageMutation(),
+ variables: {
+ roomId: otherRoomId,
+ content: 'Other message to not chatting user',
+ },
+ })
+ })
+
+ describe('as chatting user', () => {
+ it('has 0 unread rooms', async () => {
+ authenticatedUser = await chattingUser.toJson()
+ await expect(
+ query({
+ query: unreadRoomsQuery(),
+ }),
+ ).resolves.toMatchObject({
+ data: {
+ UnreadRooms: 0,
+ },
+ })
+ })
+ })
+
+ describe('as other chatting user', () => {
+ it('has 1 unread rooms', async () => {
+ authenticatedUser = await otherChattingUser.toJson()
+ await expect(
+ query({
+ query: unreadRoomsQuery(),
+ }),
+ ).resolves.toMatchObject({
+ data: {
+ UnreadRooms: 1,
+ },
+ })
+ })
+ })
+
+ describe('as not chatting user', () => {
+ it('has 2 unread rooms', async () => {
+ authenticatedUser = await notChattingUser.toJson()
+ await expect(
+ query({
+ query: unreadRoomsQuery(),
+ }),
+ ).resolves.toMatchObject({
+ data: {
+ UnreadRooms: 2,
+ },
+ })
+ })
+ })
+ })
+ })
+
+ describe('query several rooms', () => {
+ beforeAll(async () => {
+ authenticatedUser = await chattingUser.toJson()
+ await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'second-chatting-user',
+ },
+ })
+ await mutate({
+ mutation: createRoomMutation(),
+ variables: {
+ userId: 'third-chatting-user',
+ },
+ })
+ })
+
+ it('returns the rooms paginated', async () => {
+ await expect(
+ query({ query: roomQuery(), variables: { first: 3, offset: 0 } }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ Room: expect.arrayContaining([
+ expect.objectContaining({
+ id: expect.any(String),
+ roomId: expect.any(String),
+ roomName: 'Third Chatting User',
+ lastMessageAt: null,
+ unreadCount: 0,
+ lastMessage: null,
+ users: expect.arrayContaining([
+ expect.objectContaining({
+ _id: 'chatting-user',
+ id: 'chatting-user',
+ name: 'Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ }),
+ expect.objectContaining({
+ _id: 'third-chatting-user',
+ id: 'third-chatting-user',
+ name: 'Third Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ }),
+ ]),
+ }),
+ expect.objectContaining({
+ id: expect.any(String),
+ roomId: expect.any(String),
+ roomName: 'Second Chatting User',
+ lastMessageAt: null,
+ unreadCount: 0,
+ lastMessage: null,
+ users: expect.arrayContaining([
+ expect.objectContaining({
+ _id: 'chatting-user',
+ id: 'chatting-user',
+ name: 'Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ }),
+ expect.objectContaining({
+ _id: 'second-chatting-user',
+ id: 'second-chatting-user',
+ name: 'Second Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ }),
+ ]),
+ }),
+ expect.objectContaining({
+ id: expect.any(String),
+ roomId: expect.any(String),
+ roomName: 'Other Chatting User',
+ lastMessageAt: expect.any(String),
+ unreadCount: 0,
+ lastMessage: {
+ _id: expect.any(String),
+ id: expect.any(String),
+ content: '2nd message to other chatting user',
+ senderId: 'chatting-user',
+ username: 'Chatting User',
+ avatar: expect.any(String),
+ date: expect.any(String),
+ saved: true,
+ distributed: false,
+ seen: false,
+ },
+ users: expect.arrayContaining([
+ expect.objectContaining({
+ _id: 'chatting-user',
+ id: 'chatting-user',
+ name: 'Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ }),
+ expect.objectContaining({
+ _id: 'other-chatting-user',
+ id: 'other-chatting-user',
+ name: 'Other Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ }),
+ ]),
+ }),
+ ]),
+ },
+ })
+ await expect(
+ query({ query: roomQuery(), variables: { first: 3, offset: 3 } }),
+ ).resolves.toMatchObject({
+ errors: undefined,
+ data: {
+ Room: [
+ expect.objectContaining({
+ id: expect.any(String),
+ roomId: expect.any(String),
+ roomName: 'Not Chatting User',
+ users: expect.arrayContaining([
+ {
+ _id: 'chatting-user',
+ id: 'chatting-user',
+ name: 'Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ },
+ {
+ _id: 'not-chatting-user',
+ id: 'not-chatting-user',
+ name: 'Not Chatting User',
+ avatar: {
+ url: expect.any(String),
+ },
+ },
+ ]),
+ }),
+ ],
+ },
+ })
+ })
+ })
+
+ describe('query single room', () => {
+ let result: any = null
+
+ beforeAll(async () => {
+ authenticatedUser = await chattingUser.toJson()
+ result = await query({ query: roomQuery() })
+ })
+
+ describe('as chatter of room', () => {
+ it('returns the room', async () => {
+ expect(
+ await query({
+ query: roomQuery(),
+ variables: { first: 2, offset: 0, id: result.data.Room[0].id },
+ }),
+ ).toMatchObject({
+ errors: undefined,
+ data: {
+ Room: [
+ {
+ id: expect.any(String),
+ roomId: expect.any(String),
+ roomName: result.data.Room[0].roomName,
+ users: expect.any(Array),
+ },
+ ],
+ },
+ })
+ })
+
+ describe('as not chatter of room', () => {
+ beforeAll(async () => {
+ authenticatedUser = await notChattingUser.toJson()
+ })
+
+ it('returns no room', async () => {
+ authenticatedUser = await notChattingUser.toJson()
+ expect(
+ await query({
+ query: roomQuery(),
+ variables: { first: 2, offset: 0, id: result.data.Room[0].id },
+ }),
+ ).toMatchObject({
+ errors: undefined,
+ data: {
+ Room: [],
+ },
+ })
+ })
+ })
})
})
})
diff --git a/backend/src/schema/resolvers/rooms.ts b/backend/src/schema/resolvers/rooms.ts
index bf0e6b8a6..5382c5ee7 100644
--- a/backend/src/schema/resolvers/rooms.ts
+++ b/backend/src/schema/resolvers/rooms.ts
@@ -1,31 +1,61 @@
import { neo4jgraphql } from 'neo4j-graphql-js'
import Resolver from './helpers/Resolver'
+import { pubsub, ROOM_COUNT_UPDATED } from '../../server'
+import { withFilter } from 'graphql-subscriptions'
+
+export const getUnreadRoomsCount = async (userId, session) => {
+ return session.readTransaction(async (transaction) => {
+ const unreadRoomsCypher = `
+ MATCH (:User { id: $userId })-[:CHATS_IN]->(room:Room)<-[:INSIDE]-(message:Message)<-[:CREATED]-(sender:User)
+ WHERE NOT sender.id = $userId AND NOT message.seen
+ RETURN toString(COUNT(DISTINCT room)) AS count
+ `
+ const unreadRoomsTxResponse = await transaction.run(unreadRoomsCypher, { userId })
+ return unreadRoomsTxResponse.records.map((record) => record.get('count'))[0]
+ })
+}
export default {
+ Subscription: {
+ roomCountUpdated: {
+ subscribe: withFilter(
+ () => pubsub.asyncIterator(ROOM_COUNT_UPDATED),
+ (payload, variables, context) => {
+ return payload.userId === context.user?.id
+ },
+ ),
+ },
+ },
Query: {
- Room: async (object, params, context, resolveInfo) => {
+ Room: async (object, params, context, resolveInfo) => {
if (!params.filter) params.filter = {}
params.filter.users_some = {
id: context.user.id,
}
- const resolved = await neo4jgraphql(object, params, context, resolveInfo)
- if (resolved) {
- resolved.forEach((room) => {
- if (room.users) {
- room.roomName = room.users.filter((user) => user.id !== context.user.id)[0].name
- room.users.forEach((user) => {
- user._id = user.id
- })
- }
- })
+ return neo4jgraphql(object, params, context, resolveInfo)
+ },
+ UnreadRooms: async (object, params, context, resolveInfo) => {
+ const {
+ user: { id: currentUserId },
+ } = context
+ const session = context.driver.session()
+ try {
+ const count = await getUnreadRoomsCount(currentUserId, session)
+ return count
+ } finally {
+ session.close()
}
- return resolved
},
},
Mutation: {
CreateRoom: async (_parent, params, context, _resolveInfo) => {
const { userId } = params
- const { user: { id: currentUserId } } = context
+ const {
+ user: { id: currentUserId },
+ } = context
+ if (userId === currentUserId) {
+ throw new Error('Cannot create a room with self')
+ }
const session = context.driver.session()
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
const createRoomCypher = `
@@ -35,15 +65,23 @@ export default {
ON CREATE SET
room.createdAt = toString(datetime()),
room.id = apoc.create.uuid()
- RETURN room { .* }
+ WITH room, user, currentUser
+ OPTIONAL MATCH (room)<-[:INSIDE]-(message:Message)<-[:CREATED]-(sender:User)
+ WHERE NOT sender.id = $currentUserId AND NOT message.seen
+ WITH room, user, currentUser, message,
+ user.name AS roomName
+ RETURN room {
+ .*,
+ users: [properties(currentUser), properties(user)],
+ roomName: roomName,
+ unreadCount: toString(COUNT(DISTINCT message))
+ }
`
- const createRommTxResponse = await transaction.run(
- createRoomCypher,
- { userId, currentUserId }
- )
- const [room] = await createRommTxResponse.records.map((record) =>
- record.get('room'),
- )
+ const createRommTxResponse = await transaction.run(createRoomCypher, {
+ userId,
+ currentUserId,
+ })
+ const [room] = await createRommTxResponse.records.map((record) => record.get('room'))
return room
})
try {
@@ -56,14 +94,15 @@ export default {
throw new Error(error)
} finally {
session.close()
- }
+ }
},
},
Room: {
...Resolver('Room', {
+ undefinedToNull: ['lastMessageAt'],
hasMany: {
users: '<-[:CHATS_IN]-(related:User)',
- }
+ },
}),
- }
+ },
}
diff --git a/backend/src/schema/resolvers/users.spec.ts b/backend/src/schema/resolvers/users.spec.ts
index f256c6363..bc976fb24 100644
--- a/backend/src/schema/resolvers/users.spec.ts
+++ b/backend/src/schema/resolvers/users.spec.ts
@@ -590,7 +590,7 @@ describe('save category settings', () => {
beforeEach(async () => {
await Promise.all(
categories.map(({ icon, name }, index) => {
- Factory.build('category', {
+ return Factory.build('category', {
id: `cat${index + 1}`,
slug: name,
name,
diff --git a/backend/src/schema/resolvers/users.ts b/backend/src/schema/resolvers/users.ts
index 513b1a28f..6f79a4ea9 100644
--- a/backend/src/schema/resolvers/users.ts
+++ b/backend/src/schema/resolvers/users.ts
@@ -144,7 +144,7 @@ export default {
params.locationName = params.locationName === '' ? null : params.locationName
const { termsAndConditionsAgreedVersion } = params
if (termsAndConditionsAgreedVersion) {
- const regEx = new RegExp(/^[0-9]+\.[0-9]+\.[0-9]+$/g)
+ const regEx = /^[0-9]+\.[0-9]+\.[0-9]+$/g
if (!regEx.test(termsAndConditionsAgreedVersion)) {
throw new ForbiddenError('Invalid version format!')
}
diff --git a/backend/src/schema/types/type/Location.gql b/backend/src/schema/types/type/Location.gql
index fad24cc26..9cb5c970a 100644
--- a/backend/src/schema/types/type/Location.gql
+++ b/backend/src/schema/types/type/Location.gql
@@ -25,4 +25,3 @@ type LocationMapBox {
type Query {
queryLocations(place: String!, lang: String!): [LocationMapBox]!
}
-
diff --git a/backend/src/schema/types/type/Message.gql b/backend/src/schema/types/type/Message.gql
index 4a3346079..16e458151 100644
--- a/backend/src/schema/types/type/Message.gql
+++ b/backend/src/schema/types/type/Message.gql
@@ -2,8 +2,13 @@
# room: _RoomFilter
# }
+enum _MessageOrdering {
+ indexId_desc
+}
+
type Message {
id: ID!
+ indexId: Int!
createdAt: String
updatedAt: String
@@ -16,6 +21,10 @@ type Message {
username: String! @cypher(statement: "MATCH (this)<-[:CREATED]-(user:User) RETURN user.name")
avatar: String @cypher(statement: "MATCH (this)<-[:CREATED]-(:User)-[:AVATAR_IMAGE]->(image:Image) RETURN image.url")
date: String! @cypher(statement: "RETURN this.createdAt")
+
+ saved: Boolean
+ distributed: Boolean
+ seen: Boolean
}
type Mutation {
@@ -23,8 +32,19 @@ type Mutation {
roomId: ID!
content: String!
): Message
+
+ MarkMessagesAsSeen(messageIds: [String!]): Boolean
}
type Query {
- Message(roomId: ID!): [Message]
+ Message(
+ roomId: ID!,
+ first: Int
+ offset: Int
+ orderBy: [_MessageOrdering]
+ ): [Message]
+}
+
+type Subscription {
+ chatMessageAdded: Message
}
diff --git a/backend/src/schema/types/type/NOTIFIED.gql b/backend/src/schema/types/type/NOTIFIED.gql
index 62a1f3696..1f825decc 100644
--- a/backend/src/schema/types/type/NOTIFIED.gql
+++ b/backend/src/schema/types/type/NOTIFIED.gql
@@ -38,5 +38,5 @@ type Mutation {
}
type Subscription {
- notificationAdded(userId: ID!): NOTIFIED
+ notificationAdded: NOTIFIED
}
diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql
index 0a7277515..7e6d1d0e7 100644
--- a/backend/src/schema/types/type/Post.gql
+++ b/backend/src/schema/types/type/Post.gql
@@ -84,8 +84,8 @@ input _PostFilter {
group: _GroupFilter
postsInMyGroups: Boolean
postType_in: [PostType]
- eventStart_gte: String
- eventEnd_gte: String
+ eventStart_gte: String
+ eventEnd_gte: String
}
enum _PostOrdering {
diff --git a/backend/src/schema/types/type/Room.gql b/backend/src/schema/types/type/Room.gql
index c90ebda3a..60d54192c 100644
--- a/backend/src/schema/types/type/Room.gql
+++ b/backend/src/schema/types/type/Room.gql
@@ -5,6 +5,12 @@
# users_some: _UserFilter
# }
+# TODO change this to last message date
+enum _RoomOrdering {
+ lastMessageAt_desc
+ createdAt_desc
+}
+
type Room {
id: ID!
createdAt: String
@@ -13,7 +19,28 @@ type Room {
users: [User]! @relation(name: "CHATS_IN", direction: "IN")
roomId: String! @cypher(statement: "RETURN this.id")
- roomName: String! ## @cypher(statement: "MATCH (this)<-[:CHATS_IN]-(user:User) WHERE NOT user.id = $cypherParams.currentUserId RETURN user[0].name")
+ roomName: String! @cypher(statement: "MATCH (this)<-[:CHATS_IN]-(user:User) WHERE NOT user.id = $cypherParams.currentUserId RETURN user.name")
+ avatar: String @cypher(statement: """
+ MATCH (this)<-[:CHATS_IN]-(user:User)
+ WHERE NOT user.id = $cypherParams.currentUserId
+ OPTIONAL MATCH (user)-[:AVATAR_IMAGE]->(image:Image)
+ RETURN image.url
+ """)
+
+ lastMessageAt: String
+
+ lastMessage: Message @cypher(statement: """
+ MATCH (this)<-[:INSIDE]-(message:Message)
+ WITH message ORDER BY message.indexId DESC LIMIT 1
+ RETURN message
+ """)
+
+ unreadCount: Int @cypher(statement: """
+ MATCH (this)<-[:INSIDE]-(message:Message)<-[:CREATED]-(user:User)
+ WHERE NOT user.id = $cypherParams.currentUserId
+ AND NOT message.seen
+ RETURN count(message)
+ """)
}
type Mutation {
@@ -23,5 +50,13 @@ type Mutation {
}
type Query {
- Room: [Room]
+ Room(
+ id: ID
+ orderBy: [_RoomOrdering]
+ ): [Room]
+ UnreadRooms: Int
+}
+
+type Subscription {
+ roomCountUpdated: Int
}
diff --git a/backend/src/server.ts b/backend/src/server.ts
index b4d63c007..0522f5fc8 100644
--- a/backend/src/server.ts
+++ b/backend/src/server.ts
@@ -14,6 +14,8 @@ import bodyParser from 'body-parser'
import { graphqlUploadExpress } from 'graphql-upload'
export const NOTIFICATION_ADDED = 'NOTIFICATION_ADDED'
+export const CHAT_MESSAGE_ADDED = 'CHAT_MESSAGE_ADDED'
+export const ROOM_COUNT_UPDATED = 'ROOM_COUNT_UPDATED'
const { REDIS_DOMAIN, REDIS_PORT, REDIS_PASSWORD } = CONFIG
let prodPubsub, devPubsub
const options = {
diff --git a/backend/tsconfig.json b/backend/tsconfig.json
index 1d58dba0a..b6f3526a3 100644
--- a/backend/tsconfig.json
+++ b/backend/tsconfig.json
@@ -106,6 +106,4 @@
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
- "include": ["./src/**/*"],
- "exclude": ["./src/**/*.spec.ts"]
}
diff --git a/backend/yarn.lock b/backend/yarn.lock
index 38c3b62bf..7c1fa2f6b 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -10,6 +10,14 @@
"@jridgewell/gen-mapping" "^0.1.0"
"@jridgewell/trace-mapping" "^0.3.9"
+"@ampproject/remapping@^2.2.0":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
+ integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
"@apollo/protobufjs@^1.0.3":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.0.4.tgz#cf01747a55359066341f31b5ce8db17df44244e0"
@@ -71,11 +79,23 @@
dependencies:
"@babel/highlight" "^7.18.6"
+"@babel/code-frame@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
+ integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+ dependencies:
+ "@babel/highlight" "^7.22.5"
+
"@babel/compat-data@^7.20.5":
version "7.20.14"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8"
integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==
+"@babel/compat-data@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255"
+ integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==
+
"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c"
@@ -85,7 +105,7 @@
invariant "^2.2.4"
semver "^5.5.0"
-"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3":
+"@babel/core@^7.1.0", "@babel/core@^7.12.3":
version "7.20.12"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d"
integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==
@@ -106,6 +126,27 @@
json5 "^2.2.2"
semver "^6.3.0"
+"@babel/core@^7.7.2", "@babel/core@^7.8.0":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89"
+ integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.5"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helpers" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.2"
+ semver "^6.3.0"
+
"@babel/core@~7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
@@ -137,6 +178,16 @@
"@jridgewell/gen-mapping" "^0.3.2"
jsesc "^2.5.1"
+"@babel/generator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7"
+ integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==
+ dependencies:
+ "@babel/types" "^7.22.5"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
+
"@babel/helper-annotate-as-pure@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee"
@@ -163,6 +214,17 @@
lru-cache "^5.1.1"
semver "^6.3.0"
+"@babel/helper-compilation-targets@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02"
+ integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==
+ dependencies:
+ "@babel/compat-data" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ browserslist "^4.21.3"
+ lru-cache "^5.1.1"
+ semver "^6.3.0"
+
"@babel/helper-compilation-targets@^7.8.7":
version "7.8.7"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde"
@@ -205,6 +267,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
+"@babel/helper-environment-visitor@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
+ integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
+
"@babel/helper-explode-assignable-expression@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982"
@@ -221,6 +288,14 @@
"@babel/template" "^7.18.10"
"@babel/types" "^7.19.0"
+"@babel/helper-function-name@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
+ integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/helper-function-name@^7.9.5":
version "7.9.5"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
@@ -244,6 +319,13 @@
dependencies:
"@babel/types" "^7.18.6"
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-hoist-variables@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134"
@@ -265,6 +347,13 @@
dependencies:
"@babel/types" "^7.18.6"
+"@babel/helper-module-imports@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
+ integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.9.0":
version "7.20.11"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0"
@@ -279,6 +368,20 @@
"@babel/traverse" "^7.20.10"
"@babel/types" "^7.20.7"
+"@babel/helper-module-transforms@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef"
+ integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/helper-optimise-call-expression@^7.18.6", "@babel/helper-optimise-call-expression@^7.8.3":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
@@ -286,7 +389,7 @@
dependencies:
"@babel/types" "^7.18.6"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.20.2"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
@@ -338,6 +441,13 @@
dependencies:
"@babel/types" "^7.20.2"
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@^7.8.3":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
@@ -345,21 +455,43 @@
dependencies:
"@babel/types" "^7.18.6"
+"@babel/helper-split-export-declaration@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08"
+ integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-string-parser@^7.19.4":
version "7.19.4"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
+"@babel/helper-string-parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
+ integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1", "@babel/helper-validator-identifier@^7.9.5":
version "7.19.1"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
+"@babel/helper-validator-identifier@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
+ integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
"@babel/helper-validator-option@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
+"@babel/helper-validator-option@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac"
+ integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==
+
"@babel/helper-wrap-function@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610"
@@ -379,6 +511,15 @@
"@babel/traverse" "^7.20.13"
"@babel/types" "^7.20.7"
+"@babel/helpers@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820"
+ integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/highlight@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
@@ -388,6 +529,15 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
+"@babel/highlight@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
+ integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.5"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
"@babel/node@~7.8.7":
version "7.8.7"
resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.8.7.tgz#4213ea99f0c86cc1cf460e61131e7acbb723e13a"
@@ -407,6 +557,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89"
integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==
+"@babel/parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea"
+ integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==
+
"@babel/parser@^7.7.0":
version "7.9.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
@@ -550,13 +705,6 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.7.2":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
- integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
@@ -1026,6 +1174,15 @@
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
+"@babel/template@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
+ integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2", "@babel/traverse@^7.9.0":
version "7.20.13"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473"
@@ -1042,6 +1199,22 @@
debug "^4.1.0"
globals "^11.1.0"
+"@babel/traverse@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1"
+ integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/types" "^7.22.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
"@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892"
@@ -1066,6 +1239,15 @@
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
+"@babel/types@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
+ integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
+ dependencies:
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
+ to-fast-properties "^2.0.0"
+
"@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.5":
version "7.9.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444"
@@ -1095,6 +1277,38 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
+"@eslint-community/eslint-utils@^4.2.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.4.0":
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
+ integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
+
+"@eslint/eslintrc@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331"
+ integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.5.2"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.43.0":
+ version "8.43.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0"
+ integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==
+
"@faker-js/faker@7.6.0":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-7.6.0.tgz#9ea331766084288634a9247fcd8b84f16ff4ba07"
@@ -1165,6 +1379,25 @@
dependencies:
"@hapi/hoek" "^8.3.0"
+"@humanwhocodes/config-array@^0.11.10":
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
+ integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.1"
+ debug "^4.1.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -1181,178 +1414,142 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
-"@jest/console@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.4.2.tgz#f78374905c2454764152904a344a2d5226b0ef09"
- integrity sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg==
+"@jest/console@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
+ integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==
dependencies:
- "@jest/types" "^29.4.2"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
chalk "^4.0.0"
- jest-message-util "^29.4.2"
- jest-util "^29.4.2"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
slash "^3.0.0"
-"@jest/core@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.4.2.tgz#6e999b67bdc2df9d96ba9b142465bda71ee472c2"
- integrity sha512-KGuoQah0P3vGNlaS/l9/wQENZGNKGoWb+OPxh3gz+YzG7/XExvYu34MzikRndQCdM2S0tzExN4+FL37i6gZmCQ==
+"@jest/core@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
+ integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
dependencies:
- "@jest/console" "^29.4.2"
- "@jest/reporters" "^29.4.2"
- "@jest/test-result" "^29.4.2"
- "@jest/transform" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/console" "^27.5.1"
+ "@jest/reporters" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
ansi-escapes "^4.2.1"
chalk "^4.0.0"
- ci-info "^3.2.0"
+ emittery "^0.8.1"
exit "^0.1.2"
graceful-fs "^4.2.9"
- jest-changed-files "^29.4.2"
- jest-config "^29.4.2"
- jest-haste-map "^29.4.2"
- jest-message-util "^29.4.2"
- jest-regex-util "^29.4.2"
- jest-resolve "^29.4.2"
- jest-resolve-dependencies "^29.4.2"
- jest-runner "^29.4.2"
- jest-runtime "^29.4.2"
- jest-snapshot "^29.4.2"
- jest-util "^29.4.2"
- jest-validate "^29.4.2"
- jest-watcher "^29.4.2"
+ jest-changed-files "^27.5.1"
+ jest-config "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-resolve-dependencies "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ jest-watcher "^27.5.1"
micromatch "^4.0.4"
- pretty-format "^29.4.2"
+ rimraf "^3.0.0"
slash "^3.0.0"
strip-ansi "^6.0.0"
-"@jest/environment@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.4.2.tgz#ee92c316ee2fbdf0bcd9d2db0ef42d64fea26b56"
- integrity sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ==
+"@jest/environment@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
+ integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==
dependencies:
- "@jest/fake-timers" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
- jest-mock "^29.4.2"
+ jest-mock "^27.5.1"
-"@jest/expect-utils@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.2.tgz#cd0065dfdd8e8a182aa350cc121db97b5eed7b3f"
- integrity sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==
+"@jest/fake-timers@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
+ integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==
dependencies:
- jest-get-type "^29.4.2"
-
-"@jest/expect-utils@^29.5.0":
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036"
- integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==
- dependencies:
- jest-get-type "^29.4.3"
-
-"@jest/expect@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.4.2.tgz#2d4a6a41b29380957c5094de19259f87f194578b"
- integrity sha512-NUAeZVApzyaeLjfWIV/64zXjA2SS+NuUPHpAlO7IwVMGd5Vf9szTl9KEDlxY3B4liwLO31os88tYNHl6cpjtKQ==
- dependencies:
- expect "^29.4.2"
- jest-snapshot "^29.4.2"
-
-"@jest/fake-timers@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.4.2.tgz#af43ee1a5720b987d0348f80df98f2cb17d45cd0"
- integrity sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ==
- dependencies:
- "@jest/types" "^29.4.2"
- "@sinonjs/fake-timers" "^10.0.2"
+ "@jest/types" "^27.5.1"
+ "@sinonjs/fake-timers" "^8.0.1"
"@types/node" "*"
- jest-message-util "^29.4.2"
- jest-mock "^29.4.2"
- jest-util "^29.4.2"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
-"@jest/globals@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.4.2.tgz#73f85f5db0e17642258b25fd0b9fc89ddedb50eb"
- integrity sha512-zCk70YGPzKnz/I9BNFDPlK+EuJLk21ur/NozVh6JVM86/YYZtZHqxFFQ62O9MWq7uf3vIZnvNA0BzzrtxD9iyg==
+"@jest/globals@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
+ integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==
dependencies:
- "@jest/environment" "^29.4.2"
- "@jest/expect" "^29.4.2"
- "@jest/types" "^29.4.2"
- jest-mock "^29.4.2"
+ "@jest/environment" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ expect "^27.5.1"
-"@jest/reporters@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.4.2.tgz#6abfa923941daae0acc76a18830ee9e79a22042d"
- integrity sha512-10yw6YQe75zCgYcXgEND9kw3UZZH5tJeLzWv4vTk/2mrS1aY50A37F+XT2hPO5OqQFFnUWizXD8k1BMiATNfUw==
+"@jest/reporters@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
+ integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
dependencies:
"@bcoe/v8-coverage" "^0.2.3"
- "@jest/console" "^29.4.2"
- "@jest/test-result" "^29.4.2"
- "@jest/transform" "^29.4.2"
- "@jest/types" "^29.4.2"
- "@jridgewell/trace-mapping" "^0.3.15"
+ "@jest/console" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
chalk "^4.0.0"
collect-v8-coverage "^1.0.0"
exit "^0.1.2"
- glob "^7.1.3"
+ glob "^7.1.2"
graceful-fs "^4.2.9"
istanbul-lib-coverage "^3.0.0"
istanbul-lib-instrument "^5.1.0"
istanbul-lib-report "^3.0.0"
istanbul-lib-source-maps "^4.0.0"
istanbul-reports "^3.1.3"
- jest-message-util "^29.4.2"
- jest-util "^29.4.2"
- jest-worker "^29.4.2"
+ jest-haste-map "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
slash "^3.0.0"
+ source-map "^0.6.0"
string-length "^4.0.1"
- strip-ansi "^6.0.0"
- v8-to-istanbul "^9.0.1"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^8.1.0"
-"@jest/schemas@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.2.tgz#cf7cfe97c5649f518452b176c47ed07486270fc1"
- integrity sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==
+"@jest/source-map@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
+ integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==
dependencies:
- "@sinclair/typebox" "^0.25.16"
-
-"@jest/schemas@^29.4.3":
- version "29.4.3"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788"
- integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==
- dependencies:
- "@sinclair/typebox" "^0.25.16"
-
-"@jest/source-map@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.2.tgz#f9815d59e25cd3d6828e41489cd239271018d153"
- integrity sha512-tIoqV5ZNgYI9XCKXMqbYe5JbumcvyTgNN+V5QW4My033lanijvCD0D4PI9tBw4pRTqWOc00/7X3KVvUh+qnF4Q==
- dependencies:
- "@jridgewell/trace-mapping" "^0.3.15"
callsites "^3.0.0"
graceful-fs "^4.2.9"
+ source-map "^0.6.0"
-"@jest/test-result@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.4.2.tgz#34b0ba069f2e3072261e4884c8fb6bd15ed6fb8d"
- integrity sha512-HZsC3shhiHVvMtP+i55MGR5bPcc3obCFbA5bzIOb8pCjwBZf11cZliJncCgaVUbC5yoQNuGqCkC0Q3t6EItxZA==
+"@jest/test-result@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
+ integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==
dependencies:
- "@jest/console" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/console" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/istanbul-lib-coverage" "^2.0.0"
collect-v8-coverage "^1.0.0"
-"@jest/test-sequencer@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.4.2.tgz#8b48e5bc4af80b42edacaf2a733d4f295edf28fb"
- integrity sha512-9Z2cVsD6CcObIVrWigHp2McRJhvCxL27xHtrZFgNC1RwnoSpDx6fZo8QYjJmziFlW9/hr78/3sxF54S8B6v8rg==
+"@jest/test-sequencer@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
+ integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==
dependencies:
- "@jest/test-result" "^29.4.2"
+ "@jest/test-result" "^27.5.1"
graceful-fs "^4.2.9"
- jest-haste-map "^29.4.2"
- slash "^3.0.0"
+ jest-haste-map "^27.5.1"
+ jest-runtime "^27.5.1"
"@jest/transform@^25.2.6":
version "25.2.6"
@@ -1376,26 +1573,26 @@
source-map "^0.6.1"
write-file-atomic "^3.0.0"
-"@jest/transform@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.2.tgz#b24b72dbab4c8675433a80e222d6a8ef4656fb81"
- integrity sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==
+"@jest/transform@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
+ integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==
dependencies:
- "@babel/core" "^7.11.6"
- "@jest/types" "^29.4.2"
- "@jridgewell/trace-mapping" "^0.3.15"
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^27.5.1"
babel-plugin-istanbul "^6.1.1"
chalk "^4.0.0"
- convert-source-map "^2.0.0"
- fast-json-stable-stringify "^2.1.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.2.9"
- jest-haste-map "^29.4.2"
- jest-regex-util "^29.4.2"
- jest-util "^29.4.2"
+ jest-haste-map "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-util "^27.5.1"
micromatch "^4.0.4"
pirates "^4.0.4"
slash "^3.0.0"
- write-file-atomic "^4.0.2"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
"@jest/types@^25.2.6":
version "25.2.6"
@@ -1407,28 +1604,15 @@
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
-"@jest/types@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.2.tgz#8f724a414b1246b2bfd56ca5225d9e1f39540d82"
- integrity sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==
+"@jest/types@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
+ integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==
dependencies:
- "@jest/schemas" "^29.4.2"
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^3.0.0"
"@types/node" "*"
- "@types/yargs" "^17.0.8"
- chalk "^4.0.0"
-
-"@jest/types@^29.5.0":
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593"
- integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==
- dependencies:
- "@jest/schemas" "^29.4.3"
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^17.0.8"
+ "@types/yargs" "^16.0.0"
chalk "^4.0.0"
"@jridgewell/gen-mapping@^0.1.0":
@@ -1439,6 +1623,15 @@
"@jridgewell/set-array" "^1.0.0"
"@jridgewell/sourcemap-codec" "^1.4.10"
+"@jridgewell/gen-mapping@^0.3.0":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+ integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+ dependencies:
+ "@jridgewell/set-array" "^1.0.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
"@jridgewell/gen-mapping@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
@@ -1476,7 +1669,15 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9":
+"@jridgewell/trace-mapping@^0.3.17":
+ version "0.3.18"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+ integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
+ dependencies:
+ "@jridgewell/resolve-uri" "3.1.0"
+ "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@jridgewell/trace-mapping@^0.3.9":
version "0.3.17"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
@@ -1573,11 +1774,24 @@
"@nodelib/fs.stat" "2.0.3"
run-parallel "^1.1.9"
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
+"@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
"@nodelib/fs.walk@^1.2.3":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
@@ -1586,6 +1800,14 @@
"@nodelib/fs.scandir" "2.1.3"
fastq "^1.6.0"
+"@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
"@npmcli/fs@^2.1.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865"
@@ -1602,6 +1824,18 @@
mkdirp "^1.0.4"
rimraf "^3.0.2"
+"@pkgr/utils@^2.3.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3"
+ integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==
+ dependencies:
+ cross-spawn "^7.0.3"
+ fast-glob "^3.2.12"
+ is-glob "^4.0.3"
+ open "^9.1.0"
+ picocolors "^1.0.0"
+ tslib "^2.5.0"
+
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -1734,29 +1968,24 @@
"@sentry/types" "5.15.4"
tslib "^1.9.3"
-"@sinclair/typebox@^0.25.16":
- version "0.25.21"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.21.tgz#763b05a4b472c93a8db29b2c3e359d55b29ce272"
- integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==
-
"@sindresorhus/is@^4.0.0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5"
integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==
-"@sinonjs/commons@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3"
- integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==
+"@sinonjs/commons@^1.7.0":
+ version "1.8.6"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9"
+ integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==
dependencies:
type-detect "4.0.8"
-"@sinonjs/fake-timers@^10.0.2":
- version "10.0.2"
- resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c"
- integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==
+"@sinonjs/fake-timers@^8.0.1":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7"
+ integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==
dependencies:
- "@sinonjs/commons" "^2.0.0"
+ "@sinonjs/commons" "^1.7.0"
"@szmarczak/http-timer@^4.0.5":
version "4.0.6"
@@ -1765,6 +1994,11 @@
dependencies:
defer-to-connect "^2.0.0"
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
"@tootallnate/once@2":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
@@ -1797,6 +2031,17 @@
dependencies:
"@types/node" "*"
+"@types/babel__core@^7.0.0":
+ version "7.20.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b"
+ integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
"@types/babel__core@^7.1.0":
version "7.1.2"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f"
@@ -1841,6 +2086,13 @@
dependencies:
"@babel/types" "^7.3.0"
+"@types/babel__traverse@^7.0.4":
+ version "7.20.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf"
+ integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
"@types/body-parser@*", "@types/body-parser@1.19.0":
version "1.19.0"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f"
@@ -1924,7 +2176,7 @@
dependencies:
"@types/node" "*"
-"@types/graceful-fs@^4.1.3":
+"@types/graceful-fs@^4.1.2":
version "4.1.6"
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae"
integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==
@@ -1978,18 +2230,23 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@^29.5.2":
- version "29.5.2"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b"
- integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==
+"@types/jest@^27.0.2":
+ version "27.5.2"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c"
+ integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==
dependencies:
- expect "^29.0.0"
- pretty-format "^29.0.0"
+ jest-matcher-utils "^27.0.0"
+ pretty-format "^27.0.0"
-"@types/json-schema@^7.0.3":
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
- integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+"@types/json-schema@^7.0.9":
+ version "7.0.12"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
+ integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/keygrip@*":
version "1.0.2"
@@ -2083,6 +2340,11 @@
dependencies:
"@types/node" "*"
+"@types/semver@^7.3.12":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
+ integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
+
"@types/serve-static@*":
version "1.13.4"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.4.tgz#6662a93583e5a6cabca1b23592eb91e12fa80e7c"
@@ -2115,10 +2377,10 @@
dependencies:
"@types/yargs-parser" "*"
-"@types/yargs@^17.0.8":
- version "17.0.22"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a"
- integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==
+"@types/yargs@^16.0.0":
+ version "16.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3"
+ integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==
dependencies:
"@types/yargs-parser" "*"
@@ -2132,25 +2394,89 @@
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
-"@typescript-eslint/experimental-utils@^2.5.0":
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.6.0.tgz#ed70bef72822bff54031ff0615fc888b9e2b6e8a"
- integrity sha512-34BAFpNOwHXeqT+AvdalLxOvcPYnCxA5JGmBAFL64RGMdP0u65rXjii7l/nwpgk5aLEE1LaqF+SsCU0/Cb64xA==
+"@typescript-eslint/eslint-plugin@^5.57.1":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz#2f4bea6a3718bed2ba52905358d0f45cd3620d31"
+ integrity sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==
dependencies:
- "@types/json-schema" "^7.0.3"
- "@typescript-eslint/typescript-estree" "2.6.0"
- eslint-scope "^5.0.0"
+ "@eslint-community/regexpp" "^4.4.0"
+ "@typescript-eslint/scope-manager" "5.60.0"
+ "@typescript-eslint/type-utils" "5.60.0"
+ "@typescript-eslint/utils" "5.60.0"
+ debug "^4.3.4"
+ grapheme-splitter "^1.0.4"
+ ignore "^5.2.0"
+ natural-compare-lite "^1.4.0"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
-"@typescript-eslint/typescript-estree@2.6.0":
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.6.0.tgz#d3e9d8e001492e2b9124c4d4bd4e7f03c0fd7254"
- integrity sha512-A3lSBVIdj2Gp0lFEL6in2eSPqJ33uAc3Ko+Y4brhjkxzjbzLnwBH22CwsW2sCo+iwogfIyvb56/AJri15H0u5Q==
+"@typescript-eslint/parser@^5.57.1":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a"
+ integrity sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==
dependencies:
- debug "^4.1.1"
- glob "^7.1.4"
- is-glob "^4.0.1"
- lodash.unescape "4.0.1"
- semver "^6.3.0"
+ "@typescript-eslint/scope-manager" "5.60.0"
+ "@typescript-eslint/types" "5.60.0"
+ "@typescript-eslint/typescript-estree" "5.60.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@5.60.0":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz#ae511967b4bd84f1d5e179bb2c82857334941c1c"
+ integrity sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==
+ dependencies:
+ "@typescript-eslint/types" "5.60.0"
+ "@typescript-eslint/visitor-keys" "5.60.0"
+
+"@typescript-eslint/type-utils@5.60.0":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz#69b09087eb12d7513d5b07747e7d47f5533aa228"
+ integrity sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "5.60.0"
+ "@typescript-eslint/utils" "5.60.0"
+ debug "^4.3.4"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.60.0":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558"
+ integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==
+
+"@typescript-eslint/typescript-estree@5.60.0":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600"
+ integrity sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==
+ dependencies:
+ "@typescript-eslint/types" "5.60.0"
+ "@typescript-eslint/visitor-keys" "5.60.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/utils@5.60.0", "@typescript-eslint/utils@^5.10.0":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.0.tgz#4667c5aece82f9d4f24a667602f0f300864b554c"
+ integrity sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@types/json-schema" "^7.0.9"
+ "@types/semver" "^7.3.12"
+ "@typescript-eslint/scope-manager" "5.60.0"
+ "@typescript-eslint/types" "5.60.0"
+ "@typescript-eslint/typescript-estree" "5.60.0"
+ eslint-scope "^5.1.1"
+ semver "^7.3.7"
+
+"@typescript-eslint/visitor-keys@5.60.0":
+ version "5.60.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz#b48b29da3f5f31dd1656281727004589d2722a66"
+ integrity sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==
+ dependencies:
+ "@typescript-eslint/types" "5.60.0"
+ eslint-visitor-keys "^3.3.0"
"@wry/context@^0.4.0":
version "0.4.4"
@@ -2167,7 +2493,7 @@
dependencies:
tslib "^1.9.3"
-abab@^2.0.6:
+abab@^2.0.3, abab@^2.0.5, abab@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
@@ -2185,21 +2511,39 @@ accepts@^1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
-acorn-jsx@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
- integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+acorn-globals@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
acorn-walk@^8.1.1:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
-acorn@^7.1.0:
+acorn@^7.1.1:
version "7.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+acorn@^8.2.4, acorn@^8.8.0:
+ version "8.9.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
+ integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
+
acorn@^8.4.1:
version "8.8.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
@@ -2242,7 +2586,7 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^3.2.0"
-ajv@^6.10.0, ajv@^6.10.2:
+ajv@^6.10.0:
version "6.10.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
@@ -2252,7 +2596,7 @@ ajv@^6.10.0, ajv@^6.10.2:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^6.12.3:
+ajv@^6.12.3, ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -2286,17 +2630,12 @@ ansi-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-ansi-regex@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
- integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
-
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ansi-styles@^3.1.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -2687,6 +3026,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -2702,18 +3046,29 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
+array-buffer-byte-length@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
+ integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+ dependencies:
+ call-bind "^1.0.2"
+ is-array-buffer "^3.0.1"
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-array-includes@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
- integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+array-includes@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
+ integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.7.0"
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
+ is-string "^1.0.7"
array-union@^2.1.0:
version "2.1.0"
@@ -2725,14 +3080,25 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
-array.prototype.flat@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz#8f3c71d245ba349b6b64b4078f76f5576f1fd723"
- integrity sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==
+array.prototype.flat@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
+ integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.15.0"
- function-bind "^1.1.1"
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+ integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
asn1@~0.2.3:
version "0.2.6"
@@ -2783,11 +3149,6 @@ assignment@2.2.0:
resolved "https://registry.yarnpkg.com/assignment/-/assignment-2.2.0.tgz#f5b5bc2d160d69986e8700cd38f567c0aabe101e"
integrity sha1-9bW8LRYNaZhuhwDNOPVnwKq+EB4=
-astral-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
- integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-
async-each@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
@@ -2820,6 +3181,11 @@ audio-extensions@0.0.0:
resolved "https://registry.yarnpkg.com/audio-extensions/-/audio-extensions-0.0.0.tgz#d0eefe077fb9eb625898eed9985890548cf1f8d2"
integrity sha1-0O7+B3+562JYmO7ZmFiQVIzx+NI=
+available-typed-arrays@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+ integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
aws-sdk@^2.652.0:
version "2.652.0"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.652.0.tgz#00a4dd3a4ce588448895c42d25e967f2a23b487c"
@@ -2862,15 +3228,16 @@ babel-eslint@~10.1.0:
eslint-visitor-keys "^1.0.0"
resolve "^1.12.0"
-babel-jest@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.2.tgz#b17b9f64be288040877cbe2649f91ac3b63b2ba6"
- integrity sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ==
+babel-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
+ integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==
dependencies:
- "@jest/transform" "^29.4.2"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/babel__core" "^7.1.14"
babel-plugin-istanbul "^6.1.1"
- babel-preset-jest "^29.4.2"
+ babel-preset-jest "^27.5.1"
chalk "^4.0.0"
graceful-fs "^4.2.9"
slash "^3.0.0"
@@ -2915,14 +3282,14 @@ babel-plugin-jest-hoist@^25.2.6:
"@babel/types" "^7.3.3"
"@types/babel__traverse" "^7.0.6"
-babel-plugin-jest-hoist@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.2.tgz#22aa43e255230f02371ffef1cac7eedef58f60bc"
- integrity sha512-5HZRCfMeWypFEonRbEkwWXtNS1sQK159LhRVyRuLzyfVBxDy/34Tr/rg4YVi0SScSJ4fqeaR/OIeceJ/LaQ0pQ==
+babel-plugin-jest-hoist@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
+ integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==
dependencies:
"@babel/template" "^7.3.3"
"@babel/types" "^7.3.3"
- "@types/babel__core" "^7.1.14"
+ "@types/babel__core" "^7.0.0"
"@types/babel__traverse" "^7.0.6"
babel-plugin-transform-runtime@^6.23.0:
@@ -2959,12 +3326,12 @@ babel-preset-jest@^25.2.6:
"@babel/plugin-syntax-object-rest-spread" "^7.0.0"
babel-plugin-jest-hoist "^25.2.6"
-babel-preset-jest@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.4.2.tgz#f0b20c6a79a9f155515e72a2d4f537fe002a4e38"
- integrity sha512-ecWdaLY/8JyfUDr0oELBMpj3R5I1L6ZqG+kRJmwqfHtLWuPrJStR0LUkvUhfykJWTsXXMnohsayN/twltBbDrQ==
+babel-preset-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
+ integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==
dependencies:
- babel-plugin-jest-hoist "^29.4.2"
+ babel-plugin-jest-hoist "^27.5.1"
babel-preset-current-node-syntax "^1.0.0"
babel-runtime@^6.22.0:
@@ -3025,6 +3392,11 @@ becke-ch--regex--s0-0-v1--base--pl--lib@^1.4.0:
resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz#429ceebbfa5f7e936e78d73fbdc7da7162b20e20"
integrity sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=
+big-integer@^1.6.44:
+ version "1.6.51"
+ resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
+ integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
+
binary-extensions@^1.0.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
@@ -3074,6 +3446,13 @@ boxen@^1.2.1:
term-size "^1.2.0"
widest-line "^2.0.0"
+bplist-parser@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
+ integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
+ dependencies:
+ big-integer "^1.6.44"
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -3112,6 +3491,11 @@ braces@^3.0.2, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
browserslist@^4.21.3:
version "4.21.5"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
@@ -3174,6 +3558,20 @@ buffer@^6.0.3:
base64-js "^1.3.1"
ieee754 "^1.2.1"
+builtins@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9"
+ integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==
+ dependencies:
+ semver "^7.0.0"
+
+bundle-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
+ integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
+ dependencies:
+ run-applescript "^5.0.0"
+
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -3243,6 +3641,14 @@ cacheable-request@^7.0.2:
normalize-url "^6.0.1"
responselike "^2.0.0"
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -3319,7 +3725,7 @@ chalk@2.3.0:
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -3349,11 +3755,6 @@ char-regex@^1.0.2:
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
-chardet@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
- integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-
check-error@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
@@ -3501,13 +3902,6 @@ cli-boxes@^1.0.0:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
-cli-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
- integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
- dependencies:
- restore-cursor "^3.1.0"
-
cli-table3@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
@@ -3518,11 +3912,6 @@ cli-table3@^0.5.1:
optionalDependencies:
colors "^1.1.2"
-cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
- integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
-
clipboardy@1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.2.tgz#2ce320b9ed9be1514f79878b53ff9765420903e2"
@@ -3531,13 +3920,13 @@ clipboardy@1.2.2:
arch "^2.1.0"
execa "^0.8.0"
-cliui@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
- integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
dependencies:
string-width "^4.2.0"
- strip-ansi "^6.0.1"
+ strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
clone-response@^1.0.2:
@@ -3683,11 +4072,6 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-contains-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
- integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
-
content-disposition@0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
@@ -3712,11 +4096,6 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
-convert-source-map@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
- integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
@@ -3806,7 +4185,7 @@ cross-spawn@^5.0.1:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+cross-spawn@^6.0.0:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@@ -3826,7 +4205,7 @@ cross-spawn@^7.0.1:
shebang-command "^2.0.0"
which "^2.0.1"
-cross-spawn@^7.0.3:
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -3876,6 +4255,23 @@ cssfilter@0.0.10:
resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=
+cssom@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
cssstyle@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a"
@@ -3944,6 +4340,15 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
+data-urls@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ dependencies:
+ abab "^2.0.3"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+
data-urls@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4"
@@ -3963,14 +4368,14 @@ dayjs@^1.10.0:
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.6.tgz#288b2aa82f2d8418a6c9d4df5898c0737ad02a63"
integrity sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw==
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@4, debug@^4.0.1, debug@~4.1.1:
+debug@4:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@@ -3984,14 +4389,21 @@ debug@^3.2.6:
dependencies:
ms "^2.1.1"
-debug@^4.1.0, debug@^4.1.1, debug@^4.3.3:
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
-decimal.js@^10.4.3:
+decimal.js@^10.2.1, decimal.js@^10.4.3:
version "10.4.3"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
@@ -4025,7 +4437,7 @@ deep-extend@^0.6.0:
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-deep-is@~0.1.3:
+deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
@@ -4040,11 +4452,34 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b"
integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==
+default-browser-id@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
+ integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
+ dependencies:
+ bplist-parser "^0.2.0"
+ untildify "^4.0.0"
+
+default-browser@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
+ integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
+ dependencies:
+ bundle-name "^3.0.0"
+ default-browser-id "^3.0.0"
+ execa "^7.1.1"
+ titleize "^3.0.0"
+
defer-to-connect@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+define-lazy-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
+ integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
+
define-properties@^1.1.2, define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -4052,6 +4487,14 @@ define-properties@^1.1.2, define-properties@^1.1.3:
dependencies:
object-keys "^1.0.12"
+define-properties@^1.1.4, define-properties@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+ integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+ dependencies:
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
define-property@^0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
@@ -4121,15 +4564,10 @@ dicer@0.3.0:
dependencies:
streamsearch "0.1.2"
-diff-sequences@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.2.tgz#711fe6bd8a5869fe2539cee4a5152425ff671fda"
- integrity sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw==
-
-diff-sequences@^29.4.3:
- version "29.4.3"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2"
- integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==
+diff-sequences@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
+ integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
diff@^4.0.1:
version "4.0.1"
@@ -4143,13 +4581,12 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
-doctrine@1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
- integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
dependencies:
esutils "^2.0.2"
- isarray "^1.0.0"
doctrine@^3.0.0:
version "3.0.0"
@@ -4220,6 +4657,13 @@ domelementtype@^2.3.0:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+domexception@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ dependencies:
+ webidl-conversions "^5.0.0"
+
domexception@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
@@ -4363,15 +4807,10 @@ electron-to-chromium@^1.4.284:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz#911d5df67542bf7554336142eb302c5ec90bba66"
integrity sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==
-emittery@^0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
- integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
-
-emoji-regex@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
- integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+emittery@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
+ integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -4397,6 +4836,14 @@ end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
+enhanced-resolve@^5.12.0:
+ version "5.15.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
+ integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
entities@^1.1.1, entities@~1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
@@ -4427,7 +4874,7 @@ err-code@^2.0.2:
resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-error-ex@^1.2.0, error-ex@^1.3.1:
+error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
@@ -4441,34 +4888,6 @@ error-stack-parser@^2.0.1:
dependencies:
stackframe "^1.0.4"
-es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
- integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
- dependencies:
- es-to-primitive "^1.2.0"
- function-bind "^1.1.1"
- has "^1.0.3"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-keys "^1.0.12"
-
-es-abstract@^1.15.0:
- version "1.16.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161"
- integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==
- dependencies:
- es-to-primitive "^1.2.1"
- function-bind "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.1"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-inspect "^1.7.0"
- object-keys "^1.1.1"
- string.prototype.trimleft "^2.1.0"
- string.prototype.trimright "^2.1.0"
-
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
version "1.17.6"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
@@ -4486,6 +4905,74 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
+es-abstract@^1.19.0, es-abstract@^1.20.4:
+ version "1.21.2"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff"
+ integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==
+ dependencies:
+ array-buffer-byte-length "^1.0.0"
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ es-set-tostringtag "^2.0.1"
+ es-to-primitive "^1.2.1"
+ function.prototype.name "^1.1.5"
+ get-intrinsic "^1.2.0"
+ get-symbol-description "^1.0.0"
+ globalthis "^1.0.3"
+ gopd "^1.0.1"
+ has "^1.0.3"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.5"
+ is-array-buffer "^3.0.2"
+ is-callable "^1.2.7"
+ is-negative-zero "^2.0.2"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ is-string "^1.0.7"
+ is-typed-array "^1.1.10"
+ is-weakref "^1.0.2"
+ object-inspect "^1.12.3"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.4.3"
+ safe-regex-test "^1.0.0"
+ string.prototype.trim "^1.2.7"
+ string.prototype.trimend "^1.0.6"
+ string.prototype.trimstart "^1.0.6"
+ typed-array-length "^1.0.4"
+ unbox-primitive "^1.0.2"
+ which-typed-array "^1.1.9"
+
+es-abstract@^1.5.1:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+ integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+ dependencies:
+ es-to-primitive "^1.2.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-keys "^1.0.12"
+
+es-set-tostringtag@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
+ integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+ dependencies:
+ get-intrinsic "^1.1.3"
+ has "^1.0.3"
+ has-tostringtag "^1.0.0"
+
+es-shim-unscopables@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+ integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+ dependencies:
+ has "^1.0.3"
+
es-to-primitive@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
@@ -4540,7 +5027,7 @@ escape-html@~1.0.3:
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-escape-string-regexp@4.0.0:
+escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
@@ -4555,110 +5042,142 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-eslint-config-prettier@~6.15.0:
- version "6.15.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
- integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
+escodegen@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
+ integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
dependencies:
- get-stdin "^6.0.0"
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
-eslint-config-standard@~14.1.1:
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea"
- integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==
+eslint-config-prettier@^8.8.0:
+ version "8.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348"
+ integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==
-eslint-import-resolver-node@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
- integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
+eslint-config-standard@^17.0.0:
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975"
+ integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==
+
+eslint-import-resolver-node@^0.3.7:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
+ integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
dependencies:
- debug "^2.6.9"
- resolve "^1.5.0"
+ debug "^3.2.7"
+ is-core-module "^2.11.0"
+ resolve "^1.22.1"
-eslint-module-utils@^2.4.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c"
- integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==
+eslint-import-resolver-typescript@^3.5.4:
+ version "3.5.5"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
+ integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
dependencies:
- debug "^2.6.9"
- pkg-dir "^2.0.0"
+ debug "^4.3.4"
+ enhanced-resolve "^5.12.0"
+ eslint-module-utils "^2.7.4"
+ get-tsconfig "^4.5.0"
+ globby "^13.1.3"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+ synckit "^0.8.5"
-eslint-plugin-es@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.0.tgz#98cb1bc8ab0aa807977855e11ad9d1c9422d014b"
- integrity sha512-6/Jb/J/ZvSebydwbBJO1R9E5ky7YeElfK56Veh7e4QGFHCXoIXGH9HhVz+ibJLM3XJ1XjP+T7rKBLUa/Y7eIng==
+eslint-module-utils@^2.7.4:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
+ integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-es@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9"
+ integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==
dependencies:
eslint-utils "^2.0.0"
regexpp "^3.0.0"
-eslint-plugin-import@~2.20.2:
- version "2.20.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
- integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
+eslint-plugin-import@^2.27.5:
+ version "2.27.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
+ integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
dependencies:
- array-includes "^3.0.3"
- array.prototype.flat "^1.2.1"
- contains-path "^0.1.0"
- debug "^2.6.9"
- doctrine "1.5.0"
- eslint-import-resolver-node "^0.3.2"
- eslint-module-utils "^2.4.1"
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ array.prototype.flatmap "^1.3.1"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.7"
+ eslint-module-utils "^2.7.4"
has "^1.0.3"
- minimatch "^3.0.4"
- object.values "^1.1.0"
- read-pkg-up "^2.0.0"
- resolve "^1.12.0"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.values "^1.1.6"
+ resolve "^1.22.1"
+ semver "^6.3.0"
+ tsconfig-paths "^3.14.1"
-eslint-plugin-jest@~23.8.2:
- version "23.8.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.2.tgz#6f28b41c67ef635f803ebd9e168f6b73858eb8d4"
- integrity sha512-xwbnvOsotSV27MtAe7s8uGWOori0nUsrXh2f1EnpmXua8sDfY6VZhHAhHg2sqK7HBNycRQExF074XSZ7DvfoFg==
+eslint-plugin-jest@^27.2.1:
+ version "27.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.2.tgz#be4ded5f91905d9ec89aa8968d39c71f3b072c0c"
+ integrity sha512-euzbp06F934Z7UDl5ZUaRPLAc9MKjh0rMPERrHT7UhlCEwgb25kBj37TvMgWeHZVkR5I9CayswrpoaqZU1RImw==
dependencies:
- "@typescript-eslint/experimental-utils" "^2.5.0"
+ "@typescript-eslint/utils" "^5.10.0"
-eslint-plugin-node@~11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
- integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
+eslint-plugin-n@^15.7.0:
+ version "15.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90"
+ integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==
dependencies:
- eslint-plugin-es "^3.0.0"
- eslint-utils "^2.0.0"
+ builtins "^5.0.1"
+ eslint-plugin-es "^4.1.0"
+ eslint-utils "^3.0.0"
ignore "^5.1.1"
- minimatch "^3.0.4"
- resolve "^1.10.1"
- semver "^6.1.0"
+ is-core-module "^2.11.0"
+ minimatch "^3.1.2"
+ resolve "^1.22.1"
+ semver "^7.3.8"
-eslint-plugin-prettier@~3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5"
- integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==
+eslint-plugin-prettier@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
+ integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==
dependencies:
prettier-linter-helpers "^1.0.0"
-eslint-plugin-promise@~4.3.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
- integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==
+eslint-plugin-promise@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816"
+ integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==
-eslint-plugin-standard@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4"
- integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==
-
-eslint-scope@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
- integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+eslint-plugin-security@^1.7.1:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4"
+ integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==
dependencies:
- esrecurse "^4.1.0"
+ safe-regex "^2.1.1"
+
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-utils@^1.4.3:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
- integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+eslint-scope@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
+ integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
dependencies:
- eslint-visitor-keys "^1.1.0"
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
eslint-utils@^2.0.0:
version "2.0.0"
@@ -4667,87 +5186,111 @@ eslint-utils@^2.0.0:
dependencies:
eslint-visitor-keys "^1.1.0"
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
-eslint@~6.8.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
- integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+eslint-visitor-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
+ integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
+
+eslint@^8.37.0:
+ version "8.43.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094"
+ integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==
dependencies:
- "@babel/code-frame" "^7.0.0"
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.4.0"
+ "@eslint/eslintrc" "^2.0.3"
+ "@eslint/js" "8.43.0"
+ "@humanwhocodes/config-array" "^0.11.10"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
ajv "^6.10.0"
- chalk "^2.1.0"
- cross-spawn "^6.0.5"
- debug "^4.0.1"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
doctrine "^3.0.0"
- eslint-scope "^5.0.0"
- eslint-utils "^1.4.3"
- eslint-visitor-keys "^1.1.0"
- espree "^6.1.2"
- esquery "^1.0.1"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.0"
+ eslint-visitor-keys "^3.4.1"
+ espree "^9.5.2"
+ esquery "^1.4.2"
esutils "^2.0.2"
- file-entry-cache "^5.0.1"
- functional-red-black-tree "^1.0.1"
- glob-parent "^5.0.0"
- globals "^12.1.0"
- ignore "^4.0.6"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
- inquirer "^7.0.0"
is-glob "^4.0.0"
- js-yaml "^3.13.1"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.3.0"
- lodash "^4.17.14"
- minimatch "^3.0.4"
- mkdirp "^0.5.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
natural-compare "^1.4.0"
- optionator "^0.8.3"
- progress "^2.0.0"
- regexpp "^2.0.1"
- semver "^6.1.2"
- strip-ansi "^5.2.0"
- strip-json-comments "^3.0.1"
- table "^5.2.3"
+ optionator "^0.9.1"
+ strip-ansi "^6.0.1"
+ strip-json-comments "^3.1.0"
text-table "^0.2.0"
- v8-compile-cache "^2.0.3"
-espree@^6.1.2:
- version "6.1.2"
- resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
- integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
+espree@^9.5.2:
+ version "9.5.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b"
+ integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==
dependencies:
- acorn "^7.1.0"
- acorn-jsx "^5.1.0"
- eslint-visitor-keys "^1.1.0"
+ acorn "^8.8.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
-esprima@^4.0.0:
+esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
- integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
dependencies:
- estraverse "^4.0.0"
+ estraverse "^5.1.0"
-esrecurse@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
- integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
dependencies:
- estraverse "^4.1.0"
+ estraverse "^5.2.0"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
+estraverse@^4.1.1:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@@ -4827,6 +5370,21 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+execa@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43"
+ integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.1"
+ human-signals "^4.3.0"
+ is-stream "^3.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^5.1.0"
+ onetime "^6.0.0"
+ signal-exit "^3.0.7"
+ strip-final-newline "^3.0.0"
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -4845,27 +5403,15 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-expect@^29.0.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7"
- integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==
+expect@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
+ integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==
dependencies:
- "@jest/expect-utils" "^29.5.0"
- jest-get-type "^29.4.3"
- jest-matcher-utils "^29.5.0"
- jest-message-util "^29.5.0"
- jest-util "^29.5.0"
-
-expect@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.2.tgz#2ae34eb88de797c64a1541ad0f1e2ea8a7a7b492"
- integrity sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==
- dependencies:
- "@jest/expect-utils" "^29.4.2"
- jest-get-type "^29.4.2"
- jest-matcher-utils "^29.4.2"
- jest-message-util "^29.4.2"
- jest-util "^29.4.2"
+ "@jest/types" "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
express@^4.0.0, express@^4.17.1:
version "4.17.1"
@@ -4928,15 +5474,6 @@ extendable-error@^0.1.5:
resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.5.tgz#122308a7097bc89a263b2c4fbf089c78140e3b6d"
integrity sha1-EiMIpwl7yJomOyxPvwiceBQOO20=
-external-editor@^3.0.3:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
- integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
- dependencies:
- chardet "^0.7.0"
- iconv-lite "^0.4.24"
- tmp "^0.0.33"
-
extglob@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -4971,7 +5508,7 @@ fast-deep-equal@^2.0.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==
-fast-deep-equal@^3.1.1:
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@@ -4992,12 +5529,23 @@ fast-glob@^3.1.1:
merge2 "^1.3.0"
micromatch "^4.0.2"
-fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
+fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:
+ version "3.2.12"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+ integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@~2.0.6:
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
@@ -5023,12 +5571,12 @@ figures@^3.0.0:
dependencies:
escape-string-regexp "^1.0.5"
-file-entry-cache@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
- integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
dependencies:
- flat-cache "^2.0.1"
+ flat-cache "^3.0.4"
file-extension@~4.0.5:
version "4.0.5"
@@ -5074,13 +5622,6 @@ find-cache-dir@^2.0.0:
make-dir "^2.0.0"
pkg-dir "^3.0.0"
-find-up@^2.0.0, find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
find-up@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
@@ -5096,25 +5637,39 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
-flat-cache@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
- integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
dependencies:
- flatted "^2.0.0"
- rimraf "2.6.3"
- write "1.0.3"
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
-flatted@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
- integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^3.1.0:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
+ integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
fn-name@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c"
integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -5228,10 +5783,20 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-functional-red-black-tree@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
- integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+function.prototype.name@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+ integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.0"
+ functions-have-names "^1.2.2"
+
+functions-have-names@^1.2.2, functions-have-names@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
gauge@^4.0.3:
version "4.0.4"
@@ -5276,16 +5841,21 @@ get-func-name@^2.0.0:
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+ integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+
get-package-type@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-get-stdin@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
- integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
-
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -5305,11 +5875,26 @@ get-stream@^5.1.0:
dependencies:
pump "^3.0.0"
-get-stream@^6.0.0:
+get-stream@^6.0.0, get-stream@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+get-symbol-description@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+ integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+get-tsconfig@^4.5.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05"
+ integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@@ -5340,13 +5925,27 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
+glob-parent@^5.1.0, glob-parent@~5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
dependencies:
is-glob "^4.0.1"
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
glob@^7.0.0:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
@@ -5359,7 +5958,7 @@ glob@^7.0.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.1.3, glob@^7.1.4:
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -5394,12 +5993,19 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-globals@^12.1.0:
- version "12.3.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13"
- integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==
+globals@^13.19.0:
+ version "13.20.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
+ integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
dependencies:
- type-fest "^0.8.1"
+ type-fest "^0.20.2"
+
+globalthis@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
globby@11.0.0:
version "11.0.0"
@@ -5413,6 +6019,36 @@ globby@11.0.0:
merge2 "^1.3.0"
slash "^3.0.0"
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+globby@^13.1.3:
+ version "13.2.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af"
+ integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==
+ dependencies:
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.11"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^4.0.0"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
got@^6.7.1:
version "6.7.1"
resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
@@ -5462,6 +6098,16 @@ graceful-fs@^4.2.6:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+grapheme-splitter@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+ integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
graphql-auth-directives@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/graphql-auth-directives/-/graphql-auth-directives-2.1.0.tgz#85b83817844e2ec5fba8fe5de444287d6dd0f85a"
@@ -5578,6 +6224,11 @@ har-validator@~5.1.3:
ajv "^6.12.3"
har-schema "^2.0.0"
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+ integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
has-flag@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
@@ -5593,11 +6244,35 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+has-property-descriptors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+ integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+ dependencies:
+ get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+ integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
has-symbols@^1.0.0, has-symbols@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+has-symbols@^1.0.2, has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
+
has-unicode@^2.0.0, has-unicode@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
@@ -5670,10 +6345,12 @@ homedir-polyfill@^1.0.1:
dependencies:
parse-passwd "^1.0.0"
-hosted-git-info@^2.1.4:
- version "2.8.4"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
- integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ dependencies:
+ whatwg-encoding "^1.0.5"
html-encoding-sniffer@^3.0.0:
version "3.0.0"
@@ -5771,6 +6448,15 @@ http-errors@^1.7.3, http-errors@~1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
http-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
@@ -5826,6 +6512,11 @@ human-signals@^2.1.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+human-signals@^4.3.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
+ integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
+
humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
@@ -5833,7 +6524,7 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
-iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
+iconv-lite@0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -5869,16 +6560,16 @@ ignore-walk@^3.0.1:
dependencies:
minimatch "^3.0.4"
-ignore@^4.0.6:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
- integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-
ignore@^5.1.1, ignore@^5.1.4:
version "5.1.4"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
+ignore@^5.2.0:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
image-extensions@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/image-extensions/-/image-extensions-1.1.0.tgz#b8e6bf6039df0056e333502a00b6637a3105d894"
@@ -5892,6 +6583,14 @@ import-fresh@^3.0.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
import-lazy@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
@@ -5953,25 +6652,6 @@ ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-inquirer@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a"
- integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==
- dependencies:
- ansi-escapes "^4.2.1"
- chalk "^2.4.2"
- cli-cursor "^3.1.0"
- cli-width "^2.0.0"
- external-editor "^3.0.3"
- figures "^3.0.0"
- lodash "^4.17.15"
- mute-stream "0.0.8"
- run-async "^2.2.0"
- rxjs "^6.4.0"
- string-width "^4.1.0"
- strip-ansi "^5.1.0"
- through "^2.3.6"
-
insane@2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/insane/-/insane-2.6.1.tgz#c7dcae7b51c20346883b71078fad6ce0483c198f"
@@ -5985,6 +6665,15 @@ install-artifact-from-github@^1.3.3:
resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.3.3.tgz#57d89bacfa0f47d7307fe41b6247cda9f9a8079c"
integrity sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ==
+internal-slot@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
+ integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
+ dependencies:
+ get-intrinsic "^1.2.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
invariant@^2.2.2, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
@@ -6051,11 +6740,27 @@ is-accessor-descriptor@^1.0.0:
dependencies:
kind-of "^6.0.0"
+is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
+ integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.2.0"
+ is-typed-array "^1.1.10"
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
is-binary-path@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
@@ -6070,11 +6775,24 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+is-callable@^1.1.3, is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
is-callable@^1.1.4, is-callable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
@@ -6094,6 +6812,13 @@ is-ci@^2.0.0:
dependencies:
ci-info "^2.0.0"
+is-core-module@^2.11.0:
+ version "2.12.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+ integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
+ dependencies:
+ has "^1.0.3"
+
is-core-module@^2.9.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
@@ -6138,6 +6863,16 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
+is-docker@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-docker@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
+ integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
+
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -6196,6 +6931,20 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-inside-container@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
+ integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
+ dependencies:
+ is-docker "^3.0.0"
+
is-installed-globally@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
@@ -6209,11 +6958,23 @@ is-lambda@^1.0.1:
resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=
+is-negative-zero@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
+is-number-object@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+ integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -6238,6 +6999,11 @@ is-path-inside@^1.0.0:
dependencies:
path-is-inside "^1.0.1"
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -6250,11 +7016,6 @@ is-potential-custom-element-name@^1.0.1:
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
- integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
@@ -6274,6 +7035,14 @@ is-regex@^1.1.0:
dependencies:
has-symbols "^1.0.1"
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
is-relative-url@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-2.0.0.tgz#72902d7fe04b3d4792e7db15f9db84b7204c9cef"
@@ -6293,6 +7062,13 @@ is-retry-allowed@^1.0.0:
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
+is-shared-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+ integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+ dependencies:
+ call-bind "^1.0.2"
+
is-stream@^1.0.0, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -6303,6 +7079,18 @@ is-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+is-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
+ integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
is-symbol@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
@@ -6310,6 +7098,24 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
+is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typed-array@^1.1.10, is-typed-array@^1.1.9:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
+ integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -6331,11 +7137,25 @@ is-uri@~1.2.4:
parse-uri "~1.0.3"
punycode2 "~1.0.0"
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -6430,144 +7250,145 @@ iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2, iterall@^1.3.0:
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
-jest-changed-files@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.4.2.tgz#bee1fafc8b620d6251423d1978a0080546bc4376"
- integrity sha512-Qdd+AXdqD16PQa+VsWJpxR3kN0JyOCX1iugQfx5nUgAsI4gwsKviXkpclxOK9ZnwaY2IQVHz+771eAvqeOlfuw==
+jest-changed-files@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
+ integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
dependencies:
+ "@jest/types" "^27.5.1"
execa "^5.0.0"
- p-limit "^3.1.0"
+ throat "^6.0.1"
-jest-circus@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.4.2.tgz#2d00c04baefd0ee2a277014cd494d4b5970663ed"
- integrity sha512-wW3ztp6a2P5c1yOc1Cfrt5ozJ7neWmqeXm/4SYiqcSriyisgq63bwFj1NuRdSR5iqS0CMEYwSZd89ZA47W9zUg==
+jest-circus@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
+ integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==
dependencies:
- "@jest/environment" "^29.4.2"
- "@jest/expect" "^29.4.2"
- "@jest/test-result" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
chalk "^4.0.0"
co "^4.6.0"
dedent "^0.7.0"
+ expect "^27.5.1"
is-generator-fn "^2.0.0"
- jest-each "^29.4.2"
- jest-matcher-utils "^29.4.2"
- jest-message-util "^29.4.2"
- jest-runtime "^29.4.2"
- jest-snapshot "^29.4.2"
- jest-util "^29.4.2"
- p-limit "^3.1.0"
- pretty-format "^29.4.2"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
slash "^3.0.0"
stack-utils "^2.0.3"
+ throat "^6.0.1"
-jest-cli@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.4.2.tgz#94a2f913a0a7a49d11bee98ad88bf48baae941f4"
- integrity sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q==
+jest-cli@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
+ integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
dependencies:
- "@jest/core" "^29.4.2"
- "@jest/test-result" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/core" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
chalk "^4.0.0"
exit "^0.1.2"
graceful-fs "^4.2.9"
import-local "^3.0.2"
- jest-config "^29.4.2"
- jest-util "^29.4.2"
- jest-validate "^29.4.2"
+ jest-config "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
prompts "^2.0.1"
- yargs "^17.3.1"
+ yargs "^16.2.0"
-jest-config@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.4.2.tgz#15386dd9ed2f7059516915515f786b8836a98f07"
- integrity sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA==
+jest-config@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
+ integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
dependencies:
- "@babel/core" "^7.11.6"
- "@jest/test-sequencer" "^29.4.2"
- "@jest/types" "^29.4.2"
- babel-jest "^29.4.2"
+ "@babel/core" "^7.8.0"
+ "@jest/test-sequencer" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ babel-jest "^27.5.1"
chalk "^4.0.0"
ci-info "^3.2.0"
deepmerge "^4.2.2"
- glob "^7.1.3"
+ glob "^7.1.1"
graceful-fs "^4.2.9"
- jest-circus "^29.4.2"
- jest-environment-node "^29.4.2"
- jest-get-type "^29.4.2"
- jest-regex-util "^29.4.2"
- jest-resolve "^29.4.2"
- jest-runner "^29.4.2"
- jest-util "^29.4.2"
- jest-validate "^29.4.2"
+ jest-circus "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-jasmine2 "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
micromatch "^4.0.4"
parse-json "^5.2.0"
- pretty-format "^29.4.2"
+ pretty-format "^27.5.1"
slash "^3.0.0"
strip-json-comments "^3.1.1"
-jest-diff@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.2.tgz#b88502d5dc02d97f6512d73c37da8b36f49b4871"
- integrity sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==
+jest-diff@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
+ integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
dependencies:
chalk "^4.0.0"
- diff-sequences "^29.4.2"
- jest-get-type "^29.4.2"
- pretty-format "^29.4.2"
+ diff-sequences "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
-jest-diff@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63"
- integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^29.4.3"
- jest-get-type "^29.4.3"
- pretty-format "^29.5.0"
-
-jest-docblock@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.2.tgz#c78a95eedf9a24c0a6cc16cf2abdc4b8b0f2531b"
- integrity sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag==
+jest-docblock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
+ integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==
dependencies:
detect-newline "^3.0.0"
-jest-each@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.4.2.tgz#e1347aff1303f4c35470827a62c029d389c5d44a"
- integrity sha512-trvKZb0JYiCndc55V1Yh0Luqi7AsAdDWpV+mKT/5vkpnnFQfuQACV72IoRV161aAr6kAVIBpmYzwhBzm34vQkA==
+jest-each@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
+ integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==
dependencies:
- "@jest/types" "^29.4.2"
+ "@jest/types" "^27.5.1"
chalk "^4.0.0"
- jest-get-type "^29.4.2"
- jest-util "^29.4.2"
- pretty-format "^29.4.2"
+ jest-get-type "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
-jest-environment-node@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.4.2.tgz#0eab835b41e25fd0c1a72f62665fc8db08762ad2"
- integrity sha512-MLPrqUcOnNBc8zTOfqBbxtoa8/Ee8tZ7UFW7hRDQSUT+NGsvS96wlbHGTf+EFAT9KC3VNb7fWEM6oyvmxtE/9w==
+jest-environment-jsdom@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
+ integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==
dependencies:
- "@jest/environment" "^29.4.2"
- "@jest/fake-timers" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
- jest-mock "^29.4.2"
- jest-util "^29.4.2"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+ jsdom "^16.6.0"
-jest-get-type@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.2.tgz#7cb63f154bca8d8f57364d01614477d466fa43fe"
- integrity sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg==
+jest-environment-node@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
+ integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
-jest-get-type@^29.4.3:
- version "29.4.3"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5"
- integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==
+jest-get-type@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
+ integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
jest-haste-map@^25.2.6:
version "25.2.6"
@@ -6588,91 +7409,89 @@ jest-haste-map@^25.2.6:
optionalDependencies:
fsevents "^2.1.2"
-jest-haste-map@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.2.tgz#9112df3f5121e643f1b2dcbaa86ab11b0b90b49a"
- integrity sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw==
+jest-haste-map@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
+ integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==
dependencies:
- "@jest/types" "^29.4.2"
- "@types/graceful-fs" "^4.1.3"
+ "@jest/types" "^27.5.1"
+ "@types/graceful-fs" "^4.1.2"
"@types/node" "*"
anymatch "^3.0.3"
fb-watchman "^2.0.0"
graceful-fs "^4.2.9"
- jest-regex-util "^29.4.2"
- jest-util "^29.4.2"
- jest-worker "^29.4.2"
+ jest-regex-util "^27.5.1"
+ jest-serializer "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
micromatch "^4.0.4"
- walker "^1.0.8"
+ walker "^1.0.7"
optionalDependencies:
fsevents "^2.3.2"
-jest-leak-detector@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.4.2.tgz#8f05c6680e0cb46a1d577c0d3da9793bed3ea97b"
- integrity sha512-Wa62HuRJmWXtX9F00nUpWlrbaH5axeYCdyRsOs/+Rb1Vb6+qWTlB5rKwCCRKtorM7owNwKsyJ8NRDUcZ8ghYUA==
+jest-jasmine2@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
+ integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==
dependencies:
- jest-get-type "^29.4.2"
- pretty-format "^29.4.2"
-
-jest-matcher-utils@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.2.tgz#08d0bf5abf242e3834bec92c7ef5071732839e85"
- integrity sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^29.4.2"
- jest-get-type "^29.4.2"
- pretty-format "^29.4.2"
-
-jest-matcher-utils@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5"
- integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^29.5.0"
- jest-get-type "^29.4.3"
- pretty-format "^29.5.0"
-
-jest-message-util@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.2.tgz#309a2924eae6ca67cf7f25781a2af1902deee717"
- integrity sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@jest/types" "^29.4.2"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- micromatch "^4.0.4"
- pretty-format "^29.4.2"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
-jest-message-util@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e"
- integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@jest/types" "^29.5.0"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- micromatch "^4.0.4"
- pretty-format "^29.5.0"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
-jest-mock@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.4.2.tgz#e1054be66fb3e975d26d4528fcde6979e4759de8"
- integrity sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==
- dependencies:
- "@jest/types" "^29.4.2"
+ "@jest/environment" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ throat "^6.0.1"
+
+jest-leak-detector@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
+ integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==
+ dependencies:
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
+ integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-message-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
+ integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^27.5.1"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-mock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
+ integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==
+ dependencies:
+ "@jest/types" "^27.5.1"
"@types/node" "*"
- jest-util "^29.4.2"
jest-pnp-resolver@^1.2.2:
version "1.2.3"
@@ -6684,87 +7503,88 @@ jest-regex-util@^25.2.6:
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964"
integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==
-jest-regex-util@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.2.tgz#19187cca35d301f8126cf7a021dd4dcb7b58a1ca"
- integrity sha512-XYZXOqUl1y31H6VLMrrUL1ZhXuiymLKPz0BO1kEeR5xER9Tv86RZrjTm74g5l9bPJQXA/hyLdaVPN/sdqfteig==
+jest-regex-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
+ integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
-jest-resolve-dependencies@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.2.tgz#6359db606f5967b68ca8bbe9dbc07a4306c12bf7"
- integrity sha512-6pL4ptFw62rjdrPk7rRpzJYgcRqRZNsZTF1VxVTZMishbO6ObyWvX57yHOaNGgKoADtAHRFYdHQUEvYMJATbDg==
+jest-resolve-dependencies@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
+ integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
dependencies:
- jest-regex-util "^29.4.2"
- jest-snapshot "^29.4.2"
+ "@jest/types" "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-snapshot "^27.5.1"
-jest-resolve@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.4.2.tgz#8831f449671d08d161fe493003f61dc9b55b808e"
- integrity sha512-RtKWW0mbR3I4UdkOrW7552IFGLYQ5AF9YrzD0FnIOkDu0rAMlA5/Y1+r7lhCAP4nXSBTaE7ueeqj6IOwZpgoqw==
+jest-resolve@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
+ integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
dependencies:
+ "@jest/types" "^27.5.1"
chalk "^4.0.0"
graceful-fs "^4.2.9"
- jest-haste-map "^29.4.2"
+ jest-haste-map "^27.5.1"
jest-pnp-resolver "^1.2.2"
- jest-util "^29.4.2"
- jest-validate "^29.4.2"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
resolve "^1.20.0"
- resolve.exports "^2.0.0"
+ resolve.exports "^1.1.0"
slash "^3.0.0"
-jest-runner@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.4.2.tgz#2bcecf72303369df4ef1e6e983c22a89870d5125"
- integrity sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg==
+jest-runner@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
+ integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==
dependencies:
- "@jest/console" "^29.4.2"
- "@jest/environment" "^29.4.2"
- "@jest/test-result" "^29.4.2"
- "@jest/transform" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/console" "^27.5.1"
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
chalk "^4.0.0"
- emittery "^0.13.1"
+ emittery "^0.8.1"
graceful-fs "^4.2.9"
- jest-docblock "^29.4.2"
- jest-environment-node "^29.4.2"
- jest-haste-map "^29.4.2"
- jest-leak-detector "^29.4.2"
- jest-message-util "^29.4.2"
- jest-resolve "^29.4.2"
- jest-runtime "^29.4.2"
- jest-util "^29.4.2"
- jest-watcher "^29.4.2"
- jest-worker "^29.4.2"
- p-limit "^3.1.0"
- source-map-support "0.5.13"
+ jest-docblock "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-leak-detector "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ source-map-support "^0.5.6"
+ throat "^6.0.1"
-jest-runtime@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.4.2.tgz#d86b764c5b95d76cb26ed1f32644e99de5d5c134"
- integrity sha512-3fque9vtpLzGuxT9eZqhxi+9EylKK/ESfhClv4P7Y9sqJPs58LjVhTt8jaMp/pRO38agll1CkSu9z9ieTQeRrw==
+jest-runtime@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
+ integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==
dependencies:
- "@jest/environment" "^29.4.2"
- "@jest/fake-timers" "^29.4.2"
- "@jest/globals" "^29.4.2"
- "@jest/source-map" "^29.4.2"
- "@jest/test-result" "^29.4.2"
- "@jest/transform" "^29.4.2"
- "@jest/types" "^29.4.2"
- "@types/node" "*"
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/globals" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
chalk "^4.0.0"
cjs-module-lexer "^1.0.0"
collect-v8-coverage "^1.0.0"
+ execa "^5.0.0"
glob "^7.1.3"
graceful-fs "^4.2.9"
- jest-haste-map "^29.4.2"
- jest-message-util "^29.4.2"
- jest-mock "^29.4.2"
- jest-regex-util "^29.4.2"
- jest-resolve "^29.4.2"
- jest-snapshot "^29.4.2"
- jest-util "^29.4.2"
- semver "^7.3.5"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
slash "^3.0.0"
strip-bom "^4.0.0"
@@ -6775,35 +7595,41 @@ jest-serializer@^25.2.6:
dependencies:
graceful-fs "^4.2.4"
-jest-snapshot@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.4.2.tgz#ba1fb9abb279fd2c85109ff1757bc56b503bbb3a"
- integrity sha512-PdfubrSNN5KwroyMH158R23tWcAXJyx4pvSvWls1dHoLCaUhGul9rsL3uVjtqzRpkxlkMavQjGuWG1newPgmkw==
+jest-serializer@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
+ integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==
dependencies:
- "@babel/core" "^7.11.6"
+ "@types/node" "*"
+ graceful-fs "^4.2.9"
+
+jest-snapshot@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
+ integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==
+ dependencies:
+ "@babel/core" "^7.7.2"
"@babel/generator" "^7.7.2"
- "@babel/plugin-syntax-jsx" "^7.7.2"
"@babel/plugin-syntax-typescript" "^7.7.2"
"@babel/traverse" "^7.7.2"
- "@babel/types" "^7.3.3"
- "@jest/expect-utils" "^29.4.2"
- "@jest/transform" "^29.4.2"
- "@jest/types" "^29.4.2"
- "@types/babel__traverse" "^7.0.6"
+ "@babel/types" "^7.0.0"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__traverse" "^7.0.4"
"@types/prettier" "^2.1.5"
babel-preset-current-node-syntax "^1.0.0"
chalk "^4.0.0"
- expect "^29.4.2"
+ expect "^27.5.1"
graceful-fs "^4.2.9"
- jest-diff "^29.4.2"
- jest-get-type "^29.4.2"
- jest-haste-map "^29.4.2"
- jest-matcher-utils "^29.4.2"
- jest-message-util "^29.4.2"
- jest-util "^29.4.2"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
natural-compare "^1.4.0"
- pretty-format "^29.4.2"
- semver "^7.3.5"
+ pretty-format "^27.5.1"
+ semver "^7.3.2"
jest-util@^25.2.6:
version "25.2.6"
@@ -6815,54 +7641,41 @@ jest-util@^25.2.6:
is-ci "^2.0.0"
make-dir "^3.0.0"
-jest-util@^29.0.0, jest-util@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f"
- integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==
+jest-util@^27.0.0, jest-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
+ integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
dependencies:
- "@jest/types" "^29.5.0"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
chalk "^4.0.0"
ci-info "^3.2.0"
graceful-fs "^4.2.9"
picomatch "^2.2.3"
-jest-util@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.2.tgz#3db8580b295df453a97de4a1b42dd2578dabd2c2"
- integrity sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==
+jest-validate@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
+ integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==
dependencies:
- "@jest/types" "^29.4.2"
- "@types/node" "*"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- graceful-fs "^4.2.9"
- picomatch "^2.2.3"
-
-jest-validate@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.4.2.tgz#3b3f8c4910ab9a3442d2512e2175df6b3f77b915"
- integrity sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q==
- dependencies:
- "@jest/types" "^29.4.2"
+ "@jest/types" "^27.5.1"
camelcase "^6.2.0"
chalk "^4.0.0"
- jest-get-type "^29.4.2"
+ jest-get-type "^27.5.1"
leven "^3.1.0"
- pretty-format "^29.4.2"
+ pretty-format "^27.5.1"
-jest-watcher@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.4.2.tgz#09c0f4c9a9c7c0807fcefb1445b821c6f7953b7c"
- integrity sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w==
+jest-watcher@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
+ integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
dependencies:
- "@jest/test-result" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
"@types/node" "*"
ansi-escapes "^4.2.1"
chalk "^4.0.0"
- emittery "^0.13.1"
- jest-util "^29.4.2"
+ jest-util "^27.5.1"
string-length "^4.0.1"
jest-worker@^25.2.6:
@@ -6873,25 +7686,23 @@ jest-worker@^25.2.6:
merge-stream "^2.0.0"
supports-color "^7.0.0"
-jest-worker@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.2.tgz#d9b2c3bafc69311d84d94e7fb45677fc8976296f"
- integrity sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw==
+jest-worker@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+ integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
dependencies:
"@types/node" "*"
- jest-util "^29.4.2"
merge-stream "^2.0.0"
supports-color "^8.0.0"
-jest@29.4:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest/-/jest-29.4.2.tgz#4c2127d03a71dc187f386156ef155dbf323fb7be"
- integrity sha512-+5hLd260vNIHu+7ZgMIooSpKl7Jp5pHKb51e73AJU3owd5dEo/RfVwHbA/na3C/eozrt3hJOLGf96c7EWwIAzg==
+jest@^27.2.4:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
+ integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
dependencies:
- "@jest/core" "^29.4.2"
- "@jest/types" "^29.4.2"
+ "@jest/core" "^27.5.1"
import-local "^3.0.2"
- jest-cli "^29.4.2"
+ jest-cli "^27.5.1"
jmespath@0.15.0:
version "0.15.0"
@@ -6916,11 +7727,51 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+jsdom@^16.6.0:
+ version "16.7.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
+ integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
+ dependencies:
+ abab "^2.0.5"
+ acorn "^8.2.4"
+ acorn-globals "^6.0.0"
+ cssom "^0.4.4"
+ cssstyle "^2.3.0"
+ data-urls "^2.0.0"
+ decimal.js "^10.2.1"
+ domexception "^2.0.1"
+ escodegen "^2.0.0"
+ form-data "^3.0.0"
+ html-encoding-sniffer "^2.0.1"
+ http-proxy-agent "^4.0.1"
+ https-proxy-agent "^5.0.0"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.0"
+ parse5 "6.0.1"
+ saxes "^5.0.1"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.0.0"
+ w3c-hr-time "^1.0.2"
+ w3c-xmlserializer "^2.0.0"
+ webidl-conversions "^6.1.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.5.0"
+ ws "^7.4.6"
+ xml-name-validator "^3.0.0"
+
jsdom@~22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8"
@@ -6990,11 +7841,18 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-json5@^2.1.2, json5@^2.2.2, json5@^2.2.3:
+json5@2.x, json5@^2.1.2, json5@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+json5@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
jsonwebtoken@^8.3.0, jsonwebtoken@~8.5.1:
version "8.5.1"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
@@ -7105,7 +7963,15 @@ levenary@^1.1.1:
dependencies:
leven "^3.1.0"
-levn@^0.3.0, levn@~0.3.0:
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
@@ -7127,24 +7993,6 @@ linkifyjs@~2.1.8:
react "^16.4.2"
react-dom "^16.4.2"
-load-json-file@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
- integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
locate-path@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
@@ -7160,6 +8008,13 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
lodash-es@^4.17.11:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
@@ -7220,6 +8075,11 @@ lodash.memoize@4.x:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
lodash.mergewith@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
@@ -7235,11 +8095,6 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
-lodash.unescape@4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
- integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
-
lodash@4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
@@ -7250,7 +8105,7 @@ lodash@^4.15.0, lodash@^4.17.14, lodash@~4.17.11, lodash@~4.17.14:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
-lodash@^4.17.13, lodash@^4.17.15, lodash@~4.17.21:
+lodash@^4.17.13, lodash@^4.17.15, lodash@^4.7.0, lodash@~4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -7428,6 +8283,11 @@ merge2@^1.3.0:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
+merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
metascraper-audio@^5.34.4:
version "5.34.4"
resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.34.4.tgz#84437c3962a9186cda69510229f6b68e6a25563a"
@@ -7639,6 +8499,11 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+mimic-fn@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
+ integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+
mimic-fn@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b"
@@ -7666,7 +8531,7 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-minimatch@^3.1.1:
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -7692,7 +8557,7 @@ minimist@0.0.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@@ -7835,11 +8700,6 @@ mustache@^4.2.0:
resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
-mute-stream@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
- integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-
mz@^2.4.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
@@ -7876,6 +8736,11 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+natural-compare-lite@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
+ integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -8087,16 +8952,6 @@ nopt@~1.0.10:
dependencies:
abbrev "1"
-normalize-package-data@^2.3.2:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
- integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
- dependencies:
- hosted-git-info "^2.1.4"
- resolve "^1.10.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
@@ -8146,6 +9001,13 @@ npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
+npm-run-path@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
+ integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
+ dependencies:
+ path-key "^4.0.0"
+
npmlog@^4.0.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@@ -8185,6 +9047,11 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+nwsapi@^2.2.0:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2"
+ integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==
+
nwsapi@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5"
@@ -8214,6 +9081,11 @@ object-hash@^2.0.3:
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea"
integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==
+object-inspect@^1.12.3, object-inspect@^1.9.0:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+ integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+
object-inspect@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
@@ -8246,6 +9118,16 @@ object.assign@^4.1.0:
has-symbols "^1.0.0"
object-keys "^1.0.11"
+object.assign@^4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+ integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
object.getownpropertydescriptors@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
@@ -8269,15 +9151,14 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
-object.values@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
- integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+object.values@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
+ integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.12.0"
- function-bind "^1.1.1"
- has "^1.0.3"
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
on-finished@~2.3.0:
version "2.3.0"
@@ -8293,13 +9174,30 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
-onetime@^5.1.0, onetime@^5.1.2:
+onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
dependencies:
mimic-fn "^2.1.0"
+onetime@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
+ integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
+ dependencies:
+ mimic-fn "^4.0.0"
+
+open@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
+ integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
+ dependencies:
+ default-browser "^4.0.0"
+ define-lazy-prop "^3.0.0"
+ is-inside-container "^1.0.0"
+ is-wsl "^2.2.0"
+
optimism@^0.10.0:
version "0.10.2"
resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.10.2.tgz#626b6fd28b0923de98ecb36a3fd2d3d4e5632dd9"
@@ -8307,7 +9205,7 @@ optimism@^0.10.0:
dependencies:
"@wry/context" "^0.4.0"
-optionator@^0.8.3:
+optionator@^0.8.1:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
@@ -8319,12 +9217,24 @@ optionator@^0.8.3:
type-check "~0.3.2"
word-wrap "~1.2.3"
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+os-tmpdir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
@@ -8347,13 +9257,6 @@ p-finally@^1.0.0:
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
p-limit@^2.0.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
@@ -8368,20 +9271,13 @@ p-limit@^2.2.0:
dependencies:
p-try "^2.0.0"
-p-limit@^3.0.2, p-limit@^3.1.0:
+p-limit@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
dependencies:
yocto-queue "^0.1.0"
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
p-locate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
@@ -8396,7 +9292,7 @@ p-locate@^4.1.0:
dependencies:
p-limit "^2.2.0"
-p-locate@~5.0.0:
+p-locate@^5.0.0, p-locate@~5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
@@ -8415,11 +9311,6 @@ p-reflect@~2.1.0:
resolved "https://registry.yarnpkg.com/p-reflect/-/p-reflect-2.1.0.tgz#5d67c7b3c577c4e780b9451fc9129675bd99fe67"
integrity sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
@@ -8449,13 +9340,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
- dependencies:
- error-ex "^1.2.0"
-
parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -8489,6 +9373,11 @@ parse5-htmlparser2-tree-adapter@^7.0.0:
domhandler "^5.0.2"
parse5 "^7.0.0"
+parse5@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
parse5@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
@@ -8556,6 +9445,11 @@ path-key@^3.0.0, path-key@^3.1.0:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+path-key@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
+ integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
+
path-parse@^1.0.6, path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
@@ -8566,13 +9460,6 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-path-type@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
- integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
- dependencies:
- pify "^2.0.0"
-
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -8598,11 +9485,6 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
@@ -8625,13 +9507,6 @@ pirates@^4.0.1, pirates@^4.0.4:
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
-pkg-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
- integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
- dependencies:
- find-up "^2.1.0"
-
pkg-dir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
@@ -8660,6 +9535,11 @@ postcss@^7.0.27:
source-map "^0.6.1"
supports-color "^6.1.0"
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -8677,28 +9557,19 @@ prettier-linter-helpers@^1.0.0:
dependencies:
fast-diff "^1.1.2"
-prettier@~2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
- integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==
+prettier@^2.8.7:
+ version "2.8.8"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
+ integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
-pretty-format@^29.0.0, pretty-format@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a"
- integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==
+pretty-format@^27.0.0, pretty-format@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
+ integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
dependencies:
- "@jest/schemas" "^29.4.3"
+ ansi-regex "^5.0.1"
ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
-pretty-format@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.2.tgz#64bf5ccc0d718c03027d94ac957bdd32b3fb2401"
- integrity sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==
- dependencies:
- "@jest/schemas" "^29.4.2"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
+ react-is "^17.0.1"
private@^0.1.8:
version "0.1.8"
@@ -8883,10 +9754,10 @@ react-is@^16.8.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
-react-is@^18.0.0:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
- integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+react-is@^17.0.1:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+ integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react@^16.4.2:
version "16.9.0"
@@ -8897,23 +9768,6 @@ react@^16.4.2:
object-assign "^4.1.1"
prop-types "^15.6.2"
-read-pkg-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
- integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
- dependencies:
- find-up "^2.0.0"
- read-pkg "^2.0.0"
-
-read-pkg@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
- integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
- dependencies:
- load-json-file "^2.0.0"
- normalize-package-data "^2.3.2"
- path-type "^2.0.0"
-
readable-stream@^2.0.2, readable-stream@^2.0.6:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
@@ -9028,10 +9882,19 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
-regexpp@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
- integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+regexp-tree@~0.1.1:
+ version "0.1.27"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd"
+ integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==
+
+regexp.prototype.flags@^1.4.3:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
+ integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ functions-have-names "^1.2.3"
regexpp@^3.0.0:
version "3.0.0"
@@ -9174,17 +10037,22 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
-resolve.exports@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e"
- integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==
+resolve.exports@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999"
+ integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.3, resolve@^1.5.0:
+resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.3:
version "1.15.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
@@ -9200,6 +10068,15 @@ resolve@^1.20.0, resolve@^1.3.2:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+resolve@^1.22.1:
+ version "1.22.2"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+ integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
+ dependencies:
+ is-core-module "^2.11.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
responselike@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
@@ -9207,14 +10084,6 @@ responselike@^2.0.0:
dependencies:
lowercase-keys "^2.0.0"
-restore-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
- integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
- dependencies:
- onetime "^5.1.0"
- signal-exit "^3.0.2"
-
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@@ -9230,13 +10099,6 @@ reusify@^1.0.0:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-rimraf@2.6.3:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
rimraf@^2.6.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@@ -9244,7 +10106,7 @@ rimraf@^2.6.1:
dependencies:
glob "^7.1.3"
-rimraf@^3.0.2:
+rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@@ -9266,25 +10128,18 @@ rsvp@^4.8.4:
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
-run-async@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
- integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+run-applescript@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
+ integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
dependencies:
- is-promise "^2.1.0"
+ execa "^5.0.0"
run-parallel@^1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
-rxjs@^6.4.0:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
- integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
- dependencies:
- tslib "^1.9.0"
-
rxjs@^6.6.3:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
@@ -9307,6 +10162,15 @@ safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+safe-regex-test@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+ integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-regex "^1.1.4"
+
safe-regex@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
@@ -9314,6 +10178,13 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
+safe-regex@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2"
+ integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==
+ dependencies:
+ regexp-tree "~0.1.1"
+
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -9360,6 +10231,13 @@ sax@>=0.6.0, sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+saxes@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ dependencies:
+ xmlchars "^2.2.0"
+
saxes@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
@@ -9387,11 +10265,6 @@ semver-diff@^2.0.0:
dependencies:
semver "^5.0.3"
-"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
semver@7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
@@ -9404,11 +10277,23 @@ semver@7.x:
dependencies:
lru-cache "^6.0.0"
-semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0:
+semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+semver@^7.0.0, semver@^7.3.2, semver@^7.3.7, semver@^7.3.8:
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb"
+ integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
@@ -9504,6 +10389,15 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
@@ -9524,14 +10418,10 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-slice-ansi@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
- integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
- dependencies:
- ansi-styles "^3.2.0"
- astral-regex "^1.0.0"
- is-fullwidth-code-point "^2.0.0"
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
slug@^8.2.2:
version "8.2.2"
@@ -9616,14 +10506,6 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@0.5.13:
- version "0.5.13"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
- integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
source-map-support@^0.5.16:
version "0.5.16"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
@@ -9632,6 +10514,14 @@ source-map-support@^0.5.16:
buffer-from "^1.0.0"
source-map "^0.6.0"
+source-map-support@^0.5.6:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
source-map-url@^0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
@@ -9647,36 +10537,15 @@ source-map@^0.5.0, source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-source-map@^0.6.0, source-map@^0.6.1:
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-spdx-correct@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
- integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
- integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
- integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
- integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+source-map@^0.7.3:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
+ integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
@@ -9820,14 +10689,14 @@ string-width@^1.0.1:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
- integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+string.prototype.trim@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
+ integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
dependencies:
- emoji-regex "^7.0.1"
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.1.0"
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
string.prototype.trimend@^1.0.1:
version "1.0.1"
@@ -9837,21 +10706,14 @@ string.prototype.trimend@^1.0.1:
define-properties "^1.1.3"
es-abstract "^1.17.5"
-string.prototype.trimleft@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
- integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==
+string.prototype.trimend@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
+ integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
dependencies:
- define-properties "^1.1.3"
- function-bind "^1.1.1"
-
-string.prototype.trimright@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
- integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==
- dependencies:
- define-properties "^1.1.3"
- function-bind "^1.1.1"
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
string.prototype.trimstart@^1.0.1:
version "1.0.1"
@@ -9861,6 +10723,15 @@ string.prototype.trimstart@^1.0.1:
define-properties "^1.1.3"
es-abstract "^1.17.5"
+string.prototype.trimstart@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+ integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
string_decoder@^1.1.1, string_decoder@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -9889,13 +10760,6 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
-strip-ansi@^5.1.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
- dependencies:
- ansi-regex "^4.1.0"
-
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -9923,12 +10787,12 @@ strip-final-newline@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strip-json-comments@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
- integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+strip-final-newline@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
+ integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-strip-json-comments@^3.1.1:
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -9984,6 +10848,14 @@ supports-color@^8.0.0:
dependencies:
has-flag "^4.0.0"
+supports-hyperlinks@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
+ integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
@@ -10004,15 +10876,18 @@ synchronous-promise@^2.0.10:
resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.10.tgz#e64c6fd3afd25f423963353043f4a68ebd397fd8"
integrity sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A==
-table@^5.2.3:
- version "5.4.6"
- resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
- integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+synckit@^0.8.5:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
+ integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
dependencies:
- ajv "^6.10.2"
- lodash "^4.17.14"
- slice-ansi "^2.1.0"
- string-width "^3.0.0"
+ "@pkgr/utils" "^2.3.1"
+ tslib "^2.5.0"
+
+tapable@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+ integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
tar@^4:
version "4.4.10"
@@ -10046,6 +10921,14 @@ term-size@^1.2.0:
dependencies:
execa "^0.7.0"
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
test-exclude@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@@ -10074,10 +10957,10 @@ thenify-all@^1.0.0:
dependencies:
any-promise "^1.0.0"
-through@^2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+throat@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe"
+ integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==
timed-out@^4.0.0:
version "4.0.1"
@@ -10107,6 +10990,11 @@ titleize@1.0.0:
resolved "https://registry.yarnpkg.com/titleize/-/titleize-1.0.0.tgz#7d350722061830ba6617631e0cfd3ea08398d95a"
integrity sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo=
+titleize@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
+ integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
+
tlds@^1.187.0:
version "1.203.1"
resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.203.1.tgz#4dc9b02f53de3315bc98b80665e13de3edfc1dfc"
@@ -10129,13 +11017,6 @@ tldts@~6.0.1:
dependencies:
tldts-core "^6.0.3"
-tmp@^0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
- dependencies:
- os-tmpdir "~1.0.2"
-
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -10195,6 +11076,16 @@ touch@^3.1.0:
dependencies:
nopt "~1.0.10"
+tough-cookie@^4.0.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
tough-cookie@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
@@ -10213,6 +11104,13 @@ tough-cookie@~2.5.0:
psl "^1.1.28"
punycode "^2.1.1"
+tr46@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
+ integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
+ dependencies:
+ punycode "^2.1.1"
+
tr46@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469"
@@ -10260,19 +11158,19 @@ ts-invariant@^0.4.0:
dependencies:
tslib "^1.9.3"
-ts-jest@^29.1.0:
- version "29.1.0"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891"
- integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==
+ts-jest@^27.0.5:
+ version "27.1.5"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297"
+ integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==
dependencies:
bs-logger "0.x"
fast-json-stable-stringify "2.x"
- jest-util "^29.0.0"
- json5 "^2.2.3"
+ jest-util "^27.0.0"
+ json5 "2.x"
lodash.memoize "4.x"
make-error "1.x"
semver "7.x"
- yargs-parser "^21.0.1"
+ yargs-parser "20.x"
ts-node@^10.9.1:
version "10.9.1"
@@ -10293,16 +11191,38 @@ ts-node@^10.9.1:
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
+tsconfig-paths@^3.14.1:
+ version "3.14.2"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
+ integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
tslib@1.11.1:
version "1.11.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
-tslib@^1.10.0, tslib@^1.11.1, tslib@^1.9.0, tslib@^1.9.3:
+tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+tslib@^2.5.0:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
+ integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
+
+tsutils@^3.21.0:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -10315,6 +11235,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -10327,6 +11254,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -10337,11 +11269,6 @@ type-fest@^0.3.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
-type-fest@^0.8.1:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
- integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -10355,6 +11282,15 @@ type@^1.0.1:
resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179"
integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==
+typed-array-length@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+ integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+ dependencies:
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ is-typed-array "^1.1.9"
+
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
@@ -10362,10 +11298,20 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
-typescript@^5.0.4:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"
- integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
+typescript@^4.9.4:
+ version "4.9.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+ integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+
+unbox-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+ integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+ dependencies:
+ call-bind "^1.0.2"
+ has-bigints "^1.0.2"
+ has-symbols "^1.0.3"
+ which-boxed-primitive "^1.0.2"
undefsafe@^2.0.2:
version "2.0.2"
@@ -10458,6 +11404,11 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
+untildify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
+ integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+
unzip-response@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
@@ -10610,19 +11561,14 @@ v8-compile-cache-lib@^3.0.1:
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
-v8-compile-cache@^2.0.3:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
- integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
-
-v8-to-istanbul@^9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4"
- integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==
+v8-to-istanbul@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
+ integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==
dependencies:
- "@jridgewell/trace-mapping" "^0.3.12"
"@types/istanbul-lib-coverage" "^2.0.1"
convert-source-map "^1.6.0"
+ source-map "^0.7.3"
v8flags@^3.1.1:
version "3.1.3"
@@ -10631,14 +11577,6 @@ v8flags@^3.1.1:
dependencies:
homedir-polyfill "^1.0.1"
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
validator@^13.9.0:
version "13.9.0"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855"
@@ -10668,6 +11606,20 @@ video-extensions@~1.2.0:
resolved "https://registry.yarnpkg.com/video-extensions/-/video-extensions-1.2.0.tgz#62f449f403b853f02da40964cbf34143f7d96731"
integrity sha512-TriMl18BHEsh2KuuSA065tbu4SNAC9fge7k8uKoTTofTq89+Xsg4K1BGbmSVETwUZhqSjd9KwRCNwXAW/buXMg==
+w3c-hr-time@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ dependencies:
+ xml-name-validator "^3.0.0"
+
w3c-xmlserializer@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073"
@@ -10675,18 +11627,35 @@ w3c-xmlserializer@^4.0.0:
dependencies:
xml-name-validator "^4.0.0"
-walker@^1.0.7, walker@^1.0.8, walker@~1.0.5:
+walker@^1.0.7, walker@~1.0.5:
version "1.0.8"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
dependencies:
makeerror "1.0.12"
+webidl-conversions@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
webidl-conversions@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
whatwg-encoding@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
@@ -10694,6 +11663,11 @@ whatwg-encoding@^2.0.0:
dependencies:
iconv-lite "0.6.3"
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
whatwg-mimetype@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
@@ -10707,6 +11681,38 @@ whatwg-url@^12.0.0, whatwg-url@^12.0.1:
tr46 "^4.1.1"
webidl-conversions "^7.0.0"
+whatwg-url@^8.0.0, whatwg-url@^8.5.0:
+ version "8.7.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
+ integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
+ dependencies:
+ lodash "^4.7.0"
+ tr46 "^2.1.0"
+ webidl-conversions "^6.1.0"
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-typed-array@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
+ integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+ is-typed-array "^1.1.10"
+
which@^1.2.9:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
@@ -10750,7 +11756,7 @@ widest-line@^2.0.0:
dependencies:
string-width "^2.1.1"
-word-wrap@~1.2.3:
+word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@@ -10788,21 +11794,6 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
-write-file-atomic@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
- integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
- dependencies:
- imurmurhash "^0.1.4"
- signal-exit "^3.0.7"
-
-write@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
- integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
- dependencies:
- mkdirp "^0.5.1"
-
"ws@^5.2.0 || ^6.0.0 || ^7.0.0":
version "7.5.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
@@ -10815,6 +11806,11 @@ ws@^6.0.0:
dependencies:
async-limiter "~1.0.0"
+ws@^7.4.6:
+ version "7.5.9"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+ integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
ws@^8.13.0:
version "8.13.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
@@ -10825,6 +11821,11 @@ xdg-basedir@^3.0.0:
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
xml-name-validator@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
@@ -10893,23 +11894,23 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yargs-parser@^21.0.1, yargs-parser@^21.1.1:
- version "21.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
- integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+yargs-parser@20.x, yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@^17.3.1:
- version "17.6.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541"
- integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
dependencies:
- cliui "^8.0.1"
+ cliui "^7.0.2"
escalade "^3.1.1"
get-caller-file "^2.0.5"
require-directory "^2.1.1"
- string-width "^4.2.3"
+ string-width "^4.2.0"
y18n "^5.0.5"
- yargs-parser "^21.1.1"
+ yargs-parser "^20.2.2"
yn@3.1.1:
version "3.1.1"
diff --git a/cypress/create-cucumber-html-report.js b/cypress/create-cucumber-html-report.js
new file mode 100644
index 000000000..9720f4281
--- /dev/null
+++ b/cypress/create-cucumber-html-report.js
@@ -0,0 +1,12 @@
+const report = require("multiple-cucumber-html-reporter");
+
+const reportTitle = "Ocelot webapp end-to-end test report"
+
+report.generate({
+ jsonDir: "reports/json_logs",
+ reportPath: "./reports/cucumber_html_report",
+ pageTitle: reportTitle,
+ reportName: reportTitle,
+ pageFooter: "
",
+ hideMetadata: true
+});
\ No newline at end of file
diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js
index 2d2cefc47..b1d80575e 100644
--- a/cypress/cypress.config.js
+++ b/cypress/cypress.config.js
@@ -21,13 +21,7 @@ async function setupNodeEvents(on, config) {
return testStore[name]
},
});
-
- on("after:run", (results) => {
- if (results) {
- console.log(results.status);
- }
- });
-
+
return config;
}
@@ -42,10 +36,7 @@ module.exports = defineConfig({
baseUrl: "http://localhost:3000",
specPattern: "cypress/e2e/**/*.feature",
supportFile: "cypress/support/e2e.js",
- retries: {
- runMode: 2,
- openMode: 0,
- },
+ retries: 0,
video: false,
setupNodeEvents,
},
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
index b80501ce2..92e8bf1f7 100644
--- a/cypress/support/commands.js
+++ b/cypress/support/commands.js
@@ -13,9 +13,8 @@
// Cypress.Commands.add('login', (email, password) => { ... })
/* globals Cypress cy */
-import "cypress-file-upload";
import { GraphQLClient, request } from 'graphql-request'
-import CONFIG from '../../backend/build/config'
+import CONFIG from '../../backend/build/src/config'
const authenticatedHeaders = (variables) => {
const mutation = `
diff --git a/cypress/support/factories.js b/cypress/support/factories.js
index 825026346..a901d867f 100644
--- a/cypress/support/factories.js
+++ b/cypress/support/factories.js
@@ -1,5 +1,5 @@
-import Factory from '../../backend/build/db/factories'
-import { getNeode } from '../../backend/build/db/neo4j'
+import Factory from '../../backend/build/src/db/factories'
+import { getNeode } from '../../backend/build/src/db/neo4j'
const neodeInstance = getNeode()
diff --git a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js
index 019cc956a..478851f92 100644
--- a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js
+++ b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js
@@ -1,28 +1,27 @@
import { Then } from "@badeball/cypress-cucumber-preprocessor";
Then("I should be able to {string} a teaser image", condition => {
- // cy.reload()
+ let postTeaserImage = ""
+
switch(condition){
- case 'change':
- cy.get('.delete-image-button')
+ case "change":
+ postTeaserImage = "humanconnection.png"
+ cy.get(".delete-image-button")
.click()
- cy.fixture('humanconnection.png').as('postTeaserImage').then(function() {
- cy.get("#postdropzone").upload(
- { fileContent: this.postTeaserImage, fileName: 'humanconnection.png', mimeType: "image/png" },
- { subjectType: "drag-n-drop", force: true }
- ).wait(750);
- })
+ cy.get("#postdropzone").selectFile(
+ { contents: `cypress/fixtures/${postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" },
+ { action: "drag-drop", force: true }
+ ).wait(750);
break;
- case 'add':
- cy.fixture('onourjourney.png').as('postTeaserImage').then(function() {
- cy.get("#postdropzone").upload(
- { fileContent: this.postTeaserImage, fileName: 'onourjourney.png', mimeType: "image/png" },
- { subjectType: "drag-n-drop", force: true }
- ).wait(750);
- })
+ case "add":
+ postTeaserImage = "onourjourney.png"
+ cy.get("#postdropzone").selectFile(
+ { contents: `cypress/fixtures/${postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" },
+ { action: "drag-drop", force: true }
+ ).wait(750);
break;
- case 'remove':
- cy.get('.delete-image-button')
+ case "remove":
+ cy.get(".delete-image-button")
.click()
break;
}
diff --git a/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js b/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js
index 27be5a99d..b1b2401e2 100644
--- a/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js
+++ b/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js
@@ -2,13 +2,11 @@ import { Then } from "@badeball/cypress-cucumber-preprocessor";
Then("I should be able to change my profile picture", () => {
const avatarUpload = "onourjourney.png";
-
- cy.fixture(avatarUpload, "base64").then(fileContent => {
- cy.get("#customdropzone").upload(
- { fileContent, fileName: avatarUpload, mimeType: "image/png" },
- { subjectType: "drag-n-drop", force: true }
- );
- });
+
+ cy.get("#customdropzone").selectFile(
+ { contents: `cypress/fixtures/${avatarUpload}`, fileName: avatarUpload, mimeType: "image/png" },
+ { action: "drag-drop" }
+ );
cy.get(".profile-page-avatar img")
.should("have.attr", "src")
.and("contains", "onourjourney");
diff --git a/cypress/support/step_definitions/common/I_am_logged_in_as_{string}.js b/cypress/support/step_definitions/common/I_am_logged_in_as_{string}.js
index a44d522da..1dbaa3d94 100644
--- a/cypress/support/step_definitions/common/I_am_logged_in_as_{string}.js
+++ b/cypress/support/step_definitions/common/I_am_logged_in_as_{string}.js
@@ -1,5 +1,5 @@
import { Given } from "@badeball/cypress-cucumber-preprocessor";
-import encode from '../../../../backend/build/jwt/encode'
+import encode from '../../../../backend/build/src/jwt/encode'
Given("I am logged in as {string}", slug => {
cy.neode()
diff --git a/deployment/TODO-next-update.md b/deployment/TODO-next-update.md
index 8630275b7..8e30d1f47 100644
--- a/deployment/TODO-next-update.md
+++ b/deployment/TODO-next-update.md
@@ -2,6 +2,10 @@
When you overtake this deploy and rebrand repo to your network you have to recognize the following changes and doings:
+## Version >= 2.7.0 with 'ocelotDockerVersionTag' 2.7.0-470
+
+- You have to rename all `.js` files to `.ts` in `branding/constants`
+
## Version >= 2.4.0 with 'ocelotDockerVersionTag' 2.4.0-298
- You have to set `SHOW_CONTENT_FILTER_HEADER_MENU` and `SHOW_CONTENT_FILTER_MASONRY_GRID` in `branding/constants/filter.js` originally in main code file `webapp/constants/filter.js` to your preferred value.
diff --git a/deployment/configurations/stage.ocelot.social b/deployment/configurations/stage.ocelot.social
index 3056eec04..fdc2e52fa 160000
--- a/deployment/configurations/stage.ocelot.social
+++ b/deployment/configurations/stage.ocelot.social
@@ -1 +1 @@
-Subproject commit 3056eec040cf7a052a5d08ab4cac7129355ab652
+Subproject commit fdc2e52fa444b300e1c4736600bc0e9ae3314222
diff --git a/deployment/scripts/cluster.reseed.sh b/deployment/scripts/cluster.reseed.sh
index 4d544bfe8..7bd44153b 100755
--- a/deployment/scripts/cluster.reseed.sh
+++ b/deployment/scripts/cluster.reseed.sh
@@ -15,4 +15,4 @@ echo "Using CONFIGURATION=${CONFIGURATION}"
KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml}
# clean & seed
-kubectl --kubeconfig=${KUBECONFIG} -n default exec -it $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await build/db/clean.js && node --experimental-repl-await build/db/seed.js"
\ No newline at end of file
+kubectl --kubeconfig=${KUBECONFIG} -n default exec -it $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await build/src/db/clean.js && node --experimental-repl-await build/src/db/seed.js"
\ No newline at end of file
diff --git a/deployment/src/docker/backend.Dockerfile b/deployment/src/docker/backend.Dockerfile
index 2d8132d0c..a0b6e4ed4 100644
--- a/deployment/src/docker/backend.Dockerfile
+++ b/deployment/src/docker/backend.Dockerfile
@@ -12,9 +12,9 @@ FROM $APP_IMAGE_CODE as code
ARG CONFIGURATION=example
# copy public constants and email templates into the Docker image to brand it
-COPY configurations/${CONFIGURATION}/branding/constants/emails.js src/config/
-COPY configurations/${CONFIGURATION}/branding/constants/logos.js src/config/
-COPY configurations/${CONFIGURATION}/branding/constants/metadata.js src/config/
+COPY configurations/${CONFIGURATION}/branding/constants/emails.ts src/config/
+COPY configurations/${CONFIGURATION}/branding/constants/logos.ts src/config/
+COPY configurations/${CONFIGURATION}/branding/constants/metadata.ts src/config/
COPY configurations/${CONFIGURATION}/branding/email/ src/middleware/helpers/email/
##################################################################################
@@ -38,7 +38,7 @@ COPY --from=build ${DOCKER_WORKDIR}/build ./build
COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules
# TODO - externalize the uploads so we can copy the whole folder
COPY --from=build ${DOCKER_WORKDIR}/public/img/ ./public/img/
-COPY --from=build ${DOCKER_WORKDIR}/public/providers.json ./public/providers.json
+COPY --from=build ${DOCKER_WORKDIR}/public/providers.json ./build/public/providers.json
# Copy package.json for script definitions (lock file should not be needed)
COPY --from=build ${DOCKER_WORKDIR}/package.json ./package.json
diff --git a/deployment/src/docker/maintenance.Dockerfile b/deployment/src/docker/maintenance.Dockerfile
index b699e7f20..95501252c 100644
--- a/deployment/src/docker/maintenance.Dockerfile
+++ b/deployment/src/docker/maintenance.Dockerfile
@@ -14,6 +14,7 @@ ARG CONFIGURATION=example
# copy public constants into the Docker image to brand it
COPY configurations/${CONFIGURATION}/branding/static/ static/
COPY configurations/${CONFIGURATION}/branding/constants/ constants/
+RUN /bin/sh -c 'cd constants && for f in *.ts; do mv -- "$f" "${f%.ts}.js"; done'
# locales
COPY configurations/${CONFIGURATION}/branding/locales/*.json locales/tmp/
diff --git a/deployment/src/docker/webapp.Dockerfile b/deployment/src/docker/webapp.Dockerfile
index f0c75e392..d811219c3 100644
--- a/deployment/src/docker/webapp.Dockerfile
+++ b/deployment/src/docker/webapp.Dockerfile
@@ -14,6 +14,7 @@ ARG CONFIGURATION=example
# copy public constants into the Docker image to brand it
COPY configurations/${CONFIGURATION}/branding/static/ static/
COPY configurations/${CONFIGURATION}/branding/constants/ constants/
+RUN /bin/sh -c 'cd constants && for f in *.ts; do mv -- "$f" "${f%.ts}.js"; done'
COPY configurations/${CONFIGURATION}/branding/locales/html/ locales/html/
COPY configurations/${CONFIGURATION}/branding/assets/styles/imports/ assets/styles/imports/
COPY configurations/${CONFIGURATION}/branding/assets/fonts/ assets/fonts/
diff --git a/deployment/src/kubernetes/README.md b/deployment/src/kubernetes/README.md
index 1c0c8e2d8..126c37e9c 100644
--- a/deployment/src/kubernetes/README.md
+++ b/deployment/src/kubernetes/README.md
@@ -293,7 +293,7 @@ $ kubectl -n default rollout status deployment/ocelot-neo4j --timeout=240s
$ kubectl config get-contexts
# reset and seed Neo4j database via backend for staging
-$ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await build/db/clean.js && node --experimental-repl-await build/db/seed.js"
+$ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await build/src/db/clean.js && node --experimental-repl-await build/src/db/seed.js"
```
diff --git a/package.json b/package.json
index 86d27abc6..091306e93 100644
--- a/package.json
+++ b/package.json
@@ -10,13 +10,25 @@
"url": "https://github.com/Ocelot-Social-Community/Ocelot-Social.git"
},
"cypress-cucumber-preprocessor": {
- "nonGlobalStepDefinitions": true
+ "stepDefinitions": "cypress/support/step_definitions/**/*.js",
+ "json": {
+ "enabled": true,
+ "output": "cypress/reports/json_logs/cucumber_log.json",
+ "formatter": "cucumber-json-formatter"
+ },
+ "messages": {
+ "enabled": true,
+ "output": "cypress/reports/json_logs/messages.ndjson"
+ },
+ "html": {
+ "enabled": false
+ }
},
"scripts": {
"db:seed": "cd backend && yarn run db:seed",
"db:reset": "cd backend && yarn run db:reset",
- "cypress:run": "cypress run --browser electron --config-file ./cypress/cypress.config.js",
- "cypress:open": "cypress open --browser electron --config-file ./cypress/cypress.config.js",
+ "cypress:run": "cypress run --e2e --browser electron --config-file ./cypress/cypress.config.js",
+ "cypress:open": "cypress open --e2e --browser electron --config-file ./cypress/cypress.config.js",
"cucumber:setup": "cd backend && yarn run dev",
"cucumber": "wait-on tcp:4000 && cucumber-js --require-module @babel/register --exit",
"release": "yarn version --no-git-tag-version --no-commit-hooks --no-commit && auto-changelog --latest-version $(node -p -e \"require('./package.json').version\") && cd backend && yarn version --no-git-tag-version --no-commit-hooks --no-commit --new-version $(node -p -e \"require('./../package.json').version\") && cd ../webapp && yarn version --no-git-tag-version --no-commit-hooks --no-commit --new-version $(node -p -e \"require('./../package.json').version\") && cd ../webapp/maintenance/source && yarn version --no-git-tag-version --no-commit-hooks --no-commit --new-version $(node -p -e \"require('./../../../package.json').version\")"
@@ -27,13 +39,12 @@
"@babel/register": "^7.12.10",
"@badeball/cypress-cucumber-preprocessor": "^15.1.4",
"@cypress/browserify-preprocessor": "^3.0.2",
- "@faker-js/faker": "7.6.0",
+ "@faker-js/faker": "8.0.2",
"auto-changelog": "^2.3.0",
"bcryptjs": "^2.4.3",
"cross-env": "^7.0.3",
"cucumber": "^6.0.5",
- "cypress": "^12.14.0",
- "cypress-file-upload": "^3.5.3",
+ "cypress": "^12.17.0",
"cypress-network-idle": "^1.14.2",
"date-fns": "^2.25.0",
"dotenv": "^16.3.1",
@@ -42,6 +53,7 @@
"import": "^0.0.6",
"jsonwebtoken": "^8.5.1",
"mock-socket": "^9.0.3",
+ "multiple-cucumber-html-reporter": "^3.4.0",
"neo4j-driver": "^4.3.4",
"neode": "^0.4.8",
"rosie": "^2.1.0",
diff --git a/webapp/assets/_new/icons/svgs/align-center.svg b/webapp/assets/_new/icons/svgs/align-center.svg
new file mode 100755
index 000000000..4232dff91
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/align-center.svg
@@ -0,0 +1,5 @@
+
+
+align-center
+
+
diff --git a/webapp/assets/_new/icons/svgs/align-justify.svg b/webapp/assets/_new/icons/svgs/align-justify.svg
new file mode 100755
index 000000000..ce82c7f0a
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/align-justify.svg
@@ -0,0 +1,5 @@
+
+
+align-justify
+
+
diff --git a/webapp/assets/_new/icons/svgs/align-left.svg b/webapp/assets/_new/icons/svgs/align-left.svg
new file mode 100755
index 000000000..c76e93dc9
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/align-left.svg
@@ -0,0 +1,5 @@
+
+
+align-left
+
+
diff --git a/webapp/assets/_new/icons/svgs/align-right.svg b/webapp/assets/_new/icons/svgs/align-right.svg
new file mode 100755
index 000000000..24972ed83
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/align-right.svg
@@ -0,0 +1,5 @@
+
+
+align-right
+
+
diff --git a/webapp/assets/_new/icons/svgs/angle-left.svg b/webapp/assets/_new/icons/svgs/angle-left.svg
new file mode 100755
index 000000000..826dd8e34
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/angle-left.svg
@@ -0,0 +1,5 @@
+
+
+angle-left
+
+
diff --git a/webapp/assets/_new/icons/svgs/angle-right.svg b/webapp/assets/_new/icons/svgs/angle-right.svg
new file mode 100755
index 000000000..1df45a590
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/angle-right.svg
@@ -0,0 +1,5 @@
+
+
+angle-right
+
+
diff --git a/webapp/assets/_new/icons/svgs/archive.svg b/webapp/assets/_new/icons/svgs/archive.svg
new file mode 100755
index 000000000..878713822
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/archive.svg
@@ -0,0 +1,5 @@
+
+
+archive
+
+
diff --git a/webapp/assets/_new/icons/svgs/arrow-up.svg b/webapp/assets/_new/icons/svgs/arrow-up.svg
new file mode 100755
index 000000000..f48c186c0
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/arrow-up.svg
@@ -0,0 +1,5 @@
+
+
+arrow-up
+
+
diff --git a/webapp/assets/_new/icons/svgs/bar-chart.svg b/webapp/assets/_new/icons/svgs/bar-chart.svg
new file mode 100755
index 000000000..0c853e737
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/bar-chart.svg
@@ -0,0 +1,5 @@
+
+
+bar-chart
+
+
diff --git a/webapp/assets/_new/icons/svgs/briefcase.svg b/webapp/assets/_new/icons/svgs/briefcase.svg
new file mode 100755
index 000000000..c0f6552a0
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/briefcase.svg
@@ -0,0 +1,5 @@
+
+
+briefcase
+
+
diff --git a/webapp/assets/_new/icons/svgs/bug.svg b/webapp/assets/_new/icons/svgs/bug.svg
new file mode 100755
index 000000000..66374d8bc
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/bug.svg
@@ -0,0 +1,5 @@
+
+
+bug
+
+
diff --git a/webapp/assets/_new/icons/svgs/calculator.svg b/webapp/assets/_new/icons/svgs/calculator.svg
new file mode 100755
index 000000000..657b19919
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/calculator.svg
@@ -0,0 +1,5 @@
+
+
+calculator
+
+
diff --git a/webapp/assets/_new/icons/svgs/camera.svg b/webapp/assets/_new/icons/svgs/camera.svg
new file mode 100755
index 000000000..793620544
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/camera.svg
@@ -0,0 +1,5 @@
+
+
+camera
+
+
diff --git a/webapp/assets/_new/icons/svgs/cart-plus.svg b/webapp/assets/_new/icons/svgs/cart-plus.svg
new file mode 100755
index 000000000..84ea385bd
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cart-plus.svg
@@ -0,0 +1,5 @@
+
+
+cart-plus
+
+
diff --git a/webapp/assets/_new/icons/svgs/certificate.svg b/webapp/assets/_new/icons/svgs/certificate.svg
new file mode 100755
index 000000000..341b4af3e
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/certificate.svg
@@ -0,0 +1,5 @@
+
+
+certificate
+
+
diff --git a/webapp/assets/_new/icons/svgs/chain-broken.svg b/webapp/assets/_new/icons/svgs/chain-broken.svg
new file mode 100755
index 000000000..4ba13f49c
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/chain-broken.svg
@@ -0,0 +1,5 @@
+
+
+chain-broken
+
+
diff --git a/webapp/assets/_new/icons/svgs/chain.svg b/webapp/assets/_new/icons/svgs/chain.svg
new file mode 100755
index 000000000..9d390e126
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/chain.svg
@@ -0,0 +1,5 @@
+
+
+chain
+
+
diff --git a/webapp/assets/_new/icons/svgs/chat-bubble.svg b/webapp/assets/_new/icons/svgs/chat-bubble.svg
new file mode 100644
index 000000000..377b52f2f
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/chat-bubble.svg
@@ -0,0 +1,4 @@
+
+chat-bubble
+
+
\ No newline at end of file
diff --git a/webapp/assets/_new/icons/svgs/cloud-download.svg b/webapp/assets/_new/icons/svgs/cloud-download.svg
new file mode 100755
index 000000000..fcc46456b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cloud-download.svg
@@ -0,0 +1,5 @@
+
+
+cloud-download
+
+
diff --git a/webapp/assets/_new/icons/svgs/cloud-upload.svg b/webapp/assets/_new/icons/svgs/cloud-upload.svg
new file mode 100755
index 000000000..8a0c486b2
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cloud-upload.svg
@@ -0,0 +1,5 @@
+
+
+cloud-upload
+
+
diff --git a/webapp/assets/_new/icons/svgs/cloud.svg b/webapp/assets/_new/icons/svgs/cloud.svg
new file mode 100755
index 000000000..7ee840e92
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cloud.svg
@@ -0,0 +1,5 @@
+
+
+cloud
+
+
diff --git a/webapp/assets/_new/icons/svgs/code.svg b/webapp/assets/_new/icons/svgs/code.svg
new file mode 100755
index 000000000..2581fa884
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/code.svg
@@ -0,0 +1,5 @@
+
+
+code
+
+
diff --git a/webapp/assets/_new/icons/svgs/coffee.svg b/webapp/assets/_new/icons/svgs/coffee.svg
new file mode 100755
index 000000000..302150d0a
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/coffee.svg
@@ -0,0 +1,5 @@
+
+
+coffee
+
+
diff --git a/webapp/assets/_new/icons/svgs/columns.svg b/webapp/assets/_new/icons/svgs/columns.svg
new file mode 100755
index 000000000..f77576ed4
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/columns.svg
@@ -0,0 +1,5 @@
+
+
+columns
+
+
diff --git a/webapp/assets/_new/icons/svgs/compass.svg b/webapp/assets/_new/icons/svgs/compass.svg
new file mode 100755
index 000000000..935cb5791
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/compass.svg
@@ -0,0 +1,5 @@
+
+
+compass
+
+
diff --git a/webapp/assets/_new/icons/svgs/credit-card.svg b/webapp/assets/_new/icons/svgs/credit-card.svg
new file mode 100755
index 000000000..29c1fb96f
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/credit-card.svg
@@ -0,0 +1,5 @@
+
+
+credit-card
+
+
diff --git a/webapp/assets/_new/icons/svgs/crop.svg b/webapp/assets/_new/icons/svgs/crop.svg
new file mode 100755
index 000000000..069de9d1e
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/crop.svg
@@ -0,0 +1,5 @@
+
+
+crop
+
+
diff --git a/webapp/assets/_new/icons/svgs/crosshairs.svg b/webapp/assets/_new/icons/svgs/crosshairs.svg
new file mode 100755
index 000000000..6d8b9aa04
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/crosshairs.svg
@@ -0,0 +1,5 @@
+
+
+crosshairs
+
+
diff --git a/webapp/assets/_new/icons/svgs/cube.svg b/webapp/assets/_new/icons/svgs/cube.svg
new file mode 100755
index 000000000..97fbdf121
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cube.svg
@@ -0,0 +1,5 @@
+
+
+cube
+
+
diff --git a/webapp/assets/_new/icons/svgs/cubes.svg b/webapp/assets/_new/icons/svgs/cubes.svg
new file mode 100755
index 000000000..aeb3d66d1
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cubes.svg
@@ -0,0 +1,5 @@
+
+
+cubes
+
+
diff --git a/webapp/assets/_new/icons/svgs/cut.svg b/webapp/assets/_new/icons/svgs/cut.svg
new file mode 100755
index 000000000..f04b85c3b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/cut.svg
@@ -0,0 +1,5 @@
+
+
+cut
+
+
diff --git a/webapp/assets/_new/icons/svgs/dashboard.svg b/webapp/assets/_new/icons/svgs/dashboard.svg
new file mode 100755
index 000000000..74358fd41
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/dashboard.svg
@@ -0,0 +1,5 @@
+
+
+dashboard
+
+
diff --git a/webapp/assets/_new/icons/svgs/diamond.svg b/webapp/assets/_new/icons/svgs/diamond.svg
new file mode 100755
index 000000000..5cad085d9
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/diamond.svg
@@ -0,0 +1,5 @@
+
+
+diamond
+
+
diff --git a/webapp/assets/_new/icons/svgs/exchange.svg b/webapp/assets/_new/icons/svgs/exchange.svg
new file mode 100755
index 000000000..fc8bfaa48
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/exchange.svg
@@ -0,0 +1,5 @@
+
+
+exchange
+
+
diff --git a/webapp/assets/_new/icons/svgs/exclamation-triangle.svg b/webapp/assets/_new/icons/svgs/exclamation-triangle.svg
new file mode 100755
index 000000000..aa2f7bbac
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/exclamation-triangle.svg
@@ -0,0 +1,5 @@
+
+
+exclamation-triangle
+
+
diff --git a/webapp/assets/_new/icons/svgs/expand.svg b/webapp/assets/_new/icons/svgs/expand.svg
new file mode 100755
index 000000000..dc21a7e24
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/expand.svg
@@ -0,0 +1,5 @@
+
+
+expand
+
+
diff --git a/webapp/assets/_new/icons/svgs/external-link.svg b/webapp/assets/_new/icons/svgs/external-link.svg
new file mode 100755
index 000000000..3d7f95574
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/external-link.svg
@@ -0,0 +1,5 @@
+
+
+external-link
+
+
diff --git a/webapp/assets/_new/icons/svgs/eyedropper.svg b/webapp/assets/_new/icons/svgs/eyedropper.svg
new file mode 100755
index 000000000..6cf4151ed
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/eyedropper.svg
@@ -0,0 +1,5 @@
+
+
+eyedropper
+
+
diff --git a/webapp/assets/_new/icons/svgs/facebook.svg b/webapp/assets/_new/icons/svgs/facebook.svg
new file mode 100755
index 000000000..a9e41dfb3
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/facebook.svg
@@ -0,0 +1,5 @@
+
+
+facebook
+
+
diff --git a/webapp/assets/_new/icons/svgs/female.svg b/webapp/assets/_new/icons/svgs/female.svg
new file mode 100755
index 000000000..2cbe5b470
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/female.svg
@@ -0,0 +1,5 @@
+
+
+female
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-archive.svg b/webapp/assets/_new/icons/svgs/file-archive.svg
new file mode 100755
index 000000000..94a1e7ab8
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-archive.svg
@@ -0,0 +1,5 @@
+
+
+file-archive-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-audio.svg b/webapp/assets/_new/icons/svgs/file-audio.svg
new file mode 100755
index 000000000..e253cbf94
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-audio.svg
@@ -0,0 +1,5 @@
+
+
+file-audio-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-code.svg b/webapp/assets/_new/icons/svgs/file-code.svg
new file mode 100755
index 000000000..c241a932b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-code.svg
@@ -0,0 +1,5 @@
+
+
+file-code-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-excel.svg b/webapp/assets/_new/icons/svgs/file-excel.svg
new file mode 100755
index 000000000..77a7a73b0
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-excel.svg
@@ -0,0 +1,5 @@
+
+
+file-excel-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-image.svg b/webapp/assets/_new/icons/svgs/file-image.svg
new file mode 100755
index 000000000..ba296f51b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-image.svg
@@ -0,0 +1,5 @@
+
+
+file-image-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-movie.svg b/webapp/assets/_new/icons/svgs/file-movie.svg
new file mode 100755
index 000000000..fd88fd23d
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-movie.svg
@@ -0,0 +1,5 @@
+
+
+file-movie-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-pdf.svg b/webapp/assets/_new/icons/svgs/file-pdf.svg
new file mode 100755
index 000000000..810128b55
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-pdf.svg
@@ -0,0 +1,5 @@
+
+
+file-pdf-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-photo.svg b/webapp/assets/_new/icons/svgs/file-photo.svg
new file mode 100755
index 000000000..c67616527
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-photo.svg
@@ -0,0 +1,5 @@
+
+
+file-photo-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-picture.svg b/webapp/assets/_new/icons/svgs/file-picture.svg
new file mode 100755
index 000000000..e16498317
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-picture.svg
@@ -0,0 +1,5 @@
+
+
+file-picture-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-powerpoint.svg b/webapp/assets/_new/icons/svgs/file-powerpoint.svg
new file mode 100755
index 000000000..8df8f896b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-powerpoint.svg
@@ -0,0 +1,5 @@
+
+
+file-powerpoint-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-sound.svg b/webapp/assets/_new/icons/svgs/file-sound.svg
new file mode 100755
index 000000000..cb9b5dc76
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-sound.svg
@@ -0,0 +1,5 @@
+
+
+file-sound-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-text.svg b/webapp/assets/_new/icons/svgs/file-text.svg
new file mode 100755
index 000000000..38d75ef65
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-text.svg
@@ -0,0 +1,5 @@
+
+
+file-text
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-video.svg b/webapp/assets/_new/icons/svgs/file-video.svg
new file mode 100755
index 000000000..4a6db285b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-video.svg
@@ -0,0 +1,5 @@
+
+
+file-video-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-word.svg b/webapp/assets/_new/icons/svgs/file-word.svg
new file mode 100755
index 000000000..c8447a696
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-word.svg
@@ -0,0 +1,5 @@
+
+
+file-word-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/file-zip.svg b/webapp/assets/_new/icons/svgs/file-zip.svg
new file mode 100755
index 000000000..c4eb66dd0
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/file-zip.svg
@@ -0,0 +1,5 @@
+
+
+file-zip-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/files.svg b/webapp/assets/_new/icons/svgs/files.svg
new file mode 100755
index 000000000..602a25658
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/files.svg
@@ -0,0 +1,5 @@
+
+
+files-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/film.svg b/webapp/assets/_new/icons/svgs/film.svg
new file mode 100755
index 000000000..2318d2f73
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/film.svg
@@ -0,0 +1,5 @@
+
+
+film
+
+
diff --git a/webapp/assets/_new/icons/svgs/fire.svg b/webapp/assets/_new/icons/svgs/fire.svg
new file mode 100755
index 000000000..0d579c495
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/fire.svg
@@ -0,0 +1,5 @@
+
+
+fire
+
+
diff --git a/webapp/assets/_new/icons/svgs/flask.svg b/webapp/assets/_new/icons/svgs/flask.svg
new file mode 100755
index 000000000..e1ca6bde6
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/flask.svg
@@ -0,0 +1,5 @@
+
+
+flask
+
+
diff --git a/webapp/assets/_new/icons/svgs/floppy.svg b/webapp/assets/_new/icons/svgs/floppy.svg
new file mode 100755
index 000000000..f924d3bb5
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/floppy.svg
@@ -0,0 +1,5 @@
+
+
+floppy-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/folder-open.svg b/webapp/assets/_new/icons/svgs/folder-open.svg
new file mode 100755
index 000000000..63a941b71
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/folder-open.svg
@@ -0,0 +1,5 @@
+
+
+folder-open
+
+
diff --git a/webapp/assets/_new/icons/svgs/folder.svg b/webapp/assets/_new/icons/svgs/folder.svg
new file mode 100755
index 000000000..287a37768
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/folder.svg
@@ -0,0 +1,5 @@
+
+
+folder
+
+
diff --git a/webapp/assets/_new/icons/svgs/frown.svg b/webapp/assets/_new/icons/svgs/frown.svg
new file mode 100755
index 000000000..a03906c69
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/frown.svg
@@ -0,0 +1,5 @@
+
+
+frown-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/gamepad.svg b/webapp/assets/_new/icons/svgs/gamepad.svg
new file mode 100755
index 000000000..85a2b7434
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/gamepad.svg
@@ -0,0 +1,5 @@
+
+
+gamepad
+
+
diff --git a/webapp/assets/_new/icons/svgs/gear.svg b/webapp/assets/_new/icons/svgs/gear.svg
new file mode 100755
index 000000000..f657c9494
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/gear.svg
@@ -0,0 +1,5 @@
+
+
+gear
+
+
diff --git a/webapp/assets/_new/icons/svgs/gears.svg b/webapp/assets/_new/icons/svgs/gears.svg
new file mode 100755
index 000000000..f9727888d
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/gears.svg
@@ -0,0 +1,5 @@
+
+
+gears
+
+
diff --git a/webapp/assets/_new/icons/svgs/gift.svg b/webapp/assets/_new/icons/svgs/gift.svg
new file mode 100755
index 000000000..355dc7b08
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/gift.svg
@@ -0,0 +1,5 @@
+
+
+gift
+
+
diff --git a/webapp/assets/_new/icons/svgs/github.svg b/webapp/assets/_new/icons/svgs/github.svg
new file mode 100755
index 000000000..1d61e0788
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/github.svg
@@ -0,0 +1,5 @@
+
+
+github
+
+
diff --git a/webapp/assets/_new/icons/svgs/glass.svg b/webapp/assets/_new/icons/svgs/glass.svg
new file mode 100755
index 000000000..c2a18e99f
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/glass.svg
@@ -0,0 +1,5 @@
+
+
+glass
+
+
diff --git a/webapp/assets/_new/icons/svgs/group.svg b/webapp/assets/_new/icons/svgs/group.svg
new file mode 100755
index 000000000..efb1c6184
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/group.svg
@@ -0,0 +1,5 @@
+
+
+group
+
+
diff --git a/webapp/assets/_new/icons/svgs/hand-down.svg b/webapp/assets/_new/icons/svgs/hand-down.svg
new file mode 100755
index 000000000..1a06a97fd
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/hand-down.svg
@@ -0,0 +1,5 @@
+
+
+hand-o-down
+
+
diff --git a/webapp/assets/_new/icons/svgs/hand-left.svg b/webapp/assets/_new/icons/svgs/hand-left.svg
new file mode 100755
index 000000000..49fb68314
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/hand-left.svg
@@ -0,0 +1,5 @@
+
+
+hand-o-left
+
+
diff --git a/webapp/assets/_new/icons/svgs/hand-pointer.svg b/webapp/assets/_new/icons/svgs/hand-pointer.svg
index bdd2c8fe0..e74339724 100644
--- a/webapp/assets/_new/icons/svgs/hand-pointer.svg
+++ b/webapp/assets/_new/icons/svgs/hand-pointer.svg
@@ -1,5 +1,5 @@
hand-pointer-o
-
+
diff --git a/webapp/assets/_new/icons/svgs/hand-right.svg b/webapp/assets/_new/icons/svgs/hand-right.svg
new file mode 100755
index 000000000..c165ea020
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/hand-right.svg
@@ -0,0 +1,5 @@
+
+
+hand-o-right
+
+
diff --git a/webapp/assets/_new/icons/svgs/hand-stop.svg b/webapp/assets/_new/icons/svgs/hand-stop.svg
new file mode 100755
index 000000000..dbf393138
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/hand-stop.svg
@@ -0,0 +1,5 @@
+
+
+hand-stop-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/hand-up.svg b/webapp/assets/_new/icons/svgs/hand-up.svg
new file mode 100755
index 000000000..472c8435d
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/hand-up.svg
@@ -0,0 +1,5 @@
+
+
+hand-o-up
+
+
diff --git a/webapp/assets/_new/icons/svgs/headphones.svg b/webapp/assets/_new/icons/svgs/headphones.svg
new file mode 100755
index 000000000..a197eca3a
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/headphones.svg
@@ -0,0 +1,5 @@
+
+
+headphones
+
+
diff --git a/webapp/assets/_new/icons/svgs/heart.svg b/webapp/assets/_new/icons/svgs/heart.svg
new file mode 100755
index 000000000..64f1195b1
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/heart.svg
@@ -0,0 +1,5 @@
+
+
+heart
+
+
diff --git a/webapp/assets/_new/icons/svgs/history.svg b/webapp/assets/_new/icons/svgs/history.svg
new file mode 100755
index 000000000..fd5fcc328
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/history.svg
@@ -0,0 +1,5 @@
+
+
+history
+
+
diff --git a/webapp/assets/_new/icons/svgs/hourglass.svg b/webapp/assets/_new/icons/svgs/hourglass.svg
new file mode 100755
index 000000000..e5e5ea6a1
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/hourglass.svg
@@ -0,0 +1,5 @@
+
+
+hourglass
+
+
diff --git a/webapp/assets/_new/icons/svgs/inbox.svg b/webapp/assets/_new/icons/svgs/inbox.svg
new file mode 100755
index 000000000..aba1d2eb0
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/inbox.svg
@@ -0,0 +1,5 @@
+
+
+inbox
+
+
diff --git a/webapp/assets/_new/icons/svgs/indent.svg b/webapp/assets/_new/icons/svgs/indent.svg
new file mode 100755
index 000000000..35f087427
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/indent.svg
@@ -0,0 +1,5 @@
+
+
+indent
+
+
diff --git a/webapp/assets/_new/icons/svgs/info-circle.svg b/webapp/assets/_new/icons/svgs/info-circle.svg
new file mode 100755
index 000000000..f971f5b3a
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/info-circle.svg
@@ -0,0 +1,5 @@
+
+
+info-circle
+
+
diff --git a/webapp/assets/_new/icons/svgs/keyboard.svg b/webapp/assets/_new/icons/svgs/keyboard.svg
new file mode 100755
index 000000000..cf49166d4
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/keyboard.svg
@@ -0,0 +1,5 @@
+
+
+keyboard-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/leaf.svg b/webapp/assets/_new/icons/svgs/leaf.svg
new file mode 100755
index 000000000..52b1693ba
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/leaf.svg
@@ -0,0 +1,5 @@
+
+
+leaf
+
+
diff --git a/webapp/assets/_new/icons/svgs/level-up.svg b/webapp/assets/_new/icons/svgs/level-up.svg
new file mode 100755
index 000000000..1c3c82192
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/level-up.svg
@@ -0,0 +1,5 @@
+
+
+level-up
+
+
diff --git a/webapp/assets/_new/icons/svgs/life-ring.svg b/webapp/assets/_new/icons/svgs/life-ring.svg
new file mode 100755
index 000000000..64f4aa7e8
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/life-ring.svg
@@ -0,0 +1,5 @@
+
+
+life-ring
+
+
diff --git a/webapp/assets/_new/icons/svgs/list.svg b/webapp/assets/_new/icons/svgs/list.svg
new file mode 100755
index 000000000..f07692281
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/list.svg
@@ -0,0 +1,5 @@
+
+
+list
+
+
diff --git a/webapp/assets/_new/icons/svgs/location-arrow.svg b/webapp/assets/_new/icons/svgs/location-arrow.svg
new file mode 100755
index 000000000..942a37fa5
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/location-arrow.svg
@@ -0,0 +1,5 @@
+
+
+location-arrow
+
+
diff --git a/webapp/assets/_new/icons/svgs/magnet.svg b/webapp/assets/_new/icons/svgs/magnet.svg
new file mode 100755
index 000000000..998495351
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/magnet.svg
@@ -0,0 +1,5 @@
+
+
+magnet
+
+
diff --git a/webapp/assets/_new/icons/svgs/male.svg b/webapp/assets/_new/icons/svgs/male.svg
new file mode 100755
index 000000000..5c35184b4
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/male.svg
@@ -0,0 +1,5 @@
+
+
+male
+
+
diff --git a/webapp/assets/_new/icons/svgs/map-pin.svg b/webapp/assets/_new/icons/svgs/map-pin.svg
new file mode 100755
index 000000000..dbba740b1
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/map-pin.svg
@@ -0,0 +1,5 @@
+
+
+map-pin
+
+
diff --git a/webapp/assets/_new/icons/svgs/map-signs.svg b/webapp/assets/_new/icons/svgs/map-signs.svg
new file mode 100755
index 000000000..0d46cc195
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/map-signs.svg
@@ -0,0 +1,5 @@
+
+
+map-signs
+
+
diff --git a/webapp/assets/_new/icons/svgs/map.svg b/webapp/assets/_new/icons/svgs/map.svg
new file mode 100755
index 000000000..157a29ea8
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/map.svg
@@ -0,0 +1,5 @@
+
+
+map
+
+
diff --git a/webapp/assets/_new/icons/svgs/microphone.svg b/webapp/assets/_new/icons/svgs/microphone.svg
index 121342b70..9a051cebe 100644
--- a/webapp/assets/_new/icons/svgs/microphone.svg
+++ b/webapp/assets/_new/icons/svgs/microphone.svg
@@ -1,4 +1,3 @@
-
microphone
diff --git a/webapp/assets/_new/icons/svgs/mobile-phone.svg b/webapp/assets/_new/icons/svgs/mobile-phone.svg
new file mode 100755
index 000000000..542ad25b8
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/mobile-phone.svg
@@ -0,0 +1,5 @@
+
+
+mobile-phone
+
+
diff --git a/webapp/assets/_new/icons/svgs/paperclip.svg b/webapp/assets/_new/icons/svgs/paperclip.svg
new file mode 100755
index 000000000..099453e71
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/paperclip.svg
@@ -0,0 +1,5 @@
+
+
+paperclip
+
+
diff --git a/webapp/assets/_new/icons/svgs/paste.svg b/webapp/assets/_new/icons/svgs/paste.svg
new file mode 100755
index 000000000..32084e808
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/paste.svg
@@ -0,0 +1,5 @@
+
+
+paste
+
+
diff --git a/webapp/assets/_new/icons/svgs/pause.svg b/webapp/assets/_new/icons/svgs/pause.svg
new file mode 100755
index 000000000..ce3acef04
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/pause.svg
@@ -0,0 +1,5 @@
+
+
+pause
+
+
diff --git a/webapp/assets/_new/icons/svgs/pencil.svg b/webapp/assets/_new/icons/svgs/pencil.svg
new file mode 100755
index 000000000..0c1b963f8
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/pencil.svg
@@ -0,0 +1,5 @@
+
+
+pencil
+
+
diff --git a/webapp/assets/_new/icons/svgs/phone.svg b/webapp/assets/_new/icons/svgs/phone.svg
new file mode 100755
index 000000000..413c48f16
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/phone.svg
@@ -0,0 +1,5 @@
+
+
+phone
+
+
diff --git a/webapp/assets/_new/icons/svgs/photo.svg b/webapp/assets/_new/icons/svgs/photo.svg
new file mode 100755
index 000000000..abc66b8f3
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/photo.svg
@@ -0,0 +1,5 @@
+
+
+photo
+
+
diff --git a/webapp/assets/_new/icons/svgs/pie-chart.svg b/webapp/assets/_new/icons/svgs/pie-chart.svg
new file mode 100755
index 000000000..1d942226e
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/pie-chart.svg
@@ -0,0 +1,5 @@
+
+
+pie-chart
+
+
diff --git a/webapp/assets/_new/icons/svgs/play-circle.svg b/webapp/assets/_new/icons/svgs/play-circle.svg
new file mode 100755
index 000000000..e8b842bf5
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/play-circle.svg
@@ -0,0 +1,5 @@
+
+
+play-circle
+
+
diff --git a/webapp/assets/_new/icons/svgs/play.svg b/webapp/assets/_new/icons/svgs/play.svg
new file mode 100755
index 000000000..a0b1eafa2
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/play.svg
@@ -0,0 +1,5 @@
+
+
+play
+
+
diff --git a/webapp/assets/_new/icons/svgs/power-off.svg b/webapp/assets/_new/icons/svgs/power-off.svg
new file mode 100755
index 000000000..7b362c167
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/power-off.svg
@@ -0,0 +1,5 @@
+
+
+power-off
+
+
diff --git a/webapp/assets/_new/icons/svgs/print.svg b/webapp/assets/_new/icons/svgs/print.svg
new file mode 100755
index 000000000..a9fc409e2
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/print.svg
@@ -0,0 +1,5 @@
+
+
+print
+
+
diff --git a/webapp/assets/_new/icons/svgs/recycle.svg b/webapp/assets/_new/icons/svgs/recycle.svg
new file mode 100755
index 000000000..9bbdb3ad3
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/recycle.svg
@@ -0,0 +1,5 @@
+
+
+recycle
+
+
diff --git a/webapp/assets/_new/icons/svgs/refresh.svg b/webapp/assets/_new/icons/svgs/refresh.svg
new file mode 100755
index 000000000..1995ab604
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/refresh.svg
@@ -0,0 +1,5 @@
+
+
+refresh
+
+
diff --git a/webapp/assets/_new/icons/svgs/rocket.svg b/webapp/assets/_new/icons/svgs/rocket.svg
new file mode 100755
index 000000000..f83674f15
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/rocket.svg
@@ -0,0 +1,5 @@
+
+
+rocket
+
+
diff --git a/webapp/assets/_new/icons/svgs/server.svg b/webapp/assets/_new/icons/svgs/server.svg
new file mode 100755
index 000000000..fa00771ea
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/server.svg
@@ -0,0 +1,5 @@
+
+
+server
+
+
diff --git a/webapp/assets/_new/icons/svgs/share.svg b/webapp/assets/_new/icons/svgs/share.svg
new file mode 100755
index 000000000..b2fee7622
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/share.svg
@@ -0,0 +1,5 @@
+
+
+share
+
+
diff --git a/webapp/assets/_new/icons/svgs/sort-alpha-asc.svg b/webapp/assets/_new/icons/svgs/sort-alpha-asc.svg
new file mode 100755
index 000000000..f96023d0d
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/sort-alpha-asc.svg
@@ -0,0 +1,5 @@
+
+
+sort-alpha-asc
+
+
diff --git a/webapp/assets/_new/icons/svgs/sort-alpha-desc.svg b/webapp/assets/_new/icons/svgs/sort-alpha-desc.svg
new file mode 100755
index 000000000..461e65611
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/sort-alpha-desc.svg
@@ -0,0 +1,5 @@
+
+
+sort-alpha-desc
+
+
diff --git a/webapp/assets/_new/icons/svgs/sort.svg b/webapp/assets/_new/icons/svgs/sort.svg
new file mode 100755
index 000000000..d7fc07efd
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/sort.svg
@@ -0,0 +1,5 @@
+
+
+sort
+
+
diff --git a/webapp/assets/_new/icons/svgs/spinner.svg b/webapp/assets/_new/icons/svgs/spinner.svg
new file mode 100755
index 000000000..b5d0cf71a
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/spinner.svg
@@ -0,0 +1,5 @@
+
+
+spinner
+
+
diff --git a/webapp/assets/_new/icons/svgs/star-half-o.svg b/webapp/assets/_new/icons/svgs/star-half-o.svg
new file mode 100755
index 000000000..40070bbef
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/star-half-o.svg
@@ -0,0 +1,5 @@
+
+
+star-half-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/star-o.svg b/webapp/assets/_new/icons/svgs/star-o.svg
new file mode 100755
index 000000000..3bc7af681
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/star-o.svg
@@ -0,0 +1,5 @@
+
+
+star-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/star.svg b/webapp/assets/_new/icons/svgs/star.svg
new file mode 100755
index 000000000..5b4236991
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/star.svg
@@ -0,0 +1,5 @@
+
+
+star
+
+
diff --git a/webapp/assets/_new/icons/svgs/subscript.svg b/webapp/assets/_new/icons/svgs/subscript.svg
new file mode 100755
index 000000000..07663bcc6
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/subscript.svg
@@ -0,0 +1,5 @@
+
+
+subscript
+
+
diff --git a/webapp/assets/_new/icons/svgs/sun.svg b/webapp/assets/_new/icons/svgs/sun.svg
new file mode 100755
index 000000000..bddbcebcc
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/sun.svg
@@ -0,0 +1,5 @@
+
+
+sun-o
+
+
diff --git a/webapp/assets/_new/icons/svgs/superscript.svg b/webapp/assets/_new/icons/svgs/superscript.svg
new file mode 100755
index 000000000..08938a2b5
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/superscript.svg
@@ -0,0 +1,5 @@
+
+
+superscript
+
+
diff --git a/webapp/assets/_new/icons/svgs/table.svg b/webapp/assets/_new/icons/svgs/table.svg
new file mode 100755
index 000000000..bdb7c8e7b
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/table.svg
@@ -0,0 +1,5 @@
+
+
+table
+
+
diff --git a/webapp/assets/_new/icons/svgs/tablet.svg b/webapp/assets/_new/icons/svgs/tablet.svg
new file mode 100755
index 000000000..7142d4644
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/tablet.svg
@@ -0,0 +1,5 @@
+
+
+tablet
+
+
diff --git a/webapp/assets/_new/icons/svgs/tag.svg b/webapp/assets/_new/icons/svgs/tag.svg
new file mode 100755
index 000000000..875a3be33
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/tag.svg
@@ -0,0 +1,5 @@
+
+
+tag
+
+
diff --git a/webapp/assets/_new/icons/svgs/tags.svg b/webapp/assets/_new/icons/svgs/tags.svg
new file mode 100755
index 000000000..f248cc080
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/tags.svg
@@ -0,0 +1,5 @@
+
+
+tags
+
+
diff --git a/webapp/assets/_new/icons/svgs/terminal.svg b/webapp/assets/_new/icons/svgs/terminal.svg
new file mode 100755
index 000000000..9f336dc12
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/terminal.svg
@@ -0,0 +1,5 @@
+
+
+terminal
+
+
diff --git a/webapp/assets/_new/icons/svgs/ticket.svg b/webapp/assets/_new/icons/svgs/ticket.svg
new file mode 100755
index 000000000..5e7cfb92c
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/ticket.svg
@@ -0,0 +1,5 @@
+
+
+ticket
+
+
diff --git a/webapp/assets/_new/icons/svgs/toggle-off.svg b/webapp/assets/_new/icons/svgs/toggle-off.svg
new file mode 100755
index 000000000..c69ce1b5f
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/toggle-off.svg
@@ -0,0 +1,5 @@
+
+
+toggle-off
+
+
diff --git a/webapp/assets/_new/icons/svgs/toggle-on.svg b/webapp/assets/_new/icons/svgs/toggle-on.svg
new file mode 100755
index 000000000..280c7d249
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/toggle-on.svg
@@ -0,0 +1,5 @@
+
+
+toggle-on
+
+
diff --git a/webapp/assets/_new/icons/svgs/undo.svg b/webapp/assets/_new/icons/svgs/undo.svg
new file mode 100755
index 000000000..707b60150
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/undo.svg
@@ -0,0 +1,5 @@
+
+
+undo
+
+
diff --git a/webapp/assets/_new/icons/svgs/upload.svg b/webapp/assets/_new/icons/svgs/upload.svg
new file mode 100755
index 000000000..83dfe5bcf
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/upload.svg
@@ -0,0 +1,5 @@
+
+
+upload
+
+
diff --git a/webapp/assets/_new/icons/svgs/video-camera.svg b/webapp/assets/_new/icons/svgs/video-camera.svg
new file mode 100755
index 000000000..b6a9cc0df
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/video-camera.svg
@@ -0,0 +1,5 @@
+
+
+video-camera
+
+
diff --git a/webapp/assets/_new/icons/svgs/volume-down.svg b/webapp/assets/_new/icons/svgs/volume-down.svg
new file mode 100755
index 000000000..f8b25dc25
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/volume-down.svg
@@ -0,0 +1,5 @@
+
+
+volume-down
+
+
diff --git a/webapp/assets/_new/icons/svgs/volume-off.svg b/webapp/assets/_new/icons/svgs/volume-off.svg
new file mode 100755
index 000000000..daaeb19f5
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/volume-off.svg
@@ -0,0 +1,5 @@
+
+
+volume-off
+
+
diff --git a/webapp/assets/_new/icons/svgs/volume-up.svg b/webapp/assets/_new/icons/svgs/volume-up.svg
new file mode 100755
index 000000000..03816d0d3
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/volume-up.svg
@@ -0,0 +1,5 @@
+
+
+volume-up
+
+
diff --git a/webapp/assets/_new/icons/svgs/wheelchair.svg b/webapp/assets/_new/icons/svgs/wheelchair.svg
new file mode 100755
index 000000000..3854969b8
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/wheelchair.svg
@@ -0,0 +1,5 @@
+
+
+wheelchair
+
+
diff --git a/webapp/assets/_new/icons/svgs/wifi.svg b/webapp/assets/_new/icons/svgs/wifi.svg
new file mode 100755
index 000000000..0df70f686
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/wifi.svg
@@ -0,0 +1,5 @@
+
+
+wifi
+
+
diff --git a/webapp/assets/_new/icons/svgs/youtube-play.svg b/webapp/assets/_new/icons/svgs/youtube-play.svg
new file mode 100755
index 000000000..80370a4e6
--- /dev/null
+++ b/webapp/assets/_new/icons/svgs/youtube-play.svg
@@ -0,0 +1,5 @@
+
+
+youtube-play
+
+
diff --git a/webapp/assets/_new/styles/export.scss b/webapp/assets/_new/styles/export.scss
new file mode 100644
index 000000000..e29c014e2
--- /dev/null
+++ b/webapp/assets/_new/styles/export.scss
@@ -0,0 +1,37 @@
+
+:export {
+ colorPrimary: $color-primary;
+ colorPrimaryActive: $color-primary-active;
+ colorPrimaryLight: $color-primary-light;
+
+ borderColorSoft: $border-color-soft;
+
+ borderRadiusBase: $border-radius-base;
+
+ textColorBase: $text-color-base;
+ textColorSoft: $text-color-soft;
+ textColorInverse: $text-color-inverse;
+
+ boxShadowBase: $box-shadow-base;
+
+ backgroundColorBase: $background-color-base;
+ backgroundColorSoft: $background-color-soft;
+ backgroundColorSoftest: $background-color-softest;
+ backgroundColorPrimary: $background-color-primary;
+
+ colorNeutral30: $color-neutral-30;
+
+ chatMessageColor: $chat-message-color;
+
+ chatMessageBgMe: $chat-message-bg-me;
+ chatMessageBgOthers: $chat-message-bg-others;
+
+ chatNewMessageColor: $chat-new-message-color;
+
+ chatMessageTimestamp: $chat-message-timestamp;
+ chatMessageCheckmarkSeen: $chat-message-checkmark-seen;
+ chatMessageCheckmark: $chat-message-checkmark;
+
+ chatRoomBackgroundCounterBadge: $chat-room-background-counter-badge;
+ chatRoomColorCounterBadge: $chat-room-color-counter-badge;
+ }
\ No newline at end of file
diff --git a/webapp/assets/_new/styles/tokens.scss b/webapp/assets/_new/styles/tokens.scss
index 22e0214ff..dd3a042d1 100644
--- a/webapp/assets/_new/styles/tokens.scss
+++ b/webapp/assets/_new/styles/tokens.scss
@@ -406,4 +406,19 @@ $color-toast-green: $color-success;
$color-ribbon-event: $background-color-third;
$color-ribbon-event-active: $background-color-third-active;
$color-ribbon-article: $background-color-secondary;
-$color-ribbon-article-active: $background-color-secondary-active;
\ No newline at end of file
+$color-ribbon-article-active: $background-color-secondary-active;
+
+/**
+ * @tokens Chat Color
+ */
+
+$chat-message-bg-me: $color-primary-light;
+$chat-message-color: $text-color-base;
+$chat-message-bg-others: $color-neutral-80;
+$chat-sidemenu-bg: $color-secondary-active;
+$chat-new-message-color: $color-secondary-active;
+$chat-message-timestamp: $text-color-soft;
+$chat-message-checkmark-seen: $text-color-secondary;
+$chat-message-checkmark: $text-color-soft;
+$chat-room-color-counter-badge: $text-color-inverse;
+$chat-room-background-counter-badge: $color-secondary;
diff --git a/webapp/components/Chat/AddChatRoomByUserSearch.vue b/webapp/components/Chat/AddChatRoomByUserSearch.vue
new file mode 100644
index 000000000..8ab21f06f
--- /dev/null
+++ b/webapp/components/Chat/AddChatRoomByUserSearch.vue
@@ -0,0 +1,67 @@
+
+
+
+ {{ $t('chat.addRoomHeadline') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webapp/components/Chat/Chat.vue b/webapp/components/Chat/Chat.vue
new file mode 100644
index 000000000..c2e767272
--- /dev/null
+++ b/webapp/components/Chat/Chat.vue
@@ -0,0 +1,482 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getInitialsName(selectedRoom.roomName) }}
+
+
+
+
+
+
+ {{ getInitialsName(room.roomName) }}
+
+
+
+
+
+
+
+
+
diff --git a/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue b/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue
new file mode 100644
index 000000000..dd36b965a
--- /dev/null
+++ b/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
diff --git a/webapp/components/CommentForm/CommentForm.vue b/webapp/components/CommentForm/CommentForm.vue
index 5f6a2420d..6d9b59de6 100644
--- a/webapp/components/CommentForm/CommentForm.vue
+++ b/webapp/components/CommentForm/CommentForm.vue
@@ -8,7 +8,6 @@
:disabled="disabled && !update"
@click="handleCancel"
data-test="cancel-button"
- danger
>
{{ $t('actions.cancel') }}
diff --git a/webapp/components/ContentMenu/GroupContentMenu.vue b/webapp/components/ContentMenu/GroupContentMenu.vue
index 7a7737320..1ca1b5b33 100644
--- a/webapp/components/ContentMenu/GroupContentMenu.vue
+++ b/webapp/components/ContentMenu/GroupContentMenu.vue
@@ -58,14 +58,14 @@ export default {
routes.push({
label: this.$t('group.contentMenu.visitGroupPage'),
icon: 'home',
- name: 'group-id-slug',
+ path: `/groups/${this.group.id}`,
params: { id: this.group.id, slug: this.group.slug },
})
}
if (this.group.myRole === 'owner') {
routes.push({
label: this.$t('admin.settings.name'),
- path: `/group/edit/${this.group.id}`,
+ path: `/groups/edit/${this.group.id}`,
icon: 'edit',
})
}
diff --git a/webapp/components/ContributionForm/ContributionForm.vue b/webapp/components/ContributionForm/ContributionForm.vue
index 0067dab72..0a5eba0cd 100644
--- a/webapp/components/ContributionForm/ContributionForm.vue
+++ b/webapp/components/ContributionForm/ContributionForm.vue
@@ -1,190 +1,190 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
{{ $t('contribution.inappropriatePicture') }}
+
+
+ {{ $t('contribution.inappropriatePicture') }}
+
+
+
+
+
-
+ {{ formData.title.length }}/{{ formSchema.title.max }}
+
+
+
-
-
-
{{ $t('contribution.inappropriatePicture') }}
-
-
- {{ $t('contribution.inappropriatePicture') }}
-
-
-
-
-
-
- {{ formData.title.length }}/{{ formSchema.title.max }}
-
-
-
-
- {{ contentLength }}
-
-
+
+ {{ contentLength }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ {{ formData.eventVenue.length }}/{{ formSchema.eventVenue.max }}
+
+
+
+
+
+
+
+
+ {{ formData.eventLocationName.length }}/{{ formSchema.eventLocationName.max }}
+
+
+
+
+
-
+
-
-
-
-
-
-
-
- {{ formData.eventVenue.length }}/{{ formSchema.eventVenue.max }}
-
-
-
-
-
-
-
-
- {{ formData.eventLocationName.length }}/{{ formSchema.eventLocationName.max }}
-
-
-
-
-
-
-
-
- {{ $t('post.viewEvent.eventIsOnline') }}
+ {{ $t('post.viewEvent.eventIsOnline') }}
+
-
-
-
-
- {{ formData.categoryIds.length }} / 3
-
-
-
-
-
-
+
+
+
+ {{ formData.categoryIds.length }} / 3
+
+
+
+
+
+
+
+
diff --git a/webapp/locales/de.json b/webapp/locales/de.json
index 29448fa10..4743a2488 100644
--- a/webapp/locales/de.json
+++ b/webapp/locales/de.json
@@ -77,6 +77,28 @@
}
}
},
+ "chat": {
+ "addRoomHeadline": "Suche Nutzer für neuen Chat",
+ "cancelSelectMessage": "Abbrechen",
+ "conversationStarted": "Unterhaltung startete am:",
+ "isOnline": "online",
+ "isTyping": "tippt...",
+ "lastSeen": "zuletzt gesehen ",
+ "messageDeleted": "Diese Nachricht wuerde gelöscht",
+ "messagesEmpty": "Keine Nachrichten",
+ "newMessages": "Neue Nachrichten",
+ "page": {
+ "headline": "Chat"
+ },
+ "roomEmpty": "Keinen Raum selektiert",
+ "roomsEmpty": "Keine Räume",
+ "search": "Chat-Räume filtern",
+ "typeMessage": "Nachricht schreiben",
+ "userProfileButton": {
+ "label": "Chat",
+ "tooltip": "Chatte mit „{name}“"
+ }
+ },
"client-only": {
"loading": "Lade …"
},
@@ -552,6 +574,9 @@
},
"groups": "Gruppen",
"myProfile": "Mein Profil"
+ },
+ "chat": {
+ "tooltip": "Meine Chats"
}
},
"index": {
@@ -580,7 +605,7 @@
"moreInfo": "Was ist {APPLICATION_NAME}?",
"moreInfoHint": "zur Präsentationsseite",
"no-account": "Du hast noch kein Nutzerkonto?",
- "no-cookie": "Es kann kein Cookie angelegt werden. Du must Cookies akzeptieren.",
+ "no-cookie": "Es kann kein Cookie angelegt werden. Du musst Cookies akzeptieren.",
"password": "Dein Passwort",
"register": "Nutzerkonto erstellen",
"success": "Du bist eingeloggt!"
@@ -595,9 +620,16 @@
"button": {
"tooltip": "Landkarte anzeigen"
},
- "markerTypes": {
+ "legend": {
+ "event": "Veranstaltung",
"group": "Gruppe",
- "theUser": "deine Position",
+ "theUser": "Meine Position",
+ "user": "Nutzer"
+ },
+ "markerTypes": {
+ "event": "Veranstaltung",
+ "group": "Gruppe",
+ "theUser": "meine Position",
"user": "Nutzer"
},
"pageTitle": "Landkarte",
@@ -691,9 +723,6 @@
"unread": "Ungelesen"
},
"group": "Beschreibung",
- "headerMenuButton": {
- "tooltip": "Meine Benachrichtigungen"
- },
"markAllAsRead": "Markiere alle als gelesen",
"pageLink": "Alle Benachrichtigungen",
"post": "Beitrag oder Gruppe",
@@ -709,11 +738,6 @@
"title": "Benachrichtigungen",
"user": "Nutzer"
},
- "position": {
- "group": "Gruppe",
- "my": "Meine Position",
- "user": "Nutzer"
- },
"post": {
"comment": {
"reply": "Antworten",
@@ -725,13 +749,13 @@
"forGroup": {
"title": "Für die Gruppe „{name}“"
},
- "title": "Erstelle ein neues Event"
+ "title": "Erstelle eine Veranstaltung"
},
"createNewPost": {
"forGroup": {
"title": "Für die Gruppe „{name}“"
},
- "title": "Erstelle einen neuen Beitrag"
+ "title": "Erstelle einen Beitrag"
},
"edited": "bearbeitet",
"editPost": {
@@ -758,9 +782,9 @@
"viewEvent": {
"eventEnd": "Ende",
"eventIsOnline": "Online",
- "eventLocationName": "Stadt",
+ "eventLocationName": "Stadt — z.B. Musterstraße 1, 12345 Musterstadt",
"eventStart": "Beginn",
- "eventVenue": "Veranstaltungsort",
+ "eventVenue": "Veranstaltungsort — z.B. Hinterhof, 1. OG, …",
"title": "Veranstaltung"
},
"viewPost": {
@@ -878,7 +902,7 @@
"Tag": "Hashtag ::: Hashtags",
"User": "Nutzer ::: Nutzer"
},
- "hint": "Wonach suchst Du? Nutze !… für Beiträge, @… für Mitglieder, &… für Gruppen, #… für Hashtags",
+ "hint": "!... sucht Beiträge, @... sucht Nutzer, &... sucht Gruppen, #… sucht Hashtags",
"no-results": "Keine Ergebnisse für \"{search}\" gefunden. Versuch' es mit einem anderen Begriff!",
"page": "Seite",
"placeholder": "Suchen",
diff --git a/webapp/locales/en.json b/webapp/locales/en.json
index 13a040d36..752e545ab 100644
--- a/webapp/locales/en.json
+++ b/webapp/locales/en.json
@@ -77,6 +77,28 @@
}
}
},
+ "chat": {
+ "addRoomHeadline": "Search User for new Chat",
+ "cancelSelectMessage": "Cancel",
+ "conversationStarted": "Conversation started on:",
+ "isOnline": "is online",
+ "isTyping": "is writing...",
+ "lastSeen": "last seen ",
+ "messageDeleted": "This message was deleted",
+ "messagesEmpty": "No messages",
+ "newMessages": "New Messages",
+ "page": {
+ "headline": "Chat"
+ },
+ "roomEmpty": "No room selected",
+ "roomsEmpty": "No rooms",
+ "search": "Filter chat rooms",
+ "typeMessage": "Type message",
+ "userProfileButton": {
+ "label": "Chat",
+ "tooltip": "Chat with “{name}”"
+ }
+ },
"client-only": {
"loading": "Loading …"
},
@@ -454,7 +476,7 @@
"addMemberToGroupSuccess": "“{name}” was added to the group with the role “{role}”!",
"addUser": "Add User",
"addUserNoOptions": "No users found!",
- "addUserPlaceholder": " Username",
+ "addUserPlaceholder": "User name",
"allGroups": "All Groups",
"button": {
"tooltip": "Show groups"
@@ -552,6 +574,9 @@
},
"groups": "Groups",
"myProfile": "My profile"
+ },
+ "chat": {
+ "tooltip": "My chats"
}
},
"index": {
@@ -595,9 +620,16 @@
"button": {
"tooltip": "Show map"
},
+ "legend": {
+ "event": "Event",
+ "group": "Group",
+ "theUser": "My position",
+ "user": "User"
+ },
"markerTypes": {
+ "event": "event",
"group": "group",
- "theUser": "your position",
+ "theUser": "my position",
"user": "user"
},
"pageTitle": "Map",
@@ -691,9 +723,6 @@
"unread": "Unread"
},
"group": "Description",
- "headerMenuButton": {
- "tooltip": "My notifications"
- },
"markAllAsRead": "Mark all as read",
"pageLink": "All notifications",
"post": "Post or Group",
@@ -709,11 +738,6 @@
"title": "Notifications",
"user": "User"
},
- "position": {
- "group": "Group",
- "my": "My position",
- "user": "User"
- },
"post": {
"comment": {
"reply": "Reply",
@@ -725,13 +749,13 @@
"forGroup": {
"title": "For The Group “{name}”"
},
- "title": "Create A New Event"
+ "title": "Create an Event"
},
"createNewPost": {
"forGroup": {
"title": "For The Group “{name}”"
},
- "title": "Create A New Article"
+ "title": "Create an Article"
},
"edited": "edited",
"editPost": {
@@ -758,9 +782,9 @@
"viewEvent": {
"eventEnd": "End",
"eventIsOnline": "Online",
- "eventLocationName": "City",
+ "eventLocationName": "City — e.g. Example Street 1, 12345 City",
"eventStart": "Start",
- "eventVenue": "Venue",
+ "eventVenue": "Venue — e.g. Backyard, 1st Floor, …",
"title": "Event"
},
"viewPost": {
@@ -878,7 +902,7 @@
"Tag": "Hashtag ::: Hashtags",
"User": "User ::: Users"
},
- "hint": "What are you searching for? Use !… for posts, @… for users, &… for groups, #… for hashtags.",
+ "hint": "!... searches posts, @... searches users, &... searches groups, #… searches hashtags",
"no-results": "No results found for \"{search}\". Try a different search term!",
"page": "Page",
"placeholder": "Search",
diff --git a/webapp/locales/es.json b/webapp/locales/es.json
index a313b3dc4..ae455e5eb 100644
--- a/webapp/locales/es.json
+++ b/webapp/locales/es.json
@@ -75,6 +75,9 @@
}
}
},
+ "chat": {
+ "search": "Filtrar salas de chat"
+ },
"code-of-conduct": {
"subheader": "para la red social de {ORGANIZATION_NAME}"
},
diff --git a/webapp/locales/fr.json b/webapp/locales/fr.json
index 511ca4568..3f97d84c2 100644
--- a/webapp/locales/fr.json
+++ b/webapp/locales/fr.json
@@ -75,6 +75,9 @@
}
}
},
+ "chat": {
+ "search": "Filtrer les salons de chat"
+ },
"code-of-conduct": {
"subheader": "pour le réseau social de {ORGANIZATION_NAME}"
},
diff --git a/webapp/nuxt.config.js b/webapp/nuxt.config.js
index 2a837ffb4..c9b4db317 100644
--- a/webapp/nuxt.config.js
+++ b/webapp/nuxt.config.js
@@ -105,6 +105,7 @@ export default {
styleguideStyles,
'~assets/_new/styles/tokens.scss',
'~assets/styles/imports/_branding.scss',
+ '~assets/_new/styles/export.scss',
],
},
@@ -127,6 +128,7 @@ export default {
{ src: '~/plugins/vue-infinite-loading.js', ssr: false },
{ src: '~/plugins/vue-observe-visibility.js', ssr: false },
{ src: '~/plugins/v-mapbox.js', mode: 'client' },
+ { src: '~/plugins/vue-advanced-chat.js', mode: 'client' },
],
router: {
@@ -248,6 +250,14 @@ export default {
** You can extend webpack config here
*/
extend(config, ctx) {
+ // Add the compilerOptions
+ ctx.loaders.vue.compilerOptions = {
+ // Add your compilerOptions here
+ isCustomElement: (tagName) => {
+ return tagName === 'vue-advanced-chat' || tagName === 'emoji-picker'
+ },
+ }
+
if (CONFIG.STYLEGUIDE_DEV) {
config.resolve.alias['@@'] = path.resolve(__dirname, `${styleguidePath}/src/system`)
config.module.rules.push({
diff --git a/webapp/package.json b/webapp/package.json
index cd748c56f..f2a756ca4 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -54,6 +54,7 @@
"v-mapbox": "^1.11.2",
"v-tooltip": "~2.1.3",
"validator": "^13.0.0",
+ "vue-advanced-chat": "^2.0.7",
"vue-count-to": "~1.0.13",
"vue-infinite-loading": "^2.4.5",
"vue-izitoast": "^1.2.1",
diff --git a/webapp/pages/chat.vue b/webapp/pages/chat.vue
new file mode 100644
index 000000000..9f93fabcb
--- /dev/null
+++ b/webapp/pages/chat.vue
@@ -0,0 +1,54 @@
+
+
+
{{ $t('chat.page.headline') }}
+
+
+
+
+
+
+
diff --git a/webapp/pages/group/_id.spec.js b/webapp/pages/groups/_id.spec.js
similarity index 100%
rename from webapp/pages/group/_id.spec.js
rename to webapp/pages/groups/_id.spec.js
diff --git a/webapp/pages/group/_id.vue b/webapp/pages/groups/_id.vue
similarity index 96%
rename from webapp/pages/group/_id.vue
rename to webapp/pages/groups/_id.vue
index d743633d1..ab8f3c41e 100644
--- a/webapp/pages/group/_id.vue
+++ b/webapp/pages/groups/_id.vue
@@ -24,7 +24,7 @@ const options = {
}
`,
message: 'error-pages.group-not-found',
- path: 'group',
+ path: 'groups',
}
const persistentLinks = PersistentLinks(options)
diff --git a/webapp/pages/group/_id/_slug.spec.js b/webapp/pages/groups/_id/_slug.spec.js
similarity index 100%
rename from webapp/pages/group/_id/_slug.spec.js
rename to webapp/pages/groups/_id/_slug.spec.js
diff --git a/webapp/pages/group/_id/_slug.vue b/webapp/pages/groups/_id/_slug.vue
similarity index 100%
rename from webapp/pages/group/_id/_slug.vue
rename to webapp/pages/groups/_id/_slug.vue
diff --git a/webapp/pages/group/create.vue b/webapp/pages/groups/create.vue
similarity index 98%
rename from webapp/pages/group/create.vue
rename to webapp/pages/groups/create.vue
index ebdbbe37c..8dd661d8d 100644
--- a/webapp/pages/group/create.vue
+++ b/webapp/pages/groups/create.vue
@@ -59,7 +59,7 @@ export default {
})
this.$toast.success(this.$t('group.groupCreated'))
this.$router.history.push({
- name: 'group-id-slug',
+ name: 'groups-id-slug',
params: { id: responseId, slug: responseSlug },
})
} catch (error) {
diff --git a/webapp/pages/group/edit/_id.vue b/webapp/pages/groups/edit/_id.vue
similarity index 93%
rename from webapp/pages/group/edit/_id.vue
rename to webapp/pages/groups/edit/_id.vue
index 7a0f9d051..57c7d9f6a 100644
--- a/webapp/pages/group/edit/_id.vue
+++ b/webapp/pages/groups/edit/_id.vue
@@ -33,11 +33,11 @@ export default {
return [
{
name: this.$t('group.general'),
- path: `/group/edit/${this.group.id}`,
+ path: `/groups/edit/${this.group.id}`,
},
{
name: this.$t('group.members'),
- path: `/group/edit/${this.group.id}/members`,
+ path: `/groups/edit/${this.group.id}/members`,
},
]
},
diff --git a/webapp/pages/group/edit/_id/index.vue b/webapp/pages/groups/edit/_id/index.vue
similarity index 97%
rename from webapp/pages/group/edit/_id/index.vue
rename to webapp/pages/groups/edit/_id/index.vue
index e3c934dc5..70807b338 100644
--- a/webapp/pages/group/edit/_id/index.vue
+++ b/webapp/pages/groups/edit/_id/index.vue
@@ -60,7 +60,7 @@ export default {
})
this.$toast.success(this.$t('group.updatedGroup'))
this.$router.history.push({
- name: 'group-id-slug',
+ name: 'groups-id-slug',
params: { id: responseId, slug: responseSlug },
})
} catch (error) {
diff --git a/webapp/pages/group/edit/_id/members.vue b/webapp/pages/groups/edit/_id/members.vue
similarity index 100%
rename from webapp/pages/group/edit/_id/members.vue
rename to webapp/pages/groups/edit/_id/members.vue
diff --git a/webapp/pages/groups.spec.js b/webapp/pages/groups/index.spec.js
similarity index 94%
rename from webapp/pages/groups.spec.js
rename to webapp/pages/groups/index.spec.js
index 3761f7ec2..ecb28c2c9 100644
--- a/webapp/pages/groups.spec.js
+++ b/webapp/pages/groups/index.spec.js
@@ -1,5 +1,5 @@
import { mount } from '@vue/test-utils'
-import groups from './groups.vue'
+import groups from './index.vue'
const localVue = global.localVue
diff --git a/webapp/pages/groups.vue b/webapp/pages/groups/index.vue
similarity index 98%
rename from webapp/pages/groups.vue
rename to webapp/pages/groups/index.vue
index 52366d0af..13002859b 100644
--- a/webapp/pages/groups.vue
+++ b/webapp/pages/groups/index.vue
@@ -7,7 +7,7 @@
-
+
{{ $t('map.pageTitle') }}
-
- {{ $t('position.my') }}
-
- {{ $t('position.user') }}
-
- {{ $t('position.group') }}
+
+
+ {{ $t('map.legend.' + type.id) }}
+
+
@@ -66,6 +65,7 @@ import '@mapbox/mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css'
import { mapGetters } from 'vuex'
import { profileUserQuery, mapUserQuery } from '~/graphql/User'
import { groupQuery } from '~/graphql/groups'
+import { filterPosts } from '~/graphql/PostQuery.js'
import mobile from '~/mixins/mobile'
import Empty from '~/components/Empty/Empty'
import MapStylesButtons from '~/components/Map/MapStylesButtons'
@@ -95,19 +95,40 @@ export default {
currentUserCoordinates: null,
users: null,
groups: null,
+ posts: null,
markers: {
- icons: [
+ types: [
{
- id: 'marker-blue',
- name: 'mapbox-marker-icon-20px-blue.png',
+ id: 'theUser',
+ icon: {
+ id: 'marker-orange',
+ legendName: 'mapbox-marker-icon-orange.svg',
+ mapName: 'mapbox-marker-icon-20px-orange.png',
+ },
},
{
- id: 'marker-orange',
- name: 'mapbox-marker-icon-20px-orange.png',
+ id: 'user',
+ icon: {
+ id: 'marker-green',
+ legendName: 'mapbox-marker-icon-green.svg',
+ mapName: 'mapbox-marker-icon-20px-green.png',
+ },
},
{
- id: 'marker-green',
- name: 'mapbox-marker-icon-20px-green.png',
+ id: 'group',
+ icon: {
+ id: 'marker-red',
+ legendName: 'mapbox-marker-icon-red.svg',
+ mapName: 'mapbox-marker-icon-20px-red.png',
+ },
+ },
+ {
+ id: 'event',
+ icon: {
+ id: 'marker-purple',
+ legendName: 'mapbox-marker-icon-purple.svg',
+ mapName: 'mapbox-marker-icon-20px-purple.png',
+ },
},
],
isImagesLoaded: false,
@@ -137,7 +158,8 @@ export default {
this.markers.isImagesLoaded &&
this.currentUser &&
this.users &&
- this.groups
+ this.groups &&
+ this.posts
)
},
styles() {
@@ -236,17 +258,27 @@ export default {
// Copy coordinates array.
const coordinates = e.features[0].geometry.coordinates.slice()
- const markerTypeLabel =
- e.features[0].properties.type === 'group'
- ? this.$t('map.markerTypes.group')
- : e.features[0].properties.type === 'user'
- ? this.$t('map.markerTypes.user')
- : this.$t('map.markerTypes.theUser')
- const markerProfileLinkTitle =
- (e.features[0].properties.type === 'group' ? '&' : '@') + e.features[0].properties.slug
- const markerProfileLink =
- (e.features[0].properties.type === 'group' ? '/group' : '/profile') +
- `/${e.features[0].properties.id}/${e.features[0].properties.slug}`
+ const markerTypeLabel = this.$t(`map.markerTypes.${e.features[0].properties.type}`)
+ const markerProfile = {
+ theUser: {
+ linkTitle: '@' + e.features[0].properties.slug,
+ link: `/profile/${e.features[0].properties.id}/${e.features[0].properties.slug}`,
+ },
+ user: {
+ linkTitle: '@' + e.features[0].properties.slug,
+ link: `/profile/${e.features[0].properties.id}/${e.features[0].properties.slug}`,
+ },
+ group: {
+ linkTitle: '&' + e.features[0].properties.slug,
+ link: `/group/${e.features[0].properties.id}/${e.features[0].properties.slug}`,
+ },
+ event: {
+ linkTitle: e.features[0].properties.slug,
+ link: `/post/${e.features[0].properties.id}/${e.features[0].properties.slug}`,
+ },
+ }
+ const markerProfileLinkTitle = markerProfile[e.features[0].properties.type].linkTitle
+ const markerProfileLink = markerProfile[e.features[0].properties.type].link
let description = `
@@ -258,11 +290,11 @@ export default {
`
description +=
- e.features[0].properties.about && e.features[0].properties.about.length > 0
+ e.features[0].properties.description && e.features[0].properties.description.length > 0
? `
- ${e.features[0].properties.about}
+ ${e.features[0].properties.description}
`
: ''
@@ -305,15 +337,18 @@ export default {
},
loadMarkersIconsAndAddMarkers() {
Promise.all(
- this.markers.icons.map(
+ this.markers.types.map(
(marker) =>
new Promise((resolve, reject) => {
// our images have to be in the 'static/img/*' folder otherwise they are not reachable via URL
- this.map.loadImage('img/mapbox/marker-icons/' + marker.name, (error, image) => {
- if (error) throw error
- this.map.addImage(marker.id, image)
- resolve()
- })
+ this.map.loadImage(
+ 'img/mapbox/marker-icons/' + marker.icon.mapName,
+ (error, image) => {
+ if (error) throw error
+ this.map.addImage(marker.icon.id, image)
+ resolve()
+ },
+ )
}),
),
).then(() => {
@@ -337,7 +372,7 @@ export default {
id: user.id,
slug: user.slug,
name: user.name,
- about: user.about ? user.about : undefined,
+ description: user.about ? user.about : undefined,
},
geometry: {
type: 'Point',
@@ -346,27 +381,6 @@ export default {
})
}
})
- // add markers for "groups"
- this.groups.forEach((group) => {
- if (group.location) {
- this.markers.geoJSON.push({
- type: 'Feature',
- properties: {
- type: 'group',
- iconName: 'marker-blue',
- iconRotate: 0.0,
- id: group.id,
- slug: group.slug,
- name: group.name,
- about: group.about ? group.about : undefined,
- },
- geometry: {
- type: 'Point',
- coordinates: this.getCoordinates(group.location),
- },
- })
- }
- })
// add marker for "currentUser"
if (this.currentUserCoordinates) {
this.markers.geoJSON.push({
@@ -378,7 +392,7 @@ export default {
id: this.currentUser.id,
slug: this.currentUser.slug,
name: this.currentUser.name,
- about: this.currentUser.about ? this.currentUser.about : undefined,
+ description: this.currentUser.about ? this.currentUser.about : undefined,
},
geometry: {
type: 'Point',
@@ -386,6 +400,48 @@ export default {
},
})
}
+ // add markers for "groups"
+ this.groups.forEach((group) => {
+ if (group.location) {
+ this.markers.geoJSON.push({
+ type: 'Feature',
+ properties: {
+ type: 'group',
+ iconName: 'marker-red',
+ iconRotate: 0.0,
+ id: group.id,
+ slug: group.slug,
+ name: group.name,
+ description: group.about ? group.about : undefined,
+ },
+ geometry: {
+ type: 'Point',
+ coordinates: this.getCoordinates(group.location),
+ },
+ })
+ }
+ })
+ // add markers for "posts", post type "Event" with location coordinates
+ this.posts.forEach((post) => {
+ if (post.postType.includes('Event') && post.eventLocation) {
+ this.markers.geoJSON.push({
+ type: 'Feature',
+ properties: {
+ type: 'event',
+ iconName: 'marker-purple',
+ iconRotate: 0.0,
+ id: post.id,
+ slug: post.slug,
+ name: post.title,
+ description: post.contentExcerpt,
+ },
+ geometry: {
+ type: 'Point',
+ coordinates: this.getCoordinates(post.eventLocation),
+ },
+ })
+ }
+ })
this.markers.isGeoJSON = true
}
@@ -483,6 +539,24 @@ export default {
},
fetchPolicy: 'cache-and-network',
},
+ Post: {
+ query() {
+ return filterPosts(this.$i18n)
+ },
+ variables() {
+ return {
+ filter: {
+ postType_in: ['Event'],
+ eventStart_gte: new Date(),
+ // would be good to just query for events with defined "eventLocation". couldn't get it working
+ },
+ }
+ },
+ update({ Post }) {
+ this.posts = Post
+ },
+ fetchPolicy: 'cache-and-network',
+ },
},
}
diff --git a/webapp/pages/post/create.vue b/webapp/pages/post/create.vue
index cc4fb828a..25b4ed44e 100644
--- a/webapp/pages/post/create.vue
+++ b/webapp/pages/post/create.vue
@@ -1,55 +1,33 @@
-
-
-
-
-
-
-
- {{ $t('post.createNewPost.title') }}
-
-
- {{ $t('post.createNewPost.title') }}
-
-
-
-
-
-
-
-
- {{ $t('post.createNewEvent.title') }}
-
-
- {{ $t('post.createNewEvent.title') }}
-
-
-
-
-
-
- {{ $t('post.createNewPost.forGroup.title', { name: group.name }) }}
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+ {{ $t('post.createNewPost.title') }}
+
+
+ {{ $t('post.createNewEvent.title') }}
+
+
+
+
+
@@ -74,6 +52,20 @@ export default {
group() {
return this.Group && this.Group[0] ? this.Group[0] : null
},
+ routes() {
+ return [
+ {
+ name: this.$t('post.name'),
+ path: `/post/create`,
+ type: 'post',
+ },
+ {
+ name: this.$t('post.event'),
+ path: `/`,
+ type: 'event',
+ },
+ ]
+ },
},
apollo: {
Group: {
@@ -97,8 +89,18 @@ export default {
},
},
methods: {
- switchPostType() {
- this.createEvent = !this.createEvent
+ switchPostType(event, route) {
+ if (route.route.type.toLowerCase() === 'event') {
+ this.createEvent = true
+ } else {
+ this.createEvent = false
+ }
+ // hacky way to set active element
+ const menuItems = document.querySelectorAll('.post-type-menu-item')
+ menuItems.forEach((menuItem) => {
+ menuItem.firstChild.classList.remove('router-link-exact-active', 'router-link-active')
+ })
+ event.target.classList.add('router-link-exact-active')
},
},
}
@@ -120,4 +122,16 @@ export default {
.create-form-btn .ds-button-ghost:hover {
background-color: transparent;
}
+
+.menu-item-active {
+ color: $color-primary;
+ border-left: 2px solid $color-primary;
+ background-color: #faf9fa;
+}
+
+@media screen and (min-width: 768px) {
+ .post-type-menu {
+ margin-top: 39px;
+ }
+}
diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue
index 06e95abb4..cef3a5d45 100644
--- a/webapp/pages/profile/_id/_slug.vue
+++ b/webapp/pages/profile/_id/_slug.vue
@@ -79,6 +79,16 @@
@optimistic="optimisticFollow"
@update="updateFollow"
/>
+
+ {{ $t('chat.userProfileButton.label') }}
+
@@ -172,6 +182,7 @@