or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

chrome-devtools.mdcli-interface.mdcore-symbolication.mdignore-list.mdindex.mdsource-metadata.md

core-symbolication.mddocs/

0

# Core Symbolication

1

2

Core API for creating symbolication contexts and translating bundle positions to original source locations.

3

4

## Capabilities

5

6

### Create Symbolication Context

7

8

Creates a symbolication context from source map content for processing stack traces and coordinates.

9

10

```javascript { .api }

11

/**

12

* Creates a symbolication context from source map content

13

* @param SourceMapConsumer - SourceMapConsumer constructor from 'source-map' library

14

* @param sourceMapContent - String content of the source map

15

* @param options - Optional configuration for line/column offsets and naming

16

* @returns SymbolicationContext for performing symbolication operations

17

*/

18

function createContext(

19

SourceMapConsumer: typeof SourceMapConsumer,

20

sourceMapContent: string,

21

options?: ContextOptionsInput

22

): SymbolicationContext;

23

```

24

25

**Usage Examples:**

26

27

```javascript

28

const Symbolication = require('metro-symbolicate/private/Symbolication');

29

const { SourceMapConsumer } = require('source-map');

30

const fs = require('fs');

31

32

// Basic context creation

33

const sourceMapContent = fs.readFileSync('bundle.js.map', 'utf8');

34

const context = Symbolication.createContext(SourceMapConsumer, sourceMapContent);

35

36

// With custom options

37

const context = Symbolication.createContext(SourceMapConsumer, sourceMapContent, {

38

nameSource: 'function_names',

39

inputLineStart: 0,

40

outputLineStart: 1

41

});

42

```

43

44

### Create Directory Context (Unstable)

45

46

Creates a symbolication context from a directory containing multiple source map files.

47

48

```javascript { .api }

49

/**

50

* Creates a symbolication context from a directory of source maps

51

* @param SourceMapConsumer - SourceMapConsumer constructor from 'source-map' library

52

* @param sourceMapDir - Path to directory containing source map files

53

* @param options - Optional configuration for line/column offsets and naming

54

* @returns SymbolicationContext for performing symbolication operations

55

*/

56

function unstable_createDirectoryContext(

57

SourceMapConsumer: typeof SourceMapConsumer,

58

sourceMapDir: string,

59

options?: ContextOptionsInput

60

): SymbolicationContext;

61

```

62

63

**Usage Examples:**

64

65

```javascript

66

const Symbolication = require('metro-symbolicate/private/Symbolication');

67

const { SourceMapConsumer } = require('source-map');

68

69

// Directory-based context

70

const context = Symbolication.unstable_createDirectoryContext(

71

SourceMapConsumer,

72

'./source-maps/',

73

{ nameSource: 'identifier_names' }

74

);

75

```

76

77

### Symbolicate Stack Traces

78

79

Transforms stack traces from bundled locations to original source locations.

80

81

```javascript { .api }

82

/**

83

* Symbolicates a complete stack trace string

84

* @param stackTrace - Stack trace string with bundled locations

85

* @returns Symbolicated stack trace with original source locations

86

*/

87

symbolicate(stackTrace: string): string;

88

```

89

90

**Usage Examples:**

91

92

```javascript

93

const stackTrace = `

94

Error: Something went wrong

95

at Object.foo (bundle.js:1:234)

96

at bar (bundle.js:2:456)

97

at baz (bundle.js:3:789)

98

`;

99

100

const symbolicatedTrace = context.symbolicate(stackTrace);

101

console.log(symbolicatedTrace);

102

// Output:

103

// Error: Something went wrong

104

// at Object.foo (src/utils.js:15:8)

105

// at bar (src/main.js:22:12)

106

// at baz (src/app.js:45:6)

107

```

108

109

### Get Original Position

110

111

Translates specific line and column coordinates to original source locations.

112

113

```javascript { .api }

114

/**

115

* Gets original source position for bundled coordinates

116

* @param line - Line number in bundled code

117

* @param column - Column number in bundled code

118

* @param moduleIds - Optional module identifiers for segmented bundles

119

* @returns Original position information or null if not found

120

*/

121

getOriginalPositionFor(

122

line: number,

123

column: number,

124

moduleIds?: ?SingleMapModuleIds

125

): ?{

126

source: ?string;

127

line: ?number;

128

column: ?number;

129

name: ?string;

130

};

131

```

