git.iko.soy/rowtype-yoga/purescript-playwright
on main help sign in
.github/workflows/ci.yml+13−9
since splitsnapshots
unifiedsplit
@@ -2,19 +2,23 @@ name: CI
2
2
3on:
3on:
4 push:
4 push:
5− branches: [ master ]
5+ branches: [main]
6 pull_request:
6 pull_request:
7− branches: [ master ]
7+ branches: [main]
8 workflow_dispatch:
8 workflow_dispatch:
9
9
10jobs:
10jobs:
11 build:
11 build:
12 runs-on: ubuntu-latest
12 runs-on: ubuntu-latest
13 steps:
13 steps:
14− - uses: actions/checkout@v2
14+ - uses: actions/checkout@v4
15− - name: Run tests
15+ - uses: actions/setup-node@v4
16− run: |
16+ with:
17− PATH="$PATH:./node_modules/.bin/"
17+ node-version: 22
18− npm install
18+ - uses: oven-sh/setup-bun@v2
19− npm install spago purescript
19+ - name: Install dependencies
20− spago test
20+ run: bun install
21+ - name: Install Chromium
22+ run: bunx playwright install --with-deps chromium
23+ - name: Build and run browser regressions
24+ run: bun run test
.gitignore+3
@@ -7,3 +7,6 @@
7/.psc*
7/.psc*
8/.purs*
8/.purs*
9/.psa*
9/.psa*
10+/.spago/
11+/test-results/
12+/playwright-report/
.spago/aff-promise/v4.0.0new file+1

Submodule changed.

.spago/aff/v7.0.0new file+1

Submodule changed.

.spago/argonaut-core/v7.0.0new file+1

Submodule changed.

.spago/arraybuffer-types/v3.0.2new file+1

Submodule changed.

.spago/arrays/v7.0.0new file+1

Submodule changed.

.spago/assert/v6.0.0new file+1

Submodule changed.

.spago/bifunctors/v6.0.0new file+1

Submodule changed.

.spago/console/v6.0.0new file+1

Submodule changed.

.spago/const/v6.0.0new file+1

Submodule changed.

.spago/contravariant/v6.0.0new file+1

Submodule changed.

.spago/control/v6.0.0new file+1

Submodule changed.

.spago/datetime/v6.0.0new file+1

Submodule changed.

.spago/distributive/v6.0.0new file+1

Submodule changed.

.spago/effect/v4.0.0new file+1

Submodule changed.

.spago/either/v6.0.0new file+1

Submodule changed.

.spago/enums/v6.0.0new file+1

Submodule changed.

.spago/exceptions/v6.0.0new file+1

Submodule changed.

.spago/exists/v6.0.0new file+1

Submodule changed.

.spago/foldable-traversable/v6.0.0new file+1

Submodule changed.

.spago/foreign-object/v4.0.0new file+1

Submodule changed.

.spago/foreign/v7.0.0new file+1

Submodule changed.

.spago/functions/v6.0.0new file+1

Submodule changed.

.spago/functors/v5.0.0new file+1

Submodule changed.

.spago/gen/v4.0.0new file+1

Submodule changed.

.spago/identity/v6.0.0new file+1

Submodule changed.

.spago/integers/v6.0.0new file+1

Submodule changed.

.spago/invariant/v6.0.0new file+1

Submodule changed.

.spago/js-date/v8.0.0new file+1

Submodule changed.

.spago/lazy/v6.0.0new file+1

Submodule changed.

.spago/lists/v7.0.0new file+1

Submodule changed.

.spago/literals/7b2ae20f77c67b7e419a92fdd0dc7a09b447b18enew file+1

Submodule changed.

.spago/literals/es-modulesnew file+1

Submodule changed.

.spago/maybe/v6.0.0new file+1

Submodule changed.

.spago/newtype/v5.0.0new file+1

Submodule changed.

.spago/node-buffer/v8.0.0new file+1

Submodule changed.

.spago/node-fs-aff/v9.0.0new file+1

Submodule changed.

.spago/node-fs/v8.0.0new file+1

Submodule changed.

.spago/node-path/v5.0.0new file+1

Submodule changed.

.spago/node-streams/v7.0.0new file+1

Submodule changed.

.spago/nonempty/v7.0.0new file+1

Submodule changed.

.spago/now/v6.0.0new file+1

Submodule changed.

.spago/nullable/v6.0.0new file+1

Submodule changed.

.spago/numbers/v9.0.0new file+1

Submodule changed.

.spago/ordered-collections/v3.0.0new file+1

Submodule changed.

.spago/orders/v6.0.0new file+1

Submodule changed.

.spago/package.jsonnew file+1
@@ -0,0 +1 @@
1+{"type":"module" }
.spago/parallel/v6.0.0new file+1

Submodule changed.

.spago/partial/v4.0.0new file+1

Submodule changed.

.spago/prelude/v6.0.0new file+1

Submodule changed.

.spago/profunctor/v6.0.0new file+1

Submodule changed.

.spago/psci-support/v6.0.0new file+1

Submodule changed.

.spago/refs/v6.0.0new file+1

Submodule changed.

.spago/run.jsnew file+3
@@ -0,0 +1,3 @@
1+import { main } from '/Users/mark/code/purescript-playwright/output/Test.Main/index.js'
2+
3+main()
.spago/safe-coerce/v2.0.0new file+1

Submodule changed.

.spago/st/v6.0.0new file+1

Submodule changed.

.spago/strings/v6.0.0new file+1

Submodule changed.

.spago/tailrec/v6.0.0new file+1

Submodule changed.

.spago/transformers/v6.0.0new file+1

Submodule changed.

.spago/tuples/v7.0.0new file+1

Submodule changed.

.spago/type-equality/v4.0.1new file+1

Submodule changed.

.spago/typelevel-prelude/v7.0.0new file+1

Submodule changed.

.spago/unfoldable/v6.0.0new file+1

Submodule changed.

.spago/unsafe-coerce/v6.0.0new file+1

Submodule changed.

.spago/untagged-union/es-modulesnew file+1

Submodule changed.

.spago/untagged-union/v0.3.0new file+1

Submodule changed.

