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.
@@ -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/node_modules/worker-lib/dist/cjs/node.js
8
- var require_node = __commonJS({
9
- "node_modules/.pnpm/worker-lib@2.0.8/node_modules/worker-lib/dist/cjs/node.js"(exports2) {
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.initWorker = exports2.createWorker = void 0;
13
- var node_worker_threads_1 = require("node:worker_threads");
14
- var init = (worker) => {
15
- return new Promise((resolve) => {
16
- worker.once("message", () => {
17
- resolve(worker);
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
- var exec = (worker, name, ...value) => {
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 p = async (data) => {
24
- switch (data.type) {
25
- case "callback":
26
- const r = value[data.payload.index](data.payload.value);
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: "callback_result",
29
- payload: { id: data.payload.id, result: await r }
30
- });
31
- break;
32
- case "result":
33
- worker.removeListener("message", p);
34
- resolve(data.payload);
35
- break;
36
- case "error":
37
- worker.removeListener("message", p);
38
- reject(data.payload);
39
- break;
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.addListener("message", p);
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
- value: value.map((v) => !(typeof v === "function") && v),
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
- var createWorker = (builder, limit = 4) => {
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
- const result = builder();
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
- const result = builder();
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 { worker } of workers) {
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 = (limit2) => {
257
+ const setLimit = (newLimit) => {
123
258
  workers.forEach((w) => w.worker?.terminate());
124
- workers = Array(limit2).fill(void 0).map(() => ({}));
259
+ workers = Array(newLimit).fill(void 0).map(() => ({}));
125
260
  };
126
261
  return { execute, waitAll, waitReady, close, setLimit, launchWorker };
127
262
  };
128
- exports2.createWorker = createWorker;
129
- var initWorker = (WorkerProc) => {
130
- const worker = node_worker_threads_1.parentPort;
131
- if (!worker) {
132
- throw new Error("This is not a worker thread");
133
- }
134
- worker.addListener("message", async (data) => {
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 { name, value, callback } = data.payload;
299
+ const { id, name, args } = data.payload;
137
300
  const proc = WorkerProc[name];
138
301
  if (proc) {
139
302
  try {
140
- const params = value.map((v, index) => callback[index] ? (...params2) => callbackProc(worker, index, params2) : v);
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: await proc(...params)
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
- worker.postMessage({ type: "error", payload: String(e) });
331
+ console.error("[worker-lib] Worker-side callback failed:", e);
147
332
  }
148
333
  }
149
334
  }
150
335
  });
151
- worker.postMessage(void 0);
336
+ worker.postMessage("ready");
152
337
  return WorkerProc;
153
338
  };
154
- exports2.initWorker = initWorker;
155
- var callbackProc = (worker, index, params) => {
156
- const id = WorkerValue.id++;
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", (data) => {
159
- if (data.type === "callback_result" && data.payload.id === id) {
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 WorkerValue = { id: 0, promises: {} };
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, readFiles: {}, ErrnoError: class {
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
- } else if (perms.includes("w") && !(node.mode & 146)) {
1453
+ }
1454
+ if (perms.includes("w") && !(node.mode & 146)) {
1224
1455
  return 2;
1225
- } else if (perms.includes("x") && !(node.mode & 73)) {
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
- if (FS.isDir(node.mode)) {
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
- } else if (FS.isDir(node.mode)) {
1276
- if (FS.flagsToPermissionString(flags) !== "r" || flags & (512 | 64)) {
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, FS.flagsToPermissionString(flags));
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"] = function imagePlugin_canHandle(name) {
3200
- return !Module2["noImageDecoding"] && /\.(jpg|jpeg|png|bmp|webp)$/i.test(name);
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"] = function audioPlugin_canHandle(name) {
3230
- return !Module2["noAudioDecoding"] && name.slice(-4) in { ".ogg": 1, ".wav": 1, ".mp3": 1 };
3231
- };
3232
- audioPlugin["handle"] = async function audioPlugin_handle(byteArray, name) {
3233
- return new Promise((resolve, reject) => {
3234
- var done = false;
3235
- function finish(audio2) {
3236
- if (done) return;
3237
- done = true;
3238
- Browser.preloadedAudios[name] = audio2;
3239
- resolve(byteArray);
3240
- }
3241
- var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
3242
- var url = URL.createObjectURL(b);
3243
- var audio = new Audio();
3244
- audio.addEventListener("canplaythrough", () => finish(audio), false);
3245
- audio.onerror = function audio_onerror(event) {
3246
- if (done) return;
3247
- err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);
3248
- function encode64(data) {
3249
- var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
3250
- var PAD = "=";
3251
- var ret = "";
3252
- var leftchar = 0;
3253
- var leftbits = 0;
3254
- for (var i = 0; i < data.length; i++) {
3255
- leftchar = leftchar << 8 | data[i];
3256
- leftbits += 8;
3257
- while (leftbits >= 6) {
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
- audio.src = "data:audio/x-" + name.slice(-3) + ";base64," + encode64(byteArray);
3273
- finish(audio);
3274
- };
3275
- audio.src = url;
3276
- safeSetTimeout(() => {
3277
- finish(audio);
3278
- }, 1e4);
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();
Binary file