diff --git a/.changeset/lifecycle-solid2-migration.md b/.changeset/lifecycle-solid2-migration.md new file mode 100644 index 000000000..e3684409c --- /dev/null +++ b/.changeset/lifecycle-solid2-migration.md @@ -0,0 +1,17 @@ +--- +"@solid-primitives/lifecycle": 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` (was `solid-js/web`) +- `onMount` replaced with `onSettled` — `createIsMounted` now schedules its signal update after the owner settles +- `getListener` replaced with `getObserver` — `isHydrated` uses `getObserver` to detect reactive context +- `sharedConfig.context` replaced with `sharedConfig.hydrating` — `isHydrated` now reads the boolean `hydrating` flag +- `renderToString` in server tests now imported from `@solidjs/web` (was `solid-js/web`) + +No changes to the public API: `createIsMounted`, `isHydrated`, and `onElementConnect` signatures are unchanged. diff --git a/packages/lifecycle/package.json b/packages/lifecycle/package.json index 4796f9260..68379ca61 100644 --- a/packages/lifecycle/package.json +++ b/packages/lifecycle/package.json @@ -54,9 +54,11 @@ "test:ssr": "pnpm run vitest --mode ssr" }, "peerDependencies": { - "solid-js": "^1.6.12" + "@solidjs/web": "^2.0.0-beta.10", + "solid-js": "^2.0.0-beta.10" }, "devDependencies": { - "solid-js": "^1.9.7" + "@solidjs/web": "2.0.0-beta.10", + "solid-js": "2.0.0-beta.10" } } diff --git a/packages/lifecycle/src/index.ts b/packages/lifecycle/src/index.ts index 630002f8b..b1f4cdf17 100644 --- a/packages/lifecycle/src/index.ts +++ b/packages/lifecycle/src/index.ts @@ -1,12 +1,12 @@ import { type Accessor, createSignal, - getListener, + getObserver, onCleanup, - onMount, + onSettled, sharedConfig, } from "solid-js"; -import { isServer } from "solid-js/web"; +import { isServer } from "@solidjs/web"; /** * @returns a signal accessor that will return a `false` initially, @@ -23,7 +23,7 @@ import { isServer } from "solid-js/web"; export function createIsMounted(): Accessor { if (isServer) return () => false; const [isMounted, setIsMounted] = createSignal(false); - onMount(() => setIsMounted(true)); + onSettled(() => { setIsMounted(true); }); return isMounted; } @@ -39,7 +39,7 @@ export function createIsMounted(): Accessor { * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#isHydrated */ export const isHydrated = (): boolean => - !isServer && (!sharedConfig.context || (!!getListener() && createIsMounted()())); + !isServer && (!sharedConfig.hydrating || (!!getObserver() && createIsMounted()())); /** * Calls the {@link fn} callback when the {@link el} is connected to the DOM. diff --git a/packages/lifecycle/test/index.test.ts b/packages/lifecycle/test/index.test.ts index 20098018c..19f76c07e 100644 --- a/packages/lifecycle/test/index.test.ts +++ b/packages/lifecycle/test/index.test.ts @@ -1,20 +1,19 @@ import { describe, test, expect } from "vitest"; -import { createEffect, createRoot } from "solid-js"; +import { createRoot, flush } from "solid-js"; import { createIsMounted, isHydrated } from "../src/index.js"; describe("createIsMounted", () => { test("createIsMounted", () => { - createRoot(dispose => { - const isMounted = createIsMounted(); + let isMounted!: () => boolean; + const dispose = createRoot(d => { + isMounted = createIsMounted(); expect(isMounted()).toBe(false); - - createEffect(() => { - expect(isMounted()).toBe(true); - dispose(); - }); + return d; }); - expect(createIsMounted()()).toBe(true); + flush(); + expect(isMounted()).toBe(true); + dispose(); }); }); diff --git a/packages/lifecycle/test/server.test.ts b/packages/lifecycle/test/server.test.ts index 127bde9bb..d301ac69e 100644 --- a/packages/lifecycle/test/server.test.ts +++ b/packages/lifecycle/test/server.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect } from "vitest"; import { createRoot } from "solid-js"; import { createIsMounted, isHydrated } from "../src/index.js"; -import { renderToString } from "solid-js/web"; +import { renderToString } from "@solidjs/web"; describe("createIsMounted", () => { test("createIsMounted", () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70787571b..2205d1f18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -517,9 +517,12 @@ importers: packages/lifecycle: devDependencies: + '@solidjs/web': + specifier: 2.0.0-beta.10 + version: 2.0.0-beta.10(solid-js@2.0.0-beta.10) solid-js: - specifier: ^1.9.7 - version: 1.9.7 + specifier: 2.0.0-beta.10 + version: 2.0.0-beta.10 packages/list: devDependencies: