@utoo/web 1.0.7 → 1.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/esm/aa0ad15d2a587c43406f.wasm +0 -0
  2. package/esm/internalProject.d.ts +1 -0
  3. package/esm/internalProject.js +10 -85
  4. package/esm/loaderWorker.js +2 -0
  5. package/esm/loaderWorker.js.LICENSE.txt +44 -0
  6. package/esm/loaderWorkerPool.d.ts +3 -0
  7. package/esm/loaderWorkerPool.js +125 -0
  8. package/esm/project.d.ts +1 -0
  9. package/esm/project.js +2 -0
  10. package/esm/sabcom.d.ts +31 -0
  11. package/esm/sabcom.js +71 -0
  12. package/esm/type.d.ts +1 -0
  13. package/esm/utoo/index.d.ts +71 -46
  14. package/esm/utoo/index.js +260 -168
  15. package/esm/utoo/index_bg.wasm +0 -0
  16. package/esm/webpackLoaders/loaders/less-loader/index.js +7 -12
  17. package/esm/webpackLoaders/loaders/less-loader/options.json +1 -3
  18. package/esm/webpackLoaders/loaders/less-loader/utils.js +14 -34
  19. package/esm/webpackLoaders/worker/cjs.js +253 -58
  20. package/esm/webpackLoaders/worker/index.d.ts +2 -2
  21. package/esm/webpackLoaders/worker/index.js +36 -26
  22. package/esm/webpackLoaders/worker/polyfills/fastGlobPolyfill.d.ts +2 -0
  23. package/esm/webpackLoaders/worker/polyfills/fastGlobPolyfill.js +48 -0
  24. package/esm/webpackLoaders/worker/polyfills/fsPolyfill.d.ts +124 -0
  25. package/esm/webpackLoaders/worker/polyfills/fsPolyfill.js +316 -0
  26. package/esm/webpackLoaders/worker/polyfills/fsPromisesPolyfill.d.ts +9 -0
  27. package/esm/webpackLoaders/worker/polyfills/fsPromisesPolyfill.js +9 -0
  28. package/esm/webpackLoaders/worker/polyfills/nodePolyFills.d.ts +94 -0
  29. package/esm/webpackLoaders/worker/polyfills/nodePolyFills.js +229 -0
  30. package/esm/webpackLoaders/worker/polyfills/workerThreadsPolyfill.d.ts +7 -0
  31. package/esm/webpackLoaders/worker/polyfills/workerThreadsPolyfill.js +16 -0
  32. package/esm/webpackLoaders/worker/type.d.ts +1 -1
  33. package/package.json +11 -11
  34. package/esm/webpackLoaders/worker/nodePolyFills.d.ts +0 -14
  35. package/esm/webpackLoaders/worker/nodePolyFills.js +0 -24
  36. package/esm/webpackLoaders/workerContent.d.ts +0 -2
  37. package/esm/webpackLoaders/workerContent.js +0 -1
