@jayalfredprufrock/mobx-toolbox 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/router.d.mts CHANGED
@@ -14,14 +14,13 @@ declare class Outlet {
14
14
  state: RouteSegmentState;
15
15
  promise: Promise<unknown> | undefined;
16
16
  data: unknown;
17
- component: Component | undefined;
17
+ private readonly lazyComponent?;
18
18
  get Component(): Component | undefined;
19
19
  constructor(config: OutletConfig);
20
20
  load(route: Route): Promise<void>;
21
21
  setData(data: unknown): void;
22
22
  setState(state: RouteSegmentState): void;
23
23
  private loadData;
24
- private loadComponent;
25
24
  }
26
25
  //#endregion
27
26
  //#region src/router/route.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.mts","names":[],"sources":["../src/router/outlet.tsx","../src/router/route.tsx","../src/router/symbols.ts","../src/router/types.ts","../src/router/components/link.tsx","../src/router/components/navigate.tsx","../src/router/router.store.ts","../src/router/components/router.tsx","../src/router/make-routes.tsx","../src/router/redirect.ts","../src/router/util.ts"],"mappings":"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"}
1
+ {"version":3,"file":"router.d.mts","names":[],"sources":["../src/router/outlet.tsx","../src/router/route.tsx","../src/router/symbols.ts","../src/router/types.ts","../src/router/components/link.tsx","../src/router/components/navigate.tsx","../src/router/router.store.ts","../src/router/components/router.tsx","../src/router/make-routes.tsx","../src/router/redirect.ts","../src/router/util.ts"],"mappings":"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"}
package/dist/router.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { observer } from "mobx-react-lite";
2
- import React, { createContext, useCallback, useContext, useLayoutEffect } from "react";
2
+ import React, { Suspense, createContext, lazy, useCallback, useContext, useLayoutEffect } from "react";
3
3
  import { action, computed, makeAutoObservable, makeObservable, observable, runInAction } from "mobx";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { createBrowserHistory } from "history";
