UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

153 lines (151 loc) 5.71 kB
import path from "path"; import { describe, expect, it } from "vitest"; import oneBabelPreset, { buildOneBabelPlugins } from "./index.native.js"; function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } var projectRoot = path.resolve(__dirname, "../../"); var fakeApi = function (cwd) { return { cache: function () {}, cwd: function () { return cwd; } }; }; describe("one/babel-preset", function () { it("returns presets and plugins", function () { var result = oneBabelPreset(fakeApi(projectRoot), { projectRoot, // skip the babel-preset-expo lookup so this test runs without the // expo SDK installed in the workspace root includeExpoPreset: false }); expect(result).toHaveProperty("plugins"); expect(Array.isArray(result.plugins)).toBe(true); expect(result.plugins).toHaveLength(6); }); it("orders the plugin chain so server code is removed before router transforms", function () { var { plugins } = oneBabelPreset(fakeApi(projectRoot), { projectRoot, includeExpoPreset: false }); var names = (plugins !== null && plugins !== void 0 ? plugins : []).map(function (p) { return Array.isArray(p) ? p[0] : p; }); expect(names).toEqual(["@vxrn/vite-plugin-metro/babel-plugins/import-meta-env-plugin", "one/babel-plugin-environment-guard", "one/babel-plugin-remove-server-code", "babel-plugin-module-resolver", "one/babel-plugin-one-router-metro", "one/babel-plugin-inline-one-server-url"]); }); it('defaults routerRoot to "app"', function () { var { plugins } = oneBabelPreset(fakeApi(projectRoot), { projectRoot, includeExpoPreset: false }); var removeServer = (plugins !== null && plugins !== void 0 ? plugins : []).find(function (p) { return Array.isArray(p) && p[0] === "one/babel-plugin-remove-server-code"; }); expect(removeServer === null || removeServer === void 0 ? void 0 : removeServer[1].routerRoot).toBe("app"); }); it("threads custom routerRoot through", function () { var { plugins } = oneBabelPreset(fakeApi(projectRoot), { projectRoot, routerRoot: "src/routes", includeExpoPreset: false }); var removeServer = (plugins !== null && plugins !== void 0 ? plugins : []).find(function (p) { return Array.isArray(p) && p[0] === "one/babel-plugin-remove-server-code"; }); expect(removeServer === null || removeServer === void 0 ? void 0 : removeServer[1].routerRoot).toBe("src/routes"); }); it("skips the One plugin chain when the Vite Metro caller already injected it", function () { var result = oneBabelPreset({ cache: function () {}, cwd: function () { return projectRoot; }, caller: function (cb) { return cb({ oneViteMetroBabelConfig: true }); } }, { projectRoot, includeExpoPreset: false }); expect(result.plugins).toEqual([]); }); }); describe("buildOneBabelPlugins", function () { it("produces the canonical One plugin chain (no env plugin)", function () { var plugins = buildOneBabelPlugins({ projectRoot, relativeRouterRoot: "app", ignoredRouteFiles: [], linking: void 0, setupFile: void 0, // skip the import-meta-env plugin so the assertion covers the One-only chain includeImportMetaEnv: false }); expect(plugins).toHaveLength(5); expect(plugins[0]).toBe("one/babel-plugin-environment-guard"); expect(plugins[1]).toEqual(["one/babel-plugin-remove-server-code", { routerRoot: "app" }]); expect(plugins[2]).toMatchObject(["babel-plugin-module-resolver", { alias: {} }]); var oneRouterMetro = plugins[3]; expect(oneRouterMetro[0]).toBe("one/babel-plugin-one-router-metro"); expect(oneRouterMetro[1]).toMatchObject({ ONE_ROUTER_ROOT_FOLDER_NAME: "app", ONE_ROUTER_LINKING_CONFIG: void 0, ONE_SETUP_FILE_NATIVE: void 0 }); expect(_type_of(oneRouterMetro[1].ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY)).toBe("string"); expect(_type_of(oneRouterMetro[1].ONE_ROUTER_REQUIRE_CONTEXT_REGEX_STRING)).toBe("string"); expect(plugins[4]).toBe("one/babel-plugin-inline-one-server-url"); }); it("threads setupFile through as a path relative to the metro entry", function () { var plugins = buildOneBabelPlugins({ projectRoot, relativeRouterRoot: "app", setupFile: "src/setup-native.ts", includeImportMetaEnv: false }); var oneRouterMetro = plugins[3]; expect(oneRouterMetro[1].ONE_SETUP_FILE_NATIVE).toMatch(/setup-native\.ts$/); }); it("passes the linking config through", function () { var linking = { prefixes: ["myapp://"] }; var plugins = buildOneBabelPlugins({ projectRoot, relativeRouterRoot: "app", linking, includeImportMetaEnv: false }); var oneRouterMetro = plugins[3]; expect(oneRouterMetro[1].ONE_ROUTER_LINKING_CONFIG).toBe(linking); }); it("emits forward-slash-only paths for `require.context` + `import` specifiers", function () { var plugins = buildOneBabelPlugins({ projectRoot, relativeRouterRoot: "app", setupFile: "src/setup-native.ts", includeImportMetaEnv: false }); var oneRouterMetro = plugins[3]; var appRoot = oneRouterMetro[1].ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY; var setupNative = oneRouterMetro[1].ONE_SETUP_FILE_NATIVE; expect(appRoot).not.toContain("\\"); expect(setupNative).not.toContain("\\"); }); }); //# sourceMappingURL=index.test.native.js.map