ravendb / ravendb-nodejs-client

RavenDB node.js client
MIT License
63 stars 32 forks source link

XRegExp is not a function #403

Closed marcuslindblom closed 9 months ago

marcuslindblom commented 9 months ago

I'm using Next.js 14 with node 20.9.0 and when I import the ravendb client I get the following error.

TypeError: XRegExp is not a function at eval (webpack-internal:///(rsc)/./node_modules/ravendb/dist/Utility/StringUtil.js:122:23) at (rsc)/./node_modules/ravendb/dist/Utility/StringUtil.js (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/vendor-chunks/ravendb.js:7631:1) at webpack_require (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/webpack-runtime.js:33:42) at eval (webpack-internal:///(rsc)/./node_modules/ravendb/dist/Mapping/ObjectMapper.js:9:22) at (rsc)/./node_modules/ravendb/dist/Mapping/ObjectMapper.js (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/vendor-chunks/ravendb.js:6554:1) at webpack_require (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/webpack-runtime.js:33:42) at eval (webpack-internal:///(rsc)/./node_modules/ravendb/dist/Documents/Conventions/DocumentConventions.js:6:24) at (rsc)/./node_modules/ravendb/dist/Documents/Conventions/DocumentConventions.js (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/vendor-chunks/ravendb.js:735:1) at webpack_require (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/webpack-runtime.js:33:42) at eval (webpack-internal:///(rsc)/./node_modules/ravendb/dist/index.js:28:29) at (rsc)/./node_modules/ravendb/dist/index.js (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/vendor-chunks/ravendb.js:7686:1) at webpack_require (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/webpack-runtime.js:33:42) at eval (webpack-internal:///(rsc)/./src/app/page.js:10:65) at webpack_require.a (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/webpack-runtime.js:100:13) at eval (webpack-internal:///(rsc)/./src/app/page.js:1:21) at (rsc)/./src/app/page.js (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/app/page.js:369:1) at Function.webpack_require (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/.next/server/webpack-runtime.js:33:42) at async ez (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:35:395774) at async t7 (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:5732) at async /Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:7840 at async Promise.all (index 0) at async t7 (/Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:7607) at async /Users/marcus/Library/Mobile Documents/com~apple~CloudDocs/Projects.nosync/unsorted/nextjs14/my-app/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:24472 { digest: '942695289' }

To reproduce:

  1. Install Next.js 14
  2. Use app directory
  3. Use JavaScript
  4. Install ravendb
  5. import DocumentStore
  6. Run the app using npm run dev
marcuslindblom commented 9 months ago

This seems to solve the issue in next 14. https://nextjs.org/docs/app/api-reference/next-config-js/serverComponentsExternalPackages

//next 14 
const nextConfig = {
    experimental: {
        serverComponentsExternalPackages: ['ravendb'],
      },    
}
ml054 commented 9 months ago

RavenDB is server side package not front end package. So putting this on server components makes sense.

@marcuslindblom Does it solve your issue? Or you have different expectations?

Please close an issue or describe suggested behavior.