playwright-recast 0.1.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/LICENSE +21 -0
- package/README.md +282 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +139 -0
- package/dist/cli.js.map +1 -0
- package/dist/filter/step-filter.d.ts +7 -0
- package/dist/filter/step-filter.d.ts.map +1 -0
- package/dist/filter/step-filter.js +23 -0
- package/dist/filter/step-filter.js.map +1 -0
- package/dist/helpers.d.ts +41 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +73 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/parse/jsonl-parser.d.ts +87 -0
- package/dist/parse/jsonl-parser.d.ts.map +1 -0
- package/dist/parse/jsonl-parser.js +17 -0
- package/dist/parse/jsonl-parser.js.map +1 -0
- package/dist/parse/trace-parser.d.ts +6 -0
- package/dist/parse/trace-parser.d.ts.map +1 -0
- package/dist/parse/trace-parser.js +149 -0
- package/dist/parse/trace-parser.js.map +1 -0
- package/dist/parse/zip-reader.d.ts +21 -0
- package/dist/parse/zip-reader.d.ts.map +1 -0
- package/dist/parse/zip-reader.js +45 -0
- package/dist/parse/zip-reader.js.map +1 -0
- package/dist/pipeline/executor.d.ts +16 -0
- package/dist/pipeline/executor.d.ts.map +1 -0
- package/dist/pipeline/executor.js +283 -0
- package/dist/pipeline/executor.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +79 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +105 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/pipeline/stages.d.ts +49 -0
- package/dist/pipeline/stages.d.ts.map +1 -0
- package/dist/pipeline/stages.js +2 -0
- package/dist/pipeline/stages.js.map +1 -0
- package/dist/render/renderer.d.ts +22 -0
- package/dist/render/renderer.d.ts.map +1 -0
- package/dist/render/renderer.js +174 -0
- package/dist/render/renderer.js.map +1 -0
- package/dist/speed/classifiers.d.ts +8 -0
- package/dist/speed/classifiers.d.ts.map +1 -0
- package/dist/speed/classifiers.js +38 -0
- package/dist/speed/classifiers.js.map +1 -0
- package/dist/speed/speed-processor.d.ts +9 -0
- package/dist/speed/speed-processor.d.ts.map +1 -0
- package/dist/speed/speed-processor.js +97 -0
- package/dist/speed/speed-processor.js.map +1 -0
- package/dist/speed/time-remap.d.ts +12 -0
- package/dist/speed/time-remap.d.ts.map +1 -0
- package/dist/speed/time-remap.js +44 -0
- package/dist/speed/time-remap.js.map +1 -0
- package/dist/subtitles/srt-parser.d.ts +4 -0
- package/dist/subtitles/srt-parser.d.ts.map +1 -0
- package/dist/subtitles/srt-parser.js +28 -0
- package/dist/subtitles/srt-parser.js.map +1 -0
- package/dist/subtitles/srt-writer.d.ts +4 -0
- package/dist/subtitles/srt-writer.d.ts.map +1 -0
- package/dist/subtitles/srt-writer.js +28 -0
- package/dist/subtitles/srt-writer.js.map +1 -0
- package/dist/subtitles/subtitle-generator.d.ts +9 -0
- package/dist/subtitles/subtitle-generator.d.ts.map +1 -0
- package/dist/subtitles/subtitle-generator.js +30 -0
- package/dist/subtitles/subtitle-generator.js.map +1 -0
- package/dist/subtitles/vtt-writer.d.ts +4 -0
- package/dist/subtitles/vtt-writer.d.ts.map +1 -0
- package/dist/subtitles/vtt-writer.js +28 -0
- package/dist/subtitles/vtt-writer.js.map +1 -0
- package/dist/types/render.d.ts +41 -0
- package/dist/types/render.d.ts.map +1 -0
- package/dist/types/render.js +17 -0
- package/dist/types/render.js.map +1 -0
- package/dist/types/speed.d.ts +54 -0
- package/dist/types/speed.d.ts.map +1 -0
- package/dist/types/speed.js +2 -0
- package/dist/types/speed.js.map +1 -0
- package/dist/types/subtitle.d.ts +31 -0
- package/dist/types/subtitle.d.ts.map +1 -0
- package/dist/types/subtitle.js +2 -0
- package/dist/types/subtitle.js.map +1 -0
- package/dist/types/trace.d.ts +103 -0
- package/dist/types/trace.d.ts.map +1 -0
- package/dist/types/trace.js +4 -0
- package/dist/types/trace.js.map +1 -0
- package/dist/types/voiceover.d.ts +42 -0
- package/dist/types/voiceover.d.ts.map +1 -0
- package/dist/types/voiceover.js +2 -0
- package/dist/types/voiceover.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +7 -0
- package/dist/utils/ffmpeg.d.ts.map +1 -0
- package/dist/utils/ffmpeg.js +24 -0
- package/dist/utils/ffmpeg.js.map +1 -0
- package/dist/voiceover/providers/elevenlabs.d.ts +12 -0
- package/dist/voiceover/providers/elevenlabs.d.ts.map +1 -0
- package/dist/voiceover/providers/elevenlabs.js +55 -0
- package/dist/voiceover/providers/elevenlabs.js.map +1 -0
- package/dist/voiceover/providers/openai.d.ts +14 -0
- package/dist/voiceover/providers/openai.d.ts.map +1 -0
- package/dist/voiceover/providers/openai.js +53 -0
- package/dist/voiceover/providers/openai.js.map +1 -0
- package/dist/voiceover/voiceover-processor.d.ts +9 -0
- package/dist/voiceover/voiceover-processor.d.ts.map +1 -0
- package/dist/voiceover/voiceover-processor.js +88 -0
- package/dist/voiceover/voiceover-processor.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/pipeline/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { TraceAction } from '../types/trace';
|
|
2
|
+
import type { SpeedConfig } from '../types/speed';
|
|
3
|
+
import type { SubtitleOptions } from '../types/subtitle';
|
|
4
|
+
import type { TtsProvider } from '../types/voiceover';
|
|
5
|
+
import type { RenderConfig } from '../types/render';
|
|
6
|
+
import type { StageDescriptor, AutoZoomConfig } from './stages';
|
|
7
|
+
/**
|
|
8
|
+
* Immutable, fluent pipeline builder.
|
|
9
|
+
*
|
|
10
|
+
* Each method returns a new Pipeline with the stage appended.
|
|
11
|
+
* Nothing executes until a terminal operation (.toFile(), .toBuffer()) is called.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* await Recast
|
|
16
|
+
* .from('./test-results/')
|
|
17
|
+
* .parse()
|
|
18
|
+
* .hideSteps(s => s.keyword === 'Given')
|
|
19
|
+
* .speedUp({ duringIdle: 4.0 })
|
|
20
|
+
* .subtitles(s => s.docString ?? s.text)
|
|
21
|
+
* .voiceover(OpenAIProvider({ voice: 'nova' }))
|
|
22
|
+
* .render({ format: 'mp4' })
|
|
23
|
+
* .toFile('demo.mp4')
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class Pipeline {
|
|
27
|
+
private readonly source;
|
|
28
|
+
private readonly stages;
|
|
29
|
+
private constructor();
|
|
30
|
+
/** Create a new pipeline from a trace directory or zip file path */
|
|
31
|
+
static from(source: string): Pipeline;
|
|
32
|
+
/** Parse the Playwright trace into structured data */
|
|
33
|
+
parse(): Pipeline;
|
|
34
|
+
/** Filter out steps matching the predicate (they won't appear in the output video) */
|
|
35
|
+
hideSteps(predicate: (action: TraceAction) => boolean): Pipeline;
|
|
36
|
+
/** Adjust video speed based on trace activity (network, user actions, idle) */
|
|
37
|
+
speedUp(config: SpeedConfig): Pipeline;
|
|
38
|
+
/** Generate subtitles from step text. The textFn extracts display text from each action. */
|
|
39
|
+
subtitles(textFn: (action: TraceAction) => string | undefined, options?: SubtitleOptions): Pipeline;
|
|
40
|
+
/** Use an existing SRT file as subtitle source (bypasses trace-based subtitle generation) */
|
|
41
|
+
subtitlesFromSrt(srtPath: string): Pipeline;
|
|
42
|
+
/**
|
|
43
|
+
* Generate subtitles directly from trace data (BDD step titles).
|
|
44
|
+
* Extracts step text from parsed trace actions without requiring an external SRT file.
|
|
45
|
+
* Uses action titles, BDD `text` fields, or falls back to the action `title` property.
|
|
46
|
+
*/
|
|
47
|
+
subtitlesFromTrace(options?: SubtitleOptions): Pipeline;
|
|
48
|
+
/**
|
|
49
|
+
* Auto-zoom based on trace action coordinates.
|
|
50
|
+
* Zooms into click/fill targets during user actions, zooms out during idle.
|
|
51
|
+
* No step-level code needed — works purely from trace metadata.
|
|
52
|
+
*/
|
|
53
|
+
autoZoom(config?: AutoZoomConfig): Pipeline;
|
|
54
|
+
/**
|
|
55
|
+
* Enrich subtitles with zoom data from a demo report (locator-based zoom from steps).
|
|
56
|
+
* Each report step may have a `zoom: { x, y, level }` from the `zoom()` helper.
|
|
57
|
+
*/
|
|
58
|
+
enrichZoomFromReport(steps: Array<{
|
|
59
|
+
zoom?: {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
level: number;
|
|
63
|
+
} | null;
|
|
64
|
+
}>): Pipeline;
|
|
65
|
+
/** Generate voiceover audio from subtitles using a TTS provider */
|
|
66
|
+
voiceover(provider: TtsProvider): Pipeline;
|
|
67
|
+
/** Configure video rendering options */
|
|
68
|
+
render(config?: RenderConfig): Pipeline;
|
|
69
|
+
/** Terminal: execute the pipeline and write the result to a file */
|
|
70
|
+
toFile(outputPath: string): Promise<void>;
|
|
71
|
+
/** Terminal: execute the pipeline and return the result as a buffer */
|
|
72
|
+
toBuffer(): Promise<Buffer>;
|
|
73
|
+
/** Get the list of stages (for testing/debugging) */
|
|
74
|
+
getStages(): readonly StageDescriptor[];
|
|
75
|
+
/** Get the trace source path */
|
|
76
|
+
getSource(): string;
|
|
77
|
+
private addStage;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAG/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,OAAO;IAKP,oEAAoE;IACpE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAIrC,sDAAsD;IACtD,KAAK,IAAI,QAAQ;IAIjB,sFAAsF;IACtF,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,GAAG,QAAQ;IAIhE,+EAA+E;IAC/E,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ;IAItC,4FAA4F;IAC5F,SAAS,CACP,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,EACnD,OAAO,CAAC,EAAE,eAAe,GACxB,QAAQ;IAIX,6FAA6F;IAC7F,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ;IAI3C;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ;IAIvD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,GAAE,cAAmB,GAAG,QAAQ;IAI/C;;;OAGG;IACH,oBAAoB,CAClB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC,GACtE,QAAQ;IAIX,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ;IAI1C,wCAAwC;IACxC,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,QAAQ;IAI3C,oEAAoE;IAC9D,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,uEAAuE;IACjE,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAKjC,qDAAqD;IACrD,SAAS,IAAI,SAAS,eAAe,EAAE;IAIvC,gCAAgC;IAChC,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { PipelineExecutor } from './executor';
|
|
2
|
+
/**
|
|
3
|
+
* Immutable, fluent pipeline builder.
|
|
4
|
+
*
|
|
5
|
+
* Each method returns a new Pipeline with the stage appended.
|
|
6
|
+
* Nothing executes until a terminal operation (.toFile(), .toBuffer()) is called.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* await Recast
|
|
11
|
+
* .from('./test-results/')
|
|
12
|
+
* .parse()
|
|
13
|
+
* .hideSteps(s => s.keyword === 'Given')
|
|
14
|
+
* .speedUp({ duringIdle: 4.0 })
|
|
15
|
+
* .subtitles(s => s.docString ?? s.text)
|
|
16
|
+
* .voiceover(OpenAIProvider({ voice: 'nova' }))
|
|
17
|
+
* .render({ format: 'mp4' })
|
|
18
|
+
* .toFile('demo.mp4')
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class Pipeline {
|
|
22
|
+
source;
|
|
23
|
+
stages;
|
|
24
|
+
constructor(source, stages) {
|
|
25
|
+
this.source = source;
|
|
26
|
+
this.stages = stages;
|
|
27
|
+
}
|
|
28
|
+
/** Create a new pipeline from a trace directory or zip file path */
|
|
29
|
+
static from(source) {
|
|
30
|
+
return new Pipeline(source, []);
|
|
31
|
+
}
|
|
32
|
+
/** Parse the Playwright trace into structured data */
|
|
33
|
+
parse() {
|
|
34
|
+
return this.addStage({ type: 'parse' });
|
|
35
|
+
}
|
|
36
|
+
/** Filter out steps matching the predicate (they won't appear in the output video) */
|
|
37
|
+
hideSteps(predicate) {
|
|
38
|
+
return this.addStage({ type: 'hideSteps', predicate });
|
|
39
|
+
}
|
|
40
|
+
/** Adjust video speed based on trace activity (network, user actions, idle) */
|
|
41
|
+
speedUp(config) {
|
|
42
|
+
return this.addStage({ type: 'speedUp', config });
|
|
43
|
+
}
|
|
44
|
+
/** Generate subtitles from step text. The textFn extracts display text from each action. */
|
|
45
|
+
subtitles(textFn, options) {
|
|
46
|
+
return this.addStage({ type: 'subtitles', textFn, options });
|
|
47
|
+
}
|
|
48
|
+
/** Use an existing SRT file as subtitle source (bypasses trace-based subtitle generation) */
|
|
49
|
+
subtitlesFromSrt(srtPath) {
|
|
50
|
+
return this.addStage({ type: 'subtitlesFromSrt', srtPath });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Generate subtitles directly from trace data (BDD step titles).
|
|
54
|
+
* Extracts step text from parsed trace actions without requiring an external SRT file.
|
|
55
|
+
* Uses action titles, BDD `text` fields, or falls back to the action `title` property.
|
|
56
|
+
*/
|
|
57
|
+
subtitlesFromTrace(options) {
|
|
58
|
+
return this.addStage({ type: 'subtitlesFromTrace', options });
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Auto-zoom based on trace action coordinates.
|
|
62
|
+
* Zooms into click/fill targets during user actions, zooms out during idle.
|
|
63
|
+
* No step-level code needed — works purely from trace metadata.
|
|
64
|
+
*/
|
|
65
|
+
autoZoom(config = {}) {
|
|
66
|
+
return this.addStage({ type: 'autoZoom', config });
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Enrich subtitles with zoom data from a demo report (locator-based zoom from steps).
|
|
70
|
+
* Each report step may have a `zoom: { x, y, level }` from the `zoom()` helper.
|
|
71
|
+
*/
|
|
72
|
+
enrichZoomFromReport(steps) {
|
|
73
|
+
return this.addStage({ type: 'enrichZoomFromReport', steps });
|
|
74
|
+
}
|
|
75
|
+
/** Generate voiceover audio from subtitles using a TTS provider */
|
|
76
|
+
voiceover(provider) {
|
|
77
|
+
return this.addStage({ type: 'voiceover', provider });
|
|
78
|
+
}
|
|
79
|
+
/** Configure video rendering options */
|
|
80
|
+
render(config = {}) {
|
|
81
|
+
return this.addStage({ type: 'render', config });
|
|
82
|
+
}
|
|
83
|
+
/** Terminal: execute the pipeline and write the result to a file */
|
|
84
|
+
async toFile(outputPath) {
|
|
85
|
+
const executor = new PipelineExecutor(this.source, this.stages);
|
|
86
|
+
await executor.execute(outputPath);
|
|
87
|
+
}
|
|
88
|
+
/** Terminal: execute the pipeline and return the result as a buffer */
|
|
89
|
+
async toBuffer() {
|
|
90
|
+
const executor = new PipelineExecutor(this.source, this.stages);
|
|
91
|
+
return executor.executeToBuffer();
|
|
92
|
+
}
|
|
93
|
+
/** Get the list of stages (for testing/debugging) */
|
|
94
|
+
getStages() {
|
|
95
|
+
return this.stages;
|
|
96
|
+
}
|
|
97
|
+
/** Get the trace source path */
|
|
98
|
+
getSource() {
|
|
99
|
+
return this.source;
|
|
100
|
+
}
|
|
101
|
+
addStage(stage) {
|
|
102
|
+
return new Pipeline(this.source, [...this.stages, stage]);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { TraceAction } from '../types/trace';
|
|
2
|
+
import type { SpeedConfig } from '../types/speed';
|
|
3
|
+
import type { SubtitleOptions } from '../types/subtitle';
|
|
4
|
+
import type { TtsProvider } from '../types/voiceover';
|
|
5
|
+
import type { RenderConfig } from '../types/render';
|
|
6
|
+
export type StageDescriptor = {
|
|
7
|
+
type: 'parse';
|
|
8
|
+
} | {
|
|
9
|
+
type: 'hideSteps';
|
|
10
|
+
predicate: (action: TraceAction) => boolean;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'speedUp';
|
|
13
|
+
config: SpeedConfig;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'subtitles';
|
|
16
|
+
textFn: (action: TraceAction) => string | undefined;
|
|
17
|
+
options?: SubtitleOptions;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'subtitlesFromSrt';
|
|
20
|
+
srtPath: string;
|
|
21
|
+
} | {
|
|
22
|
+
type: 'subtitlesFromTrace';
|
|
23
|
+
options?: SubtitleOptions;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'autoZoom';
|
|
26
|
+
config: AutoZoomConfig;
|
|
27
|
+
} | {
|
|
28
|
+
type: 'enrichZoomFromReport';
|
|
29
|
+
steps: Array<{
|
|
30
|
+
zoom?: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
level: number;
|
|
34
|
+
} | null;
|
|
35
|
+
}>;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'voiceover';
|
|
38
|
+
provider: TtsProvider;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'render';
|
|
41
|
+
config: RenderConfig;
|
|
42
|
+
};
|
|
43
|
+
/** Auto-zoom configuration */
|
|
44
|
+
export interface AutoZoomConfig {
|
|
45
|
+
actionLevel?: number;
|
|
46
|
+
idleLevel?: number;
|
|
47
|
+
followCursor?: boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=stages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../../src/pipeline/stages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACxC;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAA;IACnD,OAAO,CAAC,EAAE,eAAe,CAAA;CAC1B,GACD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAA;AAE5C,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stages.js","sourceRoot":"","sources":["../../src/pipeline/stages.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RenderConfig } from '../types/render';
|
|
2
|
+
import type { SubtitleEntry } from '../types/subtitle';
|
|
3
|
+
import type { ParsedTrace } from '../types/trace';
|
|
4
|
+
/**
|
|
5
|
+
* Trace data the renderer needs. Extends the base ParsedTrace with optional
|
|
6
|
+
* subtitle, voiceover, and source-video fields. The renderer gracefully
|
|
7
|
+
* handles any combination — callers do not need to provide every field.
|
|
8
|
+
*/
|
|
9
|
+
export interface RenderableTrace extends ParsedTrace {
|
|
10
|
+
sourceVideoPath?: string;
|
|
11
|
+
subtitles?: SubtitleEntry[];
|
|
12
|
+
voiceover?: {
|
|
13
|
+
audioTrackPath: string;
|
|
14
|
+
entries: unknown[];
|
|
15
|
+
totalDurationMs: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Render final video from trace data.
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderVideo(trace: RenderableTrace, config: RenderConfig, outputPath: string, tmpDir: string): void;
|
|
22
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AA2CjD;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAA;CACpF;AA2FD;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,IAAI,CAgFN"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { execFileSync } from 'node:child_process';
|
|
4
|
+
import { resolveResolution } from '../types/render';
|
|
5
|
+
import { writeSrt } from '../subtitles/srt-writer';
|
|
6
|
+
/**
|
|
7
|
+
* Detect blank/white frames at the start of a video and return the timestamp
|
|
8
|
+
* of the first non-blank frame. Blank frames are identified by file size —
|
|
9
|
+
* a solid-color frame compresses to a very small PNG.
|
|
10
|
+
*
|
|
11
|
+
* @returns Seconds to skip at the start, or 0 if no blank frames.
|
|
12
|
+
*/
|
|
13
|
+
function detectBlankLeadIn(videoPath, tmpDir) {
|
|
14
|
+
const probeStep = 0.1; // seconds
|
|
15
|
+
const maxProbe = 3.0; // don't look beyond 3 seconds
|
|
16
|
+
const blankThreshold = 15_000; // bytes — blank 1920x1080 PNG is ~8-10KB
|
|
17
|
+
let lastBlankTime = -1;
|
|
18
|
+
for (let t = 0; t <= maxProbe; t += probeStep) {
|
|
19
|
+
const framePath = path.join(tmpDir, `blank-probe-${t.toFixed(1)}.png`);
|
|
20
|
+
try {
|
|
21
|
+
execFileSync('ffmpeg', [
|
|
22
|
+
'-y', '-ss', String(t), '-i', videoPath,
|
|
23
|
+
'-frames:v', '1', framePath,
|
|
24
|
+
], { stdio: 'pipe' });
|
|
25
|
+
const size = fs.statSync(framePath).size;
|
|
26
|
+
fs.unlinkSync(framePath);
|
|
27
|
+
if (size <= blankThreshold) {
|
|
28
|
+
lastBlankTime = t;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// First non-blank frame — trim up to this point
|
|
32
|
+
return lastBlankTime >= 0 ? t : 0;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// All probed frames were blank — trim the whole probed range
|
|
40
|
+
return lastBlankTime >= 0 ? lastBlankTime + probeStep : 0;
|
|
41
|
+
}
|
|
42
|
+
function ffmpeg(args) {
|
|
43
|
+
execFileSync('ffmpeg', args, { stdio: 'pipe' });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Render with zoom by splitting video into segments:
|
|
47
|
+
* - Non-zoomed segments pass through at full resolution
|
|
48
|
+
* - Zoomed segments get crop + scale to zoom into the target
|
|
49
|
+
*
|
|
50
|
+
* Then all segments are concatenated back together.
|
|
51
|
+
*/
|
|
52
|
+
function renderWithZoom(sourceVideo, subtitles, width, height, tmpDir) {
|
|
53
|
+
const segments = [];
|
|
54
|
+
// Get video duration
|
|
55
|
+
const durationStr = execFileSync('ffprobe', [
|
|
56
|
+
'-v', 'quiet', '-show_entries', 'format=duration', '-of', 'csv=p=0', sourceVideo,
|
|
57
|
+
]).toString().trim();
|
|
58
|
+
const videoDuration = Number(durationStr);
|
|
59
|
+
const zoomSubs = subtitles.filter((s) => s.zoom && s.zoom.level > 1.0);
|
|
60
|
+
let cursor = 0;
|
|
61
|
+
for (const sub of zoomSubs) {
|
|
62
|
+
const startSec = sub.startMs / 1000;
|
|
63
|
+
const endSec = sub.endMs / 1000;
|
|
64
|
+
// Gap before this zoom
|
|
65
|
+
if (startSec > cursor + 0.1) {
|
|
66
|
+
segments.push({ startSec: cursor, endSec: startSec });
|
|
67
|
+
}
|
|
68
|
+
// Zoomed segment
|
|
69
|
+
segments.push({ startSec, endSec, zoom: sub.zoom });
|
|
70
|
+
cursor = endSec;
|
|
71
|
+
}
|
|
72
|
+
// Remaining after last zoom
|
|
73
|
+
if (cursor < videoDuration - 0.1) {
|
|
74
|
+
segments.push({ startSec: cursor, endSec: videoDuration });
|
|
75
|
+
}
|
|
76
|
+
if (segments.length === 0) {
|
|
77
|
+
return sourceVideo; // No zoom needed
|
|
78
|
+
}
|
|
79
|
+
// Render each segment
|
|
80
|
+
const segmentPaths = [];
|
|
81
|
+
for (let i = 0; i < segments.length; i++) {
|
|
82
|
+
const seg = segments[i];
|
|
83
|
+
const segPath = path.join(tmpDir, `zoom-seg-${i}.mp4`);
|
|
84
|
+
segmentPaths.push(segPath);
|
|
85
|
+
const args = ['-y', '-i', sourceVideo, '-ss', String(seg.startSec), '-to', String(seg.endSec)];
|
|
86
|
+
if (seg.zoom) {
|
|
87
|
+
const z = seg.zoom;
|
|
88
|
+
const cropW = Math.round(width / z.level);
|
|
89
|
+
const cropH = Math.round(height / z.level);
|
|
90
|
+
const cx = Math.round(z.x * width);
|
|
91
|
+
const cy = Math.round(z.y * height);
|
|
92
|
+
const cropX = Math.max(0, Math.min(cx - cropW / 2, width - cropW));
|
|
93
|
+
const cropY = Math.max(0, Math.min(cy - cropH / 2, height - cropH));
|
|
94
|
+
args.push('-vf', `crop=${cropW}:${cropH}:${Math.round(cropX)}:${Math.round(cropY)},scale=${width}:${height}`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
args.push('-vf', `scale=${width}:${height}`);
|
|
98
|
+
}
|
|
99
|
+
args.push('-c:v', 'libx264', '-preset', 'fast', '-crf', '18', '-an', segPath);
|
|
100
|
+
ffmpeg(args);
|
|
101
|
+
}
|
|
102
|
+
// Concatenate segments
|
|
103
|
+
const concatFile = path.join(tmpDir, 'zoom-concat.txt');
|
|
104
|
+
fs.writeFileSync(concatFile, segmentPaths.map((p) => `file '${p}'`).join('\n'));
|
|
105
|
+
const concatOutput = path.join(tmpDir, 'zoom-combined.mp4');
|
|
106
|
+
ffmpeg(['-y', '-f', 'concat', '-safe', '0', '-i', concatFile, '-c', 'copy', concatOutput]);
|
|
107
|
+
return concatOutput;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Render final video from trace data.
|
|
111
|
+
*/
|
|
112
|
+
export function renderVideo(trace, config, outputPath, tmpDir) {
|
|
113
|
+
const sourceVideo = trace.sourceVideoPath;
|
|
114
|
+
if (!sourceVideo || !fs.existsSync(sourceVideo)) {
|
|
115
|
+
throw new Error(`Source video not found: ${sourceVideo}`);
|
|
116
|
+
}
|
|
117
|
+
const format = config.format ?? 'mp4';
|
|
118
|
+
const resolution = resolveResolution(config.resolution);
|
|
119
|
+
const crf = config.crf ?? 23;
|
|
120
|
+
const hasZoom = trace.subtitles?.some((s) => s.zoom && s.zoom.level > 1.0) ?? false;
|
|
121
|
+
const hasAudio = trace.voiceover?.audioTrackPath &&
|
|
122
|
+
fs.existsSync(trace.voiceover.audioTrackPath);
|
|
123
|
+
// Phase 1: Apply zoom if needed (segment-based crop+scale+concat)
|
|
124
|
+
let videoInput = sourceVideo;
|
|
125
|
+
if (hasZoom && trace.subtitles) {
|
|
126
|
+
videoInput = renderWithZoom(sourceVideo, trace.subtitles, resolution.width, resolution.height, tmpDir);
|
|
127
|
+
}
|
|
128
|
+
// Phase 1.5: Trim blank frames at the start of the video.
|
|
129
|
+
// Must re-encode because webm/vp8 stream-copy seeks to nearest keyframe.
|
|
130
|
+
const blankLeadIn = detectBlankLeadIn(videoInput, tmpDir);
|
|
131
|
+
if (blankLeadIn > 0) {
|
|
132
|
+
const trimmedPath = path.join(tmpDir, 'trimmed-input.mp4');
|
|
133
|
+
ffmpeg([
|
|
134
|
+
'-y', '-ss', String(blankLeadIn), '-i', videoInput,
|
|
135
|
+
'-c:v', 'libx264', '-preset', 'ultrafast', '-crf', '18',
|
|
136
|
+
trimmedPath,
|
|
137
|
+
]);
|
|
138
|
+
videoInput = trimmedPath;
|
|
139
|
+
}
|
|
140
|
+
// Phase 2: Final encode (audio merge + subtitle burn + format)
|
|
141
|
+
const ffmpegArgs = ['-y', '-i', videoInput];
|
|
142
|
+
if (hasAudio && trace.voiceover) {
|
|
143
|
+
ffmpegArgs.push('-i', trace.voiceover.audioTrackPath);
|
|
144
|
+
}
|
|
145
|
+
const vFilters = [];
|
|
146
|
+
// Scale (only if no zoom was applied — zoom already scaled)
|
|
147
|
+
if (!hasZoom) {
|
|
148
|
+
vFilters.push(`scale=${resolution.width}:${resolution.height}`);
|
|
149
|
+
}
|
|
150
|
+
if (config.burnSubtitles && trace.subtitles && trace.subtitles.length > 0) {
|
|
151
|
+
const srtPath = path.join(tmpDir, 'burn-subtitles.srt');
|
|
152
|
+
fs.writeFileSync(srtPath, writeSrt(trace.subtitles));
|
|
153
|
+
const escapedPath = srtPath.replace(/'/g, "'\\''").replace(/:/g, '\\:');
|
|
154
|
+
vFilters.push(`subtitles='${escapedPath}'`);
|
|
155
|
+
}
|
|
156
|
+
if (vFilters.length > 0) {
|
|
157
|
+
ffmpegArgs.push('-vf', vFilters.join(','));
|
|
158
|
+
}
|
|
159
|
+
if (format === 'mp4') {
|
|
160
|
+
ffmpegArgs.push('-c:v', config.codec ?? 'libx264', '-preset', 'fast', '-crf', String(crf));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
ffmpegArgs.push('-c:v', config.codec ?? 'libvpx-vp9', '-crf', String(crf), '-b:v', '0');
|
|
164
|
+
}
|
|
165
|
+
if (hasAudio) {
|
|
166
|
+
ffmpegArgs.push('-c:a', 'aac', '-b:a', '128k', '-shortest');
|
|
167
|
+
}
|
|
168
|
+
if (config.fps) {
|
|
169
|
+
ffmpegArgs.push('-r', String(config.fps));
|
|
170
|
+
}
|
|
171
|
+
ffmpegArgs.push(outputPath);
|
|
172
|
+
ffmpeg(ffmpegArgs);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MonotonicMs, TraceAction, TraceResource } from '../types/trace';
|
|
2
|
+
import type { ActivityType } from '../types/speed';
|
|
3
|
+
/**
|
|
4
|
+
* Classify what's happening at a given point in time.
|
|
5
|
+
* Priority: user-action > navigation > network-wait > idle
|
|
6
|
+
*/
|
|
7
|
+
export declare function classifyTimepoint(time: MonotonicMs, actions: TraceAction[], resources: TraceResource[]): ActivityType;
|
|
8
|
+
//# sourceMappingURL=classifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifiers.d.ts","sourceRoot":"","sources":["../../src/speed/classifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAgBlD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,WAAW,EAAE,EACtB,SAAS,EAAE,aAAa,EAAE,GACzB,YAAY,CAmBd"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const USER_ACTION_METHODS = new Set([
|
|
2
|
+
'click', 'dblclick', 'fill', 'type', 'press', 'check', 'uncheck',
|
|
3
|
+
'selectOption', 'setInputFiles', 'hover', 'tap', 'dragTo',
|
|
4
|
+
]);
|
|
5
|
+
const NAVIGATION_METHODS = new Set([
|
|
6
|
+
'goto', 'goBack', 'goForward', 'reload',
|
|
7
|
+
'waitForNavigation', 'waitForURL', 'waitForLoadState',
|
|
8
|
+
]);
|
|
9
|
+
function isActiveAt(start, end, time) {
|
|
10
|
+
return time >= start && time <= end;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Classify what's happening at a given point in time.
|
|
14
|
+
* Priority: user-action > navigation > network-wait > idle
|
|
15
|
+
*/
|
|
16
|
+
export function classifyTimepoint(time, actions, resources) {
|
|
17
|
+
// Check for user actions (highest priority)
|
|
18
|
+
for (const action of actions) {
|
|
19
|
+
if (!isActiveAt(action.startTime, action.endTime, time))
|
|
20
|
+
continue;
|
|
21
|
+
if (USER_ACTION_METHODS.has(action.method))
|
|
22
|
+
return 'user-action';
|
|
23
|
+
}
|
|
24
|
+
// Check for navigation
|
|
25
|
+
for (const action of actions) {
|
|
26
|
+
if (!isActiveAt(action.startTime, action.endTime, time))
|
|
27
|
+
continue;
|
|
28
|
+
if (NAVIGATION_METHODS.has(action.method))
|
|
29
|
+
return 'navigation';
|
|
30
|
+
}
|
|
31
|
+
// Check for network activity
|
|
32
|
+
for (const resource of resources) {
|
|
33
|
+
if (isActiveAt(resource.startTime, resource.endTime, time))
|
|
34
|
+
return 'network-wait';
|
|
35
|
+
}
|
|
36
|
+
return 'idle';
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=classifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifiers.js","sourceRoot":"","sources":["../../src/speed/classifiers.ts"],"names":[],"mappings":"AAGA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS;IAChE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;CAC1D,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ;IACvC,mBAAmB,EAAE,YAAY,EAAE,kBAAkB;CACtD,CAAC,CAAA;AAEF,SAAS,UAAU,CAAC,KAAkB,EAAE,GAAgB,EAAE,IAAiB;IACzE,OAAQ,IAAe,IAAK,KAAgB,IAAK,IAAe,IAAK,GAAc,CAAA;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAiB,EACjB,OAAsB,EACtB,SAA0B;IAE1B,4CAA4C;IAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,SAAQ;QACjE,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,aAAa,CAAA;IAClE,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,SAAQ;QACjE,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,YAAY,CAAA;IAChE,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,OAAO,cAAc,CAAA;IACnF,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FilteredTrace } from '../types/trace';
|
|
2
|
+
import type { SpeedConfig, SpeedMappedTrace } from '../types/speed';
|
|
3
|
+
/**
|
|
4
|
+
* Process a trace into speed segments based on activity classification.
|
|
5
|
+
* Classifies each time interval, merges adjacent same-speed segments,
|
|
6
|
+
* and applies minSegmentDuration filtering.
|
|
7
|
+
*/
|
|
8
|
+
export declare function processSpeed(trace: FilteredTrace, config: SpeedConfig): SpeedMappedTrace;
|
|
9
|
+
//# sourceMappingURL=speed-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speed-processor.d.ts","sourceRoot":"","sources":["../../src/speed/speed-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAgB,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AA2BjF;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,WAAW,GAClB,gBAAgB,CAmFlB"}
|