Skip to content

Commit 927b8bb

Browse files
author
David Sheldrick
committed
emit metro raw source maps for older RN versions
1 parent cfb70ec commit 927b8bb

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ jspm_packages/
5656

5757
dist
5858
package
59+
*.tar.gz

src/composeSourceMaps.ts

+20
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,26 @@ export function convertMetroRawSourceMapToStandardSourceMap(
3232
return outputMap.toString()
3333
}
3434

35+
export function convertStandardSourceMapToMetroRawSourceMap(
36+
map: RawSourceMap | string,
37+
) {
38+
const consumer = new SourceMapConsumer(map as any) // upstream types are wrong
39+
40+
const outputMap: MetroRawSourceMap = []
41+
42+
consumer.eachMapping(mapping => {
43+
outputMap.push([
44+
mapping.generatedLine,
45+
mapping.generatedColumn,
46+
mapping.originalLine,
47+
mapping.originalColumn,
48+
mapping.name,
49+
])
50+
})
51+
52+
return outputMap
53+
}
54+
3555
export function composeSourceMaps(
3656
sourceMap: string | RawSourceMap,
3757
targetMap: string | RawSourceMap,

src/getMetroTransformer.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { Node } from "babel-core"
22
import { RawSourceMap, SourceMapConsumer } from "source-map"
33
import * as semver from "semver"
4-
import { MetroRawSourceMap } from "./composeSourceMaps"
4+
import {
5+
MetroRawSourceMap,
6+
convertStandardSourceMapToMetroRawSourceMap,
7+
} from "./composeSourceMaps"
58
import * as babylon from "babylon"
69
import traverse from "babel-traverse"
710

@@ -56,9 +59,10 @@ export interface ReactNativeObfuscatingTransformerDefaultResult {
5659
}
5760

5861
export function maybeTransformMetroResult(
62+
upstreamResult: MetroTransformerResult,
5963
{ code, map }: ReactNativeObfuscatingTransformerDefaultResult,
6064
reactNativeMinorVersion: number = getReactNativeMinorVersion(),
61-
): ReactNativeObfuscatingTransformerDefaultResult | { ast: Node } {
65+
): MetroTransformerResult {
6266
if (reactNativeMinorVersion >= 52) {
6367
// convert code and map to ast
6468
const ast = babylon.parse(code, {
@@ -82,6 +86,8 @@ export function maybeTransformMetroResult(
8286
})
8387

8488
return { ast }
89+
} else if (Array.isArray(upstreamResult.map)) {
90+
return { code, map: convertStandardSourceMapToMetroRawSourceMap(map) }
8591
} else {
8692
return { code, map }
8793
}

src/obfuscatingTransformer.ts

+1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export function obfuscatingTransformer({
9191
}
9292

9393
return maybeTransformMetroResult(
94+
result,
9495
obfuscateCodePreservingSourceMap(
9596
code,
9697
map,

0 commit comments

Comments
 (0)