1 | import * as pirates from "pirates";
|
2 |
|
3 | import { transform} from "./index";
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | export function addHook(extension, options, hookOptions) {
|
11 | pirates.addHook(
|
12 | (code, filePath) => {
|
13 | const {code: transformedCode, sourceMap} = transform(code, {
|
14 | ...options,
|
15 | sourceMapOptions: {compiledFilename: filePath},
|
16 | filePath,
|
17 | });
|
18 | const mapBase64 = Buffer.from(JSON.stringify(sourceMap)).toString("base64");
|
19 | const suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`;
|
20 | return `${transformedCode}\n${suffix}`;
|
21 | },
|
22 | {...hookOptions, exts: [extension]},
|
23 | );
|
24 | }
|
25 |
|
26 | export function registerJS(hookOptions) {
|
27 | addHook(".js", {transforms: ["imports", "flow", "jsx"]}, hookOptions);
|
28 | }
|
29 |
|
30 | export function registerJSX(hookOptions) {
|
31 | addHook(".jsx", {transforms: ["imports", "flow", "jsx"]}, hookOptions);
|
32 | }
|
33 |
|
34 | export function registerTS(hookOptions) {
|
35 | addHook(".ts", {transforms: ["imports", "typescript"]}, hookOptions);
|
36 | }
|
37 |
|
38 | export function registerTSX(hookOptions) {
|
39 | addHook(".tsx", {transforms: ["imports", "typescript", "jsx"]}, hookOptions);
|
40 | }
|
41 |
|
42 | export function registerTSLegacyModuleInterop(hookOptions) {
|
43 | addHook(
|
44 | ".ts",
|
45 | {
|
46 | transforms: ["imports", "typescript"],
|
47 | enableLegacyTypeScriptModuleInterop: true,
|
48 | },
|
49 | hookOptions,
|
50 | );
|
51 | }
|
52 |
|
53 | export function registerTSXLegacyModuleInterop(hookOptions) {
|
54 | addHook(
|
55 | ".tsx",
|
56 | {
|
57 | transforms: ["imports", "typescript", "jsx"],
|
58 | enableLegacyTypeScriptModuleInterop: true,
|
59 | },
|
60 | hookOptions,
|
61 | );
|
62 | }
|
63 |
|
64 | export function registerAll(hookOptions) {
|
65 | registerJS(hookOptions);
|
66 | registerJSX(hookOptions);
|
67 | registerTS(hookOptions);
|
68 | registerTSX(hookOptions);
|
69 | }
|