UNPKG

one

Version:

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

424 lines (421 loc) 20.2 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: !0 }); }, __copyProps = (to, from, except, desc) => { if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__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: !0 }) : target, mod)), __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod); var one_exports = {}; __export(one_exports, { one: () => one }); module.exports = __toCommonJS(one_exports); var import_compiler = require("@vxrn/compiler"), import_resolve = require("@vxrn/resolve"), import_events = __toESM(require("events"), 1), import_path = __toESM(require("path"), 1), import_vite_plugin_barrel = require("vite-plugin-barrel"), import_vite_tsconfig_paths = __toESM(require("vite-tsconfig-paths"), 1), import_vxrn = require("vxrn"), import_vite_plugin = __toESM(require("vxrn/vite-plugin"), 1), import_constants = require("../constants.native.js"), import_getViteMetroPluginOptions = require("../metro-config/getViteMetroPluginOptions.native.js"), import_polyfills_server = require("../polyfills-server.native.js"), import_getRouterRootFromOneOptions = require("../utils/getRouterRootFromOneOptions.native.js"), import_ensureTsConfig = require("./ensureTsConfig.native.js"), import_loadConfig = require("./loadConfig.native.js"), import_clientTreeShakePlugin = require("./plugins/clientTreeShakePlugin.native.js"), import_fileSystemRouterPlugin = require("./plugins/fileSystemRouterPlugin.native.js"), import_fixDependenciesPlugin = require("./plugins/fixDependenciesPlugin.native.js"), import_generateFileSystemRouteTypesPlugin = require("./plugins/generateFileSystemRouteTypesPlugin.native.js"), import_SSRCSSPlugin = require("./plugins/SSRCSSPlugin.native.js"), import_virtualEntryConstants = require("./plugins/virtualEntryConstants.native.js"), import_virtualEntryPlugin = require("./plugins/virtualEntryPlugin.native.js"); function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj; } import_events.default.setMaxListeners(1e3); globalThis.__vxrnEnableNativeEnv = !0; function one() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _options_config, _options_optimization, _options_react, _options_ssr, _options_router_experimental, _options_router, routerRoot = (0, import_getRouterRootFromOneOptions.getRouterRootFromOneOptions)(options), metroOptions = function () { var _options_native, _options_router2, _options_native_bundlerOptions, _options_native1, _options_native2, _options_react2, _options_react1; if (((_options_native = options.native) === null || _options_native === void 0 ? void 0 : _options_native.bundler) !== "metro" && !process.env.ONE_METRO_MODE) return null; process.env.ONE_METRO_MODE && console.info("ONE_METRO_MODE environment variable is set, enabling Metro mode"); var routerRoot2 = (0, import_getRouterRootFromOneOptions.getRouterRootFromOneOptions)(options), defaultMetroOptions = (0, import_getViteMetroPluginOptions.getViteMetroPluginOptions)({ projectRoot: process.cwd(), // TODO: hard-coded process.cwd(), we should make this optional since the plugin can have a default to vite's `config.root`. relativeRouterRoot: routerRoot2, ignoredRouteFiles: (_options_router2 = options.router) === null || _options_router2 === void 0 ? void 0 : _options_router2.ignoredRouteFiles, userDefaultConfigOverrides: (_options_native1 = options.native) === null || _options_native1 === void 0 || (_options_native_bundlerOptions = _options_native1.bundlerOptions) === null || _options_native_bundlerOptions === void 0 ? void 0 : _options_native_bundlerOptions.defaultConfigOverrides, setupFile: options.setupFile }), userMetroOptions = (_options_native2 = options.native) === null || _options_native2 === void 0 ? void 0 : _options_native2.bundlerOptions, babelConfig = { ...defaultMetroOptions?.babelConfig, ...userMetroOptions?.babelConfig }; return { ...defaultMetroOptions, ...userMetroOptions, defaultConfigOverrides: defaultMetroOptions?.defaultConfigOverrides, // defaultConfigOverrides is merged by getViteMetroPluginOptions, so we need to set it here again. argv: { ...defaultMetroOptions?.argv, ...userMetroOptions?.argv }, babelConfig: { ...babelConfig, plugins: [...(babelConfig.plugins || []), ...(((_options_react2 = options.react) === null || _options_react2 === void 0 ? void 0 : _options_react2.compiler) === !0 || ((_options_react1 = options.react) === null || _options_react1 === void 0 ? void 0 : _options_react1.compiler) === "native" ? ["babel-plugin-react-compiler"] : [])] }, mainModuleName: "one/metro-entry" }; }(), 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 }));else if (!globalThis.__oneOptions) return (0, import_loadConfig.setOneOptions)(options), globalThis.__vxrnPluginConfig__ = options, globalThis.__vxrnMetroOptions__ = metroOptions, []; ((_options_config = options.config) === null || _options_config === void 0 ? void 0 : _options_config.ensureTSConfig) !== !1 && (0, import_ensureTsConfig.ensureTSConfig)(); var tsConfigPathsPlugin = null, vxrnOptions = (0, import_vxrn.getOptionsFilled)(), root = vxrnOptions?.root || process.cwd(), barrelOption = (_options_optimization = options.optimization) === null || _options_optimization === void 0 ? void 0 : _options_optimization.barrel, compiler = (_options_react = options.react) === null || _options_react === void 0 ? void 0 : _options_react.compiler; compiler && (0, import_compiler.configureVXRNCompilerPlugin)({ enableCompiler: compiler === "native" ? ["ios", "android"] : compiler === "web" ? ["ssr", "client"] : !0 }); var autoDepsOptions = (_options_ssr = options.ssr) === null || _options_ssr === void 0 ? void 0 : _options_ssr.autoDepsOptimization, devAndProdPlugins = [{ name: "one:config", __get: options }, barrelOption ? (0, import_vite_plugin_barrel.barrel)({ packages: Array.isArray(barrelOption) ? barrelOption : ["@tamagui/lucide-icons"] }) : null, { name: "one-define-client-env", async config(userConfig) { var _vxrnOptions_mode, _ref, { clientEnvDefine } = await (0, import_vxrn.loadEnv)((_ref = (_vxrnOptions_mode = vxrnOptions?.mode) !== null && _vxrnOptions_mode !== void 0 ? _vxrnOptions_mode : userConfig?.mode) !== null && _ref !== void 0 ? _ref : "development", process.cwd(), userConfig?.envPrefix); return { define: { ...clientEnvDefine, ...(process.env.ONE_DEBUG_ROUTER && { "process.env.ONE_DEBUG_ROUTER": JSON.stringify(process.env.ONE_DEBUG_ROUTER) }) } }; } }, ...(autoDepsOptions === !1 ? [] : [(0, import_vxrn.autoDepOptimizePlugin)({ onScannedDeps(param) { var { hasReanimated, hasNativewind } = param, _options_native, _options_native_css; (0, import_compiler.configureVXRNCompilerPlugin)({ enableReanimated: hasReanimated, enableNativeCSS: (_options_native_css = (_options_native = options.native) === null || _options_native === void 0 ? void 0 : _options_native.css) !== null && _options_native_css !== void 0 ? _options_native_css : hasNativewind, enableNativewind: hasNativewind }); }, root, include: /node_modules/, ...(autoDepsOptions === !0 ? {} : autoDepsOptions) })]), // proxy because you cant add a plugin inside a plugin new Proxy({ name: "one:tsconfig-paths", config(configIncoming) { var _options_config2, _configIncoming_plugins, pathsConfig = (_options_config2 = options.config) === null || _options_config2 === void 0 ? void 0 : _options_config2.tsConfigPaths; if (pathsConfig !== !1 && !(!((_configIncoming_plugins = configIncoming.plugins) === null || _configIncoming_plugins === void 0) && _configIncoming_plugins.flat().some(function (p) { return p && p.name === "vite-tsconfig-paths"; }))) { var skipDotDirs = function (dir) { var name = dir.split("/").pop() || ""; return name.startsWith("."); }; tsConfigPathsPlugin = (0, import_vite_tsconfig_paths.default)({ skip: skipDotDirs, ...(pathsConfig && (typeof pathsConfig > "u" ? "undefined" : _type_of(pathsConfig)) === "object" ? pathsConfig : {}) }); } }, configResolved() {}, resolveId() {} }, { get(target, key, thisArg) { if (key === "config" || key === "name") return Reflect.get(target, key, thisArg); if (tsConfigPathsPlugin) return Reflect.get(tsConfigPathsPlugin, key, thisArg); } }), { 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"), 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 }) } } }; } }, // [ // { // find: /tslib/, // replacement: resolvePath('@vxrn/tslib-lite'), // }, // // not working but would save ~30Kb stat // // { // // find: /@react-navigation\/core.*\/getStateFromPath/, // // replacement: join(forkPath, 'fork', 'getStateFromPath.mjs'), // // }, // // { // // find: /@react-navigation\/core.*\/getPathFromState/, // // replacement: join(forkPath, 'fork', 'getPathFromState.mjs'), // // }, // ], { name: "one:init-config", config() { var _options_web; return { define: { // we define this not in environment.client because there must be a bug in vite // it doesnt define the import.meta.env at all if you do that "process.env.TAMAGUI_ENVIRONMENT": '"client"', "process.env.VITE_ENVIRONMENT": '"client"', "import.meta.env.VITE_ENVIRONMENT": '"client"', "process.env.VITE_PLATFORM": '"web"', "import.meta.env.VITE_PLATFORM": '"web"', "process.env.EXPO_OS": '"web"', "import.meta.env.EXPO_OS": '"web"', ...(((_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) }), ...function () { if (!options.setupFile) return {}; var setupFiles; return typeof options.setupFile == "string" ? setupFiles = { client: options.setupFile, server: options.setupFile, ios: options.setupFile, android: options.setupFile } : "native" in options.setupFile ? setupFiles = { client: options.setupFile.client, server: options.setupFile.server, ios: options.setupFile.native, android: options.setupFile.native } : setupFiles = options.setupFile, { ...(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) }) }; }(), ...(process.env.NODE_ENV !== "production" && vxrnOptions && { "process.env.ONE_SERVER_URL": JSON.stringify(vxrnOptions.server.url), "import.meta.env.ONE_SERVER_URL": JSON.stringify(vxrnOptions.server.url) }) }, environments: { // we define client vars not in environment.client because there must be a bug in vite // it doesnt define the import.meta.env at all if you do that // client: { // define: { // }, // }, ssr: { define: { "process.env.TAMAGUI_ENVIRONMENT": '"ssr"', "process.env.VITE_ENVIRONMENT": '"ssr"', // Note that we are also setting `process.env.VITE_ENVIRONMENT = 'ssr'` for this current process. See `setServerGlobals()` and `setupServerGlobals.ts`. "import.meta.env.VITE_ENVIRONMENT": '"ssr"', "process.env.VITE_PLATFORM": '"web"', "import.meta.env.VITE_PLATFORM": '"web"', "process.env.EXPO_OS": '"web"', "import.meta.env.EXPO_OS": '"web"' } }, ios: { define: { "process.env.TAMAGUI_ENVIRONMENT": '"ios"', "process.env.VITE_ENVIRONMENT": '"ios"', "import.meta.env.VITE_ENVIRONMENT": '"ios"', "process.env.VITE_PLATFORM": '"native"', "import.meta.env.VITE_PLATFORM": '"native"', "process.env.EXPO_OS": '"ios"', "import.meta.env.EXPO_OS": '"ios"' } }, android: { define: { "process.env.TAMAGUI_ENVIRONMENT": '"android"', "process.env.VITE_ENVIRONMENT": '"android"', "import.meta.env.VITE_ENVIRONMENT": '"android"', "process.env.VITE_PLATFORM": '"native"', "import.meta.env.VITE_PLATFORM": '"native"', "process.env.EXPO_OS": '"android"', "import.meta.env.EXPO_OS": '"android"' } } } }; } }, { 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 } = param; return modules.map(function (m) { var { id } = m; if (!id) return m; var relativePath = import_path.default.relative(server.config.root, id), rootDir = relativePath.split(import_path.default.sep)[0]; return rootDir === "app" && (m.acceptedHmrExports = /* @__PURE__ */new Set()), m; }); } }, // 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" && id.includes("one-server-only")) return code.replace('import { AsyncLocalStorage } from "node:async_hooks"', "class AsyncLocalStorage {}"); } }], nativeWebDevAndProdPlugsin = [(0, import_clientTreeShakePlugin.clientTreeShakePlugin)()]; globalThis.__vxrnAddNativePlugins = nativeWebDevAndProdPlugsin, globalThis.__vxrnAddWebPluginsProd = devAndProdPlugins; var flags = { experimentalPreventLayoutRemounting: (_options_router = options.router) === null || _options_router === void 0 || (_options_router_experimental = _options_router.experimental) === null || _options_router_experimental === void 0 ? void 0 : _options_router_experimental.preventLayoutRemounting }; return [...vxrnPlugins, ...devAndProdPlugins, ...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.deps), (0, import_virtualEntryPlugin.createVirtualEntry)({ ...options, flags, root: routerRoot }), { name: "one-define-environment", config() { var _options_native; return { define: { ...(((_options_native = options.native) === null || _options_native === void 0 ? void 0 : _options_native.key) && { "process.env.ONE_APP_NAME": JSON.stringify(options.native.key), "import.meta.env.ONE_APP_NAME": JSON.stringify(options.native.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] })]; } //# sourceMappingURL=one.native.js.map