Timothy Jaeryang Baek 2 ماه پیش
والد
کامیت
09cd95bffe
4فایلهای تغییر یافته به همراه37 افزوده شده و 40 حذف شده
  1. 5 4
      package-lock.json
  2. 1 1
      package.json
  3. 31 35
      src/lib/workers/pyodide.worker.ts
  4. 0 0
      static/pyodide/pyodide-lock.json

+ 5 - 4
package-lock.json

@@ -56,7 +56,7 @@
 				"prosemirror-schema-list": "^1.4.1",
 				"prosemirror-state": "^1.4.3",
 				"prosemirror-view": "^1.34.3",
-				"pyodide": "^0.26.1",
+				"pyodide": "^0.27.2",
 				"socket.io-client": "^4.2.0",
 				"sortablejs": "^1.15.2",
 				"svelte-sonner": "^0.3.19",
@@ -9366,9 +9366,10 @@
 			}
 		},
 		"node_modules/pyodide": {
-			"version": "0.26.1",
-			"resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.26.1.tgz",
-			"integrity": "sha512-P+Gm88nwZqY7uBgjbQH8CqqU6Ei/rDn7pS1t02sNZsbyLJMyE2OVXjgNuqVT3KqYWnyGREUN0DbBUCJqk8R0ew==",
+			"version": "0.27.2",
+			"resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.27.2.tgz",
+			"integrity": "sha512-sfA2kiUuQVRpWI4BYnU3sX5PaTTt/xrcVEmRzRcId8DzZXGGtPgCBC0gCqjUTUYSa8ofPaSjXmzESc86yvvCHg==",
+			"license": "Apache-2.0",
 			"dependencies": {
 				"ws": "^8.5.0"
 			},

+ 1 - 1
package.json

@@ -98,7 +98,7 @@
 		"prosemirror-schema-list": "^1.4.1",
 		"prosemirror-state": "^1.4.3",
 		"prosemirror-view": "^1.34.3",
-		"pyodide": "^0.26.1",
+		"pyodide": "^0.27.2",
 		"socket.io-client": "^4.2.0",
 		"sortablejs": "^1.15.2",
 		"svelte-sonner": "^0.3.19",

+ 31 - 35
src/lib/workers/pyodide.worker.ts

@@ -74,44 +74,40 @@ self.onmessage = async (event) => {
 };
 
 function processResult(result: any): any {
-	// Handle null and undefined
-	if (result == null) {
-		return result;
-	}
-
-	// Handle primitive types
-	if (typeof result !== 'object') {
-		return result;
-	}
-
-	// Handle Date objects
-	if (result instanceof Date) {
-		return result.toISOString();
-	}
-
-	// Handle Arrays
-	if (Array.isArray(result)) {
-		return result.map((item) => processResult(item));
-	}
-
-	// Handle Proxy objects (assuming they're from Pyodide)
-	if (typeof result.toJs === 'function') {
-		return processResult(result.toJs());
-	}
-
-	// Handle regular objects
-	if (typeof result === 'object') {
-		const processedObject: { [key: string]: any } = {};
-		for (const key in result) {
-			if (Object.prototype.hasOwnProperty.call(result, key)) {
-				processedObject[key] = processResult(result[key]);
+	// Catch and always return JSON-safe string representations
+	try {
+		if (result == null) {
+			// Handle null and undefined
+			return null;
+		}
+		if (typeof result === 'string' || typeof result === 'number' || typeof result === 'boolean') {
+			// Handle primitive types directly
+			return result;
+		}
+		if (Array.isArray(result)) {
+			// If it's an array, recursively process items
+			return result.map((item) => processResult(item));
+		}
+		if (typeof result.toJs === 'function') {
+			// If it's a Pyodide proxy object (e.g., Pandas DF, Numpy Array), convert to JS and process recursively
+			return processResult(result.toJs());
+		}
+		if (typeof result === 'object') {
+			// Convert JS objects to a recursively serialized representation
+			const processedObject: { [key: string]: any } = {};
+			for (const key in result) {
+				if (Object.prototype.hasOwnProperty.call(result, key)) {
+					processedObject[key] = processResult(result[key]);
+				}
 			}
+			return processedObject;
 		}
-		return processedObject;
+		// Stringify anything that's left (e.g., Proxy objects that cannot be directly processed)
+		return JSON.stringify(result);
+	} catch (err) {
+		// In case something unexpected happens, we return a stringified fallback
+		return `[processResult error]: ${err.toString()}`;
 	}
-
-	// If we can't process it, return null or a placeholder
-	return null;
 }
 
 export default {};

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
static/pyodide/pyodide-lock.json


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است