@jayalfredprufrock/mobx-toolbox 0.2.10 → 0.2.11

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,13 +14,14 @@ declare class Outlet {
14
14
  state: RouteSegmentState;
15
15
  promise: Promise<unknown> | undefined;
16
16
  data: unknown;
17
- private readonly lazyComponent?;
17
+ component: Component | undefined;
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;
24
25
  }
25
26
  //#endregion
26
27
  //#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, { Suspense, createContext, lazy, useCallback, useContext, useLayoutEffect } from "react";
2
+ import React, { createContext, 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,12 +66,9 @@ const Router = observer(({ store }) => {
66
66
  value: store,
67
67
  children: /* @__PURE__ */ jsx(Layout, {
68
68
  route: store.activeRoute,
69
- children: /* @__PURE__ */ jsx(Suspense, {
70
- fallback: null,
71
- children: /* @__PURE__ */ jsx(RouterOutlet, {
72
- route: store.activeRoute,
73
- outlets: store.activeRoute.outlets
74
- })
69
+ children: /* @__PURE__ */ jsx(RouterOutlet, {
70
+ route: store.activeRoute,
71
+ outlets: store.activeRoute.outlets
75
72
  })
76
73
  })
77
74
  });
@@ -123,35 +120,27 @@ var Outlet = class {
123
120
  state = "preloading";
124
121
  promise;
125
122
  data;
126
- lazyComponent;
123
+ component;
127
124
  get Component() {
128
125
  switch (this.state) {
129
126
  case "loading": return LoadingPlaceholder;
130
- case "ready":
131
- if (this.lazyComponent) return this.lazyComponent;
132
- return this.config.component ?? DefaultOutlet;
127
+ case "ready": return this.component ?? DefaultOutlet;
133
128
  default: return;
134
129
  }
135
130
  }
136
131
  constructor(config) {
137
132
  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
- }
133
+ if (!isLazyComponent(config.component)) this.component = config.component;
146
134
  makeAutoObservable(this, {
147
135
  promise: observable.ref,
148
136
  data: observable.ref,
149
- lazyComponent: false
137
+ component: false,
138
+ config: false
150
139
  });
151
140
  }
152
141
  async load(route) {
153
142
  const promises = [];
154
- if (isLazyComponent(this.config.component)) promises.push(this.config.component().then(() => void 0));
143
+ if (isLazyComponent(this.config.component) && !this.component) promises.push(this.loadComponent());
155
144
  if (this.config.loader) promises.push(this.loadData(route));
156
145
  if (!promises.length) {
157
146
  this.setState("ready");
@@ -181,6 +170,15 @@ var Outlet = class {
181
170
  async loadData(route) {
182
171
  await this.config.loader?.(route).then((data) => this.setData(data));
183
172
  }
173
+ async loadComponent() {
174
+ if (!isLazyComponent(this.config.component)) return;
175
+ const module = await this.config.component();
176
+ for (const exportName in module) if (exportName === "default" || exportName.endsWith("Page")) {
177
+ this.component = module[exportName];
178
+ return;
179
+ }
180
+ throw new Error("Lazy route component module did not export `default` or a `*Page` named export");
181
+ }
184
182
  };
185
183
 
186
184
  //#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, 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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"}
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 } 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\nconst LoadingPlaceholder: Component = () => <p>Loading...</p>;\n\nexport class Outlet {\n state: RouteSegmentState = \"preloading\";\n promise: Promise<unknown> | undefined;\n data: unknown;\n\n // Plain (non-observable) reference. The page component must reach\n // React unmediated by MobX — once MobX deep-observes the holder,\n // React Refresh can no longer swap the page identity via family\n // lookup on the original function. This mirrors how Route holds\n // `layout` as a plain field under makeObservable.\n component: Component | undefined;\n\n get Component(): Component | undefined {\n switch (this.state) {\n case \"loading\":\n return LoadingPlaceholder;\n case \"ready\":\n return this.component ?? DefaultOutlet;\n default:\n return undefined;\n }\n }\n\n constructor(readonly config: OutletConfig) {\n if (!isLazyComponent(config.component)) {\n this.component = config.component;\n }\n\n makeAutoObservable<Outlet, \"component\" | \"config\">(this, {\n promise: observable.ref,\n data: observable.ref,\n component: false,\n config: false,\n });\n }\n\n async load(route: Route): Promise<void> {\n const promises: Promise<void>[] = [];\n\n if (isLazyComponent(this.config.component) && !this.component) {\n promises.push(this.loadComponent());\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 (!isLazyComponent(this.config.component)) return;\n const module = await this.config.component();\n for (const exportName in module) {\n if (exportName === \"default\" || exportName.endsWith(\"Page\")) {\n this.component = module[exportName];\n return;\n }\n }\n throw new Error(\n \"Lazy route component module did not export `default` or a `*Page` named export\",\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jayalfredprufrock/mobx-toolbox",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "description": "Misc mobx/react modules/utilities.",
5
5
  "homepage": "https://github.com/jayalfredprufrock/mobx-toolbox#readme",
6
6
  "bugs": {