one
Version:
One is a new React Framework that makes Vite serve both native and web.
216 lines (214 loc) • 10.4 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 common_exports = {};
__export(common_exports, {
ViewSlot: () => ViewSlot,
stateToAction: () => stateToAction,
triggersToScreens: () => triggersToScreens
});
module.exports = __toCommonJS(common_exports);
var import_jsx_runtime = require("react/jsx-runtime"),
import_href = require("../link/href.native.js"),
import_sortRoutes = require("../router/sortRoutes.native.js"),
import_Slot = require("./Slot.native.js"),
import_useScreens = require("../router/useScreens.native.js"),
ViewSlot = import_Slot.Slot;
function resolveHrefWithSegments(href, routeInfo, segmentsWithoutGroups) {
if (href.startsWith("./") || href.startsWith("../")) {
var basePath = "/" + segmentsWithoutGroups.join("/"),
baseDir = basePath.replace(/\/[^/]*$/, "") || "/",
parts = (baseDir + "/" + href).split("/"),
resolved = [],
_iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = parts[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var part = _step.value;
part === "." || part === "" || (part === ".." ? resolved.pop() : resolved.push(part));
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_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 = [],
_iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _loop = function () {
var trigger = _step.value,
_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") return configs.push(trigger), "continue";
var resolvedHref = (0, import_href.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 || (_linking_getStateFromPath = _linking_getStateFromPath1.call(linking, resolvedHref, linking.config)) === null || _linking_getStateFromPath === void 0 ? void 0 : _linking_getStateFromPath.routes[0];
if (!state) return console.warn(`Unable to find screen for trigger ${JSON.stringify(trigger)}. Does this point to a valid screen?`), "continue";
var routeState = state;
if (routeState.name === "+not-found") return process.env.NODE_ENV !== "production" && console.warn(`Tab trigger '${trigger.name}' has the href '${trigger.href}' which points to a +not-found route.`), "continue";
for (var targetStateName = layoutRouteNode.route || "__root"; state?.state && state.name !== targetStateName;) {
var _state_state_index;
state = state.state.routes[(_state_state_index = state.state.index) !== null && _state_state_index !== void 0 ? _state_state_index : state.state.routes.length - 1];
}
var _state_state_index1;
routeState = ((_state_state = state.state) === null || _state_state === void 0 ? void 0 : _state_state.routes[(_state_state_index1 = state.state.index) !== null && _state_state_index1 !== void 0 ? _state_state_index1 : state.state.routes.length - 1]) || state;
var routeNode = layoutRouteNode.children.find(function (child) {
return child.route === routeState?.name;
});
if (!routeNode) return console.warn(`Unable to find routeNode for trigger ${JSON.stringify(trigger)}. This might be a bug in One router`), "continue";
var duplicateTrigger = trigger.type === "internal" && configs.find(function (config) {
return config.type === "external" ? !1 : 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)
});
}, _iterator = triggers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) _loop();
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
var sortFn = (0, import_sortRoutes.sortRoutesWithInitial)(initialRouteName),
sortedConfigs = configs.sort(function (a, b) {
return a.type === "external" && b.type === "external" ? 0 : a.type === "external" ? 1 : b.type === "external" ? -1 : sortFn(a.routeNode, b.routeNode);
}),
children = [],
triggerMap = {
...parentTriggerMap
},
_iteratorNormalCompletion1 = !0,
_didIteratorError1 = !1,
_iteratorError1 = void 0;
try {
for (var _loop1 = function () {
var [index, config] = _step1.value;
if (triggerMap[config.name] = {
...config,
index
}, config.type === "internal") {
var route = config.routeNode;
children.push(/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_useScreens.Screen, {
getId: (0, import_useScreens.createGetIdForRoute)(route),
name: route.route,
options: function (args) {
var _route_loadRoute,
staticOptions = route.generated ? (_route_loadRoute = route.loadRoute()) === null || _route_loadRoute === void 0 ? void 0 : _route_loadRoute.getNavOptions : null,
staticResult = typeof staticOptions == "function" ? staticOptions(args) : staticOptions,
output = {
...staticResult
};
return route.generated && (output.tabBarButton = function () {
return null;
}, output.drawerItemStyle = {
height: 0,
display: "none"
}), output;
},
getComponent: function () {
return (0, import_useScreens.getQualifiedRouteComponent)(route);
}
}, route.route));
}
}, _iterator1 = sortedConfigs.entries()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) _loop1();
} catch (err) {
_didIteratorError1 = !0, _iteratorError1 = err;
} finally {
try {
!_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
} finally {
if (_didIteratorError1) throw _iteratorError1;
}
}
return {
children,
triggerMap
};
}
function stateToAction(state, startAtRoute) {
var rootPayload = {},
payload = rootPayload;
startAtRoute = startAtRoute === "" ? "__root" : startAtRoute;
for (var foundStartingPoint = startAtRoute === void 0 || !state?.state; state;) if (foundStartingPoint) {
var _state_state, _state_state1;
if (payload === rootPayload ? payload.name = state.name : 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], state) {
var _payload, _params;
(_params = (_payload = payload).params) !== null && _params !== void 0 || (_payload.params = {}), payload = payload.params;
}
} else {
var _state_state2, _state_state3;
state.name === startAtRoute && (foundStartingPoint = !0);
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];
nextState && (state = nextState);
}
return {
type: "JUMP_TO",
payload: rootPayload
};
}
//# sourceMappingURL=common.native.js.map