emsdk-env 0.1.0 → 0.3.0

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/vite.mjs CHANGED
@@ -1,22 +1,699 @@
1
1
  /*!
2
2
  * name: emsdk-env
3
- * version: 0.1.0
3
+ * version: 0.3.0
4
4
  * description: Emscripten environment builder
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/emsdk-env
8
- * git.commit.hash: 32f73259bc38b9fcc19c26f3012f0b87c28963e4
8
+ * git.commit.hash: 4a03739b8c88111950fa216a7c10c7bfd65ea239
9
9
  */
10
10
 
11
- import { prepareEmsdk } from "./index.mjs";
12
- const emsdkEnv = (options) => ({
13
- name: "emsdkEnv",
14
- apply: "build",
15
- enforce: "pre",
16
- async buildStart() {
17
- await prepareEmsdk(options);
11
+ import { isAbsolute, resolve, relative } from "path";
12
+ import { b as buildWasm } from "./build-CYHeaOdc.js";
13
+ function getDefaultExportFromCjs(x) {
14
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
15
+ }
16
+ var browser = { exports: {} };
17
+ var ms;
18
+ var hasRequiredMs;
19
+ function requireMs() {
20
+ if (hasRequiredMs) return ms;
21
+ hasRequiredMs = 1;
22
+ var s = 1e3;
23
+ var m = s * 60;
24
+ var h = m * 60;
25
+ var d = h * 24;
26
+ var w = d * 7;
27
+ var y = d * 365.25;
28
+ ms = function(val, options) {
29
+ options = options || {};
30
+ var type = typeof val;
31
+ if (type === "string" && val.length > 0) {
32
+ return parse(val);
33
+ } else if (type === "number" && isFinite(val)) {
34
+ return options.long ? fmtLong(val) : fmtShort(val);
35
+ }
36
+ throw new Error(
37
+ "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
38
+ );
39
+ };
40
+ function parse(str) {
41
+ str = String(str);
42
+ if (str.length > 100) {
43
+ return;
44
+ }
45
+ var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
46
+ str
47
+ );
48
+ if (!match) {
49
+ return;
50
+ }
51
+ var n = parseFloat(match[1]);
52
+ var type = (match[2] || "ms").toLowerCase();
53
+ switch (type) {
54
+ case "years":
55
+ case "year":
56
+ case "yrs":
57
+ case "yr":
58
+ case "y":
59
+ return n * y;
60
+ case "weeks":
61
+ case "week":
62
+ case "w":
63
+ return n * w;
64
+ case "days":
65
+ case "day":
66
+ case "d":
67
+ return n * d;
68
+ case "hours":
69
+ case "hour":
70
+ case "hrs":
71
+ case "hr":
72
+ case "h":
73
+ return n * h;
74
+ case "minutes":
75
+ case "minute":
76
+ case "mins":
77
+ case "min":
78
+ case "m":
79
+ return n * m;
80
+ case "seconds":
81
+ case "second":
82
+ case "secs":
83
+ case "sec":
84
+ case "s":
85
+ return n * s;
86
+ case "milliseconds":
87
+ case "millisecond":
88
+ case "msecs":
89
+ case "msec":
90
+ case "ms":
91
+ return n;
92
+ default:
93
+ return void 0;
94
+ }
18
95
  }
96
+ function fmtShort(ms2) {
97
+ var msAbs = Math.abs(ms2);
98
+ if (msAbs >= d) {
99
+ return Math.round(ms2 / d) + "d";
100
+ }
101
+ if (msAbs >= h) {
102
+ return Math.round(ms2 / h) + "h";
103
+ }
104
+ if (msAbs >= m) {
105
+ return Math.round(ms2 / m) + "m";
106
+ }
107
+ if (msAbs >= s) {
108
+ return Math.round(ms2 / s) + "s";
109
+ }
110
+ return ms2 + "ms";
111
+ }
112
+ function fmtLong(ms2) {
113
+ var msAbs = Math.abs(ms2);
114
+ if (msAbs >= d) {
115
+ return plural(ms2, msAbs, d, "day");
116
+ }
117
+ if (msAbs >= h) {
118
+ return plural(ms2, msAbs, h, "hour");
119
+ }
120
+ if (msAbs >= m) {
121
+ return plural(ms2, msAbs, m, "minute");
122
+ }
123
+ if (msAbs >= s) {
124
+ return plural(ms2, msAbs, s, "second");
125
+ }
126
+ return ms2 + " ms";
127
+ }
128
+ function plural(ms2, msAbs, n, name) {
129
+ var isPlural = msAbs >= n * 1.5;
130
+ return Math.round(ms2 / n) + " " + name + (isPlural ? "s" : "");
131
+ }
132
+ return ms;
133
+ }
134
+ var common;
135
+ var hasRequiredCommon;
136
+ function requireCommon() {
137
+ if (hasRequiredCommon) return common;
138
+ hasRequiredCommon = 1;
139
+ function setup(env) {
140
+ createDebug2.debug = createDebug2;
141
+ createDebug2.default = createDebug2;
142
+ createDebug2.coerce = coerce;
143
+ createDebug2.disable = disable;
144
+ createDebug2.enable = enable;
145
+ createDebug2.enabled = enabled;
146
+ createDebug2.humanize = requireMs();
147
+ createDebug2.destroy = destroy;
148
+ Object.keys(env).forEach((key) => {
149
+ createDebug2[key] = env[key];
150
+ });
151
+ createDebug2.names = [];
152
+ createDebug2.skips = [];
153
+ createDebug2.formatters = {};
154
+ function selectColor(namespace) {
155
+ let hash = 0;
156
+ for (let i = 0; i < namespace.length; i++) {
157
+ hash = (hash << 5) - hash + namespace.charCodeAt(i);
158
+ hash |= 0;
159
+ }
160
+ return createDebug2.colors[Math.abs(hash) % createDebug2.colors.length];
161
+ }
162
+ createDebug2.selectColor = selectColor;
163
+ function createDebug2(namespace) {
164
+ let prevTime;
165
+ let enableOverride = null;
166
+ let namespacesCache;
167
+ let enabledCache;
168
+ function debug(...args) {
169
+ if (!debug.enabled) {
170
+ return;
171
+ }
172
+ const self = debug;
173
+ const curr = Number(/* @__PURE__ */ new Date());
174
+ const ms2 = curr - (prevTime || curr);
175
+ self.diff = ms2;
176
+ self.prev = prevTime;
177
+ self.curr = curr;
178
+ prevTime = curr;
179
+ args[0] = createDebug2.coerce(args[0]);
180
+ if (typeof args[0] !== "string") {
181
+ args.unshift("%O");
182
+ }
183
+ let index = 0;
184
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
185
+ if (match === "%%") {
186
+ return "%";
187
+ }
188
+ index++;
189
+ const formatter = createDebug2.formatters[format];
190
+ if (typeof formatter === "function") {
191
+ const val = args[index];
192
+ match = formatter.call(self, val);
193
+ args.splice(index, 1);
194
+ index--;
195
+ }
196
+ return match;
197
+ });
198
+ createDebug2.formatArgs.call(self, args);
199
+ const logFn = self.log || createDebug2.log;
200
+ logFn.apply(self, args);
201
+ }
202
+ debug.namespace = namespace;
203
+ debug.useColors = createDebug2.useColors();
204
+ debug.color = createDebug2.selectColor(namespace);
205
+ debug.extend = extend;
206
+ debug.destroy = createDebug2.destroy;
207
+ Object.defineProperty(debug, "enabled", {
208
+ enumerable: true,
209
+ configurable: false,
210
+ get: () => {
211
+ if (enableOverride !== null) {
212
+ return enableOverride;
213
+ }
214
+ if (namespacesCache !== createDebug2.namespaces) {
215
+ namespacesCache = createDebug2.namespaces;
216
+ enabledCache = createDebug2.enabled(namespace);
217
+ }
218
+ return enabledCache;
219
+ },
220
+ set: (v) => {
221
+ enableOverride = v;
222
+ }
223
+ });
224
+ if (typeof createDebug2.init === "function") {
225
+ createDebug2.init(debug);
226
+ }
227
+ return debug;
228
+ }
229
+ function extend(namespace, delimiter) {
230
+ const newDebug = createDebug2(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
231
+ newDebug.log = this.log;
232
+ return newDebug;
233
+ }
234
+ function enable(namespaces) {
235
+ createDebug2.save(namespaces);
236
+ createDebug2.namespaces = namespaces;
237
+ createDebug2.names = [];
238
+ createDebug2.skips = [];
239
+ const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
240
+ for (const ns of split) {
241
+ if (ns[0] === "-") {
242
+ createDebug2.skips.push(ns.slice(1));
243
+ } else {
244
+ createDebug2.names.push(ns);
245
+ }
246
+ }
247
+ }
248
+ function matchesTemplate(search, template) {
249
+ let searchIndex = 0;
250
+ let templateIndex = 0;
251
+ let starIndex = -1;
252
+ let matchIndex = 0;
253
+ while (searchIndex < search.length) {
254
+ if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
255
+ if (template[templateIndex] === "*") {
256
+ starIndex = templateIndex;
257
+ matchIndex = searchIndex;
258
+ templateIndex++;
259
+ } else {
260
+ searchIndex++;
261
+ templateIndex++;
262
+ }
263
+ } else if (starIndex !== -1) {
264
+ templateIndex = starIndex + 1;
265
+ matchIndex++;
266
+ searchIndex = matchIndex;
267
+ } else {
268
+ return false;
269
+ }
270
+ }
271
+ while (templateIndex < template.length && template[templateIndex] === "*") {
272
+ templateIndex++;
273
+ }
274
+ return templateIndex === template.length;
275
+ }
276
+ function disable() {
277
+ const namespaces = [
278
+ ...createDebug2.names,
279
+ ...createDebug2.skips.map((namespace) => "-" + namespace)
280
+ ].join(",");
281
+ createDebug2.enable("");
282
+ return namespaces;
283
+ }
284
+ function enabled(name) {
285
+ for (const skip of createDebug2.skips) {
286
+ if (matchesTemplate(name, skip)) {
287
+ return false;
288
+ }
289
+ }
290
+ for (const ns of createDebug2.names) {
291
+ if (matchesTemplate(name, ns)) {
292
+ return true;
293
+ }
294
+ }
295
+ return false;
296
+ }
297
+ function coerce(val) {
298
+ if (val instanceof Error) {
299
+ return val.stack || val.message;
300
+ }
301
+ return val;
302
+ }
303
+ function destroy() {
304
+ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
305
+ }
306
+ createDebug2.enable(createDebug2.load());
307
+ return createDebug2;
308
+ }
309
+ common = setup;
310
+ return common;
311
+ }
312
+ var hasRequiredBrowser;
313
+ function requireBrowser() {
314
+ if (hasRequiredBrowser) return browser.exports;
315
+ hasRequiredBrowser = 1;
316
+ (function(module, exports$1) {
317
+ exports$1.formatArgs = formatArgs;
318
+ exports$1.save = save;
319
+ exports$1.load = load;
320
+ exports$1.useColors = useColors;
321
+ exports$1.storage = localstorage();
322
+ exports$1.destroy = /* @__PURE__ */ (() => {
323
+ let warned = false;
324
+ return () => {
325
+ if (!warned) {
326
+ warned = true;
327
+ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
328
+ }
329
+ };
330
+ })();
331
+ exports$1.colors = [
332
+ "#0000CC",
333
+ "#0000FF",
334
+ "#0033CC",
335
+ "#0033FF",
336
+ "#0066CC",
337
+ "#0066FF",
338
+ "#0099CC",
339
+ "#0099FF",
340
+ "#00CC00",
341
+ "#00CC33",
342
+ "#00CC66",
343
+ "#00CC99",
344
+ "#00CCCC",
345
+ "#00CCFF",
346
+ "#3300CC",
347
+ "#3300FF",
348
+ "#3333CC",
349
+ "#3333FF",
350
+ "#3366CC",
351
+ "#3366FF",
352
+ "#3399CC",
353
+ "#3399FF",
354
+ "#33CC00",
355
+ "#33CC33",
356
+ "#33CC66",
357
+ "#33CC99",
358
+ "#33CCCC",
359
+ "#33CCFF",
360
+ "#6600CC",
361
+ "#6600FF",
362
+ "#6633CC",
363
+ "#6633FF",
364
+ "#66CC00",
365
+ "#66CC33",
366
+ "#9900CC",
367
+ "#9900FF",
368
+ "#9933CC",
369
+ "#9933FF",
370
+ "#99CC00",
371
+ "#99CC33",
372
+ "#CC0000",
373
+ "#CC0033",
374
+ "#CC0066",
375
+ "#CC0099",
376
+ "#CC00CC",
377
+ "#CC00FF",
378
+ "#CC3300",
379
+ "#CC3333",
380
+ "#CC3366",
381
+ "#CC3399",
382
+ "#CC33CC",
383
+ "#CC33FF",
384
+ "#CC6600",
385
+ "#CC6633",
386
+ "#CC9900",
387
+ "#CC9933",
388
+ "#CCCC00",
389
+ "#CCCC33",
390
+ "#FF0000",
391
+ "#FF0033",
392
+ "#FF0066",
393
+ "#FF0099",
394
+ "#FF00CC",
395
+ "#FF00FF",
396
+ "#FF3300",
397
+ "#FF3333",
398
+ "#FF3366",
399
+ "#FF3399",
400
+ "#FF33CC",
401
+ "#FF33FF",
402
+ "#FF6600",
403
+ "#FF6633",
404
+ "#FF9900",
405
+ "#FF9933",
406
+ "#FFCC00",
407
+ "#FFCC33"
408
+ ];
409
+ function useColors() {
410
+ if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
411
+ return true;
412
+ }
413
+ if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
414
+ return false;
415
+ }
416
+ let m;
417
+ return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
418
+ typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
419
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
420
+ typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
421
+ typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
422
+ }
423
+ function formatArgs(args) {
424
+ args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module.exports.humanize(this.diff);
425
+ if (!this.useColors) {
426
+ return;
427
+ }
428
+ const c = "color: " + this.color;
429
+ args.splice(1, 0, c, "color: inherit");
430
+ let index = 0;
431
+ let lastC = 0;
432
+ args[0].replace(/%[a-zA-Z%]/g, (match) => {
433
+ if (match === "%%") {
434
+ return;
435
+ }
436
+ index++;
437
+ if (match === "%c") {
438
+ lastC = index;
439
+ }
440
+ });
441
+ args.splice(lastC, 0, c);
442
+ }
443
+ exports$1.log = console.debug || console.log || (() => {
444
+ });
445
+ function save(namespaces) {
446
+ try {
447
+ if (namespaces) {
448
+ exports$1.storage.setItem("debug", namespaces);
449
+ } else {
450
+ exports$1.storage.removeItem("debug");
451
+ }
452
+ } catch (error) {
453
+ }
454
+ }
455
+ function load() {
456
+ let r;
457
+ try {
458
+ r = exports$1.storage.getItem("debug") || exports$1.storage.getItem("DEBUG");
459
+ } catch (error) {
460
+ }
461
+ if (!r && typeof process !== "undefined" && "env" in process) {
462
+ r = process.env.DEBUG;
463
+ }
464
+ return r;
465
+ }
466
+ function localstorage() {
467
+ try {
468
+ return localStorage;
469
+ } catch (error) {
470
+ }
471
+ }
472
+ module.exports = requireCommon()(exports$1);
473
+ const { formatters } = module.exports;
474
+ formatters.j = function(v) {
475
+ try {
476
+ return JSON.stringify(v);
477
+ } catch (error) {
478
+ return "[UnexpectedJSONParseError]: " + error.message;
479
+ }
480
+ };
481
+ })(browser, browser.exports);
482
+ return browser.exports;
483
+ }
484
+ var browserExports = requireBrowser();
485
+ const __screwUpDefaultImportModule0 = /* @__PURE__ */ getDefaultExportFromCjs(browserExports);
486
+ const createDebug = __resolveDefaultExport(__screwUpDefaultImportModule0);
487
+ globalThis.__screwUpIsInCJS_93c24de65540 = false;
488
+ function __resolveDefaultExport(module, isESM) {
489
+ const __isInCJS = typeof globalThis !== "undefined" && globalThis.__screwUpIsInCJS_93c24de65540 === true;
490
+ const maybe = module;
491
+ const hasDefault = !!(maybe && typeof maybe === "object" && "default" in maybe);
492
+ const unwrapNamespaceDefault = (value) => {
493
+ if (!value || typeof value !== "object") {
494
+ return value;
495
+ }
496
+ const inner = value;
497
+ const isModule = inner.__esModule === true || typeof Symbol !== "undefined" && inner[Symbol.toStringTag] === "Module";
498
+ if (isModule && "default" in inner) {
499
+ return inner.default;
500
+ }
501
+ return value;
502
+ };
503
+ const resolvedDefault = hasDefault ? unwrapNamespaceDefault(maybe.default) : void 0;
504
+ if (__isInCJS) {
505
+ return hasDefault ? resolvedDefault != null ? resolvedDefault : module : module;
506
+ }
507
+ return hasDefault ? resolvedDefault != null ? resolvedDefault : module : module;
508
+ }
509
+ const createViteLoggerAdapter = (viteLogger, logLevel, prefix) => {
510
+ const debug = createDebug("vite:plugin:emsdk-vite");
511
+ return {
512
+ debug: (msg) => {
513
+ debug(msg);
514
+ },
515
+ info: logLevel !== "silent" ? (msg) => viteLogger.info(`[${prefix}]: ${msg}`) : () => {
516
+ },
517
+ warn: logLevel === "warn" || logLevel === "info" || logLevel === "error" ? (msg) => viteLogger.warn(`[${prefix}]: ${msg}`) : () => {
518
+ },
519
+ error: logLevel !== "silent" ? (msg) => viteLogger.error(`[${prefix}]: ${msg}`) : () => {
520
+ }
521
+ };
522
+ };
523
+ const DEFAULT_WASM_SRC_DIR = "wasm";
524
+ const buildRuns = /* @__PURE__ */ new Map();
525
+ const resolvePath = (rootDir, value) => isAbsolute(value) ? value : resolve(rootDir, value);
526
+ const expandPlaceholders = (value, env, label) => value.replace(/\{([A-Z0-9_]+)\}/g, (_match, key) => {
527
+ const replacement = env[key];
528
+ if (replacement === void 0) {
529
+ throw new Error(`Unknown placeholder {${key}} in ${label}.`);
530
+ }
531
+ return replacement;
19
532
  });
