From 5596e319470f76a58c2d1a9da99b0e6499f9bc24 Mon Sep 17 00:00:00 2001
From: Alex Yang <himself65@outlook.com>
Date: Fri, 3 May 2024 18:03:14 -0500
Subject: [PATCH] feat: improve `@llamaindex/env` (#787)

---
 .changeset/itchy-rice-train.md    |  6 ++++++
 packages/core/jsr.json            |  5 ++++-
 packages/env/jsr.json             |  3 +++
 packages/env/package.json         | 13 ++++++++++++-
 packages/env/src/index.ts         | 13 +++++++++++++
 packages/env/src/index.workerd.ts |  7 +++++++
 packages/env/src/utils.ts         | 24 ++++++++++++++++++++++++
 scripts/check-minor-version.js    |  9 ++++++++-
 8 files changed, 77 insertions(+), 3 deletions(-)
 create mode 100644 .changeset/itchy-rice-train.md

diff --git a/.changeset/itchy-rice-train.md b/.changeset/itchy-rice-train.md
new file mode 100644
index 000000000..8d76af95c
--- /dev/null
+++ b/.changeset/itchy-rice-train.md
@@ -0,0 +1,6 @@
+---
+"llamaindex": patch
+"@llamaindex/env": patch
+---
+
+feat: improve `@llamaindex/env`
diff --git a/packages/core/jsr.json b/packages/core/jsr.json
index ecbc9cdab..b546ef8ad 100644
--- a/packages/core/jsr.json
+++ b/packages/core/jsr.json
@@ -3,6 +3,9 @@
   "version": "0.3.4",
   "exports": "./src/index.ts",
   "imports": {
-    "@llamaindex/env": "jsr:@llamaindex/env@0.0.6"
+    "@llamaindex/env": "jsr:@llamaindex/env@0.1.0"
+  },
+  "publish": {
+    "include": ["LICENSE", "README.md", "src/**/*.ts"]
   }
 }
diff --git a/packages/env/jsr.json b/packages/env/jsr.json
index 9b37fb6ba..44a9a2a6f 100644
--- a/packages/env/jsr.json
+++ b/packages/env/jsr.json
@@ -4,5 +4,8 @@
   "exports": {
     ".": "./src/index.ts",
     "./type": "./src/type.ts"
+  },
+  "publish": {
+    "include": ["LICENSE", "README.md", "src/**/*.ts"]
   }
 }
diff --git a/packages/env/package.json b/packages/env/package.json
index c04d0fcc5..ff5113910 100644
--- a/packages/env/package.json
+++ b/packages/env/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@llamaindex/env",
-  "description": "environment wrapper",
+  "description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
   "version": "0.1.0",
   "type": "module",
   "types": "dist/type/index.d.ts",
@@ -74,5 +74,16 @@
     "@aws-crypto/sha256-js": "^5.2.0",
     "pathe": "^1.1.2",
     "readable-stream": "^4.5.2"
+  },
+  "peerDependenciesMeta": {
+    "@aws-crypto/sha256-js": {
+      "optional": true
+    },
+    "pathe": {
+      "optional": true
+    },
+    "readable-stream": {
+      "optional": true
+    }
   }
 }
diff --git a/packages/env/src/index.ts b/packages/env/src/index.ts
index 851d074a4..930b7f899 100644
--- a/packages/env/src/index.ts
+++ b/packages/env/src/index.ts
@@ -1,3 +1,16 @@
+/**
+ * This module is under Node.js environment.
+ * It provides a set of APIs to interact with the file system, streams, and other Node.js built-in modules.
+ *
+ * Use this under "node" condition,
+ *
+ * For example:
+ * ```shell
+ * node -e "const env = require('@llamaindex/env');"
+ * ```
+ *
+ * @module
+ */
 import { ok } from "node:assert";
 import { createHash, randomUUID } from "node:crypto";
 import fs from "node:fs/promises";
diff --git a/packages/env/src/index.workerd.ts b/packages/env/src/index.workerd.ts
index 008c1b930..8ec0a1069 100644
--- a/packages/env/src/index.workerd.ts
+++ b/packages/env/src/index.workerd.ts
@@ -1,3 +1,10 @@
+/**
+ * This module is under Cloudflare Workers environment.
+ *
+ * Most of Node.js APIs are not available in Cloudflare Workers environment.
+ *
+ * @module
+ */
 import { INTERNAL_ENV } from "./utils.js";
 
 export * from "./index.polyfill.js";
diff --git a/packages/env/src/utils.ts b/packages/env/src/utils.ts
index c47e9a40c..ed05a83df 100644
--- a/packages/env/src/utils.ts
+++ b/packages/env/src/utils.ts
@@ -1,6 +1,30 @@
 // DO NOT EXPOSE THIS VARIABLE TO PUBLIC, IT IS USED INTERNALLY FOR CLOUDFLARE WORKER
 export const INTERNAL_ENV: Record<string, string> = {};
 
+/**
+ * Set environment variables before using llamaindex, because some LLM need to access API key before running.
+ *
+ * You have to set the environment variables in Cloudflare Worker environment,
+ * because it doesn't have any global environment variables.
+ *
+ * @example
+ * ```ts
+ * export default {
+ *   async fetch(
+ *     request: Request,
+ *     env: Env,
+ *     ctx: ExecutionContext,
+ *   ): Promise<Response> {
+ *     const { setEnvs } = await import("@llamaindex/env");
+ *     setEnvs(env);
+ *     // ...
+ *     return new Response("Hello, World!");
+ *   },
+ * };
+ * ```
+ *
+ * @param envs Environment variables
+ */
 export function setEnvs(envs: object): void {
   Object.assign(INTERNAL_ENV, envs);
 }
diff --git a/scripts/check-minor-version.js b/scripts/check-minor-version.js
index 8aadeb4da..e9af1eec7 100644
--- a/scripts/check-minor-version.js
+++ b/scripts/check-minor-version.js
@@ -26,7 +26,10 @@ if (minorVersion !== expectedMinorVersion) {
   process.exit(1);
 }
 
-const packages = ["core", "env"];
+const packages = ["env", "core"];
+const envPackageJson = JSON.parse(
+  fs.readFileSync("./packages/env/package.json", "utf8"),
+);
 for (const pkg of packages) {
   const packageJson = JSON.parse(
     fs.readFileSync(`./packages/${pkg}/package.json`, "utf8"),
@@ -36,6 +39,10 @@ for (const pkg of packages) {
   );
 
   jsrJson.version = packageJson.version;
+  if (pkg === "core") {
+    jsrJson.imports["@llamaindex/env"] =
+      `jsr:@llamaindex/env@${envPackageJson.version}`;
+  }
 
   fs.writeFileSync(
     `./packages/${pkg}/jsr.json`,
-- 
GitLab