@vxrn/vite-plugin-metro 2.13.8 → 2.13.10

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.
@@ -12,6 +12,21 @@ import { substituteExpoVirtualEnvSource } from "./expoVirtualEnv.mjs";
12
12
  import { rejectDOMDirective } from "./rejectDOMDirective.mjs";
13
13
  import { getPlatformEnv, metroPlatformToViteEnvironment } from "@vxrn/utils/platformEnv";
14
14
 
15
+ function createTransformError(message, code, diagnostic) {
16
+ let loc = diagnostic.loc ?? diagnostic.errors?.[0]?.location;
17
+ const label = diagnostic.labels?.[0];
18
+ if (!loc && label) {
19
+ const lines = code.slice(0, label.start).split(/\r\n|[\n\r\u2028\u2029]/);
20
+ loc = {
21
+ line: lines.length,
22
+ column: lines.at(-1).length
23
+ };
24
+ }
25
+ return Object.assign(new Error(message), {
26
+ loc,
27
+ codeFrame: diagnostic.codeFrame ?? diagnostic.codeframe
28
+ });
29
+ }
15
30
  function collectModuleLiteralBindings(program) {
16
31
  const reassigned = /* @__PURE__ */ new Set();
17
32
  const declCount = /* @__PURE__ */ new Map();
@@ -205,7 +220,7 @@ function resolveAliasSpecifier(specifier, filename, projectRoot, aliases) {
205
220
  function applyModuleResolverAliases(code, filename, projectRoot, aliases) {
206
221
  const parsed = parseSync(filename, code, { lang: langForFilename(filename) });
207
222
  if (parsed?.errors?.length) {
208
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for alias resolution: ${parsed.errors[0].message}`);
223
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for alias resolution: ${parsed.errors[0].message}`, code, parsed.errors[0]);
209
224
  }
210
225
  if (!parsed?.program) return code;
211
226
  const ms = new MagicString(code);
@@ -240,7 +255,7 @@ function applyModuleResolverAliases(code, filename, projectRoot, aliases) {
240
255
  function applyInlineEnvVars(code, filename, isProduction, env = {}) {
241
256
  const parsed = parseSync(filename, code, { lang: langForFilename(filename) });
242
257
  if (parsed?.errors?.length) {
243
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for env inlining: ${parsed.errors[0].message}`);
258
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for env inlining: ${parsed.errors[0].message}`, code, parsed.errors[0]);
244
259
  }
245
260
  if (!parsed?.program) return code;
246
261
  const processPublicEnv = Object.fromEntries(Object.entries(process.env).filter(([key]) => key.startsWith("ONE_PUBLIC_") || key.startsWith("EXPO_PUBLIC_")));
@@ -383,7 +398,7 @@ const GUARD_SPECIFIERS = /* @__PURE__ */ new Set([
383
398
  function applyEnvironmentGuard(code, filename) {
384
399
  const parsed = parseSync(filename, code, { lang: langForFilename(filename) });
385
400
  if (parsed?.errors?.length) {
386
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for environment guards: ${parsed.errors[0].message}`);
401
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for environment guards: ${parsed.errors[0].message}`, code, parsed.errors[0]);
387
402
  }
388
403
  const body = parsed?.program?.body;
389
404
  if (!body) return code;
@@ -408,7 +423,7 @@ function applyOneRouterMetro(code, filename, options) {
408
423
  if (!isMetroEntry && !isEntryCtx) return code;
409
424
  const parsed = parseSync(filename, code, { lang: langForFilename(filename) });
410
425
  if (parsed?.errors?.length) {
411
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for one-router-metro: ${parsed.errors[0].message}`);
426
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for one-router-metro: ${parsed.errors[0].message}`, code, parsed.errors[0]);
412
427
  }
413
428
  if (!parsed?.program) return code;
414
429
  const ms = new MagicString(code);
@@ -699,10 +714,10 @@ function rewriteDependencyCalls(code, dependencies, depMapName = "_dependencyMap
699
714
  try {
700
715
  parsed = parseSync(filename, code, { lang: langForFilename(filename) });
701
716
  } catch (err) {
702
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for dependency rewriting: ${err.message || err}`);
717
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for dependency rewriting: ${err.message || err}`, code, err);
703
718
  }
704
719
  if (parsed?.errors?.length) {
705
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for dependency rewriting: ${parsed.errors[0].message}`);
720
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for dependency rewriting: ${parsed.errors[0].message}`, code, parsed.errors[0]);
706
721
  }
707
722
  if (!parsed?.program) return emptyResult;
708
723
  const contextLiteralBindings = collectModuleLiteralBindings(parsed.program);
@@ -843,10 +858,10 @@ function extractDependencies(code, filename, options) {
843
858
  try {
844
859
  parseResult = parseSync(filename, code, { lang: langForFilename(filename) });
845
860
  } catch (err) {
846
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for dependency extraction: ${err.message || err}`);
861
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for dependency extraction: ${err.message || err}`, code, err);
847
862
  }
848
863
  if (parseResult?.errors?.length) {
849
- throw new Error(`[vxrn/metro] Failed to parse ${filename} for dependency extraction: ${parseResult.errors[0].message}`);
864
+ throw createTransformError(`[vxrn/metro] Failed to parse ${filename} for dependency extraction: ${parseResult.errors[0].message}`, code, parseResult.errors[0]);
850
865
  }
851
866
  if (!parseResult?.program) {
852
867
  return [];
@@ -1118,7 +1133,7 @@ async function transform(config, projectRoot, filename, data, options) {
1118
1133
  });
1119
1134
  code2 = minified.code;
1120
1135
  } catch (err) {
1121
- throw new Error(`[vxrn/metro] Minifier failed for ${filename}: ${err.message || err}`);
1136
+ throw createTransformError(`[vxrn/metro] Minifier failed for ${filename}: ${err.message || err}`, code2, err);
1122
1137
  }
1123
1138
  }
1124
1139
  const { lineCount: lineCount2, map: map2 } = countLinesAndTerminateMap(code2, []);
@@ -1231,7 +1246,7 @@ async function transform(config, projectRoot, filename, data, options) {
1231
1246
  }
1232
1247
  }
1233
1248
  } catch (err) {
1234
- throw new Error(`[vxrn/metro] React Native codegen failed for ${filename}: ${err.message || err}`);
1249
+ throw createTransformError(`[vxrn/metro] React Native codegen failed for ${filename}: ${err.message || err}`, code, err);
1235
1250
  }
