Browse Source

fix(insights-hub): fixed mixed nuqs context providers bug by re-exporting from a passthrough package and clamping build of that package to ESM-only

benduran 2 weeks ago
parent
commit
6f144f452c

+ 1 - 2
apps/developer-hub/package.json

@@ -35,7 +35,6 @@
     "katex": "catalog:",
     "next": "catalog:",
     "next-themes": "catalog:",
-    "nuqs": "catalog:",
     "react": "catalog:",
     "react-aria": "catalog:",
     "react-dom": "catalog:",
@@ -72,4 +71,4 @@
     "tailwindcss": "^4.1.6",
     "vercel": "catalog:"
   }
-}
+}

+ 1 - 2
apps/entropy-explorer/package.json

@@ -24,7 +24,6 @@
     "@pythnetwork/component-library": "workspace:*",
     "clsx": "catalog:",
     "next": "catalog:",
-    "nuqs": "catalog:",
     "react": "catalog:",
     "react-aria": "catalog:",
     "react-dom": "catalog:",
@@ -52,4 +51,4 @@
     "stylelint-config-standard-scss": "catalog:",
     "vercel": "catalog:"
   }
-}
+}

+ 1 - 2
apps/insights/package.json

@@ -40,7 +40,6 @@
     "motion": "catalog:",
     "next": "catalog:",
     "next-themes": "catalog:",
-    "nuqs": "catalog:",
     "react": "catalog:",
     "react-aria": "catalog:",
     "react-dom": "catalog:",
@@ -73,4 +72,4 @@
     "stylelint-config-standard-scss": "catalog:",
     "vercel": "catalog:"
   }
-}
+}

+ 1 - 2
governance/xc_admin/packages/xc_admin_frontend/package.json

@@ -38,7 +38,6 @@
     "message_buffer": "workspace:^",
     "next": "catalog:",
     "next-seo": "^5.15.0",
-    "nuqs": "catalog:",
     "react": "catalog:",
     "react-dom": "catalog:",
     "react-hot-toast": "^2.4.0",
@@ -62,4 +61,4 @@
     "tailwindcss": "^3.1.8",
     "vercel": "^37.12.1"
   }
-}
+}

+ 1 - 1
packages/component-library/package.json

@@ -330,6 +330,7 @@
     "@amplitude/plugin-autocapture-browser": "catalog:",
     "@axe-core/react": "catalog:",
     "@next/third-parties": "catalog:",
+    "@pythnetwork/react-hooks": "workspace:",
     "ag-grid-community": "catalog:",
     "ag-grid-react": "catalog:",
     "@react-hookz/web": "catalog:",
@@ -338,7 +339,6 @@
     "modern-normalize": "catalog:",
     "motion": "catalog:",
     "next-themes": "catalog:",
-    "nuqs": "catalog:",
     "pino": "catalog:",
     "react-aria": "catalog:",
     "react-aria-components": "catalog:",

+ 2 - 2
packages/component-library/src/useQueryParamsPagination/index.ts

@@ -1,13 +1,13 @@
 "use client";
 
-import { usePathname } from "next/navigation";
 import {
   parseAsString,
   parseAsInteger,
   parseAsBoolean,
   useQueryStates,
   createSerializer,
-} from "nuqs";
+} from "@pythnetwork/react-hooks/nuqs";
+import { usePathname } from "next/navigation";
 import { useCallback, useMemo } from "react";
 
 import type { SortDescriptor } from "../unstyled/Table";

+ 22 - 0
packages/react-hooks/.gitignore

@@ -0,0 +1,22 @@
+# Coverage directory used by tools like istanbul
+coverage
+
+# Dependency directories
+node_modules/
+
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# dotenv environment variables file
+.env
+
+# Build directory
+dist/
+
+tsconfig.tsbuildinfo

+ 12 - 0
packages/react-hooks/.prettierignore

@@ -0,0 +1,12 @@
+.vscode/
+coverage/
+dist/
+doc/
+doc*/
+node_modules/
+dist/
+lib/
+build/
+node_modules/
+package.json
+tsconfig*.json

+ 1 - 0
packages/react-hooks/eslint.config.js

@@ -0,0 +1 @@
+export { base as default } from "@cprussin/eslint-config";

+ 36 - 0
packages/react-hooks/package.json

@@ -0,0 +1,36 @@
+{
+  "private": true,
+  "name": "@pythnetwork/react-hooks",
+  "description": "collection of utility hooks used across react applications powering parts of the pyth network",
+  "version": "0.0.0",
+  "scripts": {
+    "build": "ts-duality --clean --noCjs",
+    "clean": "rm -rf ./dist",
+    "fix:format": "prettier --write .",
+    "fix:lint": "eslint --fix . --max-warnings 0",
+    "test:lint": "eslint . --max-warnings 0",
+    "test:format": "prettier --check .",
+    "test:unit": "jest",
+    "test:types": "tsc"
+  },
+  "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
+    "@cprussin/tsconfig": "catalog:",
+    "@types/react": "catalog:",
+    "@types/react-dom": "catalog:",
+    "eslint": "catalog:"
+  },
+  "dependencies": {
+    "nuqs": "catalog:",
+    "react": "catalog:",
+    "react-dom": "catalog:"
+  },
+  "type": "module",
+  "exports": {
+    "./nuqs": {
+      "types": "./dist/nuqs.d.ts",
+      "default": "./dist/nuqs.mjs"
+    },
+    "./package.json": "./package.json"
+  }
+}

