From 418794332be0ff18fe68705d389805bca86607b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=B9=B3?= Date: Wed, 30 Mar 2022 10:28:45 +0800 Subject: [PATCH] test: add e2e case (#548) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: add e2e case * chore: tsconfig add e2e file exclude Co-authored-by: 谢仁洪 --- .gitignore | 5 + jest.e2e.config.ts | 16 + package.json | 4 + pnpm-lock.yaml | 606 +++++++++++++++++++- test/fixtures/normal/config/config.ts | 29 + test/fixtures/normal/src/favicon.ico | Bin 0 -> 16958 bytes test/fixtures/normal/src/layouts/index.less | 43 ++ test/fixtures/normal/src/layouts/index.tsx | 30 + test/fixtures/normal/src/pages/404.tsx | 7 + test/fixtures/normal/src/pages/docs.tsx | 5 + test/fixtures/normal/src/pages/index.less | 30 + test/fixtures/normal/src/pages/index.tsx | 33 ++ test/lib/testUtils.ts | 46 ++ test/normal.e2e.ts | 44 ++ test/tsconfig.json | 17 + tsconfig.base.json | 3 +- tsconfig.json | 3 +- 17 files changed, 917 insertions(+), 4 deletions(-) create mode 100644 jest.e2e.config.ts create mode 100644 test/fixtures/normal/config/config.ts create mode 100644 test/fixtures/normal/src/favicon.ico create mode 100644 test/fixtures/normal/src/layouts/index.less create mode 100644 test/fixtures/normal/src/layouts/index.tsx create mode 100644 test/fixtures/normal/src/pages/404.tsx create mode 100644 test/fixtures/normal/src/pages/docs.tsx create mode 100644 test/fixtures/normal/src/pages/index.less create mode 100644 test/fixtures/normal/src/pages/index.tsx create mode 100644 test/lib/testUtils.ts create mode 100644 test/normal.e2e.ts create mode 100644 test/tsconfig.json diff --git a/.gitignore b/.gitignore index 969abc7d1cbd..18e4e147a777 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,8 @@ *.tsbuildinfo .jest-cache .swc +/test/**/fixtures/*/dist +/test/**/fixtures/*/.umi +/test/**/fixtures/*/.umi-production +/test/**/fixtures/*/src/.umi +/test/**/fixtures/*/src/.umi-production diff --git a/jest.e2e.config.ts b/jest.e2e.config.ts new file mode 100644 index 000000000000..1ab13b64ae82 --- /dev/null +++ b/jest.e2e.config.ts @@ -0,0 +1,16 @@ +import { Config, createConfig } from 'umi/test'; + +export default { + ...createConfig(), + preset: 'jest-playwright-preset', + setupFilesAfterEnv: ['expect-playwright'], + testMatch: ['**/*.e2e.ts'], + modulePathIgnorePatterns: [ + '/packages/.+/compiled', + '/packages/.+/fixtures', + '/test/.+/fixtures', + ], + moduleNameMapper: { + 'test-utils': '/test/lib/testUtils.ts', + }, +} as Config.InitialOptions; diff --git a/package.json b/package.json index 85c4b7931bdf..c11d4c4ab12c 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "setup:webstorm": "esno scripts/setupWebStorm.ts", "test": "esno scripts/turbo.ts --cmd test --parallel", "test:clean": "esno scripts/turbo.ts --cmd test --no-cache --parallel -- --clearCache", + "test:e2e": "jest --config jest.e2e.config.ts", "tsc:check": "tsc --noEmit", "turbo:clean": "rimraf .turbo" }, @@ -50,13 +51,16 @@ "@vercel/ncc": "0.33.3", "dts-packer": "^0.0.3", "esno": "^0.14.1", + "expect-playwright": "^0.8.0", "git-repo-info": "^2.1.1", "husky": "^7.0.4", "jest": "^27.5.1", + "jest-playwright-preset": "^1.7.0", "lerna": "^4.0.0", "lint-staged": "^12.3.7", "matcher": "^5.0.0", "only-allow": "^1.1.0", + "playwright-chromium": "^1.20.1", "prettier": "^2.6.0", "prettier-plugin-organize-imports": "^2.3.4", "prettier-plugin-packagejson": "^2.2.16", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8dcd66cfa8d9..e85f928ca87b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,13 +20,16 @@ importers: '@vercel/ncc': 0.33.3 dts-packer: ^0.0.3 esno: ^0.14.1 + expect-playwright: ^0.8.0 git-repo-info: ^2.1.1 husky: ^7.0.4 jest: ^27.5.1 + jest-playwright-preset: ^1.7.0 lerna: ^4.0.0 lint-staged: ^12.3.7 matcher: ^5.0.0 only-allow: ^1.1.0 + playwright-chromium: ^1.20.1 prettier: ^2.6.0 prettier-plugin-organize-imports: ^2.3.4 prettier-plugin-packagejson: ^2.2.16 @@ -58,13 +61,16 @@ importers: '@vercel/ncc': 0.33.3 dts-packer: 0.0.3 esno: 0.14.1 + expect-playwright: 0.8.0 git-repo-info: 2.1.1 husky: 7.0.4 jest: 27.5.1_ts-node@10.7.0 + jest-playwright-preset: 1.7.0_jest@27.5.1 lerna: 4.0.0 lint-staged: 12.3.7 matcher: 5.0.0 only-allow: 1.1.0 + playwright-chromium: 1.20.1 prettier: 2.6.0 prettier-plugin-organize-imports: 2.3.4_prettier@2.6.0+typescript@4.6.2 prettier-plugin-packagejson: 2.2.16_prettier@2.6.0 @@ -6150,6 +6156,20 @@ packages: picomatch: 2.3.1 dev: false + /@sideway/address/4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + dependencies: + '@hapi/hoek': 9.2.1 + dev: true + + /@sideway/formula/3.0.0: + resolution: {integrity: sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==} + dev: true + + /@sideway/pinpoint/2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + dev: true + /@sindresorhus/is/4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -6980,6 +7000,12 @@ packages: resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} dev: false + /@types/wait-on/5.3.1: + resolution: {integrity: sha512-2FFOKCF/YydrMUaqg+fkk49qf0e5rDgwt6aQsMzFQzbS419h2gNOXyiwp/o2yYy27bi/C1z+HgfncryjGzlvgQ==} + dependencies: + '@types/node': 17.0.22 + dev: true + /@types/webpack-sources/3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: @@ -7008,6 +7034,14 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 + /@types/yauzl/2.9.2: + resolution: {integrity: sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==} + requiresBuild: true + dependencies: + '@types/node': 17.0.22 + dev: true + optional: true + /@umijs/route-utils/2.0.5: resolution: {integrity: sha512-HSuQebvOmupsWvzl6P2ZRH5cFOs+Wla3wlnKIG1n1bDXnAYuJ5gHpA0uAf0AZIP4wIL5xsxOqlgYqAoOuOSuKw==} dependencies: @@ -7767,6 +7801,13 @@ packages: resolution: {integrity: sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=} dev: true + /append-transform/2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} + dependencies: + default-require-extensions: 3.0.0 + dev: true + /aproba/1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} dev: true @@ -7775,6 +7816,10 @@ packages: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true + /archy/1.0.0: + resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=} + dev: true + /are-we-there-yet/1.1.7: resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} dependencies: @@ -7975,6 +8020,14 @@ packages: resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} dev: true + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.14.9 + transitivePeerDependencies: + - debug + dev: true + /axios/0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} dependencies: @@ -8437,6 +8490,10 @@ packages: dependencies: node-int64: 0.4.0 + /buffer-crc32/0.2.13: + resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} + dev: true + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -8560,6 +8617,16 @@ packages: responselike: 2.0.0 dev: true + /caching-transform/4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + dev: true + /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -8886,6 +8953,14 @@ packages: wordwrap: 0.0.2 dev: false + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -9016,6 +9091,11 @@ packages: /colorette/2.0.16: resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} + /colors/1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: true + /columnify/1.6.0: resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} engines: {node: '>=8.0.0'} @@ -9038,6 +9118,15 @@ packages: /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + /commander/3.0.2: + resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} + dev: true + + /commander/5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + dev: true + /commander/7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -9670,6 +9759,14 @@ packages: resolution: {integrity: sha1-8xz35PPiGLBybnOMqSoC00iO9hU=} dev: false + /cwd/0.10.0: + resolution: {integrity: sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=} + engines: {node: '>=0.8'} + dependencies: + find-pkg: 0.1.2 + fs-exists-sync: 0.1.0 + dev: true + /d/1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: @@ -9956,6 +10053,13 @@ packages: execa: 5.1.1 dev: true + /default-require-extensions/3.0.0: + resolution: {integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==} + engines: {node: '>=8'} + dependencies: + strip-bom: 4.0.0 + dev: true + /defaults/1.0.3: resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} dependencies: @@ -10511,6 +10615,10 @@ packages: resolution: {integrity: sha512-P0SgLrYl9iqlrt0h6n/iz5z5P1uuhnfHp9BA/tcLfqgVIWHNvY4Rm+jtSvnh1ADK4DJOYDwJvxlrHMRoLQMgmQ==} dev: false + /es6-error/4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + dev: true + /es6-iterator/2.0.3: resolution: {integrity: sha1-p96IkUGgWpSwhUQDstCg+/qY87c=} dependencies: @@ -10986,6 +11094,21 @@ packages: to-regex: 3.0.2 dev: false + /expand-tilde/1.2.2: + resolution: {integrity: sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=} + engines: {node: '>=0.10.0'} + dependencies: + os-homedir: 1.0.2 + dev: true + + /expect-playwright/0.7.2: + resolution: {integrity: sha512-5o9si+8SUi68QVI0CRVv8tvTjZinpJWRSfQ3GP6v0DvlK55lDgFvD79r6A/NU+EUawrBc62qP30MxzOUnXNJZQ==} + dev: true + + /expect-playwright/0.8.0: + resolution: {integrity: sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==} + dev: true + /expect/27.5.1: resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -11079,6 +11202,20 @@ packages: to-regex: 3.0.2 dev: false + /extract-zip/2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.9.2 + transitivePeerDependencies: + - supports-color + dev: true + /extrude-polyline/1.0.6: resolution: {integrity: sha1-fmr+HzSaQYL6P2GgDZOXm5XxiyA=} dependencies: @@ -11151,6 +11288,12 @@ packages: dependencies: bser: 2.1.1 + /fd-slicer/1.1.0: + resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} + dependencies: + pend: 1.2.0 + dev: true + /fecha/4.2.1: resolution: {integrity: sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==} dev: false @@ -11218,6 +11361,32 @@ packages: pkg-dir: 4.2.0 dev: true + /find-file-up/0.1.3: + resolution: {integrity: sha1-z2gJG8+fMApA2kEbN9pczlovvqA=} + engines: {node: '>=0.10.0'} + dependencies: + fs-exists-sync: 0.1.0 + resolve-dir: 0.1.1 + dev: true + + /find-pkg/0.1.2: + resolution: {integrity: sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=} + engines: {node: '>=0.10.0'} + dependencies: + find-file-up: 0.1.3 + dev: true + + /find-process/1.4.7: + resolution: {integrity: sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==} + hasBin: true + dependencies: + chalk: 4.1.2 + commander: 5.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: false @@ -11298,6 +11467,14 @@ packages: resolution: {integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=} dev: false + /foreground-child/2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + /forever-agent/0.6.1: resolution: {integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=} dev: true @@ -11393,6 +11570,15 @@ packages: resolution: {integrity: sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=} dev: true + /fromentries/1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + dev: true + + /fs-exists-sync/0.1.0: + resolution: {integrity: sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=} + engines: {node: '>=0.10.0'} + dev: true + /fs-extra/10.0.1: resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==} engines: {node: '>=12'} @@ -11662,6 +11848,24 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /global-modules/0.2.3: + resolution: {integrity: sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 0.1.5 + is-windows: 0.2.0 + dev: true + + /global-prefix/0.1.5: + resolution: {integrity: sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 0.2.0 + which: 1.3.1 + dev: true + /global/4.4.0: resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: @@ -11902,6 +12106,14 @@ packages: minimalistic-assert: 1.0.1 dev: false + /hasha/5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + dev: true + /hast-util-has-property/2.0.0: resolution: {integrity: sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==} dev: true @@ -11971,6 +12183,13 @@ packages: dependencies: react-is: 16.13.1 + /homedir-polyfill/1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: 1.0.0 + dev: true + /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -12775,10 +12994,14 @@ packages: /is-what/3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + /is-windows/0.2.0: + resolution: {integrity: sha1-3hqm1j6indJIc3tp8f+LgALSEIw=} + engines: {node: '>=0.10.0'} + dev: true + /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - dev: false /is-wsl/2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} @@ -12828,6 +13051,25 @@ packages: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} + /istanbul-lib-hook/3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} + dependencies: + append-transform: 2.0.0 + dev: true + + /istanbul-lib-instrument/4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.17.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /istanbul-lib-instrument/5.1.0: resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} engines: {node: '>=8'} @@ -12840,6 +13082,19 @@ packages: transitivePeerDependencies: - supports-color + /istanbul-lib-processinfo/2.0.2: + resolution: {integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==} + engines: {node: '>=8'} + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.3 + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 3.4.0 + dev: true + /istanbul-lib-report/3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} @@ -13166,6 +13421,28 @@ packages: '@types/node': 17.0.22 dev: true + /jest-playwright-preset/1.7.0_jest@27.5.1: + resolution: {integrity: sha512-G25Nik+By0SNniMDdkouDL/yA1LdqjzsXNSVU4xnRX1typjXRmzRE0aSgqxas2sRi8cwG3M1ioHdkLLsp6sang==} + peerDependencies: + jest: '>=26.6.3' + jest-circus: '>=26.6.3' + jest-environment-node: '>=26.6.3' + jest-runner: '>=26.6.3' + dependencies: + expect-playwright: 0.7.2 + jest: 27.5.1_ts-node@10.7.0 + jest-process-manager: 0.3.1 + nyc: 15.1.0 + playwright-core: 1.20.1 + rimraf: 3.0.2 + uuid: 8.3.2 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: true + /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} @@ -13178,6 +13455,24 @@ packages: jest-resolve: 27.5.1 dev: true + /jest-process-manager/0.3.1: + resolution: {integrity: sha512-x9W54UgZ7IkzUHgXtnI1x4GKOVjxtwW0CA/7yGbTHtT/YhENO0Lic2yfVyC/gekn7OIEMcQmy0L1r9WLQABfqw==} + dependencies: + '@types/wait-on': 5.3.1 + chalk: 4.1.2 + cwd: 0.10.0 + exit: 0.1.2 + find-process: 1.4.7 + prompts: 2.4.2 + signal-exit: 3.0.7 + spawnd: 5.0.0 + tree-kill: 1.2.2 + wait-on: 5.3.0 + transitivePeerDependencies: + - debug + - supports-color + dev: true + /jest-regex-util/26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} @@ -13415,6 +13710,16 @@ packages: hasBin: true dev: false + /joi/17.6.0: + resolution: {integrity: sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==} + dependencies: + '@hapi/hoek': 9.2.1 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.0 + '@sideway/pinpoint': 2.0.0 + dev: true + /joi2types/1.1.0: resolution: {integrity: sha512-FRSmkMZHOaqGwTH0jhSIn3WaLcQoACUDTlpLX3ZlWiykrxZO2G5xjdFIKW5fVy0lCj1omXRLRVyJ+x3gx4xr+A==} peerDependencies: @@ -13423,6 +13728,10 @@ packages: json-schema-to-typescript: 10.1.5 dev: true + /jpeg-js/0.4.3: + resolution: {integrity: sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==} + dev: true + /jquery-mousewheel/3.1.13: resolution: {integrity: sha1-BvAzXxbjU6aV5yBr9QUDy1I6buU=} dev: false @@ -14001,6 +14310,10 @@ packages: /lodash.debounce/4.0.8: resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} + /lodash.flattendeep/4.4.0: + resolution: {integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=} + dev: true + /lodash.isarray/4.0.0: resolution: {integrity: sha1-KspJayjEym1yZxUxNZDALm6jRAM=} deprecated: This package is deprecated. Use Array.isArray. @@ -14817,6 +15130,12 @@ packages: engines: {node: '>=4'} hasBin: true + /mime/3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -14887,7 +15206,6 @@ packages: /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} - dev: false /minipass-collect/1.0.2: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} @@ -15349,6 +15667,13 @@ packages: vm-browserify: 1.1.2 dev: false + /node-preload/0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + dependencies: + process-on-spawn: 1.0.0 + dev: true + /node-releases/2.0.2: resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} @@ -15543,6 +15868,42 @@ packages: resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} dev: true + /nyc/15.1.0: + resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} + engines: {node: '>=8.9'} + hasBin: true + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + caching-transform: 4.0.0 + convert-source-map: 1.8.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 2.0.0 + get-package-type: 0.1.0 + glob: 7.2.0 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-processinfo: 2.0.2 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.4 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.0.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - supports-color + dev: true + /oauth-sign/0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} dev: true @@ -15809,6 +16170,13 @@ packages: engines: {node: '>=8'} dev: true + /p-map/3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + /p-map/4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -15865,6 +16233,16 @@ packages: p-reduce: 2.1.0 dev: true + /package-hash/4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.9 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + dev: true + /pacote/11.3.5: resolution: {integrity: sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==} engines: {node: '>=10'} @@ -15955,6 +16333,11 @@ packages: engines: {node: '>= 0.10'} dev: true + /parse-passwd/1.0.0: + resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=} + engines: {node: '>=0.10.0'} + dev: true + /parse-path/4.0.3: resolution: {integrity: sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==} dependencies: @@ -16097,6 +16480,10 @@ packages: resolution: {integrity: sha1-jLxVbhvyUiF3eHwN4uDUNzuohck=} dev: false + /pend/1.2.0: + resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} + dev: true + /performance-now/2.1.0: resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=} dev: true @@ -16144,6 +16531,13 @@ packages: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} + /pixelmatch/5.2.1: + resolution: {integrity: sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==} + hasBin: true + dependencies: + pngjs: 4.0.1 + dev: true + /pkg-dir/3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -16165,6 +16559,58 @@ packages: find-up: 6.3.0 dev: true + /playwright-chromium/1.20.1: + resolution: {integrity: sha512-zDJm59GEOWrHqpByblzaKI+bpswd3nrheCoAGOTBDX7MsQYwAV/ZBS2aCJzeGxDt/67brq/fQuZse3GwnCk+6A==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + dependencies: + playwright-core: 1.20.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /playwright-core/1.20.1: + resolution: {integrity: sha512-A8ZsZ09gaSbxP0UijoLyzp3LJc0kWMxDooLPi+mm4/5iYnTbd6PF5nKjoFw1a7KwjZIEgdhJduah4BcUIh+IPA==} + engines: {node: '>=12'} + hasBin: true + dependencies: + colors: 1.4.0 + commander: 8.3.0 + debug: 4.3.3 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.0 + jpeg-js: 0.4.3 + mime: 3.0.0 + pixelmatch: 5.2.1 + pngjs: 6.0.0 + progress: 2.0.3 + proper-lockfile: 4.1.2 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + socks-proxy-agent: 6.1.1 + stack-utils: 2.0.5 + ws: 8.4.2 + yauzl: 2.10.0 + yazl: 2.5.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /pngjs/4.0.1: + resolution: {integrity: sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==} + engines: {node: '>=8.0.0'} + dev: true + + /pngjs/6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + dev: true + /polyline-miter-util/1.0.1: resolution: {integrity: sha1-tpPyOJ6g3tNqa89ezS7OS2kX2Vc=} dependencies: @@ -17248,11 +17694,23 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process-on-spawn/1.0.0: + resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} + engines: {node: '>=8'} + dependencies: + fromentries: 1.3.2 + dev: true + /process/0.11.10: resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} engines: {node: '>= 0.6.0'} dev: false + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + /promise-inflight/1.0.1: resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=} dev: true @@ -17287,6 +17745,14 @@ packages: react-is: 16.13.1 dev: false + /proper-lockfile/4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + dependencies: + graceful-fs: 4.2.9 + retry: 0.12.0 + signal-exit: 3.0.7 + dev: true + /property-information/6.1.1: resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==} dev: true @@ -17315,6 +17781,10 @@ packages: resolution: {integrity: sha512-wapJ3h/w8fRSyPEG0y2WMV+tf9xwvj3nxM6aHVuPEOwKs/t5xLSKZb44ubNTiqq2T6lmEMHEWGMTaU2L6ddaFA==} dev: false + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + /prr/1.0.1: resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=} optional: true @@ -18607,6 +19077,13 @@ packages: engines: {node: '>= 0.10'} dev: true + /release-zalgo/1.0.0: + resolution: {integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=} + engines: {node: '>=4'} + dependencies: + es6-error: 4.1.1 + dev: true + /remark-mdx/2.1.0: resolution: {integrity: sha512-J6Yqw566SaEy6A9Neni1JJTaEjbjsM3OsKqL04TtCvZhevRtFi8CG8GIQPzvxIRKRCAOnWw1Vpk1AInB1OpNqA==} dependencies: @@ -18703,6 +19180,10 @@ packages: resolution: {integrity: sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=} dev: false + /require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + /requires-port/1.0.0: resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=} dev: true @@ -18726,6 +19207,14 @@ packages: resolve-from: 5.0.0 dev: true + /resolve-dir/0.1.1: + resolution: {integrity: sha1-shklmlYC+sXFxJatiUpujMQwJh4=} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 1.2.2 + global-modules: 0.2.3 + dev: true + /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -19453,6 +19942,29 @@ packages: resolution: {integrity: sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==} dev: true + /spawn-wrap/2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + dev: true + + /spawnd/5.0.0: + resolution: {integrity: sha512-28+AJr82moMVWolQvlAIv3JcYDkjkFTEmfDc503wxrF5l2rQ3dFz6DpbXp3kD4zmgGGldfM4xM4v1sFj/ZaIOA==} + dependencies: + exit: 0.1.2 + signal-exit: 3.0.7 + tree-kill: 1.2.2 + wait-port: 0.2.9 + transitivePeerDependencies: + - supports-color + dev: true + /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: @@ -20414,6 +20926,11 @@ packages: punycode: 2.1.1 dev: true + /tree-kill/1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -21202,6 +21719,32 @@ packages: xml-name-validator: 3.0.0 dev: true + /wait-on/5.3.0: + resolution: {integrity: sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==} + engines: {node: '>=8.9.0'} + hasBin: true + dependencies: + axios: 0.21.4 + joi: 17.6.0 + lodash: 4.17.21 + minimist: 1.2.6 + rxjs: 6.6.7 + transitivePeerDependencies: + - debug + dev: true + + /wait-port/0.2.9: + resolution: {integrity: sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==} + engines: {node: '>=8'} + hasBin: true + dependencies: + chalk: 2.4.2 + commander: 3.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -21596,6 +22139,10 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 + /which-module/2.0.0: + resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} + dev: true + /which-pm-runs/1.1.0: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} @@ -21733,6 +22280,19 @@ packages: optional: true dev: true + /ws/8.4.2: + resolution: {integrity: sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws/8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} @@ -21758,6 +22318,10 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -21774,6 +22338,14 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + /yargs-parser/20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} @@ -21789,6 +22361,23 @@ packages: engines: {node: '>=12'} dev: true + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.0 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -21824,6 +22413,19 @@ packages: window-size: 0.1.0 dev: false + /yauzl/2.10.0: + resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + + /yazl/2.5.1: + resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} + dependencies: + buffer-crc32: 0.2.13 + dev: true + /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} diff --git a/test/fixtures/normal/config/config.ts b/test/fixtures/normal/config/config.ts new file mode 100644 index 000000000000..6367f9507e93 --- /dev/null +++ b/test/fixtures/normal/config/config.ts @@ -0,0 +1,29 @@ +export default { + routes: [ + { + path: '/', + redirect: '/index', + exact: true, + }, + { + path: '/index', + component: 'index', + exact: true, + }, + { + path: '/docs', + component: 'docs', + exact: true, + }, + { + component: '404', + }, + ], + history: { + type: 'hash' + }, + publicPath: './', + scripts: [ + `console.log('hello e2e')` + ] +}; diff --git a/test/fixtures/normal/src/favicon.ico b/test/fixtures/normal/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8830cf6821b354114848e6354889b8ecf6d2bc61 GIT binary patch literal 16958 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 EKbET!0{{R3 literal 0 HcmV?d00001 diff --git a/test/fixtures/normal/src/layouts/index.less b/test/fixtures/normal/src/layouts/index.less new file mode 100644 index 000000000000..1e17804c4901 --- /dev/null +++ b/test/fixtures/normal/src/layouts/index.less @@ -0,0 +1,43 @@ +.container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.menuContainer { + display: flex; + flex-direction: row; + justify-content: space-between; + --gutter: 16px; + width: 1024px; + max-width: calc(100% - var(--gutter) * 2); + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.menuTitle { + font-size: 1.5rem; +} + +.menu { + font-size: 1rem; +} + +.ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + //background-color: #333; +} + +.li { + margin: 0 0.7rem; + float: left; +} + +.divider { + width: 100%; + border-bottom: solid 1px; +} diff --git a/test/fixtures/normal/src/layouts/index.tsx b/test/fixtures/normal/src/layouts/index.tsx new file mode 100644 index 000000000000..3a16352549d7 --- /dev/null +++ b/test/fixtures/normal/src/layouts/index.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Link, Outlet } from 'umi'; +// @ts-ignore +import styles from './index.less'; + +export default function GlobalLayout() { + console.log(styles); + return ( +
+
+
Remix
+
+
    +
  • + Home +
  • +
  • + Remix Docs +
  • +
  • + GitHub +
  • +
+
+
+
+ +
+ ); +} diff --git a/test/fixtures/normal/src/pages/404.tsx b/test/fixtures/normal/src/pages/404.tsx new file mode 100644 index 000000000000..a722dd085b5c --- /dev/null +++ b/test/fixtures/normal/src/pages/404.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +export default () => ( +
+

404 not found

+
+); diff --git a/test/fixtures/normal/src/pages/docs.tsx b/test/fixtures/normal/src/pages/docs.tsx new file mode 100644 index 000000000000..d59ea9632598 --- /dev/null +++ b/test/fixtures/normal/src/pages/docs.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function Docs() { + return
This is Docs Page!
; +} diff --git a/test/fixtures/normal/src/pages/index.less b/test/fixtures/normal/src/pages/index.less new file mode 100644 index 000000000000..7a222f212fdf --- /dev/null +++ b/test/fixtures/normal/src/pages/index.less @@ -0,0 +1,30 @@ +.container { + --gutter: 16px; + display: grid; + padding-top: 4rem; + width: 1024px; + max-width: calc(100% - var(--gutter) * 2); + margin-left: auto; + margin-right: auto; + gap: 2rem; +} +@media screen and (min-width: 640px) { + .container { + gap: 4rem; + grid-template-columns: repeat(2,1fr); + } +} + +.p { + display: block; +} + +.leftContainer { + +} + +.rightContainer { + border: solid 1px; + border-radius: 0.5rem; + padding: 1.5ch 2ch; +} diff --git a/test/fixtures/normal/src/pages/index.tsx b/test/fixtures/normal/src/pages/index.tsx new file mode 100644 index 000000000000..20a6f41b8d76 --- /dev/null +++ b/test/fixtures/normal/src/pages/index.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +// @ts-ignore +import styles from './index.less'; + +export default () => { + return ( +
+
+

