From 63483826619d068c81d0d39087904be4cc8a6902 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 19:22:51 +0900 Subject: [PATCH 01/17] =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8fbc058..5114a60 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,10 @@ pnpm run dev この Parquet ファイルは[時雨堂](https://shiguredo.jp/)の [WebRTC SFU Sora](https://sora.shiguredo.jp/) が出力する -クライアントの [WebRTC 統計情報](https://www.w3.org/TR/webrtc-stats/) を +クライアントから送られてくる [WebRTC 統計情報](https://www.w3.org/TR/webrtc-stats/) を [Fluent Bit](https://fluentbit.io/) 経由で [S3 互換オブジェクトストレージ](https://www.linode.com/products/object-storage/) へ保存し、 -ログを DuckDB で集約しテーブルを作成後、 Parquet ファイルとして出力したものです。元々のログは [JSONL](https://jsonlines.org/) 形式で gzip 圧縮です。 +DuckDB で集約し Parquet ファイルとして出力したものです。 +元々のログは [JSONL](https://jsonlines.org/) 形式で gzip 圧縮です。 - この Parquet ファイルは [zstd](https://github.com/facebook/zstd) で圧縮されています - この Parquet ファイルは [Cloudflare R2](https://www.cloudflare.com/developer-platform/r2/) に保存されており、パブリックで誰でもアクセスすることができます From bbb61d03c9c5269de1376e57771c692110f7d81a Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 19:51:58 +0900 Subject: [PATCH 02/17] pnpm install --- .github/workflows/ci.yml | 5 +- package.json | 3 + playwright.config.mts | 32 ++ pnpm-lock.yaml | 791 ++++++++++++++++++++++++++++++++++++++- test/main.test.mts | 5 - tests/main.spec.ts | 6 + 6 files changed, 826 insertions(+), 16 deletions(-) create mode 100644 playwright.config.mts delete mode 100644 test/main.test.mts create mode 100644 tests/main.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bae0483..73eb767 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,5 +19,8 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 22 + - run: pnpm --version - run: pnpm install - - run: pnpm test \ No newline at end of file + - run: pnpm run build + - run: pnpm exec playwright install + - run: pnpm exec playwright test \ No newline at end of file diff --git a/package.json b/package.json index a41cc24..6c3ba95 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "private": true, "scripts": { "dev": "vite", + "e2e-test": "playwright test", "build": "vite build", "lint": "biome lint src/", "fmt": "pnpm biome format --write src/ test/", @@ -13,6 +14,8 @@ }, "devDependencies": { "@biomejs/biome": "1.8.3", + "@playwright/test": "1.47.0", + "playwright": "1.47.0", "typescript": "5.5.4", "vite": "5.4.3", "vitest": "2.0.5" diff --git a/playwright.config.mts b/playwright.config.mts new file mode 100644 index 0000000..763cf07 --- /dev/null +++ b/playwright.config.mts @@ -0,0 +1,32 @@ +import { defineConfig, devices } from '@playwright/test' + +// pnpm exec playwright test --ui + +export default defineConfig({ + testDir: 'tests', + // fullyParallel: true, + reporter: 'html', + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + ], + webServer: { + command: 'pnpm run dev --port 5173', + url: 'http://localhost:5173/', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 087b3eb..1973c74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,15 +18,21 @@ importers: '@biomejs/biome': specifier: 1.8.3 version: 1.8.3 + '@playwright/test': + specifier: 1.47.0 + version: 1.47.0 + playwright: + specifier: 1.47.0 + version: 1.47.0 typescript: specifier: 5.5.4 version: 5.5.4 vite: specifier: 5.4.3 - version: 5.4.3(@types/node@20.16.5) + version: 5.4.3(@types/node@22.5.4) vitest: specifier: 2.0.5 - version: 2.0.5(@types/node@20.16.5) + version: 2.0.5(@types/node@22.5.4)(@vitest/browser@2.0.5) packages: @@ -38,6 +44,22 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@1.8.3': resolution: {integrity: sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==} engines: {node: '>=14.21.3'} @@ -91,6 +113,15 @@ packages: cpu: [x64] os: [win32] + '@bundled-es-modules/cookie@2.0.0': + resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@duckdb/duckdb-wasm@1.28.1-dev275.0': resolution: {integrity: sha512-JTM6UJCamSj5V9en3C0LQn8Tcd1zeKsHlIfetfxhRPYkUTNDuy1hhJ4i6NKu8hs/+2N1zCWtnUimltBcxStNtg==} @@ -232,6 +263,22 @@ packages: cpu: [x64] os: [win32] + '@inquirer/confirm@3.2.0': + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} + engines: {node: '>=18'} + + '@inquirer/core@9.1.0': + resolution: {integrity: sha512-RZVfH//2ytTjmaBIzeKT1zefcQZzuruwkpTwwbe/i2jTl4o9M+iML5ChULzz6iw1Ok8iUBBsRCjY2IEbD8Ft4w==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.5': + resolution: {integrity: sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==} + engines: {node: '>=18'} + + '@inquirer/type@1.5.3': + resolution: {integrity: sha512-xUQ14WQGR/HK5ei+2CvgcwoH9fQ4PgPGmVFSN0pc1+fVyDL3MREhyAY7nxEErSu6CkllBM3D7e3e+kOvtu+eIg==} + engines: {node: '>=18'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -250,6 +297,27 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@mswjs/interceptors@0.29.1': + resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==} + engines: {node: '>=18'} + + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@playwright/test@1.47.0': + resolution: {integrity: sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA==} + engines: {node: '>=18'} + hasBin: true + + '@polka/url@1.0.0-next.25': + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@rollup/rollup-android-arm-eabi@4.21.2': resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} cpu: [arm] @@ -333,18 +401,64 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/command-line-args@5.2.3': resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} '@types/command-line-usage@5.0.4': resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + '@types/node@20.16.5': resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + '@types/node@22.5.4': + resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@vitest/browser@2.0.5': + resolution: {integrity: sha512-VbOYtu/6R3d7ASZREcrJmRY/sQuRFO9wMVsEDqfYbWiJRh2fDNi8CL1Csn7Ux31pOcPmmM5QvzFCMpiojvVh8g==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 2.0.5 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -363,14 +477,33 @@ packages: '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + apache-arrow@17.0.0: resolution: {integrity: sha512-X0p7auzdnGuhYMVKYINdQssS4EcKec9TCXyez/qtJt32DrIMGbzqiaMiQ0X6fQlQpw8Fl0Qygcv4dfRAr5Gu9Q==} hasBin: true + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} @@ -395,6 +528,10 @@ packages: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -403,10 +540,28 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -418,6 +573,10 @@ packages: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -435,11 +594,29 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -454,11 +631,20 @@ packages: flatbuffers@24.3.25: resolution: {integrity: sha512-3HDgPbgiwWMI9zVB7VYBHaMrbOO7Gm0v+yD2FV/sCKj+9NDeVL7BOBYUuhWAQGKWOzBo8S9WdMvV0eixO233XQ==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -466,14 +652,32 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -481,6 +685,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + json-bignum@0.0.3: resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==} engines: {node: '>=0.8'} @@ -494,6 +701,10 @@ packages: loupe@3.1.1: resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} @@ -504,9 +715,27 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.4.3: + resolution: {integrity: sha512-PXK3wOQHwDtz6JYVyAVlQtzrLr6bOAJxggw5UHm3CId79+W7238aNBD1zJVkFY53o/DMacuIfgesW2nv9yCO3Q==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -520,6 +749,9 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -528,6 +760,9 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -538,10 +773,47 @@ packages: picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + playwright-core@1.47.0: + resolution: {integrity: sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.47.0: + resolution: {integrity: sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==} + engines: {node: '>=18'} + hasBin: true + postcss@8.4.45: resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} engines: {node: ^10 || ^12 || >=14} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + rollup@4.21.2: resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -562,6 +834,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -569,6 +845,10 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} @@ -576,10 +856,25 @@ packages: resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} engines: {node: '>=10'} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -604,9 +899,25 @@ packages: resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} engines: {node: '>=14.0.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} + typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -623,6 +934,13 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + vite-node@2.0.5: resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -698,6 +1016,42 @@ packages: resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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 + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + snapshots: '@75lb/deep-merge@1.1.2': @@ -710,6 +1064,28 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + optional: true + + '@babel/helper-validator-identifier@7.24.7': + optional: true + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + optional: true + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + optional: true + '@biomejs/biome@1.8.3': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.8.3 @@ -745,6 +1121,22 @@ snapshots: '@biomejs/cli-win32-x64@1.8.3': optional: true + '@bundled-es-modules/cookie@2.0.0': + dependencies: + cookie: 0.5.0 + optional: true + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + optional: true + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + optional: true + '@duckdb/duckdb-wasm@1.28.1-dev275.0': dependencies: apache-arrow: 17.0.0 @@ -818,6 +1210,37 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@inquirer/confirm@3.2.0': + dependencies: + '@inquirer/core': 9.1.0 + '@inquirer/type': 1.5.3 + optional: true + + '@inquirer/core@9.1.0': + dependencies: + '@inquirer/figures': 1.0.5 + '@inquirer/type': 1.5.3 + '@types/mute-stream': 0.0.4 + '@types/node': 22.5.4 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optional: true + + '@inquirer/figures@1.0.5': + optional: true + + '@inquirer/type@1.5.3': + dependencies: + mute-stream: 1.0.0 + optional: true + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -835,6 +1258,35 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@mswjs/interceptors@0.29.1': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + optional: true + + '@open-draft/deferred-promise@2.2.0': + optional: true + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + optional: true + + '@open-draft/until@2.1.0': + optional: true + + '@playwright/test@1.47.0': + dependencies: + playwright: 1.47.0 + + '@polka/url@1.0.0-next.25': + optional: true + '@rollup/rollup-android-arm-eabi@4.21.2': optional: true @@ -887,16 +1339,76 @@ snapshots: dependencies: tslib: 2.7.0 + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.25.6 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + optional: true + + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + optional: true + + '@types/aria-query@5.0.4': + optional: true + '@types/command-line-args@5.2.3': {} '@types/command-line-usage@5.0.4': {} + '@types/cookie@0.6.0': + optional: true + '@types/estree@1.0.5': {} + '@types/mute-stream@0.0.4': + dependencies: + '@types/node': 22.5.4 + optional: true + '@types/node@20.16.5': dependencies: undici-types: 6.19.8 + '@types/node@22.5.4': + dependencies: + undici-types: 6.19.8 + optional: true + + '@types/statuses@2.0.5': + optional: true + + '@types/tough-cookie@4.0.5': + optional: true + + '@types/wrap-ansi@3.0.0': + optional: true + + '@vitest/browser@2.0.5(playwright@1.47.0)(typescript@5.5.4)(vitest@2.0.5)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/utils': 2.0.5 + magic-string: 0.30.11 + msw: 2.4.3(typescript@5.5.4) + sirv: 2.0.4 + vitest: 2.0.5(@types/node@22.5.4)(@vitest/browser@2.0.5) + ws: 8.18.0 + optionalDependencies: + playwright: 1.47.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + optional: true + '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -930,10 +1442,26 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + optional: true + + ansi-regex@5.0.1: + optional: true + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + optional: true + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: + optional: true + apache-arrow@17.0.0: dependencies: '@swc/helpers': 0.5.13 @@ -946,6 +1474,11 @@ snapshots: json-bignum: 0.0.3 tslib: 2.7.0 + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + optional: true + array-back@3.1.0: {} array-back@6.2.2: {} @@ -966,6 +1499,13 @@ snapshots: dependencies: chalk: 4.1.2 + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + optional: true + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -973,10 +1513,31 @@ snapshots: check-error@2.1.1: {} + cli-spinners@2.9.2: + optional: true + + cli-width@4.1.0: + optional: true + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + optional: true + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + optional: true + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: + optional: true + color-name@1.1.4: {} command-line-args@5.2.1: @@ -993,6 +1554,9 @@ snapshots: table-layout: 3.0.2 typical: 7.1.1 + cookie@0.5.0: + optional: true + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -1005,6 +1569,15 @@ snapshots: deep-eql@5.0.2: {} + dequal@2.0.3: + optional: true + + dom-accessibility-api@0.5.16: + optional: true + + emoji-regex@8.0.0: + optional: true + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -1031,6 +1604,12 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + escalade@3.2.0: + optional: true + + escape-string-regexp@1.0.5: + optional: true + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.5 @@ -1053,21 +1632,45 @@ snapshots: flatbuffers@24.3.25: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true + get-caller-file@2.0.5: + optional: true + get-func-name@2.0.2: {} get-stream@8.0.1: {} + graphql@16.9.0: + optional: true + + has-flag@3.0.0: + optional: true + has-flag@4.0.0: {} + headers-polyfill@4.0.3: + optional: true + human-signals@5.0.0: {} + is-fullwidth-code-point@3.0.0: + optional: true + + is-node-process@1.2.0: + optional: true + is-stream@3.0.0: {} isexe@2.0.0: {} + js-tokens@4.0.0: + optional: true + json-bignum@0.0.3: {} lodash.camelcase@4.3.0: {} @@ -1078,6 +1681,9 @@ snapshots: dependencies: get-func-name: 2.0.2 + lz-string@1.5.0: + optional: true + magic-string@0.30.11: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -1086,8 +1692,37 @@ snapshots: mimic-fn@4.0.0: {} + mrmime@2.0.0: + optional: true + ms@2.1.3: {} + msw@2.4.3(typescript@5.5.4): + dependencies: + '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 3.2.0 + '@mswjs/interceptors': 0.29.1 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + chalk: 4.1.2 + graphql: 16.9.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.2.2 + strict-event-emitter: 0.5.1 + type-fest: 4.26.1 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.5.4 + optional: true + + mute-stream@1.0.0: + optional: true + nanoid@3.3.7: {} npm-run-path@5.3.0: @@ -1098,22 +1733,64 @@ snapshots: dependencies: mimic-fn: 4.0.0 + outvariant@1.4.3: + optional: true + path-key@3.1.1: {} path-key@4.0.0: {} + path-to-regexp@6.2.2: + optional: true + pathe@1.1.2: {} pathval@2.0.0: {} picocolors@1.1.0: {} + playwright-core@1.47.0: {} + + playwright@1.47.0: + dependencies: + playwright-core: 1.47.0 + optionalDependencies: + fsevents: 2.3.2 + postcss@8.4.45: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 source-map-js: 1.2.0 + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + optional: true + + psl@1.9.0: + optional: true + + punycode@2.3.1: + optional: true + + querystringify@2.2.0: + optional: true + + react-is@17.0.2: + optional: true + + regenerator-runtime@0.14.1: + optional: true + + require-directory@2.1.1: + optional: true + + requires-port@1.0.0: + optional: true + rollup@4.21.2: dependencies: '@types/estree': 1.0.5 @@ -1146,16 +1823,46 @@ snapshots: signal-exit@4.1.0: {} + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.25 + mrmime: 2.0.0 + totalist: 3.0.1 + optional: true + source-map-js@1.2.0: {} stackback@0.0.2: {} + statuses@2.0.1: + optional: true + std-env@3.7.0: {} stream-read-all@3.0.1: {} + strict-event-emitter@0.5.1: + optional: true + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + optional: true + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + optional: true + strip-final-newline@3.0.0: {} + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + optional: true + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -1178,8 +1885,25 @@ snapshots: tinyspy@3.0.0: {} + totalist@3.0.1: + optional: true + + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + optional: true + tslib@2.7.0: {} + type-fest@0.21.3: + optional: true + + type-fest@4.26.1: + optional: true + typescript@5.5.4: {} typical@4.0.0: {} @@ -1188,13 +1912,22 @@ snapshots: undici-types@6.19.8: {} - vite-node@2.0.5(@types/node@20.16.5): + universalify@0.2.0: + optional: true + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + optional: true + + vite-node@2.0.5(@types/node@22.5.4): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.4.3(@types/node@20.16.5) + vite: 5.4.3(@types/node@22.5.4) transitivePeerDependencies: - '@types/node' - less @@ -1206,16 +1939,16 @@ snapshots: - supports-color - terser - vite@5.4.3(@types/node@20.16.5): + vite@5.4.3(@types/node@22.5.4): dependencies: esbuild: 0.21.5 postcss: 8.4.45 rollup: 4.21.2 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 22.5.4 fsevents: 2.3.3 - vitest@2.0.5(@types/node@20.16.5): + vitest@2.0.5(@types/node@22.5.4)(@vitest/browser@2.0.5): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 @@ -1233,11 +1966,12 @@ snapshots: tinybench: 2.9.0 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.3(@types/node@20.16.5) - vite-node: 2.0.5(@types/node@20.16.5) + vite: 5.4.3(@types/node@22.5.4) + vite-node: 2.0.5(@types/node@22.5.4) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 22.5.4 + '@vitest/browser': 2.0.5(playwright@1.47.0)(typescript@5.5.4)(vitest@2.0.5) transitivePeerDependencies: - less - lightningcss @@ -1258,3 +1992,40 @@ snapshots: stackback: 0.0.2 wordwrapjs@5.1.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + optional: true + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + optional: true + + ws@8.18.0: + optional: true + + y18n@5.0.8: + optional: true + + yargs-parser@21.1.1: + optional: true + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + optional: true + + yoctocolors-cjs@2.1.2: + optional: true diff --git a/test/main.test.mts b/test/main.test.mts deleted file mode 100644 index a2d03d6..0000000 --- a/test/main.test.mts +++ /dev/null @@ -1,5 +0,0 @@ -import { expect, test } from 'vitest' - -test('test', () => { - expect(1).toBe(1) -}) diff --git a/tests/main.spec.ts b/tests/main.spec.ts new file mode 100644 index 0000000..6d8b8d8 --- /dev/null +++ b/tests/main.spec.ts @@ -0,0 +1,6 @@ +import { expect, test } from '@playwright/test' + +test('scan parquet', async ({ page }) => { + await page.goto('http://localhost:5173/index.html') + await page.click('#scan-parquet') +}) From 0ac8fde2dc510d27bd241a871000e2272f0ca065 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 19:58:32 +0900 Subject: [PATCH 03/17] =?UTF-8?q?firefox=20/=20webkit=20=E3=81=A7=E3=82=82?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playwright.config.mts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/playwright.config.mts b/playwright.config.mts index 763cf07..71a4210 100644 --- a/playwright.config.mts +++ b/playwright.config.mts @@ -12,15 +12,15 @@ export default defineConfig({ use: { ...devices['Desktop Chrome'] }, }, - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, ], webServer: { command: 'pnpm run dev --port 5173', From bb16d1bb143757ad9bc030d67af4c7bf644ad860 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 20:02:01 +0900 Subject: [PATCH 04/17] =?UTF-8?q?=E4=B8=80=E6=97=A6=20chromium=20=E9=99=90?= =?UTF-8?q?=E5=AE=9A=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- playwright.config.mts | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 73eb767..1458202 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,5 +22,5 @@ jobs: - run: pnpm --version - run: pnpm install - run: pnpm run build - - run: pnpm exec playwright install - - run: pnpm exec playwright test \ No newline at end of file + - run: pnpm exec playwright install chromium --with-deps + - run: pnpm exec playwright test --project=chromium \ No newline at end of file diff --git a/playwright.config.mts b/playwright.config.mts index 71a4210..763cf07 100644 --- a/playwright.config.mts +++ b/playwright.config.mts @@ -12,15 +12,15 @@ export default defineConfig({ use: { ...devices['Desktop Chrome'] }, }, - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, ], webServer: { command: 'pnpm run dev --port 5173', From ef8f29f6ebdf1b0635bdfe524583332a49434212 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 20:06:45 +0900 Subject: [PATCH 05/17] =?UTF-8?q?e2e.yml=20=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 +--- .github/workflows/e2e.yml | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/e2e.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1458202..55e2e34 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,6 +21,4 @@ jobs: node-version: 22 - run: pnpm --version - run: pnpm install - - run: pnpm run build - - run: pnpm exec playwright install chromium --with-deps - - run: pnpm exec playwright test --project=chromium \ No newline at end of file + - run: pnpm run build \ No newline at end of file diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 0000000..32de792 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,25 @@ +name: e2e-test + +on: + push: + paths-ignore: + - "LICENSE" + - "README.md" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + e2e-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - run: pnpm --version + - run: pnpm install + - run: pnpm exec playwright install chromium --with-deps + - run: pnpm exec playwright test --project=chromium \ No newline at end of file From 09c808ec3a4f4a79e0a15474e6fd6681d906a0a6 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 20:35:50 +0900 Subject: [PATCH 06/17] =?UTF-8?q?ci=20=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 17 +++++++++++++++-- .github/workflows/e2e.yml | 25 ------------------------- package.json | 6 +++--- playwright.config.mts | 2 +- tests/{ => playwright}/main.spec.ts | 0 vitest.config.mts | 7 +++++++ 6 files changed, 26 insertions(+), 31 deletions(-) delete mode 100644 .github/workflows/e2e.yml rename tests/{ => playwright}/main.spec.ts (100%) create mode 100644 vitest.config.mts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 55e2e34..8e5d75f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ concurrency: cancel-in-progress: true jobs: - ci: + build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -21,4 +21,17 @@ jobs: node-version: 22 - run: pnpm --version - run: pnpm install - - run: pnpm run build \ No newline at end of file + - run: pnpm run build + test-playwright: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - run: pnpm --version + - run: pnpm install + - run: pnpm exec playwright install chromium --with-deps + - run: pnpm test:playwright \ No newline at end of file diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml deleted file mode 100644 index 32de792..0000000 --- a/.github/workflows/e2e.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: e2e-test - -on: - push: - paths-ignore: - - "LICENSE" - - "README.md" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - e2e-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22 - - run: pnpm --version - - run: pnpm install - - run: pnpm exec playwright install chromium --with-deps - - run: pnpm exec playwright test --project=chromium \ No newline at end of file diff --git a/package.json b/package.json index 6c3ba95..63b127a 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,11 @@ "private": true, "scripts": { "dev": "vite", - "e2e-test": "playwright test", + "test:vitest": "vitest run", + "test:playwright": "playwright tests", "build": "vite build", "lint": "biome lint src/", - "fmt": "pnpm biome format --write src/ test/", - "test": "vitest run", + "fmt": "pnpm biome format --write src/ tests/", "check": "tsc --noEmit" }, "devDependencies": { diff --git a/playwright.config.mts b/playwright.config.mts index 763cf07..aa3537e 100644 --- a/playwright.config.mts +++ b/playwright.config.mts @@ -3,7 +3,7 @@ import { defineConfig, devices } from '@playwright/test' // pnpm exec playwright test --ui export default defineConfig({ - testDir: 'tests', + testDir: 'tests/playwright', // fullyParallel: true, reporter: 'html', projects: [ diff --git a/tests/main.spec.ts b/tests/playwright/main.spec.ts similarity index 100% rename from tests/main.spec.ts rename to tests/playwright/main.spec.ts diff --git a/vitest.config.mts b/vitest.config.mts new file mode 100644 index 0000000..2c3a15c --- /dev/null +++ b/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + dir: 'tests/vitest', + }, +}) From 9409598fb0292c2ad89ecba6cfb4334b371ef13f Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 20:36:26 +0900 Subject: [PATCH 07/17] =?UTF-8?q?ci=20=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8e5d75f..c881f6b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ concurrency: cancel-in-progress: true jobs: - build: + ci: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -21,9 +21,11 @@ jobs: node-version: 22 - run: pnpm --version - run: pnpm install + - run: pnpm fmt + - run: pnpm lint - run: pnpm run build test-playwright: - needs: build + needs: ci runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 729b6942b358427c1524fdb384eb401c9cbce9f8 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 20:45:36 +0900 Subject: [PATCH 08/17] =?UTF-8?q?CI=20=E3=81=AE=E3=83=99=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- tests/playwright/main.spec.ts | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 63b127a..f03a860 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "vite", "test:vitest": "vitest run", - "test:playwright": "playwright tests", + "test:playwright": "playwright test", "build": "vite build", "lint": "biome lint src/", "fmt": "pnpm biome format --write src/ tests/", diff --git a/tests/playwright/main.spec.ts b/tests/playwright/main.spec.ts index 6d8b8d8..c00f4db 100644 --- a/tests/playwright/main.spec.ts +++ b/tests/playwright/main.spec.ts @@ -2,5 +2,18 @@ import { expect, test } from '@playwright/test' test('scan parquet', async ({ page }) => { await page.goto('http://localhost:5173/index.html') + // 初期値が0であることを確認 + await expect(page.locator('#scanned')).toHaveText('Scanned: false') + + // 「Scan Parquet」ボタンをクリック await page.click('#scan-parquet') + + // true になるまで待機(最大10秒) + await expect(page.locator('#scanned')).toHaveText('Scanned: true', { timeout: 30000 }) + + // 「load table」ボタンをクリック + await page.click('#load-table') + + // テーブルが読み込まれたことを確認 + await expect(page.locator('#table')).toBeVisible() }) From 91d504a8e7a34ccb947e758d6fc965f10bfaf07e Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 8 Sep 2024 23:55:15 +0900 Subject: [PATCH 09/17] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 3 ++- src/main.mts | 9 ++++++++- tests/playwright/main.spec.ts | 20 ++++++++++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 152e40d..6d9924c 100644 --- a/index.html +++ b/index.html @@ -47,7 +47,8 @@

Scanned: false

Counted: 0

- + +
diff --git a/src/main.mts b/src/main.mts index 03256ee..9616231 100644 --- a/src/main.mts +++ b/src/main.mts @@ -80,7 +80,7 @@ document.addEventListener('DOMContentLoaded', async () => { await conn.close() }) - document.getElementById('aggregation-example')?.addEventListener('click', async () => { + document.getElementById('aggregation')?.addEventListener('click', async () => { const conn = await db.connect() // SQL は適当ですので、参考にしないで下さい const result = await conn.query(` @@ -141,4 +141,11 @@ document.addEventListener('DOMContentLoaded', async () => { resultElement.appendChild(table) } }) + + document.getElementById('clear')?.addEventListener('click', () => { + const resultElement = document.getElementById('result') + if (resultElement) { + resultElement.innerHTML = '' + } + }) }) diff --git a/tests/playwright/main.spec.ts b/tests/playwright/main.spec.ts index c00f4db..f3007a4 100644 --- a/tests/playwright/main.spec.ts +++ b/tests/playwright/main.spec.ts @@ -2,6 +2,10 @@ import { expect, test } from '@playwright/test' test('scan parquet', async ({ page }) => { await page.goto('http://localhost:5173/index.html') + + // ページが完全に読み込まれるのを待つ + await page.waitForLoadState('networkidle') + // 初期値が0であることを確認 await expect(page.locator('#scanned')).toHaveText('Scanned: false') @@ -14,6 +18,18 @@ test('scan parquet', async ({ page }) => { // 「load table」ボタンをクリック await page.click('#load-table') - // テーブルが読み込まれたことを確認 - await expect(page.locator('#table')).toBeVisible() + // #result に table エレメントが div に追加されるか + await expect(page.locator('#result').locator('table')).toBeVisible() + + // 一回テーブル削除する + await page.click('#clear') + + // #result から テーブルが削除されたことを確認する + await expect(page.locator('#result').locator('table')).not.toBeVisible() + + await page.click('#aggregation') + + await expect(page.locator('#result').locator('table')).toBeVisible() + + await page.close() }) From f51242b6868a5dc008aed62ef3b1526e7ac0bcf2 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:04:12 +0900 Subject: [PATCH 10/17] =?UTF-8?q?E2E=20=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=A8=E3=80=81=E3=82=B5=E3=83=B3=E3=83=97=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- index.html | 2 +- src/main.mts | 4 +++- tests/playwright/main.spec.ts | 10 ++++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5114a60..bf9a389 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ pnpm run dev ``` - ブラウザで `http://localhost:5173/` にアクセスして、`Scan Parquet` ボタンをクリックしてください -- `Load Table (LIMIT 100)` ボタンをクリックして、データを表示してみてください +- `Load Table (LIMIT 100)` ボタンをクリックして、サンプリングした 10% のデータを表示してみてください - `Aggregation` ボタンをクリックして、集計した結果を表示してみてください ## 動作例 @@ -48,7 +48,7 @@ DuckDB で集約し Parquet ファイルとして出力したものです。 ### DuckDB でアクセスしてみる ```sql -D select * FROM parquet_scan('https://duckdb-wasm.shiguredo.jp/ES6VB3580N3R7EGKGT0R9NKWPR.parquet'); +D SELECT * FROM parquet_scan('https://duckdb-wasm.shiguredo.jp/ES6VB3580N3R7EGKGT0R9NKWPR.parquet'); ┌──────────────────────┬──────────────────────┬─────────────────┬───┬───────────────────┬─────────────────────┐ │ connection_id │ id │ label │ … │ rtc_timestamp │ rtc_type │ │ varchar │ varchar │ varchar │ │ double │ varchar │ diff --git a/index.html b/index.html index 6d9924c..9049ced 100644 --- a/index.html +++ b/index.html @@ -46,7 +46,7 @@

DuckDB-Wasm + Parquet + S3-compatible object storage

Scanned: false

Counted: 0

- +
diff --git a/src/main.mts b/src/main.mts index 9616231..73fb027 100644 --- a/src/main.mts +++ b/src/main.mts @@ -50,9 +50,11 @@ document.addEventListener('DOMContentLoaded', async () => { document.getElementById('load-table')?.addEventListener('click', async () => { const conn = await db.connect() + // 10% のサンプルを取得 const result = await conn.query(` SELECT timestamp, connection_id, rtc_type - FROM rtc_stats LIMIT 100; + FROM rtc_stats + USING SAMPLE 10 PERCENT (bernoulli); `) const resultElement = document.getElementById('result') diff --git a/tests/playwright/main.spec.ts b/tests/playwright/main.spec.ts index f3007a4..4107ed1 100644 --- a/tests/playwright/main.spec.ts +++ b/tests/playwright/main.spec.ts @@ -6,7 +6,7 @@ test('scan parquet', async ({ page }) => { // ページが完全に読み込まれるのを待つ await page.waitForLoadState('networkidle') - // 初期値が0であることを確認 + // 初期値が 0 であることを確認 await expect(page.locator('#scanned')).toHaveText('Scanned: false') // 「Scan Parquet」ボタンをクリック @@ -18,17 +18,19 @@ test('scan parquet', async ({ page }) => { // 「load table」ボタンをクリック await page.click('#load-table') - // #result に table エレメントが div に追加されるか + // テーブルが表示されたことを確認 await expect(page.locator('#result').locator('table')).toBeVisible() - // 一回テーブル削除する + // 「Clear」ボタンをクリック await page.click('#clear') - // #result から テーブルが削除されたことを確認する + // テーブルがクリアされたことを確認 await expect(page.locator('#result').locator('table')).not.toBeVisible() + // 「Aggregation」ボタンをクリック await page.click('#aggregation') + // テーブルが表示されたことを確認 await expect(page.locator('#result').locator('table')).toBeVisible() await page.close() From 47ad238203f967eb9888a594a43476daeb07c537 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:11:56 +0900 Subject: [PATCH 11/17] =?UTF-8?q?1%=20=E3=81=AB=E5=A4=89=E6=9B=B4=20e2e=20?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=AF=E9=80=9A=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 ++- README.md | 2 +- index.html | 2 +- src/main.mts | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 35adb0e..2d75cb3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,8 @@ - [ADD] Parquet ファイルを S3-compatible object storage から読み込む仕組みを追加 - [ADD] 読み込んだ Parquet ファイルをテーブルにする仕組みを追加 -- [ADD] 読み込んだ Parquet ファイルを表示する仕組みを追加 +- [ADD] 読み込んだ Parquet ファイルの 10% を表示する仕組みを追加 - [ADD] 読み込んだ Parquet ファイルを利用して集計する仕組みを追加 +- [ADD] テーブルをクリアにする仕組みを追加 - [ADD] DuckDB WASM を `next` で追加 - 通常だと古いバージョンがインストールされるので最新を利用するようにする diff --git a/README.md b/README.md index bf9a389..e9e7150 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ pnpm run dev ``` - ブラウザで `http://localhost:5173/` にアクセスして、`Scan Parquet` ボタンをクリックしてください -- `Load Table (LIMIT 100)` ボタンをクリックして、サンプリングした 10% のデータを表示してみてください +- `Load Table (Sample 1%)` ボタンをクリックして、サンプリングした 1% のデータを表示してみてください - `Aggregation` ボタンをクリックして、集計した結果を表示してみてください ## 動作例 diff --git a/index.html b/index.html index 9049ced..750624e 100644 --- a/index.html +++ b/index.html @@ -46,7 +46,7 @@

DuckDB-Wasm + Parquet + S3-compatible object storage

Scanned: false

Counted: 0

- +
diff --git a/src/main.mts b/src/main.mts index 73fb027..d059dc5 100644 --- a/src/main.mts +++ b/src/main.mts @@ -54,7 +54,7 @@ document.addEventListener('DOMContentLoaded', async () => { const result = await conn.query(` SELECT timestamp, connection_id, rtc_type FROM rtc_stats - USING SAMPLE 10 PERCENT (bernoulli); + USING SAMPLE 1 PERCENT (bernoulli); `) const resultElement = document.getElementById('result') From 442d591bf70003f5f9530f140d7f102f3c0a9f07 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:14:12 +0900 Subject: [PATCH 12/17] samples --- index.html | 2 +- src/main.mts | 2 +- tests/playwright/main.spec.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 750624e..064ded4 100644 --- a/index.html +++ b/index.html @@ -46,7 +46,7 @@

DuckDB-Wasm + Parquet + S3-compatible object storage

Scanned: false

Counted: 0

- +
diff --git a/src/main.mts b/src/main.mts index d059dc5..48c1f52 100644 --- a/src/main.mts +++ b/src/main.mts @@ -48,7 +48,7 @@ document.addEventListener('DOMContentLoaded', async () => { await conn.close() }) - document.getElementById('load-table')?.addEventListener('click', async () => { + document.getElementById('samples')?.addEventListener('click', async () => { const conn = await db.connect() // 10% のサンプルを取得 const result = await conn.query(` diff --git a/tests/playwright/main.spec.ts b/tests/playwright/main.spec.ts index 4107ed1..7a31fd0 100644 --- a/tests/playwright/main.spec.ts +++ b/tests/playwright/main.spec.ts @@ -16,7 +16,7 @@ test('scan parquet', async ({ page }) => { await expect(page.locator('#scanned')).toHaveText('Scanned: true', { timeout: 30000 }) // 「load table」ボタンをクリック - await page.click('#load-table') + await page.click('#samples') // テーブルが表示されたことを確認 await expect(page.locator('#result').locator('table')).toBeVisible() From a7b902b0b187cf706df87da6eaad76f9a1536fcf Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:18:50 +0900 Subject: [PATCH 13/17] =?UTF-8?q?=E5=8B=95=E4=BD=9C=E4=BE=8B=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9e7150..78c07bd 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ pnpm run dev ## 動作例 -[![Image from Gyazo](https://i.gyazo.com/1e7db788572184e8b1a939eb237807ea.gif)](https://gyazo.com/1e7db788572184e8b1a939eb237807ea) +[![Image from Gyazo](https://i.gyazo.com/5dadf7e6bc002cb77d7d194e46fa5e3d.gif)](https://gyazo.com/5dadf7e6bc002cb77d7d194e46fa5e3d) ## Parquet ファイルについて From 90dd25b4d344b25fbd8089a5f56ef97f3b149cc2 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:33:49 +0900 Subject: [PATCH 14/17] =?UTF-8?q?wait=20=E3=82=92=205=20=E7=A7=92=E5=85=A5?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/playwright/main.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/playwright/main.spec.ts b/tests/playwright/main.spec.ts index 7a31fd0..2e9e7a0 100644 --- a/tests/playwright/main.spec.ts +++ b/tests/playwright/main.spec.ts @@ -12,6 +12,8 @@ test('scan parquet', async ({ page }) => { // 「Scan Parquet」ボタンをクリック await page.click('#scan-parquet') + await page.waitForTimeout(5000) + // true になるまで待機(最大10秒) await expect(page.locator('#scanned')).toHaveText('Scanned: true', { timeout: 30000 }) From 7249b5179ba79e4c0b4f8989bf7a3e861afab2c1 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:45:16 +0900 Subject: [PATCH 15/17] =?UTF-8?q?e2e=20test=20GitHub=20Actions=20=E3=81=A7?= =?UTF-8?q?=E9=80=9A=E3=82=89=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7=E4=B8=80?= =?UTF-8?q?=E6=97=A6=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 27 ++++++++++++++------------- tests/playwright/main.spec.ts | 2 -- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c881f6b..4f37ec8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,16 +24,17 @@ jobs: - run: pnpm fmt - run: pnpm lint - run: pnpm run build - test-playwright: - needs: ci - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22 - - run: pnpm --version - - run: pnpm install - - run: pnpm exec playwright install chromium --with-deps - - run: pnpm test:playwright \ No newline at end of file + # ローカルでは通るが GitHub Actions では失敗するので一旦コメントアウト + # test-playwright: + # needs: ci + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # - uses: pnpm/action-setup@v4 + # - uses: actions/setup-node@v4 + # with: + # node-version: 22 + # - run: pnpm --version + # - run: pnpm install + # - run: pnpm exec playwright install chromium --with-deps + # - run: pnpm test:playwright \ No newline at end of file diff --git a/tests/playwright/main.spec.ts b/tests/playwright/main.spec.ts index 2e9e7a0..7a31fd0 100644 --- a/tests/playwright/main.spec.ts +++ b/tests/playwright/main.spec.ts @@ -12,8 +12,6 @@ test('scan parquet', async ({ page }) => { // 「Scan Parquet」ボタンをクリック await page.click('#scan-parquet') - await page.waitForTimeout(5000) - // true になるまで待機(最大10秒) await expect(page.locator('#scanned')).toHaveText('Scanned: true', { timeout: 30000 }) From 8515b48a0101626ca4c260c9de2503bd1ade5ce8 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 00:59:39 +0900 Subject: [PATCH 16/17] Samples (1%) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 78c07bd..2b928ab 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ pnpm run dev ``` - ブラウザで `http://localhost:5173/` にアクセスして、`Scan Parquet` ボタンをクリックしてください -- `Load Table (Sample 1%)` ボタンをクリックして、サンプリングした 1% のデータを表示してみてください +- `Samples (1%)` ボタンをクリックして、サンプリングした 1% のデータを表示してみてください - `Aggregation` ボタンをクリックして、集計した結果を表示してみてください ## 動作例 From c58201135594c147141f0c61bd8488899f66c9e5 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 9 Sep 2024 10:29:03 +0900 Subject: [PATCH 17/17] =?UTF-8?q?github=20pages=20=E3=82=92=E3=83=87?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 40 ++++++++++++++++++++++++++++++++++++ .gitignore | 3 +++ 2 files changed, 43 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..4664e75 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,40 @@ +name: Deploy sora-devtools to Pages + +on: + push: + branches: ["main"] + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22" + - uses: pnpm/action-setup@v4 + - run: pnpm install + - run: pnpm run build + - uses: actions/upload-pages-artifact@v3 + with: + path: ./dist + + deploy: + needs: build + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index bd61088..dd602c2 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ dist/ /playwright-report/ /blob-report/ /playwright/.cache/ + +# macOS +.DS_Store