From 2fadb78f1df17a9f124e73b7b34f3ff73078f6b5 Mon Sep 17 00:00:00 2001 From: Francois Best Date: Thu, 12 Dec 2024 22:43:16 +0100 Subject: [PATCH 1/8] feat: Add temporary dedicated server features imports This allows using the serializer and the parsers in server-side code without depending on React for the cache, as would be the case if importing from `nuqs/server`. Closes #804. See also discussion #717. --- packages/nuqs/package.json | 19 ++++++++++++++++++- packages/nuqs/server/cache.d.ts | 7 +++++++ packages/nuqs/server/parsers.d.ts | 7 +++++++ packages/nuqs/server/serializer.d.ts | 7 +++++++ packages/nuqs/src/index.server.cache.ts | 2 ++ packages/nuqs/src/index.server.parsers.ts | 2 ++ packages/nuqs/src/index.server.serializer.ts | 2 ++ packages/nuqs/tsup.config.ts | 5 ++++- 8 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 packages/nuqs/server/cache.d.ts create mode 100644 packages/nuqs/server/parsers.d.ts create mode 100644 packages/nuqs/server/serializer.d.ts create mode 100644 packages/nuqs/src/index.server.cache.ts create mode 100644 packages/nuqs/src/index.server.parsers.ts create mode 100644 packages/nuqs/src/index.server.serializer.ts diff --git a/packages/nuqs/package.json b/packages/nuqs/package.json index fbf08dbbb..aff32147f 100644 --- a/packages/nuqs/package.json +++ b/packages/nuqs/package.json @@ -36,6 +36,9 @@ "dist/", "server.d.ts", "testing.d.ts", + "server/cache.d.ts", + "server/serializer.d.ts", + "server/parsers.d.ts", "adapters/react.d.ts", "adapters/next.d.ts", "adapters/next/app.d.ts", @@ -65,7 +68,21 @@ }, "./testing": { "types": "./dist/testing.d.ts", - "import": "./dist/testing.js", + "import": "./dist/testing.js" + }, + "./server/cache": { + "types": "./dist/server/cache.d.ts", + "import": "./dist/server/cache.js", + "require": "./esm-only.cjs" + }, + "./server/serializer": { + "types": "./dist/server/serializer.d.ts", + "import": "./dist/server/serializer.js", + "require": "./esm-only.cjs" + }, + "./server/parsers": { + "types": "./dist/server/parsers.d.ts", + "import": "./dist/server/parsers.js", "require": "./esm-only.cjs" }, "./adapters/react": { diff --git a/packages/nuqs/server/cache.d.ts b/packages/nuqs/server/cache.d.ts new file mode 100644 index 000000000..814329056 --- /dev/null +++ b/packages/nuqs/server/cache.d.ts @@ -0,0 +1,7 @@ +// This file is needed for projects that have `moduleResolution` set to `node` +// in their tsconfig.json to be able to `import {} from 'nuqs/server/cache'`. +// Other module resolutions strategies will look for the `exports` in `package.json`, +// but with `node`, TypeScript will look for a .d.ts file with that name at the +// root of the package. + +export * from './dist/server/cache' diff --git a/packages/nuqs/server/parsers.d.ts b/packages/nuqs/server/parsers.d.ts new file mode 100644 index 000000000..43a0495b9 --- /dev/null +++ b/packages/nuqs/server/parsers.d.ts @@ -0,0 +1,7 @@ +// This file is needed for projects that have `moduleResolution` set to `node` +// in their tsconfig.json to be able to `import {} from 'nuqs/server/parsers'`. +// Other module resolutions strategies will look for the `exports` in `package.json`, +// but with `node`, TypeScript will look for a .d.ts file with that name at the +// root of the package. + +export * from './dist/server/parsers' diff --git a/packages/nuqs/server/serializer.d.ts b/packages/nuqs/server/serializer.d.ts new file mode 100644 index 000000000..561a67a06 --- /dev/null +++ b/packages/nuqs/server/serializer.d.ts @@ -0,0 +1,7 @@ +// This file is needed for projects that have `moduleResolution` set to `node` +// in their tsconfig.json to be able to `import {} from 'nuqs/server/serializer'`. +// Other module resolutions strategies will look for the `exports` in `package.json`, +// but with `node`, TypeScript will look for a .d.ts file with that name at the +// root of the package. + +export * from './dist/server/serializer' diff --git a/packages/nuqs/src/index.server.cache.ts b/packages/nuqs/src/index.server.cache.ts new file mode 100644 index 000000000..e99679894 --- /dev/null +++ b/packages/nuqs/src/index.server.cache.ts @@ -0,0 +1,2 @@ +export { createSearchParamsCache } from './cache' +export type { HistoryOptions, Nullable, Options, SearchParams } from './defs' diff --git a/packages/nuqs/src/index.server.parsers.ts b/packages/nuqs/src/index.server.parsers.ts new file mode 100644 index 000000000..2fc2d5738 --- /dev/null +++ b/packages/nuqs/src/index.server.parsers.ts @@ -0,0 +1,2 @@ +export type { HistoryOptions, Nullable, Options, SearchParams } from './defs' +export * from './parsers' diff --git a/packages/nuqs/src/index.server.serializer.ts b/packages/nuqs/src/index.server.serializer.ts new file mode 100644 index 000000000..e2c0411d1 --- /dev/null +++ b/packages/nuqs/src/index.server.serializer.ts @@ -0,0 +1,2 @@ +export type { HistoryOptions, Nullable, Options, SearchParams } from './defs' +export { createSerializer } from './serializer' diff --git a/packages/nuqs/tsup.config.ts b/packages/nuqs/tsup.config.ts index 50dddbf1c..1ed1b0c80 100644 --- a/packages/nuqs/tsup.config.ts +++ b/packages/nuqs/tsup.config.ts @@ -35,7 +35,10 @@ const entrypoints = { }, server: { server: 'src/index.server.ts', - testing: 'src/testing.ts' + testing: 'src/testing.ts', + 'server/cache': 'src/index.server.cache.ts', + 'server/parsers': 'src/index.server.parsers.ts', + 'server/serializer': 'src/index.server.serializer.ts' } } From a955b845c128d8defd2a6422548e1a680e06abbc Mon Sep 17 00:00:00 2001 From: Francois Best Date: Sat, 14 Dec 2024 13:11:08 +0100 Subject: [PATCH 2/8] doc: Add new path for the cache feature --- README.md | 12 ++++----- errors/NUQS-500.md | 8 ++---- packages/docs/content/docs/server-side.mdx | 26 +++++++++++-------- .../src/app/(pages)/stats/searchParams.ts | 3 ++- .../(demos)/pagination/searchParams.ts | 2 +- .../next/src/app/app/cache/searchParams.ts | 4 +-- .../e2e/next/src/app/app/push/searchParams.ts | 3 ++- .../app/rewrites/destination/searchParams.ts | 3 ++- packages/nuqs/src/index.server.ts | 6 +++++ packages/nuqs/tests/cache.test-d.ts | 8 ++---- 10 files changed, 39 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index ea44e86f2..715b88d9b 100644 --- a/README.md +++ b/README.md @@ -654,12 +654,9 @@ to do so in a type-safe manner. ```tsx // searchParams.ts -import { - createSearchParamsCache, - parseAsInteger, - parseAsString -} from 'nuqs/server' -// Note: import from 'nuqs/server' to avoid the "use client" directive +import { createSearchParamsCache } from 'nuqs/server/cache' +import { parseAsInteger, parseAsString } from 'nuqs/server' +// Note: import parsers from 'nuqs/server' to avoid the "use client" directive export const searchParamsCache = createSearchParamsCache({ // List your search param keys and associated parsers here: @@ -701,7 +698,8 @@ parser declaration with `useQueryStates` for type-safety in client components: ```tsx // searchParams.ts -import { parseAsFloat, createSearchParamsCache } from 'nuqs/server' +import { parseAsFloat } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const coordinatesParsers = { lat: parseAsFloat.withDefault(45.18), diff --git a/errors/NUQS-500.md b/errors/NUQS-500.md index c04571acc..4eeacf54d 100644 --- a/errors/NUQS-500.md +++ b/errors/NUQS-500.md @@ -22,12 +22,8 @@ Run the `parse` method and feed it the page's `searchParams`: ```tsx // page.tsx -import { - createSearchParamsCache, - parseAsInteger, - parseAsString, - type SearchParams -} from 'nuqs/server' +import { parseAsInteger, parseAsString, type SearchParams } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' const cache = createSearchParamsCache({ q: parseAsString, diff --git a/packages/docs/content/docs/server-side.mdx b/packages/docs/content/docs/server-side.mdx index d5b33625d..037386554 100644 --- a/packages/docs/content/docs/server-side.mdx +++ b/packages/docs/content/docs/server-side.mdx @@ -124,7 +124,7 @@ The loader function will accept the following input types to parse search params ## Cache - This feature is available for Next.js only. + The `next/server/cache` feature is available for Next.js app router only. If you wish to access the searchParams in a deeply nested Server Component @@ -135,12 +135,9 @@ Think of it as a loader combined with a way to propagate the parsed values down the RSC tree, like Context would on the client. ```ts title="searchParams.ts" -import { - createSearchParamsCache, - parseAsInteger, - parseAsString -} from 'nuqs/server' -// Note: import from 'nuqs/server' to avoid the "use client" directive +import { createSearchParamsCache } from 'nuqs/server/cache' +import { parseAsInteger, parseAsString } from 'nuqs/server' +// Note: import parsers from 'nuqs/server' to avoid the "use client" directive export const searchParamsCache = createSearchParamsCache({ // List your search param keys and associated parsers here: @@ -176,6 +173,15 @@ function Results() { } ``` + + The cache feature is also accessible from `nuqs/server` in nuqs@^2, but + will be removed from that import in nuqs@3.0.0. + Please update your imports to `nuqs/server/cache` for a smoother transition. + + This is to allow non-Next.js server code to use the `nuqs/server` import + without having to install React canary for the `cache` function. + + The cache will only be valid for the current page render (see React's [`cache`](https://react.dev/reference/react/cache) function). @@ -183,10 +189,8 @@ Note: the cache only works for **server components**, but you may share your parser declaration with `useQueryStates` for type-safety in client components: ```ts title="searchParams.ts" -import { - parseAsFloat, - createSearchParamsCache -} from 'nuqs/server' +import { parseAsFloat } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const coordinatesParsers = { lat: parseAsFloat.withDefault(45.18), diff --git a/packages/docs/src/app/(pages)/stats/searchParams.ts b/packages/docs/src/app/(pages)/stats/searchParams.ts index f14a0ad06..b1537a080 100644 --- a/packages/docs/src/app/(pages)/stats/searchParams.ts +++ b/packages/docs/src/app/(pages)/stats/searchParams.ts @@ -1,4 +1,5 @@ -import { createSearchParamsCache, parseAsStringLiteral } from 'nuqs/server' +import { parseAsStringLiteral } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const pkgOptions = ['nuqs', 'next-usequerystate', 'both'] as const export const pkgParser = parseAsStringLiteral(pkgOptions).withDefault('both') diff --git a/packages/docs/src/app/playground/(demos)/pagination/searchParams.ts b/packages/docs/src/app/playground/(demos)/pagination/searchParams.ts index 94fe32f48..235500cfe 100644 --- a/packages/docs/src/app/playground/(demos)/pagination/searchParams.ts +++ b/packages/docs/src/app/playground/(demos)/pagination/searchParams.ts @@ -1,9 +1,9 @@ import { - createSearchParamsCache, createSerializer, parseAsInteger, parseAsStringLiteral } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const renderingOptions = ['server', 'client'] as const export type RenderingOptions = (typeof renderingOptions)[number] diff --git a/packages/e2e/next/src/app/app/cache/searchParams.ts b/packages/e2e/next/src/app/app/cache/searchParams.ts index 91ecbe9a1..ec73d6120 100644 --- a/packages/e2e/next/src/app/app/cache/searchParams.ts +++ b/packages/e2e/next/src/app/app/cache/searchParams.ts @@ -1,10 +1,10 @@ import { - createSearchParamsCache, parseAsBoolean, - parseAsInteger, parseAsIndex, + parseAsInteger, parseAsString } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const parsers = { str: parseAsString, diff --git a/packages/e2e/next/src/app/app/push/searchParams.ts b/packages/e2e/next/src/app/app/push/searchParams.ts index 26e0548b2..5de667f15 100644 --- a/packages/e2e/next/src/app/app/push/searchParams.ts +++ b/packages/e2e/next/src/app/app/push/searchParams.ts @@ -1,4 +1,5 @@ -import { createSearchParamsCache, parseAsInteger } from 'nuqs/server' +import { parseAsInteger } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const parser = parseAsInteger.withDefault(0).withOptions({ history: 'push' diff --git a/packages/e2e/next/src/app/app/rewrites/destination/searchParams.ts b/packages/e2e/next/src/app/app/rewrites/destination/searchParams.ts index c1b536be2..cad0729a3 100644 --- a/packages/e2e/next/src/app/app/rewrites/destination/searchParams.ts +++ b/packages/e2e/next/src/app/app/rewrites/destination/searchParams.ts @@ -1,4 +1,5 @@ -import { createSearchParamsCache, parseAsString } from 'nuqs/server' +import { parseAsString } from 'nuqs/server' +import { createSearchParamsCache } from 'nuqs/server/cache' export const searchParams = { injected: parseAsString.withDefault('null'), diff --git a/packages/nuqs/src/index.server.ts b/packages/nuqs/src/index.server.ts index 66bdf5c0e..c844c2b5a 100644 --- a/packages/nuqs/src/index.server.ts +++ b/packages/nuqs/src/index.server.ts @@ -1,3 +1,9 @@ +/** @deprecated Import createSearchParamsCache from 'nuqs/server/cache' instead. + * + * This export will be removed from 'nuqs/server' in nuqs@3.0.0, + * to allow non-Next.js server code to use the parsers, serializeres and other + * server-side utilities without depending on React canary for the `cache` function. + */ export { createSearchParamsCache } from './cache' export type { HistoryOptions, diff --git a/packages/nuqs/tests/cache.test-d.ts b/packages/nuqs/tests/cache.test-d.ts index 94acd3646..a420deff0 100644 --- a/packages/nuqs/tests/cache.test-d.ts +++ b/packages/nuqs/tests/cache.test-d.ts @@ -1,10 +1,6 @@ import { assertType, describe, expectTypeOf, it } from 'vitest' -import { - createSearchParamsCache, - parseAsBoolean, - parseAsInteger, - parseAsString -} from '../dist/server' +import { parseAsBoolean, parseAsInteger, parseAsString } from '../dist/server' +import { createSearchParamsCache } from '../dist/server/cache' describe('types/cache', () => { const cache = createSearchParamsCache({ From 4f20df90ffd90dae32befa07bc6be512153fe806 Mon Sep 17 00:00:00 2001 From: Francois Best Date: Sat, 14 Dec 2024 13:24:26 +0100 Subject: [PATCH 3/8] fix: Forward exports in the nuqs/server/cache.d.ts For some reason, the classic trick of forwarding everything doesn't work under `nuqs/server/*`. We're also removing the temporary imports' `moduleResolution: 'node'` helpers, as v3 will both remove them and require a moduleResolution set to either 'bundler' or 'nodeNext'. --- packages/e2e/next/tsconfig.json | 2 +- packages/nuqs/server/README.md | 9 +++++++++ packages/nuqs/server/cache.d.ts | 8 +++++++- packages/nuqs/server/parsers.d.ts | 7 ------- packages/nuqs/server/serializer.d.ts | 7 ------- 5 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 packages/nuqs/server/README.md delete mode 100644 packages/nuqs/server/parsers.d.ts delete mode 100644 packages/nuqs/server/serializer.d.ts diff --git a/packages/e2e/next/tsconfig.json b/packages/e2e/next/tsconfig.json index 7d21f37f3..a4ef95503 100644 --- a/packages/e2e/next/tsconfig.json +++ b/packages/e2e/next/tsconfig.json @@ -6,7 +6,7 @@ "alwaysStrict": false, // Don't emit "use strict" to avoid conflicts with "use client" // Modules "module": "ESNext", - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, // Language & Environment "target": "ESNext", diff --git a/packages/nuqs/server/README.md b/packages/nuqs/server/README.md new file mode 100644 index 000000000..a64ea11c6 --- /dev/null +++ b/packages/nuqs/server/README.md @@ -0,0 +1,9 @@ +Why just the cache here? + +Those "top-level" .d.ts files are used to help projects with `moduleResolution: 'node'` +resolve the correct imports. + +The other two imports under server, `nuqs/server/parsers` and `nuqs/server/serializer` +are temporary and will be removed in nuqs@3.0.0. + +Also, nuqs@3.0.0 will require a `moduleResolution: 'bundler' | 'nodeNext` setting in your tsconfig.json. diff --git a/packages/nuqs/server/cache.d.ts b/packages/nuqs/server/cache.d.ts index 814329056..c59f78613 100644 --- a/packages/nuqs/server/cache.d.ts +++ b/packages/nuqs/server/cache.d.ts @@ -4,4 +4,10 @@ // but with `node`, TypeScript will look for a .d.ts file with that name at the // root of the package. -export * from './dist/server/cache' +export { createSearchParamsCache } from './dist/server/cache' +export type { + HistoryOptions, + Nullable, + Options, + SearchParams +} from './dist/server/cache' diff --git a/packages/nuqs/server/parsers.d.ts b/packages/nuqs/server/parsers.d.ts deleted file mode 100644 index 43a0495b9..000000000 --- a/packages/nuqs/server/parsers.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// This file is needed for projects that have `moduleResolution` set to `node` -// in their tsconfig.json to be able to `import {} from 'nuqs/server/parsers'`. -// Other module resolutions strategies will look for the `exports` in `package.json`, -// but with `node`, TypeScript will look for a .d.ts file with that name at the -// root of the package. - -export * from './dist/server/parsers' diff --git a/packages/nuqs/server/serializer.d.ts b/packages/nuqs/server/serializer.d.ts deleted file mode 100644 index 561a67a06..000000000 --- a/packages/nuqs/server/serializer.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// This file is needed for projects that have `moduleResolution` set to `node` -// in their tsconfig.json to be able to `import {} from 'nuqs/server/serializer'`. -// Other module resolutions strategies will look for the `exports` in `package.json`, -// but with `node`, TypeScript will look for a .d.ts file with that name at the -// root of the package. - -export * from './dist/server/serializer' From ebdedb0f7924790e10b168571bca37c05d27c219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Best?= Date: Wed, 1 Jan 2025 11:00:50 +0000 Subject: [PATCH 4/8] ref: Move all other server exports under a single (explicit) path --- packages/nuqs/package.json | 11 +++-------- packages/nuqs/server/README.md | 4 ++-- packages/nuqs/src/index.server.cache.ts | 1 - packages/nuqs/src/index.server.parsers.ts | 2 -- packages/nuqs/src/index.server.serializer.ts | 2 -- packages/nuqs/src/index.server.ts | 16 +++++++++------- .../nuqs/src/index.temporary-react-agnostic.ts | 15 +++++++++++++++ packages/nuqs/tsup.config.ts | 3 +-- 8 files changed, 30 insertions(+), 24 deletions(-) delete mode 100644 packages/nuqs/src/index.server.parsers.ts delete mode 100644 packages/nuqs/src/index.server.serializer.ts create mode 100644 packages/nuqs/src/index.temporary-react-agnostic.ts diff --git a/packages/nuqs/package.json b/packages/nuqs/package.json index aff32147f..2b6485bf3 100644 --- a/packages/nuqs/package.json +++ b/packages/nuqs/package.json @@ -75,14 +75,9 @@ "import": "./dist/server/cache.js", "require": "./esm-only.cjs" }, - "./server/serializer": { - "types": "./dist/server/serializer.d.ts", - "import": "./dist/server/serializer.js", - "require": "./esm-only.cjs" - }, - "./server/parsers": { - "types": "./dist/server/parsers.d.ts", - "import": "./dist/server/parsers.js", + "./server/temporary-react-agnostic": { + "types": "./dist/server/temporary-react-agnostic.d.ts", + "import": "./dist/server/temporary-react-agnostic.js", "require": "./esm-only.cjs" }, "./adapters/react": { diff --git a/packages/nuqs/server/README.md b/packages/nuqs/server/README.md index a64ea11c6..6c226eba3 100644 --- a/packages/nuqs/server/README.md +++ b/packages/nuqs/server/README.md @@ -3,7 +3,7 @@ Why just the cache here? Those "top-level" .d.ts files are used to help projects with `moduleResolution: 'node'` resolve the correct imports. -The other two imports under server, `nuqs/server/parsers` and `nuqs/server/serializer` -are temporary and will be removed in nuqs@3.0.0. +The other import under server, `nuqs/server/temporary-react-agnostic` +is temporary (as it says on the tin) and will be removed in nuqs@3.0.0. Also, nuqs@3.0.0 will require a `moduleResolution: 'bundler' | 'nodeNext` setting in your tsconfig.json. diff --git a/packages/nuqs/src/index.server.cache.ts b/packages/nuqs/src/index.server.cache.ts index e99679894..c7dd671cf 100644 --- a/packages/nuqs/src/index.server.cache.ts +++ b/packages/nuqs/src/index.server.cache.ts @@ -1,2 +1 @@ export { createSearchParamsCache } from './cache' -export type { HistoryOptions, Nullable, Options, SearchParams } from './defs' diff --git a/packages/nuqs/src/index.server.parsers.ts b/packages/nuqs/src/index.server.parsers.ts deleted file mode 100644 index 2fc2d5738..000000000 --- a/packages/nuqs/src/index.server.parsers.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type { HistoryOptions, Nullable, Options, SearchParams } from './defs' -export * from './parsers' diff --git a/packages/nuqs/src/index.server.serializer.ts b/packages/nuqs/src/index.server.serializer.ts deleted file mode 100644 index e2c0411d1..000000000 --- a/packages/nuqs/src/index.server.serializer.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type { HistoryOptions, Nullable, Options, SearchParams } from './defs' -export { createSerializer } from './serializer' diff --git a/packages/nuqs/src/index.server.ts b/packages/nuqs/src/index.server.ts index c844c2b5a..6aa0ed55e 100644 --- a/packages/nuqs/src/index.server.ts +++ b/packages/nuqs/src/index.server.ts @@ -1,10 +1,12 @@ -/** @deprecated Import createSearchParamsCache from 'nuqs/server/cache' instead. - * - * This export will be removed from 'nuqs/server' in nuqs@3.0.0, - * to allow non-Next.js server code to use the parsers, serializeres and other - * server-side utilities without depending on React canary for the `cache` function. - */ -export { createSearchParamsCache } from './cache' +export { + /** @deprecated Import createSearchParamsCache from 'nuqs/server/cache' instead. + * + * This export will be removed from 'nuqs/server' in nuqs@3.0.0, + * to allow non-Next.js server code to use the parsers, serializeres and other + * server-side utilities without depending on React canary for the `cache` function. + */ + createSearchParamsCache +} from './cache' export type { HistoryOptions, Nullable, diff --git a/packages/nuqs/src/index.temporary-react-agnostic.ts b/packages/nuqs/src/index.temporary-react-agnostic.ts new file mode 100644 index 000000000..ce2da4f51 --- /dev/null +++ b/packages/nuqs/src/index.temporary-react-agnostic.ts @@ -0,0 +1,15 @@ +export type { + HistoryOptions, + Nullable, + Options, + SearchParams, + UrlKeys +} from './defs' +export { + createLoader, + type LoaderFunction, + type LoaderInput, + type LoaderOptions +} from './loader' +export * from './parsers' +export { createSerializer } from './serializer' diff --git a/packages/nuqs/tsup.config.ts b/packages/nuqs/tsup.config.ts index 1ed1b0c80..2c7e8ca5b 100644 --- a/packages/nuqs/tsup.config.ts +++ b/packages/nuqs/tsup.config.ts @@ -37,8 +37,7 @@ const entrypoints = { server: 'src/index.server.ts', testing: 'src/testing.ts', 'server/cache': 'src/index.server.cache.ts', - 'server/parsers': 'src/index.server.parsers.ts', - 'server/serializer': 'src/index.server.serializer.ts' + 'server/temporary-react-agnostic': 'src/index.temporary-react-agnostic.ts' } } From 5677f26550b519655ac200773797d8333bfae958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Best?= Date: Thu, 9 Jan 2025 12:11:19 +0100 Subject: [PATCH 5/8] chore: Test the react-server conditional export --- packages/nuqs/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/nuqs/package.json b/packages/nuqs/package.json index 2b6485bf3..29ff14ab2 100644 --- a/packages/nuqs/package.json +++ b/packages/nuqs/package.json @@ -63,7 +63,8 @@ }, "./server": { "types": "./dist/server.d.ts", - "import": "./dist/server.js", + "import": "./dist/server/temporary-react-agnostic.js", + "react-server": "./dist/server.js", "require": "./esm-only.cjs" }, "./testing": { From 53490ffec31ba93a57bd03b00722ef01334c4ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Best?= Date: Thu, 9 Jan 2025 12:20:43 +0100 Subject: [PATCH 6/8] chore: Trying things (apparently order matters) --- packages/nuqs/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/nuqs/package.json b/packages/nuqs/package.json index 29ff14ab2..8da45658c 100644 --- a/packages/nuqs/package.json +++ b/packages/nuqs/package.json @@ -63,8 +63,9 @@ }, "./server": { "types": "./dist/server.d.ts", - "import": "./dist/server/temporary-react-agnostic.js", "react-server": "./dist/server.js", + "default": "./dist/server/temporary-react-agnostic.js", + "import": "./dist/server/temporary-react-agnostic.js", "require": "./esm-only.cjs" }, "./testing": { From 47cb34e13186d4a4cad65ce6ef1585d2a13723ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Best?= Date: Thu, 9 Jan 2025 12:53:19 +0100 Subject: [PATCH 7/8] chore: Revert, didn't work --- packages/nuqs/package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/nuqs/package.json b/packages/nuqs/package.json index 8da45658c..2b6485bf3 100644 --- a/packages/nuqs/package.json +++ b/packages/nuqs/package.json @@ -63,9 +63,7 @@ }, "./server": { "types": "./dist/server.d.ts", - "react-server": "./dist/server.js", - "default": "./dist/server/temporary-react-agnostic.js", - "import": "./dist/server/temporary-react-agnostic.js", + "import": "./dist/server.js", "require": "./esm-only.cjs" }, "./testing": { From f7a3217e819564e1cd38510f824242b35c32095f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Best?= Date: Wed, 19 Feb 2025 21:31:17 +0100 Subject: [PATCH 8/8] chore: Could it be that easy? --- packages/nuqs/src/cache.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/nuqs/src/cache.ts b/packages/nuqs/src/cache.ts index 7cc2a1306..30b06eb28 100644 --- a/packages/nuqs/src/cache.ts +++ b/packages/nuqs/src/cache.ts @@ -1,5 +1,4 @@ -// @ts-ignore -import { cache } from 'react' +import * as React from 'react' import type { SearchParams, UrlKeys } from './defs' import { error } from './errors' import { createLoader } from './loader' @@ -27,7 +26,7 @@ export function createSearchParamsCache( // whereas a simple object would be bound to the lifecycle of the process, // which may be reused between requests in a serverless environment // (warm lambdas on Vercel or AWS). - const getCache = cache<() => Cache>(() => ({ + const getCache = React.cache<() => Cache>(() => ({ searchParams: {} }))