From d17450fdfb7650e65965faa8d1a393e5331d4f7d Mon Sep 17 00:00:00 2001
From: Thuc Pham <51660321+thucpn@users.noreply.github.com>
Date: Tue, 19 Nov 2024 02:34:05 +0700
Subject: [PATCH] fix: next.js 15 compatibility (#1474)

Co-authored-by: Alex Yang <himself65@outlook.com>
---
 .changeset/good-tips-obey.md     |  5 +++++
 packages/llamaindex/package.json | 10 ++++++++++
 packages/llamaindex/src/next.ts  | 25 +++++++++++++++++++------
 3 files changed, 34 insertions(+), 6 deletions(-)
 create mode 100644 .changeset/good-tips-obey.md

diff --git a/.changeset/good-tips-obey.md b/.changeset/good-tips-obey.md
new file mode 100644
index 000000000..38a245177
--- /dev/null
+++ b/.changeset/good-tips-obey.md
@@ -0,0 +1,5 @@
+---
+"llamaindex": patch
+---
+
+fix: rename from serverComponentsExternalPackages to serverExternalPackages
diff --git a/packages/llamaindex/package.json b/packages/llamaindex/package.json
index d4e912c1a..84e1b8ed6 100644
--- a/packages/llamaindex/package.json
+++ b/packages/llamaindex/package.json
@@ -125,6 +125,16 @@
         "default": "./dist/cjs/index.js"
       }
     },
+    "./next": {
+      "import": {
+        "types": "./dist/type/next.d.ts",
+        "default": "./dist/next.js"
+      },
+      "require": {
+        "types": "./dist/type/next.d.ts",
+        "default": "./dist/cjs/next.js"
+      }
+    },
     "./register": "./register.js",
     "./internal/*": {
       "import": "./dist/not-allow.js",
diff --git a/packages/llamaindex/src/next.ts b/packages/llamaindex/src/next.ts
index 155e180ad..e27b52458 100644
--- a/packages/llamaindex/src/next.ts
+++ b/packages/llamaindex/src/next.ts
@@ -15,15 +15,28 @@
  *
  * @module
  */
+import { createRequire } from "node:module";
+
+const require = createRequire(import.meta.url);
+
+const nextJsVersion: string = require("next/package.json").version;
+const is14OrLower =
+  nextJsVersion.startsWith("14.") || nextJsVersion.startsWith("13.");
+
 // eslint-disable-next-line @typescript-eslint/no-explicit-any
 export default function withLlamaIndex(config: any) {
-  config.experimental = config.experimental ?? {};
   // needed for transformers, see https://huggingface.co/docs/transformers.js/en/tutorials/next#step-2-install-and-configure-transformersjs
-  config.experimental.serverComponentsExternalPackages =
-    config.experimental.serverComponentsExternalPackages ?? [];
-  config.experimental.serverComponentsExternalPackages.push(
-    "@huggingface/transformers",
-  );
+  if (is14OrLower) {
+    config.experimental.serverComponentsExternalPackages =
+      config.experimental.serverComponentsExternalPackages ?? [];
+    config.experimental.serverComponentsExternalPackages.push(
+      "@huggingface/transformers",
+    );
+  } else {
+    config.serverExternalPackages = config.serverExternalPackages ?? [];
+    config.serverExternalPackages.push("@huggingface/transformers");
+  }
+
   const userWebpack = config.webpack;
   // eslint-disable-next-line @typescript-eslint/no-explicit-any
   config.webpack = function (webpackConfig: any, options: any) {
-- 
GitLab