diff --git a/src/__tests__/metro/injection-code.test.ts b/src/__tests__/metro/injection-code.test.ts new file mode 100644 index 00000000..bb57d98a --- /dev/null +++ b/src/__tests__/metro/injection-code.test.ts @@ -0,0 +1,29 @@ +import { Script } from "node:vm"; + +import { getNativeInjectionCode } from "../../metro/injection-code"; + +describe("getNativeInjectionCode", () => { + test("emits code that can execute in script mode", () => { + const inject = jest.fn(); + const requireModule = jest.fn((specifier: string) => { + if (specifier === "react-native-css/native-internal") { + return { StyleCollection: { inject } }; + } + return {}; + }); + const code = getNativeInjectionCode( + ["./styles.css"], + [{ s: [] }], + ).toString(); + + const script = new Script(code); + script.runInNewContext({ require: requireModule }); + + expect(requireModule).toHaveBeenNthCalledWith( + 1, + "react-native-css/native-internal", + ); + expect(requireModule).toHaveBeenNthCalledWith(2, "./styles.css"); + expect(inject).toHaveBeenCalledWith({ s: [] }); + }); +}); diff --git a/src/metro/injection-code.ts b/src/metro/injection-code.ts index 61071c87..ad301727 100644 --- a/src/metro/injection-code.ts +++ b/src/metro/injection-code.ts @@ -21,7 +21,7 @@ export function getNativeInjectionCode( values: unknown[], ) { const importStatements = cssFilePaths - .map((filePath) => `import "${filePath}";`) + .map((filePath) => `require("${filePath}");`) .join("\n"); const contents = values @@ -29,6 +29,6 @@ export function getNativeInjectionCode( .join("\n"); return Buffer.from( - `import { StyleCollection } from "react-native-css/native-internal";\n${importStatements}\n${contents};export {};`, + `const { StyleCollection } = require("react-native-css/native-internal");\n${importStatements}\n${contents}`, ); }