533
+ const expandArray = (values, env, label) => values.map((value) => expandPlaceholders(value, env, label));
534
+ const resolveIncludeDirs = (includeDirs, env, rootDir) => {
535
+ const expanded = expandArray(includeDirs, env, "includeDirs");
536
+ return expanded.map((value) => resolvePath(rootDir, value));
537
+ };
538
+ const createBuildOptions = (options, resolvedConfig, logger) => {
539
+ const { emsdk, srcDir, outDir, buildDir, cleanupBuildDir, ...rule } = options;
540
+ return {
541
+ rule,
542
+ root: resolvedConfig.root,
543
+ logger,
544
+ ...emsdk !== void 0 ? { emsdk } : {},
545
+ ...srcDir !== void 0 ? { srcDir } : {},
546
+ ...outDir !== void 0 ? { outDir } : {},
547
+ ...buildDir !== void 0 ? { buildDir } : {},
548
+ ...cleanupBuildDir !== void 0 ? { cleanupBuildDir } : {}
549
+ };
550
+ };
551
+ const isSubPath = (parentDir, targetPath) => {
552
+ const rel = relative(parentDir, targetPath);
553
+ if (rel === "") {
554
+ return true;
555
+ }
556
+ return !rel.startsWith("..") && !isAbsolute(rel);
557
+ };
558
+ const resolveWatchTargets = (options, resolvedConfig) => {
559
+ var _a, _b;
560
+ const rootDir = resolvedConfig.root;
561
+ const baseEnv = {
562
+ ROOT: rootDir
563
+ };
564
+ const rawSrcDir = expandPlaceholders(
565
+ (_a = options.srcDir) != null ? _a : DEFAULT_WASM_SRC_DIR,
566
+ baseEnv,
567
+ "srcDir"
568
+ );
569
+ const srcDir = resolvePath(rootDir, rawSrcDir);
570
+ const envWithDirs = {
571
+ ROOT: rootDir,
572
+ SRC_DIR: srcDir
573
+ };
574
+ const patterns = /* @__PURE__ */ new Set();
575
+ const baseDirs = /* @__PURE__ */ new Set();
576
+ const resolvedIncludeDirs = [];
577
+ patterns.add(srcDir);
578
+ baseDirs.add(srcDir);
579
+ const addIncludePatterns = (targetIncludeDirs, targetName) => {
580
+ if (!targetIncludeDirs || targetIncludeDirs.length === 0) {
581
+ return;
582
+ }
583
+ const env = targetName ? { ...envWithDirs, TARGET_NAME: targetName } : envWithDirs;
584
+ const resolvedDirs = resolveIncludeDirs(targetIncludeDirs, env, rootDir);
585
+ for (const dir of resolvedDirs) {
586
+ patterns.add(dir);
587
+ baseDirs.add(dir);
588
+ resolvedIncludeDirs.push(dir);
589
+ }
590
+ };
591
+ addIncludePatterns((_b = options.common) == null ? void 0 : _b.includeDirs, void 0);
592
+ for (const [targetName, target] of Object.entries(options.targets)) {
593
+ addIncludePatterns(target.includeDirs, targetName);
594
+ }
595
+ return {
596
+ srcDir,
597
+ includeDirs: resolvedIncludeDirs,
598
+ patterns: [...patterns],
599
+ baseDirs: [...baseDirs]
600
+ };
601
+ };
602
+ const setupDevServer = async (server, options, resolvedConfig) => {
603
+ var _a;
604
+ const logger = createViteLoggerAdapter(
605
+ resolvedConfig.logger,
606
+ (_a = resolvedConfig.logLevel) != null ? _a : "info",
607
+ "emsdk-env"
608
+ );
609
+ const buildOptions = createBuildOptions(options, resolvedConfig, logger);
610
+ const watchTargets = resolveWatchTargets(options, resolvedConfig);
611
+ logger.debug(`watch root: ${resolvedConfig.root}`);
612
+ logger.debug(`watch srcDir: ${watchTargets.srcDir}`);
613
+ logger.debug(
614
+ `watch includeDirs: ${watchTargets.includeDirs.length > 0 ? watchTargets.includeDirs.join(", ") : "(none)"}`
615
+ );
616
+ logger.debug(`watch patterns: ${watchTargets.patterns.join(", ")}`);
617
+ logger.debug(`watch baseDirs: ${watchTargets.baseDirs.join(", ")}`);
618
+ if (watchTargets.patterns.length > 0) {
619
+ server.watcher.add(watchTargets.patterns);
620
+ }
621
+ let buildQueue = Promise.resolve();
622
+ const queueBuild = async (shouldReload) => {
623
+ buildQueue = buildQueue.then(async () => {
624
+ try {
625
+ await buildWasm(buildOptions);
626
+ if (shouldReload) {
627
+ server.ws.send({ type: "full-reload" });
628
+ }
629
+ } catch (error) {
630
+ const message = error instanceof Error ? error.message : "Unknown wasm build error.";
631
+ logger.error(`Wasm build failed: ${message}`);
632
+ }
633
+ });
634
+ return buildQueue;
635
+ };
636
+ const onWatchEvent = async (eventPath) => {
637
+ const resolvedPath = isAbsolute(eventPath) ? eventPath : resolve(resolvedConfig.root, eventPath);
638
+ if (!watchTargets.baseDirs.some((dir) => isSubPath(dir, resolvedPath))) {
639
+ return;
640
+ }
641
+ await queueBuild(true);
642
+ };
643
+ server.watcher.on("add", onWatchEvent);
644
+ server.watcher.on("change", onWatchEvent);
645
+ server.watcher.on("unlink", onWatchEvent);
646
+ await queueBuild(false);
647
+ };
648
+ const emsdkEnv = (options) => {
649
+ let resolvedConfig;
650
+ return {
651
+ name: "emsdkEnv",
652
+ enforce: "pre",
653
+ configResolved(config) {
654
+ resolvedConfig = config;
655
+ },
656
+ async buildStart() {
657
+ var _a;
658
+ if (!resolvedConfig) {
659
+ throw new Error("Vite config was not resolved.");
660
+ }
661
+ if (resolvedConfig.command !== "build") {
662
+ return;
663
+ }
664
+ const logger = createViteLoggerAdapter(
665
+ resolvedConfig.logger,
666
+ (_a = resolvedConfig.logLevel) != null ? _a : "info",
667
+ "emsdk-env"
668
+ );
669
+ const buildOptions = createBuildOptions(options, resolvedConfig, logger);
670
+ const buildKey = resolvedConfig.root;
671
+ const existing = buildRuns.get(buildKey);
672
+ if (existing) {
673
+ await existing;
674
+ return;
675
+ }
676
+ const run = (async () => {
677
+ try {
678
+ await buildWasm(buildOptions);
679
+ } finally {
680
+ buildRuns.delete(buildKey);
681
+ }
682
+ })();
683
+ buildRuns.set(buildKey, run);
684
+ await run;
685
+ },
686
+ async configureServer(server) {
687
+ if (!resolvedConfig) {
688
+ throw new Error("Vite config was not resolved.");
689
+ }
690
+ if (resolvedConfig.command !== "serve") {
691
+ return;
692
+ }
693
+ await setupDevServer(server, options, resolvedConfig);
694
+ }
695
+ };
696
+ };
20
697
  export {
21
698
  emsdkEnv as default
22
699
  };