|
4 | 4 | * @module |
5 | 5 | */ |
6 | 6 |
|
| 7 | +import type { BuildOptions } from "esbuild"; |
7 | 8 | import { isEntryFile } from "./babel"; |
8 | 9 | import { RNRBConfig, bundle, escape } from "./bundler"; |
9 | 10 | import { join } from "path"; |
@@ -31,19 +32,25 @@ try { |
31 | 32 | // NOP |
32 | 33 | } |
33 | 34 |
|
34 | | -export const transform = async (args: any /* TODO */) => { |
35 | | - const { filename, src } = args; |
36 | | - const isEntry = isEntryFile(src, filename); |
37 | | - if (isEntry) { |
38 | | - const res = await bundle(filename, metroOptions); |
39 | | - return metroTransformer.transform({ |
40 | | - ...args, |
41 | | - src: |
42 | | - "export default String.raw`" + |
43 | | - escape(res).replace(/\$\{(.*?)\}/g, '\\$\\{$1\\}') + |
44 | | - "`.replace(/\\\\([`${}])/g, '\\$1')", |
45 | | - }); |
46 | | - } |
47 | | - |
48 | | - return metroTransformer.transform(args); |
| 35 | +export const createTransformer = ( |
| 36 | + esbuildOptions: Omit<BuildOptions, "write" | "entryPoints" | "alias"> = {} |
| 37 | +) => { |
| 38 | + return async (args: any /* TODO */) => { |
| 39 | + const { filename, src } = args; |
| 40 | + const isEntry = isEntryFile(src, filename); |
| 41 | + if (isEntry) { |
| 42 | + const res = await bundle(filename, metroOptions, esbuildOptions); |
| 43 | + return metroTransformer.transform({ |
| 44 | + ...args, |
| 45 | + src: |
| 46 | + "export default String.raw`" + |
| 47 | + escape(res).replace(/\$\{(.*?)\}/g, "\\$\\{$1\\}") + |
| 48 | + "`.replace(/\\\\([`${}])/g, '\\$1')", |
| 49 | + }); |
| 50 | + } |
| 51 | + |
| 52 | + return metroTransformer.transform(args); |
| 53 | + }; |
49 | 54 | }; |
| 55 | + |
| 56 | +export const transform = createTransformer(); |
0 commit comments