UNPKG

one

Version:

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

381 lines (379 loc) 17.1 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_fs = __toESM(require("fs"), 1); var import_os = __toESM(require("os"), 1); var import_path = __toESM(require("path"), 1); var import_vitest = require("vitest"); var import_generateBundlerConfig = require("./generateBundlerConfig.native.js"); (0, import_vitest.describe)("generateBundlerConfig", function () { var tmpDir; (0, import_vitest.beforeEach)(function () { tmpDir = import_fs.default.mkdtempSync(import_path.default.join(import_os.default.tmpdir(), "one-gen-bundler-test-")); }); (0, import_vitest.afterEach)(function () { import_fs.default.rmSync(tmpDir, { recursive: true, force: true }); }); (0, import_vitest.it)("writes both files when missing", function () { var { ok, results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); (0, import_vitest.expect)(ok).toBe(true); (0, import_vitest.expect)(results.map(function (r) { return r.action; })).toEqual(["wrote", "wrote"]); var babel = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(babel).toContain(import_generateBundlerConfig.ONE_GENERATED_MARKER); (0, import_vitest.expect)(babel).toContain("require('one/babel-preset')"); (0, import_vitest.expect)(babel).toContain("oneBundlerOptions"); var metro = import_fs.default.readFileSync(import_path.default.join(tmpDir, "metro.config.cjs"), "utf8"); (0, import_vitest.expect)(metro).toContain(import_generateBundlerConfig.ONE_GENERATED_MARKER); (0, import_vitest.expect)(metro).toContain("require('one/metro-config')"); (0, import_vitest.expect)(metro).toContain("withOne"); }); (0, import_vitest.it)("is idempotent on second run", function () { (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); var before = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); var { results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); (0, import_vitest.expect)(results.map(function (r) { return r.action; })).toEqual(["kept", "kept"]); var after = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(after).toBe(before); }); (0, import_vitest.it)("refuses to overwrite a customized file without --force", function () { import_fs.default.writeFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "// hand-written\nmodule.exports = { presets: [] }\n"); var { ok, results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); var babelResult = results.find(function (r) { return r.filePath.endsWith("babel.config.cjs"); }); (0, import_vitest.expect)(babelResult.action).toBe("skipped-customized"); (0, import_vitest.expect)(ok).toBe(true); var after = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(after).toContain("hand-written"); }); (0, import_vitest.it)("overwrites a customized file when --force is set", function () { import_fs.default.writeFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "// hand-written\nmodule.exports = { presets: [] }\n"); var { results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, force: true, quiet: true }); var babelResult = results.find(function (r) { return r.filePath.endsWith("babel.config.cjs"); }); (0, import_vitest.expect)(babelResult.action).toBe("wrote"); var after = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(after).toContain(import_generateBundlerConfig.ONE_GENERATED_MARKER); (0, import_vitest.expect)(after).not.toContain("hand-written"); }); (0, import_vitest.it)("rewrites a stale marked file", function () { import_fs.default.writeFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), `// ${import_generateBundlerConfig.ONE_GENERATED_MARKER} // old content from previous version module.exports = {} `); var { results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); var babelResult = results.find(function (r) { return r.filePath.endsWith("babel.config.cjs"); }); (0, import_vitest.expect)(babelResult.action).toBe("wrote"); var after = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(after).toContain("require('one/babel-preset')"); (0, import_vitest.expect)(after).not.toContain("old content from previous version"); }); (0, import_vitest.describe)("--check mode", function () { (0, import_vitest.it)("exits ok when files exist and match", function () { (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); var { ok, results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, check: true, quiet: true }); (0, import_vitest.expect)(ok).toBe(true); (0, import_vitest.expect)(results.every(function (r) { return r.action === "kept"; })).toBe(true); }); (0, import_vitest.it)("exits not-ok when files are missing", function () { var { ok, results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, check: true, quiet: true }); (0, import_vitest.expect)(ok).toBe(false); (0, import_vitest.expect)(results.every(function (r) { return r.action === "would-write"; })).toBe(true); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "babel.config.cjs"))).toBe(false); }); (0, import_vitest.it)("exits not-ok when a marked file is stale", function () { import_fs.default.writeFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), `// ${import_generateBundlerConfig.ONE_GENERATED_MARKER} module.exports = {} `); import_fs.default.writeFileSync(import_path.default.join(tmpDir, "metro.config.cjs"), `// ${import_generateBundlerConfig.ONE_GENERATED_MARKER} module.exports = {} `); var { ok, results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, check: true, quiet: true }); (0, import_vitest.expect)(ok).toBe(false); (0, import_vitest.expect)(results.every(function (r) { return r.action === "would-overwrite"; })).toBe(true); }); }); (0, import_vitest.describe)("--eject mode", function () { (0, import_vitest.it)("writes files WITHOUT the @one/generated marker", function () { var { results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, eject: true, quiet: true }); (0, import_vitest.expect)(results.map(function (r) { return r.action; })).toEqual(["wrote", "wrote"]); var babel = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(babel).not.toContain(import_generateBundlerConfig.ONE_GENERATED_MARKER); (0, import_vitest.expect)(babel).toContain("you own this file"); (0, import_vitest.expect)(babel).toContain("require('one/babel-preset')"); var metro = import_fs.default.readFileSync(import_path.default.join(tmpDir, "metro.config.cjs"), "utf8"); (0, import_vitest.expect)(metro).not.toContain(import_generateBundlerConfig.ONE_GENERATED_MARKER); (0, import_vitest.expect)(metro).toContain("withOne"); }); (0, import_vitest.it)("subsequent auto-gen run (no --eject) treats ejected files as customized", function () { (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, eject: true, quiet: true }); var before = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); var { results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); (0, import_vitest.expect)(results.every(function (r) { return r.action === "skipped-customized"; })).toBe(true); var after = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); (0, import_vitest.expect)(after).toBe(before); }); }); (0, import_vitest.it)("does not clobber a non-.cjs config in the same family", function () { import_fs.default.writeFileSync(import_path.default.join(tmpDir, "babel.config.js"), "module.exports = { presets: [] }\n"); var { results } = (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true }); var babelResult = results.find(function (r) { return r.filePath.endsWith("babel.config.js") || r.filePath.endsWith("babel.config.cjs"); }); (0, import_vitest.expect)(babelResult.action).toBe("skipped-other-format"); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "babel.config.cjs"))).toBe(false); }); (0, import_vitest.it)("embeds loaded One router/setup options into both config files", function () { (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true, oneOptions: { router: { root: "src/routes", ignoredRouteFiles: ["**/*.native-test.*"], linking: { scheme: "myapp", prefixes: ["https://example.com/app"] } }, setupFile: { native: "src/setup.native.ts" } } }); var babel = import_fs.default.readFileSync(import_path.default.join(tmpDir, "babel.config.cjs"), "utf8"); var metro = import_fs.default.readFileSync(import_path.default.join(tmpDir, "metro.config.cjs"), "utf8"); for (var _i = 0, _iter = [babel, metro]; _i < _iter.length; _i++) { var file = _iter[_i]; (0, import_vitest.expect)(file).toContain('"routerRoot": "src/routes"'); (0, import_vitest.expect)(file).toContain('"ignoredRouteFiles"'); (0, import_vitest.expect)(file).toContain('"**/*.native-test.*"'); (0, import_vitest.expect)(file).toContain('"scheme": "myapp"'); (0, import_vitest.expect)(file).toContain('"native": "src/setup.native.ts"'); } }); (0, import_vitest.it)("refuses to silently drop non-serializable options", function () { (0, import_vitest.expect)(function () { return (0, import_generateBundlerConfig.generateBundlerConfig)({ cwd: tmpDir, quiet: true, oneOptions: { router: { linking: { // the plugin API only accepts serializable router.linking fields filter: function () { return true; } } } } }); }).toThrow(/JSON-serializable/); }); }); (0, import_vitest.describe)("isCiEnvironment", function () { var originalCi = process.env.CI; var originalEasBuild = process.env.EAS_BUILD; (0, import_vitest.afterEach)(function () { if (originalCi === void 0) delete process.env.CI;else process.env.CI = originalCi; if (originalEasBuild === void 0) delete process.env.EAS_BUILD;else process.env.EAS_BUILD = originalEasBuild; }); (0, import_vitest.it)("is true when CI=true", function () { process.env.CI = "true"; delete process.env.EAS_BUILD; (0, import_vitest.expect)((0, import_generateBundlerConfig.isCiEnvironment)()).toBe(true); }); (0, import_vitest.it)("is true when CI=1", function () { process.env.CI = "1"; delete process.env.EAS_BUILD; (0, import_vitest.expect)((0, import_generateBundlerConfig.isCiEnvironment)()).toBe(true); }); (0, import_vitest.it)("is true when EAS_BUILD=true", function () { delete process.env.CI; process.env.EAS_BUILD = "true"; (0, import_vitest.expect)((0, import_generateBundlerConfig.isCiEnvironment)()).toBe(true); }); (0, import_vitest.it)("is false when neither is set", function () { delete process.env.CI; delete process.env.EAS_BUILD; (0, import_vitest.expect)((0, import_generateBundlerConfig.isCiEnvironment)()).toBe(false); }); (0, import_vitest.it)("is false when CI=false or CI=0", function () { delete process.env.EAS_BUILD; process.env.CI = "false"; (0, import_vitest.expect)((0, import_generateBundlerConfig.isCiEnvironment)()).toBe(false); process.env.CI = "0"; (0, import_vitest.expect)((0, import_generateBundlerConfig.isCiEnvironment)()).toBe(false); }); }); (0, import_vitest.describe)("maybeGenerateBundlerConfigOnInstall", function () { var tmpDir; var originalCi = process.env.CI; (0, import_vitest.beforeEach)(function () { tmpDir = import_fs.default.mkdtempSync(import_path.default.join(import_os.default.tmpdir(), "one-gen-bundler-ci-test-")); }); (0, import_vitest.afterEach)(function () { import_fs.default.rmSync(tmpDir, { recursive: true, force: true }); if (originalCi === void 0) delete process.env.CI;else process.env.CI = originalCi; delete process.env.EAS_BUILD; }); (0, import_vitest.it)("does NOT generate files when not in CI even if expo-updates is present", function () { delete process.env.CI; delete process.env.EAS_BUILD; var fakeUpdates = import_path.default.join(tmpDir, "node_modules/expo-updates"); import_fs.default.mkdirSync(fakeUpdates, { recursive: true }); import_fs.default.writeFileSync(import_path.default.join(fakeUpdates, "package.json"), JSON.stringify({ name: "expo-updates" })); (0, import_generateBundlerConfig.maybeGenerateBundlerConfigOnInstall)(tmpDir); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "babel.config.cjs"))).toBe(false); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "metro.config.cjs"))).toBe(false); }); (0, import_vitest.it)("does NOT generate files in CI when expo-updates is absent", function () { process.env.CI = "true"; (0, import_generateBundlerConfig.maybeGenerateBundlerConfigOnInstall)(tmpDir); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "babel.config.cjs"))).toBe(false); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "metro.config.cjs"))).toBe(false); }); (0, import_vitest.it)("generates files in CI when expo-updates is present", function () { process.env.CI = "true"; var fakeUpdates = import_path.default.join(tmpDir, "node_modules/expo-updates"); import_fs.default.mkdirSync(fakeUpdates, { recursive: true }); import_fs.default.writeFileSync(import_path.default.join(fakeUpdates, "package.json"), JSON.stringify({ name: "expo-updates" })); var consoleInfo = import_vitest.vi.spyOn(console, "info").mockImplementation(function () {}); try { (0, import_generateBundlerConfig.maybeGenerateBundlerConfigOnInstall)(tmpDir); } finally { consoleInfo.mockRestore(); } (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "babel.config.cjs"))).toBe(true); (0, import_vitest.expect)(import_fs.default.existsSync(import_path.default.join(tmpDir, "metro.config.cjs"))).toBe(true); }); }); //# sourceMappingURL=generateBundlerConfig.test.native.js.map