UNPKG

one

Version:

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

115 lines (113 loc) 5.79 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); var import_core = require("@babel/core"); var import_vitest = require("vitest"); var import_one_router_metro = __toESM(require("./one-router-metro.native.js"), 1); var baseOptions = { ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY: "./app", ONE_ROUTER_ROOT_FOLDER_NAME: "app", ONE_ROUTER_REQUIRE_CONTEXT_REGEX_STRING: "\\./app/.*" }; function transform(code, filename) { var opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; var _ref; var result = (0, import_core.transformSync)(code, { filename, plugins: [[import_one_router_metro.default, { ...baseOptions, ...opts }]], parserOpts: { sourceType: "module" } }); return (_ref = result === null || result === void 0 ? void 0 : result.code) !== null && _ref !== void 0 ? _ref : ""; } (0, import_vitest.describe)("one-router-metro babel plugin", function () { (0, import_vitest.describe)("setup file import ordering", function () { var metroEntry = ['import { createApp } from "one";', 'import { ctx } from "./metro-entry-ctx.js";', "", "createApp({ routes: {} });"].join("\n"); (0, import_vitest.it)("injects setup import AFTER all existing imports in metro-entry.js", function () { var code = transform(metroEntry, "/project/node_modules/one/metro-entry.js", { ONE_SETUP_FILE_NATIVE: "./setup-native.ts" }); (0, import_vitest.expect)(code).toContain("./setup-native.ts"); var createAppPos = code.indexOf('from "one"'); var ctxPos = code.indexOf("metro-entry-ctx"); var setupPos = code.indexOf("./setup-native.ts"); (0, import_vitest.expect)(createAppPos).toBeGreaterThan(-1); (0, import_vitest.expect)(ctxPos).toBeGreaterThan(-1); (0, import_vitest.expect)(setupPos).toBeGreaterThan(-1); (0, import_vitest.expect)(setupPos).toBeGreaterThan(createAppPos); (0, import_vitest.expect)(setupPos).toBeGreaterThan(ctxPos); }); (0, import_vitest.it)("injects setup import BEFORE non-import code", function () { var code = transform(metroEntry, "/project/node_modules/one/metro-entry.js", { ONE_SETUP_FILE_NATIVE: "./setup-native.ts" }); var setupPos = code.indexOf("./setup-native.ts"); var createAppCallPos = code.indexOf("createApp({"); (0, import_vitest.expect)(setupPos).toBeGreaterThan(-1); (0, import_vitest.expect)(createAppCallPos).toBeGreaterThan(-1); (0, import_vitest.expect)(setupPos).toBeLessThan(createAppCallPos); }); (0, import_vitest.it)("does not inject setup import when no setup file configured", function () { var code = transform(metroEntry, "/project/node_modules/one/metro-entry.js"); (0, import_vitest.expect)(code).not.toContain("setup"); }); (0, import_vitest.it)("does not inject setup import for non-metro-entry files", function () { var code = transform(metroEntry, "/project/src/app.js", { ONE_SETUP_FILE_NATIVE: "./setup-native.ts" }); (0, import_vitest.expect)(code).not.toContain("setup-native"); }); (0, import_vitest.it)("handles file with no imports by prepending setup", function () { var noImports = "const x = 1;\nconsole.log(x);"; var code = transform(noImports, "/project/node_modules/one/metro-entry.js", { ONE_SETUP_FILE_NATIVE: "./setup-native.ts" }); (0, import_vitest.expect)(code).toContain("./setup-native.ts"); var setupPos = code.indexOf("./setup-native.ts"); var constPos = code.indexOf("const x"); (0, import_vitest.expect)(setupPos).toBeLessThan(constPos); }); }); (0, import_vitest.describe)("env replacements", function () { (0, import_vitest.it)("replaces process.env.ONE_ROUTER_ROOT_FOLDER_NAME", function () { var code = transform("const x = process.env.ONE_ROUTER_ROOT_FOLDER_NAME;", "/project/src/app.js"); (0, import_vitest.expect)(code).toContain('"app"'); (0, import_vitest.expect)(code).not.toContain("process.env"); }); (0, import_vitest.it)("replaces process.env.ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY", function () { var code = transform("const x = process.env.ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY;", "/project/src/app.js"); (0, import_vitest.expect)(code).toContain('"./app"'); }); (0, import_vitest.it)("replaces process.env.ONE_ROUTER_REQUIRE_CONTEXT_REGEX", function () { var code = transform("const x = process.env.ONE_ROUTER_REQUIRE_CONTEXT_REGEX;", "/project/src/app.js"); (0, import_vitest.expect)(code).toMatch(/\/\\\.\/app\/\.\*\//); }); }); }); //# sourceMappingURL=one-router-metro.test.native.js.map