UNPKG

one

Version:

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

841 lines (838 loc) 36.7 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 one_exports = {}; __export(one_exports, { one: () => one }); module.exports = __toCommonJS(one_exports); var import_compiler = require("@vxrn/compiler"); var import_resolve = require("@vxrn/resolve"); var import_vite_plugin_metro = require("@vxrn/vite-plugin-metro"); var import_events = __toESM(require("events"), 1); var import_fs = require("fs"); var import_path = __toESM(require("path"), 1); var import_vxrn = require("vxrn"); var import_vite_plugin = __toESM(require("vxrn/vite-plugin"), 1); var import_constants = require("../constants.native.js"); var import_getViteMetroPluginOptions = require("../metro-config/getViteMetroPluginOptions.native.js"); var import_polyfills_server = require("../polyfills-server.native.js"); var import_setServerGlobals = require("../server/setServerGlobals.native.js"); var import_getRouterRootFromOneOptions = require("../utils/getRouterRootFromOneOptions.native.js"); var import_ensureTsConfig = require("./ensureTsConfig.native.js"); var import_loadConfig = require("./loadConfig.native.js"); var import_clientTreeShakePlugin = require("./plugins/clientTreeShakePlugin.native.js"); var import_devtoolsPlugin = require("./plugins/devtoolsPlugin.native.js"); var import_fileSystemRouterPlugin = require("./plugins/fileSystemRouterPlugin.native.js"); var import_fixDependenciesPlugin = require("./plugins/fixDependenciesPlugin.native.js"); var import_generateFileSystemRouteTypesPlugin = require("./plugins/generateFileSystemRouteTypesPlugin.native.js"); var import_criticalCSSPlugin = require("./plugins/criticalCSSPlugin.native.js"); var import_imageDataPlugin = require("./plugins/imageDataPlugin.native.js"); var import_sourceInspectorPlugin = require("./plugins/sourceInspectorPlugin.native.js"); var import_SSRCSSPlugin = require("./plugins/SSRCSSPlugin.native.js"); var import_virtualEntryConstants = require("./plugins/virtualEntryConstants.native.js"); var import_virtualEntryPlugin = require("./plugins/virtualEntryPlugin.native.js"); var import_environmentGuardPlugin = require("./plugins/environmentGuardPlugin.native.js"); function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } import_events.default.setMaxListeners(1e3); globalThis.__vxrnEnableNativeEnv = true; function one() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var _ref; var _options_config, _options_react, _options_ssr, _options_ssr1, _options_config1; (0, import_setServerGlobals.setServerGlobals)(); var routerRoot = (0, import_getRouterRootFromOneOptions.getRouterRootFromOneOptions)(options); var nativeDisabled = options.native === false; var nativeOptions = options.native === false ? void 0 : options.native; if (nativeDisabled) { globalThis.__vxrnEnableNativeEnv = false; } var metroOptions = function () { var _nativeOptions_bundlerOptions_argv, _nativeOptions_bundlerOptions, _options_router2, _nativeOptions_bundlerOptions1, _options_react2, _options_react1; if (nativeDisabled) return null; if ((nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.bundler) !== "metro" && !process.env.ONE_METRO_MODE) return null; if (process.env.ONE_METRO_MODE) { console.info("ONE_METRO_MODE environment variable is set, enabling Metro mode"); } var routerRoot2 = (0, import_getRouterRootFromOneOptions.getRouterRootFromOneOptions)(options); var defaultMetroOptions = (0, import_getViteMetroPluginOptions.getViteMetroPluginOptions)({ projectRoot: (nativeOptions === null || nativeOptions === void 0 ? void 0 : (_nativeOptions_bundlerOptions = nativeOptions.bundlerOptions) === null || _nativeOptions_bundlerOptions === void 0 ? void 0 : (_nativeOptions_bundlerOptions_argv = _nativeOptions_bundlerOptions.argv) === null || _nativeOptions_bundlerOptions_argv === void 0 ? void 0 : _nativeOptions_bundlerOptions_argv.projectRoot) || process.cwd(), relativeRouterRoot: routerRoot2, ignoredRouteFiles: (_options_router2 = options.router) === null || _options_router2 === void 0 ? void 0 : _options_router2.ignoredRouteFiles, userDefaultConfigOverrides: nativeOptions === null || nativeOptions === void 0 ? void 0 : (_nativeOptions_bundlerOptions1 = nativeOptions.bundlerOptions) === null || _nativeOptions_bundlerOptions1 === void 0 ? void 0 : _nativeOptions_bundlerOptions1.defaultConfigOverrides, setupFile: options.setupFile }); var userMetroOptions = nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.bundlerOptions; var babelConfig = { ...(defaultMetroOptions === null || defaultMetroOptions === void 0 ? void 0 : defaultMetroOptions.babelConfig), ...(userMetroOptions === null || userMetroOptions === void 0 ? void 0 : userMetroOptions.babelConfig) }; return { ...defaultMetroOptions, ...userMetroOptions, defaultConfigOverrides: defaultMetroOptions === null || defaultMetroOptions === void 0 ? void 0 : defaultMetroOptions.defaultConfigOverrides, // defaultConfigOverrides is merged by getViteMetroPluginOptions, so we need to set it here again. argv: { ...(defaultMetroOptions === null || defaultMetroOptions === void 0 ? void 0 : defaultMetroOptions.argv), ...(userMetroOptions === null || userMetroOptions === void 0 ? void 0 : userMetroOptions.argv) }, babelConfig: { ...babelConfig, plugins: [...(babelConfig.plugins || []), ...(((_options_react2 = options.react) === null || _options_react2 === void 0 ? void 0 : _options_react2.compiler) === true || ((_options_react1 = options.react) === null || _options_react1 === void 0 ? void 0 : _options_react1.compiler) === "native" ? ["babel-plugin-react-compiler"] : [])] }, mainModuleName: "one/metro-entry", // So users won't need to write `"main": "one/metro-entry"` in their `package.json` like ordinary Expo apps. // allow env var to enable lazy startup startup: process.env.ONE_METRO_LAZY ? "lazy" : userMetroOptions === null || userMetroOptions === void 0 ? void 0 : userMetroOptions.startup }; }(); var vxrnPlugins = []; if (!process.env.IS_VXRN_CLI) { console.warn("Experimental: running VxRN as a Vite plugin. This is not yet stable."); vxrnPlugins.push((0, import_vite_plugin.default)({ metro: metroOptions, disableNative: nativeDisabled })); } else { if (!globalThis.__oneOptions) { (0, import_loadConfig.setOneOptions)(options); globalThis["__vxrnPluginConfig__"] = options; globalThis["__vxrnMetroOptions__"] = metroOptions; return []; } } if (((_options_config = options.config) === null || _options_config === void 0 ? void 0 : _options_config.ensureTSConfig) !== false) { void (0, import_ensureTsConfig.ensureTSConfig)(); } var vxrnOptions = (0, import_vxrn.getOptionsFilled)(); var root = (vxrnOptions === null || vxrnOptions === void 0 ? void 0 : vxrnOptions.root) || process.cwd(); var compiler = (_options_react = options.react) === null || _options_react === void 0 ? void 0 : _options_react.compiler; if (compiler) { (0, import_compiler.configureVXRNCompilerPlugin)({ enableCompiler: // pass through object config, regex, or function directly (typeof compiler === "undefined" ? "undefined" : _type_of(compiler)) === "object" || typeof compiler === "function" ? compiler : compiler === "native" ? ["ios", "android"] : compiler === "web" ? ["ssr", "client"] : true }); } var autoDepsOptions = (_options_ssr = options.ssr) === null || _options_ssr === void 0 ? void 0 : _options_ssr.autoDepsOptimization; var dedupeSymlinks = (_ref = (_options_ssr1 = options.ssr) === null || _options_ssr1 === void 0 ? void 0 : _options_ssr1.dedupeSymlinkedModules) !== null && _ref !== void 0 ? _ref : false; var ssrDedup_optimizedPackages = null; var ssrDedup_projectRoot = ""; var ssrSymlinkDedupPlugin = { name: "one:ssr-symlink-dedup", enforce: "pre", configResolved(config) { var _config_ssr_optimizeDeps, _config_ssr; if (!dedupeSymlinks) return; ssrDedup_projectRoot = config.root || process.cwd(); var ssrInclude = (_config_ssr = config.ssr) === null || _config_ssr === void 0 ? void 0 : (_config_ssr_optimizeDeps = _config_ssr.optimizeDeps) === null || _config_ssr_optimizeDeps === void 0 ? void 0 : _config_ssr_optimizeDeps.include; if (!(ssrInclude === null || ssrInclude === void 0 ? void 0 : ssrInclude.length)) return; ssrDedup_optimizedPackages = /* @__PURE__ */new Set(); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = ssrInclude[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var entry = _step.value; if (entry.startsWith("@")) { var parts = entry.split("/"); ssrDedup_optimizedPackages.add(`${parts[0]}/${parts[1]}`); } else { ssrDedup_optimizedPackages.add(entry.split("/")[0]); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }, async resolveId(source, importer, options2) { if (!dedupeSymlinks) return; if (source[0] === "." || source[0] === "/") return; var pkgName; var subpath = null; if (source.startsWith("@")) { var parts = source.split("/"); pkgName = parts.length >= 2 ? `${parts[0]}/${parts[1]}` : source; if (parts.length > 2) subpath = `./${parts.slice(2).join("/")}`; } else { var parts1 = source.split("/"); pkgName = parts1[0]; if (parts1.length > 1) subpath = `./${parts1.slice(1).join("/")}`; } var resolved = await this.resolve(source, importer, { ...options2, skipSelf: true }); if (!(resolved === null || resolved === void 0 ? void 0 : resolved.id)) return; if (resolved.id.includes("/node_modules/")) return; var path2 = await import("path"); var fs = await import("fs"); var { join, dirname } = path2; var { realpathSync, existsSync: existsSync2, readFileSync: readFileSync2 } = fs; var dir = ssrDedup_projectRoot; while (dir !== dirname(dir)) { var nmPkgDir = join(dir, "node_modules", pkgName); if (existsSync2(nmPkgDir)) { if (subpath) { try { var _pkg_exports; var pkg = JSON.parse(readFileSync2(join(nmPkgDir, "package.json"), "utf8")); var exportEntry = (_pkg_exports = pkg.exports) === null || _pkg_exports === void 0 ? void 0 : _pkg_exports[subpath]; if (exportEntry && (typeof exportEntry === "undefined" ? "undefined" : _type_of(exportEntry)) === "object") { var target = exportEntry.import || exportEntry.module || exportEntry.default; if (target) { var fullPath = join(nmPkgDir, target); if (existsSync2(fullPath)) return { id: fullPath, external: resolved.external }; } } } catch (unused) {} } var realPkgDir = realpathSync(nmPkgDir); if (resolved.id.startsWith(realPkgDir)) { var relativePart = resolved.id.slice(realPkgDir.length); return { id: nmPkgDir + relativePart, external: resolved.external }; } break; } dir = dirname(dir); } } }; var devAndProdPlugins = [{ name: "one:config", __get: options }, { name: "one:env-prefix", config(userConfig) { if (userConfig.envPrefix) return; return { envPrefix: ["VITE_", "EXPO_PUBLIC_"] }; } }, (0, import_environmentGuardPlugin.environmentGuardPlugin)(options.environmentGuards), (0, import_criticalCSSPlugin.criticalCSSPlugin)(), (0, import_imageDataPlugin.imageDataPlugin)(), { name: "one-define-client-env", async config(userConfig) { var _ref2, _ref1; var clientEnvDefine = options.skipEnv ? {} : (await (0, import_vxrn.loadEnv)((_ref2 = (_ref1 = vxrnOptions === null || vxrnOptions === void 0 ? void 0 : vxrnOptions.mode) !== null && _ref1 !== void 0 ? _ref1 : userConfig === null || userConfig === void 0 ? void 0 : userConfig.mode) !== null && _ref2 !== void 0 ? _ref2 : "development", process.cwd(), userConfig === null || userConfig === void 0 ? void 0 : userConfig.envPrefix)).clientEnvDefine; return { define: { ...clientEnvDefine, ...(process.env.ONE_DEBUG_ROUTER && { "process.env.ONE_DEBUG_ROUTER": JSON.stringify(process.env.ONE_DEBUG_ROUTER) }) } }; } }, ...(autoDepsOptions === false ? [] : [(0, import_vxrn.autoDepOptimizePlugin)({ onScannedDeps(param) { var { hasReanimated, hasNativewind } = param; var _ref2; (0, import_compiler.configureVXRNCompilerPlugin)({ enableReanimated: hasReanimated, enableNativeCSS: (_ref2 = nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.css) !== null && _ref2 !== void 0 ? _ref2 : hasNativewind, enableNativewind: hasNativewind }); }, root, include: /node_modules/, ...(autoDepsOptions === true ? {} : autoDepsOptions) })]), ...(((_options_config1 = options.config) === null || _options_config1 === void 0 ? void 0 : _options_config1.tsConfigPaths) === false ? [] : [/* @__PURE__ */function () { var mappings = []; function loadMappings(resolvedRoot) { try { var _config_compilerOptions, _config_compilerOptions1; var configPath = import_path.default.resolve(resolvedRoot, "tsconfig.json"); if (!(0, import_fs.existsSync)(configPath)) return; var raw = (0, import_fs.readFileSync)(configPath, "utf-8"); var stripped = raw.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, function (m, g) { return g ? "" : m; }); var config = JSON.parse(stripped); var paths = config === null || config === void 0 ? void 0 : (_config_compilerOptions = config.compilerOptions) === null || _config_compilerOptions === void 0 ? void 0 : _config_compilerOptions.paths; var baseUrl = (config === null || config === void 0 ? void 0 : (_config_compilerOptions1 = config.compilerOptions) === null || _config_compilerOptions1 === void 0 ? void 0 : _config_compilerOptions1.baseUrl) || "."; if (!paths) return; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = Object.entries(paths)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var [pattern, targets] = _step.value; var target = targets[0]; if (!target) continue; if (pattern.endsWith("/*")) { var resolved = import_path.default.resolve(resolvedRoot, baseUrl, target.slice(0, -1)); mappings.push({ prefix: pattern.slice(0, -1), replacement: resolved.endsWith("/") ? resolved : resolved + "/", wildcard: true }); } else { mappings.push({ prefix: pattern, replacement: import_path.default.resolve(resolvedRoot, baseUrl, target), wildcard: false }); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } catch (unused) {} } return { name: "one:tsconfig-paths", enforce: "pre", config() { return { resolve: { tsconfigPaths: true } }; }, configResolved(config) { if (mappings.length === 0) { loadMappings(config.root); } }, resolveId(source) { var jsExts = [".ts", ".tsx", ".js", ".jsx", ".mts", ".mjs", ".cjs", ".cts"]; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = mappings[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var m = _step.value; var candidate = void 0; if (m.wildcard) { if (source.startsWith(m.prefix)) { candidate = m.replacement + source.slice(m.prefix.length); } } else if (source === m.prefix) { candidate = m.replacement; } if (!candidate) continue; if (jsExts.includes(import_path.default.extname(candidate))) return candidate; var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0; try { for (var _iterator1 = jsExts[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) { var e = _step1.value; if ((0, import_fs.existsSync)(candidate + e)) return candidate + e; } } catch (err) { _didIteratorError1 = true; _iteratorError1 = err; } finally { try { if (!_iteratorNormalCompletion1 && _iterator1.return != null) { _iterator1.return(); } } finally { if (_didIteratorError1) { throw _iteratorError1; } } } var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0; try { for (var _iterator2 = jsExts[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var e1 = _step2.value; if ((0, import_fs.existsSync)(candidate + "/index" + e1)) return candidate + "/index" + e1; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return candidate; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } }; }()]), // resolveId-based aliases that work during both vite transforms AND // rolldown dep pre-bundling (where resolve.alias is not applied) ...(options.alias ? [function () { var resolveMap = function (map) { if (!map) return null; var out = {}; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = Object.entries(map)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var [key, value] = _step.value; try { out[key] = import_path.default.isAbsolute(value) ? value : (0, import_resolve.resolvePath)(value); } catch (unused) { out[key] = value; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return out; }; var a = options.alias; var resolved = { web: resolveMap(a.web), native: resolveMap(a.native), client: resolveMap(a.client), ssr: resolveMap(a.ssr), ios: resolveMap(a.ios), android: resolveMap(a.android) }; return { name: "one:alias", enforce: "pre", resolveId(source) { var _this_environment; var env = (_this_environment = this.environment) === null || _this_environment === void 0 ? void 0 : _this_environment.name; var specific = env ? resolved[env] : null; if (specific && source in specific) { return { id: specific[source], external: false }; } var isWeb = !env || env === "client" || env === "ssr"; var general = isWeb ? resolved.web : resolved.native; if (general && source in general) { return { id: general[source], external: false }; } } }; }()] : []), { // rolldown fails on deep react-native/Libraries/* imports during dep pre-bundling. // these are native-only paths that don't exist in react-native-web. name: "one:redirect-rn-deep-imports", enforce: "pre", resolveId(source) { var _this_environment, _this_environment1; if (((_this_environment = this.environment) === null || _this_environment === void 0 ? void 0 : _this_environment.name) === "client" || ((_this_environment1 = this.environment) === null || _this_environment1 === void 0 ? void 0 : _this_environment1.name) === "ssr") { if (source.startsWith("react-native/Libraries/") || /react-native-web(-lite)?\/.*\/Libraries\//.test(source)) { return "\0rn-empty-module"; } } }, load(id) { if (id === "\0rn-empty-module") { return "export default {}; export {};"; } } }, { name: "one-aliases", enforce: "pre", config() { var tslibLitePath = ""; try { tslibLitePath = (0, import_resolve.resolvePath)("@vxrn/tslib-lite", process.cwd()); } catch (err) { console.info(`Can't find tslib-lite, falling back to tslib`); if (process.env.DEBUG) { console.error(err); } } return { resolve: { alias: { // testing getting transition between routes working // 'use-sync-external-store/with-selector': resolvePath( // 'use-sync-external-store/shim/with-selector' // ), ...(tslibLitePath && { tslib: tslibLitePath }) } } }; } }, { name: "one:init-config", config() { var _options_web, _options_web1, _options_web2, _options_web3; var setupFileDefines = function () { if (!options.setupFile) return {}; var setupFiles; if (typeof options.setupFile === "string") { setupFiles = { client: options.setupFile, server: options.setupFile, ios: options.setupFile, android: options.setupFile }; } else if ("native" in options.setupFile) { setupFiles = { client: options.setupFile.client, server: options.setupFile.server, ios: options.setupFile.native, android: options.setupFile.native }; } else { setupFiles = options.setupFile; } return { ...(setupFiles.client && { "process.env.ONE_SETUP_FILE_CLIENT": JSON.stringify(setupFiles.client) }), ...(setupFiles.server && { "process.env.ONE_SETUP_FILE_SERVER": JSON.stringify(setupFiles.server) }), ...(setupFiles.ios && { "process.env.ONE_SETUP_FILE_IOS": JSON.stringify(setupFiles.ios) }), ...(setupFiles.android && { "process.env.ONE_SETUP_FILE_ANDROID": JSON.stringify(setupFiles.android) }) }; }(); var serverURL = process.env.ONE_SERVER_URL || (vxrnOptions === null || vxrnOptions === void 0 ? void 0 : vxrnOptions.server.url); return { // Platform env defined at root level for client (workaround for Vite bug with environment.client.define) define: { ...(0, import_vite_plugin_metro.getPlatformEnvDefine)("client"), ...setupFileDefines, ...(((_options_web = options.web) === null || _options_web === void 0 ? void 0 : _options_web.defaultRenderMode) && { "process.env.ONE_DEFAULT_RENDER_MODE": JSON.stringify(options.web.defaultRenderMode), "import.meta.env.ONE_DEFAULT_RENDER_MODE": JSON.stringify(options.web.defaultRenderMode) }), ...(process.env.NODE_ENV !== "production" && serverURL && { "process.env.ONE_SERVER_URL": JSON.stringify(serverURL), "import.meta.env.ONE_SERVER_URL": JSON.stringify(serverURL) }), ...(((_options_web1 = options.web) === null || _options_web1 === void 0 ? void 0 : _options_web1.linkPrefetch) && { "process.env.ONE_LINK_PREFETCH": JSON.stringify(options.web.linkPrefetch) }), ...(((_options_web2 = options.web) === null || _options_web2 === void 0 ? void 0 : _options_web2.skewProtection) !== void 0 && { "process.env.ONE_SKEW_PROTECTION": JSON.stringify(options.web.skewProtection === true ? "true" : options.web.skewProtection === false ? "false" : options.web.skewProtection) }), // 'proactive' ...(((_options_web3 = options.web) === null || _options_web3 === void 0 ? void 0 : _options_web3.suspendRoutes) !== void 0 && { "process.env.ONE_SUSPEND_ROUTES": JSON.stringify(options.web.suspendRoutes ? "1" : "0") }) }, environments: { ssr: { define: (0, import_vite_plugin_metro.getPlatformEnvDefine)("ssr") }, ios: { define: { ...(0, import_vite_plugin_metro.getPlatformEnvDefine)("ios"), ...((nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.suspendRoutes) !== void 0 && { "process.env.ONE_SUSPEND_ROUTES_NATIVE": JSON.stringify(nativeOptions.suspendRoutes ? "1" : "0") }) } }, android: { define: { ...(0, import_vite_plugin_metro.getPlatformEnvDefine)("android"), ...((nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.suspendRoutes) !== void 0 && { "process.env.ONE_SUSPEND_ROUTES_NATIVE": JSON.stringify(nativeOptions.suspendRoutes ? "1" : "0") }) } } }, ssr: { // ensure server-only/client-only go through vite so our environmentGuardPlugin can handle them noExternal: ["server-only", "client-only"] } }; } }, { name: "one:tamagui", config() { return { define: { // safe to set because it only affects web in tamagui, and one is always react 19 "process.env.TAMAGUI_REACT_19": '"1"' }, environments: { ssr: { define: { "process.env.TAMAGUI_IS_SERVER": '"1"', "process.env.TAMAGUI_KEEP_THEMES": '"1"' } }, ios: { define: { "process.env.TAMAGUI_KEEP_THEMES": '"1"' } }, android: { define: { "process.env.TAMAGUI_KEEP_THEMES": '"1"' } } } }; } }, { name: "route-module-hmr-fix", hotUpdate(param) { var { server, modules, file } = param; var _this_environment; var envName = (_this_environment = this.environment) === null || _this_environment === void 0 ? void 0 : _this_environment.name; var fileRelativePath = import_path.default.relative(server.config.root, file); var fileRootDir = fileRelativePath.split(import_path.default.sep)[0]; var isAppFile = fileRootDir === "app"; if (envName === "ssr" && isAppFile) { return []; } var hasRouteUpdate = false; var result = modules.map(function (m) { var { id } = m; if (!id) return m; var relativePath = import_path.default.relative(server.config.root, id); var rootDir = relativePath.split(import_path.default.sep)[0]; if (rootDir === "app") { m.acceptedHmrExports = /* @__PURE__ */new Set(); var isRootLayout = relativePath === import_path.default.join("app", "_layout.tsx") || /^app[\\/]\([^)]+\)[\\/]_layout\.tsx$/.test(relativePath); if (isRootLayout) { hasRouteUpdate = true; } } return m; }); if (hasRouteUpdate) { server.hot.send({ type: "custom", event: "one:route-update", data: { file: fileRelativePath } }); } return result; } }, // Plugins may transform the source code and add imports of `react/jsx-dev-runtime`, which won't be discovered by Vite's initial `scanImports` since the implementation is using ESbuild where such plugins are not executed. // Thus, if the project has a valid `react/jsx-dev-runtime` import, we tell Vite to optimize it, so Vite won't only discover it on the next page load and trigger a full reload. { name: "one:optimize-dev-deps", config(_, env) { if (env.mode === "development") { return { optimizeDeps: { include: ["react/jsx-dev-runtime", "react/compiler-runtime"] } }; } } }, { name: "one:remove-server-from-client", enforce: "pre", transform(code, id) { if (this.environment.name === "client") { if (id.includes(`one-server-only`)) { return code.replace(`import { AsyncLocalStorage } from "node:async_hooks"`, `class AsyncLocalStorage {}`); } } } }, // packages in resolve.dedupe must also be pre-bundled for SSR to prevent // duplicate module instances (e.g. symlinked monorepo packages resolving // to different paths) { name: "one:ssr-dedupe-prebundle", config(config) { var _config_resolve; if (!dedupeSymlinks) return; var dedupeList = (_config_resolve = config.resolve) === null || _config_resolve === void 0 ? void 0 : _config_resolve.dedupe; if (!Array.isArray(dedupeList) || dedupeList.length === 0) return; return { ssr: { optimizeDeps: { include: [...dedupeList] }, noExternal: [...dedupeList] } }; } }, // fix: vite's ssr dep optimizer registers pre-bundled deps by their // node_modules path, but symlinks cause imports to resolve to the real // (source) path. the optimizer doesn't recognize the real path, so it // loads from source — creating a duplicate instance. // this plugin forces optimized SSR deps to resolve via node_modules. ssrSymlinkDedupPlugin]; var nativeWebDevAndProdPlugsin = [(0, import_clientTreeShakePlugin.clientTreeShakePlugin)()]; if (!nativeDisabled) { globalThis.__vxrnAddNativePlugins = [(0, import_clientTreeShakePlugin.clientTreeShakePlugin)({ runtime: "rolldown" })]; } globalThis.__vxrnAddWebPluginsProd = devAndProdPlugins; var flags = {}; if (!nativeDisabled) { var _options_router; globalThis.__vxrnNativeEntryConfig = { routerRoot, ignoredRouteFiles: (_options_router = options.router) === null || _options_router === void 0 ? void 0 : _options_router.ignoredRouteFiles, setupFile: options.setupFile, flags }; } var inspectorPlugins = function () { var _options_devtools, _devtools_inspector; var devtools = (_options_devtools = options.devtools) !== null && _options_devtools !== void 0 ? _options_devtools : true; var inspector = devtools === true || devtools !== false && ((_devtools_inspector = devtools.inspector) !== null && _devtools_inspector !== void 0 ? _devtools_inspector : true); var editor = devtools !== true && devtools !== false ? devtools.editor : void 0; return inspector ? (0, import_sourceInspectorPlugin.sourceInspectorPlugin)({ editor }) : []; }(); return [...vxrnPlugins, ...devAndProdPlugins, ...inspectorPlugins, ...nativeWebDevAndProdPlugsin, /** * This is really the meat of one, where it handles requests: */ (0, import_fileSystemRouterPlugin.createFileSystemRouterPlugin)(options), (0, import_generateFileSystemRouteTypesPlugin.generateFileSystemRouteTypesPlugin)(options), (0, import_fixDependenciesPlugin.fixDependenciesPlugin)(options.patches), (0, import_virtualEntryPlugin.createVirtualEntry)({ ...options, flags, root: routerRoot }), { name: "one-define-environment", config() { return { define: { ...((nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.key) && { "process.env.ONE_APP_NAME": JSON.stringify(nativeOptions.key), "import.meta.env.ONE_APP_NAME": JSON.stringify(nativeOptions.key) }), "process.env.ONE_CACHE_KEY": JSON.stringify(import_constants.CACHE_KEY), "import.meta.env.ONE_CACHE_KEY": JSON.stringify(import_constants.CACHE_KEY) } }; } }, (0, import_SSRCSSPlugin.SSRCSSPlugin)({ entries: [import_virtualEntryConstants.virtualEntryId] }), // devtools (always includes refresh preamble for HMR, optionally includes UI) ...function () { var _options_devtools; var devtools = (_options_devtools = options.devtools) !== null && _options_devtools !== void 0 ? _options_devtools : true; var includeUI = devtools !== false; return [ // always include devtools plugin for refresh preamble (required for HMR) (0, import_devtoolsPlugin.createDevtoolsPlugin)({ includeUI })]; }()]; } //# sourceMappingURL=one.native.js.map