diff --git a/Cargo.lock b/Cargo.lock index 20a24fd295..105a031091 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8134,9 +8134,9 @@ dependencies = [ [[package]] name = "tokio-fs-ext" -version = "0.6.9" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4950e63aa5b76311cb0a9d580d4202e46768abd8b2d17a739441d3dbdcbb524c" +checksum = "2d40184a3ebace868985529617fa92e871096ca74cdb41fb870341d0266fde87" dependencies = [ "bitflags 2.9.4", "cfg-if", diff --git a/Cargo.toml b/Cargo.toml index 348514ac3f..9bf44d370c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,7 +43,7 @@ serde_path_to_error = "0.1.16" simd-json = "0.17.0" thiserror = "1.0" tokio = { version = "1.47.1" } -tokio-fs-ext = "0.6.9" +tokio-fs-ext = "0.6.10" toml = "0.8" tracing = "0.1.41" tracing-subscriber = { version = "0.3.19", features = ["env-filter", "fmt"] } diff --git a/crates/utoo-wasm/src/lib.rs b/crates/utoo-wasm/src/lib.rs index 7e6500c850..1b45bfb59d 100644 --- a/crates/utoo-wasm/src/lib.rs +++ b/crates/utoo-wasm/src/lib.rs @@ -64,7 +64,6 @@ pub fn init_log_filter(mut filter: String) { let filter_str = filter.clone(); let fmt_layer = fmt::layer() .without_time() - .with_target(false) .with_writer(MakeWebConsoleWriter::new()) .with_filter(EnvFilter::new(filter)); diff --git a/examples/utooweb-demo/webpack.config.js b/examples/utooweb-demo/webpack.config.js index c7fa51c2d4..3277a68c9b 100644 --- a/examples/utooweb-demo/webpack.config.js +++ b/examples/utooweb-demo/webpack.config.js @@ -127,6 +127,13 @@ module.exports = [ ), to: "loaderWorker.js", }, + { + from: path.resolve( + __dirname, + "../../packages/utoo-web/esm/utoo/index_bg.wasm", + ), + to: "index_bg.wasm", + }, ], }), ], diff --git a/next.js b/next.js index e40211f1df..dccaddc634 160000 --- a/next.js +++ b/next.js @@ -1 +1 @@ -Subproject commit e40211f1df1744e45d7504f809b56c052a552eb8 +Subproject commit dccaddc6343d8973c65716b08bbad188f96fd275 diff --git a/packages/utoo-web/src/utoo/index.d.ts b/packages/utoo-web/src/utoo/index.d.ts index 3862717378..f4c9ae6f7a 100644 --- a/packages/utoo-web/src/utoo/index.d.ts +++ b/packages/utoo-web/src/utoo/index.d.ts @@ -142,10 +142,6 @@ export function workerCreated(worker_id: number): void; export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; export interface InitOutput { - readonly registerWorkerScheduler: (a: any, b: any) => void; - readonly workerCreated: (a: number) => void; - readonly initLogFilter: (a: number, b: number) => void; - readonly init_pack: () => void; readonly __wbg_direntry_free: (a: number, b: number) => void; readonly __wbg_get_direntry_name: (a: number) => [number, number]; readonly __wbg_get_direntry_type: (a: number) => number; @@ -185,6 +181,10 @@ export interface InitOutput { readonly project_write: (a: number, b: number, c: any) => any; readonly project_writeString: (a: number, b: number, c: number, d: number) => any; readonly project_writeSync: (a: number, b: number, c: any) => [number, number]; + readonly initLogFilter: (a: number, b: number) => void; + readonly init_pack: () => void; + readonly registerWorkerScheduler: (a: any, b: any) => void; + readonly workerCreated: (a: number) => void; readonly rust_mi_get_default_heap: () => number; readonly rust_mi_get_thread_id: () => number; readonly rust_mi_set_default_heap: (a: number) => void; @@ -209,16 +209,16 @@ export interface InitOutput { readonly wasmtaskmessage_data: (a: number) => any; readonly __wbg_createsyncaccesshandleoptions_free: (a: number, b: number) => void; readonly wasm_thread_entry_point: (a: number) => void; + readonly wasm_bindgen__convert__closures_____invoke__h09bb7c51b3f33a59: (a: number, b: number, c: any) => void; + readonly wasm_bindgen__closure__destroy__h480d1d539058407b: (a: number, b: number) => void; + readonly wasm_bindgen__convert__closures_____invoke__hce460cf0a813c454: (a: number, b: number) => void; + readonly wasm_bindgen__closure__destroy__hc14e8607e23cebd7: (a: number, b: number) => void; readonly wasm_bindgen__convert__closures________invoke__hc572a1bf691b2f02: (a: number, b: number, c: any) => void; readonly wasm_bindgen__closure__destroy__h79b136ee1664aaaa: (a: number, b: number) => void; - readonly wasm_bindgen__convert__closures_____invoke__h1fc3e28920f04101: (a: number, b: number) => void; - readonly wasm_bindgen__closure__destroy__h697219d9b2418ea3: (a: number, b: number) => void; readonly wasm_bindgen__convert__closures_____invoke__h12ad3f2e11ef8f1f: (a: number, b: number, c: any) => void; readonly wasm_bindgen__closure__destroy__ha0c175f92395ef9a: (a: number, b: number) => void; - readonly wasm_bindgen__convert__closures_____invoke__h8bdf724950a20526: (a: number, b: number, c: any) => void; - readonly wasm_bindgen__closure__destroy__h33b24a5c45343d26: (a: number, b: number) => void; - readonly wasm_bindgen__convert__closures_____invoke__hce460cf0a813c454: (a: number, b: number) => void; - readonly wasm_bindgen__closure__destroy__hc14e8607e23cebd7: (a: number, b: number) => void; + readonly wasm_bindgen__convert__closures_____invoke__h1fc3e28920f04101: (a: number, b: number) => void; + readonly wasm_bindgen__closure__destroy__h697219d9b2418ea3: (a: number, b: number) => void; readonly wasm_bindgen__convert__closures_____invoke__h05951ccee93604a9: (a: number, b: number, c: any) => void; readonly wasm_bindgen__closure__destroy__hc95bb6053e4d238d: (a: number, b: number) => void; readonly wasm_bindgen__convert__closures_____invoke__heb9448f3005917b6: (a: number, b: number, c: any, d: any) => void; diff --git a/packages/utoo-web/src/webpackLoaders/loaderWorkerPool.ts b/packages/utoo-web/src/webpackLoaders/loaderWorkerPool.ts index 93a3e67500..9154cb3dde 100644 --- a/packages/utoo-web/src/webpackLoaders/loaderWorkerPool.ts +++ b/packages/utoo-web/src/webpackLoaders/loaderWorkerPool.ts @@ -66,7 +66,7 @@ export const runLoaderWorkerPool = async ( workerData: { cwd: finalCwd, projectRoot: projectCwd, - workerId: workerId, + threadId: workerId, }, loaderAssets: { importMaps: { ...loadersImportMap }, diff --git a/packages/utoo-web/src/webpackLoaders/polyfills/fsPolyfill.ts b/packages/utoo-web/src/webpackLoaders/polyfills/fsPolyfill.ts index e2229026f6..e21d8141c5 100644 --- a/packages/utoo-web/src/webpackLoaders/polyfills/fsPolyfill.ts +++ b/packages/utoo-web/src/webpackLoaders/polyfills/fsPolyfill.ts @@ -2,16 +2,17 @@ import { Buffer } from "buffer"; import path from "path"; import { Stats } from "../../types"; import { promises } from "./fsPromisesPolyfill"; +import { workerData } from "./workerThreadsPolyfill"; function resolvePath(p: string): string { // @ts-ignore - const cwd = self.process?.cwd?.() || self.workerData?.cwd || "/"; + const cwd = self.process?.cwd?.() || workerData?.cwd || "/"; return path.resolve(cwd, p); } function getFs() { // @ts-ignore - const fs = self.workerData.fs; + const fs = workerData.fs; if (!fs) { throw new Error("FS not initialized"); } diff --git a/packages/utoo-web/src/webpackLoaders/polyfills/fsPromisesPolyfill.ts b/packages/utoo-web/src/webpackLoaders/polyfills/fsPromisesPolyfill.ts index 347d501e34..d73fe375b4 100644 --- a/packages/utoo-web/src/webpackLoaders/polyfills/fsPromisesPolyfill.ts +++ b/packages/utoo-web/src/webpackLoaders/polyfills/fsPromisesPolyfill.ts @@ -1,16 +1,17 @@ import { Buffer } from "buffer"; import path from "path"; import { Stats } from "../../types"; +import { workerData } from "./workerThreadsPolyfill"; function resolvePath(p: string): string { // @ts-ignore - const cwd = self.process?.cwd?.() || self.workerData?.cwd || "/"; + const cwd = self.process?.cwd?.() || workerData?.cwd || "/"; return path.resolve(cwd, p); } function getFs() { // @ts-ignore - const fs = self.workerData.fs; + const fs = workerData.fs; if (!fs) { throw new Error("FS not initialized"); } diff --git a/packages/utoo-web/src/webpackLoaders/polyfills/nodePolyFills.ts b/packages/utoo-web/src/webpackLoaders/polyfills/nodePolyFills.ts index 4023116074..d948939245 100644 --- a/packages/utoo-web/src/webpackLoaders/polyfills/nodePolyFills.ts +++ b/packages/utoo-web/src/webpackLoaders/polyfills/nodePolyFills.ts @@ -1,10 +1,13 @@ +import * as fs from "./fsPolyfill"; +import * as workerThreads from "./workerThreadsPolyfill"; + const buffer = require("buffer"); self.Buffer = buffer.Buffer; const process = require("process"); const originalCwd = process.cwd; process.cwd = () => { // @ts-ignore - return self.workerData?.cwd || originalCwd?.() || "/"; + return workerThreads.workerData?.cwd || originalCwd?.() || "/"; }; if (!process.versions) process.versions = {}; if (!process.versions.node) process.versions.node = "24.0.0"; @@ -15,22 +18,17 @@ const path = require("path"); const originalResolve = path.resolve; path.resolve = (...args: string[]) => { // @ts-ignore - const cwd = self.workerData?.cwd || "/"; + const cwd = workerThreads.workerData?.cwd || "/"; return originalResolve(cwd, ...args); }; -import * as fs from "./fsPolyfill"; -import * as workerThreads from "./workerThreadsPolyfill"; - -const workerThreadsWithLiveWorkerData = { +const workerThreadsWithWorkerData = { ...workerThreads, get workerData() { - // @ts-ignore - return self.workerData; + return workerThreads.workerData; }, get threadId() { - // @ts-ignore - return self.workerData?.workerId || 0; + return workerThreads.workerData?.threadId || 0; }, }; @@ -258,6 +256,6 @@ export default { return require("util"); }, - worker_threads: workerThreadsWithLiveWorkerData, - "node:worker_threads": workerThreadsWithLiveWorkerData, + worker_threads: workerThreadsWithWorkerData, + "node:worker_threads": workerThreadsWithWorkerData, }; diff --git a/packages/utoo-web/src/webpackLoaders/polyfills/workerThreadsPolyfill.ts b/packages/utoo-web/src/webpackLoaders/polyfills/workerThreadsPolyfill.ts index 963ab60b17..f6a2839395 100644 --- a/packages/utoo-web/src/webpackLoaders/polyfills/workerThreadsPolyfill.ts +++ b/packages/utoo-web/src/webpackLoaders/polyfills/workerThreadsPolyfill.ts @@ -1,6 +1,29 @@ -// @ts-ignore -export const workerData = self.workerData; +const globalSelf = self as any; + +export const workerData: any = new Proxy( + {}, + { + get(_target, prop) { + return globalSelf.workerData?.[prop]; + }, + has(_target, prop) { + return globalSelf.workerData && prop in globalSelf.workerData; + }, + ownKeys(_target) { + return globalSelf.workerData + ? Reflect.ownKeys(globalSelf.workerData) + : []; + }, + getOwnPropertyDescriptor(_target, prop) { + return globalSelf.workerData + ? Object.getOwnPropertyDescriptor(globalSelf.workerData, prop) + : undefined; + }, + }, +); + export const isMainThread = false; + export const parentPort = { postMessage: (message: any) => self.postMessage(message), on: (event: string, listener: (...args: any[]) => void) => { diff --git a/packages/utoo-web/src/webpackLoaders/types.ts b/packages/utoo-web/src/webpackLoaders/types.ts index f4f41e1d50..8d25d28254 100644 --- a/packages/utoo-web/src/webpackLoaders/types.ts +++ b/packages/utoo-web/src/webpackLoaders/types.ts @@ -1,6 +1,6 @@ export interface LoaderRunnerMeta { workerData: { - workerId: number; + threadId: number; cwd: string; projectRoot: string; }; diff --git a/packages/utoo-web/src/webpackLoaders/worker.ts b/packages/utoo-web/src/webpackLoaders/worker.ts index 5e5e70449f..0df58165d9 100644 --- a/packages/utoo-web/src/webpackLoaders/worker.ts +++ b/packages/utoo-web/src/webpackLoaders/worker.ts @@ -19,7 +19,7 @@ declare let self: DedicatedWorkerGlobalScope & { cwd: () => string; }; workerData: { - workerId: number; + threadId: number; cwd: string; projectRoot: string; binding: typeof binding; @@ -46,7 +46,7 @@ export function startLoaderWorker() { Project.setCwd(meta.workerData.cwd); self.workerData = { - workerId: meta.workerData.workerId, + threadId: meta.workerData.threadId, cwd: meta.workerData.cwd, projectRoot: meta.workerData.projectRoot, binding,