t2-demo-parser 1.0.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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +823 -0
  3. package/dist/BitStream.d.ts +143 -0
  4. package/dist/BitStream.d.ts.map +1 -0
  5. package/dist/BitStream.js +369 -0
  6. package/dist/BitStream.js.map +1 -0
  7. package/dist/BitStream.test.d.ts +2 -0
  8. package/dist/BitStream.test.d.ts.map +1 -0
  9. package/dist/BitStream.test.js +419 -0
  10. package/dist/BitStream.test.js.map +1 -0
  11. package/dist/ClassRegistry.d.ts +100 -0
  12. package/dist/ClassRegistry.d.ts.map +1 -0
  13. package/dist/ClassRegistry.js +118 -0
  14. package/dist/ClassRegistry.js.map +1 -0
  15. package/dist/ClassRegistry.test.d.ts +2 -0
  16. package/dist/ClassRegistry.test.d.ts.map +1 -0
  17. package/dist/ClassRegistry.test.js +83 -0
  18. package/dist/ClassRegistry.test.js.map +1 -0
  19. package/dist/DataBlockParsers.d.ts +3 -0
  20. package/dist/DataBlockParsers.d.ts.map +1 -0
  21. package/dist/DataBlockParsers.js +2041 -0
  22. package/dist/DataBlockParsers.js.map +1 -0
  23. package/dist/DemoParser.d.ts +155 -0
  24. package/dist/DemoParser.d.ts.map +1 -0
  25. package/dist/DemoParser.js +943 -0
  26. package/dist/DemoParser.js.map +1 -0
  27. package/dist/DemoParser.test.d.ts +2 -0
  28. package/dist/DemoParser.test.d.ts.map +1 -0
  29. package/dist/DemoParser.test.js +472 -0
  30. package/dist/DemoParser.test.js.map +1 -0
  31. package/dist/EventParsers.d.ts +3 -0
  32. package/dist/EventParsers.d.ts.map +1 -0
  33. package/dist/EventParsers.js +603 -0
  34. package/dist/EventParsers.js.map +1 -0
  35. package/dist/GhostManager.d.ts +13 -0
  36. package/dist/GhostManager.d.ts.map +1 -0
  37. package/dist/GhostManager.js +2002 -0
  38. package/dist/GhostManager.js.map +1 -0
  39. package/dist/GhostTracker.test.d.ts +2 -0
  40. package/dist/GhostTracker.test.d.ts.map +1 -0
  41. package/dist/GhostTracker.test.js +64 -0
  42. package/dist/GhostTracker.test.js.map +1 -0
  43. package/dist/HuffmanProcessor.d.ts +12 -0
  44. package/dist/HuffmanProcessor.d.ts.map +1 -0
  45. package/dist/HuffmanProcessor.js +163 -0
  46. package/dist/HuffmanProcessor.js.map +1 -0
  47. package/dist/LiveParser.d.ts +16 -0
  48. package/dist/LiveParser.d.ts.map +1 -0
  49. package/dist/LiveParser.js +29 -0
  50. package/dist/LiveParser.js.map +1 -0
  51. package/dist/PacketParser.d.ts +104 -0
  52. package/dist/PacketParser.d.ts.map +1 -0
  53. package/dist/PacketParser.js +713 -0
  54. package/dist/PacketParser.js.map +1 -0
  55. package/dist/Timeline.d.ts +101 -0
  56. package/dist/Timeline.d.ts.map +1 -0
  57. package/dist/Timeline.js +251 -0
  58. package/dist/Timeline.js.map +1 -0
  59. package/dist/cli.d.ts +3 -0
  60. package/dist/cli.d.ts.map +1 -0
  61. package/dist/cli.js +372 -0
  62. package/dist/cli.js.map +1 -0
  63. package/dist/dataBlockDataTypes.d.ts +877 -0
  64. package/dist/dataBlockDataTypes.d.ts.map +1 -0
  65. package/dist/dataBlockDataTypes.js +2 -0
  66. package/dist/dataBlockDataTypes.js.map +1 -0
  67. package/dist/dataTypes.d.ts +31 -0
  68. package/dist/dataTypes.d.ts.map +1 -0
  69. package/dist/dataTypes.js +5 -0
  70. package/dist/dataTypes.js.map +1 -0
  71. package/dist/dump.d.ts +3 -0
  72. package/dist/dump.d.ts.map +1 -0
  73. package/dist/dump.js +36 -0
  74. package/dist/dump.js.map +1 -0
  75. package/dist/eventDataTypes.d.ts +199 -0
  76. package/dist/eventDataTypes.d.ts.map +1 -0
  77. package/dist/eventDataTypes.js +2 -0
  78. package/dist/eventDataTypes.js.map +1 -0
  79. package/dist/ghostDataTypes.d.ts +573 -0
  80. package/dist/ghostDataTypes.d.ts.map +1 -0
  81. package/dist/ghostDataTypes.js +2 -0
  82. package/dist/ghostDataTypes.js.map +1 -0
  83. package/dist/index.d.ts +17 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +9 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/types.d.ts +261 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +204 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +46 -0
