UNPKG

one

Version:

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

256 lines (255 loc) 10.1 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { resolveHref } from "../link/href.native.js"; import { sortRoutesWithInitial } from "../router/sortRoutes.native.js"; import { createGetIdForRoute, getQualifiedRouteComponent, Screen } from "../router/useScreens.native.js"; import { Slot } from "./Slot.native.js"; var ViewSlot = Slot; function resolveHrefWithSegments(href, routeInfo, segmentsWithoutGroups) { if (href.startsWith("./") || href.startsWith("../")) { var basePath = "/" + segmentsWithoutGroups.join("/"); var baseDir = basePath.replace(/\/[^/]*$/, "") || "/"; var parts = (baseDir + "/" + href).split("/"); var resolved = []; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = parts[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var part = _step.value; if (part === "." || part === "") continue; if (part === "..") { resolved.pop(); } else { resolved.push(part); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return "/" + resolved.join("/"); } return href; } function triggersToScreens(triggers, layoutRouteNode, linking, initialRouteName, parentTriggerMap, routeInfo, contextKey) { var configs = []; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { var _loop = function () { var trigger = _step.value; var _state_state_index; var _linking_getStateFromPath, _linking_getStateFromPath1, _state_state; if (trigger.name in parentTriggerMap) { var parentTrigger = parentTriggerMap[trigger.name]; throw new Error(`Trigger ${JSON.stringify({ name: trigger.name, href: trigger.href })} has the same name as parent trigger ${JSON.stringify({ name: parentTrigger.name, href: parentTrigger.href })}. Triggers must have unique names.`); } if (trigger.type === "external") { configs.push(trigger); return "continue"; } var resolvedHref = resolveHref(trigger.href); if (resolvedHref.startsWith("../")) { throw new Error("Trigger href cannot link to a parent directory"); } var segmentsWithoutGroups = contextKey.split("/").filter(function (segment) { return !(segment.startsWith("(") && segment.endsWith(")")); }); resolvedHref = resolveHrefWithSegments(resolvedHref, routeInfo, segmentsWithoutGroups); var state = (_linking_getStateFromPath1 = linking.getStateFromPath) === null || _linking_getStateFromPath1 === void 0 ? void 0 : (_linking_getStateFromPath = _linking_getStateFromPath1.call(linking, resolvedHref, linking.config)) === null || _linking_getStateFromPath === void 0 ? void 0 : _linking_getStateFromPath.routes[0]; if (!state) { console.warn(`Unable to find screen for trigger ${JSON.stringify(trigger)}. Does this point to a valid screen?`); return "continue"; } var routeState = state; if (routeState.name === "+not-found") { if (process.env.NODE_ENV !== "production") { console.warn(`Tab trigger '${trigger.name}' has the href '${trigger.href}' which points to a +not-found route.`); } return "continue"; } var targetStateName = layoutRouteNode.route || "__root"; while (state === null || state === void 0 ? void 0 : state.state) { var _state_state_index1; if (state.name === targetStateName) break; state = state.state.routes[(_state_state_index1 = state.state.index) !== null && _state_state_index1 !== void 0 ? _state_state_index1 : state.state.routes.length - 1]; } routeState = ((_state_state = state.state) === null || _state_state === void 0 ? void 0 : _state_state.routes[(_state_state_index = state.state.index) !== null && _state_state_index !== void 0 ? _state_state_index : state.state.routes.length - 1]) || state; var routeNode = layoutRouteNode.children.find(function (child) { return child.route === (routeState === null || routeState === void 0 ? void 0 : routeState.name); }); if (!routeNode) { console.warn(`Unable to find routeNode for trigger ${JSON.stringify(trigger)}. This might be a bug in One router`); return "continue"; } var duplicateTrigger = trigger.type === "internal" && configs.find(function (config) { if (config.type === "external") { return false; } return config.routeNode.route === routeNode.route; }); if (duplicateTrigger) { var duplicateTriggerText = `${JSON.stringify({ name: duplicateTrigger.name, href: duplicateTrigger.href })} and ${JSON.stringify({ name: trigger.name, href: trigger.href })}`; throw new Error(`A navigator cannot contain multiple trigger components that map to the same sub-segment. Consider adding a shared group and assigning a group to each trigger. Conflicting triggers: ${duplicateTriggerText}. Both triggers map to route ${routeNode.route}.`); } configs.push({ ...trigger, href: resolvedHref, routeNode, action: stateToAction(state, layoutRouteNode.route) }); }; for (var _iterator = triggers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop(); } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } var sortFn = sortRoutesWithInitial(initialRouteName); var sortedConfigs = configs.sort(function (a, b) { if (a.type === "external" && b.type === "external") { return 0; } else if (a.type === "external") { return 1; } else if (b.type === "external") { return -1; } return sortFn(a.routeNode, b.routeNode); }); var children = []; var triggerMap = { ...parentTriggerMap }; var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0; try { var _loop1 = function () { var [index, config] = _step1.value; triggerMap[config.name] = { ...config, index }; if (config.type === "internal") { var route = config.routeNode; children.push(/* @__PURE__ */_jsx(Screen, { getId: createGetIdForRoute(route), name: route.route, options: function (args) { var _route_loadRoute; var staticOptions = route.generated ? (_route_loadRoute = route.loadRoute()) === null || _route_loadRoute === void 0 ? void 0 : _route_loadRoute.getNavOptions : null; var staticResult = typeof staticOptions === "function" ? staticOptions(args) : staticOptions; var output = { ...staticResult }; if (route.generated) { output.tabBarButton = function () { return null; }; output.drawerItemStyle = { height: 0, display: "none" }; } return output; }, getComponent: function () { return getQualifiedRouteComponent(route); } }, route.route)); } }; for (var _iterator1 = sortedConfigs.entries()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) _loop1(); } catch (err) { _didIteratorError1 = true; _iteratorError1 = err; } finally { try { if (!_iteratorNormalCompletion1 && _iterator1.return != null) { _iterator1.return(); } } finally { if (_didIteratorError1) { throw _iteratorError1; } } } return { children, triggerMap }; } function stateToAction(state, startAtRoute) { var rootPayload = {}; var payload = rootPayload; startAtRoute = startAtRoute === "" ? "__root" : startAtRoute; var foundStartingPoint = startAtRoute === void 0 || !(state === null || state === void 0 ? void 0 : state.state); while (state) { if (foundStartingPoint) { var _state_state, _state_state1; if (payload === rootPayload) { payload.name = state.name; } else { payload.screen = state.name; } payload.params = state.params ? { ...state.params } : {}; state = (_state_state1 = state.state) === null || _state_state1 === void 0 ? void 0 : _state_state1.routes[((_state_state = state.state) === null || _state_state === void 0 ? void 0 : _state_state.routes.length) - 1]; if (state) { var _payload, _params; (_params = (_payload = payload).params) !== null && _params !== void 0 ? _params : _payload.params = {}; payload = payload.params; } } else { var _state_state2, _state_state3; if (state.name === startAtRoute) { foundStartingPoint = true; } var nextState = (_state_state3 = state.state) === null || _state_state3 === void 0 ? void 0 : _state_state3.routes[((_state_state2 = state.state) === null || _state_state2 === void 0 ? void 0 : _state_state2.routes.length) - 1]; if (nextState) { state = nextState; } } } return { type: "JUMP_TO", payload: rootPayload }; } export { ViewSlot, stateToAction, triggersToScreens }; //# sourceMappingURL=common.native.js.map