wasm-image-optimization 1.4.4 → 1.4.6
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.
- package/dist/cjs/libImage.js +1 -1
- package/dist/cjs/libImage.wasm +0 -0
- package/dist/cjs/node/cjs-worker.d.ts +1 -1
- package/dist/cjs/node/node-worker.js +361 -139
- package/dist/esm/libImage.js +0 -0
- package/dist/esm/web-worker.js +234 -98
- package/dist/web-worker/index.d.ts +1 -1
- package/package.json +11 -11
|
@@ -4,65 +4,200 @@ var __commonJS = (cb, mod) => function __require() {
|
|
|
4
4
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
// node_modules/.pnpm/worker-lib@2.0
|
|
8
|
-
var
|
|
9
|
-
"node_modules/.pnpm/worker-lib@2.0
|
|
7
|
+
// node_modules/.pnpm/worker-lib@2.2.0/node_modules/worker-lib/dist/cjs/common.js
|
|
8
|
+
var require_common = __commonJS({
|
|
9
|
+
"node_modules/.pnpm/worker-lib@2.2.0/node_modules/worker-lib/dist/cjs/common.js"(exports2) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
12
|
-
exports2.
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
19
|
-
});
|
|
12
|
+
exports2.createRegistry = exports2.getTransferables = exports2.isPlainObject = exports2.isPlaceholder = exports2.FUNCTION_PLACEHOLDER = void 0;
|
|
13
|
+
exports2.FUNCTION_PLACEHOLDER = "__worker_lib_function__";
|
|
14
|
+
var isPlaceholder = (v) => v && typeof v === "object" && exports2.FUNCTION_PLACEHOLDER in v;
|
|
15
|
+
exports2.isPlaceholder = isPlaceholder;
|
|
16
|
+
var isPlainObject = (v) => {
|
|
17
|
+
return v && typeof v === "object" && Object.prototype.toString.call(v) === "[object Object]" && !(v instanceof Uint8Array) && !(v instanceof ArrayBuffer) && !ArrayBuffer.isView(v);
|
|
20
18
|
};
|
|
21
|
-
|
|
19
|
+
exports2.isPlainObject = isPlainObject;
|
|
20
|
+
var getTransferables = (v, result = []) => {
|
|
21
|
+
if (v instanceof ArrayBuffer) {
|
|
22
|
+
result.push(v);
|
|
23
|
+
} else if (ArrayBuffer.isView(v)) {
|
|
24
|
+
result.push(v.buffer);
|
|
25
|
+
} else if (Array.isArray(v)) {
|
|
26
|
+
for (const item of v)
|
|
27
|
+
(0, exports2.getTransferables)(item, result);
|
|
28
|
+
} else if (v && typeof v === "object") {
|
|
29
|
+
for (const key in v)
|
|
30
|
+
(0, exports2.getTransferables)(v[key], result);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
exports2.getTransferables = getTransferables;
|
|
35
|
+
var createRegistry = () => {
|
|
36
|
+
const callbacks = /* @__PURE__ */ new Map();
|
|
37
|
+
const callbackProxies = /* @__PURE__ */ new Map();
|
|
38
|
+
const registerCallback = (requestId, fn) => {
|
|
39
|
+
const id = `${requestId}:${Math.random().toString(36).slice(2)}`;
|
|
40
|
+
callbacks.set(id, fn);
|
|
41
|
+
return id;
|
|
42
|
+
};
|
|
43
|
+
const clearCallbacks = (requestId) => {
|
|
44
|
+
for (const key of callbacks.keys()) {
|
|
45
|
+
if (key.startsWith(`${requestId}:`)) {
|
|
46
|
+
callbacks.delete(key);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const key of callbackProxies.keys()) {
|
|
50
|
+
if (key.startsWith(`${requestId}:`)) {
|
|
51
|
+
callbackProxies.delete(key);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const transformArgs = (requestId, args) => {
|
|
56
|
+
if (typeof args === "function") {
|
|
57
|
+
return { [exports2.FUNCTION_PLACEHOLDER]: registerCallback(requestId, args) };
|
|
58
|
+
}
|
|
59
|
+
if (ArrayBuffer.isView(args) || args instanceof ArrayBuffer) {
|
|
60
|
+
return args;
|
|
61
|
+
}
|
|
62
|
+
if (Array.isArray(args)) {
|
|
63
|
+
return args.map((v) => transformArgs(requestId, v));
|
|
64
|
+
}
|
|
65
|
+
if ((0, exports2.isPlainObject)(args)) {
|
|
66
|
+
const result = {};
|
|
67
|
+
for (const key in args) {
|
|
68
|
+
result[key] = transformArgs(requestId, args[key]);
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
return args;
|
|
73
|
+
};
|
|
74
|
+
const resolveArgs = (requestId, args, createProxy) => {
|
|
75
|
+
if ((0, exports2.isPlaceholder)(args)) {
|
|
76
|
+
return createProxy(args[exports2.FUNCTION_PLACEHOLDER]);
|
|
77
|
+
}
|
|
78
|
+
if (Array.isArray(args)) {
|
|
79
|
+
return args.map((v) => resolveArgs(requestId, v, createProxy));
|
|
80
|
+
}
|
|
81
|
+
if ((0, exports2.isPlainObject)(args)) {
|
|
82
|
+
const result = {};
|
|
83
|
+
for (const key in args) {
|
|
84
|
+
result[key] = resolveArgs(requestId, args[key], createProxy);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
return args;
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
callbacks,
|
|
92
|
+
callbackProxies,
|
|
93
|
+
registerCallback,
|
|
94
|
+
clearCallbacks,
|
|
95
|
+
transformArgs,
|
|
96
|
+
resolveArgs
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
exports2.createRegistry = createRegistry;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// node_modules/.pnpm/worker-lib@2.2.0/node_modules/worker-lib/dist/cjs/pool.js
|
|
104
|
+
var require_pool = __commonJS({
|
|
105
|
+
"node_modules/.pnpm/worker-lib@2.2.0/node_modules/worker-lib/dist/cjs/pool.js"(exports2) {
|
|
106
|
+
"use strict";
|
|
107
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
108
|
+
exports2.initUniversalWorker = exports2.createWorkerPool = exports2.exec = void 0;
|
|
109
|
+
var common_1 = require_common();
|
|
110
|
+
var requestIdCounter = 0;
|
|
111
|
+
var exec = (worker, name, registry, ...args) => {
|
|
112
|
+
const requestId = requestIdCounter++;
|
|
113
|
+
const { callbacks, callbackProxies, clearCallbacks, transformArgs, resolveArgs } = registry;
|
|
22
114
|
return new Promise((resolve, reject) => {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
115
|
+
const createProxy = (callbackId) => {
|
|
116
|
+
const key = `${requestId}:${callbackId}`;
|
|
117
|
+
if (callbackProxies.has(key))
|
|
118
|
+
return callbackProxies.get(key);
|
|
119
|
+
const proxy = (...proxyArgs) => {
|
|
120
|
+
const callId = Math.random().toString(36).slice(2);
|
|
121
|
+
return new Promise((res) => {
|
|
122
|
+
const handler = (data) => {
|
|
123
|
+
if (data.type === "callback_result" && data.payload.id === callId) {
|
|
124
|
+
worker.removeEventListener("message", handler);
|
|
125
|
+
res(resolveArgs(requestId, data.payload.result, createProxy));
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
worker.addEventListener("message", handler);
|
|
129
|
+
const transformedProxyArgs = transformArgs(requestId, proxyArgs);
|
|
27
130
|
worker.postMessage({
|
|
28
|
-
type: "
|
|
29
|
-
payload: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
131
|
+
type: "callback_call",
|
|
132
|
+
payload: {
|
|
133
|
+
id: requestId,
|
|
134
|
+
callbackId,
|
|
135
|
+
args: transformedProxyArgs,
|
|
136
|
+
callId
|
|
137
|
+
}
|
|
138
|
+
}, (0, common_1.getTransferables)(transformedProxyArgs));
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
callbackProxies.set(key, proxy);
|
|
142
|
+
return proxy;
|
|
143
|
+
};
|
|
144
|
+
const messageHandler = async (data) => {
|
|
145
|
+
if (!data || typeof data !== "object")
|
|
146
|
+
return;
|
|
147
|
+
const payload = data.payload;
|
|
148
|
+
if (payload?.id !== requestId)
|
|
149
|
+
return;
|
|
150
|
+
if (data.type === "result") {
|
|
151
|
+
worker.removeEventListener("message", messageHandler);
|
|
152
|
+
const result = resolveArgs(requestId, payload.result, createProxy);
|
|
153
|
+
clearCallbacks(requestId);
|
|
154
|
+
resolve(result);
|
|
155
|
+
} else if (data.type === "error") {
|
|
156
|
+
worker.removeEventListener("message", messageHandler);
|
|
157
|
+
clearCallbacks(requestId);
|
|
158
|
+
reject(payload.error);
|
|
159
|
+
} else if (data.type === "callback_call") {
|
|
160
|
+
const { callbackId, args: callArgs, callId } = payload;
|
|
161
|
+
const fn = callbacks.get(callbackId);
|
|
162
|
+
if (fn) {
|
|
163
|
+
try {
|
|
164
|
+
const result = await fn(...resolveArgs(requestId, callArgs, createProxy));
|
|
165
|
+
const transformedResult = transformArgs(requestId, result);
|
|
166
|
+
worker.postMessage({
|
|
167
|
+
type: "callback_result",
|
|
168
|
+
payload: { id: callId, result: transformedResult }
|
|
169
|
+
}, (0, common_1.getTransferables)(transformedResult));
|
|
170
|
+
} catch (e) {
|
|
171
|
+
console.error("[worker-lib] Callback execution failed:", e);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
40
174
|
}
|
|
41
175
|
};
|
|
42
|
-
worker.
|
|
176
|
+
worker.addEventListener("message", messageHandler);
|
|
177
|
+
const transformedArgs = transformArgs(requestId, args);
|
|
43
178
|
worker.postMessage({
|
|
44
179
|
type: "function",
|
|
45
180
|
payload: {
|
|
181
|
+
id: requestId,
|
|
46
182
|
name,
|
|
47
|
-
|
|
48
|
-
callback: value.map((v) => typeof v === "function")
|
|
183
|
+
args: transformedArgs
|
|
49
184
|
}
|
|
50
|
-
});
|
|
185
|
+
}, (0, common_1.getTransferables)(transformedArgs));
|
|
51
186
|
});
|
|
52
187
|
};
|
|
53
|
-
|
|
188
|
+
exports2.exec = exec;
|
|
189
|
+
var createWorkerPool = (builder, limit = 4) => {
|
|
54
190
|
let workers = Array(limit).fill(void 0).map(() => ({}));
|
|
55
191
|
const emptyWaits = [];
|
|
56
192
|
let isEmptyWait = false;
|
|
193
|
+
const registry = (0, common_1.createRegistry)();
|
|
57
194
|
const getResolver = async () => {
|
|
58
195
|
while (true) {
|
|
59
196
|
const target = workers.find(({ resultResolver }) => !resultResolver);
|
|
60
197
|
if (target) {
|
|
61
198
|
target.resultResolver = Promise.withResolvers();
|
|
62
199
|
if (!target.worker) {
|
|
63
|
-
|
|
64
|
-
const worker = result instanceof node_worker_threads_1.Worker ? result : new node_worker_threads_1.Worker(result);
|
|
65
|
-
target.worker = await init(worker);
|
|
200
|
+
target.worker = await builder();
|
|
66
201
|
}
|
|
67
202
|
return target;
|
|
68
203
|
}
|
|
@@ -74,7 +209,7 @@ var require_node = __commonJS({
|
|
|
74
209
|
const { resultResolver } = target;
|
|
75
210
|
if (!resultResolver)
|
|
76
211
|
throw new Error("Unexpected error");
|
|
77
|
-
exec(target.worker, name, ...value).then(resultResolver.resolve).catch(resultResolver.reject).finally(() => {
|
|
212
|
+
(0, exports2.exec)(target.worker, name, registry, ...value).then(resultResolver.resolve).catch(resultResolver.reject).finally(() => {
|
|
78
213
|
target.resultResolver = void 0;
|
|
79
214
|
});
|
|
80
215
|
return resultResolver.promise;
|
|
@@ -82,9 +217,7 @@ var require_node = __commonJS({
|
|
|
82
217
|
const launchWorker = async () => {
|
|
83
218
|
return Promise.all(workers.map(async (target) => {
|
|
84
219
|
if (!target.worker) {
|
|
85
|
-
|
|
86
|
-
const worker = result instanceof node_worker_threads_1.Worker ? result : new node_worker_threads_1.Worker(result);
|
|
87
|
-
target.worker = await init(worker);
|
|
220
|
+
target.worker = await builder();
|
|
88
221
|
}
|
|
89
222
|
}));
|
|
90
223
|
};
|
|
@@ -115,58 +248,155 @@ var require_node = __commonJS({
|
|
|
115
248
|
return p.promise;
|
|
116
249
|
};
|
|
117
250
|
const close = () => {
|
|
118
|
-
for (const
|
|
119
|
-
worker?.terminate();
|
|
251
|
+
for (const target of workers) {
|
|
252
|
+
target.worker?.terminate();
|
|
253
|
+
target.worker = void 0;
|
|
254
|
+
target.resultResolver = void 0;
|
|
120
255
|
}
|
|
121
256
|
};
|
|
122
|
-
const setLimit = (
|
|
257
|
+
const setLimit = (newLimit) => {
|
|
123
258
|
workers.forEach((w) => w.worker?.terminate());
|
|
124
|
-
workers = Array(
|
|
259
|
+
workers = Array(newLimit).fill(void 0).map(() => ({}));
|
|
125
260
|
};
|
|
126
261
|
return { execute, waitAll, waitReady, close, setLimit, launchWorker };
|
|
127
262
|
};
|
|
128
|
-
exports2.
|
|
129
|
-
var
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
263
|
+
exports2.createWorkerPool = createWorkerPool;
|
|
264
|
+
var initUniversalWorker = (worker, WorkerProc) => {
|
|
265
|
+
const { callbacks, callbackProxies, registerCallback, clearCallbacks, transformArgs, resolveArgs } = (0, common_1.createRegistry)();
|
|
266
|
+
const createProxy = (callbackId, requestId) => {
|
|
267
|
+
const key = `${requestId}:${callbackId}`;
|
|
268
|
+
if (callbackProxies.has(key))
|
|
269
|
+
return callbackProxies.get(key);
|
|
270
|
+
const proxy = (...proxyArgs) => {
|
|
271
|
+
const callId = Math.random().toString(36).slice(2);
|
|
272
|
+
return new Promise((res) => {
|
|
273
|
+
const handler = (data) => {
|
|
274
|
+
if (data.type === "callback_result" && data.payload.id === callId) {
|
|
275
|
+
worker.removeEventListener("message", handler);
|
|
276
|
+
res(resolveArgs(requestId, data.payload.result, (cbId) => createProxy(cbId, requestId)));
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
worker.addEventListener("message", handler);
|
|
280
|
+
const transformedArgs = transformArgs(requestId, proxyArgs);
|
|
281
|
+
worker.postMessage({
|
|
282
|
+
type: "callback_call",
|
|
283
|
+
payload: {
|
|
284
|
+
id: requestId,
|
|
285
|
+
callbackId,
|
|
286
|
+
args: transformedArgs,
|
|
287
|
+
callId
|
|
288
|
+
}
|
|
289
|
+
}, (0, common_1.getTransferables)(transformedArgs));
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
callbackProxies.set(key, proxy);
|
|
293
|
+
return proxy;
|
|
294
|
+
};
|
|
295
|
+
worker.addEventListener("message", async (data) => {
|
|
296
|
+
if (!data)
|
|
297
|
+
return;
|
|
135
298
|
if (data.type === "function") {
|
|
136
|
-
const {
|
|
299
|
+
const { id, name, args } = data.payload;
|
|
137
300
|
const proc = WorkerProc[name];
|
|
138
301
|
if (proc) {
|
|
139
302
|
try {
|
|
140
|
-
const
|
|
303
|
+
const resolvedArgs = resolveArgs(id, args, (cbId) => createProxy(cbId, id));
|
|
304
|
+
const result = await proc(...resolvedArgs);
|
|
305
|
+
const transformedResult = transformArgs(id, result);
|
|
141
306
|
worker.postMessage({
|
|
142
307
|
type: "result",
|
|
143
|
-
payload:
|
|
308
|
+
payload: { id, result: transformedResult }
|
|
309
|
+
}, (0, common_1.getTransferables)(transformedResult));
|
|
310
|
+
clearCallbacks(id);
|
|
311
|
+
} catch (error) {
|
|
312
|
+
worker.postMessage({
|
|
313
|
+
type: "error",
|
|
314
|
+
payload: { id, error: String(error) }
|
|
144
315
|
});
|
|
316
|
+
clearCallbacks(id);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
} else if (data.type === "callback_call") {
|
|
320
|
+
const { id, callbackId, args, callId } = data.payload;
|
|
321
|
+
const fn = callbacks.get(callbackId);
|
|
322
|
+
if (fn) {
|
|
323
|
+
try {
|
|
324
|
+
const result = await fn(...resolveArgs(id, args, (cbId) => createProxy(cbId, id)));
|
|
325
|
+
const transformedResult = transformArgs(id, result);
|
|
326
|
+
worker.postMessage({
|
|
327
|
+
type: "callback_result",
|
|
328
|
+
payload: { id: callId, result: transformedResult }
|
|
329
|
+
}, (0, common_1.getTransferables)(transformedResult));
|
|
145
330
|
} catch (e) {
|
|
146
|
-
|
|
331
|
+
console.error("[worker-lib] Worker-side callback failed:", e);
|
|
147
332
|
}
|
|
148
333
|
}
|
|
149
334
|
}
|
|
150
335
|
});
|
|
151
|
-
worker.postMessage(
|
|
336
|
+
worker.postMessage("ready");
|
|
152
337
|
return WorkerProc;
|
|
153
338
|
};
|
|
154
|
-
exports2.
|
|
155
|
-
|
|
156
|
-
|
|
339
|
+
exports2.initUniversalWorker = initUniversalWorker;
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
// node_modules/.pnpm/worker-lib@2.2.0/node_modules/worker-lib/dist/cjs/node.js
|
|
344
|
+
var require_node = __commonJS({
|
|
345
|
+
"node_modules/.pnpm/worker-lib@2.2.0/node_modules/worker-lib/dist/cjs/node.js"(exports2) {
|
|
346
|
+
"use strict";
|
|
347
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
348
|
+
exports2.initWorker = exports2.createWorker = exports2.Worker = void 0;
|
|
349
|
+
var node_worker_threads_1 = require("node:worker_threads");
|
|
350
|
+
var pool_1 = require_pool();
|
|
351
|
+
var node_worker_threads_2 = require("node:worker_threads");
|
|
352
|
+
Object.defineProperty(exports2, "Worker", { enumerable: true, get: function() {
|
|
353
|
+
return node_worker_threads_2.Worker;
|
|
354
|
+
} });
|
|
355
|
+
var wrapWorker = (worker) => ({
|
|
356
|
+
postMessage: (message, transfer) => worker.postMessage(message, transfer),
|
|
357
|
+
addEventListener: (type, listener) => {
|
|
358
|
+
worker.on(type, listener);
|
|
359
|
+
},
|
|
360
|
+
removeEventListener: (type, listener) => {
|
|
361
|
+
worker.removeListener(type, listener);
|
|
362
|
+
},
|
|
363
|
+
terminate: () => worker.terminate()
|
|
364
|
+
});
|
|
365
|
+
var init = (worker) => {
|
|
157
366
|
return new Promise((resolve) => {
|
|
158
|
-
worker.once("message", (
|
|
159
|
-
|
|
160
|
-
resolve(data.payload.result);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
worker.postMessage({
|
|
164
|
-
type: "callback",
|
|
165
|
-
payload: { id, index, value: params }
|
|
367
|
+
worker.once("message", () => {
|
|
368
|
+
resolve(worker);
|
|
166
369
|
});
|
|
167
370
|
});
|
|
168
371
|
};
|
|
169
|
-
var
|
|
372
|
+
var createWorker = (builder, limit = 4) => {
|
|
373
|
+
return (0, pool_1.createWorkerPool)(async () => {
|
|
374
|
+
const result = builder();
|
|
375
|
+
const worker = result instanceof node_worker_threads_1.Worker ? result : new node_worker_threads_1.Worker(result);
|
|
376
|
+
await init(worker);
|
|
377
|
+
return wrapWorker(worker);
|
|
378
|
+
}, limit);
|
|
379
|
+
};
|
|
380
|
+
exports2.createWorker = createWorker;
|
|
381
|
+
var initWorker = (WorkerProc) => {
|
|
382
|
+
const worker = node_worker_threads_1.parentPort;
|
|
383
|
+
if (!worker) {
|
|
384
|
+
throw new Error("This is not a worker thread");
|
|
385
|
+
}
|
|
386
|
+
const universalWorker = {
|
|
387
|
+
postMessage: (message, transfer) => worker.postMessage(message, transfer),
|
|
388
|
+
addEventListener: (type, listener) => {
|
|
389
|
+
worker.on(type, listener);
|
|
390
|
+
},
|
|
391
|
+
removeEventListener: (type, listener) => {
|
|
392
|
+
worker.removeListener(type, listener);
|
|
393
|
+
},
|
|
394
|
+
terminate: () => {
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
return (0, pool_1.initUniversalWorker)(universalWorker, WorkerProc);
|
|
398
|
+
};
|
|
399
|
+
exports2.initWorker = initWorker;
|
|
170
400
|
}
|
|
171
401
|
});
|
|
172
402
|
|
|
@@ -1008,7 +1238,7 @@ var require_libImage = __commonJS({
|
|
|
1008
1238
|
var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
|
|
1009
1239
|
FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror);
|
|
1010
1240
|
};
|
|
1011
|
-
var FS = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: false, ignorePermissions: true, filesystems: null, syncFSRequests: 0,
|
|
1241
|
+
var FS = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: false, ignorePermissions: true, filesystems: null, syncFSRequests: 0, ErrnoError: class {
|
|
1012
1242
|
name = "ErrnoError";
|
|
1013
1243
|
constructor(errno) {
|
|
1014
1244
|
this.errno = errno;
|
|
@@ -1220,9 +1450,11 @@ var require_libImage = __commonJS({
|
|
|
1220
1450
|
}
|
|
1221
1451
|
if (perms.includes("r") && !(node.mode & 292)) {
|
|
1222
1452
|
return 2;
|
|
1223
|
-
}
|
|
1453
|
+
}
|
|
1454
|
+
if (perms.includes("w") && !(node.mode & 146)) {
|
|
1224
1455
|
return 2;
|
|
1225
|
-
}
|
|
1456
|
+
}
|
|
1457
|
+
if (perms.includes("x") && !(node.mode & 73)) {
|
|
1226
1458
|
return 2;
|
|
1227
1459
|
}
|
|
1228
1460
|
return 0;
|
|
@@ -1260,10 +1492,8 @@ var require_libImage = __commonJS({
|
|
|
1260
1492
|
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
|
|
1261
1493
|
return 10;
|
|
1262
1494
|
}
|
|
1263
|
-
} else {
|
|
1264
|
-
|
|
1265
|
-
return 31;
|
|
1266
|
-
}
|
|
1495
|
+
} else if (FS.isDir(node.mode)) {
|
|
1496
|
+
return 31;
|
|
1267
1497
|
}
|
|
1268
1498
|
return 0;
|
|
1269
1499
|
}, mayOpen(node, flags) {
|
|
@@ -1272,12 +1502,14 @@ var require_libImage = __commonJS({
|
|
|
1272
1502
|
}
|
|
1273
1503
|
if (FS.isLink(node.mode)) {
|
|
1274
1504
|
return 32;
|
|
1275
|
-
}
|
|
1276
|
-
|
|
1505
|
+
}
|
|
1506
|
+
var mode = FS.flagsToPermissionString(flags);
|
|
1507
|
+
if (FS.isDir(node.mode)) {
|
|
1508
|
+
if (mode !== "r" || flags & (512 | 64)) {
|
|
1277
1509
|
return 31;
|
|
1278
1510
|
}
|
|
1279
1511
|
}
|
|
1280
|
-
return FS.nodePermissions(node,
|
|
1512
|
+
return FS.nodePermissions(node, mode);
|
|
1281
1513
|
}, checkOpExists(op, err2) {
|
|
1282
1514
|
if (!op) {
|
|
1283
1515
|
throw new FS.ErrnoError(err2);
|
|
@@ -1747,11 +1979,6 @@ var require_libImage = __commonJS({
|
|
|
1747
1979
|
if (created) {
|
|
1748
1980
|
FS.chmod(node, mode & 511);
|
|
1749
1981
|
}
|
|
1750
|
-
if (Module2["logReadFiles"] && !(flags & 1)) {
|
|
1751
|
-
if (!(path in FS.readFiles)) {
|
|
1752
|
-
FS.readFiles[path] = 1;
|
|
1753
|
-
}
|
|
1754
|
-
}
|
|
1755
1982
|
return stream;
|
|
1756
1983
|
}, close(stream) {
|
|
1757
1984
|
if (FS.isClosed(stream)) {
|
|
@@ -3173,10 +3400,11 @@ var require_libImage = __commonJS({
|
|
|
3173
3400
|
return;
|
|
3174
3401
|
}
|
|
3175
3402
|
try {
|
|
3176
|
-
func();
|
|
3177
|
-
maybeExit();
|
|
3403
|
+
return func();
|
|
3178
3404
|
} catch (e) {
|
|
3179
3405
|
handleException(e);
|
|
3406
|
+
} finally {
|
|
3407
|
+
maybeExit();
|
|
3180
3408
|
}
|
|
3181
3409
|
};
|
|
3182
3410
|
function getFullscreenElement() {
|
|
@@ -3196,10 +3424,8 @@ var require_libImage = __commonJS({
|
|
|
3196
3424
|
if (Browser.initted) return;
|
|
3197
3425
|
Browser.initted = true;
|
|
3198
3426
|
var imagePlugin = {};
|
|
3199
|
-
imagePlugin["canHandle"] =
|
|
3200
|
-
|
|
3201
|
-
};
|
|
3202
|
-
imagePlugin["handle"] = async function imagePlugin_handle(byteArray, name) {
|
|
3427
|
+
imagePlugin["canHandle"] = (name) => !Module2["noImageDecoding"] && /\.(jpg|jpeg|png|bmp|webp)$/i.test(name);
|
|
3428
|
+
imagePlugin["handle"] = async (byteArray, name) => {
|
|
3203
3429
|
var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
|
|
3204
3430
|
if (b.size !== byteArray.length) {
|
|
3205
3431
|
b = new Blob([new Uint8Array(byteArray).buffer], { type: Browser.getMimetype(name) });
|
|
@@ -3226,58 +3452,54 @@ var require_libImage = __commonJS({
|
|
|
3226
3452
|
};
|
|
3227
3453
|
preloadPlugins.push(imagePlugin);
|
|
3228
3454
|
var audioPlugin = {};
|
|
3229
|
-
audioPlugin["canHandle"] =
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
leftbits
|
|
3257
|
-
|
|
3258
|
-
var curr = leftchar >> leftbits - 6 & 63;
|
|
3259
|
-
leftbits -= 6;
|
|
3260
|
-
ret += BASE[curr];
|
|
3261
|
-
}
|
|
3262
|
-
}
|
|
3263
|
-
if (leftbits == 2) {
|
|
3264
|
-
ret += BASE[(leftchar & 3) << 4];
|
|
3265
|
-
ret += PAD + PAD;
|
|
3266
|
-
} else if (leftbits == 4) {
|
|
3267
|
-
ret += BASE[(leftchar & 15) << 2];
|
|
3268
|
-
ret += PAD;
|
|
3455
|
+
audioPlugin["canHandle"] = (name) => !Module2["noAudioDecoding"] && name.slice(-4) in { ".ogg": 1, ".wav": 1, ".mp3": 1 };
|
|
3456
|
+
audioPlugin["handle"] = async (byteArray, name) => new Promise((resolve, reject) => {
|
|
3457
|
+
var done = false;
|
|
3458
|
+
function finish(audio2) {
|
|
3459
|
+
if (done) return;
|
|
3460
|
+
done = true;
|
|
3461
|
+
Browser.preloadedAudios[name] = audio2;
|
|
3462
|
+
resolve(byteArray);
|
|
3463
|
+
}
|
|
3464
|
+
var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
|
|
3465
|
+
var url = URL.createObjectURL(b);
|
|
3466
|
+
var audio = new Audio();
|
|
3467
|
+
audio.addEventListener("canplaythrough", () => finish(audio), false);
|
|
3468
|
+
audio.onerror = (event) => {
|
|
3469
|
+
if (done) return;
|
|
3470
|
+
err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);
|
|
3471
|
+
function encode64(data) {
|
|
3472
|
+
var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
3473
|
+
var PAD = "=";
|
|
3474
|
+
var ret = "";
|
|
3475
|
+
var leftchar = 0;
|
|
3476
|
+
var leftbits = 0;
|
|
3477
|
+
for (var i = 0; i < data.length; i++) {
|
|
3478
|
+
leftchar = leftchar << 8 | data[i];
|
|
3479
|
+
leftbits += 8;
|
|
3480
|
+
while (leftbits >= 6) {
|
|
3481
|
+
var curr = leftchar >> leftbits - 6 & 63;
|
|
3482
|
+
leftbits -= 6;
|
|
3483
|
+
ret += BASE[curr];
|
|
3269
3484
|
}
|
|
3270
|
-
return ret;
|
|
3271
3485
|
}
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3486
|
+
if (leftbits == 2) {
|
|
3487
|
+
ret += BASE[(leftchar & 3) << 4];
|
|
3488
|
+
ret += PAD + PAD;
|
|
3489
|
+
} else if (leftbits == 4) {
|
|
3490
|
+
ret += BASE[(leftchar & 15) << 2];
|
|
3491
|
+
ret += PAD;
|
|
3492
|
+
}
|
|
3493
|
+
return ret;
|
|
3494
|
+
}
|
|
3495
|
+
audio.src = "data:audio/x-" + name.slice(-3) + ";base64," + encode64(byteArray);
|
|
3496
|
+
finish(audio);
|
|
3497
|
+
};
|
|
3498
|
+
audio.src = url;
|
|
3499
|
+
safeSetTimeout(() => {
|
|
3500
|
+
finish(audio);
|
|
3501
|
+
}, 1e4);
|
|
3502
|
+
});
|
|
3281
3503
|
preloadPlugins.push(audioPlugin);
|
|
3282
3504
|
function pointerLockChange() {
|
|
3283
3505
|
var canvas2 = Browser.getCanvas();
|
package/dist/esm/libImage.js
CHANGED
|
Binary file
|