one
Version:
One is a new React Framework that makes Vite serve both native and web.
137 lines (130 loc) • 5.39 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
var virtualEntryPlugin_exports = {};
__export(virtualEntryPlugin_exports, {
createVirtualEntry: () => createVirtualEntry
});
module.exports = __toCommonJS(virtualEntryPlugin_exports);
var import_compiler = require("@vxrn/compiler"), import_vxrn = require("vxrn"), import_glob_patterns = require("../../router/glob-patterns"), import_virtualEntryConstants = require("./virtualEntryConstants");
function normalizeSetupFile(setupFile) {
if (!setupFile) return {};
if (typeof setupFile == "string")
return {
client: setupFile,
server: setupFile,
ios: setupFile,
android: setupFile
};
if ("native" in setupFile)
return {
client: setupFile.client,
server: setupFile.server,
ios: setupFile.native,
android: setupFile.native
};
const sf = setupFile;
return {
client: sf.client,
server: sf.server,
ios: sf.ios,
android: sf.android
};
}
function getSetupFileImport(environmentName, setupFiles, useStaticImport) {
const key = {
client: "client",
ssr: "server",
ios: "ios",
android: "android"
}[environmentName];
if (!key) return { importStatement: "", promiseDeclaration: "", promiseVarName: "" };
const setupFile = setupFiles[key];
return setupFile ? useStaticImport ? {
importStatement: `import ${JSON.stringify(setupFile)}`,
promiseDeclaration: "",
promiseVarName: ""
} : {
importStatement: "",
promiseDeclaration: `const __oneSetupPromise = import(/* @vite-ignore */ ${JSON.stringify(setupFile)})`,
promiseVarName: "__oneSetupPromise"
} : { importStatement: "", promiseDeclaration: "", promiseVarName: "" };
}
function createVirtualEntry(options) {
const routeGlobs = [
`/${options.root}/${import_glob_patterns.ROUTE_GLOB_PATTERN}`,
...options.router?.ignoredRouteFiles?.map(
(pattern) => `!/${options.root}/${pattern}`
) || []
], apiRouteGlobs = `/${options.root}/${import_glob_patterns.API_ROUTE_GLOB_PATTERN}`, setupFiles = normalizeSetupFile(options.setupFile);
return {
name: "one-virtual-entry",
enforce: "pre",
resolveId(id) {
if (id === import_virtualEntryConstants.virtualEntryId)
return import_virtualEntryConstants.resolvedVirtualEntryId;
if (id === import_virtualEntryConstants.virtualEntryIdNative)
return import_virtualEntryConstants.resolvedVirtualEntryIdNative;
},
load(id) {
if (id === import_virtualEntryConstants.resolvedVirtualEntryId) {
const isNative = (0, import_vxrn.isNativeEnvironment)(this.environment), setupResult = getSetupFileImport(
this.environment.name,
setupFiles,
isNative
), nativewindImport = import_compiler.configuration.enableNativewind ? "import 'react-native-css-interop/dist/runtime/components'" : "", setupPromiseArg = setupResult.promiseVarName ? `setupPromise: ${setupResult.promiseVarName},` : "";
return `
${setupResult.importStatement}
${setupResult.promiseDeclaration}
${nativewindImport}
import { createApp, registerPreloadedRoute as _registerPreloadedRoute } from 'one'
// Export registerPreloadedRoute so preload files can import it from this bundle
// Named export that wraps the original function
export function registerPreloadedRoute(key, module) {
return _registerPreloadedRoute(key, module)
}
// Also expose on window for debugging and to prevent tree-shaking
if (typeof window !== 'undefined') {
window.__oneRegisterPreloadedRoute = registerPreloadedRoute
}
// globbing ${JSON.stringify(routeGlobs)}
export default createApp({
${setupPromiseArg}
routes: import.meta.glob(${JSON.stringify([...routeGlobs, ...import_glob_patterns.ROUTE_WEB_EXCLUSION_GLOB_PATTERNS.map((p) => `!${p}`)])}, { exhaustive: true }),
routerRoot: ${JSON.stringify(options.root)},
flags: ${JSON.stringify(options.flags)},
})
`;
}
if (id === import_virtualEntryConstants.resolvedVirtualEntryIdNative) {
const isNative = (0, import_vxrn.isNativeEnvironment)(this.environment);
return `
${getSetupFileImport(
this.environment.name,
setupFiles,
isNative
).importStatement}
import { createApp } from 'one'
// globbing ${JSON.stringify(routeGlobs)}
export default createApp({
routes: import.meta.glob(${JSON.stringify([...routeGlobs, ...import_glob_patterns.ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS.map((p) => `!${p}`), `!${apiRouteGlobs}`])}, { exhaustive: true }),
routerRoot: ${JSON.stringify(options.root)},
flags: ${JSON.stringify(options.flags)},
})
`;
}
}
};
}
//# sourceMappingURL=virtualEntryPlugin.js.map