Binary file
@@ -4,6 +4,7 @@ declare class InternalEndpoint implements ProjectEndpoint {
4
4
  projectInternal?: ProjectInternal;
5
5
  wasmInit?: ReturnType<typeof initWasm>;
6
6
  options?: Omit<ProjectOptions, "workerUrl" | "serviceWorker">;
7
+ loaderWorkerPoolInitialized: boolean;
7
8
  mount(opt: Omit<ProjectOptions, "workerUrl" | "serviceWorker">): Promise<void>;
8
9
  install(packageLock: string, maxConcurrentDownloads?: number): Promise<void>;
9
10
  build(): Promise<any>;
@@ -1,86 +1,9 @@
1
- import initWasm, { init_log_filter, Project as ProjectInternal, recvPoolRequest, recvWorkerTermination, } from "./utoo";
2
- // @ts-ignore
3
- import webpackLoadersCode from "./webpackLoaders/workerContent";
4
- let nextWorkerId = 0;
5
- const loaderWorkers = {};
6
- async function getTurbopackLoaderAssets() {
7
- const turbopackLoaderAssets = {};
8
- const dirEntries = await internalEndpoint.projectInternal.readDir(".turbopack");
9
- await Promise.all(dirEntries.map(async (entry) => {
10
- // only collect .js files
11
- if (entry.type === "file" && entry.name.endsWith(".js")) {
12
- turbopackLoaderAssets[`./${entry.name}`] =
13
- await internalEndpoint.projectInternal.readToString(`.turbopack/${entry.name}`);
14
- }
15
- }));
16
- return turbopackLoaderAssets;
17
- }
18
- const createOrScalePool = async (binding, loadersImportMap) => {
19
- while (true) {
20
- try {
21
- let poolOptions = await recvPoolRequest();
22
- const { filename: entrypoint, maxConcurrency } = poolOptions;
23
- const concurrency = Math.max(maxConcurrency, navigator.hardwareConcurrency);
24
- const workers = loaderWorkers[entrypoint] || (loaderWorkers[entrypoint] = []);
25
- if (workers.length < concurrency) {
26
- for (let i = workers.length; i < concurrency; i++) {
27
- nextWorkerId += 1;
28
- const turbopackLoaderAssets = await getTurbopackLoaderAssets();
29
- const blob = new Blob([webpackLoadersCode], {
30
- type: "text/javascript",
31
- });
32
- const workerUrl = URL.createObjectURL(blob);
33
- const worker = new Worker(workerUrl);
34
- worker.postMessage([
35
- // @ts-ignore
36
- initWasm.__wbindgen_wasm_module,
37
- binding.memory,
38
- {
39
- workerData: {
40
- poolId: entrypoint,
41
- workerId: nextWorkerId,
42
- },
43
- loaderAssets: {
44
- importMaps: { ...turbopackLoaderAssets, ...loadersImportMap },
45
- entrypoint: entrypoint.replace(".turbopack/", ""),
46
- },
47
- },
48
- ]);
49
- // @ts-ignore
50
- worker.workerId = nextWorkerId;
51
- // @ts-ignore
52
- workers.push(worker);
53
- }
54
- }
55
- else if (workers.length > concurrency) {
56
- const workersToStop = workers.splice(0, workers.length - concurrency);
57
- workersToStop.forEach((worker) => worker.terminate());
58
- }
59
- }
60
- catch (_e) {
61
- // rust channel closed. do nothing
62
- return;
63
- }
64
- }
65
- };
66
- const waitingForWorkerTermination = async () => {
67
- while (true) {
68
- try {
69
- const { filename, workerId } = await recvWorkerTermination();
70
- const workers = loaderWorkers[filename];
71
- const workerIdx = workers.findIndex((worker) => worker.workerId === workerId);
72
- if (workerIdx > -1) {
73
- const worker = workers.splice(workerIdx, 1);
74
- worker[0].terminate();
75
- }
76
- }
77
- catch (_e) {
78
- // rust channel closed. do nothing
79
- return;
80
- }
81
- }
82
- };
1
+ import { runLoaderWorkerPool } from "./loaderWorkerPool";
2
+ import initWasm, { init_log_filter, Project as ProjectInternal, } from "./utoo";
83
3
  class InternalEndpoint {
4
+ constructor() {
5
+ this.loaderWorkerPoolInitialized = false;
6
+ }
84
7
  // This should be called only once
85
8
  async mount(opt) {
86
9
  var _a;
@@ -100,10 +23,12 @@ class InternalEndpoint {
100
23
  return;
101
24
  }
102
25
  async build() {
103
- var _a;
26
+ var _a, _b;
104
27
  const binding = await this.wasmInit;
105
- createOrScalePool(binding, (_a = this.options) === null || _a === void 0 ? void 0 : _a.loadersImportMap);
106
- waitingForWorkerTermination();
28
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.loaderWorkerUrl) && !this.loaderWorkerPoolInitialized) {
29
+ runLoaderWorkerPool(binding, this.options.cwd, this.projectInternal, this.options.loaderWorkerUrl, (_b = this.options) === null || _b === void 0 ? void 0 : _b.loadersImportMap);
30
+ this.loaderWorkerPoolInitialized = true;
31
+ }
107
32
  return await this.projectInternal.build();
108
33
  }
109
34
  async readFile(path, encoding) {