1236
1251
  if (shouldStripFlow(filename, code)) {
1237
1252
  try {
@@ -1243,7 +1258,7 @@ async function transform(config, projectRoot, filename, data, options) {
1243
1258
  }
1244
1259
  }
1245
1260
  } catch (err) {
1246
- throw new Error(`[vxrn/metro] Flow transform failed for ${filename}: ${err.message || err}`);
1261
+ throw createTransformError(`[vxrn/metro] Flow transform failed for ${filename}: ${err.message || err}`, code, err);
1247
1262
  }
1248
1263
  }
1249
1264
  const asyncRequirePath = config.asyncRequireModulePath || "metro-runtime/src/modules/asyncRequire";
@@ -1302,7 +1317,7 @@ async function transform(config, projectRoot, filename, data, options) {
1302
1317
  }
1303
1318
  }
1304
1319
  } catch (err) {
1305
- throw new Error(`[vxrn/metro] React Compiler failed for ${filename}: ${err.message || err}`);
1320
+ throw createTransformError(`[vxrn/metro] React Compiler failed for ${filename}: ${err.message || err}`, code, err);
1306
1321
  }
1307
1322
  }
1308
1323
  if (shouldRunWorklets) {
@@ -1316,7 +1331,7 @@ async function transform(config, projectRoot, filename, data, options) {
1316
1331
  }
1317
1332
  }
1318
1333
  } catch (err) {
1319
- throw new Error(`[vxrn/metro] Worklets transform failed for ${filename}: ${err.message || err}`);
1334
+ throw createTransformError(`[vxrn/metro] Worklets transform failed for ${filename}: ${err.message || err}`, code, err);
1320
1335
  }
1321
1336
  }
1322
1337
  const lang = langForFilename(filename);
@@ -1334,10 +1349,10 @@ async function transform(config, projectRoot, filename, data, options) {
1334
1349
  sourcemap: true
1335
1350
  });
1336
1351
  } catch (err) {
1337
- throw new Error(`[vxrn/metro] Oxc transform failed for ${filename}: ${err.message || err}`);
1352
+ throw createTransformError(`[vxrn/metro] Oxc transform failed for ${filename}: ${err.message || err}`, code, err);
1338
1353
  }
1339
1354
  if (oxcRes.errors?.length) {
1340
- throw new Error(`[vxrn/metro] Oxc transform failed for ${filename}: ${oxcRes.errors[0].message || oxcRes.errors[0]}`);
1355
+ throw createTransformError(`[vxrn/metro] Oxc transform failed for ${filename}: ${oxcRes.errors[0].message || oxcRes.errors[0]}`, code, oxcRes.errors[0]);
1341
1356
  }
1342
1357
  code = oxcRes.code || code;
1343
1358
  if (oxcRes.map) {
@@ -1352,7 +1367,7 @@ async function transform(config, projectRoot, filename, data, options) {
1352
1367
  }
1353
1368
  }
1354
1369
  } catch (err) {
1355
- throw new Error(`[vxrn/metro] native async/CJS lowering failed for ${filename}: ${err.message || err}`);
1370
+ throw createTransformError(`[vxrn/metro] native async/CJS lowering failed for ${filename}: ${err.message || err}`, code, err);
1356
1371
  }
1357
1372
  try {
1358
1373
  const loopsRes = transformHermesLoops(code, filename);
@@ -1363,7 +1378,7 @@ async function transform(config, projectRoot, filename, data, options) {
1363
1378
  }
1364
1379
  }
1365
1380
  } catch (err) {
1366
- throw new Error(`[vxrn/metro] Hermes loop-binding transform failed for ${filename}: ${err.message || err}`);
1381
+ throw createTransformError(`[vxrn/metro] Hermes loop-binding transform failed for ${filename}: ${err.message || err}`, code, err);
1367
1382
  }
1368
1383
  const finalDeps = extractDependencies(code, filename, {
1369
1384
  asyncRequireModulePath: asyncRequirePath,
@@ -1450,7 +1465,7 @@ var require = _$$_REQUIRE;
1450
1465
  intermediateMaps.length = 0;
1451
1466
  }
1452
1467
  } catch (err) {
1453
- throw new Error(`[vxrn/metro] Minifier failed for ${filename}: ${err.message || err}`);
1468
+ throw createTransformError(`[vxrn/metro] Minifier failed for ${filename}: ${err.message || err}`, code, err);
1454
1469
  }
1455
1470
  }
1456
1471
  let rawMappings = [];