From 9205393eee80235dfc196cc54795a48ac89d23c2 Mon Sep 17 00:00:00 2001 From: Andres J Date: Fri, 6 Feb 2026 15:54:40 -0600 Subject: [PATCH 1/2] feat(solid-effect-atom): require @effect-atom/atom as peer (^0.5.0); add dev dep via catalog; update workspace catalog --- README.md | 19 ++++++++++--------- packages/solid/effect-atom/package.json | 6 +++--- pnpm-lock.yaml | 23 +++++++++++------------ pnpm-workspace.yaml | 2 +- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 57927234..9008a77a 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,16 @@ Monorepo of utilities for integrating [Effect](https://effect.website/) with dif ## Packages -| Package | Version | Documentation | Description | -| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------- | -| [@effectify/solid-query](https://www.npmjs.com/package/@effectify/solid-query) | [![npm version](https://img.shields.io/npm/v/@effectify/solid-query.svg)](https://www.npmjs.com/package/@effectify/solid-query) | [Docs](./packages/solid/query/README.md) | Integration of Effect with TanStack Query for Solid.js | -| [@effectify/react-query](https://www.npmjs.com/package/@effectify/react-query) | [![npm version](https://img.shields.io/npm/v/@effectify/react-query.svg)](https://www.npmjs.com/package/@effectify/react-query) | [Docs](./packages/react/query/README.md) | Integration of Effect with TanStack Query for React | -| [@effectify/react-router](https://www.npmjs.com/package/@effectify/react-router) | [![npm version](https://img.shields.io/npm/v/@effectify/react-router.svg)](https://www.npmjs.com/package/@effectify/react-router) | [Docs](./packages/react/router/README.md) | Integration of React Router with Effect for React applications | -| [@effectify/react-remix](https://www.npmjs.com/package/@effectify/react-remix) | [![npm version](https://img.shields.io/npm/v/@effectify/react-remix.svg)](https://www.npmjs.com/package/@effectify/react-remix) | [Docs](./packages/react/remix/README.md) | Integration of Remix with Effect for React applications | -| [@effectify/node-better-auth](https://www.npmjs.com/package/@effectify/node-better-auth) | [![npm version](https://img.shields.io/npm/v/@effectify/node-better-auth.svg)](https://www.npmjs.com/package/@effectify/node-better-auth) | [Docs](./packages/node/better-auth/README.md) | Integration of better-auth with Effect for Node.js applications | -| [@effectify/react-router-better-auth](https://www.npmjs.com/package/@effectify/react-router-better-auth) | [![npm version](https://img.shields.io/npm/v/@effectify/react-router-better-auth.svg)](https://www.npmjs.com/package/@effectify/react-router-better-auth) | [Docs](./packages/react/router-better-auth/) | Integration of React Router + better-auth with Effect for React applications | -| [@effectify/prisma](https://www.npmjs.com/package/@effectify/prisma) | [![npm version](https://img.shields.io/npm/v/@effectify/prisma.svg)](https://www.npmjs.com/package/@effectify/prisma) | [Docs](./packages/prisma/README.md) | Prisma generator and runtime utilities for Effect | +| Package | Version | Documentation | Description | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------- | +| [@effectify/solid-query](https://www.npmjs.com/package/@effectify/solid-query) | [![npm version](https://img.shields.io/npm/v/@effectify/solid-query.svg)](https://www.npmjs.com/package/@effectify/solid-query) | [Docs](./packages/solid/query/README.md) | Integration of Effect with TanStack Query for Solid.js | +| [@effectify/react-query](https://www.npmjs.com/package/@effectify/react-query) | [![npm version](https://img.shields.io/npm/v/@effectify/react-query.svg)](https://www.npmjs.com/package/@effectify/react-query) | [Docs](./packages/react/query/README.md) | Integration of Effect with TanStack Query for React | +| [@effectify/react-router](https://www.npmjs.com/package/@effectify/react-router) | [![npm version](https://img.shields.io/npm/v/@effectify/react-router.svg)](https://www.npmjs.com/package/@effectify/react-router) | [Docs](./packages/react/router/README.md) | Integration of React Router with Effect for React applications | +| [@effectify/react-remix](https://www.npmjs.com/package/@effectify/react-remix) | [![npm version](https://img.shields.io/npm/v/@effectify/react-remix.svg)](https://www.npmjs.com/package/@effectify/react-remix) | [Docs](./packages/react/remix/README.md) | Integration of Remix with Effect for React applications | +| [@effectify/node-better-auth](https://www.npmjs.com/package/@effectify/node-better-auth) | [![npm version](https://img.shields.io/npm/v/@effectify/node-better-auth.svg)](https://www.npmjs.com/package/@effectify/node-better-auth) | [Docs](./packages/node/better-auth/README.md) | Integration of better-auth with Effect for Node.js applications | +| [@effectify/react-router-better-auth](https://www.npmjs.com/package/@effectify/react-router-better-auth) | [![npm version](https://img.shields.io/npm/v/@effectify/react-router-better-auth.svg)](https://www.npmjs.com/package/@effectify/react-router-better-auth) | [Docs](./packages/react/router-better-auth/) | Integration of React Router + better-auth with Effect for React applications | +| [@effectify/prisma](https://www.npmjs.com/package/@effectify/prisma) | [![npm version](https://img.shields.io/npm/v/@effectify/prisma.svg)](https://www.npmjs.com/package/@effectify/prisma) | [Docs](./packages/prisma/README.md) | Prisma generator and runtime utilities for Effect | +| [@effectify/solid-effect-atom](https://www.npmjs.com/package/@effectify/solid-effect-atom) | [![npm version](https://img.shields.io/npm/v/@effectify/solid-effect-atom.svg)](https://www.npmjs.com/package/@effectify/solid-effect-atom) | [Docs](./packages/solid/effect-atom/README.md) | Reactive toolkit for Effect with SolidJS | ## Development diff --git a/packages/solid/effect-atom/package.json b/packages/solid/effect-atom/package.json index f66fd275..2508f6ea 100644 --- a/packages/solid/effect-atom/package.json +++ b/packages/solid/effect-atom/package.json @@ -35,6 +35,7 @@ }, "sideEffects": [], "devDependencies": { + "@effect-atom/atom": "catalog:", "@solidjs/testing-library": "catalog:", "@testing-library/jest-dom": "catalog:", "@types/node": "catalog:", @@ -45,12 +46,11 @@ "vite-plugin-solid": "catalog:" }, "peerDependencies": { + "@effect-atom/atom": "^0.5.0", "effect": "^3.19.16", "solid-js": "^1.9.11" }, - "dependencies": { - "@effect-atom/atom": "catalog:" - }, + "dependencies": {}, "packageManager": "pnpm@10.14.0", "optionalDependencies": {} } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f17eee6f..ec890e6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ catalogs: specifier: ^0.95.15 version: 0.95.15 '@effect-atom/atom': - specifier: 0.4.3 - version: 0.4.3 + specifier: 0.5.0 + version: 0.5.0 '@effect/build-utils': specifier: 0.8.9 version: 0.8.9 @@ -1165,11 +1165,10 @@ importers: version: 13.15.23 packages/solid/effect-atom: - dependencies: + devDependencies: '@effect-atom/atom': specifier: 'catalog:' - version: 0.4.3(@effect/experimental@0.58.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(@effect/platform@0.94.0(effect@3.19.16))(@effect/rpc@0.73.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(effect@3.19.16) - devDependencies: + version: 0.5.0(@effect/experimental@0.58.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(@effect/platform@0.94.0(effect@3.19.16))(@effect/rpc@0.73.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(effect@3.19.16) '@solidjs/testing-library': specifier: 'catalog:' version: 0.8.10(solid-js@1.9.11) @@ -2203,13 +2202,13 @@ packages: cpu: [x64] os: [win32] - '@effect-atom/atom@0.4.3': - resolution: {integrity: sha512-0XOngJ+oDuJW7/Hgt09Kl8QunF1bGlEtV/K9hMB1MmQPUGb+ZtxfJwZkBeXjMPEL1Lgm04TDBlqB8+qgHz+y0w==} + '@effect-atom/atom@0.5.0': + resolution: {integrity: sha512-qg6Qpf+ESi63taFJrufPtYDHghRLXxAte/xgpKqN+m7T6I3Lw1jgiNxR4AJeNG7f2UOkpmPhA8AYdWMgaUU61w==} peerDependencies: - '@effect/experimental': ^0.57.0 - '@effect/platform': ^0.93.0 - '@effect/rpc': ^0.72.1 - effect: ^3.19.0 + '@effect/experimental': ^0.58.0 + '@effect/platform': ^0.94.2 + '@effect/rpc': ^0.73.0 + effect: ^3.19.15 '@effect/build-utils@0.8.9': resolution: {integrity: sha512-wzunjr8pyNjghLueo5ePQD7vaM3qeO2H/jF57hNYbQM/rxfipBWYKukoqWyp04qGZ+V86FyOHb8zD5+PMZvH2A==} @@ -14001,7 +14000,7 @@ snapshots: '@dprint/win32-x64@0.51.1': optional: true - '@effect-atom/atom@0.4.3(@effect/experimental@0.58.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(@effect/platform@0.94.0(effect@3.19.16))(@effect/rpc@0.73.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(effect@3.19.16)': + '@effect-atom/atom@0.5.0(@effect/experimental@0.58.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(@effect/platform@0.94.0(effect@3.19.16))(@effect/rpc@0.73.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16))(effect@3.19.16)': dependencies: '@effect/experimental': 0.58.0(@effect/platform@0.94.0(effect@3.19.16))(effect@3.19.16) '@effect/platform': 0.94.0(effect@3.19.16) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6fdd13a9..e96cb989 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -12,7 +12,7 @@ catalog: "@corvu/drawer": 0.2.4 "@dprint/formatter": ^0.5.1 "@dprint/typescript": ^0.95.15 - "@effect-atom/atom": 0.4.3 + "@effect-atom/atom": 0.5.0 "@effect/build-utils": 0.8.9 "@effect/cli": 0.73.2 "@effect/experimental": 0.58.0 From 2abe2c04a91666c5e3421d3730a82edf23321c8b Mon Sep 17 00:00:00 2001 From: Andres J Date: Fri, 6 Feb 2026 16:02:55 -0600 Subject: [PATCH 2/2] fix(solid-effect-atom): adapt hydration types to @effect-atom/atom 0.5.0; move @effect-atom/atom to peer (^0.5.0) and dev via catalog chore(workspace): bump @effect-atom/atom catalog to 0.5.0 --- packages/solid/effect-atom/src/solid-hydration.ts | 4 ++-- packages/solid/effect-atom/src/ssr-utils.ts | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/solid/effect-atom/src/solid-hydration.ts b/packages/solid/effect-atom/src/solid-hydration.ts index aa33aecb..6cc630b3 100644 --- a/packages/solid/effect-atom/src/solid-hydration.ts +++ b/packages/solid/effect-atom/src/solid-hydration.ts @@ -13,7 +13,7 @@ import { useRegistry } from "./context.js" * @since 1.0.0 * @category utils */ -function isHydrationDataNewer(existingNode: any, dehydratedAtom: Hydration.DehydratedAtom): boolean { +function isHydrationDataNewer(existingNode: any, dehydratedAtom: Hydration.DehydratedAtomValue): boolean { try { const currentValue = existingNode.value() @@ -74,7 +74,7 @@ export function HydrationBoundary(props: HydrationBoundaryProps) { const hydrationQueue = createMemo(() => { const state = props.state if (state) { - const dehydratedAtoms = Array.from(state) + const dehydratedAtoms = Hydration.toValues(Array.from(state)) const nodes = registry.getNodes() const newDehydratedAtoms: Array = [] diff --git a/packages/solid/effect-atom/src/ssr-utils.ts b/packages/solid/effect-atom/src/ssr-utils.ts index 6a12212c..358a2be9 100644 --- a/packages/solid/effect-atom/src/ssr-utils.ts +++ b/packages/solid/effect-atom/src/ssr-utils.ts @@ -127,12 +127,13 @@ export const preloadAtoms = ( yield* Effect.all(preloadEffects, { concurrency: "unbounded" }) // Dehydrate the registry state - const dehydratedState = Array.from(Hydration.dehydrate(registry)) + const dehydratedStateRaw = Array.from(Hydration.dehydrate(registry)) + const dehydratedStateValues = Hydration.toValues(dehydratedStateRaw) // Filter out errors if not including them const finalDehydratedState = includeErrors - ? dehydratedState - : dehydratedState.filter((atom) => !errors.some((error) => error.atomKey === atom.key)) + ? dehydratedStateValues + : dehydratedStateValues.filter((atom) => !errors.some((error) => error.atomKey === atom.key)) return { dehydratedState: finalDehydratedState, @@ -183,7 +184,7 @@ export const createServerRegistry = ( key, value, dehydratedAt: Date.now(), - })) + })) as unknown as Array Hydration.hydrate(registry, dehydratedAtoms) }