UNPKG

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