From 607d43c18c427a0ee48cab7679bba56207f8a5c2 Mon Sep 17 00:00:00 2001 From: David Di Biase <1168397+davedbase@users.noreply.github.com> Date: Mon, 4 May 2026 11:04:39 -0400 Subject: [PATCH] Ported to Solid 2.0 beta 10 --- .changeset/date-solid2-migration.md | 16 ++ packages/date/README.md | 4 + packages/date/package.json | 8 +- packages/date/src/primitives.ts | 55 ++++--- packages/date/src/types.ts | 5 +- packages/date/test/date-difference.test.ts | 175 +++++++++++---------- packages/date/test/date-now.test.ts | 34 ++-- packages/date/test/server.test.ts | 54 +++++++ packages/date/tsconfig.json | 3 - pnpm-lock.yaml | 40 ++++- 10 files changed, 261 insertions(+), 133 deletions(-) create mode 100644 .changeset/date-solid2-migration.md create mode 100644 packages/date/test/server.test.ts diff --git a/.changeset/date-solid2-migration.md b/.changeset/date-solid2-migration.md new file mode 100644 index 000000000..d588b98fa --- /dev/null +++ b/.changeset/date-solid2-migration.md @@ -0,0 +1,16 @@ +--- +"@solid-primitives/date": major +--- + +Migrate to Solid.js v2.0 (beta.10) + +## Breaking Changes + +**Peer dependencies**: `solid-js@^2.0.0-beta.10` and `@solidjs/web@^2.0.0-beta.10` are now required. + +- `isServer` is now imported from `@solidjs/web` (not `solid-js/web`) +- `createStore` is now imported from `solid-js` (not `solid-js/store`) +- `@solid-primitives/timer` and `@solid-primitives/memo` dependencies removed; `TimeoutSource` type is now defined locally +- `createDateNow`: `createEffect` converted to split `(compute, apply)` form required by Solid 2.0; cleanup returned from apply phase instead of `onCleanup` +- `createCountdown`: `createComputed` (removed in Solid 2.0) replaced with `createRenderEffect(compute, apply)` +- `createDate`: `createWritableMemo` (removed in Solid 2.0) replaced with `createSignal(fn)` overload diff --git a/packages/date/README.md b/packages/date/README.md index 2d98f72b0..7050c7335 100644 --- a/packages/date/README.md +++ b/packages/date/README.md @@ -25,8 +25,12 @@ Collection of reactive primitives and utility functions, providing easier ways t npm install @solid-primitives/date # or yarn add @solid-primitives/date +# or +pnpm add @solid-primitives/date ``` +**Peer dependencies:** `solid-js@^2.0.0-beta.10` and `@solidjs/web@^2.0.0-beta.10` + ## Reactive Primitives: ### `createDate` diff --git a/packages/date/package.json b/packages/date/package.json index d87f25ece..04f3c2606 100644 --- a/packages/date/package.json +++ b/packages/date/package.json @@ -54,17 +54,17 @@ "primitives" ], "devDependencies": { - "@solid-primitives/event-listener": "workspace:^", + "@solidjs/web": "2.0.0-beta.10", "date-fns": "^2.30.0", - "solid-js": "^1.9.7" + "solid-js": "2.0.0-beta.10" }, "dependencies": { - "@solid-primitives/memo": "workspace:^", "@solid-primitives/timer": "workspace:^", "@solid-primitives/utils": "workspace:^" }, "peerDependencies": { - "solid-js": "^1.6.12" + "@solidjs/web": "^2.0.0-beta.10", + "solid-js": "^2.0.0-beta.10" }, "typesVersions": {} } diff --git a/packages/date/src/primitives.ts b/packages/date/src/primitives.ts index e2e1b74b6..e92ea8327 100644 --- a/packages/date/src/primitives.ts +++ b/packages/date/src/primitives.ts @@ -1,8 +1,14 @@ -import { access, type MaybeAccessor, accessWith } from "@solid-primitives/utils"; -import { createWritableMemo } from "@solid-primitives/memo"; -import { createPolled, type TimeoutSource } from "@solid-primitives/timer"; -import { type Accessor, createComputed, createMemo, createSignal } from "solid-js"; -import { createStore, type Store } from "solid-js/store"; +import { access, type MaybeAccessor, accessWith, noop } from "@solid-primitives/utils"; +import { isServer } from "@solidjs/web"; +import { + type Accessor, + createEffect, + createMemo, + createRenderEffect, + createSignal, + createStore, + type Store, +} from "solid-js"; import { DEFAULT_MESSAGES, HOUR, MINUTE } from "./variables.js"; import { formatDate, @@ -15,8 +21,9 @@ import type { Countdown, DateInit, DateSetter, - TimeAgoOptions, GetUpdateInterval, + TimeAgoOptions, + TimeoutSource, } from "./types.js"; /** @@ -26,8 +33,8 @@ import type { * @returns [`Date` signal, setter function] */ export const createDate = (init: MaybeAccessor): [Accessor, DateSetter] => { - const [date, setDate] = createWritableMemo(() => getDate(access(init))); - const setter: DateSetter = input => setDate(prev => getDate(accessWith(input, prev))); + const [date, setDate] = createSignal(() => getDate(access(init))); + const setter: DateSetter = input => setDate((prev: Date) => getDate(accessWith(input, prev))); return [date, setter]; }; @@ -56,17 +63,26 @@ export const createDate = (init: MaybeAccessor): [Accessor, Date export function createDateNow( interval: TimeoutSource = MINUTE / 2, ): [Accessor, VoidFunction] { - const [track, trigger] = createSignal(undefined, { equals: false }); - const memo = createPolled( - () => { - track(); - return new Date(); + if (isServer) { + const d = new Date(); + return [() => d, noop]; + } + + const [now, setNow] = createSignal(new Date(), { + equals: (a, b) => a.getTime() === b.getTime(), + }); + const update = () => setNow(new Date()); + + createEffect( + () => (typeof interval === "function" ? interval() : interval), + ms => { + if (ms === false) return; + const id = setInterval(update, ms); + return () => clearInterval(id); }, - interval, - undefined, - { equals: (a, b) => a.getTime() === b.getTime() }, ); - return [memo, trigger]; + + return [now, update]; } /** @@ -213,7 +229,10 @@ export function createCountdown( if (b !== undefined) difference = createTimeDifference(a, b)[0]; else difference = a as Accessor; const [countdown, setCountdown] = createStore(getCountdown(difference())); - createComputed(() => setCountdown(getCountdown(difference()))); + createRenderEffect( + () => difference(), + diff => setCountdown(getCountdown(diff)), + ); return countdown; } diff --git a/packages/date/src/types.ts b/packages/date/src/types.ts index 8e6786341..a59ec1e64 100644 --- a/packages/date/src/types.ts +++ b/packages/date/src/types.ts @@ -1,4 +1,7 @@ -import { type TimeoutSource } from "@solid-primitives/timer"; +import type { TimeoutSource } from "@solid-primitives/timer"; +import type { Accessor } from "solid-js"; + +export type { TimeoutSource }; export type MessageFormatter = (value: T, isPast: boolean) => string; export type RelativeFormatter = (now: Date, target: Date, diff: number) => string; diff --git a/packages/date/test/date-difference.test.ts b/packages/date/test/date-difference.test.ts index 32bd7d2fc..ff75735e4 100644 --- a/packages/date/test/date-difference.test.ts +++ b/packages/date/test/date-difference.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { createRoot, createSignal } from "solid-js"; +import { createRoot, createSignal, flush } from "solid-js"; import { createTimeAgo, RelativeFormatMessages, @@ -13,43 +13,50 @@ import { describe("createTimeAgo", () => { it("formats timeago correctly", () => { - createRoot(dispose => { - const [date, setDate] = createSignal(Date.now()); - const [timeago] = createTimeAgo(date, { - interval: 0, - }); + const [date, setDate] = createSignal(Date.now()); - expect(timeago()).toBe("just now"); + const { timeago, dispose } = createRoot(dispose => { + const [timeago] = createTimeAgo(date, { interval: 0 }); + return { timeago, dispose }; + }); - setDate(p => p - 3 * MINUTE); - expect(timeago()).toBe("3 minutes ago"); + expect(timeago()).toBe("just now"); - setDate(p => p - 2 * HOUR); - expect(timeago()).toBe("2 hours ago"); + setDate(p => p - 3 * MINUTE); + flush(); + expect(timeago()).toBe("3 minutes ago"); - setDate(p => p + 2 * WEEK); - expect(timeago()).toBe("in 2 weeks"); + setDate(p => p - 2 * HOUR); + flush(); + expect(timeago()).toBe("2 hours ago"); - setDate(p => p + 2 * MONTH); - expect(timeago()).toBe("in 2 months"); + setDate(p => p + 2 * WEEK); + flush(); + expect(timeago()).toBe("in 2 weeks"); - setDate(p => p - YEAR - 2 * MONTH); - expect(timeago()).toBe("last year"); + setDate(p => p + 2 * MONTH); + flush(); + expect(timeago()).toBe("in 2 months"); - setDate(p => p - YEAR); - expect(timeago()).toBe("2 years ago"); + setDate(p => p - YEAR - 2 * MONTH); + flush(); + expect(timeago()).toBe("last year"); - dispose(); - }); + setDate(p => p - YEAR); + flush(); + expect(timeago()).toBe("2 years ago"); + + dispose(); }); it("custom relative formatter", () => { - createRoot(dispose => { - const [date, setDate] = createSignal(Date.now()); + const [date, setDate] = createSignal(Date.now()); + + let captured_target: Date | undefined; + let captured_now: Date | undefined; + let captured_diff: number | undefined; - let captured_target; - let captured_now; - let captured_diff; + const { timeago, target, now, dispose } = createRoot(dispose => { const [timeago, { target, now }] = createTimeAgo(date, { interval: 0, relativeFormatter: (now, target, diff) => { @@ -59,28 +66,30 @@ describe("createTimeAgo", () => { return "relative"; }, }); + return { timeago, target, now, dispose }; + }); - expect(timeago(), "'now' should still be 'just now'").toBe("just now"); + expect(timeago(), "'now' should still be 'just now'").toBe("just now"); - setDate(p => p - 3 * MINUTE); - expect(timeago(), "custom formatter was correctly applied").toBe("relative"); + setDate(p => p - 3 * MINUTE); + flush(); + expect(timeago(), "custom formatter was correctly applied").toBe("relative"); - expect(target(), "captured target should match the returned one").toBe(captured_target); - expect(now(), "captured now should match the returned one").toBe(captured_now); - expect( - captured_diff, - "captured diff should be the same as calculated from now() and target()", - ).toBe(target().getTime() - now().getTime()); + expect(target(), "captured target should match the returned one").toBe(captured_target); + expect(now(), "captured now should match the returned one").toBe(captured_now); + expect( + captured_diff, + "captured diff should be the same as calculated from now() and target()", + ).toBe(target().getTime() - now().getTime()); - dispose(); - }); + dispose(); }); it("custom absolute formatter", () => { - createRoot(dispose => { - const [date, setDate] = createSignal(Date.now()); + const [date, setDate] = createSignal(Date.now()); - let capturedDate; + let capturedDate: Date | undefined; + const { timeago, target, dispose } = createRoot(dispose => { const [timeago, { target }] = createTimeAgo(date, { interval: 0, max: HOUR, @@ -89,60 +98,68 @@ describe("createTimeAgo", () => { return "absolute"; }, }); + return { timeago, target, dispose }; + }); - expect(timeago()).toBe("just now"); + expect(timeago()).toBe("just now"); - setDate(p => p - 3 * MINUTE); - expect(timeago()).toBe("3 minutes ago"); + setDate(p => p - 3 * MINUTE); + flush(); + expect(timeago()).toBe("3 minutes ago"); - setDate(p => p - 2 * HOUR); - expect(timeago(), "absolute formatter should be appled").toBe("absolute"); - expect(capturedDate, "captured date should math the target()").toBe(target()); + setDate(p => p - 2 * HOUR); + flush(); + expect(timeago(), "absolute formatter should be applied").toBe("absolute"); + expect(capturedDate, "captured date should match the target()").toBe(target()); - dispose(); - }); + dispose(); }); it("custom messages", () => { - createRoot(dispose => { - const [date, setDate] = createSignal(Date.now()); - - const messages: Partial = { - justNow: "NOW", - future: n => `in the next ${n}`, - day: (n, past) => `${n} DAY${n > 1 ? "S" : ""}`, - week: (n, past) => (n === 1 ? "week" : `${n} weeks`), - }; - - const [timeago] = createTimeAgo(date, { - interval: 0, - messages, - }); + const [date, setDate] = createSignal(Date.now()); + + const messages: Partial = { + justNow: "NOW", + future: n => `in the next ${n}`, + day: (n, _past) => `${n} DAY${n > 1 ? "S" : ""}`, + week: (n, _past) => (n === 1 ? "week" : `${n} weeks`), + }; + + const { timeago, dispose } = createRoot(dispose => { + const [timeago] = createTimeAgo(date, { interval: 0, messages }); + return { timeago, dispose }; + }); - expect(timeago()).toBe("NOW"); + expect(timeago()).toBe("NOW"); - setDate(p => p - 3 * MINUTE); - expect(timeago()).toBe("3 minutes ago"); + setDate(p => p - 3 * MINUTE); + flush(); + expect(timeago()).toBe("3 minutes ago"); - setDate(p => p - 2 * DAY); - expect(timeago()).toBe("2 DAYS ago"); + setDate(p => p - 2 * DAY); + flush(); + expect(timeago()).toBe("2 DAYS ago"); - setDate(p => p + 1 * WEEK + 2 * DAY); - expect(timeago()).toBe("in the next week"); + setDate(p => p + 1 * WEEK + 2 * DAY); + flush(); + expect(timeago()).toBe("in the next week"); - setDate(p => p + 1 * WEEK); - expect(timeago()).toBe("in the next 2 weeks"); + setDate(p => p + 1 * WEEK); + flush(); + expect(timeago()).toBe("in the next 2 weeks"); - setDate(p => p + 2 * MONTH); - expect(timeago()).toBe("in the next 2 months"); + setDate(p => p + 2 * MONTH); + flush(); + expect(timeago()).toBe("in the next 2 months"); - setDate(p => p - YEAR - 2 * MONTH); - expect(timeago()).toBe("last year"); + setDate(p => p - YEAR - 2 * MONTH); + flush(); + expect(timeago()).toBe("last year"); - setDate(p => p - YEAR); - expect(timeago()).toBe("2 years ago"); + setDate(p => p - YEAR); + flush(); + expect(timeago()).toBe("2 years ago"); - dispose(); - }); + dispose(); }); }); diff --git a/packages/date/test/date-now.test.ts b/packages/date/test/date-now.test.ts index 8968f643a..6171d582e 100644 --- a/packages/date/test/date-now.test.ts +++ b/packages/date/test/date-now.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, afterAll, beforeEach, vi, beforeAll } from "vitest"; -import { createEffect, createRoot } from "solid-js"; +import { createRoot, flush } from "solid-js"; import { createDateNow } from "../src/index.js"; beforeAll(() => { @@ -15,7 +15,7 @@ afterAll(() => { }); describe("createDateNow", () => { - it("returns an signal an update function", () => { + it("returns a signal and update function", () => { const test_now = Date.now(); const { dispose, now } = createRoot(dispose => { @@ -30,27 +30,18 @@ describe("createDateNow", () => { }); it("autoupdates", () => { - const captured: number[] = []; - - const dispose = createRoot(dispose => { + const { now, dispose } = createRoot(dispose => { const [now] = createDateNow(100); - - createEffect(() => { - captured.push(now().getTime()); - }); - - return dispose; + return { now, dispose }; }); - expect(captured.length).toBe(1); + flush(); // run initial effect and set up interval + const initial = now().getTime(); vi.advanceTimersByTime(150); + flush(); // commit signal write from interval callback - expect(captured.length).toBe(2); - expect( - captured[1]! - captured[0]! >= 100, - "the newer timestamp should have bigger value", - ).toBeTruthy(); + expect(now().getTime() > initial, "the newer timestamp should have bigger value").toBeTruthy(); dispose(); }); @@ -61,12 +52,14 @@ describe("createDateNow", () => { return { now, update, dispose }; }); + flush(); const time = now().getTime(); vi.advanceTimersByTime(150); - expect(time, "the time shouldn't update").toBe(now().getTime()); + expect(time, "the time shouldn't update without calling update()").toBe(now().getTime()); update(); + flush(); expect( now().getTime(), "the timestamp after update() should have bigger value", @@ -81,10 +74,11 @@ describe("createDateNow", () => { return { now, dispose }; }); + flush(); // set up interval const time = now().getTime(); - dispose(); + dispose(); // cleanup clears the interval vi.advanceTimersByTime(150); - expect(time, "the time shouldn't update").toBe(now().getTime()); + expect(time, "the time shouldn't update after dispose").toBe(now().getTime()); }); }); diff --git a/packages/date/test/server.test.ts b/packages/date/test/server.test.ts new file mode 100644 index 000000000..f55ff7a8c --- /dev/null +++ b/packages/date/test/server.test.ts @@ -0,0 +1,54 @@ +import { describe, expect, it } from "vitest"; +import { createRoot } from "solid-js"; +import { + createDate, + createDateNow, + createTimeAgo, + createTimeDifference, + createCountdown, + MINUTE, +} from "../src/index.js"; + +describe("SSR", () => { + it("createDateNow returns a stable date on server", () => { + const [now, update] = createDateNow(); + const initial = now().getTime(); + update(); // should be a no-op on server + expect(now().getTime()).toBe(initial); + }); + + it("createDate works on server", () => { + const ts = Date.now() - 5 * MINUTE; + const [date] = createDate(ts); + expect(date()).toBeInstanceOf(Date); + expect(date().getTime()).toBe(ts); + }); + + it("createTimeDifference works on server", () => { + createRoot(dispose => { + const past = Date.now() - 3 * MINUTE; + const [diff] = createTimeDifference(past, Date.now()); + expect(Math.abs(diff())).toBeGreaterThan(0); + dispose(); + }); + }); + + it("createTimeAgo works on server", () => { + createRoot(dispose => { + const past = Date.now() - 3 * MINUTE; + const [ago] = createTimeAgo(past); + expect(typeof ago()).toBe("string"); + expect(ago().length).toBeGreaterThan(0); + dispose(); + }); + }); + + it("createCountdown works on server", () => { + createRoot(dispose => { + const future = Date.now() + 65 * 1000; + const countdown = createCountdown(Date.now(), future); + expect(typeof countdown.minutes).toBe("number"); + dispose(); + }); + }); +}); diff --git a/packages/date/tsconfig.json b/packages/date/tsconfig.json index 922953422..ac62a17d9 100644 --- a/packages/date/tsconfig.json +++ b/packages/date/tsconfig.json @@ -6,9 +6,6 @@ "rootDir": "src" }, "references": [ - { - "path": "../memo" - }, { "path": "../timer" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 726871879..bc5a66218 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -217,9 +217,6 @@ importers: packages/date: dependencies: - '@solid-primitives/memo': - specifier: workspace:^ - version: link:../memo '@solid-primitives/timer': specifier: workspace:^ version: link:../timer @@ -227,15 +224,15 @@ importers: specifier: workspace:^ version: link:../utils devDependencies: - '@solid-primitives/event-listener': - specifier: workspace:^ - version: link:../event-listener + '@solidjs/web': + specifier: 2.0.0-beta.10 + version: 2.0.0-beta.10(solid-js@2.0.0-beta.10) date-fns: specifier: ^2.30.0 version: 2.30.0 solid-js: - specifier: ^1.9.7 - version: 1.9.7 + specifier: 2.0.0-beta.10 + version: 2.0.0-beta.10 packages/db-store: dependencies: @@ -2366,36 +2363,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.3.0': resolution: {integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==} @@ -2506,36 +2509,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} @@ -2672,56 +2681,67 @@ packages: resolution: {integrity: sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.43.0': resolution: {integrity: sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.43.0': resolution: {integrity: sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.43.0': resolution: {integrity: sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.43.0': resolution: {integrity: sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.43.0': resolution: {integrity: sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.43.0': resolution: {integrity: sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.43.0': resolution: {integrity: sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.43.0': resolution: {integrity: sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.43.0': resolution: {integrity: sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.43.0': resolution: {integrity: sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.43.0': resolution: {integrity: sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==} @@ -5208,24 +5228,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}