@@ -66,9 +66,12 @@ const Router = observer(({ store }) => {
66
66
  value: store,
67
67
  children: /* @__PURE__ */ jsx(Layout, {
68
68
  route: store.activeRoute,
69
- children: /* @__PURE__ */ jsx(RouterOutlet, {
70
- route: store.activeRoute,
71
- outlets: store.activeRoute.outlets
69
+ children: /* @__PURE__ */ jsx(Suspense, {
70
+ fallback: null,
71
+ children: /* @__PURE__ */ jsx(RouterOutlet, {
72
+ route: store.activeRoute,
73
+ outlets: store.activeRoute.outlets
74
+ })
72
75
  })
73
76
  })
74
77
  });
@@ -115,32 +118,40 @@ const Navigate = (props) => {
115
118
  //#endregion
116
119
  //#region src/router/outlet.tsx
117
120
  const DefaultOutlet = ({ children }) => children;
121
+ const LoadingPlaceholder = () => /* @__PURE__ */ jsx("p", { children: "Loading..." });
118
122
  var Outlet = class {
119
123
  state = "preloading";
120
124
  promise;
121
125
  data;
122
- component;
126
+ lazyComponent;
123
127
  get Component() {
124
128
  switch (this.state) {
125
- case "loading": return function Loading() {
126
- return /* @__PURE__ */ jsx("p", { children: "Loading..." });
127
- };
128
- case "ready": return this.component ?? DefaultOutlet;
129
+ case "loading": return LoadingPlaceholder;
130
+ case "ready":
131
+ if (this.lazyComponent) return this.lazyComponent;
132
+ return this.config.component ?? DefaultOutlet;
129
133
  default: return;
130
134
  }
131
135
  }
132
136
  constructor(config) {
133
137
  this.config = config;
138
+ if (isLazyComponent(config.component)) {
139
+ const importer = config.component;
140
+ this.lazyComponent = lazy(async () => {
141
+ const importResult = await importer();
142
+ for (const exportName in importResult) if (exportName === "default" || exportName.endsWith("Page")) return { default: importResult[exportName] };
143
+ throw new Error("Lazy route component module did not export `default` or a `*Page` named export");
144
+ });
145
+ }
134
146
  makeAutoObservable(this, {
135
147
  promise: observable.ref,
136
148
  data: observable.ref,
137
- component: observable.ref
149
+ lazyComponent: false
138
150
  });
139
151
  }
140
152
  async load(route) {
141
153
  const promises = [];
142
- if (isLazyComponent(this.config.component)) promises.push(this.loadComponent());
143
- else this.component = this.config.component;
154
+ if (isLazyComponent(this.config.component)) promises.push(this.config.component().then(() => void 0));
144
155
  if (this.config.loader) promises.push(this.loadData(route));
145
156
  if (!promises.length) {
146
157
  this.setState("ready");
@@ -170,15 +181,6 @@ var Outlet = class {
170
181
  async loadData(route) {
171
182
  await this.config.loader?.(route).then((data) => this.setData(data));
172
183
  }
173
- async loadComponent() {
174
- if (this.component || !this.config.component) return;
175
- if (isLazyComponent(this.config.component)) {
176
- const importResult = await this.config.component();
177
- runInAction(() => {
178
- for (const exportName in importResult) if (exportName === "default" || exportName.endsWith("Page")) this.component = importResult[exportName];
179
- });
180
- } else this.component = this.config.component;
181
- }
182
184
  };
183
185
 
184
186
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"router.mjs","names":[],"sources":["../src/router/symbols.ts","../src/router/util.ts","../src/router/components/router.tsx","../src/router/components/link.tsx","../src/router/components/navigate.tsx","../src/router/outlet.tsx","../src/router/redirect.ts","../src/router/route.tsx","../src/router/make-routes.tsx","../src/router/router.store.ts"],"sourcesContent":["export const CONTEXT: unique symbol = Symbol.for(\"MOBX_ROUTER_CONTEXT\");\nexport const LAYOUT: unique symbol = Symbol.for(\"MOBX_ROUTER_LAYOUT\");\nexport const WRAPPER: unique symbol = Symbol.for(\"MOBX_ROUTER_WRAPPER\");\nexport const LOAD: unique symbol = Symbol.for(\"MOBX_ROUTER_LOAD\");\nexport const GUARD: unique symbol = Symbol.for(\"MOBX_ROUTER_GUARD\");\nexport const PAGE: unique symbol = Symbol.for(\"MOBX_ROUTER_PAGE\");\nexport const REDIRECT: unique symbol = Symbol.for(\"MOBX_ROUTER_REDIRECT\");\n","import { PAGE, REDIRECT } from \"./symbols\";\nimport type { Component, LazyComponent, Leaf, Obj, Page, Redirector } from \"./types\";\n\nexport const resolvePath = (to: string, params?: Obj): string => {\n return to.replaceAll(/:[^/]*/g, (segment) => {\n const value = params?.[segment.slice(0)];\n if (!value)\n throw new Error(`Unable to resolve route '${to}. Paramater '${segment}' not specified.`);\n return value;\n });\n};\n\nexport const isComponent = (data: any): data is Component => {\n if (!data) return false;\n return (\n typeof data === \"function\" ||\n (typeof data === \"object\" && data[\"$$typeof\"] === Symbol.for(\"react.memo\"))\n );\n};\n\nexport const isPage = (data: any): data is Page => {\n if (typeof data !== \"object\") return false;\n const symbols = Object.getOwnPropertySymbols(data);\n return symbols.includes(PAGE);\n};\n\nexport const isRedirect = (data: any): data is Redirector => {\n if (typeof data !== \"object\") return false;\n const symbols = Object.getOwnPropertySymbols(data);\n return symbols.includes(REDIRECT);\n};\n\nexport const isLeaf = (data: any): data is Leaf => {\n return isComponent(data) || isPage(data) || isRedirect(data);\n};\n\nexport const isLazyComponent = (data: any): data is LazyComponent => {\n return typeof data === \"function\" && data.toString().startsWith(\"() => import(\");\n};\n","import { observer } from \"mobx-react-lite\";\nimport { createContext, useContext } from \"react\";\nimport type { Outlet } from \"../outlet\";\nimport type { Route } from \"../route\";\nimport type { RouterStore } from \"../router.store\";\nimport type { Component } from \"../types\";\n\nexport const PassThrough: Component = ({ children }) => children;\n\nexport const RouterOutlet: React.FC<{ route: Route; outlets: Outlet[] }> = observer(\n ({ route, outlets }) => {\n const [outlet, ...remainingOutlets] = outlets;\n\n if (!outlet) return null;\n\n const C = outlet.Component;\n\n if (!C) return null;\n\n return (\n <C route={route}>\n {remainingOutlets.length > 0 && <RouterOutlet route={route} outlets={remainingOutlets} />}\n </C>\n );\n },\n);\n\nexport const routerContext = createContext<RouterStore>(null as any);\nexport const useRouter = () => useContext(routerContext);\n\nexport interface RouterProps {\n store: RouterStore;\n}\n\nexport const Router = observer(({ store }: RouterProps) => {\n if (!store.activeRoute) {\n return null;\n }\n\n const Layout = store.activeRoute.layout ?? PassThrough;\n\n return (\n <routerContext.Provider value={store}>\n <Layout route={store.activeRoute}>\n <RouterOutlet route={store.activeRoute} outlets={store.activeRoute.outlets} />\n </Layout>\n </routerContext.Provider>\n );\n});\n","import { observer } from \"mobx-react-lite\";\nimport React, { useCallback } from \"react\";\nimport type {\n DynamicRoutePath,\n ExtractParams,\n NavigateOptions,\n RoutePath,\n StaticRoutePath,\n} from \"../types\";\nimport { resolvePath } from \"../util\";\nimport { useRouter } from \"./router\";\n\ntype LinkComponentProps<C extends React.ElementType> = Omit<\n React.ComponentProps<C>,\n \" ref\" | \"exact\" | \"to\" | \"params\" | \"onClick\"\n>;\n\nexport type LinkPropsBase<\n C extends React.ElementType,\n I extends React.ElementType = C,\n> = LinkComponentProps<C> & {\n exact?: boolean;\n ref?: React.Ref<React.ComponentRef<I>>;\n};\n\n// function overloading is much faster than leveraging conditional types\n// but once the typescript go compiler is released and performance is no\n// longer an issue, it might make sense to simplify this a bit so it can\n// be more easily consumed by users\nexport interface LinkComponent<C extends React.ElementType, I extends React.ElementType = C> {\n <P extends StaticRoutePath>(\n props: LinkPropsBase<C, I> & { to: P; params?: undefined },\n ): React.ReactNode;\n <P extends DynamicRoutePath>(\n props: LinkPropsBase<C, I> & { to: P; params: ExtractParams<P> },\n ): React.ReactNode;\n}\n\n// final thing to do is make sure refs still work in React 19\n\n// this smooths over some of the awkwardness when extending this component\nexport const makeLinkComponent = <C extends React.ElementType, I extends React.ElementType = C>(\n C: C,\n baseProps?: Partial<LinkComponentProps<C>> & { as?: I },\n) => {\n return observer(({ to, params, exact, children, ...props }: any) => {\n const router = useRouter();\n const mergedProps = { ...baseProps, ...props };\n\n if (props.role !== \"link\") {\n mergedProps.href = resolvePath(to, params);\n }\n\n if (router.doesPathMatch(to, exact)) {\n mergedProps[\"aria-current\"] = \"page\";\n }\n\n mergedProps.onClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n if (props.disabled) return;\n router.navigate({ to, ...(params as any) } as NavigateOptions<RoutePath>);\n },\n [router, params, to, props.disabled],\n );\n\n return React.createElement(C, mergedProps, children);\n }) as LinkComponent<C, I>;\n};\n\n//export const Link = makeLinkComponent('a');\n","import { useLayoutEffect } from \"react\";\nimport type { NavigateOptions, RoutePath } from \"../types\";\nimport { useRouter } from \"./router\";\n\nexport const Navigate = <P extends RoutePath>(props: NavigateOptions<P>) => {\n const router = useRouter();\n\n useLayoutEffect(() => {\n router.navigate(props);\n }, [router, props]);\n\n return null;\n};\n","import { makeAutoObservable, observable, runInAction } from \"mobx\";\nimport type { Route } from \"./route\";\nimport type { Component, LazyComponent, Loader } from \"./types\";\nimport { isLazyComponent } from \"./util\";\n\nexport interface OutletConfig {\n component?: Component | LazyComponent;\n loader?: Loader;\n}\n\nexport type RouteSegmentState = \"preloading\" | \"loading\" | \"error\" | \"ready\";\n\nexport const DefaultOutlet: Component = ({ children }) => children;\n\nexport class Outlet {\n state: RouteSegmentState = \"preloading\";\n promise: Promise<unknown> | undefined;\n data: unknown;\n component: Component | undefined;\n\n get Component(): Component | undefined {\n switch (this.state) {\n case \"loading\":\n return function Loading() {\n return <p>Loading...</p>;\n };\n\n case \"ready\":\n return this.component ?? DefaultOutlet;\n\n default:\n return undefined;\n }\n }\n\n constructor(readonly config: OutletConfig) {\n makeAutoObservable(this, {\n promise: observable.ref,\n data: observable.ref,\n component: observable.ref,\n });\n }\n\n async load(route: Route): Promise<void> {\n const promises: Promise<void>[] = [];\n\n if (isLazyComponent(this.config.component)) {\n promises.push(this.loadComponent());\n } else {\n this.component = this.config.component;\n }\n\n if (this.config.loader) {\n promises.push(this.loadData(route));\n }\n\n if (!promises.length) {\n this.setState(\"ready\");\n return;\n }\n\n // wait to transition to loading to avoid\n // screen flashes when the loader function\n // executes quickly\n const preloadingTimer = setTimeout(() => {\n if (this.state === \"preloading\") {\n this.setState(\"loading\");\n }\n }, 300);\n\n this.promise = Promise.all(promises)\n .then(() => {\n clearTimeout(preloadingTimer);\n if (this.state === \"loading\") {\n // if we had to transition to regular loading because\n // the loader was taking too long, force an additional\n // timeout to prevent a loading flash\n setTimeout(() => {\n this.setState(\"ready\");\n }, 300);\n } else {\n this.setState(\"ready\");\n }\n })\n .catch(() => {\n clearTimeout(preloadingTimer);\n // TODO: check for type of error\n // handle access denied and redirects\n this.setState(\"error\");\n });\n\n await this.promise;\n }\n\n setData(data: unknown) {\n this.data = data;\n }\n\n setState(state: RouteSegmentState) {\n this.state = state;\n }\n\n private async loadData(route: Route): Promise<void> {\n await this.config.loader?.(route).then((data) => this.setData(data));\n }\n\n private async loadComponent(): Promise<void> {\n if (this.component || !this.config.component) {\n return;\n }\n\n if (isLazyComponent(this.config.component)) {\n const importResult = await this.config.component();\n runInAction(() => {\n for (const exportName in importResult) {\n if (exportName === \"default\" || exportName.endsWith(\"Page\")) {\n this.component = importResult[exportName];\n }\n }\n });\n } else {\n this.component = this.config.component;\n }\n }\n}\n","import type { NavigateOptions, RoutePath } from \"./types\";\n\nexport class Redirect<P extends RoutePath> {\n constructor(readonly options: NavigateOptions<P>) {}\n}\n\nexport const redirect = <P extends RoutePath>(options: NavigateOptions<P>): Redirect<P> =>\n new Redirect(options);\n","import { computed, makeObservable } from \"mobx\";\nimport type { Outlet } from \"./outlet\";\nimport type { Component, Guard, Obj } from \"./types\";\n\nexport interface RouteConfig {\n path: string;\n outlets: Outlet[];\n guards: Guard[];\n context?: Obj;\n layout?: Component;\n params: Obj;\n}\n\nexport class Route {\n readonly path: string;\n readonly outlets: Outlet[];\n readonly guards: Guard[];\n readonly context: Obj;\n readonly params: Obj;\n readonly layout?: Component;\n\n get data(): Obj {\n return Object.assign({}, ...this.outlets.map((o) => o.data));\n }\n\n constructor(def: RouteConfig) {\n this.path = def.path;\n this.guards = def.guards;\n this.context = def.context ?? {};\n this.outlets = def.outlets;\n this.params = def.params;\n this.layout = def.layout;\n\n makeObservable(this, {\n data: computed,\n });\n }\n\n async guard(): Promise<void> {\n for (const guard of this.guards) {\n await guard(this);\n }\n }\n\n async load(): Promise<void> {\n await Promise.all(this.outlets.map((outlet) => outlet.load(this)));\n }\n}\n","import { Outlet } from \"./outlet\";\nimport { Redirect } from \"./redirect\";\nimport { Route } from \"./route\";\nimport { CONTEXT, GUARD, LAYOUT, LOAD, PAGE, REDIRECT, WRAPPER } from \"./symbols\";\nimport type { Component, Guard, Obj, Routes } from \"./types\";\nimport { isComponent, isLazyComponent, isLeaf, isPage, isRedirect } from \"./util\";\n\nconst pathToSegments = (path: string): string[] => {\n return path.replace(/^\\/+|\\/+$/g, \"\").split(\"/\");\n};\n\nexport interface MatchState {\n segments: string[];\n context: Obj;\n params: Obj;\n outlets: (Outlet | undefined)[];\n guards: (Guard | undefined)[];\n layout?: Component;\n}\n\nexport const makeRoute = (matchState: MatchState): Route => {\n const outlets = matchState.outlets.filter((o) => o !== undefined);\n const guards = matchState.guards.filter((g) => g !== undefined);\n\n return new Route({ ...matchState, outlets, guards, path: matchState.segments.join(\"/\") });\n};\n\nexport const matchRoute = (path: string, routeDef: Routes, matchState?: MatchState): Route => {\n const state: MatchState = {\n segments: [],\n params: {},\n ...matchState,\n layout: routeDef[LAYOUT] ?? matchState?.layout,\n context: { ...matchState?.context, ...routeDef[CONTEXT] },\n guards: [...(matchState?.guards ?? []), routeDef[GUARD]],\n outlets: [\n ...(matchState?.outlets ?? []),\n routeDef[WRAPPER] ? new Outlet({ component: routeDef[WRAPPER] }) : undefined,\n routeDef[LOAD] ? new Outlet({ loader: routeDef[LOAD] }) : undefined,\n ],\n };\n\n const [segment, ...remainingSegments] = pathToSegments(path);\n const remainingPath = remainingSegments.join(\"/\");\n\n let defAtSegment = routeDef[segment || \"index\"];\n\n if (!defAtSegment) {\n const matchedSegment = Object.keys(routeDef).find((segment) => segment.startsWith(\"$\"));\n if (matchedSegment) {\n defAtSegment = routeDef[matchedSegment];\n state.params[matchedSegment.slice(1)] = segment;\n }\n }\n\n if (!defAtSegment) {\n throw new Error(\"Not Found.\");\n }\n\n state.segments.push(segment ?? \"index\");\n\n if (isLeaf(defAtSegment)) {\n if (remainingPath) {\n throw new Error(\"Not Found.\");\n }\n\n if (isRedirect(defAtSegment)) {\n const redirect =\n typeof defAtSegment[REDIRECT] === \"string\"\n ? { to: defAtSegment[REDIRECT] }\n : defAtSegment[REDIRECT];\n throw new Redirect(redirect as any);\n }\n\n if (isComponent(defAtSegment) || isLazyComponent(defAtSegment)) {\n state.outlets.push(new Outlet({ component: defAtSegment }));\n return makeRoute(state);\n }\n }\n\n // at this point we have a nested route or a [Page] definition\n\n if (isPage(defAtSegment)) {\n state.layout = defAtSegment[LAYOUT] ?? state.layout;\n Object.assign(state.context, defAtSegment[CONTEXT]);\n state.guards.push(defAtSegment[GUARD]);\n state.outlets.push(\n new Outlet({\n component: defAtSegment[PAGE],\n loader: defAtSegment[LOAD],\n }),\n );\n\n return makeRoute(state);\n }\n\n // now we know we have a nested route\n return matchRoute(remainingPath, defAtSegment, state);\n};\n\n// TODO: ideally this could resolve to something less than R,\n// but specific enough to infer all paths as a literal union.\n// As it stands, there are certain things we can't access reliably\n// without the compiler complaining about circular references\n// try \"as const satisfies\" approach which would allow us to\n// exchange a less specific version of MobxRoutesRoot for this\nexport const makeRoutes =\n () =>\n <R extends Routes>(routes: R): R => {\n // todo: perform some validation here\n // - no forward slashes in keys\n // - at most one variable segment per level\n // - only lowercase letters (except variables)\n // - paths/variables cannot contain $ that aren't at the beginning\n // - path variables must be unique across a path\n\n return routes;\n };\n","import { createBrowserHistory, type History, type Location } from \"history\";\nimport { action, computed, makeObservable, observable, runInAction } from \"mobx\";\nimport { matchRoute } from \"./make-routes\";\nimport { Redirect } from \"./redirect\";\nimport type { Route } from \"./route\";\nimport type { Component, MobxRouterConfig, NavigateOptions, Obj, RoutePath, Routes } from \"./types\";\nimport { resolvePath } from \"./util\";\n\nexport interface MobxRenderSegment {\n segment: string;\n component: Component;\n props?: Obj;\n}\n\nexport class RouterStore {\n readonly history: History;\n\n routesDef?: Routes;\n\n location!: Location;\n activeRoute: Route | undefined;\n\n get search(): URLSearchParams {\n return new URLSearchParams(this.location?.search);\n }\n\n get query(): Record<string, string> {\n return Object.fromEntries(this.search);\n }\n\n get pathParams(): Record<string, string> {\n const params = {} as Record<string, string>;\n\n const paramSegments = this.activeSegments.filter((segment) => segment.startsWith(\"$\"));\n const pathValues = this.location.pathname.split(\"/\").slice(1);\n\n paramSegments.forEach((segment, index) => {\n const value = pathValues[index + 1];\n if (value) {\n params[segment] = value;\n }\n });\n\n return params as Record<string, string>;\n }\n\n get activeSegments(): string[] {\n return this.activeRoute?.path.split(\"/\") ?? [];\n }\n\n constructor(config?: MobxRouterConfig) {\n makeObservable(this, {\n location: observable.ref,\n activeRoute: observable.ref,\n\n search: computed,\n pathParams: computed,\n activeSegments: computed,\n\n setLocation: action,\n });\n\n this.history = config?.history ?? createBrowserHistory();\n }\n\n initialize(routesDef: Routes): void {\n this.routesDef = routesDef;\n this.history.listen((data) => {\n void this.setLocation(data.location);\n });\n\n void this.setLocation(this.history.location);\n }\n\n doesPathMatch<P extends RoutePath>(path: P, exact?: boolean): boolean {\n const segments = path.slice(1).split(\"/\");\n const segmentsMatch = segments.every(\n (segment, i) => segment === this.activeSegments[i] || segment.startsWith(\"$\"),\n );\n\n return (\n segmentsMatch &&\n this.activeSegments.length >= segments.length &&\n (!exact || segments.length === this.activeSegments.length)\n );\n }\n\n navigate<P extends RoutePath>(options: NavigateOptions<P>): void {\n if (!document.startViewTransition) {\n this._navigate(options);\n } else {\n const transition = document.startViewTransition(() => this._navigate(options));\n transition.ready.catch((e) => console.log(e, typeof e));\n }\n }\n\n _navigate<P extends RoutePath>(options: NavigateOptions<P>): void {\n const { to, replace, state, search = {}, preserveSearch, params } = options;\n\n const searchParams = search instanceof URLSearchParams ? search : new URLSearchParams(search);\n\n if (preserveSearch) {\n for (const [name, value] of this.search) {\n if (!searchParams.has(name)) {\n searchParams.set(name, value);\n }\n }\n }\n\n const location = {\n pathname: resolvePath(to, params),\n search: searchParams.size ? `?${searchParams.toString()}` : undefined,\n };\n\n if (replace) {\n this.history.replace(location, state);\n } else {\n this.history.push(location, state);\n }\n }\n\n setQueryParam(param: string, value: string): void {\n this.search.set(param, value);\n this.history.replace({ search: this.search.toString() });\n }\n\n removeQueryParam(param: string): string | undefined {\n const params = new URLSearchParams(this.location.search);\n const value = params.get(param) ?? undefined;\n if (value !== undefined) {\n params.delete(param);\n this.history.replace({ search: params.toString() });\n }\n return value;\n }\n\n async setLocation(location: Location): Promise<void> {\n if (!this.routesDef) return;\n\n // TODO: this should not be the responsibility of mobx-router\n // and should really be handled server-side\n if (location.pathname !== \"/\" && location.pathname.endsWith(\"/\")) {\n this.history.replace({ ...location, pathname: location.pathname.slice(0, -1) });\n return;\n }\n\n this.location = location;\n\n try {\n const matchedRoute = matchRoute(location.pathname, this.routesDef);\n\n await matchedRoute.guard();\n\n // navigating within a guard function\n // is essentially a redirect\n if (this.location !== location) {\n return;\n }\n\n runInAction(() => {\n this.activeRoute = matchedRoute;\n });\n\n await this.activeRoute?.load();\n } catch (e) {\n if (e instanceof Redirect) {\n this.navigate(e.options);\n return;\n }\n throw e;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"router.mjs","names":[],"sources":["../src/router/symbols.ts","../src/router/util.ts","../src/router/components/router.tsx","../src/router/components/link.tsx","../src/router/components/navigate.tsx","../src/router/outlet.tsx","../src/router/redirect.ts","../src/router/route.tsx","../src/router/make-routes.tsx","../src/router/router.store.ts"],"sourcesContent":["export const CONTEXT: unique symbol = Symbol.for(\"MOBX_ROUTER_CONTEXT\");\nexport const LAYOUT: unique symbol = Symbol.for(\"MOBX_ROUTER_LAYOUT\");\nexport const WRAPPER: unique symbol = Symbol.for(\"MOBX_ROUTER_WRAPPER\");\nexport const LOAD: unique symbol = Symbol.for(\"MOBX_ROUTER_LOAD\");\nexport const GUARD: unique symbol = Symbol.for(\"MOBX_ROUTER_GUARD\");\nexport const PAGE: unique symbol = Symbol.for(\"MOBX_ROUTER_PAGE\");\nexport const REDIRECT: unique symbol = Symbol.for(\"MOBX_ROUTER_REDIRECT\");\n","import { PAGE, REDIRECT } from \"./symbols\";\nimport type { Component, LazyComponent, Leaf, Obj, Page, Redirector } from \"./types\";\n\nexport const resolvePath = (to: string, params?: Obj): string => {\n return to.replaceAll(/:[^/]*/g, (segment) => {\n const value = params?.[segment.slice(0)];\n if (!value)\n throw new Error(`Unable to resolve route '${to}. Paramater '${segment}' not specified.`);\n return value;\n });\n};\n\nexport const isComponent = (data: any): data is Component => {\n if (!data) return false;\n return (\n typeof data === \"function\" ||\n (typeof data === \"object\" && data[\"$$typeof\"] === Symbol.for(\"react.memo\"))\n );\n};\n\nexport const isPage = (data: any): data is Page => {\n if (typeof data !== \"object\") return false;\n const symbols = Object.getOwnPropertySymbols(data);\n return symbols.includes(PAGE);\n};\n\nexport const isRedirect = (data: any): data is Redirector => {\n if (typeof data !== \"object\") return false;\n const symbols = Object.getOwnPropertySymbols(data);\n return symbols.includes(REDIRECT);\n};\n\nexport const isLeaf = (data: any): data is Leaf => {\n return isComponent(data) || isPage(data) || isRedirect(data);\n};\n\nexport const isLazyComponent = (data: any): data is LazyComponent => {\n return typeof data === \"function\" && data.toString().startsWith(\"() => import(\");\n};\n","import { observer } from \"mobx-react-lite\";\nimport { createContext, Suspense, useContext } from \"react\";\nimport type { Outlet } from \"../outlet\";\nimport type { Route } from \"../route\";\nimport type { RouterStore } from \"../router.store\";\nimport type { Component } from \"../types\";\n\nexport const PassThrough: Component = ({ children }) => children;\n\nexport const RouterOutlet: React.FC<{ route: Route; outlets: Outlet[] }> = observer(\n ({ route, outlets }) => {\n const [outlet, ...remainingOutlets] = outlets;\n\n if (!outlet) return null;\n\n const C = outlet.Component;\n\n if (!C) return null;\n\n return (\n <C route={route}>\n {remainingOutlets.length > 0 && <RouterOutlet route={route} outlets={remainingOutlets} />}\n </C>\n );\n },\n);\n\nexport const routerContext = createContext<RouterStore>(null as any);\nexport const useRouter = () => useContext(routerContext);\n\nexport interface RouterProps {\n store: RouterStore;\n}\n\nexport const Router = observer(({ store }: RouterProps) => {\n if (!store.activeRoute) {\n return null;\n }\n\n const Layout = store.activeRoute.layout ?? PassThrough;\n\n return (\n <routerContext.Provider value={store}>\n <Layout route={store.activeRoute}>\n <Suspense fallback={null}>\n <RouterOutlet route={store.activeRoute} outlets={store.activeRoute.outlets} />\n </Suspense>\n </Layout>\n </routerContext.Provider>\n );\n});\n","import { observer } from \"mobx-react-lite\";\nimport React, { useCallback } from \"react\";\nimport type {\n DynamicRoutePath,\n ExtractParams,\n NavigateOptions,\n RoutePath,\n StaticRoutePath,\n} from \"../types\";\nimport { resolvePath } from \"../util\";\nimport { useRouter } from \"./router\";\n\ntype LinkComponentProps<C extends React.ElementType> = Omit<\n React.ComponentProps<C>,\n \" ref\" | \"exact\" | \"to\" | \"params\" | \"onClick\"\n>;\n\nexport type LinkPropsBase<\n C extends React.ElementType,\n I extends React.ElementType = C,\n> = LinkComponentProps<C> & {\n exact?: boolean;\n ref?: React.Ref<React.ComponentRef<I>>;\n};\n\n// function overloading is much faster than leveraging conditional types\n// but once the typescript go compiler is released and performance is no\n// longer an issue, it might make sense to simplify this a bit so it can\n// be more easily consumed by users\nexport interface LinkComponent<C extends React.ElementType, I extends React.ElementType = C> {\n <P extends StaticRoutePath>(\n props: LinkPropsBase<C, I> & { to: P; params?: undefined },\n ): React.ReactNode;\n <P extends DynamicRoutePath>(\n props: LinkPropsBase<C, I> & { to: P; params: ExtractParams<P> },\n ): React.ReactNode;\n}\n\n// final thing to do is make sure refs still work in React 19\n\n// this smooths over some of the awkwardness when extending this component\nexport const makeLinkComponent = <C extends React.ElementType, I extends React.ElementType = C>(\n C: C,\n baseProps?: Partial<LinkComponentProps<C>> & { as?: I },\n) => {\n return observer(({ to, params, exact, children, ...props }: any) => {\n const router = useRouter();\n const mergedProps = { ...baseProps, ...props };\n\n if (props.role !== \"link\") {\n mergedProps.href = resolvePath(to, params);\n }\n\n if (router.doesPathMatch(to, exact)) {\n mergedProps[\"aria-current\"] = \"page\";\n }\n\n mergedProps.onClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n if (props.disabled) return;\n router.navigate({ to, ...(params as any) } as NavigateOptions<RoutePath>);\n },\n [router, params, to, props.disabled],\n );\n\n return React.createElement(C, mergedProps, children);\n }) as LinkComponent<C, I>;\n};\n\n//export const Link = makeLinkComponent('a');\n","import { useLayoutEffect } from \"react\";\nimport type { NavigateOptions, RoutePath } from \"../types\";\nimport { useRouter } from \"./router\";\n\nexport const Navigate = <P extends RoutePath>(props: NavigateOptions<P>) => {\n const router = useRouter();\n\n useLayoutEffect(() => {\n router.navigate(props);\n }, [router, props]);\n\n return null;\n};\n","import { makeAutoObservable, observable } from \"mobx\";\nimport { lazy, type LazyExoticComponent } from \"react\";\nimport type { Route } from \"./route\";\nimport type { Component, LazyComponent, Loader } from \"./types\";\nimport { isLazyComponent } from \"./util\";\n\nexport interface OutletConfig {\n component?: Component | LazyComponent;\n loader?: Loader;\n}\n\nexport type RouteSegmentState = \"preloading\" | \"loading\" | \"error\" | \"ready\";\n\nexport const DefaultOutlet: Component = ({ children }) => children;\n\nconst LoadingPlaceholder: Component = () => <p>Loading...</p>;\n\nexport class Outlet {\n state: RouteSegmentState = \"preloading\";\n promise: Promise<unknown> | undefined;\n data: unknown;\n\n // React.lazy wrapper for lazy page modules. Holding the resolved\n // component reference inside React (rather than as a captured value\n // on the Outlet) is what lets React Refresh swap the implementation\n // in place when a page module is edited — Fast Refresh walks React\n // fibers, not MobX state.\n private readonly lazyComponent?: LazyExoticComponent<Component>;\n\n get Component(): Component | undefined {\n switch (this.state) {\n case \"loading\":\n return LoadingPlaceholder;\n\n case \"ready\":\n if (this.lazyComponent) return this.lazyComponent;\n return (this.config.component as Component | undefined) ?? DefaultOutlet;\n\n default:\n return undefined;\n }\n }\n\n constructor(readonly config: OutletConfig) {\n if (isLazyComponent(config.component)) {\n const importer = config.component;\n this.lazyComponent = lazy(async () => {\n const importResult = await importer();\n for (const exportName in importResult) {\n if (exportName === \"default\" || exportName.endsWith(\"Page\")) {\n return { default: importResult[exportName] as Component };\n }\n }\n throw new Error(\n \"Lazy route component module did not export `default` or a `*Page` named export\",\n );\n });\n }\n\n makeAutoObservable<Outlet, \"lazyComponent\">(this, {\n promise: observable.ref,\n data: observable.ref,\n lazyComponent: false,\n });\n }\n\n async load(route: Route): Promise<void> {\n const promises: Promise<void>[] = [];\n\n if (isLazyComponent(this.config.component)) {\n // pre-warm the dynamic import so the module is in the bundler's\n // cache by the time React.lazy resolves it — avoids a Suspense\n // fallback flash on navigation\n promises.push(this.config.component().then(() => undefined));\n }\n\n if (this.config.loader) {\n promises.push(this.loadData(route));\n }\n\n if (!promises.length) {\n this.setState(\"ready\");\n return;\n }\n\n // wait to transition to loading to avoid\n // screen flashes when the loader function\n // executes quickly\n const preloadingTimer = setTimeout(() => {\n if (this.state === \"preloading\") {\n this.setState(\"loading\");\n }\n }, 300);\n\n this.promise = Promise.all(promises)\n .then(() => {\n clearTimeout(preloadingTimer);\n if (this.state === \"loading\") {\n // if we had to transition to regular loading because\n // the loader was taking too long, force an additional\n // timeout to prevent a loading flash\n setTimeout(() => {\n this.setState(\"ready\");\n }, 300);\n } else {\n this.setState(\"ready\");\n }\n })\n .catch(() => {\n clearTimeout(preloadingTimer);\n // TODO: check for type of error\n // handle access denied and redirects\n this.setState(\"error\");\n });\n\n await this.promise;\n }\n\n setData(data: unknown) {\n this.data = data;\n }\n\n setState(state: RouteSegmentState) {\n this.state = state;\n }\n\n private async loadData(route: Route): Promise<void> {\n await this.config.loader?.(route).then((data) => this.setData(data));\n }\n}\n","import type { NavigateOptions, RoutePath } from \"./types\";\n\nexport class Redirect<P extends RoutePath> {\n constructor(readonly options: NavigateOptions<P>) {}\n}\n\nexport const redirect = <P extends RoutePath>(options: NavigateOptions<P>): Redirect<P> =>\n new Redirect(options);\n","import { computed, makeObservable } from \"mobx\";\nimport type { Outlet } from \"./outlet\";\nimport type { Component, Guard, Obj } from \"./types\";\n\nexport interface RouteConfig {\n path: string;\n outlets: Outlet[];\n guards: Guard[];\n context?: Obj;\n layout?: Component;\n params: Obj;\n}\n\nexport class Route {\n readonly path: string;\n readonly outlets: Outlet[];\n readonly guards: Guard[];\n readonly context: Obj;\n readonly params: Obj;\n readonly layout?: Component;\n\n get data(): Obj {\n return Object.assign({}, ...this.outlets.map((o) => o.data));\n }\n\n constructor(def: RouteConfig) {\n this.path = def.path;\n this.guards = def.guards;\n this.context = def.context ?? {};\n this.outlets = def.outlets;\n this.params = def.params;\n this.layout = def.layout;\n\n makeObservable(this, {\n data: computed,\n });\n }\n\n async guard(): Promise<void> {\n for (const guard of this.guards) {\n await guard(this);\n }\n }\n\n async load(): Promise<void> {\n await Promise.all(this.outlets.map((outlet) => outlet.load(this)));\n }\n}\n","import { Outlet } from \"./outlet\";\nimport { Redirect } from \"./redirect\";\nimport { Route } from \"./route\";\nimport { CONTEXT, GUARD, LAYOUT, LOAD, PAGE, REDIRECT, WRAPPER } from \"./symbols\";\nimport type { Component, Guard, Obj, Routes } from \"./types\";\nimport { isComponent, isLazyComponent, isLeaf, isPage, isRedirect } from \"./util\";\n\nconst pathToSegments = (path: string): string[] => {\n return path.replace(/^\\/+|\\/+$/g, \"\").split(\"/\");\n};\n\nexport interface MatchState {\n segments: string[];\n context: Obj;\n params: Obj;\n outlets: (Outlet | undefined)[];\n guards: (Guard | undefined)[];\n layout?: Component;\n}\n\nexport const makeRoute = (matchState: MatchState): Route => {\n const outlets = matchState.outlets.filter((o) => o !== undefined);\n const guards = matchState.guards.filter((g) => g !== undefined);\n\n return new Route({ ...matchState, outlets, guards, path: matchState.segments.join(\"/\") });\n};\n\nexport const matchRoute = (path: string, routeDef: Routes, matchState?: MatchState): Route => {\n const state: MatchState = {\n segments: [],\n params: {},\n ...matchState,\n layout: routeDef[LAYOUT] ?? matchState?.layout,\n context: { ...matchState?.context, ...routeDef[CONTEXT] },\n guards: [...(matchState?.guards ?? []), routeDef[GUARD]],\n outlets: [\n ...(matchState?.outlets ?? []),\n routeDef[WRAPPER] ? new Outlet({ component: routeDef[WRAPPER] }) : undefined,\n routeDef[LOAD] ? new Outlet({ loader: routeDef[LOAD] }) : undefined,\n ],\n };\n\n const [segment, ...remainingSegments] = pathToSegments(path);\n const remainingPath = remainingSegments.join(\"/\");\n\n let defAtSegment = routeDef[segment || \"index\"];\n\n if (!defAtSegment) {\n const matchedSegment = Object.keys(routeDef).find((segment) => segment.startsWith(\"$\"));\n if (matchedSegment) {\n defAtSegment = routeDef[matchedSegment];\n state.params[matchedSegment.slice(1)] = segment;\n }\n }\n\n if (!defAtSegment) {\n throw new Error(\"Not Found.\");\n }\n\n state.segments.push(segment ?? \"index\");\n\n if (isLeaf(defAtSegment)) {\n if (remainingPath) {\n throw new Error(\"Not Found.\");\n }\n\n if (isRedirect(defAtSegment)) {\n const redirect =\n typeof defAtSegment[REDIRECT] === \"string\"\n ? { to: defAtSegment[REDIRECT] }\n : defAtSegment[REDIRECT];\n throw new Redirect(redirect as any);\n }\n\n if (isComponent(defAtSegment) || isLazyComponent(defAtSegment)) {\n state.outlets.push(new Outlet({ component: defAtSegment }));\n return makeRoute(state);\n }\n }\n\n // at this point we have a nested route or a [Page] definition\n\n if (isPage(defAtSegment)) {\n state.layout = defAtSegment[LAYOUT] ?? state.layout;\n Object.assign(state.context, defAtSegment[CONTEXT]);\n state.guards.push(defAtSegment[GUARD]);\n state.outlets.push(\n new Outlet({\n component: defAtSegment[PAGE],\n loader: defAtSegment[LOAD],\n }),\n );\n\n return makeRoute(state);\n }\n\n // now we know we have a nested route\n return matchRoute(remainingPath, defAtSegment, state);\n};\n\n// TODO: ideally this could resolve to something less than R,\n// but specific enough to infer all paths as a literal union.\n// As it stands, there are certain things we can't access reliably\n// without the compiler complaining about circular references\n// try \"as const satisfies\" approach which would allow us to\n// exchange a less specific version of MobxRoutesRoot for this\nexport const makeRoutes =\n () =>\n <R extends Routes>(routes: R): R => {\n // todo: perform some validation here\n // - no forward slashes in keys\n // - at most one variable segment per level\n // - only lowercase letters (except variables)\n // - paths/variables cannot contain $ that aren't at the beginning\n // - path variables must be unique across a path\n\n return routes;\n };\n","import { createBrowserHistory, type History, type Location } from \"history\";\nimport { action, computed, makeObservable, observable, runInAction } from \"mobx\";\nimport { matchRoute } from \"./make-routes\";\nimport { Redirect } from \"./redirect\";\nimport type { Route } from \"./route\";\nimport type { Component, MobxRouterConfig, NavigateOptions, Obj, RoutePath, Routes } from \"./types\";\nimport { resolvePath } from \"./util\";\n\nexport interface MobxRenderSegment {\n segment: string;\n component: Component;\n props?: Obj;\n}\n\nexport class RouterStore {\n readonly history: History;\n\n routesDef?: Routes;\n\n location!: Location;\n activeRoute: Route | undefined;\n\n get search(): URLSearchParams {\n return new URLSearchParams(this.location?.search);\n }\n\n get query(): Record<string, string> {\n return Object.fromEntries(this.search);\n }\n\n get pathParams(): Record<string, string> {\n const params = {} as Record<string, string>;\n\n const paramSegments = this.activeSegments.filter((segment) => segment.startsWith(\"$\"));\n const pathValues = this.location.pathname.split(\"/\").slice(1);\n\n paramSegments.forEach((segment, index) => {\n const value = pathValues[index + 1];\n if (value) {\n params[segment] = value;\n }\n });\n\n return params as Record<string, string>;\n }\n\n get activeSegments(): string[] {\n return this.activeRoute?.path.split(\"/\") ?? [];\n }\n\n constructor(config?: MobxRouterConfig) {\n makeObservable(this, {\n location: observable.ref,\n activeRoute: observable.ref,\n\n search: computed,\n pathParams: computed,\n activeSegments: computed,\n\n setLocation: action,\n });\n\n this.history = config?.history ?? createBrowserHistory();\n }\n\n initialize(routesDef: Routes): void {\n this.routesDef = routesDef;\n this.history.listen((data) => {\n void this.setLocation(data.location);\n });\n\n void this.setLocation(this.history.location);\n }\n\n doesPathMatch<P extends RoutePath>(path: P, exact?: boolean): boolean {\n const segments = path.slice(1).split(\"/\");\n const segmentsMatch = segments.every(\n (segment, i) => segment === this.activeSegments[i] || segment.startsWith(\"$\"),\n );\n\n return (\n segmentsMatch &&\n this.activeSegments.length >= segments.length &&\n (!exact || segments.length === this.activeSegments.length)\n );\n }\n\n navigate<P extends RoutePath>(options: NavigateOptions<P>): void {\n if (!document.startViewTransition) {\n this._navigate(options);\n } else {\n const transition = document.startViewTransition(() => this._navigate(options));\n transition.ready.catch((e) => console.log(e, typeof e));\n }\n }\n\n _navigate<P extends RoutePath>(options: NavigateOptions<P>): void {\n const { to, replace, state, search = {}, preserveSearch, params } = options;\n\n const searchParams = search instanceof URLSearchParams ? search : new URLSearchParams(search);\n\n if (preserveSearch) {\n for (const [name, value] of this.search) {\n if (!searchParams.has(name)) {\n searchParams.set(name, value);\n }\n }\n }\n\n const location = {\n pathname: resolvePath(to, params),\n search: searchParams.size ? `?${searchParams.toString()}` : undefined,\n };\n\n if (replace) {\n this.history.replace(location, state);\n } else {\n this.history.push(location, state);\n }\n }\n\n setQueryParam(param: string, value: string): void {\n this.search.set(param, value);\n this.history.replace({ search: this.search.toString() });\n }\n\n removeQueryParam(param: string): string | undefined {\n const params = new URLSearchParams(this.location.search);\n const value = params.get(param) ?? undefined;\n if (value !== undefined) {\n params.delete(param);\n this.history.replace({ search: params.toString() });\n }\n return value;\n }\n\n async setLocation(location: Location): Promise<void> {\n if (!this.routesDef) return;\n\n // TODO: this should not be the responsibility of mobx-router\n // and should really be handled server-side\n if (location.pathname !== \"/\" && location.pathname.endsWith(\"/\")) {\n this.history.replace({ ...location, pathname: location.pathname.slice(0, -1) });\n return;\n }\n\n this.location = location;\n\n try {\n const matchedRoute = matchRoute(location.pathname, this.routesDef);\n\n await matchedRoute.guard();\n\n // navigating within a guard function\n // is essentially a redirect\n if (this.location !== location) {\n return;\n }\n\n runInAction(() => {\n this.activeRoute = matchedRoute;\n });\n\n await this.activeRoute?.load();\n } catch (e) {\n if (e instanceof Redirect) {\n this.navigate(e.options);\n return;\n }\n throw e;\n }\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jayalfredprufrock/mobx-toolbox",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "Misc mobx/react modules/utilities.",
5
5
  "homepage": "https://github.com/jayalfredprufrock/mobx-toolbox#readme",
6
6
  "bugs": {