env.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. export const isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined";
  2. export const isWebWorker = () => typeof globalThis === "object" &&
  3. globalThis.constructor &&
  4. globalThis.constructor.name === "DedicatedWorkerGlobalScope";
  5. export const isJsDom = () => (typeof window !== "undefined" && window.name === "nodejs") ||
  6. (typeof navigator !== "undefined" &&
  7. (navigator.userAgent.includes("Node.js") ||
  8. navigator.userAgent.includes("jsdom")));
  9. // Supabase Edge Function provides a `Deno` global object
  10. // without `version` property
  11. export const isDeno = () => typeof Deno !== "undefined";
  12. // Mark not-as-node if in Supabase Edge Function
  13. export const isNode = () => typeof process !== "undefined" &&
  14. typeof process.versions !== "undefined" &&
  15. typeof process.versions.node !== "undefined" &&
  16. !isDeno();
  17. export const getEnv = () => {
  18. let env;
  19. if (isBrowser()) {
  20. env = "browser";
  21. }
  22. else if (isNode()) {
  23. env = "node";
  24. }
  25. else if (isWebWorker()) {
  26. env = "webworker";
  27. }
  28. else if (isJsDom()) {
  29. env = "jsdom";
  30. }
  31. else if (isDeno()) {
  32. env = "deno";
  33. }
  34. else {
  35. env = "other";
  36. }
  37. return env;
  38. };
  39. let runtimeEnvironment;
  40. export async function getRuntimeEnvironment() {
  41. if (runtimeEnvironment === undefined) {
  42. const env = getEnv();
  43. runtimeEnvironment = {
  44. library: "langchain-js",
  45. runtime: env,
  46. };
  47. }
  48. return runtimeEnvironment;
  49. }
  50. export function getEnvironmentVariable(name) {
  51. // Certain Deno setups will throw an error if you try to access environment variables
  52. // https://github.com/langchain-ai/langchainjs/issues/1412
  53. try {
  54. if (typeof process !== "undefined") {
  55. // eslint-disable-next-line no-process-env
  56. return process.env?.[name];
  57. }
  58. else if (isDeno()) {
  59. return Deno?.env.get(name);
  60. }
  61. else {
  62. return undefined;
  63. }
  64. }
  65. catch (e) {
  66. return undefined;
  67. }
  68. }