A tool for people curious about the React Server Components protocol rscexplorer.dev/
rsc react

maybe fix tests pretty please?

+702 -45
+2 -3
.tangled/workflows/ci.yaml
··· 6 6 dependencies: 7 7 nixpkgs: 8 8 - nodejs 9 + - chromium 9 10 10 11 steps: 11 12 - name: install 12 13 command: npm install 13 - - name: install playwright 14 - command: npx playwright install --with-deps chromium 15 14 - name: test 16 - command: npm test 15 + command: CHROMIUM_PATH=$(which chromium) npm test 17 16 - name: build versions 18 17 command: npm run build:versions
+672 -6
package-lock.json
··· 37 37 "playwright": "^1.57.0", 38 38 "prettier": "^3.7.4", 39 39 "rolldown": "^1.0.0-beta.54", 40 + "start-server-and-test": "^2.1.3", 40 41 "typescript-eslint": "^8.50.0", 41 42 "vite": "8.0.0-beta.2", 42 43 "vitest": "^4.0.15", ··· 793 794 }, 794 795 "engines": { 795 796 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 797 + } 798 + }, 799 + "node_modules/@hapi/address": { 800 + "version": "5.1.1", 801 + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", 802 + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", 803 + "dev": true, 804 + "license": "BSD-3-Clause", 805 + "dependencies": { 806 + "@hapi/hoek": "^11.0.2" 807 + }, 808 + "engines": { 809 + "node": ">=14.0.0" 810 + } 811 + }, 812 + "node_modules/@hapi/formula": { 813 + "version": "3.0.2", 814 + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", 815 + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", 816 + "dev": true, 817 + "license": "BSD-3-Clause" 818 + }, 819 + "node_modules/@hapi/hoek": { 820 + "version": "11.0.7", 821 + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", 822 + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", 823 + "dev": true, 824 + "license": "BSD-3-Clause" 825 + }, 826 + "node_modules/@hapi/pinpoint": { 827 + "version": "2.0.1", 828 + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", 829 + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", 830 + "dev": true, 831 + "license": "BSD-3-Clause" 832 + }, 833 + "node_modules/@hapi/tlds": { 834 + "version": "1.1.4", 835 + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", 836 + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", 837 + "dev": true, 838 + "license": "BSD-3-Clause", 839 + "engines": { 840 + "node": ">=14.0.0" 841 + } 842 + }, 843 + "node_modules/@hapi/topo": { 844 + "version": "6.0.2", 845 + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", 846 + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", 847 + "dev": true, 848 + "license": "BSD-3-Clause", 849 + "dependencies": { 850 + "@hapi/hoek": "^11.0.2" 796 851 } 797 852 }, 798 853 "node_modules/@humanfs/core": { ··· 2580 2635 "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2581 2636 } 2582 2637 }, 2638 + "node_modules/arg": { 2639 + "version": "5.0.2", 2640 + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 2641 + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 2642 + "dev": true, 2643 + "license": "MIT" 2644 + }, 2583 2645 "node_modules/argparse": { 2584 2646 "version": "2.0.1", 2585 2647 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", ··· 2597 2659 "node": ">=12" 2598 2660 } 2599 2661 }, 2662 + "node_modules/asynckit": { 2663 + "version": "0.4.0", 2664 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 2665 + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 2666 + "dev": true, 2667 + "license": "MIT" 2668 + }, 2669 + "node_modules/axios": { 2670 + "version": "1.13.2", 2671 + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", 2672 + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", 2673 + "dev": true, 2674 + "license": "MIT", 2675 + "dependencies": { 2676 + "follow-redirects": "^1.15.6", 2677 + "form-data": "^4.0.4", 2678 + "proxy-from-env": "^1.1.0" 2679 + } 2680 + }, 2600 2681 "node_modules/balanced-match": { 2601 2682 "version": "1.0.2", 2602 2683 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 2620 2701 "dev": true, 2621 2702 "license": "MIT" 2622 2703 }, 2704 + "node_modules/bluebird": { 2705 + "version": "3.7.2", 2706 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 2707 + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 2708 + "dev": true, 2709 + "license": "MIT" 2710 + }, 2623 2711 "node_modules/brace-expansion": { 2624 2712 "version": "1.1.12", 2625 2713 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", ··· 2684 2772 "license": "MIT", 2685 2773 "peer": true 2686 2774 }, 2775 + "node_modules/call-bind-apply-helpers": { 2776 + "version": "1.0.2", 2777 + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 2778 + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 2779 + "dev": true, 2780 + "license": "MIT", 2781 + "dependencies": { 2782 + "es-errors": "^1.3.0", 2783 + "function-bind": "^1.1.2" 2784 + }, 2785 + "engines": { 2786 + "node": ">= 0.4" 2787 + } 2788 + }, 2687 2789 "node_modules/callsites": { 2688 2790 "version": "3.1.0", 2689 2791 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", ··· 2752 2854 }, 2753 2855 "engines": { 2754 2856 "node": ">=8" 2857 + } 2858 + }, 2859 + "node_modules/check-more-types": { 2860 + "version": "2.24.0", 2861 + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", 2862 + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", 2863 + "dev": true, 2864 + "license": "MIT", 2865 + "engines": { 2866 + "node": ">= 0.8.0" 2755 2867 } 2756 2868 }, 2757 2869 "node_modules/chrome-trace-event": { ··· 2864 2976 "dev": true, 2865 2977 "license": "MIT" 2866 2978 }, 2979 + "node_modules/combined-stream": { 2980 + "version": "1.0.8", 2981 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 2982 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 2983 + "dev": true, 2984 + "license": "MIT", 2985 + "dependencies": { 2986 + "delayed-stream": "~1.0.0" 2987 + }, 2988 + "engines": { 2989 + "node": ">= 0.8" 2990 + } 2991 + }, 2867 2992 "node_modules/commander": { 2868 2993 "version": "2.20.3", 2869 2994 "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", ··· 2931 3056 "dev": true, 2932 3057 "license": "MIT" 2933 3058 }, 3059 + "node_modules/delayed-stream": { 3060 + "version": "1.0.0", 3061 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 3062 + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 3063 + "dev": true, 3064 + "license": "MIT", 3065 + "engines": { 3066 + "node": ">=0.4.0" 3067 + } 3068 + }, 2934 3069 "node_modules/detect-libc": { 2935 3070 "version": "2.1.2", 2936 3071 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", ··· 2941 3076 "node": ">=8" 2942 3077 } 2943 3078 }, 3079 + "node_modules/dunder-proto": { 3080 + "version": "1.0.1", 3081 + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 3082 + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 3083 + "dev": true, 3084 + "license": "MIT", 3085 + "dependencies": { 3086 + "call-bind-apply-helpers": "^1.0.1", 3087 + "es-errors": "^1.3.0", 3088 + "gopd": "^1.2.0" 3089 + }, 3090 + "engines": { 3091 + "node": ">= 0.4" 3092 + } 3093 + }, 3094 + "node_modules/duplexer": { 3095 + "version": "0.1.2", 3096 + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", 3097 + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", 3098 + "dev": true, 3099 + "license": "MIT" 3100 + }, 2944 3101 "node_modules/electron-to-chromium": { 2945 3102 "version": "1.5.267", 2946 3103 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", ··· 2991 3148 "url": "https://github.com/sponsors/antfu" 2992 3149 } 2993 3150 }, 3151 + "node_modules/es-define-property": { 3152 + "version": "1.0.1", 3153 + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 3154 + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 3155 + "dev": true, 3156 + "license": "MIT", 3157 + "engines": { 3158 + "node": ">= 0.4" 3159 + } 3160 + }, 3161 + "node_modules/es-errors": { 3162 + "version": "1.3.0", 3163 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 3164 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 3165 + "dev": true, 3166 + "license": "MIT", 3167 + "engines": { 3168 + "node": ">= 0.4" 3169 + } 3170 + }, 2994 3171 "node_modules/es-module-lexer": { 2995 3172 "version": "1.7.0", 2996 3173 "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", 2997 3174 "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", 2998 3175 "license": "MIT" 3176 + }, 3177 + "node_modules/es-object-atoms": { 3178 + "version": "1.1.1", 3179 + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 3180 + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 3181 + "dev": true, 3182 + "license": "MIT", 3183 + "dependencies": { 3184 + "es-errors": "^1.3.0" 3185 + }, 3186 + "engines": { 3187 + "node": ">= 0.4" 3188 + } 3189 + }, 3190 + "node_modules/es-set-tostringtag": { 3191 + "version": "2.1.0", 3192 + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 3193 + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 3194 + "dev": true, 3195 + "license": "MIT", 3196 + "dependencies": { 3197 + "es-errors": "^1.3.0", 3198 + "get-intrinsic": "^1.2.6", 3199 + "has-tostringtag": "^1.0.2", 3200 + "hasown": "^2.0.2" 3201 + }, 3202 + "engines": { 3203 + "node": ">= 0.4" 3204 + } 2999 3205 }, 3000 3206 "node_modules/escalade": { 3001 3207 "version": "3.2.0", ··· 3292 3498 "node": ">=0.10.0" 3293 3499 } 3294 3500 }, 3501 + "node_modules/event-stream": { 3502 + "version": "3.3.4", 3503 + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 3504 + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", 3505 + "dev": true, 3506 + "license": "MIT", 3507 + "dependencies": { 3508 + "duplexer": "~0.1.1", 3509 + "from": "~0", 3510 + "map-stream": "~0.1.0", 3511 + "pause-stream": "0.0.11", 3512 + "split": "0.3", 3513 + "stream-combiner": "~0.0.4", 3514 + "through": "~2.3.1" 3515 + } 3516 + }, 3295 3517 "node_modules/eventemitter3": { 3296 3518 "version": "5.0.1", 3297 3519 "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", ··· 3309 3531 "node": ">=0.8.x" 3310 3532 } 3311 3533 }, 3534 + "node_modules/execa": { 3535 + "version": "5.1.1", 3536 + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 3537 + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 3538 + "dev": true, 3539 + "license": "MIT", 3540 + "dependencies": { 3541 + "cross-spawn": "^7.0.3", 3542 + "get-stream": "^6.0.0", 3543 + "human-signals": "^2.1.0", 3544 + "is-stream": "^2.0.0", 3545 + "merge-stream": "^2.0.0", 3546 + "npm-run-path": "^4.0.1", 3547 + "onetime": "^5.1.2", 3548 + "signal-exit": "^3.0.3", 3549 + "strip-final-newline": "^2.0.0" 3550 + }, 3551 + "engines": { 3552 + "node": ">=10" 3553 + }, 3554 + "funding": { 3555 + "url": "https://github.com/sindresorhus/execa?sponsor=1" 3556 + } 3557 + }, 3558 + "node_modules/execa/node_modules/onetime": { 3559 + "version": "5.1.2", 3560 + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 3561 + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 3562 + "dev": true, 3563 + "license": "MIT", 3564 + "dependencies": { 3565 + "mimic-fn": "^2.1.0" 3566 + }, 3567 + "engines": { 3568 + "node": ">=6" 3569 + }, 3570 + "funding": { 3571 + "url": "https://github.com/sponsors/sindresorhus" 3572 + } 3573 + }, 3574 + "node_modules/execa/node_modules/signal-exit": { 3575 + "version": "3.0.7", 3576 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 3577 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 3578 + "dev": true, 3579 + "license": "ISC" 3580 + }, 3312 3581 "node_modules/exit-hook": { 3313 3582 "version": "2.2.1", 3314 3583 "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", ··· 3451 3720 "dev": true, 3452 3721 "license": "ISC" 3453 3722 }, 3723 + "node_modules/follow-redirects": { 3724 + "version": "1.15.11", 3725 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", 3726 + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", 3727 + "dev": true, 3728 + "funding": [ 3729 + { 3730 + "type": "individual", 3731 + "url": "https://github.com/sponsors/RubenVerborgh" 3732 + } 3733 + ], 3734 + "license": "MIT", 3735 + "engines": { 3736 + "node": ">=4.0" 3737 + }, 3738 + "peerDependenciesMeta": { 3739 + "debug": { 3740 + "optional": true 3741 + } 3742 + } 3743 + }, 3744 + "node_modules/form-data": { 3745 + "version": "4.0.5", 3746 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", 3747 + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", 3748 + "dev": true, 3749 + "license": "MIT", 3750 + "dependencies": { 3751 + "asynckit": "^0.4.0", 3752 + "combined-stream": "^1.0.8", 3753 + "es-set-tostringtag": "^2.1.0", 3754 + "hasown": "^2.0.2", 3755 + "mime-types": "^2.1.12" 3756 + }, 3757 + "engines": { 3758 + "node": ">= 6" 3759 + } 3760 + }, 3761 + "node_modules/from": { 3762 + "version": "0.1.7", 3763 + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 3764 + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", 3765 + "dev": true, 3766 + "license": "MIT" 3767 + }, 3454 3768 "node_modules/fsevents": { 3455 3769 "version": "2.3.2", 3456 3770 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", ··· 3466 3780 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 3467 3781 } 3468 3782 }, 3783 + "node_modules/function-bind": { 3784 + "version": "1.1.2", 3785 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 3786 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 3787 + "dev": true, 3788 + "license": "MIT", 3789 + "funding": { 3790 + "url": "https://github.com/sponsors/ljharb" 3791 + } 3792 + }, 3469 3793 "node_modules/gensync": { 3470 3794 "version": "1.0.0-beta.2", 3471 3795 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", ··· 3489 3813 "url": "https://github.com/sponsors/sindresorhus" 3490 3814 } 3491 3815 }, 3816 + "node_modules/get-intrinsic": { 3817 + "version": "1.3.0", 3818 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 3819 + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 3820 + "dev": true, 3821 + "license": "MIT", 3822 + "dependencies": { 3823 + "call-bind-apply-helpers": "^1.0.2", 3824 + "es-define-property": "^1.0.1", 3825 + "es-errors": "^1.3.0", 3826 + "es-object-atoms": "^1.1.1", 3827 + "function-bind": "^1.1.2", 3828 + "get-proto": "^1.0.1", 3829 + "gopd": "^1.2.0", 3830 + "has-symbols": "^1.1.0", 3831 + "hasown": "^2.0.2", 3832 + "math-intrinsics": "^1.1.0" 3833 + }, 3834 + "engines": { 3835 + "node": ">= 0.4" 3836 + }, 3837 + "funding": { 3838 + "url": "https://github.com/sponsors/ljharb" 3839 + } 3840 + }, 3841 + "node_modules/get-proto": { 3842 + "version": "1.0.1", 3843 + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 3844 + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 3845 + "dev": true, 3846 + "license": "MIT", 3847 + "dependencies": { 3848 + "dunder-proto": "^1.0.1", 3849 + "es-object-atoms": "^1.0.0" 3850 + }, 3851 + "engines": { 3852 + "node": ">= 0.4" 3853 + } 3854 + }, 3855 + "node_modules/get-stream": { 3856 + "version": "6.0.1", 3857 + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 3858 + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 3859 + "dev": true, 3860 + "license": "MIT", 3861 + "engines": { 3862 + "node": ">=10" 3863 + }, 3864 + "funding": { 3865 + "url": "https://github.com/sponsors/sindresorhus" 3866 + } 3867 + }, 3492 3868 "node_modules/glob-parent": { 3493 3869 "version": "6.0.2", 3494 3870 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", ··· 3521 3897 "url": "https://github.com/sponsors/sindresorhus" 3522 3898 } 3523 3899 }, 3900 + "node_modules/gopd": { 3901 + "version": "1.2.0", 3902 + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 3903 + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 3904 + "dev": true, 3905 + "license": "MIT", 3906 + "engines": { 3907 + "node": ">= 0.4" 3908 + }, 3909 + "funding": { 3910 + "url": "https://github.com/sponsors/ljharb" 3911 + } 3912 + }, 3524 3913 "node_modules/graceful-fs": { 3525 3914 "version": "4.2.11", 3526 3915 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", ··· 3537 3926 "node": ">=8" 3538 3927 } 3539 3928 }, 3929 + "node_modules/has-symbols": { 3930 + "version": "1.1.0", 3931 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 3932 + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 3933 + "dev": true, 3934 + "license": "MIT", 3935 + "engines": { 3936 + "node": ">= 0.4" 3937 + }, 3938 + "funding": { 3939 + "url": "https://github.com/sponsors/ljharb" 3940 + } 3941 + }, 3942 + "node_modules/has-tostringtag": { 3943 + "version": "1.0.2", 3944 + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 3945 + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 3946 + "dev": true, 3947 + "license": "MIT", 3948 + "dependencies": { 3949 + "has-symbols": "^1.0.3" 3950 + }, 3951 + "engines": { 3952 + "node": ">= 0.4" 3953 + }, 3954 + "funding": { 3955 + "url": "https://github.com/sponsors/ljharb" 3956 + } 3957 + }, 3958 + "node_modules/hasown": { 3959 + "version": "2.0.2", 3960 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 3961 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 3962 + "dev": true, 3963 + "license": "MIT", 3964 + "dependencies": { 3965 + "function-bind": "^1.1.2" 3966 + }, 3967 + "engines": { 3968 + "node": ">= 0.4" 3969 + } 3970 + }, 3540 3971 "node_modules/hermes-estree": { 3541 3972 "version": "0.25.1", 3542 3973 "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", ··· 3552 3983 "license": "MIT", 3553 3984 "dependencies": { 3554 3985 "hermes-estree": "0.25.1" 3986 + } 3987 + }, 3988 + "node_modules/human-signals": { 3989 + "version": "2.1.0", 3990 + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 3991 + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 3992 + "dev": true, 3993 + "license": "Apache-2.0", 3994 + "engines": { 3995 + "node": ">=10.17.0" 3555 3996 } 3556 3997 }, 3557 3998 "node_modules/husky": { ··· 3663 4104 "node": ">=0.12.0" 3664 4105 } 3665 4106 }, 4107 + "node_modules/is-stream": { 4108 + "version": "2.0.1", 4109 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 4110 + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 4111 + "dev": true, 4112 + "license": "MIT", 4113 + "engines": { 4114 + "node": ">=8" 4115 + }, 4116 + "funding": { 4117 + "url": "https://github.com/sponsors/sindresorhus" 4118 + } 4119 + }, 3666 4120 "node_modules/isexe": { 3667 4121 "version": "2.0.0", 3668 4122 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", ··· 3685 4139 "node": ">= 10.13.0" 3686 4140 } 3687 4141 }, 4142 + "node_modules/joi": { 4143 + "version": "18.0.2", 4144 + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.2.tgz", 4145 + "integrity": "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==", 4146 + "dev": true, 4147 + "license": "BSD-3-Clause", 4148 + "dependencies": { 4149 + "@hapi/address": "^5.1.1", 4150 + "@hapi/formula": "^3.0.2", 4151 + "@hapi/hoek": "^11.0.7", 4152 + "@hapi/pinpoint": "^2.0.1", 4153 + "@hapi/tlds": "^1.1.1", 4154 + "@hapi/topo": "^6.0.2", 4155 + "@standard-schema/spec": "^1.0.0" 4156 + }, 4157 + "engines": { 4158 + "node": ">= 20" 4159 + } 4160 + }, 3688 4161 "node_modules/js-tokens": { 3689 4162 "version": "4.0.0", 3690 4163 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", ··· 3777 4250 "license": "MIT", 3778 4251 "engines": { 3779 4252 "node": ">=6" 4253 + } 4254 + }, 4255 + "node_modules/lazy-ass": { 4256 + "version": "1.6.0", 4257 + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", 4258 + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", 4259 + "dev": true, 4260 + "license": "MIT", 4261 + "engines": { 4262 + "node": "> 0.8" 3780 4263 } 3781 4264 }, 3782 4265 "node_modules/levn": { ··· 4137 4620 "url": "https://github.com/sponsors/sindresorhus" 4138 4621 } 4139 4622 }, 4623 + "node_modules/lodash": { 4624 + "version": "4.17.21", 4625 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 4626 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 4627 + "dev": true, 4628 + "license": "MIT" 4629 + }, 4140 4630 "node_modules/lodash.merge": { 4141 4631 "version": "4.6.2", 4142 4632 "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", ··· 4184 4674 "@jridgewell/sourcemap-codec": "^1.5.5" 4185 4675 } 4186 4676 }, 4677 + "node_modules/map-stream": { 4678 + "version": "0.1.0", 4679 + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 4680 + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", 4681 + "dev": true 4682 + }, 4683 + "node_modules/math-intrinsics": { 4684 + "version": "1.1.0", 4685 + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 4686 + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 4687 + "dev": true, 4688 + "license": "MIT", 4689 + "engines": { 4690 + "node": ">= 0.4" 4691 + } 4692 + }, 4187 4693 "node_modules/merge-stream": { 4188 4694 "version": "2.0.0", 4189 4695 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 4190 4696 "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 4191 - "license": "MIT", 4192 - "peer": true 4697 + "license": "MIT" 4193 4698 }, 4194 4699 "node_modules/micromatch": { 4195 4700 "version": "4.0.8", ··· 4223 4728 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 4224 4729 "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 4225 4730 "license": "MIT", 4226 - "peer": true, 4227 4731 "engines": { 4228 4732 "node": ">= 0.6" 4229 4733 } ··· 4233 4737 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 4234 4738 "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 4235 4739 "license": "MIT", 4236 - "peer": true, 4237 4740 "dependencies": { 4238 4741 "mime-db": "1.52.0" 4239 4742 }, 4240 4743 "engines": { 4241 4744 "node": ">= 0.6" 4745 + } 4746 + }, 4747 + "node_modules/mimic-fn": { 4748 + "version": "2.1.0", 4749 + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 4750 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 4751 + "dev": true, 4752 + "license": "MIT", 4753 + "engines": { 4754 + "node": ">=6" 4242 4755 } 4243 4756 }, 4244 4757 "node_modules/mimic-function": { ··· 4327 4840 }, 4328 4841 "engines": { 4329 4842 "node": "*" 4843 + } 4844 + }, 4845 + "node_modules/minimist": { 4846 + "version": "1.2.8", 4847 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 4848 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 4849 + "dev": true, 4850 + "license": "MIT", 4851 + "funding": { 4852 + "url": "https://github.com/sponsors/ljharb" 4330 4853 } 4331 4854 }, 4332 4855 "node_modules/mrmime": { ··· 4397 4920 "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", 4398 4921 "license": "MIT" 4399 4922 }, 4923 + "node_modules/npm-run-path": { 4924 + "version": "4.0.1", 4925 + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 4926 + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 4927 + "dev": true, 4928 + "license": "MIT", 4929 + "dependencies": { 4930 + "path-key": "^3.0.0" 4931 + }, 4932 + "engines": { 4933 + "node": ">=8" 4934 + } 4935 + }, 4400 4936 "node_modules/obug": { 4401 4937 "version": "2.1.1", 4402 4938 "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", ··· 4514 5050 "dev": true, 4515 5051 "license": "MIT" 4516 5052 }, 5053 + "node_modules/pause-stream": { 5054 + "version": "0.0.11", 5055 + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 5056 + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", 5057 + "dev": true, 5058 + "license": [ 5059 + "MIT", 5060 + "Apache2" 5061 + ], 5062 + "dependencies": { 5063 + "through": "~2.3" 5064 + } 5065 + }, 4517 5066 "node_modules/picocolors": { 4518 5067 "version": "1.1.1", 4519 5068 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", ··· 4656 5205 "url": "https://github.com/prettier/prettier?sponsor=1" 4657 5206 } 4658 5207 }, 5208 + "node_modules/proxy-from-env": { 5209 + "version": "1.1.0", 5210 + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 5211 + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 5212 + "dev": true, 5213 + "license": "MIT" 5214 + }, 5215 + "node_modules/ps-tree": { 5216 + "version": "1.2.0", 5217 + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", 5218 + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", 5219 + "dev": true, 5220 + "license": "MIT", 5221 + "dependencies": { 5222 + "event-stream": "=3.3.4" 5223 + }, 5224 + "bin": { 5225 + "ps-tree": "bin/ps-tree.js" 5226 + }, 5227 + "engines": { 5228 + "node": ">= 0.10" 5229 + } 5230 + }, 4659 5231 "node_modules/punycode": { 4660 5232 "version": "2.3.1", 4661 5233 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", ··· 4808 5380 "integrity": "sha512-AHgcZ+w7RIRZ65ihSQL8YuoKcpD9Scew4sEeP1BBUT9QdTo6KjwHrZZXjID6nL10fhKessCH6OPany2QKwAwTQ==", 4809 5381 "dev": true, 4810 5382 "license": "MIT" 5383 + }, 5384 + "node_modules/rxjs": { 5385 + "version": "7.8.2", 5386 + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", 5387 + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", 5388 + "dev": true, 5389 + "license": "Apache-2.0", 5390 + "dependencies": { 5391 + "tslib": "^2.1.0" 5392 + } 4811 5393 }, 4812 5394 "node_modules/safe-buffer": { 4813 5395 "version": "5.2.1", ··· 5058 5640 "source-map": "^0.6.0" 5059 5641 } 5060 5642 }, 5643 + "node_modules/split": { 5644 + "version": "0.3.3", 5645 + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 5646 + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", 5647 + "dev": true, 5648 + "license": "MIT", 5649 + "dependencies": { 5650 + "through": "2" 5651 + }, 5652 + "engines": { 5653 + "node": "*" 5654 + } 5655 + }, 5061 5656 "node_modules/stackback": { 5062 5657 "version": "0.0.2", 5063 5658 "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", ··· 5065 5660 "dev": true, 5066 5661 "license": "MIT" 5067 5662 }, 5663 + "node_modules/start-server-and-test": { 5664 + "version": "2.1.3", 5665 + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.3.tgz", 5666 + "integrity": "sha512-k4EcbNjeg0odaDkAMlIeDVDByqX9PIgL4tivgP2tES6Zd8o+4pTq/HgbWCyA3VHIoZopB+wGnNPKYGGSByNriQ==", 5667 + "dev": true, 5668 + "license": "MIT", 5669 + "dependencies": { 5670 + "arg": "^5.0.2", 5671 + "bluebird": "3.7.2", 5672 + "check-more-types": "2.24.0", 5673 + "debug": "4.4.3", 5674 + "execa": "5.1.1", 5675 + "lazy-ass": "1.6.0", 5676 + "ps-tree": "1.2.0", 5677 + "wait-on": "9.0.3" 5678 + }, 5679 + "bin": { 5680 + "server-test": "src/bin/start.js", 5681 + "start-server-and-test": "src/bin/start.js", 5682 + "start-test": "src/bin/start.js" 5683 + }, 5684 + "engines": { 5685 + "node": ">=16" 5686 + } 5687 + }, 5068 5688 "node_modules/std-env": { 5069 5689 "version": "3.10.0", 5070 5690 "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", ··· 5083 5703 "npm": ">=6" 5084 5704 } 5085 5705 }, 5706 + "node_modules/stream-combiner": { 5707 + "version": "0.0.4", 5708 + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 5709 + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", 5710 + "dev": true, 5711 + "license": "MIT", 5712 + "dependencies": { 5713 + "duplexer": "~0.1.1" 5714 + } 5715 + }, 5086 5716 "node_modules/string-argv": { 5087 5717 "version": "0.3.2", 5088 5718 "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", ··· 5126 5756 "url": "https://github.com/chalk/strip-ansi?sponsor=1" 5127 5757 } 5128 5758 }, 5759 + "node_modules/strip-final-newline": { 5760 + "version": "2.0.0", 5761 + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 5762 + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 5763 + "dev": true, 5764 + "license": "MIT", 5765 + "engines": { 5766 + "node": ">=6" 5767 + } 5768 + }, 5129 5769 "node_modules/strip-json-comments": { 5130 5770 "version": "3.1.1", 5131 5771 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", ··· 5236 5876 "deprecated": "no longer maintained", 5237 5877 "license": "(Unlicense OR Apache-2.0)" 5238 5878 }, 5879 + "node_modules/through": { 5880 + "version": "2.3.8", 5881 + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 5882 + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 5883 + "dev": true, 5884 + "license": "MIT" 5885 + }, 5239 5886 "node_modules/tinybench": { 5240 5887 "version": "2.9.0", 5241 5888 "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", ··· 5321 5968 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 5322 5969 "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 5323 5970 "dev": true, 5324 - "license": "0BSD", 5325 - "optional": true 5971 + "license": "0BSD" 5326 5972 }, 5327 5973 "node_modules/type-check": { 5328 5974 "version": "0.4.0", ··· 5644 6290 "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", 5645 6291 "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", 5646 6292 "license": "MIT" 6293 + }, 6294 + "node_modules/wait-on": { 6295 + "version": "9.0.3", 6296 + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.3.tgz", 6297 + "integrity": "sha512-13zBnyYvFDW1rBvWiJ6Av3ymAaq8EDQuvxZnPIw3g04UqGi4TyoIJABmfJ6zrvKo9yeFQExNkOk7idQbDJcuKA==", 6298 + "dev": true, 6299 + "license": "MIT", 6300 + "dependencies": { 6301 + "axios": "^1.13.2", 6302 + "joi": "^18.0.1", 6303 + "lodash": "^4.17.21", 6304 + "minimist": "^1.2.8", 6305 + "rxjs": "^7.8.2" 6306 + }, 6307 + "bin": { 6308 + "wait-on": "bin/wait-on" 6309 + }, 6310 + "engines": { 6311 + "node": ">=20.0.0" 6312 + } 5647 6313 }, 5648 6314 "node_modules/watchpack": { 5649 6315 "version": "2.4.4",
+2 -1
package.json
··· 11 11 "dev": "vite", 12 12 "preview": "vite preview", 13 13 "deploy": "npm install && npm run lint && npm test && npm run build:versions && wrangler pages deploy dist --project-name=rscexplorer", 14 - "test": "vitest run --reporter=verbose", 14 + "test": "start-server-and-test 'vite --port 5599' http://localhost:5599 'vitest run --reporter=verbose'", 15 15 "lint": "eslint .", 16 16 "format": "prettier --write .", 17 17 "format:check": "prettier --check .", ··· 52 52 "playwright": "^1.57.0", 53 53 "prettier": "^3.7.4", 54 54 "rolldown": "^1.0.0-beta.54", 55 + "start-server-and-test": "^2.1.3", 55 56 "typescript-eslint": "^8.50.0", 56 57 "vite": "8.0.0-beta.2", 57 58 "vitest": "^4.0.15",
+2 -3
tests/async.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/bound.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/clientref.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/counter.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/errors.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/form.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/hello.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+6
tests/helpers.js
··· 1 1 import { expect } from "vitest"; 2 + import { chromium } from "playwright"; 3 + 4 + export async function launchBrowser() { 5 + const executablePath = process.env.CHROMIUM_PATH; 6 + return chromium.launch(executablePath ? { executablePath } : undefined); 7 + } 2 8 3 9 let prevRowTexts = []; 4 10 let prevStatuses = [];
+2 -3
tests/kitchensink.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/pagination.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
+2 -3
tests/refresh.spec.js
··· 1 1 import { test, expect, beforeAll, afterAll, afterEach } from "vitest"; 2 - import { chromium } from "playwright"; 3 - import { createHelpers } from "./helpers.js"; 2 + import { createHelpers, launchBrowser } from "./helpers.js"; 4 3 5 4 let browser, page, h; 6 5 7 6 beforeAll(async () => { 8 - browser = await chromium.launch(); 7 + browser = await launchBrowser(); 9 8 page = await browser.newPage(); 10 9 h = createHelpers(page); 11 10 });
-5
vitest.config.js
··· 4 4 test: { 5 5 testTimeout: 15000, 6 6 fileParallelism: true, 7 - webServer: { 8 - command: "npm run dev -- --port 5599", 9 - port: 5599, 10 - reuseExistingServer: !process.env.CI, 11 - }, 12 7 }, 13 8 });