132

133

**Usage Examples:**

134

135

```javascript

136

// Basic coordinate translation

137

const original = context.getOriginalPositionFor(42, 15);

138

if (original) {

139

console.log(`Original: ${original.source}:${original.line}:${original.column}`);

140

console.log(`Function: ${original.name}`);

141

}

142

143

// With module IDs for segmented bundles

144

const originalWithModule = context.getOriginalPositionFor(10, 5, {

145

segmentId: 123,

146

localId: 456

147

});

148

```

149

150

### Parse File Names

151

152

Parses module file names to extract module identifiers for segmented bundles.

153

154

```javascript { .api }

155

/**

156

* Parses a file name to extract module identifiers

157

* @param fileName - File name potentially containing module ID (e.g., "123.js")

158

* @returns Module identifiers or null if not a module file name

159

*/

160

parseFileName(fileName: string): ?SingleMapModuleIds;

161

```

162

163

**Usage Examples:**

164

165

```javascript

166

// Parse module file names

167

const moduleIds = context.parseFileName('123.js');

168

if (moduleIds) {

169

console.log(`Segment ID: ${moduleIds.segmentId}`);

170

console.log(`Local ID: ${moduleIds.localId}`);

171

}

172

173

// Non-module file names return null

174

const noIds = context.parseFileName('regular-file.js'); // null

175

```

176

177

### Symbolicate Profiler Maps

178

179

Processes React Native profiler map files to translate profiling data.

180

181

```javascript { .api }

182

/**

183

* Symbolicates a profiler map file

184

* @param profMapFile - Path to .profmap file

185

* @returns Symbolicated profiler map content

186

*/

187

symbolicateProfilerMap(profMapFile: string): string;

188

```

189

190

**Usage Examples:**

191

192

```javascript

193

const fs = require('fs');

194

195

// Symbolicate profiler map

196

const symbolicatedProfMap = context.symbolicateProfilerMap('./trace.profmap');

197

198

// Write symbolicated output

199

fs.writeFileSync('./symbolicated-trace.profmap', symbolicatedProfMap);

200

```

201

202

### Symbolicate Attribution Data

203

204

Processes bundle size attribution data for analysis tools.

205

206

```javascript { .api }

207

/**

208

* Symbolicates attribution object in-place

209

* @param obj - Attribution object to modify with original source information

210

*/

211

symbolicateAttribution(obj: Object): void;

212

```

213

214

**Usage Examples:**

215

216

```javascript

217

// Process attribution data

218

const attributionData = {

219

location: {

220

file: 'bundle.js',

221

line: 42,

222

column: 15,

223

bytecodeSize: 1024

224

}

225

};

226

227

context.symbolicateAttribution(attributionData);

228

// attributionData.location now contains original source information

229

console.log(attributionData.location.file); // 'src/component.js'

230

```

231

232

### Symbolicate Chrome Traces

233

234

Processes Chrome DevTools CPU profile files.

235

236

```javascript { .api }

237

/**

238

* Symbolicates a Chrome CPU profile file

239

* @param traceFile - Path to .cpuprofile file

240

* @param streams - Output streams for results and errors

241

*/

242

symbolicateChromeTrace(

243

traceFile: string,

244

streams: { stdout: any; stderr: any }

245

): void;

246

```

247

248

**Usage Examples:**

249

250

```javascript

251

// Symbolicate CPU profile

252

context.symbolicateChromeTrace('./profile.cpuprofile', {

253

stdout: process.stdout,

254

stderr: process.stderr

255

});

256

```

257

258

### Hermes Integration

259

260

Special methods for processing Hermes JavaScript engine crash dumps and coverage traces.

261

262