Welcome to Remix!

+

We're stoked that you're here. 🥳

+

+ Feel free to take a look around the code to see how Remix does things, + it might be a bit different than what you’re used to. When you're + ready to dive deeper, we've got plenty of resources to get you + up-and-running quickly. +

+

+ Check out all the demos in this starter, and then just delete the + app/routes/demos and app/styles/demos folders when you're ready to + turn this into your next project. +

+
+
+

Demos In This App

+
    +
  • Actions
  • +
  • Nested Routes
  • +
  • URL Params
  • +
+
+
+ ); +}; diff --git a/test/lib/testUtils.ts b/test/lib/testUtils.ts new file mode 100644 index 000000000000..184ea11c46b4 --- /dev/null +++ b/test/lib/testUtils.ts @@ -0,0 +1,46 @@ +import { execa } from '@umijs/utils/compiled/execa'; +import { ensureDir, existsSync, readFile, remove, writeFile } from 'fs-extra'; +import { dirname, join, resolve } from 'path'; + +export function createUmi(opts: { name: string; cwd: string }) { + const projectRoot = resolve(opts.cwd, opts.name); + + const read = (file: string) => { + return readFile(resolve(projectRoot, file), 'utf-8'); + }; + + const has = (file: string) => { + return existsSync(resolve(projectRoot, file)); + }; + + const write = (file: string, content: string) => { + const targetPath = resolve(projectRoot, file); + const dir = dirname(targetPath); + return ensureDir(dir).then(() => writeFile(targetPath, content)); + }; + + const rm = (file: string) => { + return remove(resolve(projectRoot, file)); + }; + + const build = () => { + const command = require.resolve('umi/bin/umi'); + return execa(command, ['build'], { + cwd: projectRoot, + }); + }; + + const getIndex = () => { + return `file:${join(projectRoot, 'dist/index.html')}`; + }; + + return { + projectRoot, + read, + has, + write, + rm, + build, + getIndex, + }; +} diff --git a/test/normal.e2e.ts b/test/normal.e2e.ts new file mode 100644 index 000000000000..3df20559719d --- /dev/null +++ b/test/normal.e2e.ts @@ -0,0 +1,44 @@ +import { join } from 'path'; +import { createUmi } from 'test-utils'; + +const fixtures = join(__dirname, 'fixtures'); + +jest.setTimeout(35 * 1000); + +test('normal e2e', async () => { + const { build, has, getIndex } = createUmi({ + name: 'normal', + cwd: fixtures, + }); + + const { stdout } = await build(); + expect(stdout).toMatch('Build index.html'); + expect(has('dist/index.html')).toBe(true); + + const logs = []; + const onConsole = (msg) => { + logs.push(msg.text()); + }; + + try { + page.on('console', onConsole); + await page.goto(getIndex()); + + await expect(page).toMatchText('#demoApp', ' Demos In This App '); + + // 样式判断 + const element = await page.$('.container___B5qAY'); + expect(element).toMatchComputedStyle('width', '1024px'); + + // 日志检查 + expect(logs.some((msg) => msg.match('hello e2e'))).toBe(true); + + // 点击文档页 + await page.click('a#docs'); + await expect(page).toHaveFocus('#docs'); + + await expect(page).toMatchText('div.doc', 'This is Docs Page!'); + } finally { + page.off('console', onConsole); + } +}); diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 000000000000..a9e6896c89e2 --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,17 @@ +{ + "exclude": ["**/dist/**"], + "include": ["."], + "compilerOptions": { + "target": "ESNext", + "module": "commonjs", + "allowJs": true, + "esModuleInterop": true, + "moduleResolution": "node", + "baseUrl": ".", + "jsx": "react", + "types": ["@types/jest", "jest-playwright-preset", "expect-playwright"], + "paths": { + "test-utils": ["./lib/testUtils.ts"] + } + } +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 73cec990d317..4a7788be2451 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -22,6 +22,7 @@ "**/examples", "**/dist", "**/fixtures", - "**/*.test.ts" + "**/*.test.ts", + "**/*.e2e.ts" ] } diff --git a/tsconfig.json b/tsconfig.json index 11d53f3b8552..b2f85632fc16 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,8 @@ "baseUrl": ".", "paths": { "@/*": ["*"], - "@@/*": [".umi/*"] + "@@/*": [".umi/*"], + "test-utils": ["test/lib/testUtils"] } } }