diff --git a/package-lock.json b/package-lock.json
index e453599..16c5883 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,8 +16,9 @@
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-redux": "^9.2.0",
- "react-router-dom": "^6.30.1",
- "xlsx-js-style": "^1.2.0"
+ "react-router-dom": "^7.9.5",
+ "stream-browserify": "^3.0.0",
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@eslint/js": "^9.36.0",
@@ -913,15 +914,6 @@
}
}
},
- "node_modules/@remix-run/router": {
- "version": "1.23.0",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz",
- "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.43",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz",
@@ -1790,17 +1782,10 @@
}
},
"node_modules/adler-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
- "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
+ "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
"license": "Apache-2.0",
- "dependencies": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- },
- "bin": {
- "adler32": "bin/adler32.njs"
- },
"engines": {
"node": ">=0.8"
}
@@ -1916,15 +1901,6 @@
"node": ">=0.8"
}
},
- "node_modules/cfb/node_modules/adler-32": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
- "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1943,27 +1919,14 @@
}
},
"node_modules/codepage": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
- "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
+ "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
"license": "Apache-2.0",
- "dependencies": {
- "commander": "~2.14.1",
- "exit-on-epipe": "~1.0.1"
- },
- "bin": {
- "codepage": "bin/codepage.njs"
- },
"engines": {
"node": ">=0.8"
}
},
- "node_modules/codepage/node_modules/commander": {
- "version": "2.14.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
- "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
- "license": "MIT"
- },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1996,12 +1959,6 @@
"node": ">= 0.8"
}
},
- "node_modules/commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "license": "MIT"
- },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2009,6 +1966,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/crc-32": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
@@ -2389,15 +2355,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2436,12 +2393,6 @@
}
}
},
- "node_modules/fflate": {
- "version": "0.3.11",
- "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz",
- "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==",
- "license": "MIT"
- },
"node_modules/file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@@ -2738,6 +2689,12 @@
"node": ">=0.8.19"
}
},
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -3351,18 +3308,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
- "license": "Apache-2.0",
- "bin": {
- "printj": "bin/printj.njs"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -3424,35 +3369,55 @@
}
},
"node_modules/react-router": {
- "version": "6.30.1",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz",
- "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==",
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz",
+ "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==",
"license": "MIT",
"dependencies": {
- "@remix-run/router": "1.23.0"
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=20.0.0"
},
"peerDependencies": {
- "react": ">=16.8"
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
}
},
"node_modules/react-router-dom": {
- "version": "6.30.1",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz",
- "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==",
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.5.tgz",
+ "integrity": "sha512-mkEmq/K8tKN63Ae2M7Xgz3c9l9YNbY+NHH6NNeUmLA3kDkhKXRsNb/ZpxaEunvGo2/3YXdk5EJU3Hxp3ocaBPw==",
"license": "MIT",
"dependencies": {
- "@remix-run/router": "1.23.0",
- "react-router": "6.30.1"
+ "react-router": "7.9.5"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=20.0.0"
},
"peerDependencies": {
- "react": ">=16.8",
- "react-dom": ">=16.8"
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
"node_modules/redux": {
@@ -3527,12 +3492,38 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/scheduler": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
"license": "MIT"
},
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
+ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
+ "license": "MIT"
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -3577,6 +3568,25 @@
"node": ">=0.8"
}
},
+ "node_modules/stream-browserify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
+ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.4",
+ "readable-stream": "^3.5.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -3670,6 +3680,12 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
"node_modules/vite": {
"version": "7.1.12",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz",
@@ -3788,19 +3804,16 @@
"node": ">=0.10.0"
}
},
- "node_modules/xlsx-js-style": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/xlsx-js-style/-/xlsx-js-style-1.2.0.tgz",
- "integrity": "sha512-DDT4FXFSWfT4DXMSok/m3TvmP1gvO3dn0Eu/c+eXHW5Kzmp7IczNkxg/iEPnImbG9X0Vb8QhROda5eatSR/97Q==",
+ "node_modules/xlsx": {
+ "version": "0.18.5",
+ "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
+ "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
"license": "Apache-2.0",
"dependencies": {
- "adler-32": "~1.2.0",
- "cfb": "^1.1.4",
- "codepage": "~1.14.0",
- "commander": "~2.17.1",
- "crc-32": "~1.2.0",
- "exit-on-epipe": "~1.0.1",
- "fflate": "^0.3.8",
+ "adler-32": "~1.3.0",
+ "cfb": "~1.2.1",
+ "codepage": "~1.15.0",
+ "crc-32": "~1.2.1",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
diff --git a/package.json b/package.json
index bbe0d91..9249dfa 100644
--- a/package.json
+++ b/package.json
@@ -18,8 +18,9 @@
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-redux": "^9.2.0",
- "react-router-dom": "^6.30.1",
- "xlsx-js-style": "^1.2.0"
+ "react-router-dom": "^7.9.5",
+ "stream-browserify": "^3.0.0",
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@eslint/js": "^9.36.0",
diff --git a/src/pages/admin/upload/controller_admin_upload.jsx b/src/pages/admin/upload/controller_admin_upload.jsx
index aff20e1..f5b3126 100644
--- a/src/pages/admin/upload/controller_admin_upload.jsx
+++ b/src/pages/admin/upload/controller_admin_upload.jsx
@@ -9,7 +9,7 @@ pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
import.meta.url
).toString();
-import * as XLSX from 'xlsx-js-style';
+import * as XLSX from 'xlsx';
// pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker;
@@ -47,6 +47,9 @@ export function useUploadController() {
}
}
else if (ext === "xlsx" || ext === "xls") {
+ // const data = await f.arrayBuffer();
+ // const workbook = XLSX.read(data, { type: 'array' });
+ // const sheetNames = workbook.SheetNames;
const data = await f.arrayBuffer();
const workbook = XLSX.read(data, { type: 'array' });
const sheetNames = workbook.SheetNames;
@@ -66,7 +69,6 @@ export function useUploadController() {
try {
const res = await uploadFile(file, selectedPages, selectedSheet);
dispatch(setResult(res));
- console.log('gtw',res);
if (res.file_type !== ".pdf" || (res.file_type === ".pdf" && !res.tables)) {
navigate("/admin/upload/validate");
diff --git a/src/routes/AppRouter.jsx b/src/routes/AppRouter.jsx
index aaf2db5..589f87d 100644
--- a/src/routes/AppRouter.jsx
+++ b/src/routes/AppRouter.jsx
@@ -1,31 +1,79 @@
+// // import { BrowserRouter, Routes, Route } from "react-router-dom";
+// // import GuestRoute from "./GuestRoute";
+// // import ProtectedRoute from "./ProtectedRoute";
+
+// // import ViewsLanding from "../pages/landing/views_landing";
+// // import ViewsAuthLogin from "../pages/auth/views_auth_login";
+// // import ViewsAdminHome from "../pages/admin/home/views_admin_home";
+// // import ViewsAdminUpload from "../pages/admin/upload/views_admin_upload";
+// // import ViewsAdminUploadValidate from "../pages/admin/upload/views_admin_upload_validate";
+// // import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_upload_success";
+// // import ViewsAdminPublikasi from "../pages/admin/publikasi/views_admin_publikasi";
+
+// // export default function AppRouter() {
+// // return (
+// //
+// //
+// // {/* Guest Routes */}
+// // } />
+// // } />
+
+// // {/* Protected (Admin) Routes */}
+// // } />
+// // } />
+
+// // } />
+// // } />
+// // } />
+
+// //
+// //
+// // );
+// // }
+
+
+
+
+
// import { BrowserRouter, Routes, Route } from "react-router-dom";
// import GuestRoute from "./GuestRoute";
// import ProtectedRoute from "./ProtectedRoute";
// import ViewsLanding from "../pages/landing/views_landing";
// import ViewsAuthLogin from "../pages/auth/views_auth_login";
+// import AdminLayout from "../layouts/AdminLayout";
+
// import ViewsAdminHome from "../pages/admin/home/views_admin_home";
-// import ViewsAdminUpload from "../pages/admin/upload/views_admin_upload";
-// import ViewsAdminUploadValidate from "../pages/admin/upload/views_admin_upload_validate";
-// import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_upload_success";
+// import ViewsAdminUploadStep1 from "../pages/admin/upload/views_admin_upload";
+// import ViewsAdminUploadValidate from "../pages/admin/upload/views_admin_validate_upload";
+// import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_success_upload";
// import ViewsAdminPublikasi from "../pages/admin/publikasi/views_admin_publikasi";
+// import ViewsAdminUploadRules from "../pages/admin/upload/rules/views_admin_rules_upload";
// export default function AppRouter() {
// return (
//
//
-// {/* Guest Routes */}
+// {/* Guest */}
// } />
// } />
-// {/* Protected (Admin) Routes */}
-// } />
-// } />
-
-// } />
-// } />
-// } />
-
+// {/* Protected Admin Layout */}
+//
+//
+//
+// }
+// >
+// } />
+// } />
+// } />
+// } />
+// } />
+// } />
+//
//
//
// );
@@ -35,7 +83,15 @@
-import { BrowserRouter, Routes, Route } from "react-router-dom";
+
+
+// src/routes/AppRouter.jsx
+import {
+ createBrowserRouter,
+ RouterProvider,
+ Outlet,
+} from "react-router-dom";
+
import GuestRoute from "./GuestRoute";
import ProtectedRoute from "./ProtectedRoute";
@@ -50,31 +106,42 @@ import ViewsAdminUploadSuccess from "../pages/admin/upload/views_admin_success_u
import ViewsAdminPublikasi from "../pages/admin/publikasi/views_admin_publikasi";
import ViewsAdminUploadRules from "../pages/admin/upload/rules/views_admin_rules_upload";
-export default function AppRouter() {
- return (
-
-
- {/* Guest */}
- } />
- } />
+const router = createBrowserRouter(
+ [
+ {
+ path: "/",
+ element: ,
+ },
+ {
+ path: "/login",
+ element: ,
+ },
+ {
+ path: "/admin",
+ element: (
+
+
+
+ ),
+ children: [
+ { path: "home", element: },
+ { path: "upload", element: },
+ { path: "upload/validate", element: },
+ { path: "upload/success", element: },
+ { path: "upload/rules", element: },
+ { path: "publikasi", element: },
+ ],
+ },
+ ],
+ {
+ // 🧩 Di sinilah kamu bisa menambahkan future flags
+ future: {
+ v7_startTransition: true,
+ v7_relativeSplatPath: true,
+ },
+ }
+);
- {/* Protected Admin Layout */}
-
-
-
- }
- >
- } />
- } />
- } />
- } />
- } />
- } />
-
-
-
- );
+export default function AppRouter() {
+ return ;
}
diff --git a/vite.config.js b/vite.config.js
index fc4e9bb..8bfd11d 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -8,4 +8,9 @@ export default defineConfig({
react(),
tailwindcss(),
],
+ resolve: {
+ alias: {
+ stream: 'stream-browserify',
+ },
+ },
})