UNPKG

one

Version:

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

1,988 lines 69.5 kB
var import_immer = require("immer"); var import_vitest = require("vitest"); var import_findFocusedRoute = require("../findFocusedRoute.cjs"); var import_getPathFromState = require("../getPathFromState.cjs"); var import_getStateFromPath = require("../getStateFromPath.cjs"); const changePath = (state, path) => (0, import_immer.produce)(state, draftState => { const route = (0, import_findFocusedRoute.findFocusedRoute)(draftState); route.path = path; }); (0, import_vitest.test)("returns undefined for invalid path", () => { (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)("//")).toBeUndefined(); }); import_vitest.test.skip("converts path string to initial state", () => { const path = "foo/bar/baz%20qux?author=jane%20%26%20co&valid=true"; const state = { routes: [{ name: "foo", state: { routes: [{ name: "bar", state: { routes: [{ name: "baz qux", params: { author: "jane & co", valid: "true" }, path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state))).toEqual(changePath(state, "/foo/bar/baz%20qux?author=jane%20%26%20co&valid=true")); }); import_vitest.test.skip("decodes encoded params in path", () => { const path = "/foo/bar/bar_%23_foo"; const config = { screens: { Foo: { path: "foo", screens: { Bar: { path: "/bar/:id" } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Bar", params: { id: "bar_#_foo" }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toEqual(path); }); import_vitest.test.skip("decodes encoded params in path that have encoded /", () => { const path = "/foo/bar/bar_%2F_foo"; const config = { screens: { Foo: { path: "foo", screens: { Bar: { path: "/bar/:id" } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Bar", params: { id: "bar_/_foo" }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toEqual(path); }); import_vitest.test.skip("converts path string to initial state with config", () => { const path = "/foo/bar/sweet/apple/baz/jane?count=10&answer=42&valid=true"; const config = { screens: { Foo: { path: "foo", screens: { Bar: { path: "bar/:type/:fruit", screens: { Baz: { path: "baz/:author", parse: { author: author => author.replace(/^\w/, c => c.toUpperCase()), count: Number, valid: Boolean }, stringify: { author: author => author.toLowerCase() } } } } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Bar", params: { fruit: "apple", type: "sweet" }, state: { routes: [{ name: "Baz", params: { author: "Jane", count: 10, answer: "42", valid: true }, path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles leading slash when converting", () => { const path = "/foo/bar/?count=42"; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path)).toEqual({ routes: [{ name: "foo", key: "foo-0", state: { routes: [{ name: "bar", key: "bar-1", params: { count: "42" }, path }] } }] }); }); (0, import_vitest.test)("handles ending slash when converting", () => { const path = "foo/bar/?count=42"; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path)).toEqual({ routes: [{ name: "foo", key: "foo-0", state: { routes: [{ name: "bar", key: "bar-1", params: { count: "42" }, path }] } }] }); }); (0, import_vitest.test)("handles route without param", () => { const path = "foo/bar"; const state = { routes: [{ name: "foo", key: "foo-0", state: { routes: [{ name: "bar", key: "bar-1", path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state))).toEqual(changePath(state, "/foo/bar")); }); import_vitest.test.skip("converts path string to initial state with config with nested screens", () => { const path = "/foe/bar/sweet/apple/baz/jane?count=10&answer=42&valid=true"; const config = { screens: { Foo: { path: "foo", screens: { Foe: { path: "foe", exact: true, screens: { Bar: { path: "bar/:type/:fruit", screens: { Baz: { path: "baz/:author", parse: { author: author => author.replace(/^\w/, c => c.toUpperCase()), count: Number, valid: Boolean }, stringify: { author: author => author.toLowerCase() } } } } } } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Foe", state: { routes: [{ name: "Bar", params: { fruit: "apple", type: "sweet" }, state: { routes: [{ name: "Baz", params: { author: "Jane", count: 10, answer: "42", valid: true }, path }] } }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("converts path string to initial state with config with nested screens and unused parse functions", () => { const path = "/foe/baz/jane?count=10&answer=42&valid=true"; const config = { screens: { Foo: { path: "foo", screens: { Foe: { path: "foe", exact: true, screens: { Baz: { path: "baz/:author", parse: { author: author => author.replace(/^\w/, c => c.toUpperCase()), count: Number, valid: Boolean, id: Boolean } } } } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Foe", state: { routes: [{ name: "Baz", params: { author: "Jane", count: 10, answer: "42", valid: true }, path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "/foe/baz/Jane?count=10&answer=42&valid=true")); }); import_vitest.test.skip("handles nested object with unused configs and with parse in it", () => { const path = "/bar/sweet/apple/foe/bis/jane?count=10&answer=42&valid=true"; const config = { screens: { Bar: { path: "bar/:type/:fruit", screens: { Foo: { screens: { Foe: { path: "foe", screens: { Baz: { screens: { Bos: { path: "bos", exact: true }, Bis: { path: "bis/:author", stringify: { author: author => author.replace(/^\w/, c => c.toLowerCase()) }, parse: { author: author => author.replace(/^\w/, c => c.toUpperCase()), count: Number, valid: Boolean } } } } } } } } } } } }; const state = { routes: [{ name: "Bar", params: { fruit: "apple", type: "sweet" }, state: { routes: [{ name: "Foo", state: { routes: [{ name: "Foe", state: { routes: [{ name: "Baz", state: { routes: [{ name: "Bis", params: { author: "Jane", count: 10, answer: "42", valid: true }, path }] } }] } }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles parse in nested object for second route depth", () => { const path = "/baz"; const config = { screens: { Foo: { path: "foo", screens: { Foe: { path: "foe", exact: true }, Bar: { path: "bar", exact: true, screens: { Baz: { path: "baz", exact: true } } } } } } }; const state = { routes: [{ name: "Foo", key: "Foo-0", state: { routes: [{ name: "Bar", key: "Bar-1", state: { routes: [{ name: "Baz", key: "Baz-2", path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles parse in nested object for second route depth and and path and parse in roots", () => { const path = "/baz"; const config = { screens: { Foo: { path: "foo/:id", parse: { id: Number }, stringify: { id: id => `id=${id}` }, screens: { Foe: "foe", Bar: { screens: { Baz: { path: "baz", exact: true } } } } } } }; const state = { routes: [{ name: "Foo", key: "Foo-0", state: { routes: [{ name: "Bar", key: "Bar-1", state: { routes: [{ name: "Baz", key: "Baz-2", path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles path at top level", () => { const path = "/foo/fruits/apple"; const config = { path: "foo", screens: { Foo: { screens: { Fruits: "fruits/:fruit" } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Fruits", params: { fruit: "apple" }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles initialRouteName at top level", () => { const path = "/baz"; const config = { initialRouteName: "Boo", screens: { Foo: { screens: { Foe: "foe", Bar: { screens: { Baz: "baz" } } } } } }; const state = { index: 1, routes: [{ name: "Boo", key: "Boo-0" }, { name: "Foo", key: "Foo-1", state: { routes: [{ name: "Bar", key: "Bar-2", state: { routes: [{ name: "Baz", key: "Baz-3", path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles initialRouteName inside a screen", () => { const path = "/baz"; const config = { screens: { Foo: { initialRouteName: "Foe", screens: { Foe: "foe", Bar: { screens: { Baz: "baz" } } } } } }; const state = { routes: [{ name: "Foo", key: "Foo-0", state: { index: 1, routes: [{ name: "Foe", key: "Foe-1" }, { name: "Bar", key: "Bar-2", state: { routes: [{ name: "Baz", key: "Baz-3", path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles initialRouteName included in path", () => { const path = "/baz"; const config = { screens: { Foo: { initialRouteName: "Foe", screens: { Foe: { screens: { Baz: "baz" } }, Bar: "bar" } } } }; const state = { routes: [{ name: "Foo", key: "Foo-0", state: { routes: [{ name: "Foe", key: "Foe-1", state: { routes: [{ name: "Baz", key: "Baz-2", path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles two initialRouteNames", () => { const path = "/bar/sweet/apple/foe/bis/jane?answer=42&count=10&valid=true"; const config = { screens: { Bar: { path: "bar/:type/:fruit", screens: { Foo: { screens: { Foe: { path: "foe", screens: { Baz: { initialRouteName: "Bos", screens: { Bos: { path: "bos", exact: true }, Bis: { path: "bis/:author", stringify: { author: author => author.replace(/^\w/, c => c.toLowerCase()) }, parse: { author: author => author.replace(/^\w/, c => c.toUpperCase()), count: Number, valid: Boolean } } } } } } } } } } } }; const state = { routes: [{ name: "Bar", params: { fruit: "apple", type: "sweet" }, state: { routes: [{ name: "Foo", state: { routes: [{ name: "Foe", state: { routes: [{ name: "Baz", state: { index: 1, routes: [{ name: "Bos" }, { name: "Bis", params: { answer: "42", author: "Jane", count: 10, valid: true }, path }] } }] } }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("accepts initialRouteName without config for it", () => { const path = "/bar/sweet/apple/foe/bis/jane?answer=42&count=10&valid=true"; const config = { screens: { Bar: { path: "bar/:type/:fruit", screens: { Foo: { screens: { Foe: { path: "foe", screens: { Baz: { initialRouteName: "Bas", screens: { Bos: { path: "bos", exact: true }, Bis: { path: "bis/:author", stringify: { author: author => author.replace(/^\w/, c => c.toLowerCase()) }, parse: { author: author => author.replace(/^\w/, c => c.toUpperCase()), count: Number, valid: Boolean } } } } } } } } } } } }; const state = { routes: [{ name: "Bar", params: { fruit: "apple", type: "sweet" }, state: { routes: [{ name: "Foo", state: { routes: [{ name: "Foe", state: { routes: [{ name: "Baz", state: { index: 1, routes: [{ name: "Bas" }, { name: "Bis", params: { answer: "42", author: "Jane", count: 10, valid: true }, path }] } }] } }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("returns undefined if no matching screen is present (top level path)", () => { const path = "/foo/bar"; const config = { path: "qux", screens: { Foo: { screens: { Foe: "foo", Bar: { screens: { Baz: "bar" } } } } } }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toBeUndefined(); }); (0, import_vitest.test)("returns undefined if no matching screen is present", () => { const path = "/baz"; const config = { screens: { Foo: { path: "foo", screens: { Foe: "foe", Bar: { screens: { Baz: "baz" } } } } } }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toBeUndefined(); }); (0, import_vitest.test)("returns undefined if path is empty and no matching screen is present", () => { const path = ""; const config = { screens: { Foo: { screens: { Foe: "foe", Bar: { screens: { Baz: "baz" } } } } } }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toBeUndefined(); }); import_vitest.test.skip("returns matching screen if path is empty", () => { const path = ""; const config = { screens: { Foo: { screens: { Foe: "foe", Bar: { screens: { Qux: "", Baz: "baz" } } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Bar", state: { routes: [{ name: "Qux", path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "")); }); import_vitest.test.skip("returns matching screen if path is only slash", () => { const path = "/"; const config = { screens: { Foo: { screens: { Foe: "foe", Bar: { screens: { Qux: "", Baz: "baz" } } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Bar", state: { routes: [{ name: "Qux", path: "" }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "")); }); (0, import_vitest.test)("returns matching screen with params if path is empty", () => { const path = "?foo=42"; const config = { screens: { Foo: { screens: { Foe: "foe", Bar: { screens: { Qux: { path: "", parse: { foo: Number } }, Baz: "baz" } } } } } }; const state = { routes: [{ name: "Foo", key: "Foo-0", state: { routes: [{ name: "Bar", key: "Bar-1", state: { routes: [{ name: "Qux", key: "Qux-2", params: { foo: 42 }, path }] } }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "/?foo=42")); }); (0, import_vitest.test)("doesn't match nested screen if path is empty", () => { const config = { screens: { Foo: { screens: { Foe: "foe", Bar: { path: "bar", screens: { Qux: { path: "", parse: { foo: Number } } } } } } } }; const path = ""; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toBeUndefined(); }); import_vitest.test.skip("chooses more exhaustive pattern", () => { const path = "/foo/5"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bis", params: { id: 5 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); (0, import_vitest.test)("handles same paths beginnings", () => { const path = "/foos"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos" } } } } }; const state = { routes: [{ name: "Foe", key: "Foe-0", state: { index: 1, routes: [{ name: "Foo", key: "Foo-1" }, { name: "Bis", key: "Bis-2", path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles same paths beginnings with params", () => { const path = "/foos/5"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos/:id", parse: { id: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bis", params: { id: 5 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles not taking path with too many segments", () => { const path = "/foos/5"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip", parse: { id: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bis", params: { id: 5 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles differently ordered params v1", () => { const path = "/foos/5/res/20"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos/:id", parse: { id: Number } }, Bas: { path: "foos/:id/res/:pwd", parse: { id: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, pwd: 20 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles differently ordered params v2", () => { const path = "/5/20/foos/res"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos/:id", parse: { id: Number } }, Bas: { path: ":id/:pwd/foos/res", parse: { id: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, pwd: 20 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles differently ordered params v3", () => { const path = "/foos/5/20/res"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:pwd/res", parse: { id: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, pwd: 20 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handles differently ordered params v4", () => { const path = "5/foos/res/20"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foos/:id", parse: { id: Number } }, Bas: { path: ":id/foos/res/:pwd", parse: { id: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, pwd: 20 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "/5/foos/res/20")); }); import_vitest.test.skip("handles simple optional params", () => { const path = "/foos/5"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?", parse: { id: Number, nip: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle 2 optional params at the end v1", () => { const path = "/foos/5"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?/:pwd?", parse: { id: Number, nip: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle 2 optional params at the end v2", () => { const path = "/foos/5/10"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?/:pwd?", parse: { id: Number, nip: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, nip: 10 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle 2 optional params at the end v3", () => { const path = "/foos/5/10/15"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?/:pwd?", parse: { id: Number, nip: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, nip: 10, pwd: 15 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle optional params in the middle v1", () => { const path = "/foos/5/10"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?/:pwd", parse: { id: Number, nip: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, pwd: 10 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle optional params in the middle v2", () => { const path = "/foos/5/10/15"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?/:pwd", parse: { id: Number, nip: Number, pwd: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, nip: 10, pwd: 15 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle optional params in the middle v3", () => { const path = "/foos/5/10/15"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:id/:nip?/:pwd/:smh", parse: { id: Number, nip: Number, pwd: Number, smh: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { id: 5, pwd: 10, smh: 15 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle optional params in the middle v4", () => { const path = "/foos/5/10"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:nip?/:pwd/:smh?/:id", parse: { id: Number, nip: Number, pwd: Number, smh: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { pwd: 5, id: 10 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle optional params in the middle v5", () => { const path = "/foos/5/10/15"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: "foos/:nip?/:pwd/:smh?/:id", parse: { id: Number, nip: Number, pwd: Number, smh: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { nip: 5, pwd: 10, id: 15 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("handle optional params in the beginning v1", () => { const path = "5/10/foos/15"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: ":nip?/:pwd/foos/:smh?/:id", parse: { id: Number, nip: Number, pwd: Number, smh: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { nip: 5, pwd: 10, id: 15 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "/5/10/foos/15")); }); import_vitest.test.skip("handle optional params in the beginning v2", () => { const path = "5/10/foos/15"; const config = { screens: { Foe: { path: "/", initialRouteName: "Foo", screens: { Foo: "foo", Bis: { path: "foo/:id", parse: { id: Number } }, Bas: { path: ":nip?/:smh?/:pwd/foos/:id", parse: { id: Number, nip: Number, pwd: Number, smh: Number } } } } } }; const state = { routes: [{ name: "Foe", state: { index: 1, routes: [{ name: "Foo" }, { name: "Bas", params: { nip: 5, pwd: 10, id: 15 }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "/5/10/foos/15")); }); import_vitest.test.skip("merges parent patterns if needed", () => { const path = "foo/42/baz/babel"; const config = { screens: { Foo: { path: "foo/:bar", parse: { bar: Number }, screens: { Baz: "baz/:qux" } } } }; const state = { routes: [{ name: "Foo", params: { bar: 42 }, state: { routes: [{ name: "Baz", params: { qux: "babel" }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(changePath(state, "/foo/42/baz/babel")); }); import_vitest.test.skip("ignores extra slashes in the pattern", () => { const path = "/bar/42"; const config = { screens: { Foo: { screens: { Bar: { path: "/bar//:id/" } } } } }; const state = { routes: [{ name: "Foo", state: { routes: [{ name: "Bar", params: { id: "42" }, path }] } }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, config), config)).toEqual(state); }); import_vitest.test.skip("matches wildcard patterns at root", () => { const path = "/test/bar/42/whatever"; const config = { screens: { 404: "*", Foo: { screens: { Bar: { path: "/bar/:id/" } } } } }; const state = { routes: [{ name: "404", path }] }; (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)(path, config)).toEqual(state); (0, import_vitest.expect)((0, import_getStateFromPath.getStateFromPath)((0, import_getPathFromState.getPathFromState)(state, con