package/dist/cli.js ADDED
@@ -0,0 +1,372 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import { DemoParser } from "./DemoParser.js";
5
+ import { BlockTypePacket, BlockTypeSendPacket, BlockTypeMove, BlockTypeInfo, } from "./types.js";
6
+ import { buildTimeline, getTimelineStats, exportTimeline, } from "./Timeline.js";
7
+ const filePath = process.argv[2];
8
+ if (!filePath) {
9
+ console.error("Usage: t2-demo-parser <path-to-rec-file>");
10
+ process.exit(1);
11
+ }
12
+ const resolvedPath = path.resolve(filePath);
13
+ console.log(`Parsing: ${resolvedPath}`);
14
+ console.log(`File size: ${fs.statSync(resolvedPath).size} bytes`);
15
+ console.log();
16
+ const buffer = fs.readFileSync(resolvedPath);
17
+ // ================================================================
18
+ // Full parse with automatic discovery
19
+ // ================================================================
20
+ const parser = new DemoParser(buffer);
21
+ const demo = await parser.parseFullDemo();
22
+ const registry = parser.getRegistry();
23
+ function isPacketBlock(b) {
24
+ return (b.type === BlockTypePacket &&
25
+ b.parsed !== undefined &&
26
+ "dnetHeader" in b.parsed);
27
+ }
28
+ const packetBlocks = demo.blocks.filter((b) => b.type === BlockTypePacket);
29
+ const parsedPackets = demo.blocks.filter(isPacketBlock);
30
+ // ================================================================
31
+ // DataBlock summary from initial block parsing
32
+ // ================================================================
33
+ {
34
+ const shapeBlocks = [...demo.initialBlock.dataBlocks.values()].filter((db) => db.data.shapeName);
35
+ if (shapeBlocks.length > 0) {
36
+ console.log(`DataBlocks with shapeName (${shapeBlocks.length} total):`);
37
+ for (const db of shapeBlocks.slice(0, 20)) {
38
+ console.log(` objId=${db.objectId} classId=${db.classId} [${db.className}]: ${db.data.shapeName}`);
39
+ }
40
+ if (shapeBlocks.length > 20) {
41
+ console.log(` ... and ${shapeBlocks.length - 20} more`);
42
+ }
43
+ }
44
+ const dbByClass = new Map();
45
+ for (const [_objId, db] of demo.initialBlock.dataBlocks) {
46
+ dbByClass.set(db.className, (dbByClass.get(db.className) || 0) + 1);
47
+ }
48
+ if (dbByClass.size > 0) {
49
+ console.log("DataBlock types parsed:");
50
+ for (const [name, count] of [...dbByClass.entries()].sort((a, b) => b[1] - a[1])) {
51
+ console.log(` ${name}: ${count}`);
52
+ }
53
+ }
54
+ }
55
+ // ================================================================
56
+ // Output results
57
+ // ================================================================
58
+ console.log();
59
+ console.log("=== Summary ===");
60
+ console.log(`Protocol version: 0x${demo.header.protocolVersion.toString(16)}`);
61
+ console.log(`Demo length: ${demo.header.demoLengthMs}ms (${formatTime(demo.header.demoLengthMs)})`);
62
+ const moveBlocks = demo.blocks.filter((b) => b.type === BlockTypeMove);
63
+ const infoBlocks = demo.blocks.filter((b) => b.type === BlockTypeInfo);
64
+ const sendPacketBlocks = demo.blocks.filter((b) => b.type === BlockTypeSendPacket);
65
+ // Analyze ghost failures and unbound operations
66
+ const ghostFailuresByClass = new Map();
67
+ const unboundGhostOps = new Map();
68
+ for (const block of parsedPackets) {
69
+ const pkt = block.parsed;
70
+ for (const ghost of pkt.ghosts) {
71
+ if (ghost.classId !== undefined && ghost.parsedData === undefined && ghost.type !== "delete") {
72
+ const binding = registry.getGhostParser(ghost.classId);
73
+ if (binding) {
74
+ ghostFailuresByClass.set(binding.name, (ghostFailuresByClass.get(binding.name) || 0) + 1);
75
+ }
76
+ else {
77
+ const entry = unboundGhostOps.get(ghost.classId) || { creates: 0, updates: 0 };
78
+ if (ghost.type === "create")
79
+ entry.creates++;
80
+ else
81
+ entry.updates++;
82
+ unboundGhostOps.set(ghost.classId, entry);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ if (ghostFailuresByClass.size > 0) {
88
+ console.log("\nGhost failures by type:");
89
+ for (const [name, count] of [...ghostFailuresByClass.entries()].sort((a, b) => b[1] - a[1])) {
90
+ console.log(` ${name}: ${count}`);
91
+ }
92
+ }
93
+ if (unboundGhostOps.size > 0) {
94
+ console.log(`\nUnbound ghost classIds (${unboundGhostOps.size} total):`);
95
+ for (const [classId, ops] of [...unboundGhostOps.entries()].sort((a, b) => (b[1].creates + b[1].updates) - (a[1].creates + a[1].updates)).slice(0, 10)) {
96
+ console.log(` classId ${classId}: ${ops.creates} creates, ${ops.updates} updates`);
97
+ }
98
+ }
99
+ console.log();
100
+ console.log(`Total blocks: ${demo.blocks.length}`);
101
+ console.log(` Packet blocks (type 0): ${packetBlocks.length}`);
102
+ console.log(` SendPacket blocks (type 1): ${sendPacketBlocks.length}`);
103
+ console.log(` Move blocks (type 2): ${moveBlocks.length}`);
104
+ console.log(` Info blocks (type 3): ${infoBlocks.length}`);
105
+ // Sequence numbers
106
+ if (parsedPackets.length > 0) {
107
+ const seqNums = parsedPackets.map((b) => b.parsed.dnetHeader.seqNumber);
108
+ let seqGaps = 0;
109
+ for (let i = 1; i < seqNums.length; i++) {
110
+ const expected = (seqNums[i - 1] + 1) & 0x1ff;
111
+ if (seqNums[i] !== expected)
112
+ seqGaps++;
113
+ }
114
+ console.log();
115
+ console.log(`Sequence numbers: ${seqNums[0]} → ${seqNums[seqNums.length - 1]}, ` +
116
+ `${seqGaps} gaps out of ${seqNums.length - 1} transitions`);
117
+ }
118
+ // Collect classId stats
119
+ const eventClassIds = new Map();
120
+ const ghostClassIds = new Map();
121
+ for (const block of parsedPackets) {
122
+ const pkt = block.parsed;
123
+ for (const evt of pkt.events) {
124
+ eventClassIds.set(evt.classId, (eventClassIds.get(evt.classId) || 0) + 1);
125
+ }
126
+ for (const ghost of pkt.ghosts) {
127
+ if (ghost.classId !== undefined) {
128
+ ghostClassIds.set(ghost.classId, (ghostClassIds.get(ghost.classId) || 0) + 1);
129
+ }
130
+ }
131
+ }
132
+ // Show event bindings
133
+ if (eventClassIds.size > 0) {
134
+ console.log();
135
+ console.log(`Event classIds (${eventClassIds.size} unique):`);
136
+ for (const [id, count] of [...eventClassIds.entries()]
137
+ .sort((a, b) => b[1] - a[1])
138
+ .slice(0, 15)) {
139
+ const binding = registry.getEventParser(id);
140
+ console.log(` ${id}: ${count} occurrences${binding ? ` → ${binding.name}` : ""}`);
141
+ }
142
+ }
143
+ // Show ghost bindings
144
+ if (ghostClassIds.size > 0) {
145
+ console.log();
146
+ console.log(`Ghost classIds (${ghostClassIds.size} unique):`);
147
+ for (const [id, count] of [...ghostClassIds.entries()]
148
+ .sort((a, b) => b[1] - a[1])
149
+ .slice(0, 15)) {
150
+ const binding = registry.getGhostParser(id);
151
+ console.log(` ${id}: ${count} occurrences${binding ? ` → ${binding.name}` : ""}`);
152
+ }
153
+ }
154
+ // Ghost tracker state
155
+ const ghostTracker = parser.getGhostTracker();
156
+ const allGhosts = ghostTracker.getAllGhosts();
157
+ if (allGhosts.size > 0) {
158
+ console.log();
159
+ console.log(`Active ghosts (${allGhosts.size} total):`);
160
+ const classCounts = new Map();
161
+ for (const [_idx, ghost] of allGhosts) {
162
+ const name = ghost.className || `unknown(${ghost.classId})`;
163
+ classCounts.set(name, (classCounts.get(name) || 0) + 1);
164
+ }
165
+ for (const [name, count] of [...classCounts.entries()].sort((a, b) => b[1] - a[1])) {
166
+ console.log(` ${name}: ${count}`);
167
+ }
168
+ }
169
+ // Player position trajectory
170
+ const positionSamples = [];
171
+ for (const block of parsedPackets) {
172
+ const pkt = block.parsed;
173
+ if (pkt.gameState.compressionPoint) {
174
+ positionSamples.push({
175
+ blockIdx: block.index,
176
+ pos: pkt.gameState.compressionPoint,
177
+ });
178
+ }
179
+ const cod = pkt.gameState.controlObjectData;
180
+ const codPos = cod?.position;
181
+ if (codPos && typeof codPos === "object" && "x" in codPos) {
182
+ positionSamples.push({
183
+ blockIdx: block.index,
184
+ pos: codPos,
185
+ });
186
+ }
187
+ }
188
+ if (positionSamples.length > 0) {
189
+ console.log();
190
+ console.log(`Player position samples: ${positionSamples.length}`);
191
+ const step = Math.max(1, Math.floor(positionSamples.length / 8));
192
+ for (let i = 0; i < positionSamples.length; i += step) {
193
+ const s = positionSamples[i];
194
+ console.log(` block[${s.blockIdx}]: (${s.pos.x.toFixed(1)}, ${s.pos.y.toFixed(1)}, ${s.pos.z.toFixed(1)})`);
195
+ }
196
+ }
197
+ // Ghost updates with position data
198
+ let ghostsWithPosition = 0;
199
+ for (const block of parsedPackets) {
200
+ const pkt = block.parsed;
201
+ for (const ghost of pkt.ghosts) {
202
+ if (ghost.parsedData?.position)
203
+ ghostsWithPosition++;
204
+ }
205
+ }
206
+ if (ghostsWithPosition > 0) {
207
+ console.log();
208
+ console.log(`Ghost updates with position data: ${ghostsWithPosition}`);
209
+ }
210
+ // First 5 packets detail
211
+ if (parsedPackets.length > 0) {
212
+ console.log();
213
+ console.log("First 5 packets:");
214
+ for (const block of parsedPackets.slice(0, 5)) {
215
+ const pkt = block.parsed;
216
+ console.log(` [${block.index}] seq=${pkt.dnetHeader.seqNumber} events=${pkt.events.length} ghosts=${pkt.ghosts.length}`);
217
+ if (pkt.gameState.controlObjectGhostIndex !== undefined) {
218
+ console.log(` controlObject=ghost#${pkt.gameState.controlObjectGhostIndex}` +
219
+ (pkt.gameState.controlObjectData ? " (parsed)" : " (unparsed)"));
220
+ }
221
+ if (pkt.gameState.compressionPoint) {
222
+ const cp = pkt.gameState.compressionPoint;
223
+ console.log(` pos=(${cp.x.toFixed(1)}, ${cp.y.toFixed(1)}, ${cp.z.toFixed(1)})`);
224
+ }
225
+ if (pkt.gameState.cameraFov !== undefined) {
226
+ console.log(` cameraFov=${pkt.gameState.cameraFov}`);
227
+ }
228
+ for (const evt of pkt.events.slice(0, 3)) {
229
+ const p = evt.parsedData;
230
+ console.log(` event: classId=${evt.classId}${p ? ` → ${String(p.type) || "?"}` : " (unparsed)"}`);
231
+ }
232
+ for (const ghost of pkt.ghosts.slice(0, 3)) {
233
+ const name = ghost.classId !== undefined
234
+ ? registry.getGhostParser(ghost.classId)?.name || `?`
235
+ : "";
236
+ console.log(` ghost: idx=${ghost.index} ${ghost.type}${name ? ` [${name}]` : ""}${ghost.parsedData ? " (parsed)" : ""}`);
237
+ }
238
+ }
239
+ }
240
+ // Parsed moves
241
+ const parsedMoves = moveBlocks.filter((b) => b.parsed && "yaw" in b.parsed);
242
+ console.log();
243
+ console.log(`Parsed moves: ${parsedMoves.length}`);
244
+ // ================================================================
245
+ // Build timeline
246
+ // ================================================================
247
+ console.log();
248
+ console.log("=== Timeline ===");
249
+ const timeline = buildTimeline(demo, registry);
250
+ const stats = getTimelineStats(timeline);
251
+ console.log(`Duration: ${formatTime(stats.durationMs)}, ` +
252
+ `tick interval: ${stats.tickIntervalMs.toFixed(1)}ms, ` +
253
+ `${stats.packetCount} packets`);
254
+ console.log(`Control object keyframes: ${stats.controlObjectKeyframes}`);
255
+ console.log(`Ghost instances: ${stats.totalGhostInstances} (${stats.ghostsWithPosition} with position data)`);
256
+ // Ghost instances by class (top types)
257
+ if (stats.ghostInstancesByClass.size > 0) {
258
+ console.log();
259
+ console.log("Ghost instances by class:");
260
+ for (const [name, count] of [...stats.ghostInstancesByClass.entries()]
261
+ .sort((a, b) => b[1] - a[1])
262
+ .slice(0, 15)) {
263
+ const kfCount = stats.ghostKeyframesByClass.get(name) || 0;
264
+ console.log(` ${name}: ${count} instances, ${kfCount} keyframes`);
265
+ }
266
+ }
267
+ // Events summary
268
+ if (stats.eventsByType.size > 0) {
269
+ console.log();
270
+ console.log(`Events: ${stats.totalEvents} total`);
271
+ for (const [type, count] of [...stats.eventsByType.entries()]
272
+ .sort((a, b) => b[1] - a[1])
273
+ .slice(0, 10)) {
274
+ console.log(` ${type}: ${count}`);
275
+ }
276
+ }
277
+ // Sample player positions from timeline
278
+ if (timeline.controlObject.length > 0) {
279
+ console.log();
280
+ console.log("Player trajectory (from timeline):");
281
+ const step = Math.max(1, Math.floor(timeline.controlObject.length / 6));
282
+ for (let i = 0; i < timeline.controlObject.length; i += step) {
283
+ const co = timeline.controlObject[i];
284
+ if (co.position) {
285
+ console.log(` ${formatTime(co.time)}: (${co.position.x.toFixed(1)}, ${co.position.y.toFixed(1)}, ${co.position.z.toFixed(1)})`);
286
+ }
287
+ }
288
+ }
289
+ // Sample Player ghost trajectories
290
+ const playerInstances = timeline.ghostInstances.filter((inst) => inst.className === "Player" && inst.keyframes.some((kf) => kf.position));
291
+ if (playerInstances.length > 0) {
292
+ console.log();
293
+ console.log(`Player ghost instances: ${playerInstances.length}`);
294
+ for (const inst of playerInstances.slice(0, 3)) {
295
+ const posKfs = inst.keyframes.filter((kf) => kf.position);
296
+ const first = posKfs[0];
297
+ const last = posKfs[posKfs.length - 1];
298
+ console.log(` ghost#${inst.ghostIndex}: ${posKfs.length} position keyframes, ` +
299
+ `${formatTime(inst.spawnTime)}–${inst.despawnTime !== undefined ? formatTime(inst.despawnTime) : "active"}`);
300
+ if (first?.position && last?.position) {
301
+ console.log(` first: (${first.position.x.toFixed(1)}, ${first.position.y.toFixed(1)}, ${first.position.z.toFixed(1)}) at ${formatTime(first.time)}`);
302
+ console.log(` last: (${last.position.x.toFixed(1)}, ${last.position.y.toFixed(1)}, ${last.position.z.toFixed(1)}) at ${formatTime(last.time)}`);
303
+ }
304
+ }
305
+ }
306
+ // ================================================================
307
+ // Experiment metrics export (optional via env)
308
+ // ================================================================
309
+ {
310
+ const metricsPath = process.env.EXPERIMENT_METRICS_PATH;
311
+ if (metricsPath) {
312
+ const metrics = {
313
+ timestampIso: new Date().toISOString(),
314
+ inputFile: resolvedPath,
315
+ initialPhase2: {
316
+ valid: demo.initialBlock.phase2Valid ?? false,
317
+ trailingBits: demo.initialBlock.phase2TrailingBits ?? null,
318
+ error: demo.initialBlock.phase2Error ?? null,
319
+ events: demo.initialBlock.initialEvents.length,
320
+ ghosts: demo.initialBlock.initialGhosts.length,
321
+ ghostingSequence: demo.initialBlock.ghostingSequence,
322
+ controlObjectGhostIndex: demo.initialBlock.controlObjectGhostIndex,
323
+ missionName: demo.initialBlock.missionName,
324
+ missionCRC: demo.initialBlock.missionCRC,
325
+ },
326
+ counts: {
327
+ blocksTotal: demo.blocks.length,
328
+ packetBlocks: packetBlocks.length,
329
+ parsedPackets: parsedPackets.length,
330
+ moveBlocks: moveBlocks.length,
331
+ infoBlocks: infoBlocks.length,
332
+ eventClassIdsUnique: eventClassIds.size,
333
+ ghostClassIdsUnique: ghostClassIds.size,
334
+ unboundGhostClassIds: unboundGhostOps.size,
335
+ },
336
+ topUnboundGhostClassIds: [...unboundGhostOps.entries()]
337
+ .sort((a, b) => b[1].creates +
338
+ b[1].updates -
339
+ (a[1].creates + a[1].updates))
340
+ .slice(0, 20)
341
+ .map(([classId, ops]) => ({
342
+ classId,
343
+ creates: ops.creates,
344
+ updates: ops.updates,
345
+ })),
346
+ };
347
+ const resolvedMetricsPath = path.resolve(metricsPath);
348
+ fs.writeFileSync(resolvedMetricsPath, JSON.stringify(metrics, null, 2));
349
+ console.log();
350
+ console.log(`Experiment metrics written: ${resolvedMetricsPath}`);
351
+ }
352
+ }
353
+ // ================================================================
354
+ // JSON export (optional --json flag)
355
+ // ================================================================
356
+ if (process.argv.includes("--json")) {
357
+ const exportData = exportTimeline(timeline);
358
+ const outputPath = resolvedPath.replace(/\.rec$/i, ".timeline.json");
359
+ fs.writeFileSync(outputPath, JSON.stringify(exportData));
360
+ console.log();
361
+ console.log(`Timeline exported to: ${outputPath}`);
362
+ console.log(` ${exportData.controlObject.length} control keyframes, ` +
363
+ `${exportData.ghosts.length} ghost tracks, ` +
364
+ `${exportData.events.length} events`);
365
+ }
366
+ function formatTime(ms) {
367
+ const totalSeconds = Math.floor(ms / 1000);
368
+ const minutes = Math.floor(totalSeconds / 60);
369
+ const seconds = totalSeconds % 60;
370
+ return `${minutes}m${seconds.toString().padStart(2, "0")}s`;
371
+ }
372
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}