-
-
Notifications
You must be signed in to change notification settings - Fork 185
Expand file tree
/
Copy pathoutput-collector.ts
More file actions
44 lines (40 loc) · 1.42 KB
/
output-collector.ts
File metadata and controls
44 lines (40 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import * as ts from "typescript";
import { intersection, union } from "../utils";
export interface TranspiledFile {
outPath: string;
sourceFiles: ts.SourceFile[];
lua?: string;
luaSourceMap?: string;
declaration?: string;
declarationMap?: string;
/** @internal */
js?: string;
/** @internal */
jsSourceMap?: string;
}
export function createEmitOutputCollector(luaExtension = ".lua") {
const files: TranspiledFile[] = [];
const writeFile: ts.WriteFileCallback = (fileName, data, _bom, _onError, sourceFiles = []) => {
let file = files.find(f => intersection(f.sourceFiles, sourceFiles).length > 0);
if (!file) {
file = { outPath: fileName, sourceFiles: [...sourceFiles] };
files.push(file);
} else {
file.sourceFiles = union(file.sourceFiles, sourceFiles);
}
if (fileName.endsWith(luaExtension)) {
file.lua = data;
} else if (fileName.endsWith(`${luaExtension}.map`)) {
file.luaSourceMap = data;
} else if (fileName.endsWith(".js")) {
file.js = data;
} else if (fileName.endsWith(".js.map")) {
file.jsSourceMap = data;
} else if (fileName.endsWith(".d.ts")) {
file.declaration = data;
} else if (fileName.endsWith(".d.ts.map")) {
file.declarationMap = data;
}
};
return { writeFile, files };
}