diff --git a/packages/sdk-embed/package.json b/packages/sdk-embed/package.json index 0c732bce52e..d09630dd94d 100644 --- a/packages/sdk-embed/package.json +++ b/packages/sdk-embed/package.json @@ -24,9 +24,9 @@ ], "scripts": { "build": "tsup", + "test": "vitest run", "typecheck": "tsc --noEmit" }, - "dependencies": {}, "peerDependencies": { "react": ">=18" }, @@ -39,6 +39,7 @@ "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "tsup": "^8.0.0", - "typescript": "^5.7.3" + "typescript": "^5.7.3", + "vitest": "~2.1.9" } } diff --git a/packages/sdk-embed/src/vanilla/cap-embed.test.ts b/packages/sdk-embed/src/vanilla/cap-embed.test.ts new file mode 100644 index 00000000000..0ec6845745d --- /dev/null +++ b/packages/sdk-embed/src/vanilla/cap-embed.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from "vitest"; +import { createEmbedUrl } from "./cap-embed"; + +describe("createEmbedUrl", () => { + it("builds the default embed URL with required SDK parameters", () => { + const url = createEmbedUrl({ + videoId: "video-123", + publicKey: "pk_live_123", + }); + + expect(url).toBe("https://cap.so/embed/video-123?sdk=1&pk=pk_live_123"); + }); + + it("includes optional playback and branding parameters", () => { + const url = new URL( + createEmbedUrl({ + apiBase: "https://app.example.com", + videoId: "video-123", + publicKey: "pk_live_123", + autoplay: true, + branding: { + logoUrl: "https://cdn.example.com/logo.svg", + accentColor: "#ff00aa", + }, + }), + ); + + expect(url.origin).toBe("https://app.example.com"); + expect(url.pathname).toBe("/embed/video-123"); + expect(url.searchParams.get("sdk")).toBe("1"); + expect(url.searchParams.get("pk")).toBe("pk_live_123"); + expect(url.searchParams.get("autoplay")).toBe("1"); + expect(url.searchParams.get("logo")).toBe( + "https://cdn.example.com/logo.svg", + ); + expect(url.searchParams.get("accent")).toBe("#ff00aa"); + }); +}); diff --git a/packages/sdk-embed/vitest.config.ts b/packages/sdk-embed/vitest.config.ts new file mode 100644 index 00000000000..cfbd4c3fcac --- /dev/null +++ b/packages/sdk-embed/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "node", + include: ["src/**/*.test.ts"], + }, +}); diff --git a/packages/web-backend/package.json b/packages/web-backend/package.json index 6d644700853..cc3089bf019 100644 --- a/packages/web-backend/package.json +++ b/packages/web-backend/package.json @@ -8,16 +8,17 @@ "main": "./dist/index.js" }, "scripts": { - "build": "tsdown" + "build": "tsdown", + "test": "vitest run" }, "dependencies": { - "@cap/env": "workspace:*", "@aws-sdk/client-s3": "^3.485.0", "@aws-sdk/cloudfront-signer": "^3.821.0", "@aws-sdk/credential-providers": "^3.908.0", "@aws-sdk/s3-presigned-post": "^3.485.0", "@aws-sdk/s3-request-presigner": "^3.485.0", "@cap/database": "workspace:*", + "@cap/env": "workspace:*", "@cap/utils": "workspace:*", "@cap/web-domain": "workspace:*", "@effect/cluster": "^0.50.4", @@ -30,5 +31,8 @@ "effect": "^3.18.4", "next": "15.5.9", "server-only": "^0.0.1" + }, + "devDependencies": { + "vitest": "~2.1.9" } } diff --git a/packages/web-backend/src/Videos/EffectiveVideoRules.test.ts b/packages/web-backend/src/Videos/EffectiveVideoRules.test.ts new file mode 100644 index 00000000000..e94b4b4019c --- /dev/null +++ b/packages/web-backend/src/Videos/EffectiveVideoRules.test.ts @@ -0,0 +1,75 @@ +import { describe, expect, it } from "vitest"; +import { + collectPasswordHashes, + resolveEffectiveVideoRules, +} from "./EffectiveVideoRules"; + +describe("resolveEffectiveVideoRules", () => { + it("lets space settings override video and organization defaults", () => { + const rules = resolveEffectiveVideoRules({ + videoSettings: { + disableCaptions: false, + disableComments: true, + }, + organizationSettings: { + disableCaptions: true, + disableTranscript: true, + }, + spaces: [ + { + id: "space-1", + name: "Engineering", + settings: { + disableCaptions: true, + disableSummary: true, + }, + }, + ], + }); + + expect(rules.settings).toMatchObject({ + disableCaptions: true, + disableComments: true, + disableSummary: true, + disableTranscript: true, + }); + expect(rules.inheritedSettings.disableCaptions).toEqual([ + { id: "space-1", name: "Engineering" }, + ]); + expect(rules.inheritedSettings.disableSummary).toEqual([ + { id: "space-1", name: "Engineering" }, + ]); + }); + + it("collects inherited password sources from flags and hashes", () => { + const rules = resolveEffectiveVideoRules({ + spaces: [ + { id: "space-1", name: "Flagged", hasPassword: true }, + { id: "space-2", name: "Has hash", password: "hash-2" }, + { id: "space-3", name: "Open" }, + ], + }); + + expect(rules.hasInheritedPassword).toBe(true); + expect(rules.inheritedPasswordSources).toEqual([ + { id: "space-1", name: "Flagged" }, + { id: "space-2", name: "Has hash" }, + ]); + }); +}); + +describe("collectPasswordHashes", () => { + it("keeps the video password first and removes empty space passwords", () => { + expect( + collectPasswordHashes({ + videoPassword: "video-hash", + spacePasswords: [ + { password: "space-hash" }, + { password: "" }, + { password: null }, + {}, + ], + }), + ).toEqual(["video-hash", "space-hash"]); + }); +}); diff --git a/packages/web-backend/vitest.config.ts b/packages/web-backend/vitest.config.ts new file mode 100644 index 00000000000..cfbd4c3fcac --- /dev/null +++ b/packages/web-backend/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "node", + include: ["src/**/*.test.ts"], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1003cb70eb..9585ebe9052 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1098,6 +1098,9 @@ importers: typescript: specifier: ^5.7.3 version: 5.8.3 + vitest: + specifier: ~2.1.9 + version: 2.1.9(@types/node@22.15.17)(jsdom@26.1.0)(terser@5.44.0) packages/sdk-recorder: dependencies: @@ -1410,6 +1413,10 @@ importers: server-only: specifier: ^0.0.1 version: 0.0.1 + devDependencies: + vitest: + specifier: ~2.1.9 + version: 2.1.9(@types/node@22.15.17)(jsdom@26.1.0)(terser@5.44.0) packages/web-domain: dependencies: @@ -2345,9 +2352,6 @@ packages: '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} @@ -2360,15 +2364,9 @@ packages: '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} - '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} @@ -5736,95 +5734,111 @@ packages: '@react-email/body@0.0.11': resolution: {integrity: sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/button@0.1.0': resolution: {integrity: sha512-fg4LtgTu5zXxaRSly9cuv6sHVF/hi1lElbRaIA8EPx5coWOBhCto6rCPfawcXpaN2oER7rNHUrcNBkI+lz5F9A==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/code-block@0.1.0': resolution: {integrity: sha512-jSpHFsgqnQXxDIssE4gvmdtFncaFQz5D6e22BnVjcCPk/udK+0A9jRwGFEG8JD2si9ZXBmU4WsuqQEczuZn4ww==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/code-inline@0.0.5': resolution: {integrity: sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/column@0.0.13': resolution: {integrity: sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/components@0.1.0': resolution: {integrity: sha512-Rx0eZk0XuzLKXC5NoMm8xuH72ALVsPYNb/BvcdCJx4EZAoVpQISb4sCqpo9blVYVIazNr4MqWroqFb3ZNrCLMQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/container@0.0.15': resolution: {integrity: sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/font@0.0.9': resolution: {integrity: sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/head@0.0.12': resolution: {integrity: sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/heading@0.0.15': resolution: {integrity: sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/hr@0.0.11': resolution: {integrity: sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/html@0.0.11': resolution: {integrity: sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/img@0.0.11': resolution: {integrity: sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/link@0.0.12': resolution: {integrity: sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/markdown@0.0.15': resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/preview@0.0.13': resolution: {integrity: sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5838,24 +5852,28 @@ packages: '@react-email/row@0.0.12': resolution: {integrity: sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/section@0.0.16': resolution: {integrity: sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/tailwind@1.0.5': resolution: {integrity: sha512-BH00cZSeFfP9HiDASl+sPHi7Hh77W5nzDgdnxtsVr/m3uQD9g180UwxcE3PhOfx0vRdLzQUU8PtmvvDfbztKQg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/text@0.1.5': resolution: {integrity: sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -9074,6 +9092,7 @@ packages: aws-sdk@2.1692.0: resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} engines: {node: '>= 10.0.0'} + deprecated: The AWS SDK for JavaScript (v2) has reached end-of-support, and no longer receives updates. Please migrate your code to use AWS SDK for JavaScript (v3). More info https://a.co/cUPnyil aws-ssl-profiles@1.1.2: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} @@ -12296,9 +12315,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -15049,10 +15065,6 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} - tinypool@1.1.1: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -18143,12 +18155,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.9.1': - dependencies: - '@emnapi/wasi-threads': 1.2.0 - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 @@ -18169,21 +18175,11 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 @@ -19537,8 +19533,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.9': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 '@tybys/wasm-util': 0.9.0 optional: true @@ -21626,7 +21622,7 @@ snapshots: estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) is-reference: 1.2.1 - magic-string: 0.30.19 + magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: rollup: 4.40.2 @@ -21635,7 +21631,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.40.2) estree-walker: 2.0.2 - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: rollup: 4.40.2 @@ -21658,7 +21654,7 @@ snapshots: '@rollup/plugin-replace@6.0.2(rollup@4.40.2)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: rollup: 4.40.2 @@ -24318,8 +24314,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -24492,7 +24488,7 @@ snapshots: dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: vite: 5.4.19(@types/node@22.15.17)(terser@5.44.0) @@ -24500,7 +24496,7 @@ snapshots: dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: vite: 6.3.5(@types/node@20.17.43)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) @@ -24530,13 +24526,13 @@ snapshots: '@vitest/snapshot@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 - magic-string: 0.30.17 + magic-string: 0.30.21 pathe: 1.1.2 '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.19 + magic-string: 0.30.21 pathe: 2.0.3 '@vitest/spy@2.0.5': @@ -24566,13 +24562,13 @@ snapshots: dependencies: '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 3.1.3 + loupe: 3.2.1 tinyrainbow: 1.2.0 '@vitest/utils@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 + loupe: 3.2.1 tinyrainbow: 1.2.0 '@vitest/utils@3.2.4': @@ -25075,6 +25071,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -25819,7 +25819,7 @@ snapshots: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 + loupe: 3.2.1 pathval: 2.0.0 chalk@2.4.2: @@ -26821,7 +26821,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 + acorn: 8.16.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 @@ -27590,7 +27590,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -27950,7 +27950,7 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: - magic-string: 0.30.19 + magic-string: 0.30.21 mlly: 1.8.0 rollup: 4.40.2 @@ -29245,8 +29245,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.3: {} - loupe@3.2.1: {} lowercase-keys@2.0.0: {} @@ -30277,7 +30275,7 @@ snapshots: klona: 2.0.6 knitwork: 1.2.0 listhen: 1.9.0 - magic-string: 0.30.17 + magic-string: 0.30.21 magicast: 0.3.5 mime: 4.0.7 mlly: 1.7.4 @@ -31757,7 +31755,7 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) dts-resolver: 2.1.2 get-tsconfig: 4.11.0 - magic-string: 0.30.19 + magic-string: 0.30.21 rolldown: 1.0.1 optionalDependencies: typescript: 5.8.3 @@ -32921,8 +32919,6 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.0.2: {} - tinypool@1.1.1: {} tinyrainbow@1.2.0: {} @@ -33304,7 +33300,7 @@ snapshots: dependencies: acorn: 8.14.1 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 unplugin: 2.3.2 unctx@2.5.0: @@ -33388,7 +33384,7 @@ snapshots: estree-walker: 3.0.3 fast-glob: 3.3.3 local-pkg: 1.1.1 - magic-string: 0.30.17 + magic-string: 0.30.21 mlly: 1.7.4 pathe: 2.0.3 picomatch: 4.0.2 @@ -33405,7 +33401,7 @@ snapshots: escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.1 - magic-string: 0.30.19 + magic-string: 0.30.21 mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 @@ -33612,7 +33608,7 @@ snapshots: unwasm@0.3.9: dependencies: knitwork: 1.2.0 - magic-string: 0.30.19 + magic-string: 0.30.21 mlly: 1.8.0 pathe: 1.1.2 pkg-types: 1.3.1 @@ -33847,7 +33843,7 @@ snapshots: vite-node@2.1.9(@types/node@22.15.17)(terser@5.44.0): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 1.1.2 vite: 5.4.19(@types/node@22.15.17)(terser@5.44.0) @@ -34001,14 +33997,14 @@ snapshots: '@vitest/spy': 2.1.9 '@vitest/utils': 2.1.9 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.3(supports-color@8.1.1) expect-type: 1.2.1 - magic-string: 0.30.17 + magic-string: 0.30.21 pathe: 1.1.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinypool: 1.0.2 + tinypool: 1.1.1 tinyrainbow: 1.2.0 vite: 5.4.19(@types/node@22.15.17)(terser@5.44.0) vite-node: 2.1.9(@types/node@22.15.17)(terser@5.44.0)