one
Version:
One is a new React Framework that makes Vite serve both native and web.
381 lines (379 loc) • 17.1 kB
JavaScript
;
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