+ 9 - 0
packages/react-hooks/src/nuqs.ts

@@ -0,0 +1,9 @@
+// this file exists as a way to export a single, unified instance of
+// the nuqs library, to prevent the following error:
+// https://nuqs.dev/NUQS-404
+// solutions have been discussed here about using nuqs in a monorepo:
+// https://github.com/47ng/nuqs/issues/798
+// NOTE: this helps prevent mixed ESM and CJS usages of the hooks and context providers,
+// which is likely what causes the issue in bundler environments that support both
+// and aren't strictly opinionated about CJS vs ESM
+export * from "nuqs";

+ 11 - 0
packages/react-hooks/tsconfig.json

@@ -0,0 +1,11 @@
+{
+  "extends": "@cprussin/tsconfig/base.json",
+  "exclude": [
+    "node_modules",
+    "dist"
+  ],
+  "compilerOptions": {
+    "incremental": false,
+    "noEmit": false
+  }
+}

+ 32 - 23
pnpm-lock.yaml

@@ -551,9 +551,6 @@ importers:
       next-themes:
         specifier: 'catalog:'
         version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      nuqs:
-        specifier: 'catalog:'
-        version: 2.4.1(next@15.5.0(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
       react:
         specifier: 'catalog:'
         version: 19.1.0
@@ -669,9 +666,6 @@ importers:
       next:
         specifier: 'catalog:'
         version: 15.5.0(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1)
-      nuqs:
-        specifier: 'catalog:'
-        version: 2.4.1(next@15.5.0(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
       react:
         specifier: 'catalog:'
         version: 19.1.0
@@ -912,9 +906,6 @@ importers:
       next-themes:
         specifier: 'catalog:'
         version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      nuqs:
-        specifier: 'catalog:'
-        version: 2.4.1(next@15.5.0(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
       react:
         specifier: 'catalog:'
         version: 19.1.0
@@ -1768,9 +1759,6 @@ importers:
       next-seo:
         specifier: ^5.15.0
         version: 5.15.0(next@15.5.0(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      nuqs:
-        specifier: 'catalog:'
-        version: 2.4.1(next@15.5.0(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
       react:
         specifier: 'catalog:'
         version: 19.1.0
@@ -1995,6 +1983,9 @@ importers:
       '@next/third-parties':
         specifier: 'catalog:'
         version: 15.3.2(next@15.5.0(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
+      '@pythnetwork/react-hooks':
+        specifier: 'workspace:'
+        version: link:../react-hooks
       '@react-hookz/web':
         specifier: 'catalog:'
         version: 25.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -2019,9 +2010,6 @@ importers:
       next-themes:
         specifier: 'catalog:'
         version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
-      nuqs:
-        specifier: 'catalog:'
-        version: 2.4.1(next@15.5.0(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
       pino:
         specifier: 'catalog:'
         version: 9.6.0
@@ -2208,6 +2196,34 @@ importers:
         specifier: 'catalog:'
         version: 19.1.0
 
+  packages/react-hooks:
+    dependencies:
+      nuqs:
+        specifier: 'catalog:'
+        version: 2.4.1(next@15.5.0(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0)
+      react:
+        specifier: 'catalog:'
+        version: 19.1.0
+      react-dom:
+        specifier: 'catalog:'
+        version: 19.1.0(react@19.1.0)
+    devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.15.0)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.15.0)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
+      '@cprussin/tsconfig':
+        specifier: 'catalog:'
+        version: 3.1.2(typescript@5.9.3)
+      '@types/react':
+        specifier: 'catalog:'
+        version: 19.1.0
+      '@types/react-dom':
+        specifier: 'catalog:'
+        version: 19.1.1(@types/react@19.1.0)
+      eslint:
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
+
   price_service/client/js:
     dependencies:
       '@pythnetwork/price-service-sdk':
@@ -35901,7 +35917,7 @@ snapshots:
       debug: 4.4.0(supports-color@8.1.1)
       globby: 11.1.0
       is-glob: 4.0.3
-      semver: 7.7.1
+      semver: 7.7.2
       tsutils: 3.21.0(typescript@5.9.3)
     optionalDependencies:
       typescript: 5.9.3
@@ -45990,13 +46006,6 @@ snapshots:
       bn.js: 4.11.6
       strip-hex-prefix: 1.0.0
 
-  nuqs@2.4.1(next@15.5.0(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0):
-    dependencies:
-      mitt: 3.0.1
-      react: 19.1.0
-    optionalDependencies:
-      next: 15.5.0(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1)
-
   nuqs@2.4.1(next@15.5.0(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0):
     dependencies:
       mitt: 3.0.1