diff --git a/ct-web-lit/package.json b/ct-web-lit/package.json index 85f2b18..1d93acc 100644 --- a/ct-web-lit/package.json +++ b/ct-web-lit/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@sand4rt/experimental-ct-web": "*", - "@playwright/test": "^1.33.0", + "@playwright/test": "^1.34.0", "typescript": "^4.9.5", "vite": "^4.1.4" } diff --git a/ct-web/package.json b/ct-web/package.json index 988e4b8..39d8533 100644 --- a/ct-web/package.json +++ b/ct-web/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "@sand4rt/experimental-ct-web": "*", - "@playwright/test": "^1.33.0", + "@playwright/test": "^1.34.0", "typescript": "^4.9.5", "vite": "^4.1.4" } diff --git a/playwright-ct-web/package.json b/playwright-ct-web/package.json index 0b31cde..d755304 100644 --- a/playwright-ct-web/package.json +++ b/playwright-ct-web/package.json @@ -1,6 +1,6 @@ { "name": "@sand4rt/experimental-ct-web", - "version": "1.33.1", + "version": "1.34.0", "description": "Playwright Component Testing for Web Components", "homepage": "https://playwright.dev", "repository": { @@ -43,14 +43,14 @@ } }, "dependencies": { - "@playwright/test": "1.33.0", - "@playwright/experimental-ct-core": "^1.33.0" + "@playwright/test": "1.34.0", + "@playwright/experimental-ct-core": "^1.34.0" }, "devDependencies": { "vite": "^4.3.5" }, "peerDependencies": { - "@playwright/test": ">=1.33.0" + "@playwright/test": ">=1.34.0" }, "bin": { "playwright": "./cli.js" diff --git a/playwright-ct-web/registerSource.mjs b/playwright-ct-web/registerSource.mjs index 480e172..4b5a064 100644 --- a/playwright-ct-web/registerSource.mjs +++ b/playwright-ct-web/registerSource.mjs @@ -18,18 +18,58 @@ // This file is injected into the registry as text, no dependencies are allowed. /** @typedef {import('@playwright/experimental-ct-core/types/component').Component} Component */ +/** @typedef {import('@playwright/experimental-ct-core/types/component').JsxComponent} JsxComponent */ +/** @typedef {import('@playwright/experimental-ct-core/types/component').ObjectComponent} ObjectComponent */ /** @typedef {new (...args: any[]) => HTMLElement} FrameworkComponent */ +/** @type {Map Promise>} */ +const __pwLoaderRegistry = new Map(); /** @type {Map} */ -const registry = new Map(); -const listeners = new Map(); +const __pwRegistry = new Map(); +const __pwListeners = new Map(); /** - * @param {{[key: string]: FrameworkComponent}} components + * @param {{[key: string]: () => Promise}} components */ export function pwRegister(components) { for (const [name, value] of Object.entries(components)) - registry.set(name, value); + __pwLoaderRegistry.set(name, value); +} + +/** + * @param {Component} component + * @returns {component is JsxComponent | ObjectComponent} + */ +function isComponent(component) { + return !(typeof component !== 'object' || Array.isArray(component)); +} + +/** + * @param {Component} component + */ +async function __pwResolveComponent(component) { + if (!isComponent(component)) + return + + let componentFactory = __pwLoaderRegistry.get(component.type); + if (!componentFactory) { + // Lookup by shorthand. + for (const [name, value] of __pwLoaderRegistry) { + if (component.type.endsWith(`_${name}`)) { + componentFactory = value; + break; + } + } + } + + if (!componentFactory && component.type[0].toUpperCase() === component.type[0]) + throw new Error(`Unregistered component: ${component.type}. Following components are registered: ${[...__pwRegistry.keys()]}`); + + if(componentFactory) + __pwRegistry.set(component.type, await componentFactory()) + + if ('children' in component) + await Promise.all(component.children.map(child => __pwResolveComponent(child))) } /** @@ -45,8 +85,8 @@ function __pwUpdateProps(webComponent, props = {}) { */ function __pwRemoveEvents(webComponent, events = {}) { for (const [key] of Object.entries(events)) { - webComponent.removeEventListener(key, listeners.get(key)); - listeners.delete(key); + webComponent.removeEventListener(key, __pwListeners.get(key)); + __pwListeners.delete(key); } } @@ -57,7 +97,7 @@ function __pwUpdateEvents(webComponent, events = {}) { for (const [key, listener] of Object.entries(events)) { const fn = event => listener(/** @type {CustomEvent} */ (event).detail); webComponent.addEventListener(key, fn); - listeners.set(key, fn); + __pwListeners.set(key, fn); } } @@ -114,35 +154,27 @@ function __pwCreateSlot(value) { * @param {Component} component */ function __pwCreateComponent(component) { - let Component = registry.get(component.type); - if (!Component) { - // Lookup by shorthand. - for (const [name, value] of registry) { - if (component.type.endsWith(`_${name}`)) { - Component = value; - break; - } - } - } - + const Component = __pwRegistry.get(component.type); if (!Component) throw new Error( `Unregistered component: ${ component.type - }. Following components are registered: ${[...registry.keys()]}` + }. Following components are registered: ${[...__pwRegistry.keys()]}` ); - return new Component(); + const webComponent = new Component(); + __pwUpdateProps(webComponent, component.options?.props); + __pwUpdateSlots(webComponent, component.options?.slots); + __pwUpdateEvents(webComponent, component.options?.on); + return webComponent; } window.playwrightMount = async (component, rootElement, hooksConfig) => { + await __pwResolveComponent(component); if (component.kind !== 'object') throw new Error('JSX mount notation is not supported'); const webComponent = __pwCreateComponent(component); - __pwUpdateProps(webComponent, component.options?.props); - __pwUpdateSlots(webComponent, component.options?.slots); - __pwUpdateEvents(webComponent, component.options?.on); for (const hook of window['__pw_hooks_before_mount'] || []) await hook({ hooksConfig }); @@ -154,6 +186,7 @@ window.playwrightMount = async (component, rootElement, hooksConfig) => { }; window.playwrightUpdate = async (rootElement, component) => { + await __pwResolveComponent(component); if (component.kind === 'jsx') throw new Error('JSX mount notation is not supported'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7bd8e2..5b07d74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,67 +1,75 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' importers: - .: - specifiers: {} + .: {} ct-web: - specifiers: - '@playwright/test': ^1.33.0 - '@sand4rt/experimental-ct-web': '*' - typescript: ^4.9.5 - vite: ^4.1.4 devDependencies: - '@playwright/test': 1.33.0 - '@sand4rt/experimental-ct-web': link:../playwright-ct-web - typescript: 4.9.5 - vite: 4.3.5 + '@playwright/test': + specifier: ^1.34.0 + version: 1.34.0 + '@sand4rt/experimental-ct-web': + specifier: '*' + version: link:../playwright-ct-web + typescript: + specifier: ^4.9.5 + version: 4.9.5 + vite: + specifier: ^4.1.4 + version: 4.3.5 ct-web-lit: - specifiers: - '@playwright/test': ^1.33.0 - '@sand4rt/experimental-ct-web': '*' - lit: ^2.6.1 - typescript: ^4.9.5 - vite: ^4.1.4 dependencies: - lit: 2.7.4 + lit: + specifier: ^2.6.1 + version: 2.7.4 devDependencies: - '@playwright/test': 1.33.0 - '@sand4rt/experimental-ct-web': link:../playwright-ct-web - typescript: 4.9.5 - vite: 4.3.5 + '@playwright/test': + specifier: ^1.34.0 + version: 1.34.0 + '@sand4rt/experimental-ct-web': + specifier: '*' + version: link:../playwright-ct-web + typescript: + specifier: ^4.9.5 + version: 4.9.5 + vite: + specifier: ^4.1.4 + version: 4.3.5 playwright-ct-web: - specifiers: - '@playwright/experimental-ct-core': ^1.33.0 - '@playwright/test': 1.33.0 - vite: ^4.3.5 dependencies: - '@playwright/experimental-ct-core': 1.33.0 - '@playwright/test': 1.33.0 + '@playwright/experimental-ct-core': + specifier: ^1.34.0 + version: 1.34.0 + '@playwright/test': + specifier: 1.34.0 + version: 1.34.0 devDependencies: - vite: 4.3.5 + vite: + specifier: ^4.3.5 + version: 4.3.5 packages: - /@esbuild/android-arm/0.17.18: - resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} + /@esbuild/android-arm64@0.17.18: + resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true optional: true - /@esbuild/android-arm64/0.17.18: - resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} + /@esbuild/android-arm@0.17.18: + resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true optional: true - /@esbuild/android-x64/0.17.18: + /@esbuild/android-x64@0.17.18: resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} engines: {node: '>=12'} cpu: [x64] @@ -69,7 +77,7 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64/0.17.18: + /@esbuild/darwin-arm64@0.17.18: resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} engines: {node: '>=12'} cpu: [arm64] @@ -77,7 +85,7 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64/0.17.18: + /@esbuild/darwin-x64@0.17.18: resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} engines: {node: '>=12'} cpu: [x64] @@ -85,7 +93,7 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64/0.17.18: + /@esbuild/freebsd-arm64@0.17.18: resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} engines: {node: '>=12'} cpu: [arm64] @@ -93,7 +101,7 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64/0.17.18: + /@esbuild/freebsd-x64@0.17.18: resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} engines: {node: '>=12'} cpu: [x64] @@ -101,23 +109,23 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm/0.17.18: - resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} + /@esbuild/linux-arm64@0.17.18: + resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-arm64/0.17.18: - resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} + /@esbuild/linux-arm@0.17.18: + resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ia32/0.17.18: + /@esbuild/linux-ia32@0.17.18: resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} engines: {node: '>=12'} cpu: [ia32] @@ -125,7 +133,7 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64/0.17.18: + /@esbuild/linux-loong64@0.17.18: resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} engines: {node: '>=12'} cpu: [loong64] @@ -133,7 +141,7 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el/0.17.18: + /@esbuild/linux-mips64el@0.17.18: resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} engines: {node: '>=12'} cpu: [mips64el] @@ -141,7 +149,7 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64/0.17.18: + /@esbuild/linux-ppc64@0.17.18: resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} engines: {node: '>=12'} cpu: [ppc64] @@ -149,7 +157,7 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64/0.17.18: + /@esbuild/linux-riscv64@0.17.18: resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} engines: {node: '>=12'} cpu: [riscv64] @@ -157,7 +165,7 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x/0.17.18: + /@esbuild/linux-s390x@0.17.18: resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} engines: {node: '>=12'} cpu: [s390x] @@ -165,7 +173,7 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64/0.17.18: + /@esbuild/linux-x64@0.17.18: resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} engines: {node: '>=12'} cpu: [x64] @@ -173,7 +181,7 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64/0.17.18: + /@esbuild/netbsd-x64@0.17.18: resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} engines: {node: '>=12'} cpu: [x64] @@ -181,7 +189,7 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64/0.17.18: + /@esbuild/openbsd-x64@0.17.18: resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} engines: {node: '>=12'} cpu: [x64] @@ -189,7 +197,7 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64/0.17.18: + /@esbuild/sunos-x64@0.17.18: resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} engines: {node: '>=12'} cpu: [x64] @@ -197,7 +205,7 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64/0.17.18: + /@esbuild/win32-arm64@0.17.18: resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} engines: {node: '>=12'} cpu: [arm64] @@ -205,7 +213,7 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32/0.17.18: + /@esbuild/win32-ia32@0.17.18: resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} engines: {node: '>=12'} cpu: [ia32] @@ -213,7 +221,7 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64/0.17.18: + /@esbuild/win32-x64@0.17.18: resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} engines: {node: '>=12'} cpu: [x64] @@ -221,22 +229,22 @@ packages: requiresBuild: true optional: true - /@lit-labs/ssr-dom-shim/1.1.1: + /@lit-labs/ssr-dom-shim@1.1.1: resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} dev: false - /@lit/reactive-element/1.6.1: + /@lit/reactive-element@1.6.1: resolution: {integrity: sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA==} dependencies: '@lit-labs/ssr-dom-shim': 1.1.1 dev: false - /@playwright/experimental-ct-core/1.33.0: - resolution: {integrity: sha512-mfCpAdYDL5fR9PRZKXbgbeHBkWJZMRWmHofE4r9IP1D8tne/Sy1oZSnan7S8c1HGy6d9MAedpsn802uCzsYzCg==} + /@playwright/experimental-ct-core@1.34.0: + resolution: {integrity: sha512-E4ZaJaJwJk+eF4qN0J8lv/NnfVgwlOAqQ6B+G6sJrNiwFK5DeUswuax9nc1ZYzo6GxxzGPtLzE9QaJj8go4uMw==} engines: {node: '>=14'} hasBin: true dependencies: - '@playwright/test': 1.33.0 + '@playwright/test': 1.34.0 vite: 4.3.5 transitivePeerDependencies: - '@types/node' @@ -247,24 +255,24 @@ packages: - terser dev: false - /@playwright/test/1.33.0: - resolution: {integrity: sha512-YunBa2mE7Hq4CfPkGzQRK916a4tuZoVx/EpLjeWlTVOnD4S2+fdaQZE0LJkbfhN5FTSKNLdcl7MoT5XB37bTkg==} + /@playwright/test@1.34.0: + resolution: {integrity: sha512-GIALJVODOIrMflLV54H3Cow635OfrTwOu24ZTDyKC66uchtFX2NcCRq83cLdakMjZKYK78lODNLQSYBj2OgaTw==} engines: {node: '>=14'} hasBin: true dependencies: '@types/node': 20.1.0 - playwright-core: 1.33.0 + playwright-core: 1.34.0 optionalDependencies: fsevents: 2.3.2 - /@types/node/20.1.0: + /@types/node@20.1.0: resolution: {integrity: sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==} - /@types/trusted-types/2.0.3: + /@types/trusted-types@2.0.3: resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} dev: false - /esbuild/0.17.18: + /esbuild@0.17.18: resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} engines: {node: '>=12'} hasBin: true @@ -293,14 +301,14 @@ packages: '@esbuild/win32-ia32': 0.17.18 '@esbuild/win32-x64': 0.17.18 - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true - /lit-element/3.3.2: + /lit-element@3.3.2: resolution: {integrity: sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ==} dependencies: '@lit-labs/ssr-dom-shim': 1.1.1 @@ -308,13 +316,13 @@ packages: lit-html: 2.7.3 dev: false - /lit-html/2.7.3: + /lit-html@2.7.3: resolution: {integrity: sha512-9DyLzcn/kbRGowz2vFmSANFbRZTxYUgYYFqzie89w6GLpPUiBCDHfcdeRUV/k3Q2ueYxNjfv46yPCtKAEAPOVw==} dependencies: '@types/trusted-types': 2.0.3 dev: false - /lit/2.7.4: + /lit@2.7.4: resolution: {integrity: sha512-cgD7xrZoYr21mbrkZIuIrj98YTMw/snJPg52deWVV4A8icLyNHI3bF70xsJeAgwTuiq5Kkd+ZR8gybSJDCPB7g==} dependencies: '@lit/reactive-element': 1.6.1 @@ -322,20 +330,19 @@ packages: lit-html: 2.7.3 dev: false - /nanoid/3.3.6: + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /playwright-core/1.33.0: - resolution: {integrity: sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw==} + /playwright-core@1.34.0: + resolution: {integrity: sha512-fMUY1+iR6kYbJF/EsOOqzBA99ZHXbw9sYPNjwA4X/oV0hVF/1aGlWYBGPVUEqxBkGANDKMziYoOdKGU5DIP5Gg==} engines: {node: '>=14'} - hasBin: true - /postcss/8.4.23: + /postcss@8.4.23: resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} engines: {node: ^10 || ^12 || >=14} dependencies: @@ -343,24 +350,24 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /rollup/3.21.5: + /rollup@3.21.5: resolution: {integrity: sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 - /source-map-js/1.0.2: + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - /typescript/4.9.5: + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /vite/4.3.5: + /vite@4.3.5: resolution: {integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true