```javascript { .api }

263

/**

264

* Symbolicates Hermes minidump crash information

265

* @param crashInfo - Hermes crash dump data

266

* @returns Symbolicated stack trace array

267

*/

268

symbolicateHermesMinidumpTrace(

269

crashInfo: HermesMinidumpCrashInfo

270

): SymbolicatedStackTrace;

271

272

/**

273

* Symbolicates Hermes coverage trace information

274

* @param coverageInfo - Hermes coverage data

275

* @returns Symbolicated coverage trace array

276

*/

277

symbolicateHermesCoverageTrace(

278

coverageInfo: HermesCoverageInfo

279

): SymbolicatedStackTrace;

280

```

281

282

**Usage Examples:**

283

284

```javascript

285

// Process Hermes crash dump

286

const crashData = JSON.parse(fs.readFileSync('hermes-crash.json', 'utf8'));

287

const symbolicatedCrash = context.symbolicateHermesMinidumpTrace(crashData);

288

289

// Process Hermes coverage trace

290

const coverageData = JSON.parse(fs.readFileSync('coverage.json', 'utf8'));

291

const symbolicatedCoverage = context.symbolicateHermesCoverageTrace(coverageData);

292

```

293

294

### Symbolicate Heap Snapshots

295

296

Processes Chrome DevTools heap snapshots and heap timelines.

297

298

```javascript { .api }

299

/**

300

* Symbolicates a Chrome heap snapshot

301

* @param snapshotContent - Heap snapshot JSON content as string

302

* @returns Symbolicated heap snapshot object

303

*/

304

symbolicateHeapSnapshot(snapshotContent: string): ChromeHeapSnapshot;

305

```

306

307

**Usage Examples:**

308

309

```javascript

310

// Symbolicate heap snapshot

311

const snapshotContent = fs.readFileSync('heap.heapsnapshot', 'utf8');

312

const symbolicatedSnapshot = context.symbolicateHeapSnapshot(snapshotContent);

313

314

// Write symbolicated snapshot

315

fs.writeFileSync(

316

'symbolicated-heap.json',

317

JSON.stringify(symbolicatedSnapshot)

318

);

319

```

320

321

## Types

322

323

```javascript { .api }

324

type ContextOptionsInput = {

325

/** Source for symbol names: 'function_names' (default) or 'identifier_names' */

326

nameSource?: 'function_names' | 'identifier_names';

327

/** Starting line number for input (default: 1) */

328

inputLineStart?: number;

329

/** Starting column number for input (default: 0) */

330

inputColumnStart?: number;

331

/** Starting line number for output (default: 1) */

332

outputLineStart?: number;

333

/** Starting column number for output (default: 0) */

334

outputColumnStart?: number;

335

};

336

337

type SingleMapModuleIds = {

338

/** Segment identifier for the module */

339

segmentId: number;

340

/** Local identifier within the segment */

341

localId: ?number;

342

};

343

344

type HermesMinidumpCrashInfo = {

345

callstack: $ReadOnlyArray<HermesMinidumpStackFrame | NativeCodeStackFrame>;

346

};

347

348

type HermesMinidumpStackFrame = $ReadOnly<{

349

ByteCodeOffset: number;

350

FunctionID: number;

351

CJSModuleOffset?: number; // Legacy, renamed to SegmentID

352

SegmentID?: number;

353

SourceURL: string;

354

StackFrameRegOffs: string;

355

SourceLocation?: string;

356

}>;

357

358

type HermesCoverageInfo = {

359

executedFunctions: $ReadOnlyArray<HermesCoverageStackFrame>;

360

};

361

362

type HermesCoverageStackFrame = $ReadOnly<{

363

line: number; // SegmentID or zero-based line

364

column: number; // VirtualOffset or zero-based column

365

SourceURL: ?string;

366

}>;

367

368

type SymbolicatedStackTrace = $ReadOnlyArray<

369

SymbolicatedStackFrame | NativeCodeStackFrame

370

>;

371

372

type SymbolicatedStackFrame = $ReadOnly<{

373

source: ?string;

374

line: ?number;

375

column: ?number;

376

name: ?string;

377

}>;

378

379

type NativeCodeStackFrame = $ReadOnly<{

380

NativeCode: true;

381

StackFrameRegOffs: string;

382

}>;

383

```