UNPKG

one

Version:

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

317 lines (312 loc) 12.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 __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; 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 __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var generateBundlerConfig_exports = {}; __export(generateBundlerConfig_exports, { ONE_GENERATED_MARKER: () => ONE_GENERATED_MARKER, generateBundlerConfig: () => generateBundlerConfig, getBundlerConfigOptionsFromOneOptions: () => getBundlerConfigOptionsFromOneOptions, isCiEnvironment: () => isCiEnvironment, maybeGenerateBundlerConfigOnInstall: () => maybeGenerateBundlerConfigOnInstall }); module.exports = __toCommonJS(generateBundlerConfig_exports); var import_fs = require("fs"); var import_module = __toESM(require("module"), 1); var import_path = __toESM(require("path"), 1); var import_picocolors = __toESM(require("picocolors"), 1); var import_getRouterRootFromOneOptions = require("../utils/getRouterRootFromOneOptions.native.js"); function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } var ONE_GENERATED_MARKER = "@one/generated bundler-config"; function buildBabelConfigContent(param) { var { eject, options } = param; var header = eject ? `// you own this file. edit freely \u2014 \`one\` will not regenerate it. // delegates to one/babel-preset which holds the canonical plugin chain. ` : `// ${ONE_GENERATED_MARKER} // // auto-generated by \`one patch\` on ci/eas workers when expo-updates is // in deps. delegates to one/babel-preset so expo export / eas update // use the same router/setup options as \`one dev\` and \`one build\`. // // to customize, delete this header and edit freely \u2014 re-runs will then // leave this file alone. `; return `${header} const oneBabelPreset = require('one/babel-preset') const preset = oneBabelPreset.default || oneBabelPreset const oneBundlerOptions = ${serializeBundlerConfigOptions(options)} module.exports = function (api) { return preset(api, oneBundlerOptions) } `; } function buildMetroConfigContent(param) { var { eject, options } = param; var header = eject ? `// you own this file. edit freely \u2014 \`one\` will not regenerate it. // withOne() invokes the same Metro pipeline One uses for production bundles. ` : `// ${ONE_GENERATED_MARKER} // // auto-generated by \`one patch\` on ci/eas workers when expo-updates is // in deps. delegates to one/metro-config which invokes the exact same // metro pipeline one uses for production native bundles with your // router/setup options \u2014 no separate expo/metro-config setup needed. // // to customize, delete this header and edit freely \u2014 re-runs will then // leave this file alone. `; return `${header} const { withOne } = require('one/metro-config') const oneBundlerOptions = ${serializeBundlerConfigOptions(options)} module.exports = withOne(__dirname, oneBundlerOptions) `; } var FILES = [{ name: "babel.config.cjs", getContent: buildBabelConfigContent, conflicting: ["babel.config.js", "babel.config.mjs", ".babelrc", ".babelrc.js"] }, { name: "metro.config.cjs", getContent: buildMetroConfigContent, conflicting: ["metro.config.js", "metro.config.mjs"] }]; function stripUndefined(value) { if (Array.isArray(value)) { return value.map(stripUndefined); } if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object") { return Object.fromEntries(Object.entries(value).filter(function (param) { var [, entry] = param; return entry !== void 0; }).map(function (param) { var [key, entry] = param; return [key, stripUndefined(entry)]; })); } return value; } function assertSerializable(value) { var keyPath = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "one bundler options"; if (typeof value === "function" || (typeof value === "undefined" ? "undefined" : _type_of(value)) === "symbol" || (typeof value === "undefined" ? "undefined" : _type_of(value)) === "bigint") { throw new Error(`[one] ${keyPath} must be JSON-serializable to generate Babel/Metro config files. Move function-valued native linking/customization into an ejected config.`); } if (Array.isArray(value)) { value.forEach(function (entry2, index) { return assertSerializable(entry2, `${keyPath}[${index}]`); }); return; } if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object") { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = Object.entries(value)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var [key, entry] = _step.value; assertSerializable(entry, `${keyPath}.${key}`); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } } function serializeBundlerConfigOptions(options) { var clean = stripUndefined(options); assertSerializable(clean); return JSON.stringify(clean, null, 2); } function getBundlerConfigOptionsFromOneOptions() { var oneOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var _oneOptions_router, _oneOptions_router1; return stripUndefined({ routerRoot: (0, import_getRouterRootFromOneOptions.getRouterRootFromOneOptions)(oneOptions), ignoredRouteFiles: (_oneOptions_router = oneOptions.router) === null || _oneOptions_router === void 0 ? void 0 : _oneOptions_router.ignoredRouteFiles, linking: (_oneOptions_router1 = oneOptions.router) === null || _oneOptions_router1 === void 0 ? void 0 : _oneOptions_router1.linking, setupFile: oneOptions.setupFile }); } function generateBundlerConfig() { var args = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var _args_cwd; var cwd = import_path.default.resolve((_args_cwd = args.cwd) !== null && _args_cwd !== void 0 ? _args_cwd : process.cwd()); var force = !!args.force; var check = !!args.check; var quiet = !!args.quiet; var log = function (msg) { if (!quiet) console.info(msg); }; var warn = function (msg) { if (!quiet) console.warn(msg); }; var results = []; var eject = !!args.eject; var bundlerOptions = getBundlerConfigOptionsFromOneOptions(args.oneOptions); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = FILES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var file = _step.value; var filePath = import_path.default.join(cwd, file.name); var targetContent = file.getContent({ eject, options: bundlerOptions }); var conflict = file.conflicting.find(function (alt) { return (0, import_fs.existsSync)(import_path.default.join(cwd, alt)); }); if (conflict && !(0, import_fs.existsSync)(filePath)) { results.push({ filePath: import_path.default.join(cwd, conflict), action: "skipped-other-format", reason: `Found ${conflict}; not creating ${file.name}. To switch, delete ${conflict} and re-run with --force.` }); warn(import_picocolors.default.yellow(`[one] found ${conflict} \u2014 leaving it alone. Delete it and re-run with --force to switch to ${file.name}.`)); continue; } if (!(0, import_fs.existsSync)(filePath)) { if (check) { results.push({ filePath, action: "would-write" }); log(import_picocolors.default.yellow(`[one] missing: ${file.name}`)); continue; } (0, import_fs.writeFileSync)(filePath, targetContent); results.push({ filePath, action: "wrote" }); log(import_picocolors.default.green(`[one] wrote ${file.name}`)); continue; } var existing = (0, import_fs.readFileSync)(filePath, "utf8"); if (existing === targetContent) { results.push({ filePath, action: "kept" }); log(import_picocolors.default.dim(`[one] up to date: ${file.name}`)); continue; } var hasMarker = existing.includes(ONE_GENERATED_MARKER); if (!hasMarker && !force) { results.push({ filePath, action: "skipped-customized", reason: `${file.name} has been customized (no @one marker). Re-add the marker comment or pass --force to overwrite.` }); warn(import_picocolors.default.yellow(`[one] ${file.name} appears customized \u2014 skipping. Pass --force to overwrite.`)); continue; } if (check) { results.push({ filePath, action: "would-overwrite" }); log(import_picocolors.default.yellow(`[one] out of date: ${file.name}`)); continue; } (0, import_fs.writeFileSync)(filePath, targetContent); results.push({ filePath, action: "wrote" }); log(import_picocolors.default.green(`[one] updated ${file.name}`)); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } var acceptableAlways = /* @__PURE__ */new Set(["wrote", "kept", "skipped-other-format", "skipped-customized"]); var acceptableInCheck = /* @__PURE__ */new Set(["kept", "skipped-other-format", "skipped-customized"]); var ok = (check ? acceptableInCheck : acceptableAlways).size ? results.every(function (r) { return (check ? acceptableInCheck : acceptableAlways).has(r.action); }) : false; return { results, ok }; } function isCiEnvironment() { var truthy = function (v) { return !!v && v !== "false" && v !== "0"; }; return truthy(process.env.EAS_BUILD) || truthy(process.env.CI); } function maybeGenerateBundlerConfigOnInstall() { var cwd = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : process.cwd(), oneOptions = arguments.length > 1 ? arguments[1] : void 0; if (!isCiEnvironment()) return; try { import_module.default.createRequire(cwd + "/").resolve("expo-updates/package.json"); } catch (unused) { return; } generateBundlerConfig({ cwd, quiet: false, oneOptions }); } //# sourceMappingURL=generateBundlerConfig.native.js.map