bower.jsondeleted−17
@@ -1,17 +0,0 @@
1−{
2− "name": "purescript-playwright",
3− "ignore": [
4− "**/.*",
5− "node_modules",
6− "bower_components",
7− "output"
8− ],
9− "dependencies": {
10− "purescript-prelude": "^4.1.1",
11− "purescript-console": "^4.4.0",
12− "purescript-effect": "^2.0.1"
13− },
14− "devDependencies": {
15− "purescript-psci-support": "^4.0.0"
16− }
17−}
bun.locknew file+563
@@ -0,0 +1,563 @@
1+{
2+ "lockfileVersion": 1,
3+ "workspaces": {
4+ "": {
5+ "name": "purescript-playwright",
6+ "dependencies": {
7+ "@playwright/test": "~1.60.0",
8+ "playwright": "~1.60.0",
9+ },
10+ "devDependencies": {
11+ "purescript": "0.15.16",
12+ "spago": "^1.0.3",
13+ },
14+ },
15+ },
16+ "packages": {
17+ "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="],
18+
19+ "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="],
20+
21+ "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
22+
23+ "@nodelib/fs.scandir": ["@nodelib/fs.scandir@4.0.1", "", { "dependencies": { "@nodelib/fs.stat": "4.0.0", "run-parallel": "^1.2.0" } }, "sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw=="],
24+
25+ "@nodelib/fs.stat": ["@nodelib/fs.stat@4.0.0", "", {}, "sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg=="],
26+
27+ "@nodelib/fs.walk": ["@nodelib/fs.walk@3.0.1", "", { "dependencies": { "@nodelib/fs.scandir": "4.0.1", "fastq": "^1.15.0" } }, "sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw=="],
28+
29+ "@npmcli/fs": ["@npmcli/fs@2.1.2", "", { "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ=="],
30+
31+ "@npmcli/move-file": ["@npmcli/move-file@2.0.1", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ=="],
32+
33+ "@playwright/test": ["@playwright/test@1.60.0", "", { "dependencies": { "playwright": "1.60.0" }, "bin": { "playwright": "cli.js" } }, "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag=="],
34+
35+ "@tootallnate/once": ["@tootallnate/once@2.0.1", "", {}, "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ=="],
36+
37+ "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="],
38+
39+ "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="],
40+
41+ "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="],
42+
43+ "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="],
44+
45+ "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
46+
47+ "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="],
48+
49+ "aproba": ["aproba@1.2.0", "", {}, "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="],
50+
51+ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
52+
53+ "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="],
54+
55+ "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="],
56+
57+ "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
58+
59+ "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="],
60+
61+ "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="],
62+
63+ "brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="],
64+
65+ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
66+
67+ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
68+
69+ "buildcheck": ["buildcheck@0.0.7", "", {}, "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA=="],
70+
71+ "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
72+
73+ "byline": ["byline@5.0.0", "", {}, "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q=="],
74+
75+ "cacache": ["cacache@11.3.3", "", { "dependencies": { "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", "glob": "^7.1.4", "graceful-fs": "^4.1.15", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" } }, "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA=="],
76+
77+ "chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="],
78+
79+ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="],
80+
81+ "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="],
82+
83+ "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="],
84+
85+ "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="],
86+
87+ "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="],
88+
89+ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
90+
91+ "concat-stream": ["concat-stream@1.6.2", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="],
92+
93+ "copy-concurrently": ["copy-concurrently@1.0.5", "", { "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", "iferr": "^0.1.5", "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" } }, "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A=="],
94+
95+ "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="],
96+
97+ "cpu-features": ["cpu-features@0.0.10", "", { "dependencies": { "buildcheck": "~0.0.6", "nan": "^2.19.0" } }, "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA=="],
98+
99+ "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
100+
101+ "cyclist": ["cyclist@1.0.2", "", {}, "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA=="],
102+
103+ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
104+
105+ "default-browser": ["default-browser@5.5.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw=="],
106+
107+ "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="],
108+
109+ "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="],
110+
111+ "duplexify": ["duplexify@3.7.1", "", { "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="],
112+
113+ "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
114+
115+ "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="],
116+
117+ "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
118+
119+ "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
120+
121+ "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="],
122+
123+ "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="],
124+
125+ "escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="],
126+
127+ "execa": ["execa@2.1.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^3.0.0", "onetime": "^5.1.0", "p-finally": "^2.0.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } }, "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw=="],
128+
129+ "fastq": ["fastq@1.20.3", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw=="],
130+
131+ "figgy-pudding": ["figgy-pudding@3.5.2", "", {}, "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="],
132+
133+ "filesize": ["filesize@4.2.1", "", {}, "sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA=="],
134+
135+ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
136+
137+ "flush-write-stream": ["flush-write-stream@1.1.1", "", { "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w=="],
138+
139+ "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="],
140+
141+ "from2": ["from2@2.3.0", "", { "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g=="],
142+
143+ "fs-extra": ["fs-extra@11.4.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA=="],
144+
145+ "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="],
146+
147+ "fs-write-stream-atomic": ["fs-write-stream-atomic@1.0.10", "", { "dependencies": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", "imurmurhash": "^0.1.4", "readable-stream": "1 || 2" } }, "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA=="],
148+
149+ "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="],
150+
151+ "fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
152+
153+ "fuse.js": ["fuse.js@7.5.0", "", {}, "sha512-sQtrEfA+ez/3G0cCZecF70oqpCRttCexYUG4mUrtWL49ULUzUyxokt5kyqwtKzj1270RaKih+hcP3qLcumccow=="],
154+
155+ "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
156+
157+ "glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="],
158+
159+ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
160+
161+ "has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],
162+
163+ "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="],
164+
165+ "http-proxy-agent": ["http-proxy-agent@5.0.0", "", { "dependencies": { "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w=="],
166+
167+ "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="],
168+
169+ "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="],
170+
171+ "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
172+
173+ "iferr": ["iferr@0.1.5", "", {}, "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA=="],
174+
175+ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
176+
177+ "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="],
178+
179+ "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="],
180+
181+ "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="],
182+
183+ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
184+
185+ "ip-address": ["ip-address@10.7.0", "", {}, "sha512-BGFsyJd5mpXp3rK6jIdADLNgpJUK1jnjzvYF8lK+VyDab9JAmqN0YOKDdP17HlgKb2+ehPgDc8EtnRLbGCAMhA=="],
186+
187+ "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
188+
189+ "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
190+
191+ "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],
192+
193+ "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="],
194+
195+ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
196+
197+ "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="],
198+
199+ "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
200+
201+ "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="],
202+
203+ "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
204+
205+ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
206+
207+ "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="],
208+
209+ "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="],
210+
211+ "linkify-it": ["linkify-it@5.0.2", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q=="],
212+
213+ "log-symbols": ["log-symbols@3.0.0", "", { "dependencies": { "chalk": "^2.4.2" } }, "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ=="],
214+
215+ "log-update": ["log-update@4.0.0", "", { "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", "slice-ansi": "^4.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg=="],
216+
217+ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
218+
219+ "make-fetch-happen": ["make-fetch-happen@10.2.1", "", { "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" } }, "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w=="],
220+
221+ "markdown-it": ["markdown-it@14.3.2", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.5.0", "linkify-it": "^5.0.2", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-sHHjZ5fJKlgrG4qns2YwVcdNep35h5fERrfkD2YNsb9UFk0UIHarbiTaHKVMlPuWAoiilyK8Fv/jAm11slsY7Q=="],
222+
223+ "mdurl": ["mdurl@2.1.0", "", {}, "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg=="],
224+
225+ "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
226+
227+ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
228+
229+ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="],
230+
231+ "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="],
232+
233+ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
234+
235+ "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
236+
237+ "minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="],
238+
239+ "minipass-fetch": ["minipass-fetch@2.1.2", "", { "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA=="],
240+
241+ "minipass-flush": ["minipass-flush@1.0.7", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA=="],
242+
243+ "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="],
244+
245+ "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="],
246+
247+ "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="],
248+
249+ "mississippi": ["mississippi@3.0.0", "", { "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", "end-of-stream": "^1.1.0", "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" } }, "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA=="],
250+
251+ "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="],
252+
253+ "move-concurrently": ["move-concurrently@1.0.1", "", { "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", "fs-write-stream-atomic": "^1.0.8", "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" } }, "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ=="],
254+
255+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
256+
257+ "nan": ["nan@2.28.0", "", {}, "sha512-fTsDz99OTq2sVePhGdp4qQhggZFtKr64ZNVyVajRKtMOkJxYekplBh577PiJB12v/D3s2E5cGtOI45LWp6rnLQ=="],
258+
259+ "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="],
260+
261+ "npm-run-path": ["npm-run-path@3.1.0", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg=="],
262+
263+ "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
264+
265+ "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
266+
267+ "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="],
268+
269+ "p-finally": ["p-finally@2.0.1", "", {}, "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw=="],
270+
271+ "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="],
272+
273+ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
274+
275+ "parallel-transform": ["parallel-transform@1.2.0", "", { "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } }, "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg=="],
276+
277+ "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="],
278+
279+ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
280+
281+ "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="],
282+
283+ "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="],
284+
285+ "playwright": ["playwright@1.60.0", "", { "dependencies": { "playwright-core": "1.60.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA=="],
286+
287+ "playwright-core": ["playwright-core@1.60.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA=="],
288+
289+ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="],
290+
291+ "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="],
292+
293+ "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="],
294+
295+ "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="],
296+
297+ "pumpify": ["pumpify@1.5.1", "", { "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } }, "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ=="],
298+
299+ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
300+
301+ "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="],
302+
303+ "purescript": ["purescript@0.15.16", "", { "dependencies": { "purescript-installer": "^0.3.5" }, "bin": { "purs": "purs.bin" } }, "sha512-3t936C7oUl/DT2n0U9SXO7TBG316EqywCUUuZ5naS9EhNc+Xpj+CUTjfNjlWffvN8oFDSWYdQGRFGJ73lXpCSQ=="],
304+
305+ "purescript-installer": ["purescript-installer@0.3.5", "", { "dependencies": { "byline": "^5.0.0", "cacache": "^11.3.2", "chalk": "^2.4.2", "env-paths": "^2.2.0", "execa": "^2.0.3", "filesize": "^4.1.2", "is-plain-obj": "^2.0.0", "log-symbols": "^3.0.0", "log-update": "^4.0.0", "make-fetch-happen": "^10.0.0", "minimist": "^1.2.0", "ms": "^2.1.2", "once": "^1.4.0", "rimraf": "^2.6.3", "semver": "^7.3.7", "tar": "^6.1.11", "which": "^1.3.1", "zen-observable": "^0.8.14" }, "bin": { "install-purescript": "index.js" } }, "sha512-w04BBvW4BSQlspLsZ9Bs5vtUBZqvC4bC+FizC5GUp2/rpmYvXJ0CTf79Q3MKo2A8p1ZjqbhCI+SqdTQ30UZUIQ=="],
306+
307+ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
308+
309+ "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
310+
311+ "readline-sync": ["readline-sync@1.4.10", "", {}, "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw=="],
312+
313+ "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="],
314+
315+ "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
316+
317+ "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
318+
319+ "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="],
320+
321+ "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="],
322+
323+ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
324+
325+ "run-queue": ["run-queue@1.0.3", "", { "dependencies": { "aproba": "^1.1.1" } }, "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg=="],
326+
327+ "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],
328+
329+ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
330+
331+ "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="],
332+
333+ "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
334+
335+ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
336+
337+ "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
338+
339+ "slice-ansi": ["slice-ansi@4.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="],
340+
341+ "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
342+
343+ "socks": ["socks@2.8.10", "", { "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" } }, "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ=="],
344+
345+ "socks-proxy-agent": ["socks-proxy-agent@7.0.0", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww=="],
346+
347+ "spago": ["spago@1.0.4", "", { "dependencies": { "@nodelib/fs.walk": "^3.0.1", "env-paths": "^3.0.0", "fs-extra": "^11.3.0", "fuse.js": "^7.1.0", "glob": "^11.0.1", "markdown-it": "^14.1.0", "micromatch": "^4.0.8", "open": "^10.1.0", "picomatch": "^4.0.2", "punycode": "^2.3.1", "readline-sync": "^1.4.10", "semver": "^7.7.1", "spdx-expression-parse": "^4.0.0", "ssh2": "^1.16.0", "supports-color": "^10.0.0", "tar": "^7.4.3", "tmp": "^0.2.3", "xhr2": "^0.2.1", "yaml": "^2.7.0" }, "bin": { "spago": "bin/bundle.js" } }, "sha512-iv1HBJppzGJRWWd/DZ32oselcKrhq/PboBdXy5VMX4GiwRqLCUUp3loZ6Yhm8zymNRKHkN/w52cxX6k521nwng=="],
348+
349+ "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="],
350+
351+ "spdx-expression-parse": ["spdx-expression-parse@4.0.0", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ=="],
352+
353+ "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="],
354+
355+ "ssh2": ["ssh2@1.17.0", "", { "dependencies": { "asn1": "^0.2.6", "bcrypt-pbkdf": "^1.0.2" }, "optionalDependencies": { "cpu-features": "~0.0.10", "nan": "^2.23.0" } }, "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ=="],
356+
357+ "ssri": ["ssri@6.0.2", "", { "dependencies": { "figgy-pudding": "^3.5.1" } }, "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q=="],
358+
359+ "stream-each": ["stream-each@1.2.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" } }, "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw=="],
360+
361+ "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="],
362+
363+ "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
364+
365+ "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="],
366+
367+ "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
368+
369+ "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
370+
371+ "supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="],
372+
373+ "tar": ["tar@7.5.22", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="],
374+
375+ "through2": ["through2@2.0.5", "", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="],
376+
377+ "tmp": ["tmp@0.2.7", "", {}, "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw=="],
378+
379+ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
380+
381+ "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="],
382+
383+ "type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="],
384+
385+ "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="],
386+
387+ "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="],
388+
389+ "unique-filename": ["unique-filename@1.1.1", "", { "dependencies": { "unique-slug": "^2.0.0" } }, "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="],
390+
391+ "unique-slug": ["unique-slug@2.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="],
392+
393+ "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="],
394+
395+ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
396+
397+ "which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="],
398+
399+ "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
400+
401+ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
402+
403+ "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="],
404+
405+ "xhr2": ["xhr2@0.2.1", "", {}, "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw=="],
406+
407+ "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="],
408+
409+ "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="],
410+
411+ "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
412+
413+ "yaml": ["yaml@2.9.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw=="],
414+
415+ "zen-observable": ["zen-observable@0.8.15", "", {}, "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ=="],
416+
417+ "@npmcli/move-file/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="],
418+
419+ "@npmcli/move-file/rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="],
420+
421+ "cacache/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="],
422+
423+ "cacache/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
424+
425+ "chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="],
426+
427+ "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
428+
429+ "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
430+
431+ "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
432+
433+ "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
434+
435+ "make-fetch-happen/cacache": ["cacache@16.1.3", "", { "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^2.0.0" } }, "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ=="],
436+
437+ "make-fetch-happen/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="],
438+
439+ "make-fetch-happen/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
440+
441+ "make-fetch-happen/ssri": ["ssri@9.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q=="],
442+
443+ "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
444+
445+ "minipass-collect/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
446+
447+ "minipass-fetch/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
448+
449+ "minipass-fetch/minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="],
450+
451+ "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
452+
453+ "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
454+
455+ "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
456+
457+ "path-scurry/lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="],
458+
459+ "pumpify/pump": ["pump@2.0.1", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA=="],
460+
461+ "purescript-installer/env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
462+
463+ "purescript-installer/tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="],
464+
465+ "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
466+
467+ "slice-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
468+
469+ "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
470+
471+ "@npmcli/move-file/rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
472+
473+ "cacache/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
474+
475+ "fs-minipass/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
476+
477+ "make-fetch-happen/cacache/chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="],
478+
479+ "make-fetch-happen/cacache/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="],
480+
481+ "make-fetch-happen/cacache/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="],
482+
483+ "make-fetch-happen/cacache/rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="],
484+
485+ "make-fetch-happen/cacache/tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="],
486+
487+ "make-fetch-happen/cacache/unique-filename": ["unique-filename@2.0.1", "", { "dependencies": { "unique-slug": "^3.0.0" } }, "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A=="],
488+
489+ "make-fetch-happen/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
490+
491+ "minipass-collect/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
492+
493+ "minipass-fetch/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
494+
495+ "minipass-fetch/minizlib/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
496+
497+ "minipass-flush/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
498+
499+ "minipass-pipeline/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
500+
501+ "minipass-sized/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
502+
503+ "purescript-installer/tar/chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="],
504+
505+ "purescript-installer/tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="],
506+
507+ "purescript-installer/tar/minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="],
508+
509+ "purescript-installer/tar/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="],
510+
511+ "purescript-installer/tar/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
512+
513+ "rimraf/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
514+
515+ "slice-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
516+
517+ "wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
518+
519+ "@npmcli/move-file/rimraf/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
520+
521+ "cacache/glob/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="],
522+
523+ "make-fetch-happen/cacache/glob/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="],
524+
525+ "make-fetch-happen/cacache/rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
526+
527+ "make-fetch-happen/cacache/tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="],
528+
529+ "make-fetch-happen/cacache/tar/minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="],
530+
531+ "make-fetch-happen/cacache/tar/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
532+
533+ "make-fetch-happen/cacache/unique-filename/unique-slug": ["unique-slug@3.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w=="],
534+
535+ "purescript-installer/tar/minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
536+
537+ "rimraf/glob/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="],
538+
539+ "slice-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
540+
541+ "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
542+
543+ "@npmcli/move-file/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="],
544+
545+ "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
546+
547+ "make-fetch-happen/cacache/glob/minimatch/brace-expansion": ["brace-expansion@2.1.4", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg=="],
548+
549+ "make-fetch-happen/cacache/rimraf/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
550+
551+ "make-fetch-happen/cacache/tar/minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
552+
553+ "rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
554+
555+ "@npmcli/move-file/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
556+
557+ "make-fetch-happen/cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
558+
559+ "make-fetch-happen/cacache/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="],
560+
561+ "make-fetch-happen/cacache/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
562+ }
563+}
package.json+13−12
@@ -2,22 +2,23 @@
2 "name": "purescript-playwright",
2 "name": "purescript-playwright",
3 "version": "0.0.1",
3 "version": "0.0.1",
4 "description": "PureScript bindings for Playwright",
4 "description": "PureScript bindings for Playwright",
5− "main": "index.js",
5+ "type": "module",
6− "directories": {
7− "test": "test"
8− },
9 "dependencies": {
6 "dependencies": {
10− "bower": "^1.8.8",
7+ "@playwright/test": "~1.60.0",
11− "playwright": "^1.3.0",
8+ "playwright": "~1.60.0"
12− "pulp": "^15.0.0"
9+ },
10+ "devDependencies": {
11+ "purescript": "0.15.16",
12+ "spago": "^1.0.3"
13 },
13 },
14− "devDependencies": {},
15 "scripts": {
14 "scripts": {
16− "test": "pulp test"
15+ "build": "spago build",
16+ "test": "bun run build && playwright test",
17+ "test:install": "playwright install chromium"
17 },
18 },
18 "repository": {
19 "repository": {
19 "type": "git",
20 "type": "git",
20− "url": "git+https://github.com/klntsky/purescript-playwright.git"
21+ "url": "git+https://github.com/rowtype-yoga/purescript-playwright.git"
21 },
22 },
22 "keywords": [
23 "keywords": [
23 "purescript",
24 "purescript",
@@ -26,7 +27,7 @@
26 "author": "Vladimir Kalnitsky <klntsky@gmail.com>",
27 "author": "Vladimir Kalnitsky <klntsky@gmail.com>",
27 "license": "BSD-3-Clause",
28 "license": "BSD-3-Clause",
28 "bugs": {
29 "bugs": {
29− "url": "https://github.com/klntsky/purescript-playwright/issues"
30+ "url": "https://github.com/rowtype-yoga/purescript-playwright/issues"
30 },
31 },
31− "homepage": "https://github.com/klntsky/purescript-playwright#readme"
32+ "homepage": "https://github.com/rowtype-yoga/purescript-playwright#readme"
32}
33}
packages.dhalldeleted−42
@@ -1,42 +0,0 @@
1−let upstream =
2− https://github.com/purescript/package-sets/releases/download/psc-0.14.2-20210629/packages.dhall sha256:534c490bb73cae75adb5a39871142fd8db5c2d74c90509797a80b8bb0d5c3f7b
3−
4−let overrides =
5− { untagged-union =
6− { dependencies =
7− [ "assert"
8− , "console"
9− , "effect"
10− , "foreign"
11− , "foreign-object"
12− , "literals"
13− , "maybe"
14− , "newtype"
15− , "psci-support"
16− , "tuples"
17− , "unsafe-coerce"
18− ]
19− , repo = "https://github.com/jvliwanag/purescript-untagged-union.git"
20− , version = "v0.3.0"
21− }
22− }
23−
24−let additions =
25− { literals =
26− { dependencies =
27− [ "assert"
28− , "effect"
29− , "console"
30− , "integers"
31− , "numbers"
32− , "partial"
33− , "psci-support"
34− , "unsafe-coerce"
35− , "typelevel-prelude"
36− ]
37− , repo = "https://github.com/jvliwanag/purescript-literals.git"
38− , version = "7b2ae20f77c67b7e419a92fdd0dc7a09b447b18e"
39− }
40− }
41−
42−in upstream ⫽ overrides ⫽ additions
spago.dhalldeleted−29
@@ -1,29 +0,0 @@
1−{ name = "playwright"
2−, dependencies =
3− [ "argonaut-core"
4− , "console"
5− , "effect"
6− , "prelude"
7− , "psci-support"
8− , "aff-promise"
9− , "test-unit"
10− , "untagged-union"
11− , "node-buffer"
12− , "node-fs-aff"
13− , "undefined"
14− , "aff"
15− , "either"
16− , "exceptions"
17− , "foreign"
18− , "foreign-object"
19− , "literals"
20− , "maybe"
21− , "node-streams"
22− , "ordered-collections"
23− , "refs"
24− , "strings"
25− , "transformers"
26− ]
27−, packages = ./packages.dhall
28−, sources = [ "src/**/*.purs", "test/**/*.purs" ]
29−}
spago.locknew file+1379
@@ -0,0 +1,1379 @@
1+{
2+ "workspace": {
3+ "packages": {
4+ "playwright": {
5+ "path": "./",
6+ "core": {
7+ "dependencies": [
8+ {
9+ "aff": ">=8.0.0 <9.0.0"
10+ },
11+ {
12+ "aff-promise": ">=4.0.0 <5.0.0"
13+ },
14+ {
15+ "argonaut-core": ">=7.0.0 <8.0.0"
16+ },
17+ {
18+ "datetime": ">=6.1.0 <7.0.0"
19+ },
20+ {
21+ "effect": ">=4.0.0 <5.0.0"
22+ },
23+ {
24+ "exceptions": ">=6.1.0 <7.0.0"
25+ },
26+ {
27+ "foreign": ">=7.0.0 <8.0.0"
28+ },
29+ {
30+ "foreign-object": ">=4.1.0 <5.0.0"
31+ },
32+ {
33+ "literals": ">=1.0.2 <2.0.0"
34+ },
35+ {
36+ "maybe": ">=6.0.0 <7.0.0"
37+ },
38+ {
39+ "node-buffer": ">=9.0.0 <10.0.0"
40+ },
41+ {
42+ "node-streams": ">=9.0.1 <10.0.0"
43+ },
44+ {
45+ "ordered-collections": ">=3.2.0 <4.0.0"
46+ },
47+ {
48+ "prelude": ">=6.0.2 <7.0.0"
49+ },
50+ {
51+ "strings": ">=6.0.1 <7.0.0"
52+ },
53+ {
54+ "typelevel-prelude": ">=7.0.0 <8.0.0"
55+ },
56+ {
57+ "untagged-union": ">=1.0.0 <2.0.0"
58+ }
59+ ]
60+ },
61+ "test": {
62+ "dependencies": [
63+ "either",
64+ "transformers"
65+ ]
66+ }
67+ }
68+ },
69+ "package_set": {
70+ "address": {
71+ "registry": "73.2.0"
72+ },
73+ "compiler": ">=0.15.15 <0.16.0",
74+ "content": {
75+ "abc-parser": "2.1.0",
76+ "ace": "9.1.0",
77+ "address-rfc2821": "0.1.1",
78+ "aff": "8.0.0",
79+ "aff-bus": "6.0.0",
80+ "aff-coroutines": "9.0.0",
81+ "aff-promise": "4.0.0",
82+ "aff-retry": "2.0.0",
83+ "affjax": "13.0.0",
84+ "affjax-node": "1.0.0",
85+ "affjax-web": "1.0.0",
86+ "ansi": "7.0.0",
87+ "apexcharts": "0.5.0",
88+ "applicative-phases": "1.0.0",
89+ "argonaut": "9.0.0",
90+ "argonaut-aeson-generic": "0.4.1",
91+ "argonaut-codecs": "9.1.0",
92+ "argonaut-core": "7.0.0",
93+ "argonaut-generic": "8.0.0",
94+ "argonaut-traversals": "10.0.0",
95+ "argparse-basic": "2.0.0",
96+ "array-builder": "0.1.2",
97+ "array-search": "0.6.0",
98+ "arraybuffer": "13.2.0",
99+ "arraybuffer-builder": "3.1.0",
100+ "arraybuffer-types": "3.0.2",
101+ "arrays": "7.3.0",
102+ "arrays-extra": "0.6.1",
103+ "arrays-zipper": "2.0.1",
104+ "ask": "1.0.0",
105+ "assert": "6.0.0",
106+ "assert-multiple": "0.4.0",
107+ "avar": "5.0.1",
108+ "axon": "0.0.3",
109+ "b64": "0.0.8",
110+ "barbies": "1.0.1",
111+ "barlow-lens": "0.9.0",
112+ "benchlib": "0.0.4",
113+ "bifunctors": "6.1.0",
114+ "bigints": "7.0.1",
115+ "blessed": "1.0.0",
116+ "bolson": "0.3.9",
117+ "bookhound": "0.1.7",
118+ "bower-json": "3.0.0",
119+ "call-by-name": "4.0.1",
120+ "canvas": "6.0.0",
121+ "canvas-action": "9.0.0",
122+ "cartesian": "1.0.6",
123+ "catenable-lists": "7.0.0",
124+ "cbor-stream": "1.3.0",
125+ "chameleon": "1.0.0",
126+ "chameleon-halogen": "1.0.3",
127+ "chameleon-react-basic": "1.1.0",
128+ "chameleon-styled": "2.5.0",
129+ "chameleon-transformers": "1.0.0",
130+ "channel": "1.0.0",
131+ "checked-exceptions": "3.1.1",
132+ "choku": "1.0.2",
133+ "classless": "0.1.1",
134+ "classless-arbitrary": "0.1.1",
135+ "classless-decode-json": "0.1.1",
136+ "classless-encode-json": "0.1.3",
137+ "classnames": "2.0.0",
138+ "codec": "6.1.0",
139+ "codec-argonaut": "10.0.0",
140+ "codec-json": "2.0.0",
141+ "colors": "7.0.1",
142+ "concur-core": "0.5.0",
143+ "concur-react": "0.5.0",
144+ "concurrent-queues": "3.0.0",
145+ "console": "6.1.0",
146+ "const": "6.0.0",
147+ "contravariant": "6.0.0",
148+ "control": "6.0.0",
149+ "convertable-options": "1.0.0",
150+ "coroutines": "7.0.0",
151+ "css": "6.0.0",
152+ "css-class-name-extractor": "0.0.4",
153+ "css-frameworks": "1.1.0",
154+ "csv-stream": "2.3.0",
155+ "data-mvc": "0.0.2",
156+ "datetime": "6.1.0",
157+ "datetime-parsing": "0.2.0",
158+ "debounce": "0.1.0",
159+ "debug": "6.0.2",
160+ "decimals": "7.1.0",
161+ "default-values": "1.0.1",
162+ "deku": "0.9.23",
163+ "deno": "0.0.5",
164+ "dissect": "1.0.0",
165+ "distributive": "6.0.0",
166+ "dodo-printer": "2.2.3",
167+ "dom-filereader": "7.0.0",
168+ "dom-indexed": "13.0.0",
169+ "dom-simple": "0.4.0",
170+ "dotenv": "4.0.3",
171+ "droplet": "0.6.0",
172+ "dts": "1.0.0",
173+ "dual-numbers": "1.0.3",
174+ "dynamic-buffer": "3.0.1",
175+ "echarts-simple": "0.0.1",
176+ "effect": "4.0.0",
177+ "either": "6.1.0",
178+ "elmish": "0.13.0",
179+ "elmish-enzyme": "0.1.1",
180+ "elmish-hooks": "0.11.0",
181+ "elmish-html": "0.10.0",
182+ "elmish-testing-library": "0.3.2",
183+ "elmish-time-machine": "0.4.2",
184+ "email-validate": "7.0.0",
185+ "encoding": "0.0.9",
186+ "enums": "6.0.1",
187+ "env-names": "0.4.0",
188+ "environment": "2.0.0",
189+ "error": "2.0.0",
190+ "eta-conversion": "0.3.2",
191+ "exceptions": "6.1.0",
192+ "exists": "6.0.0",
193+ "exitcodes": "4.0.0",
194+ "expect-inferred": "3.0.0",
195+ "express": "0.9.1",
196+ "ezfetch": "1.1.1",
197+ "fahrtwind": "2.0.0",
198+ "fakerjs": "0.0.1",
199+ "fallback": "0.1.0",
200+ "fast-vect": "1.2.0",
201+ "fetch": "4.1.0",
202+ "fetch-argonaut": "1.0.1",
203+ "fetch-core": "5.1.0",
204+ "fetch-yoga-json": "1.1.0",
205+ "ffi-simple": "0.5.1",
206+ "fft": "0.3.0",
207+ "fft-js": "0.1.0",
208+ "filterable": "5.0.0",
209+ "fix-functor": "0.1.0",
210+ "fixed-points": "7.0.0",
211+ "fixed-precision": "5.0.0",
212+ "flame": "1.6.0",
213+ "float32": "2.0.0",
214+ "fmt": "0.2.1",
215+ "foldable-traversable": "6.0.0",
216+ "foldable-traversable-extra": "0.0.6",
217+ "foreign": "7.0.0",
218+ "foreign-object": "4.1.0",
219+ "foreign-readwrite": "3.4.0",
220+ "forgetmenot": "0.1.0",
221+ "fork": "6.0.0",
222+ "form-urlencoded": "7.0.0",
223+ "formatters": "7.0.0",
224+ "framer-motion": "2.0.1",
225+ "free": "7.1.0",
226+ "freeap": "7.0.0",
227+ "freer-free": "0.0.1",
228+ "freet": "7.0.0",
229+ "functions": "6.0.0",
230+ "functor1": "3.0.0",
231+ "functors": "5.0.0",
232+ "fuzzy": "0.4.0",
233+ "gen": "4.0.0",
234+ "generate-values": "1.0.1",
235+ "generic-router": "0.0.1",
236+ "geojson": "0.0.5",
237+ "geometria": "2.2.0",
238+ "gesso": "1.0.1",
239+ "gojs": "0.1.1",
240+ "golem-fetch": "0.1.0",
241+ "grain": "3.0.0",
242+ "grain-router": "3.0.0",
243+ "grain-virtualized": "3.0.0",
244+ "graphql-client": "10.1.1",
245+ "graphs": "8.1.0",
246+ "group": "4.1.1",
247+ "halogen": "7.0.0",
248+ "halogen-bootstrap5": "5.3.2",
249+ "halogen-canvas": "1.0.0",
250+ "halogen-css": "10.0.0",
251+ "halogen-declarative-canvas": "0.0.8",
252+ "halogen-echarts-simple": "0.0.4",
253+ "halogen-formless": "4.0.3",
254+ "halogen-helix": "1.1.0",
255+ "halogen-hooks": "0.6.3",
256+ "halogen-hooks-extra": "0.9.0",
257+ "halogen-infinite-scroll": "1.1.0",
258+ "halogen-store": "0.5.4",
259+ "halogen-storybook": "2.0.0",
260+ "halogen-subscriptions": "2.0.0",
261+ "halogen-svg-elems": "8.0.0",
262+ "halogen-typewriter": "1.0.4",
263+ "halogen-use-trigger-hooks": "1.0.0",
264+ "halogen-vdom": "8.0.0",
265+ "halogen-vdom-string-renderer": "0.5.0",
266+ "halogen-xterm": "2.0.0",
267+ "heckin": "2.0.1",
268+ "heterogeneous": "0.7.0",
269+ "homogeneous": "0.4.0",
270+ "http-methods": "6.0.0",
271+ "httpurple": "4.0.0",
272+ "huffman": "0.4.0",
273+ "humdrum": "0.0.1",
274+ "hylograph-canvas": "0.1.0",
275+ "hylograph-d3-kernel": "0.1.0",
276+ "hylograph-graph": "0.1.0",
277+ "hylograph-layout": "0.1.0",
278+ "hylograph-music": "0.1.0",
279+ "hylograph-optics": "0.1.0",
280+ "hylograph-selection": "0.1.1",
281+ "hylograph-simulation": "0.1.0",
282+ "hylograph-simulation-core": "0.1.0",
283+ "hylograph-simulation-halogen": "0.1.0",
284+ "hylograph-transitions": "0.1.0",
285+ "hylograph-wasm-kernel": "0.1.0",
286+ "hyrule": "2.3.8",
287+ "identity": "6.0.0",
288+ "identy": "4.0.1",
289+ "indexed-db": "1.0.0",
290+ "indexed-monad": "3.0.0",
291+ "ink": "0.0.1",
292+ "int64": "3.0.0",
293+ "integers": "6.0.0",
294+ "interpolate": "5.0.2",
295+ "intersection-observer": "1.0.1",
296+ "invariant": "6.0.0",
297+ "jarilo": "1.0.1",
298+ "jelly": "0.10.0",
299+ "jelly-router": "0.3.0",
300+ "jelly-signal": "0.4.0",
301+ "jest": "1.0.0",
302+ "js-abort-controller": "1.0.0",
303+ "js-bigints": "2.2.1",
304+ "js-date": "8.0.0",
305+ "js-fetch": "0.2.1",
306+ "js-fileio": "3.0.0",
307+ "js-intl": "1.1.4",
308+ "js-iterators": "0.1.1",
309+ "js-maps": "0.1.2",
310+ "js-promise": "1.0.0",
311+ "js-promise-aff": "1.0.0",
312+ "js-timers": "6.1.0",
313+ "js-uri": "3.1.0",
314+ "jsdom": "1.0.0",
315+ "json": "1.1.0",
316+ "json-codecs": "5.0.0",
317+ "justifill": "0.5.0",
318+ "jwt": "0.0.9",
319+ "labeled-data": "0.2.0",
320+ "language-cst-parser": "0.14.1",
321+ "lazy": "6.0.0",
322+ "lazy-joe": "1.0.0",
323+ "lcg": "4.0.0",
324+ "leibniz": "5.0.0",
325+ "leveldb": "1.0.1",
326+ "liminal": "1.0.1",
327+ "linalg": "6.0.0",
328+ "lists": "7.0.0",
329+ "literals": "1.0.2",
330+ "logging": "3.0.0",
331+ "logging-journald": "0.4.0",
332+ "lumi-components": "18.0.0",
333+ "machines": "7.0.0",
334+ "maps-eager": "0.5.0",
335+ "marionette": "1.0.0",
336+ "marionette-react-basic-hooks": "0.1.1",
337+ "marked": "0.1.0",
338+ "matrices": "5.0.1",
339+ "matryoshka": "1.0.0",
340+ "maybe": "6.0.0",
341+ "media-types": "6.0.0",
342+ "meowclient": "1.0.0",
343+ "midi": "4.0.0",
344+ "milkis": "9.0.0",
345+ "mimetype": "0.0.1",
346+ "minibench": "4.0.1",
347+ "mmorph": "7.0.0",
348+ "monad-control": "5.0.0",
349+ "monad-logger": "1.3.1",
350+ "monad-loops": "0.5.0",
351+ "monad-unlift": "1.0.1",
352+ "monoid-extras": "0.0.1",
353+ "monoidal": "0.16.0",
354+ "morello": "0.4.0",
355+ "mote": "3.0.0",
356+ "motsunabe": "2.0.0",
357+ "mvc": "0.0.1",
358+ "mysql": "6.0.1",
359+ "n3": "0.1.0",
360+ "nano-id": "1.1.0",
361+ "nanoid": "0.1.0",
362+ "naturals": "3.0.0",
363+ "nested-functor": "0.2.1",
364+ "newtype": "5.0.0",
365+ "nextjs": "0.1.1",
366+ "nextui": "0.2.0",
367+ "node-buffer": "9.0.0",
368+ "node-child-process": "11.1.0",
369+ "node-event-emitter": "3.0.0",
370+ "node-execa": "5.0.0",
371+ "node-fs": "9.2.0",
372+ "node-glob-basic": "2.0.0",
373+ "node-http": "9.1.0",
374+ "node-http2": "1.1.1",
375+ "node-human-signals": "1.0.0",
376+ "node-net": "5.1.0",
377+ "node-os": "5.1.0",
378+ "node-path": "5.0.1",
379+ "node-process": "11.2.0",
380+ "node-readline": "8.1.1",
381+ "node-sqlite3": "8.0.0",
382+ "node-stream-pipes": "2.1.6",
383+ "node-streams": "9.0.1",
384+ "node-tls": "0.3.1",
385+ "node-url": "7.0.1",
386+ "node-workerbees": "0.3.1",
387+ "node-zlib": "0.4.0",
388+ "nonempty": "7.0.0",
389+ "now": "6.0.0",
390+ "npm-package-json": "2.0.0",
391+ "nullable": "6.0.0",
392+ "numberfield": "0.2.2",
393+ "numbers": "9.0.1",
394+ "oak": "3.1.1",
395+ "oak-debug": "1.2.2",
396+ "object-maps": "0.3.0",
397+ "ocarina": "1.5.4",
398+ "oooooooooorrrrrrrmm-lib": "0.0.1",
399+ "open-colors-scales-and-schemes": "1.0.0",
400+ "open-drawing": "6.0.4",
401+ "open-folds": "6.4.0",
402+ "open-foreign-generic": "11.0.3",
403+ "open-memoize": "6.2.0",
404+ "open-mkdirp-aff": "1.2.0",
405+ "open-pairing": "6.2.0",
406+ "open-smolder": "12.0.2",
407+ "options": "7.0.0",
408+ "optparse": "5.0.1",
409+ "ordered-collections": "3.2.0",
410+ "ordered-set": "0.5.0",
411+ "orders": "6.0.0",
412+ "org-doc": "0.1.0",
413+ "owoify": "1.2.0",
414+ "pairs": "9.0.1",
415+ "parallel": "7.0.0",
416+ "parsing": "11.0.0",
417+ "parsing-dataview": "3.2.4",
418+ "partial": "4.0.0",
419+ "pathy": "9.0.0",
420+ "pha": "0.13.0",
421+ "phaser": "0.7.0",
422+ "phylio": "1.1.2",
423+ "pipes": "8.0.0",
424+ "pirates-charm": "0.0.1",
425+ "play": "1.0.0",
426+ "pmock": "0.9.0",
427+ "point-free": "1.0.0",
428+ "pointed-list": "0.5.1",
429+ "polymorphic-vectors": "4.0.0",
430+ "posix-types": "6.0.0",
431+ "postgresql": "2.0.21",
432+ "precise": "6.0.0",
433+ "precise-datetime": "7.0.0",
434+ "prelude": "6.0.2",
435+ "prettier-printer": "3.0.0",
436+ "printf": "0.1.0",
437+ "priority-queue": "0.1.2",
438+ "profunctor": "6.0.1",
439+ "profunctor-lenses": "8.0.0",
440+ "protobuf": "4.4.0",
441+ "psa-utils": "8.0.0",
442+ "psci-support": "6.0.0",
443+ "punycode": "1.0.0",
444+ "pursfmt": "0.17.0",
445+ "qualified-do": "2.2.0",
446+ "quantities": "12.2.0",
447+ "quickcheck": "8.0.1",
448+ "quickcheck-combinators": "0.1.3",
449+ "quickcheck-laws": "7.0.0",
450+ "quickcheck-utf8": "0.0.0",
451+ "random": "6.0.0",
452+ "rationals": "6.0.0",
453+ "rdf": "0.1.0",
454+ "react": "11.0.0",
455+ "react-aria": "0.2.0",
456+ "react-basic": "17.0.0",
457+ "react-basic-classic": "3.0.0",
458+ "react-basic-dnd": "10.1.0",
459+ "react-basic-dom": "7.0.0",
460+ "react-basic-dom-beta": "0.1.1",
461+ "react-basic-emotion": "7.1.0",
462+ "react-basic-hooks": "9.0.0",
463+ "react-basic-storybook": "2.0.0",
464+ "react-dom": "8.0.0",
465+ "react-halo": "3.0.0",
466+ "react-icons": "1.1.5",
467+ "react-markdown": "0.1.0",
468+ "react-testing-library": "4.0.1",
469+ "react-virtuoso": "1.0.0",
470+ "reactix": "0.6.1",
471+ "read": "1.0.1",
472+ "recharts": "1.1.0",
473+ "record": "4.0.0",
474+ "record-extra": "5.0.1",
475+ "record-extra-srghma": "0.2.8",
476+ "record-ptional-fields": "0.1.2",
477+ "record-studio": "1.0.4",
478+ "refs": "6.0.0",
479+ "remotedata": "5.0.1",
480+ "repr": "0.5.0",
481+ "resize-arrays": "0.0.1",
482+ "resize-observer": "1.0.0",
483+ "resource": "2.0.1",
484+ "resourcet": "1.0.0",
485+ "result": "1.0.3",
486+ "return": "0.2.0",
487+ "ring-modules": "5.0.1",
488+ "rito": "0.3.4",
489+ "roman": "0.4.0",
490+ "rough-notation": "1.0.2",
491+ "routing": "11.0.0",
492+ "routing-duplex": "0.7.0",
493+ "run": "5.0.0",
494+ "safe-coerce": "2.0.0",
495+ "safely": "4.0.1",
496+ "school-of-music": "1.3.0",
497+ "selection-foldable": "0.2.0",
498+ "selective-functors": "1.0.1",
499+ "semirings": "7.0.0",
500+ "shuffle": "2.0.0",
501+ "sigil": "0.2.0",
502+ "signal": "13.0.0",
503+ "simple-emitter": "3.0.1",
504+ "simple-i18n": "2.0.1",
505+ "simple-json": "9.0.0",
506+ "simple-json-generics": "0.2.1",
507+ "simple-ulid": "3.0.0",
508+ "sized-matrices": "1.0.0",
509+ "sized-vectors": "5.0.2",
510+ "slug": "3.2.0",
511+ "small-ffi": "4.0.1",
512+ "soundfonts": "4.1.0",
513+ "sparse-matrices": "2.0.1",
514+ "sparse-polynomials": "3.0.1",
515+ "spec": "8.1.1",
516+ "spec-discovery": "8.4.1",
517+ "spec-mocha": "5.1.1",
518+ "spec-node": "0.0.3",
519+ "spec-quickcheck": "5.0.2",
520+ "spec-reporter-xunit": "0.7.1",
521+ "splitmix": "2.1.0",
522+ "ssrs": "1.0.0",
523+ "st": "6.2.0",
524+ "statistics": "0.3.2",
525+ "strictlypositiveint": "1.0.1",
526+ "string-parsers": "8.0.0",
527+ "strings": "6.0.1",
528+ "strings-extra": "4.0.0",
529+ "stringutils": "0.0.12",
530+ "structured-logging": "1.0.0",
531+ "substitute": "0.2.3",
532+ "supply": "0.2.0",
533+ "svg-parser": "3.0.0",
534+ "systemd-journald": "0.3.0",
535+ "tagged": "4.0.2",
536+ "tailrec": "6.1.0",
537+ "tanstack-query": "2.0.0",
538+ "tecton": "0.2.1",
539+ "tecton-halogen": "0.2.0",
540+ "test-unit": "17.0.0",
541+ "text-formatting": "0.1.0",
542+ "thermite": "6.3.1",
543+ "thermite-dom": "0.3.1",
544+ "these": "6.0.0",
545+ "threading": "0.0.3",
546+ "tidy": "0.11.1",
547+ "tidy-codegen": "4.0.1",
548+ "tldr": "0.0.0",
549+ "toestand": "0.9.0",
550+ "transformation-matrix": "1.0.1",
551+ "transformers": "6.1.0",
552+ "transit": "1.0.0",
553+ "tree-rose": "4.0.2",
554+ "trivial-unfold": "0.5.0",
555+ "ts-bridge": "4.0.0",
556+ "tuples": "7.0.0",
557+ "two-or-more": "1.0.0",
558+ "type-equality": "4.0.1",
559+ "typedenv": "2.0.1",
560+ "typelevel": "6.0.0",
561+ "typelevel-lists": "2.1.0",
562+ "typelevel-peano": "1.0.1",
563+ "typelevel-prelude": "7.0.0",
564+ "typelevel-regex": "0.0.3",
565+ "typelevel-rows": "0.1.0",
566+ "typisch": "0.4.0",
567+ "uint": "7.0.0",
568+ "ulid": "3.0.1",
569+ "uncurried-transformers": "1.1.0",
570+ "undefined": "2.0.0",
571+ "undefined-is-not-a-problem": "1.1.0",
572+ "unfoldable": "6.0.0",
573+ "unicode": "6.0.0",
574+ "unique": "0.6.1",
575+ "unlift": "1.0.1",
576+ "unordered-collections": "3.1.0",
577+ "unsafe-coerce": "6.0.0",
578+ "unsafe-reference": "5.0.0",
579+ "untagged-to-tagged": "0.1.4",
580+ "untagged-union": "1.0.0",
581+ "uri": "9.0.0",
582+ "url-immutable": "1.0.0",
583+ "url-regex-safe": "0.1.1",
584+ "uuid": "9.0.0",
585+ "uuidv4": "1.0.0",
586+ "validation": "6.0.0",
587+ "variant": "8.0.0",
588+ "variant-encodings": "2.0.0",
589+ "variant-gen": "1.0.0",
590+ "vectorfield": "1.0.1",
591+ "vectors": "2.1.0",
592+ "versions": "7.0.0",
593+ "visx": "0.0.2",
594+ "vitest": "2.0.0",
595+ "web-clipboard": "6.0.0",
596+ "web-cssom": "2.0.0",
597+ "web-cssom-view": "0.1.0",
598+ "web-dom": "6.0.0",
599+ "web-dom-parser": "8.0.0",
600+ "web-dom-xpath": "3.0.0",
601+ "web-encoding": "3.0.0",
602+ "web-events": "4.0.0",
603+ "web-fetch": "4.0.1",
604+ "web-file": "4.0.0",
605+ "web-geometry": "0.1.0",
606+ "web-html": "4.1.1",
607+ "web-pointerevents": "2.0.0",
608+ "web-proletarian": "1.0.0",
609+ "web-promise": "3.2.0",
610+ "web-resize-observer": "2.1.0",
611+ "web-router": "1.0.0",
612+ "web-socket": "4.0.0",
613+ "web-storage": "5.0.0",
614+ "web-streams": "4.0.0",
615+ "web-touchevents": "4.0.0",
616+ "web-uievents": "5.0.0",
617+ "web-url": "2.0.0",
618+ "web-workers": "1.1.0",
619+ "web-xhr": "5.0.1",
620+ "webb-aff-list": "0.0.2",
621+ "webb-array": "0.0.2",
622+ "webb-channel": "0.0.3",
623+ "webb-commandline": "0.0.3",
624+ "webb-directory": "0.0.7",
625+ "webb-file": "0.0.1",
626+ "webb-map": "0.0.1",
627+ "webb-monad": "0.0.2",
628+ "webb-mutex": "0.0.7",
629+ "webb-parsing": "0.0.5",
630+ "webb-random": "0.0.1",
631+ "webb-refer": "0.0.3",
632+ "webb-set": "0.0.1",
633+ "webb-slot": "0.0.1",
634+ "webb-stateful": "0.0.3",
635+ "webb-string": "0.0.1",
636+ "webb-test": "0.0.1",
637+ "webb-thread": "0.0.2",
638+ "webb-writer": "0.0.3",
639+ "webextension-polyfill": "0.1.0",
640+ "webgpu": "0.0.1",
641+ "which": "2.0.0",
642+ "whine-core": "0.0.33",
643+ "xterm": "1.0.0",
644+ "yaml-next": "3.1.1",
645+ "yoga-fetch": "1.0.1",
646+ "yoga-json": "5.1.0",
647+ "yoga-om": "0.1.0",
648+ "yoga-postgres": "6.0.0",
649+ "yoga-react-dom": "1.0.1",
650+ "yoga-redis": "0.1.0",
651+ "yoga-sql-types": "0.1.0",
652+ "yoga-subtlecrypto": "0.1.0",
653+ "yoga-test-docker": "0.1.0",
654+ "yoga-tree": "1.0.0",
655+ "yoga-tree-svg": "0.1.0",
656+ "yoga-tree-utils": "1.0.0",
657+ "z3": "0.0.2",
658+ "zipperarray": "2.0.0"
659+ }
660+ },
661+ "extra_packages": {}
662+ },
663+ "packages": {
664+ "aff": {
665+ "type": "registry",
666+ "version": "8.0.0",
667+ "integrity": "sha256-9BRIrSdRoYybfiUmBqgKJ66cPqxYHb277bVWQMn/9sg=",
668+ "dependencies": [
669+ "control",
670+ "datetime",
671+ "effect",
672+ "either",
673+ "exceptions",
674+ "functions",
675+ "newtype",
676+ "parallel",
677+ "partial",
678+ "prelude",
679+ "st",
680+ "tailrec",
681+ "transformers",
682+ "unsafe-coerce"
683+ ]
684+ },
685+ "aff-promise": {
686+ "type": "registry",
687+ "version": "4.0.0",
688+ "integrity": "sha256-Jgp3y+NWuuAmwz2V3LlWoX+AvxqfVglY77N5zTw8xnI=",
689+ "dependencies": [
690+ "aff",
691+ "control",
692+ "effect",
693+ "either",
694+ "exceptions",
695+ "foreign",
696+ "prelude",
697+ "transformers"
698+ ]
699+ },
700+ "argonaut-core": {
701+ "type": "registry",
702+ "version": "7.0.0",
703+ "integrity": "sha256-gYZihtBIKthVuXXoiPphMookSf8M5aHyFYkcIWqlxTM=",
704+ "dependencies": [
705+ "arrays",
706+ "control",
707+ "either",
708+ "foreign-object",
709+ "functions",
710+ "gen",
711+ "maybe",
712+ "nonempty",
713+ "prelude",
714+ "strings",
715+ "tailrec"
716+ ]
717+ },
718+ "arraybuffer-types": {
719+ "type": "registry",
720+ "version": "3.0.2",
721+ "integrity": "sha256-p05cJnSkyeoB7VHzMyc2Eb1RwUaB7Nl0sQSqEGNEUD8=",
722+ "dependencies": []
723+ },
724+ "arrays": {
725+ "type": "registry",
726+ "version": "7.3.0",
727+ "integrity": "sha256-GD4z7LCi9wzi7FCQqbWhvs8paoUK9NO+HwgXZ+KP8Rk=",
728+ "dependencies": [
729+ "bifunctors",
730+ "control",
731+ "foldable-traversable",
732+ "functions",
733+ "maybe",
734+ "nonempty",
735+ "partial",
736+ "prelude",
737+ "safe-coerce",
738+ "st",
739+ "tailrec",
740+ "tuples",
741+ "unfoldable",
742+ "unsafe-coerce"
743+ ]
744+ },
745+ "bifunctors": {
746+ "type": "registry",
747+ "version": "6.1.0",
748+ "integrity": "sha256-CvZRb8uI75eKIqiYntR+k05Wk6tKlMS5w8sCA2AFna0=",
749+ "dependencies": [
750+ "const",
751+ "either",
752+ "newtype",
753+ "prelude",
754+ "tuples"
755+ ]
756+ },
757+ "const": {
758+ "type": "registry",
759+ "version": "6.0.0",
760+ "integrity": "sha256-S+m0lQsxnji0z1XRUmkn+3RFuWJ5CXWuIr1u3i8Bfoc=",
761+ "dependencies": [
762+ "invariant",
763+ "newtype",
764+ "prelude"
765+ ]
766+ },
767+ "contravariant": {
768+ "type": "registry",
769+ "version": "6.0.0",
770+ "integrity": "sha256-nuckEWqL80NaPmR/l9AUyrfycNh18XcvlZV9PAamwqc=",
771+ "dependencies": [
772+ "const",
773+ "either",
774+ "newtype",
775+ "prelude",
776+ "tuples"
777+ ]
778+ },
779+ "control": {
780+ "type": "registry",
781+ "version": "6.0.0",
782+ "integrity": "sha256-0vxyYh5FL+ilxgLo954w1LqCUC0RSIivNNlb9CaNUQg=",
783+ "dependencies": [
784+ "newtype",
785+ "prelude"
786+ ]
787+ },
788+ "datetime": {
789+ "type": "registry",
790+ "version": "6.1.0",
791+ "integrity": "sha256-tbv6eDXy6QOD7YSknxYSbsDF32OC2JrNbSBpzMs7Doc=",
792+ "dependencies": [
793+ "bifunctors",
794+ "control",
795+ "either",
796+ "enums",
797+ "foldable-traversable",
798+ "functions",
799+ "gen",
800+ "integers",
801+ "lists",
802+ "maybe",
803+ "newtype",
804+ "numbers",
805+ "ordered-collections",
806+ "partial",
807+ "prelude",
808+ "tuples"
809+ ]
810+ },
811+ "distributive": {
812+ "type": "registry",
813+ "version": "6.0.0",
814+ "integrity": "sha256-netyJK4B32PDYHD0tF2AenKgo3urzbI770ycM0pArAo=",
815+ "dependencies": [
816+ "identity",
817+ "newtype",
818+ "prelude",
819+ "tuples",
820+ "type-equality"
821+ ]
822+ },
823+ "effect": {
824+ "type": "registry",
825+ "version": "4.0.0",
826+ "integrity": "sha256-DdqU3bncRTjgMVPPRlAuGHVeajSPEcRaRhNuio7if6s=",
827+ "dependencies": [
828+ "prelude"
829+ ]
830+ },
831+ "either": {
832+ "type": "registry",
833+ "version": "6.1.0",
834+ "integrity": "sha256-tBHx3PgtH4GZOApZCDkcM7szRTYJinrUrVGWazQCUUg=",
835+ "dependencies": [
836+ "control",
837+ "invariant",
838+ "maybe",
839+ "prelude"
840+ ]
841+ },
842+ "enums": {
843+ "type": "registry",
844+ "version": "6.0.1",
845+ "integrity": "sha256-sdZOmLX5+5pASGpvVyT0vSD5BBYQjZiayjV5XiPutso=",
846+ "dependencies": [
847+ "control",
848+ "either",
849+ "gen",
850+ "maybe",
851+ "newtype",
852+ "nonempty",
853+ "partial",
854+ "prelude",
855+ "tuples",
856+ "unfoldable"
857+ ]
858+ },
859+ "exceptions": {
860+ "type": "registry",
861+ "version": "6.1.0",
862+ "integrity": "sha256-nRrr+N0wk0TUFOWLR7e1n1oxcXo/X345bQUtoY9lW6A=",
863+ "dependencies": [
864+ "effect",
865+ "either",
866+ "maybe",
867+ "prelude"
868+ ]
869+ },
870+ "exists": {
871+ "type": "registry",
872+ "version": "6.0.0",
873+ "integrity": "sha256-vtLbrWNaI+pzx/2fw2AQnCovoLtcosClIhjO26QKkh8=",
874+ "dependencies": [
875+ "unsafe-coerce"
876+ ]
877+ },
878+ "foldable-traversable": {
879+ "type": "registry",
880+ "version": "6.0.0",
881+ "integrity": "sha256-NGGWyCio/xjce6fPP7y3wwg7CheqllID6aJudDxbWhA=",
882+ "dependencies": [
883+ "bifunctors",
884+ "const",
885+ "control",
886+ "either",
887+ "functors",
888+ "identity",
889+ "maybe",
890+ "newtype",
891+ "orders",
892+ "prelude",
893+ "tuples"
894+ ]
895+ },
896+ "foreign": {
897+ "type": "registry",
898+ "version": "7.0.0",
899+ "integrity": "sha256-jiDRMVQfovGsbbA/FzbzYf6iWk9i2b5gNrIjz+gFfsI=",
900+ "dependencies": [
901+ "either",
902+ "functions",
903+ "integers",
904+ "lists",
905+ "maybe",
906+ "prelude",
907+ "strings",
908+ "transformers",
909+ "unsafe-coerce"
910+ ]
911+ },
912+ "foreign-object": {
913+ "type": "registry",
914+ "version": "4.1.0",
915+ "integrity": "sha256-x/Q7r80z/vmHRKvPwhYmHP/DnJciPtsyGfRTMzayKIU=",
916+ "dependencies": [
917+ "arrays",
918+ "foldable-traversable",
919+ "functions",
920+ "gen",
921+ "lists",
922+ "maybe",
923+ "prelude",
924+ "st",
925+ "tailrec",
926+ "tuples",
927+ "typelevel-prelude",
928+ "unfoldable",
929+ "unsafe-coerce"
930+ ]
931+ },
932+ "functions": {
933+ "type": "registry",
934+ "version": "6.0.0",
935+ "integrity": "sha256-0jgtOr+SFO4UScKc40oA/9Vdcf2rLn3h3vZlY0KfqVo=",
936+ "dependencies": [
937+ "prelude"
938+ ]
939+ },
940+ "functors": {
941+ "type": "registry",
942+ "version": "5.0.0",
943+ "integrity": "sha256-W1o/4wcp6S3chodYL8uixlXK2mfr1L+SzM1R+whqUco=",
944+ "dependencies": [
945+ "bifunctors",
946+ "const",
947+ "contravariant",
948+ "control",
949+ "distributive",
950+ "either",
951+ "invariant",
952+ "maybe",
953+ "newtype",
954+ "prelude",
955+ "profunctor",
956+ "tuples",
957+ "unsafe-coerce"
958+ ]
959+ },
960+ "gen": {
961+ "type": "registry",
962+ "version": "4.0.0",
963+ "integrity": "sha256-kyOateeOtQa07vfTMYeSuCKdelgKE1R65fwKkZ10wsY=",
964+ "dependencies": [
965+ "either",
966+ "foldable-traversable",
967+ "identity",
968+ "maybe",
969+ "newtype",
970+ "nonempty",
971+ "prelude",
972+ "tailrec",
973+ "tuples",
974+ "unfoldable"
975+ ]
976+ },
977+ "identity": {
978+ "type": "registry",
979+ "version": "6.0.0",
980+ "integrity": "sha256-RY/iXPpxpqvKHYfJeFVNI1J06kohB9rbtWYuha8t0LE=",
981+ "dependencies": [
982+ "control",
983+ "invariant",
984+ "newtype",
985+ "prelude"
986+ ]
987+ },
988+ "integers": {
989+ "type": "registry",
990+ "version": "6.0.0",
991+ "integrity": "sha256-Y8yozC1uHRLcruobEyv5/bMKzE1BoKJ/olHv6o+bgm8=",
992+ "dependencies": [
993+ "maybe",
994+ "numbers",
995+ "prelude"
996+ ]
997+ },
998+ "invariant": {
999+ "type": "registry",
1000+ "version": "6.0.0",
1001+ "integrity": "sha256-HyoT1I5qIHRq8RSZji6zZDvqnpVjLw748utrKwZtqsw=",
1002+ "dependencies": [
1003+ "control",
1004+ "prelude"
1005+ ]
1006+ },
1007+ "lazy": {
1008+ "type": "registry",
1009+ "version": "6.0.0",
1010+ "integrity": "sha256-MHRC+1Pc+AjortBp4b/e1e6KpEpsDwaJBNBB7TOL+1I=",
1011+ "dependencies": [
1012+ "control",
1013+ "foldable-traversable",
1014+ "invariant",
1015+ "prelude"
1016+ ]
1017+ },
1018+ "lists": {
1019+ "type": "registry",
1020+ "version": "7.0.0",
1021+ "integrity": "sha256-/mGd7wLoU+wsTcqii7SSUByxsvwvjnu2PjwAD47yYb4=",
1022+ "dependencies": [
1023+ "bifunctors",
1024+ "control",
1025+ "foldable-traversable",
1026+ "lazy",
1027+ "maybe",
1028+ "newtype",
1029+ "nonempty",
1030+ "partial",
1031+ "prelude",
1032+ "tailrec",
1033+ "tuples",
1034+ "unfoldable"
1035+ ]
1036+ },
1037+ "literals": {
1038+ "type": "registry",
1039+ "version": "1.0.2",
1040+ "integrity": "sha256-ZkGRFD6gb8etYvyMYpX1Z7lx1Tql7R1VGnD1Dzinup8=",
1041+ "dependencies": [
1042+ "integers",
1043+ "maybe",
1044+ "numbers",
1045+ "partial",
1046+ "prelude",
1047+ "typelevel-prelude",
1048+ "unsafe-coerce"
1049+ ]
1050+ },
1051+ "maybe": {
1052+ "type": "registry",
1053+ "version": "6.0.0",
1054+ "integrity": "sha256-8X6XEgtZ5lqfkEuc1hWOofnL6mwhk8gSJTxwvbR/SbY=",
1055+ "dependencies": [
1056+ "control",
1057+ "invariant",
1058+ "newtype",
1059+ "prelude"
1060+ ]
1061+ },
1062+ "newtype": {
1063+ "type": "registry",
1064+ "version": "5.0.0",
1065+ "integrity": "sha256-dt6w0cty4OS+Pjt9fsh3iU6ottqSU83mdAZkaEEvo6c=",
1066+ "dependencies": [
1067+ "prelude",
1068+ "safe-coerce"
1069+ ]
1070+ },
1071+ "node-buffer": {
1072+ "type": "registry",
1073+ "version": "9.0.0",
1074+ "integrity": "sha256-RdQjilmEHqsT4fwpCr8Mavw8KTafYrS3ZM6zeAAVAl8=",
1075+ "dependencies": [
1076+ "arraybuffer-types",
1077+ "effect",
1078+ "functions",
1079+ "maybe",
1080+ "nullable",
1081+ "partial",
1082+ "prelude",
1083+ "st",
1084+ "unsafe-coerce"
1085+ ]
1086+ },
1087+ "node-event-emitter": {
1088+ "type": "registry",
1089+ "version": "3.0.0",
1090+ "integrity": "sha256-wodx71NxJBPXOaawFn01V1ByYB2vT+I3RuV2giOVKMg=",
1091+ "dependencies": [
1092+ "effect",
1093+ "either",
1094+ "functions",
1095+ "maybe",
1096+ "nullable",
1097+ "prelude",
1098+ "unsafe-coerce"
1099+ ]
1100+ },
1101+ "node-streams": {
1102+ "type": "registry",
1103+ "version": "9.0.1",
1104+ "integrity": "sha256-yuVGm/R/tBr4Nphi+a1a984Z0fkmN9Q5wWtSmbmJTpA=",
1105+ "dependencies": [
1106+ "aff",
1107+ "arrays",
1108+ "effect",
1109+ "either",
1110+ "exceptions",
1111+ "maybe",
1112+ "node-buffer",
1113+ "node-event-emitter",
1114+ "nullable",
1115+ "prelude",
1116+ "refs",
1117+ "st",
1118+ "tailrec",
1119+ "unsafe-coerce"
1120+ ]
1121+ },
1122+ "nonempty": {
1123+ "type": "registry",
1124+ "version": "7.0.0",
1125+ "integrity": "sha256-Ctkq8/+KiGqCE53Y/LvibA/coy7ev9HtRZU+GYS7yfQ=",
1126+ "dependencies": [
1127+ "control",
1128+ "foldable-traversable",
1129+ "maybe",
1130+ "prelude",
1131+ "tuples",
1132+ "unfoldable"
1133+ ]
1134+ },
1135+ "nullable": {
1136+ "type": "registry",
1137+ "version": "6.0.0",
1138+ "integrity": "sha256-CDAZk+L9Sc0GCFTkE8n+qdp4Ys8avvnkU+m2hVALt7M=",
1139+ "dependencies": [
1140+ "functions",
1141+ "maybe",
1142+ "prelude"
1143+ ]
1144+ },
1145+ "numbers": {
1146+ "type": "registry",
1147+ "version": "9.0.1",
1148+ "integrity": "sha256-ZydYckgwRAnRaFC7pu6fADhzdwX+UqHZrfJyet64zls=",
1149+ "dependencies": [
1150+ "functions",
1151+ "maybe",
1152+ "prelude"
1153+ ]
1154+ },
1155+ "ordered-collections": {
1156+ "type": "registry",
1157+ "version": "3.2.0",
1158+ "integrity": "sha256-NaEXc2cz/7lJfxPWEja4XlZbGxuRqJwFKQJjsJf51kQ=",
1159+ "dependencies": [
1160+ "arrays",
1161+ "control",
1162+ "foldable-traversable",
1163+ "functions",
1164+ "gen",
1165+ "lists",
1166+ "maybe",
1167+ "newtype",
1168+ "partial",
1169+ "prelude",
1170+ "safe-coerce",
1171+ "tailrec",
1172+ "tuples",
1173+ "unfoldable"
1174+ ]
1175+ },
1176+ "orders": {
1177+ "type": "registry",
1178+ "version": "6.0.0",
1179+ "integrity": "sha256-nSMxZK7wxyDULkjZqvMyB71mVo6b0AyLLHosDVbv1XM=",
1180+ "dependencies": [
1181+ "newtype",
1182+ "prelude"
1183+ ]
1184+ },
1185+ "parallel": {
1186+ "type": "registry",
1187+ "version": "7.0.0",
1188+ "integrity": "sha256-bAGpVhrFz2IyHkA4MR7+tE/19FZ7dzYBdYPgK5svkqw=",
1189+ "dependencies": [
1190+ "control",
1191+ "effect",
1192+ "either",
1193+ "foldable-traversable",
1194+ "functors",
1195+ "maybe",
1196+ "newtype",
1197+ "prelude",
1198+ "profunctor",
1199+ "refs",
1200+ "transformers"
1201+ ]
1202+ },
1203+ "partial": {
1204+ "type": "registry",
1205+ "version": "4.0.0",
1206+ "integrity": "sha256-mdrlJBAgFMh79hNRW39uv7c+BwnnaOrAMmdh7+VhEhs=",
1207+ "dependencies": []
1208+ },
1209+ "prelude": {
1210+ "type": "registry",
1211+ "version": "6.0.2",
1212+ "integrity": "sha256-IqykrDRquGUD/LRSad7y75hZv3bUsGQ4knc8tdez8Qw=",
1213+ "dependencies": []
1214+ },
1215+ "profunctor": {
1216+ "type": "registry",
1217+ "version": "6.0.1",
1218+ "integrity": "sha256-Ow0mJC+PIIRq/a3mzCWY5vxuTgR/e+Ee68+mWeSRnWY=",
1219+ "dependencies": [
1220+ "control",
1221+ "distributive",
1222+ "either",
1223+ "exists",
1224+ "invariant",
1225+ "newtype",
1226+ "prelude",
1227+ "tuples"
1228+ ]
1229+ },
1230+ "refs": {
1231+ "type": "registry",
1232+ "version": "6.0.0",
1233+ "integrity": "sha256-KKD5G9dR2SauuDGULUJsxjqDOEi1Jqm+2Sq5U2mY8YU=",
1234+ "dependencies": [
1235+ "effect",
1236+ "prelude"
1237+ ]
1238+ },
1239+ "safe-coerce": {
1240+ "type": "registry",
1241+ "version": "2.0.0",
1242+ "integrity": "sha256-EJrxtKt5xC7TYjBZrSBO/J7Aw3DmtilYjt4olpAXWVc=",
1243+ "dependencies": [
1244+ "unsafe-coerce"
1245+ ]
1246+ },
1247+ "st": {
1248+ "type": "registry",
1249+ "version": "6.2.0",
1250+ "integrity": "sha256-WI4MEkkwUd4pnwZQ3G8VKWgX5t1RSNJludm5e9boaRo=",
1251+ "dependencies": [
1252+ "effect",
1253+ "partial",
1254+ "prelude",
1255+ "tailrec",
1256+ "unsafe-coerce"
1257+ ]
1258+ },
1259+ "strings": {
1260+ "type": "registry",
1261+ "version": "6.0.1",
1262+ "integrity": "sha256-FNto2hoNW5Da6W6crIk77YXMagBvOGHZE1kO7eZ1vLM=",
1263+ "dependencies": [
1264+ "arrays",
1265+ "control",
1266+ "either",
1267+ "enums",
1268+ "foldable-traversable",
1269+ "gen",
1270+ "integers",
1271+ "maybe",
1272+ "newtype",
1273+ "nonempty",
1274+ "partial",
1275+ "prelude",
1276+ "tailrec",
1277+ "tuples",
1278+ "unfoldable",
1279+ "unsafe-coerce"
1280+ ]
1281+ },
1282+ "tailrec": {
1283+ "type": "registry",
1284+ "version": "6.1.0",
1285+ "integrity": "sha256-xrorCfP0xV1wubs27idQCHQqdvSUuqmmL/am7Ji1wVU=",
1286+ "dependencies": [
1287+ "bifunctors",
1288+ "effect",
1289+ "either",
1290+ "identity",
1291+ "maybe",
1292+ "partial",
1293+ "prelude",
1294+ "refs"
1295+ ]
1296+ },
1297+ "transformers": {
1298+ "type": "registry",
1299+ "version": "6.1.0",
1300+ "integrity": "sha256-QJmgNT/y7ljPHSsXaW4zxF/982BFiQ90KNL1g/NtEOQ=",
1301+ "dependencies": [
1302+ "control",
1303+ "distributive",
1304+ "effect",
1305+ "either",
1306+ "exceptions",
1307+ "foldable-traversable",
1308+ "identity",
1309+ "lazy",
1310+ "maybe",
1311+ "newtype",
1312+ "prelude",
1313+ "st",
1314+ "tailrec",
1315+ "tuples",
1316+ "unfoldable"
1317+ ]
1318+ },
1319+ "tuples": {
1320+ "type": "registry",
1321+ "version": "7.0.0",
1322+ "integrity": "sha256-BKy7EfK8S1KeTCwyWqyW1wwcpSAQuh3IsczSVgS6fzY=",
1323+ "dependencies": [
1324+ "control",
1325+ "invariant",
1326+ "prelude"
1327+ ]
1328+ },
1329+ "type-equality": {
1330+ "type": "registry",
1331+ "version": "4.0.1",
1332+ "integrity": "sha256-BBqYOSnAKmayRvR5mtZoCf4SlYs2ipatD/+5nQx73aw=",
1333+ "dependencies": []
1334+ },
1335+ "typelevel-prelude": {
1336+ "type": "registry",
1337+ "version": "7.0.0",
1338+ "integrity": "sha256-+pHi14/40mTj/+lmCWqL0T7iXIXD1+NSg/KItyyoB0A=",
1339+ "dependencies": [
1340+ "prelude",
1341+ "type-equality"
1342+ ]
1343+ },
1344+ "unfoldable": {
1345+ "type": "registry",
1346+ "version": "6.0.0",
1347+ "integrity": "sha256-BK/6By1sKp/ztk+9CF3q43SV0QDTLVdsGqFerKHSmbg=",
1348+ "dependencies": [
1349+ "foldable-traversable",
1350+ "maybe",
1351+ "partial",
1352+ "prelude",
1353+ "tuples"
1354+ ]
1355+ },
1356+ "unsafe-coerce": {
1357+ "type": "registry",
1358+ "version": "6.0.0",
1359+ "integrity": "sha256-0L1QsaY20OILjfU5TV72d3U/tSjhmL9hJ32WMp857Lk=",
1360+ "dependencies": []
1361+ },
1362+ "untagged-union": {
1363+ "type": "registry",
1364+ "version": "1.0.0",
1365+ "integrity": "sha256-MQvpb13TZEBoi9n/AoQ7ugniSQqbN6XQmAjii9pqJRk=",
1366+ "dependencies": [
1367+ "either",
1368+ "foreign",
1369+ "foreign-object",
1370+ "literals",
1371+ "maybe",
1372+ "newtype",
1373+ "prelude",
1374+ "tuples",
1375+ "unsafe-coerce"
1376+ ]
1377+ }
1378+ }
1379+}
spago.yamlnew file+34
@@ -0,0 +1,34 @@
1+package:
2+ name: playwright
3+ dependencies:
4+ - aff: ">=8.0.0 <9.0.0"
5+ - aff-promise: ">=4.0.0 <5.0.0"
6+ - argonaut-core: ">=7.0.0 <8.0.0"
7+ - datetime: ">=6.1.0 <7.0.0"
8+ - effect: ">=4.0.0 <5.0.0"
9+ - exceptions: ">=6.1.0 <7.0.0"
10+ - foreign: ">=7.0.0 <8.0.0"
11+ - foreign-object: ">=4.1.0 <5.0.0"
12+ - literals: ">=1.0.2 <2.0.0"
13+ - maybe: ">=6.0.0 <7.0.0"
14+ - node-buffer: ">=9.0.0 <10.0.0"
15+ - node-streams: ">=9.0.1 <10.0.0"
16+ - ordered-collections: ">=3.2.0 <4.0.0"
17+ - prelude: ">=6.0.2 <7.0.0"
18+ - strings: ">=6.0.1 <7.0.0"
19+ - typelevel-prelude: ">=7.0.0 <8.0.0"
20+ - untagged-union: ">=1.0.0 <2.0.0"
21+ test:
22+ main: Test.Main
23+ dependencies:
24+ - either
25+ - transformers
26+ publish:
27+ version: 0.0.1
28+ license: BSD-3-Clause
29+ location:
30+ githubOwner: rowtype-yoga
31+ githubRepo: purescript-playwright
32+workspace:
33+ packageSet:
34+ registry: 73.2.0
src/Playwright.js+22−12
@@ -1,15 +1,25 @@
1/* global exports */
1/* global exports */
2
2
3−exports.exposeBinding_ = function (x) {
3+export const exposeBinding_ = x => name => cb => opts => () => {
4− return function (name) {
5− return function (cb) {
6− return function (opts) {
7− return function () {
8− return x.exposeBinding(name, function (info, arg) {
4+ return x.exposeBinding(
5+ name,
6+ function (info, arg) {
9− return cb(info)(arg)();
7+ return cb(info)(arg)()
8+ },
10− }, opts);
9+ opts
10+ )
11− };
11+}
12− };
12+
13+export const waitForGlobalFunction_ = page => name => async () => {
14+ const handle = await page.waitForFunction(
15+ name => typeof globalThis[name] === "function",
16+ name
13− };
17+ );
14− };
18+ await handle.dispose();
15};
19};
20+
21+export const evaluateEffect_ = page => name => argument => () =>
22+ page.evaluate(
23+ ({ name, argument }) => globalThis[name](argument)(),
24+ { name, argument }
25+ );
src/Playwright.purs+160−121
@@ -1,49 +1,50 @@
1module Playwright
1module Playwright
2− ( launch
2+ ( launch
3− , close
3+ , close
4− , contexts
4+ , contexts
5− , isConnected
5+ , isConnected
6− , version
6+ , version
7− , newPage
7+ , newPage
8− , goForward
8+ , goForward
9− , goBack
9+ , goBack
10− , goto
10+ , goto
11− , addCookies
11+ , addCookies
12− , hover
12+ , hover
13− , innerHTML
13+ , innerHTML
14− , innerText
14+ , innerText
15− , isClosed
15+ , isClosed
16− , keyboard
16+ , keyboard
17− , mainFrame
17+ , mainFrame
18− , name
18+ , name
19− , query
19+ , query
20− , queryMany
20+ , queryMany
21− , screenshot
21+ , screenshot
22− , textContent
22+ , textContent
23− , url
23+ , url
24− , addInitScript
24+ , addInitScript
25− , clearCookies
25+ , clearCookies
26− , click
26+ , click
27− , content
27+ , content
28− , dblclick
28+ , dblclick
29− , evaluate
29+ , evaluate
30− , evaluateHandle
30+ , evaluateHandle
31− , waitForNavigation
31+ , waitForNavigation
32− , waitForRequest
32+ , waitForRequest
33− , waitForResponse
33+ , waitForResponse
34− , waitForSelector
34+ , waitForSelector
35− , waitForFunction
35+ , waitForFunction
36+ , waitForGlobalFunction
37+ , evaluateEffect
36− , waitForLoadState
38+ , waitForLoadState
37− , waitForTimeout
39+ , waitForTimeout
38− , pdf
40+ , pdf
39− , setInputFiles
41+ , setInputFiles
40− , setViewportSize
42+ , setViewportSize
41− , title
43+ , title
42− , exposeBinding
44+ , exposeBinding
43− , module Playwright.Data
45+ , module Playwright.Data
44− , module Playwright.Options
46+ , module Playwright.Options
45− )
46−where
47+ ) where
47
48
48import Control.Promise (Promise, fromAff, toAffE)
49import Control.Promise (Promise, fromAff, toAffE)
49import Data.String.Regex (Regex)
50import Data.String.Regex (Regex)
@@ -56,21 +57,24 @@ import Playwright.Data
56import Playwright.Internal (effCall, effProp, affCall)
57import Playwright.Internal (effCall, effProp, affCall)
57import Playwright.Options
58import Playwright.Options
58import Prelude (Unit, ($))
59import Prelude (Unit, ($))
59−import Undefined (undefined)
60import Untagged.Castable (class Castable)
60import Untagged.Castable (class Castable)
61import Untagged.Union (type (|+|), UndefinedOr)
61import Untagged.Union (type (|+|), UndefinedOr)
62+import Literals.Undefined (undefined)
62
63
63launch
64launch
64 :: forall o
65 :: forall o
65− . Castable o LaunchOptions
66+ . Castable o LaunchOptions
66− => BrowserType -> o -> Aff Browser
67+ => BrowserType
68+ -> o
69+ -> Aff Browser
67launch =
70launch =
68 affCall "launch" \_ -> launch
71 affCall "launch" \_ -> launch
69
72
70close
73close
71 :: forall x
74 :: forall x
72− . Castable x (Browser |+| BrowserContext |+| Page)
75+ . Castable x (Browser |+| BrowserContext |+| Page)
76+ => x
73− => x -> Aff Unit
77+ -> Aff Unit
74close =
78close =
75 affCall "close" \_ -> close
79 affCall "close" \_ -> close
76
80
@@ -88,31 +92,40 @@ version =
88
92
89newPage
93newPage
90 :: forall x o
94 :: forall x o
91− . Castable x (Browser |+| BrowserContext)
95+ . Castable x (Browser |+| BrowserContext)
92 => Castable o NewpageOptions
96 => Castable o NewpageOptions
97+ => x
98+ -> o
93− => x -> o -> Aff Page
99+ -> Aff Page
94newPage =
100newPage =
95 affCall "newPage" \_ -> newPage
101 affCall "newPage" \_ -> newPage
96
102
97goForward
103goForward
98 :: forall o
104 :: forall o
99− . Castable o GoOptions
105+ . Castable o GoOptions
106+ => Page
107+ -> o
100− => Page -> o -> Aff (Null |+| Response)
108+ -> Aff (Null |+| Response)
101goForward =
109goForward =
102 affCall "goForward" \_ -> goForward
110 affCall "goForward" \_ -> goForward
103
111
104goBack
112goBack
105 :: forall o
113 :: forall o
106− . Castable o GoOptions
114+ . Castable o GoOptions
115+ => Page
116+ -> o
107− => Page -> o -> Aff (Null |+| Response)
117+ -> Aff (Null |+| Response)
108−goBack =
118+goBack =
109 affCall "goBack" \_ -> goBack
119 affCall "goBack" \_ -> goBack
110
120
111goto
121goto
112 :: forall x o
122 :: forall x o
113− . Castable x (Page |+| Frame)
123+ . Castable x (Page |+| Frame)
114 => Castable o GotoOptions
124 => Castable o GotoOptions
125+ => x
126+ -> URL
127+ -> o
115− => x -> URL -> o -> Aff (Null |+| Response)
128+ -> Aff (Null |+| Response)
116goto =
129goto =
117 affCall "goto" \_ -> goto
130 affCall "goto" \_ -> goto
118
131
@@ -131,29 +144,34 @@ addCookies =
131
144
132hover
145hover
133 :: forall x o
146 :: forall x o
134− . Castable x (Page |+| Frame |+| ElementHandle)
147+ . Castable x (Page |+| Frame |+| ElementHandle)
135 => Castable o HoverOptions
148 => Castable o HoverOptions
149+ => x
150+ -> o
136− => x -> o -> Aff Unit
151+ -> Aff Unit
137hover =
152hover =
138 affCall "hover" \_ -> hover
153 affCall "hover" \_ -> hover
139
154
140innerHTML
155innerHTML
141 :: forall x o
156 :: forall x o
142− . Castable x (Page |+| Frame)
157+ . Castable x (Page |+| Frame)
143 => Castable o InnerHTMLOptions
158 => Castable o InnerHTMLOptions
159+ => x
160+ -> Selector
161+ -> o
144− => x -> Selector -> o -> Aff String
162+ -> Aff String
145innerHTML =
163innerHTML =
146 affCall "innerHTML" \_ -> innerHTML
164 affCall "innerHTML" \_ -> innerHTML
147
165
148innerText
166innerText
149 :: forall x o
167 :: forall x o
150− . Castable o InnerTextOptions
168+ . Castable o InnerTextOptions
151 => Castable x (Page |+| Frame |+| ElementHandle)
169 => Castable x (Page |+| Frame |+| ElementHandle)
152 => x
170 => x
153 -> Selector
171 -> Selector
154 -> o
172 -> o
155 -> Aff String
173 -> Aff String
156−innerText =
174+innerText =
157 affCall "innerText" \_ -> innerText
175 affCall "innerText" \_ -> innerText
158
176
159isClosed :: Page -> Effect Boolean
177isClosed :: Page -> Effect Boolean
@@ -171,37 +189,45 @@ name = effCall "name" \_ -> name
171-- | `sth.$(selector)`
189-- | `sth.$(selector)`
172query
190query
173 :: forall x
191 :: forall x
174− . Castable x (ElementHandle |+| Page |+| Frame)
192+ . Castable x (ElementHandle |+| Page |+| Frame)
193+ => x
194+ -> Selector
175− => x -> Selector -> Aff (Null |+| ElementHandle)
195+ -> Aff (Null |+| ElementHandle)
176query =
196query =
177 affCall "$" \_ -> query
197 affCall "$" \_ -> query
178
198
179-- | `sth.$$(selector)`
199-- | `sth.$$(selector)`
180queryMany
200queryMany
181 :: forall x
201 :: forall x
182− . Castable x (ElementHandle |+| Page |+| Frame)
202+ . Castable x (ElementHandle |+| Page |+| Frame)
203+ => x
204+ -> Selector
183− => x -> Selector -> Aff (Array ElementHandle)
205+ -> Aff (Array ElementHandle)
184queryMany =
206queryMany =
185 affCall "$$" \_ -> queryMany
207 affCall "$$" \_ -> queryMany
186
208
187screenshot
209screenshot
188 :: forall x o
210 :: forall x o
189− . Castable x (ElementHandle |+| Page)
211+ . Castable x (ElementHandle |+| Page)
190 => Castable o ScreenshotOptions
212 => Castable o ScreenshotOptions
213+ => x
214+ -> o
191− => x -> o -> Aff Buffer
215+ -> Aff Buffer
192screenshot =
216screenshot =
193 affCall "screenshot" \_ -> screenshot
217 affCall "screenshot" \_ -> screenshot
194
218
195textContent
219textContent
196 :: forall x
220 :: forall x
197− . Castable x (Page |+| Frame |+| ElementHandle)
221+ . Castable x (Page |+| Frame |+| ElementHandle)
222+ => x
223+ -> Selector
198− => x -> Selector -> Aff (Null |+| String)
224+ -> Aff (Null |+| String)
199textContent =
225textContent =
200 affCall "textContent" \_ -> textContent
226 affCall "textContent" \_ -> textContent
201
227
202url
228url
203 :: forall x
229 :: forall x
204− . Castable x (Page |+| Frame |+| Download |+| Request |+| Response |+| Worker)
230+ . Castable x (Page |+| Frame |+| Download |+| Request |+| Response |+| Worker)
205 => x
231 => x
206 -> Effect URL
232 -> Effect URL
207url =
233url =
@@ -209,7 +235,7 @@ url =
209
235
210addInitScript
236addInitScript
211 :: forall x o
237 :: forall x o
212− . Castable x (Page |+| BrowserContext)
238+ . Castable x (Page |+| BrowserContext)
213 => Castable o AddInitScriptOptions
239 => Castable o AddInitScriptOptions
214 => x
240 => x
215 -> o
241 -> o
@@ -223,7 +249,7 @@ clearCookies =
223
249
224click
250click
225 :: forall x o
251 :: forall x o
226− . Castable x (Page |+| Frame)
252+ . Castable x (Page |+| Frame)
227 => Castable o ClickOptions
253 => Castable o ClickOptions
228 => x
254 => x
229 -> Selector
255 -> Selector
@@ -234,7 +260,7 @@ click =
234
260
235content
261content
236 :: forall x
262 :: forall x
237− . Castable x (Page |+| Frame)
263+ . Castable x (Page |+| Frame)
238 => x
264 => x
239 -> Aff String
265 -> Aff String
240content =
266content =
@@ -242,7 +268,7 @@ content =
242
268
243dblclick
269dblclick
244 :: forall x o
270 :: forall x o
245− . Castable x (Page |+| Frame |+| ElementHandle)
271+ . Castable x (Page |+| Frame |+| ElementHandle)
246 => Castable o ClickOptions
272 => Castable o ClickOptions
247 => x
273 => x
248 -> Selector
274 -> Selector
@@ -253,7 +279,7 @@ dblclick =
253
279
254evaluate
280evaluate
255 :: forall x
281 :: forall x
256− . Castable x (Page |+| Frame |+| Worker |+| JSHandle)
282+ . Castable x (Page |+| Frame |+| Worker |+| JSHandle)
257 => x
283 => x
258 -> String
284 -> String
259 -- ^ Function to be evaluated in browser context
285 -- ^ Function to be evaluated in browser context
@@ -263,7 +289,7 @@ evaluate =
263
289
264evaluateHandle
290evaluateHandle
265 :: forall x
291 :: forall x
266− . Castable x (Page |+| Frame |+| Worker |+| JSHandle)
292+ . Castable x (Page |+| Frame |+| Worker |+| JSHandle)
267 => x
293 => x
268 -> String
294 -> String
269 -- ^ Function to be evaluated in browser context
295 -- ^ Function to be evaluated in browser context
@@ -273,7 +299,7 @@ evaluateHandle =
273
299
274waitForNavigation
300waitForNavigation
275 :: forall x o
301 :: forall x o
276− . Castable x (Page |+| Frame)
302+ . Castable x (Page |+| Frame)
277 => Castable o WaitForNavigationOptions
303 => Castable o WaitForNavigationOptions
278 => x
304 => x
279 -> o
305 -> o
@@ -283,7 +309,7 @@ waitForNavigation =
283
309
284waitForRequest
310waitForRequest
285 :: forall url o
311 :: forall url o
286− . Castable url (URL |+| Regex |+| URL -> Boolean)
312+ . Castable url (URL |+| Regex |+| URL -> Boolean)
287 => Castable o WaitForRequestOptions
313 => Castable o WaitForRequestOptions
288 => Page
314 => Page
289 -> url
315 -> url
@@ -293,7 +319,7 @@ waitForRequest = affCall "waitForRequest" \_ -> waitForRequest
293
319
294waitForResponse
320waitForResponse
295 :: forall url o
321 :: forall url o
296− . Castable url (URL |+| Regex |+| URL -> Boolean)
322+ . Castable url (URL |+| Regex |+| URL -> Boolean)
297 => Castable o WaitForResponseOptions
323 => Castable o WaitForResponseOptions
298 => Page
324 => Page
299 -> url
325 -> url
@@ -303,7 +329,7 @@ waitForResponse = affCall "waitForResponse" \_ -> waitForResponse
303
329
304waitForSelector
330waitForSelector
305 :: forall x o
331 :: forall x o
306− . Castable x (Page |+| Frame |+| ElementHandle)
332+ . Castable x (Page |+| Frame |+| ElementHandle)
307 => Castable o WaitForSelectorOptions
333 => Castable o WaitForSelectorOptions
308 => x
334 => x
309 -> Selector
335 -> Selector
@@ -313,7 +339,7 @@ waitForSelector = affCall "waitForSelector" \_ -> waitForSelector
313
339
314waitForFunction
340waitForFunction
315 :: forall x o
341 :: forall x o
316− . Castable x (Page |+| Frame)
342+ . Castable x (Page |+| Frame)
317 => Castable o WaitForFunctionOptions
343 => Castable o WaitForFunctionOptions
318 => x
344 => x
319 -> String
345 -> String
@@ -322,11 +348,11 @@ waitForFunction
322 -> Aff JSHandle
348 -> Aff JSHandle
323waitForFunction x s o = waitForFunction' x s (unsafeToForeign undefined) o
349waitForFunction x s o = waitForFunction' x s (unsafeToForeign undefined) o
324 where
350 where
325− waitForFunction' = affCall "waitForFunction" \_ -> waitForFunction'
351+ waitForFunction' = affCall "waitForFunction" \_ -> waitForFunction'
326
352
327waitForLoadState
353waitForLoadState
328 :: forall x o
354 :: forall x o
329− . Castable x (Page |+| Frame)
355+ . Castable x (Page |+| Frame)
330 => Castable o WaitForLoadStateOptions
356 => Castable o WaitForLoadStateOptions
331 => x
357 => x
332 -> WaitUntil
358 -> WaitUntil
@@ -336,7 +362,7 @@ waitForLoadState = affCall "waitForLoadState" \_ -> waitForLoadState
336
362
337waitForTimeout
363waitForTimeout
338 :: forall x
364 :: forall x
339− . Castable x (Page |+| Frame)
365+ . Castable x (Page |+| Frame)
340 => x
366 => x
341 -> Int
367 -> Int
342 -> Aff Unit
368 -> Aff Unit
@@ -344,7 +370,7 @@ waitForTimeout = affCall "waitForTimeout" \_ -> waitForTimeout
344
370
345pdf
371pdf
346 :: forall o
372 :: forall o
347− . Castable o PdfOptions
373+ . Castable o PdfOptions
348 => Page
374 => Page
349 -> o
375 -> o
350 -> Aff Buffer
376 -> Aff Buffer
@@ -352,20 +378,22 @@ pdf = affCall "pdf" \_ -> pdf
352
378
353setInputFiles
379setInputFiles
354 :: forall x o f
380 :: forall x o f
355− . Castable x (Page |+| Frame |+| ElementHandle)
381+ . Castable x (Page |+| Frame |+| ElementHandle)
356 => Castable o SetFilesOptions
382 => Castable o SetFilesOptions
357 => Castable f
383 => Castable f
358− ( String
384+ ( String
359− |+| Array String
385+ |+| Array String
360− |+| { name :: String
386+ |+|
361− , mimeType :: String
362− , buffer :: Buffer
363− }
364− |+| Array { name :: String
387+ { name :: String
365 , mimeType :: String
388 , mimeType :: String
366 , buffer :: Buffer
389 , buffer :: Buffer
367 }
390 }
391+ |+| Array
392+ { name :: String
393+ , mimeType :: String
394+ , buffer :: Buffer
395+ }
368− )
396+ )
369 => x
397 => x
370 -> Selector
398 -> Selector
371 -> f
399 -> f
@@ -375,50 +403,61 @@ setInputFiles = affCall "setInputFiles" \_ -> setInputFiles
375
403
376setViewportSize
404setViewportSize
377 :: Page
405 :: Page
378− -> { width :: Number
406+ -> { width :: Number
379 , height :: Number
407 , height :: Number
380 }
408 }
381− -> Aff Unit
409+ -> Aff Unit
382setViewportSize = affCall "setViewportSize" \_ -> setViewportSize
410setViewportSize = affCall "setViewportSize" \_ -> setViewportSize
383
411
384title
412title
385 :: forall x
413 :: forall x
386− . Castable x (Page |+| Frame)
414+ . Castable x (Page |+| Frame)
387 => x
415 => x
388 -> Aff String
416 -> Aff String
389title = affCall "title" \_ -> title
417title = affCall "title" \_ -> title
390
418
391exposeBinding
419exposeBinding
392 :: forall x b
420 :: forall x b
393− . Castable x (Page |+| BrowserContext)
421+ . Castable x (Page |+| BrowserContext)
394 => x
422 => x
395 -> String
423 -> String
396 -- ^ Name of the function on the window object.
424 -- ^ Name of the function on the window object.
397− ->
398− (
399− { browserContext :: BrowserContext
425+ -> ( { browserContext :: BrowserContext
400− , page :: Page
426+ , page :: Page
401− , frame :: Frame
427+ , frame :: Frame
402− }
428+ }
403− -> Foreign
429+ -> Foreign
404− -> Aff b
430+ -> Aff b
405− )
431+ )
406 -> Aff Unit
432 -> Aff Unit
407exposeBinding x binding f =
433exposeBinding x binding f =
408 toAffE $ exposeBinding_ x binding (\d a -> fromAff $ f d a) { handle: false }
434 toAffE $ exposeBinding_ x binding (\d a -> fromAff $ f d a) { handle: false }
409
435
436+-- | Wait until a named browser-global function is available.
437+waitForGlobalFunction :: Page -> String -> Aff Unit
438+waitForGlobalFunction page functionName =
439+ toAffE $ waitForGlobalFunction_ page functionName
440+
441+-- | Invoke a named, curried PureScript function and run its returned Effect.
442+-- | Playwright awaits a Promise returned by the Effect.
443+evaluateEffect :: Page -> String -> Foreign -> Aff Foreign
444+evaluateEffect page functionName argument =
445+ toAffE $ evaluateEffect_ page functionName argument
446+
447+foreign import waitForGlobalFunction_ :: Page -> String -> Effect (Promise Unit)
448+
449+foreign import evaluateEffect_ :: Page -> String -> Foreign -> Effect (Promise Foreign)
450+
410foreign import exposeBinding_
451foreign import exposeBinding_
411 :: forall x a b
452 :: forall x a b
412− . x
453+ . x
413 -> String
454 -> String
414− ->
415− (
416− { browserContext :: BrowserContext
455+ -> ( { browserContext :: BrowserContext
417− , page :: Page
456+ , page :: Page
418− , frame :: Frame
457+ , frame :: Frame
419− }
458+ }
420− -> a
459+ -> a
421− -> Effect (Promise b)
460+ -> Effect (Promise b)
422− )
461+ )
423 -> { handle :: Boolean }
462 -> { handle :: Boolean }
424 -> Effect (Promise Unit)
463 -> Effect (Promise Unit)
src/Playwright/Data.js+23−22
@@ -1,31 +1,32 @@
1/* global require exports */
1/* global require exports */
2−var P = require('playwright');
2+import { chromium as pwChromium, firefox as pwFirefox, webkit as pwWebkit } from 'playwright';
3
3
4−exports.png = "png";
4+export const png = "png";
5−exports.jpg = "jpg";
5+export const jpg = "jpg";
6
6
7−exports.chromium = P.chromium;
7+export const chromium = pwChromium;
8−exports.firefox = P.firefox;
8+export const firefox = pwFirefox;
9−exports.webkit = P.webkit;
9+export const webkit = pwWebkit;
10
10
11−exports.domcontentloaded = "domcontentloaded";
11+export const domcontentloaded = "domcontentloaded";
12−exports.load = "load";
12+export const load = "load";
13−exports.networkidle = "networkidle";
13+export const networkidle = "networkidle";
14
14
15−exports.alt = "Alt";
15+export const alt = "Alt";
16−exports.control = "Control";
16+export const control = "Control";
17−exports.meta = "Meta";
17+export const meta = "Meta";
18−exports.shift = "Shift";
18+export const shift = "Shift";
19
19
20−exports.null = null;
20+const _null = null;
21+export { _null as null };
21
22
22−exports.left = "left";
23+export const left = "left";
23−exports.right = "right";
24+export const right = "right";
24−exports.middle = "middle";
25+export const middle = "middle";
25
26
26−exports.attached = "attached";
27+export const attached = "attached";
27−exports.detached = "detached";
28+export const detached = "detached";
28−exports.visible = "visible";
29+export const visible = "visible";
29−exports.hidden = "hidden";
30+export const hidden = "hidden";
30
31
31−exports.raf = "raf";
32+export const raf = "raf";
src/Playwright/Download.js+8−15
@@ -1,17 +1,10 @@
1/* global exports */
1/* global exports */
2
2
3−exports.createReadStream_ = function (Nothing) {
3+export const createReadStream_ = Nothing => Just => Download => () =>
4− return function (Just) {
5− return function (Download) {
6− return function () {
7− return Download.createReadStream().then(function (result) {
4+ Download.createReadStream().then(result => {
8− if (result === null) {
5+ if (result === null) {
9− return Nothing;
6+ return Nothing
10− } else {
7+ } else {
11− return Just(result);
8+ return Just(result)
12− }
13− });
14− };
15− };
16− };
9+ }
17−};
10+ })
src/Playwright/Event.js+5−11
@@ -1,13 +1,7 @@
1/* global exports */
1/* global exports */
2
2
3−exports.onForeign = function (obj) {
3+export const onForeign = (obj) => (eventName) => (effCallback) => () => {
4− return function (eventName) {
5− return function (effCallback) {
6− return function () {
7− obj.on(eventName, function (argument) {
4+ obj.on(eventName, (argument) => {
8− effCallback(argument)();
5+ effCallback(argument)()
9− });
6+ })
10− };
7+}
11− };
12− };
13−};
src/Playwright/Internal.js+20−45
@@ -18,55 +18,30 @@
18 *
18 *
19 * effectfulGetter('close', 0, identity);
19 * effectfulGetter('close', 0, identity);
20 */
20 */
21−function effectfulGetter (property, argsCount, effectRunnerWrapper) {
21+function effectfulGetter(property, argsCount, effectRunnerWrapper) {
22− var args = [];
22+ return object => {
23− return function (object) {
23+ function collect(args) {
24− function effectRunner () {
24+ if (args.length === argsCount) {
25− return object[property].apply(object, args);
25+ return effectRunnerWrapper(() => object[property].apply(object, args));
26− }
26+ }
27−
27+ return argument => collect([...args, argument]);
28− var affectRunner = effectRunnerWrapper(effectRunner);
29−
30− function chooseNext () {
31− return argsCount > 0 ? argsConsumer : affectRunner;
32− }
33−
34− function argsConsumer (arg) {
35− if (argsCount == 0) {
36− return affectRunner;
37− } else {
38− args.push(arg);
39− argsCount--;
40− return chooseNext();
41− }
42− }
28+ }
43−
44− return chooseNext();
29+ return collect([]);
45− };
30+ };
46}
31}
47
32
48function identity (x) {
33function identity (x) {
49− return x;
34+ return x;
50}
35}
51
36
52−exports.unsafeEffCall = function (method) {
37+export function unsafeEffCall(method) {
53− return function (argsCount) {
54− return effectfulGetter(method, argsCount, identity);
38+ return argsCount => effectfulGetter(method, argsCount, identity);
55− };
56−};
57−
58−exports.unsafeAffCall = function (toAffE) {
59− return function (method) {
60− return function (argsCount) {
61− return effectfulGetter(method, argsCount, toAffE);
62− };
39+}
63− };
64−};
65
40
66−exports.effProp = function (prop) {
41+export function unsafeAffCall(toAffE) {
67− return function (object) {
42+ return method => argsCount => effectfulGetter(method, argsCount, toAffE);
68− return function () {
69− return object[prop];
70− };
71− };
72}
43}
44+
45+export function effProp(prop) {
46+ return object => () => object[prop];
47+}
src/Playwright/JSHandle.js+9−15
@@ -1,17 +1,11 @@
1/* global exports */
1/* global exports */
2
2
3−exports.getProperties_ = function (insert) {
3+export function getProperties_(insert) {
4− return function (emptyMap) {
5− return function (jsHandle) {
6− return function () {
7− return jsHandle.getProperties().then(function (props) {
4+ return emptyMap => jsHandle => () => jsHandle.getProperties().then(props => {
8− var acc = emptyMap;
5+ let acc = emptyMap;
9− props.entries().forEach(function (pair) {
6+ props.entries().forEach(pair => {
10− acc = insert(pair[0])(pair[1])(acc);
7+ acc = insert(pair[0])(pair[1])(acc);
11− });
8+ });
12− return acc;
9+ return acc;
13− });
10+ });
14− };
11+}
15− };
16− };
17−};
src/Playwright/Locator.jsnew file+9
@@ -0,0 +1,9 @@
1+export const setNativeProperty_ = target => constructorName => propertyName => value => () =>
2+ target.evaluate(
3+ (element, { constructorName, propertyName, value }) => {
4+ const prototype = globalThis[constructorName].prototype;
5+ const setter = Object.getOwnPropertyDescriptor(prototype, propertyName).set;
6+ setter.call(element, value);
7+ },
8+ { constructorName, propertyName, value }
9+ );
src/Playwright/Locator.pursnew file+49
@@ -0,0 +1,49 @@
1+module Playwright.Locator
2+ ( Locator
3+ , locator
4+ , getByRole
5+ , click
6+ , setChecked
7+ , selectOption
8+ , dispatchEvent
9+ , setNativeProperty
10+ ) where
11+
12+import Prelude
13+
14+import Control.Promise (Promise, toAffE)
15+import Effect (Effect)
16+import Effect.Aff (Aff)
17+import Foreign (Foreign)
18+import Playwright.Data (Page, Selector)
19+import Playwright.Internal (affCall, effCall)
20+import Playwright.Options (ClickOptions, RoleOptions, SelectOptionOptions, SetCheckedOptions)
21+import Untagged.Castable (class Castable)
22+
23+locator :: Page -> Selector -> Effect Locator
24+locator = effCall "locator" \_ -> locator
25+
26+getByRole :: forall o. Castable o RoleOptions => Page -> String -> o -> Effect Locator
27+getByRole = effCall "getByRole" \_ -> getByRole
28+
29+click :: forall o. Castable o ClickOptions => Locator -> o -> Aff Unit
30+click = affCall "click" \_ -> click
31+
32+setChecked :: forall o. Castable o SetCheckedOptions => Locator -> Boolean -> o -> Aff Unit
33+setChecked = affCall "setChecked" \_ -> setChecked
34+
35+selectOption :: forall o. Castable o SelectOptionOptions => Locator -> String -> o -> Aff (Array String)
36+selectOption = affCall "selectOption" \_ -> selectOption
37+
38+dispatchEvent :: forall r. Locator -> String -> { | r } -> Aff Unit
39+dispatchEvent = affCall "dispatchEvent" \_ -> dispatchEvent
40+
41+-- | Invoke the setter from a named DOM constructor's prototype, bypassing an
42+-- | element's own property descriptor. Event dispatch remains the caller's job.
43+setNativeProperty :: Locator -> String -> String -> Foreign -> Aff Unit
44+setNativeProperty target constructorName propertyName value =
45+ toAffE $ setNativeProperty_ target constructorName propertyName value
46+
47+foreign import data Locator :: Type
48+
49+foreign import setNativeProperty_ :: Locator -> String -> String -> Foreign -> Effect (Promise Unit)
src/Playwright/Options.purs+91−65
@@ -3,6 +3,7 @@ module Playwright.Options where
3import Playwright.Data
3import Playwright.Data
4
4
5import Data.String.Regex (Regex)
5import Data.String.Regex (Regex)
6+import Data.Time.Duration (Milliseconds(..))
6import Foreign (Foreign)
7import Foreign (Foreign)
7import Foreign.Object (Object)
8import Foreign.Object (Object)
8import Literals.Null (Null)
9import Literals.Null (Null)
@@ -11,68 +12,69 @@ import Untagged.Union (UndefinedOr, type (|+|))
11type Opt a = UndefinedOr a
12type Opt a = UndefinedOr a
12
13
13type LaunchOptions =
14type LaunchOptions =
14− { headless :: Opt Boolean
15+ { headless :: Opt Boolean
15− , executablePath :: Opt String
16+ , executablePath :: Opt String
16− , args :: Opt String
17+ , args :: Opt (Array String)
17 , ignoreDefaultArgs :: Opt (Array String)
18 , ignoreDefaultArgs :: Opt (Array String)
18− , proxy :: Opt ProxyOptions
19+ , proxy :: Opt ProxyOptions
19− , downloadsPath :: Opt String
20+ , downloadsPath :: Opt String
20− , chromiumSandbox :: Opt Boolean
21+ , chromiumSandbox :: Opt Boolean
21− , firefoxUserPrefs :: Opt Foreign
22+ , firefoxUserPrefs :: Opt Foreign
22− , handleSIGINT :: Opt Boolean
23+ , handleSIGINT :: Opt Boolean
23− , handleSIGTERM :: Opt Boolean
24+ , handleSIGTERM :: Opt Boolean
24− , handleSIGHUP :: Opt Boolean
25+ , handleSIGHUP :: Opt Boolean
25− , timeout :: Opt Number
26+ , timeout :: Opt Milliseconds
26− , env :: Opt (Object String)
27+ , env :: Opt (Object String)
27− , devtools :: Opt Boolean
28+ , devtools :: Opt Boolean
28− , slowMo :: Opt Number
29+ , slowMo :: Opt Number
29 }
30 }
30
31
31type ProxyOptions =
32type ProxyOptions =
32− { server :: Opt String
33+ { server :: Opt String
33− , bypass :: Opt String
34+ , bypass :: Opt String
34 , username :: Opt String
35 , username :: Opt String
35 , password :: Opt String
36 , password :: Opt String
36 }
37 }
37
38
38type ScreenshotOptions =
39type ScreenshotOptions =
39− { path :: Opt String
40+ { path :: Opt String
40− , "type" :: Opt ScreenshotType
41+ , "type" :: Opt ScreenshotType
41− , quality :: Opt Number
42+ , quality :: Opt Number
42 , omitBackground :: Opt Boolean
43 , omitBackground :: Opt Boolean
44+ , fullPage :: Opt Boolean
43− , timeout :: Opt Number
45+ , timeout :: Opt Milliseconds
44 }
46 }
45
47
46type GotoOptions =
48type GotoOptions =
47− { timeout :: Opt Int
49+ { timeout :: Opt Milliseconds
48 , waitUntil :: Opt WaitUntil
50 , waitUntil :: Opt WaitUntil
49− , referer :: Opt String
51+ , referer :: Opt String
50 }
52 }
51
53
52type NewpageOptions =
54type NewpageOptions =
53− { acceptDownloads :: Opt Boolean
55+ { acceptDownloads :: Opt Boolean
54 , ignoreHTTPSErrors :: Opt Boolean
56 , ignoreHTTPSErrors :: Opt Boolean
55− , bypassCSP :: Opt Boolean
57+ , bypassCSP :: Opt Boolean
56− , viewport :: Opt (Null |+| { width :: Int, height :: Int })
58+ , viewport :: Opt (Null |+| { width :: Int, height :: Int })
57 }
59 }
58
60
59type GoOptions =
61type GoOptions =
60− { timeout :: Opt Int
62+ { timeout :: Opt Milliseconds
61 , waitUntil :: Opt WaitUntil
63 , waitUntil :: Opt WaitUntil
62 }
64 }
63
65
64type HoverOptions =
66type HoverOptions =
65 { position :: Opt Position
67 { position :: Opt Position
66 , modifier :: Opt (Array Modifier)
68 , modifier :: Opt (Array Modifier)
67− , force :: Opt Boolean
69+ , force :: Opt Boolean
68 }
70 }
69
71
70type InnerHTMLOptions =
72type InnerHTMLOptions =
71− { timeout :: Opt Number
73+ { timeout :: Opt Milliseconds
72 }
74 }
73
75
74type InnerTextOptions =
76type InnerTextOptions =
75− { timeout :: Opt Number
77+ { timeout :: Opt Milliseconds
76 }
78 }
77
79
78type KeyboardPressOptions =
80type KeyboardPressOptions =
@@ -85,29 +87,29 @@ type AddInitScriptOptions =
85type Position = { x :: Int, y :: Int }
87type Position = { x :: Int, y :: Int }
86
88
87type ClickOptions =
89type ClickOptions =
88− { button :: Opt MouseButton
90+ { button :: Opt MouseButton
89− , clickCount :: Opt Int
91+ , clickCount :: Opt Int
90− , delay :: Opt Int
92+ , delay :: Opt Int
91− , position :: Opt Position
93+ , position :: Opt Position
92− , modifiers :: Opt (Array Modifier)
94+ , modifiers :: Opt (Array Modifier)
93− , force :: Opt Boolean
95+ , force :: Opt Boolean
94 , noWaitAfter :: Opt Boolean
96 , noWaitAfter :: Opt Boolean
95− , timeout :: Opt Int
97+ , timeout :: Opt Milliseconds
96 }
98 }
97
99
98type MouseClickOptions =
100type MouseClickOptions =
99− { button :: Opt MouseButton
101+ { button :: Opt MouseButton
100 , clickCount :: Opt Int
102 , clickCount :: Opt Int
101− , delay :: Opt Int
103+ , delay :: Opt Int
102 }
104 }
103
105
104type MouseDblClickOptions =
106type MouseDblClickOptions =
105− { button :: Opt MouseButton
107+ { button :: Opt MouseButton
106− , delay :: Opt Int
108+ , delay :: Opt Int
107 }
109 }
108
110
109type MouseUpDownOptions =
111type MouseUpDownOptions =
110− { button :: Opt MouseButton
112+ { button :: Opt MouseButton
111 , clickCount :: Opt Int
113 , clickCount :: Opt Int
112 }
114 }
113
115
@@ -116,57 +118,81 @@ type MouseMoveOptions =
116 }
118 }
117
119
118type WaitForNavigationOptions =
120type WaitForNavigationOptions =
119− { timeout :: Opt Int
121+ { timeout :: Opt Milliseconds
120− , url :: Opt (String |+| Regex |+| URL -> Boolean)
122+ , url :: Opt (String |+| Regex |+| URL -> Boolean)
121 , waitUntil :: Opt WaitUntil
123 , waitUntil :: Opt WaitUntil
122 }
124 }
123
125
124type WaitForRequestOptions =
126type WaitForRequestOptions =
125− { timeout :: Opt Int
127+ { timeout :: Opt Milliseconds
126 }
128 }
127
129
128type WaitForResponseOptions =
130type WaitForResponseOptions =
129− { timeout :: Opt Int
131+ { timeout :: Opt Milliseconds
130 }
132 }
131
133
132type WaitForSelectorOptions =
134type WaitForSelectorOptions =
133− { state :: Opt ElementState
135+ { state :: Opt ElementState
134− , timeout :: Opt Int
136+ , timeout :: Opt Milliseconds
135 }
137 }
136
138
137type WaitForFunctionOptions =
139type WaitForFunctionOptions =
138 { polling :: Opt (Int |+| Raf)
140 { polling :: Opt (Int |+| Raf)
139− , timeout :: Opt Int
141+ , timeout :: Opt Milliseconds
140 }
142 }
141
143
142type WaitForLoadStateOptions =
144type WaitForLoadStateOptions =
143− { timeout :: Opt Int
145+ { timeout :: Opt Milliseconds
144 }
146 }
145
147
146type Margin =
148type Margin =
147− { top :: Opt (String |+| Number)
149+ { top :: Opt (String |+| Number)
148− , right :: Opt (String |+| Number)
150+ , right :: Opt (String |+| Number)
149 , bottom :: Opt (String |+| Number)
151 , bottom :: Opt (String |+| Number)
150− , left :: Opt (String |+| Number)
152+ , left :: Opt (String |+| Number)
151 }
153 }
152
154
153type PdfOptions =
155type PdfOptions =
154− { path :: String
156+ { path :: String
155− , scale :: Opt Number
157+ , scale :: Opt Number
156 , displayHeaderFooter :: Opt Boolean
158 , displayHeaderFooter :: Opt Boolean
157− , headerTemplate :: Opt String
159+ , headerTemplate :: Opt String
158− , footerTemplate :: Opt String
160+ , footerTemplate :: Opt String
159− , printBackground :: Opt Boolean
161+ , printBackground :: Opt Boolean
160− , landscape :: Opt Boolean
162+ , landscape :: Opt Boolean
161− , pageRanges :: Opt String
163+ , pageRanges :: Opt String
162− , format :: Opt String
164+ , format :: Opt String
163− , width :: Opt (String |+| Number)
165+ , width :: Opt (String |+| Number)
164− , height :: Opt (String |+| Number)
166+ , height :: Opt (String |+| Number)
165− , margin :: Opt Margin
167+ , margin :: Opt Margin
166− , preferCSSPageSize :: Opt Boolean
168+ , preferCSSPageSize :: Opt Boolean
167 }
169 }
168
170
169type SetFilesOptions =
171type SetFilesOptions =
170 { noWaitAfter :: Opt Boolean
172 { noWaitAfter :: Opt Boolean
173+ , timeout :: Opt Milliseconds
174+ }
175+
176+type RoleOptions =
177+ { name :: Opt (String |+| Regex)
178+ , exact :: Opt Boolean
179+ , checked :: Opt Boolean
180+ , disabled :: Opt Boolean
181+ , expanded :: Opt Boolean
182+ , includeHidden :: Opt Boolean
171− , timeout :: Opt Int
183+ , level :: Opt Int
184+ , pressed :: Opt Boolean
185+ , selected :: Opt Boolean
186+ }
187+
188+type SetCheckedOptions =
189+ { force :: Opt Boolean
190+ , position :: Opt Position
191+ , timeout :: Opt Milliseconds
192+ , trial :: Opt Boolean
193+ }
194+
195+type SelectOptionOptions =
196+ { force :: Opt Boolean
197+ , timeout :: Opt Milliseconds
172 }
198 }
src/Playwright/Response.js+8−15
@@ -1,17 +1,10 @@
1/* global exports */
1/* global exports */
2
2
3−exports.finished_ = function (Nothing) {
3+export const finished_ = Nothing => Just => Response => () =>
4− return function (Just) {
5− return function (Response) {
6− return function () {
7− return Response.finished().then(function (result) {
4+ Response.finished().then((result) => {
8− if (result === null) {
5+ if (result === null) {
9− return Nothing;
6+ return Nothing
10− } else {
7+ } else {
11− return Just(result);
8+ return Just(result)
12− }
13− });
14− };
15− };
16− };
9+ }
17−};
10+ })
src/Playwright/Test.jsnew file+7
@@ -0,0 +1,7 @@
1+import { test } from "@playwright/test";
2+
3+export const test_ = name => run => () => {
4+ test(name, async ({ page }) => {
5+ await run(page)();
6+ });
7+};
src/Playwright/Test.pursnew file+15
@@ -0,0 +1,15 @@
1+module Playwright.Test (test) where
2+
3+import Prelude
4+
5+import Control.Promise (Promise, fromAff)
6+import Effect (Effect)
7+import Effect.Aff (Aff)
8+import Playwright.Data (Page)
9+
10+-- | Register a Playwright test using its isolated page fixture. The runner
11+-- | awaits the Aff and reports rejected computations as test failures.
12+test :: String -> (Page -> Aff Unit) -> Effect Unit
13+test name run = test_ name (fromAff <<< run)
14+
15+foreign import test_ :: String -> (Page -> Effect (Promise Unit)) -> Effect Unit
test/Main.purs+120−175
@@ -1,183 +1,128 @@
1module Test.Main where
1module Test.Main where
2
2
3+import Prelude
4+
5+import Control.Monad.Error.Class (throwError)
3import Control.Monad.Except (runExcept)
6import Control.Monad.Except (runExcept)
4−import Data.Either (isLeft)
7+import Data.Either (Either(..), isLeft)
5−import Data.Maybe (Maybe(..))
6import Effect (Effect)
8import Effect (Effect)
7−import Effect.Aff (launchAff_, try)
9+import Effect.Aff (Aff, bracket, try)
8import Effect.Class (liftEffect)
10import Effect.Class (liftEffect)
9−import Effect.Console as Console
11+import Effect.Exception (error)
10−import Effect.Ref as Ref
12+import Foreign (readBoolean, readInt, unsafeToForeign)
11−import Foreign as Foreign
12−import Node.Encoding as Encoding
13−import Node.FS.Aff as FS
14−import Node.Stream as Stream
15−import Playwright
16−import Playwright.ConsoleMessage as ConsoleMessage
13+import Playwright as Playwright
17−import Playwright.Dialog as Dialog
18−import Playwright.Download as Download
14+import Playwright.Locator as Locator
19−import Playwright.Event (on)
20−import Playwright.Event as Event
15+import Playwright.Test (test)
21−import Prelude
22−import Test.Unit (suite, test)
23−import Test.Unit.Assert as Assert
24−import Test.Unit.Main (runTest)
25−import TestUtils (cwd, isNull, testClickEvent, withBrowser, withBrowserPage)
26−import Untagged.Union (fromOneOf)
27
16
28−static :: String -> URL
17+assert :: String -> Boolean -> Aff Unit
29−static file =
18+assert message condition = unless condition $ throwError $ error message
30− URL $ "file://" <> cwd <> "/test/static/" <> file
19+
20+assertBrowser :: Playwright.Page -> String -> Aff Unit
21+assertBrowser page expression = do
22+ result <- Playwright.evaluate page expression
23+ assert expression $ runExcept (readBoolean result) == Right true
31
24
32main :: Effect Unit
25main :: Effect Unit
33−main = runTest do
26+main = do
34− let
27+ test "method applications isolate arguments across pages and reusable prefixes" \first ->
35− hello = static "hello.html"
28+ bracket (Playwright.launch Playwright.chromium { args: [] :: Array String }) Playwright.close \browser -> do
36− index = static "index.html"
29+ second <- Playwright.newPage browser {}
37− suite "browser" do
30+ let
38− test "launch, close" do
31+ firstURL = Playwright.URL "data:text/html,<title>First</title><button onclick=\"document.title='Clicked'\">Apply</button>"
39− browser <- launch chromium {}
32+ secondURL = Playwright.URL "data:text/html,<title>Second</title><button onclick=\"document.title='Changed'\">Apply</button>"
40− close browser
33+ navigateFirst = Playwright.goto first
41− test "close/isClosed" do
34+ firstDestination = navigateFirst firstURL
42− withBrowserPage hello
35+ firstNavigation = firstDestination {}
43− \page -> do
36+ navigateSecond = Playwright.goto second
44− Assert.assertFalse "new page is closed" =<<
37+ void firstNavigation
45− liftEffect (isClosed page)
38+ void $ navigateSecond secondURL {}
46− close page
39+ assert "first page receiver" =<< (eq "First" <$> Playwright.title first)
47− Assert.assert "page is not closed" =<< liftEffect (isClosed page)
40+ assert "second page receiver" =<< (eq "Second" <$> Playwright.title second)
48− test "version" do
41+ void $ navigateFirst secondURL {}
49− withBrowser
42+ assert "reused receiver prefix takes new arguments" =<< (eq "Second" <$> Playwright.title first)
50− \browser -> do
43+ void $ firstDestination {}
51− v <- liftEffect $ version browser
44+ assert "reused destination prefix retains its arguments" =<< (eq "First" <$> Playwright.title first)
52− Assert.assert "version is empty" (v /= "")
45+ let
53− test "url" do
46+ findFirst = Locator.locator first
54− withBrowserPage hello
47+ findSecond = Locator.locator second
55− \page -> do
48+ findButton = Locator.getByRole first "button"
56− Assert.equal hello =<< liftEffect (url page)
49+ firstButton <- liftEffect $ findFirst (Playwright.Selector "button")
57− test "screenshot" do
50+ secondButton <- liftEffect $ findSecond (Playwright.Selector "button")
58− withBrowserPage hello
51+ firstAgain <- liftEffect $ findFirst (Playwright.Selector "text=Apply")
59− \page -> do
52+ byRole <- liftEffect $ findButton { name: "Apply", exact: true }
60− void $ screenshot page { path: "screenshot.png" }
53+ byRoleAgain <- liftEffect $ findButton { name: "Apply", exact: false }
61− FS.unlink "screenshot.png"
54+ Locator.click firstButton {}
62− test "textContent" do
55+ Locator.click secondButton {}
63− withBrowserPage hello
56+ Locator.click firstAgain {}
64− \page -> do
57+ Locator.click byRole {}
65− text <- textContent page (Selector "body")
58+ Locator.click byRoleAgain {}
66− Assert.equal (Just "hello\n") (fromOneOf text)
59+ assert "locator keeps first receiver" =<< (eq "Clicked" <$> Playwright.title first)
67− test "mainFrame" do
60+ assert "locator keeps second receiver" =<< (eq "Changed" <$> Playwright.title second)
68− withBrowserPage hello
61+ void firstNavigation
69− \page -> do
62+ assert "repeated completed Aff retains its arguments" =<< (eq "First" <$> Playwright.title first)
70− frame <- liftEffect $ mainFrame page
63+ assert "Effect method keeps first receiver" =<< (eq firstURL <$> liftEffect (Playwright.url first))
71− frameName <- liftEffect $ name frame
64+ assert "Effect method keeps second receiver" =<< (eq secondURL <$> liftEffect (Playwright.url second))
72− Assert.equal "" frameName
65+
73− test "click" do
66+ test "native properties and events remain separately ordered locator actions" \page -> do
74− withBrowserPage index $ testClickEvent "click" click
67+ void $ Playwright.goto page (Playwright.URL "data:text/html,<input id='text'><input id='check' type='checkbox'><select><option value='a'>A</option><option value='b'>B</option></select>") {}
75− test "dblclick" do
68+ void $ Playwright.evaluate page
76− withBrowserPage index $ testClickEvent "dblclick" dblclick
69+ """
77− test "waitForSelector" do
70+ (() => {
78− withBrowserPage hello
71+ const input = document.querySelector('#text');
79− \page -> do
72+ globalThis.events = [];
80− void $ waitForSelector page (Selector "body") {}
73+ Object.defineProperty(input, 'value', {
81− res <- try $ waitForSelector page (Selector "nonexistent") { timeout: 100 }
74+ get() { return Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').get.call(this); },
82− Assert.assert "waitForSelector fails when no element" $
75+ set() { throw new Error('own setter must not run'); }
83− isLeft res
76+ });
84− test "waitForFunction" do
77+ document.body.addEventListener('input', event => globalThis.events.push(event.target.value));
85− withBrowserPage hello
78+ })()
86− \page -> do
79+ """
87− void $ evaluate page
80+ input <- liftEffect $ Locator.locator page (Playwright.Selector "#text")
88− "setTimeout(() => document.body.textContent += 'uniqstring', 1)"
81+ checkbox <- liftEffect $ Locator.getByRole page "checkbox" {}
89− void $ waitForFunction
82+ select <- liftEffect $ Locator.getByRole page "combobox" {}
90− page
83+ let
91− "document.body.textContent.includes('uniqstring')"
84+ setValue = Locator.setNativeProperty input "HTMLInputElement" "value"
92− { timeout: 5000, polling: 100 }
85+ setChecked = Locator.setChecked checkbox
93− suite "FFI" do
86+ selectValue = Locator.selectOption select
94− test "exposeBinding" do
87+ setValue $ unsafeToForeign "first"
95− withBrowserPage hello \page -> do
88+ assertBrowser page "document.querySelector('#text').value === 'first' && events.length === 0"
96− ref <- liftEffect $ Ref.new Nothing
89+ Locator.dispatchEvent input "input" { bubbles: true }
97− frgnRef <- liftEffect $ Ref.new Nothing
90+ setValue $ unsafeToForeign "second"
98− exposeBinding page "hi_ffi"
91+ assertBrowser page "document.querySelector('#text').value === 'second' && JSON.stringify(events) === '[\"first\"]'"
99− (
92+ Locator.dispatchEvent input "input" { bubbles: true }
100− \({frame}) frgn -> do
93+ assertBrowser page "JSON.stringify(events) === '[\"first\",\"second\"]'"
101− url <- liftEffect $ url frame
94+ setChecked true {}
102− liftEffect do
95+ assertBrowser page "document.querySelector('#check').checked"
103− Console.log "hi"
96+ setChecked false {}
104− Ref.write (Just frgn) frgnRef
97+ assertBrowser page "!document.querySelector('#check').checked"
105− Ref.write (Just url) ref
98+ selected <- selectValue "b" {}
106− )
99+ assert "selected option result" $ selected == [ "b" ]
107− void $ evaluate page "hi_ffi(12);"
100+ assertBrowser page "document.querySelector('select').value === 'b'"
108− waitForTimeout page 100
101+ selectedAgain <- selectValue "a" {}
109− mbUrl <- liftEffect $ Ref.read ref
102+ assert "reused option selection" $ selectedAgain == [ "a" ]
110− mbForeign <- liftEffect $ Ref.read frgnRef
103+ assertBrowser page "document.querySelector('select').value === 'a'"
111− Assert.equal (Just hello) mbUrl
104+
112− Assert.assert "exposeBinding is not able to accept an argument" $
105+ test "named effects wait for readiness and await completion or rejection" \page -> do
113− pure (pure 12) == (runExcept <<< Foreign.readInt <$> mbForeign)
106+ void $ Playwright.evaluate page
114− suite "events" do
107+ """
115− test "console" do
108+ (() => {
116− withBrowserPage hello
109+ globalThis.runEffect = false;
117− \page -> do
110+ setTimeout(() => {
118− messageRef <- liftEffect $ Ref.new Nothing
111+ globalThis.runEffect = value => () => new Promise(resolve => {
119− liftEffect $ on Event.console page $ \cslMessage -> do
112+ setTimeout(() => { document.title = value; resolve(value.length); }, 0);
120− realMessage <- ConsoleMessage.text cslMessage
113+ });
121− Ref.write (Just realMessage) messageRef
114+ globalThis.failEffect = value => () => Promise.reject(new Error(value));
122− void $ evaluate page
115+ }, 0);
123− """
116+ })()
124− console.log('hi');
117+ """
125− """
118+ Playwright.waitForGlobalFunction page "runEffect"
126− realMessage <- liftEffect $ Ref.read messageRef
119+ let runEffect = Playwright.evaluateEffect page "runEffect"
127− Assert.equal (Just "hi") realMessage
120+ result <- runEffect $ unsafeToForeign "Completed"
128− test "console: ConsoleMessageType" do
121+ assert "Effect promise result is returned" $ runExcept (readInt result) == Right 9
129− withBrowserPage hello
122+ assert "Effect promise is awaited" =<< (eq "Completed" <$> Playwright.title page)
130− \page -> do
123+ void $ runEffect $ unsafeToForeign "Repeated"
131− typeRef <- liftEffect $ Ref.new Nothing
124+ assert "named Effect prefix is reusable" =<< (eq "Repeated" <$> Playwright.title page)
132− liftEffect $ on Event.console page $ \cslMessage -> do
125+ failure <- try $ Playwright.evaluateEffect page "failEffect" $ unsafeToForeign "expected rejection"
133− realType <- ConsoleMessage.type' cslMessage
126+ assert "browser rejection reaches Aff" $ isLeft failure
134− Ref.write (Just realType) typeRef
127+ missing <- try $ Playwright.evaluateEffect page "missingEffect" $ unsafeToForeign {}
135− void $ evaluate page
128+ assert "missing global reaches Aff" $ isLeft missing
136− """
137− console.debug('hi');
138− """
139− realType <- liftEffect $ Ref.read typeRef
140− Assert.equal (Just ConsoleMessage.Debug) realType
141− test "download" do
142− withBrowserPage hello
143− \page -> do
144− downloadRef <- liftEffect $ Ref.new Nothing
145− liftEffect $ on Event.download page $ \download -> launchAff_ do
146− fname <- liftEffect $ Download.suggestedFilename download
147− Assert.equal "hello.txt" fname
148− mbStream <- Download.createReadStream download
149− failureStatus <- Download.failure download
150− Assert.equal true (isNull failureStatus)
151− case mbStream of
152− Nothing -> Assert.assert "Unable to get stream" false
153− Just stream -> do
154− liftEffect $ Stream.onDataString stream Encoding.UTF8 $ \string -> do
155− Ref.write (Just string) downloadRef
156− void $ evaluate page
157− """
158− function download(filename, text) {
159− var element = document.createElement('a');
160− element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
161− element.setAttribute('download', filename);
162− document.body.appendChild(element);
163− element.click();
164− document.body.removeChild(element);
165− }
166− download("hello.txt","hiiii");
167− """
168− waitForTimeout page 100
169− downloadContent <- liftEffect $ Ref.read downloadRef
170− Assert.equal (Just "hiiii") downloadContent
171− test "dialog" do
172− withBrowserPage hello
173− \page -> do
174− liftEffect $ on Event.dialog page $ \dialog -> launchAff_ do
175− defaultValue <- liftEffect $ Dialog.defaultValue dialog
176− Assert.equal "hello" defaultValue
177− message <- liftEffect $ Dialog.message dialog
178− Assert.equal "hi" message
179− Dialog.dismiss dialog
180− void $ evaluate page
181− """
182− prompt("hi", "hello");
183− """
test/TestUtils.jsdeleted−5
@@ -1,5 +0,0 @@
1−/* global exports __dirname */
2−
3−exports.cwd = process.cwd();
4−
5−exports.isNull = function (sth) { return sth === null; };
test/TestUtils.pursdeleted−53
@@ -1,53 +0,0 @@
1−module TestUtils
2− ( assertForeignTrue
3− , withBrowser
4− , withBrowserPage
5− , testClickEvent
6− , cwd
7− , isNull
8− )
9−where
10−
11−import Test.Unit.Assert as Assert
12−import Foreign (Foreign, readBoolean)
13−import Control.Monad.Except (runExcept)
14−import Data.Either (Either(..))
15−import Effect.Aff (Aff)
16−import Prelude (Unit, bind, discard, void, ($), (<>), (==))
17−import Playwright
18−import Control.Monad.Error.Class (withResource)
19−
20−assertForeignTrue :: Foreign -> Aff Unit
21−assertForeignTrue value = do
22− let
23− eiBool = runExcept $ readBoolean value
24− Assert.assert "Foreign value is boolean true" (eiBool == Right true)
25−
26−withBrowser :: forall a. (Browser -> Aff a) -> Aff a
27−withBrowser = withResource acquire release
28− where
29− acquire = launch chromium {}
30− release = close
31−
32−withBrowserPage :: forall a. URL -> (Page -> Aff a) -> Aff a
33−withBrowserPage url action = do
34− withBrowser
35− \browser -> do
36− let
37− acquire = newPage browser { acceptDownloads: true }
38− release = close
39− withResource acquire release
40− \page -> do
41− void $ goto page url {}
42− action page
43−
44−testClickEvent :: String -> (Page -> Selector -> {} -> Aff Unit) -> Page -> Aff Unit
45−testClickEvent event action page = do
46− void $ evaluate page ("setEventTester('" <> event <> "');")
47− action page (Selector $ "#event-" <> event) {}
48− result <- evaluate page $ "checkEventHappened('" <> event <> "');"
49− assertForeignTrue result
50−
51−foreign import isNull :: forall a. a -> Boolean
52−
53−foreign import cwd :: String
test/browser.spec.jsnew file+3
@@ -0,0 +1,3 @@
1+import { main } from "../output/Test.Main/index.js";
2+
3+main();