@rpcbase/client 0.380.0 → 0.381.0
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/apiClient/getServerApiClient.d.ts +1 -1
- package/dist/apiClient/getServerApiClient.d.ts.map +1 -1
- package/dist/getServerApiClient-BYu8h5Zd.js.map +1 -1
- package/dist/index.js +33 -31
- package/dist/index.js.map +1 -1
- package/dist/initWithRoutes.d.ts.map +1 -1
- package/dist/navigationGuard/installGlobalNavigationGuard.d.ts.map +1 -1
- package/dist/toast.d.ts.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Application } from 'express';
|
|
2
|
-
|
|
2
|
+
import { Ctx } from '@rpcbase/api';
|
|
3
3
|
export declare const getServerApiClient: (app: Application) => Promise<{
|
|
4
4
|
get: <TResponse = Record<string, unknown>>(path: string, payload: Record<string, unknown>, ctx?: Ctx) => Promise<TResponse>;
|
|
5
5
|
post: <TResponse = Record<string, unknown>>(path: string, payload: Record<string, unknown>, ctx?: Ctx) => Promise<TResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getServerApiClient.d.ts","sourceRoot":"","sources":["../../src/apiClient/getServerApiClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getServerApiClient.d.ts","sourceRoot":"","sources":["../../src/apiClient/getServerApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,SAAS,CAAA;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAkBvC,eAAO,MAAM,kBAAkB,GAAS,KAAK,WAAW;UA+KtC,SAAS,kCACf,MAAM,WACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAC1B,GAAG,KACR,OAAO,CAAC,SAAS,CAAC;WAJP,SAAS,kCACf,MAAM,WACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAC1B,GAAG,KACR,OAAO,CAAC,SAAS,CAAC;UAJP,SAAS,kCACf,MAAM,WACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAC1B,GAAG,KACR,OAAO,CAAC,SAAS,CAAC;aAJP,SAAS,kCACf,MAAM,WACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAC1B,GAAG,KACR,OAAO,CAAC,SAAS,CAAC;EAyBxB,CAAA;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getServerApiClient-BYu8h5Zd.js","sources":["../src/apiClient/getServerApiClient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Application, IRouter, Request, Response } from \"express\"\n\n// import { Ctx } from \"@rpcbase/api\"\ntype Ctx = any\n\n\nexport const getServerApiClient = async(app: Application) => {\n const callRoute = async <TResponse = Record<string, unknown>>(\n app: Application,\n method: string,\n matchPath: string,\n requestUrl: string,\n req: Partial<Request>,\n res: Partial<Response>\n ): Promise<TResponse> => {\n return new Promise((resolve, reject) => {\n let isEnded = false\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n const resolveRequest = (data: TResponse) => {\n if (isEnded) return\n isEnded = true\n if (timeoutId) clearTimeout(timeoutId)\n resolve(data)\n }\n\n const rejectRequest = (error: unknown) => {\n if (isEnded) return\n isEnded = true\n if (timeoutId) clearTimeout(timeoutId)\n reject(error)\n }\n\n const mockReq = {\n ...req,\n method: method.toUpperCase(),\n url: requestUrl\n } as Request\n\n const mockRes = {\n ...res,\n json: (data: any) => {\n resolveRequest(data)\n },\n status: (statusCode: number) => {\n console.log(\"Status:\", statusCode, mockReq.method, mockReq.url)\n return mockRes\n },\n } as Response\n\n const routerStack: any[] = (app.router as unknown as IRouter).stack\n\n const firstApiMiddlewareIndex = routerStack.findIndex((layer) => layer.name === \"__FIRST_API_MIDDLEWARE__\")\n if (!(firstApiMiddlewareIndex > -1)) {\n throw new Error(\"middleware: __FIRST_API_MIDDLEWARE__ was not found in stack\")\n }\n\n const apiStack = routerStack.slice(firstApiMiddlewareIndex + 1)\n\n const processLayer = async (index: number) => {\n if (index >= apiStack.length || isEnded) return\n\n const layer = apiStack[index]\n\n const isNonMatchingLayer = !layer.match(matchPath)\n if (isNonMatchingLayer) {\n // console.log(\"not machthing route:\", matchPath, \"to layer:\", index, layer.name, layer, \"reason: \", {isNonMatchingLayer})\n await processLayer(index + 1)\n return\n }\n\n const runHandler = async(handler: any) => new Promise<void>((resolveMiddleware, rejectMiddleware) => {\n handler(mockReq, mockRes, (err?: any) => {\n if (err) {\n console.error(\"Middleware error:\", err)\n rejectMiddleware(err)\n return\n }\n resolveMiddleware()\n })\n })\n\n if (layer.route) {\n if (!layer.route.methods[method.toLowerCase()]) {\n // console.log(\"not machthing route:\", matchPath, \"to route layer:\", index, layer.name, layer, \"reason: method not matching\")\n await processLayer(index + 1)\n return\n }\n\n if (layer.route.stack.length !== 1) {\n throw new Error(`expected only one handler per route for route: ${layer.route.path}`)\n }\n\n await runHandler(layer.route.stack[0].handle)\n\n } else {\n await runHandler(layer.handle)\n }\n\n if (!isEnded) {\n await processLayer(index + 1)\n }\n }\n\n void processLayer(0).catch((err) => {\n rejectRequest(err)\n })\n\n // Set a timeout to prevent hanging\n timeoutId = setTimeout(() => {\n rejectRequest(new Error(\"Route handler timed out\"))\n }, 30000)\n })\n }\n\n const mergeQueryValues = (target: Record<string, string | string[]>, key: string, value: string) => {\n const existing = target[key]\n if (Array.isArray(existing)) {\n existing.push(value)\n return\n }\n\n if (typeof existing === \"string\") {\n target[key] = [existing, value]\n return\n }\n\n target[key] = value\n }\n\n const toQueryValue = (value: unknown): string | null => {\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : null\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\"\n if (typeof value === \"bigint\") return String(value)\n if (value instanceof Date) return value.toISOString()\n return null\n }\n\n const buildQuery = (path: string, payload: Record<string, unknown>) => {\n const url = new URL(path, \"http://localhost\")\n\n const query: Record<string, string | string[]> = {}\n for (const [key, value] of url.searchParams) {\n mergeQueryValues(query, key, value)\n }\n\n for (const [key, rawValue] of Object.entries(payload)) {\n if (!key) continue\n\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n const converted = toQueryValue(item)\n if (converted !== null) mergeQueryValues(query, key, converted)\n }\n continue\n }\n\n const converted = toQueryValue(rawValue)\n if (converted !== null) mergeQueryValues(query, key, converted)\n }\n\n const searchParams = new URLSearchParams()\n for (const [key, rawValue] of Object.entries(query)) {\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n searchParams.append(key, value)\n }\n continue\n }\n\n searchParams.append(key, rawValue)\n }\n\n const matchPath = url.pathname\n const requestUrl = `${matchPath}${searchParams.toString() ? `?${searchParams.toString()}` : \"\"}`\n\n return { matchPath, requestUrl, query }\n }\n\n const createMethod = (method: string) => {\n return async <TResponse = Record<string, unknown>>(\n path: string,\n payload: Record<string, unknown>,\n ctx?: Ctx,\n ): Promise<TResponse> => {\n if (!ctx) {\n throw new Error(\"Context must be provided in SSR mode\")\n }\n\n const normalizedMethod = method.toLowerCase()\n\n if (normalizedMethod === \"get\") {\n const { matchPath, requestUrl, query } = buildQuery(path, payload)\n return callRoute<TResponse>(app, method, matchPath, requestUrl, { ...ctx.req, body: {}, query }, ctx.res)\n }\n\n const { matchPath, requestUrl, query } = buildQuery(path, {})\n return callRoute<TResponse>(app, method, matchPath, requestUrl, { ...ctx.req, body: payload, query }, ctx.res)\n }\n }\n\n const apiClient = {\n get: createMethod(\"get\"),\n post: createMethod(\"post\"),\n put: createMethod(\"put\"),\n delete: createMethod(\"delete\")\n }\n\n return apiClient\n}\n\nexport default getServerApiClient\n"],"names":["app","converted","matchPath","requestUrl","query"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getServerApiClient-BYu8h5Zd.js","sources":["../src/apiClient/getServerApiClient.ts"],"sourcesContent":["import { Application, IRouter, Request, Response } from \"express\"\nimport type { Ctx } from \"@rpcbase/api\"\n\n\ntype NextMiddleware = (err?: unknown) => void\ntype LayerHandler = (req: Request, res: Response, next: NextMiddleware) => void\n\ntype RouterLayer = {\n name: string\n match: (path: string) => boolean\n handle: LayerHandler\n route?: {\n methods: Record<string, boolean | undefined>\n path: string\n stack: Array<{ handle: LayerHandler }>\n }\n}\n\n\nexport const getServerApiClient = async(app: Application) => {\n const callRoute = async <TResponse = Record<string, unknown>>(\n app: Application,\n method: string,\n matchPath: string,\n requestUrl: string,\n req: Partial<Request>,\n res: Partial<Response>\n ): Promise<TResponse> => {\n return new Promise((resolve, reject) => {\n let isEnded = false\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n const resolveRequest = (data: TResponse) => {\n if (isEnded) return\n isEnded = true\n if (timeoutId) clearTimeout(timeoutId)\n resolve(data)\n }\n\n const rejectRequest = (error: unknown) => {\n if (isEnded) return\n isEnded = true\n if (timeoutId) clearTimeout(timeoutId)\n reject(error)\n }\n\n const mockReq = {\n ...req,\n method: method.toUpperCase(),\n url: requestUrl\n } as Request\n\n const mockRes = {\n ...res,\n json: (data: unknown) => {\n resolveRequest(data as TResponse)\n },\n status: (statusCode: number) => {\n console.log(\"Status:\", statusCode, mockReq.method, mockReq.url)\n return mockRes\n },\n } as Response\n\n const routerStack = (app.router as unknown as IRouter).stack as unknown as RouterLayer[]\n\n const firstApiMiddlewareIndex = routerStack.findIndex((layer) => layer.name === \"__FIRST_API_MIDDLEWARE__\")\n if (!(firstApiMiddlewareIndex > -1)) {\n throw new Error(\"middleware: __FIRST_API_MIDDLEWARE__ was not found in stack\")\n }\n\n const apiStack = routerStack.slice(firstApiMiddlewareIndex + 1)\n\n const processLayer = async (index: number) => {\n if (index >= apiStack.length || isEnded) return\n\n const layer = apiStack[index]\n\n const isNonMatchingLayer = !layer.match(matchPath)\n if (isNonMatchingLayer) {\n // console.log(\"not machthing route:\", matchPath, \"to layer:\", index, layer.name, layer, \"reason: \", {isNonMatchingLayer})\n await processLayer(index + 1)\n return\n }\n\n const runHandler = async(handler: LayerHandler) => new Promise<void>((resolveMiddleware, rejectMiddleware) => {\n handler(mockReq, mockRes, (err?: unknown) => {\n if (err) {\n console.error(\"Middleware error:\", err)\n rejectMiddleware(err)\n return\n }\n resolveMiddleware()\n })\n })\n\n if (layer.route) {\n if (!layer.route.methods[method.toLowerCase()]) {\n // console.log(\"not machthing route:\", matchPath, \"to route layer:\", index, layer.name, layer, \"reason: method not matching\")\n await processLayer(index + 1)\n return\n }\n\n if (layer.route.stack.length !== 1) {\n throw new Error(`expected only one handler per route for route: ${layer.route.path}`)\n }\n\n await runHandler(layer.route.stack[0].handle)\n\n } else {\n await runHandler(layer.handle)\n }\n\n if (!isEnded) {\n await processLayer(index + 1)\n }\n }\n\n void processLayer(0).catch((err) => {\n rejectRequest(err)\n })\n\n // Set a timeout to prevent hanging\n timeoutId = setTimeout(() => {\n rejectRequest(new Error(\"Route handler timed out\"))\n }, 30000)\n })\n }\n\n const mergeQueryValues = (target: Record<string, string | string[]>, key: string, value: string) => {\n const existing = target[key]\n if (Array.isArray(existing)) {\n existing.push(value)\n return\n }\n\n if (typeof existing === \"string\") {\n target[key] = [existing, value]\n return\n }\n\n target[key] = value\n }\n\n const toQueryValue = (value: unknown): string | null => {\n if (typeof value === \"string\") return value\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : null\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\"\n if (typeof value === \"bigint\") return String(value)\n if (value instanceof Date) return value.toISOString()\n return null\n }\n\n const buildQuery = (path: string, payload: Record<string, unknown>) => {\n const url = new URL(path, \"http://localhost\")\n\n const query: Record<string, string | string[]> = {}\n for (const [key, value] of url.searchParams) {\n mergeQueryValues(query, key, value)\n }\n\n for (const [key, rawValue] of Object.entries(payload)) {\n if (!key) continue\n\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n const converted = toQueryValue(item)\n if (converted !== null) mergeQueryValues(query, key, converted)\n }\n continue\n }\n\n const converted = toQueryValue(rawValue)\n if (converted !== null) mergeQueryValues(query, key, converted)\n }\n\n const searchParams = new URLSearchParams()\n for (const [key, rawValue] of Object.entries(query)) {\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n searchParams.append(key, value)\n }\n continue\n }\n\n searchParams.append(key, rawValue)\n }\n\n const matchPath = url.pathname\n const requestUrl = `${matchPath}${searchParams.toString() ? `?${searchParams.toString()}` : \"\"}`\n\n return { matchPath, requestUrl, query }\n }\n\n const createMethod = (method: string) => {\n return async <TResponse = Record<string, unknown>>(\n path: string,\n payload: Record<string, unknown>,\n ctx?: Ctx,\n ): Promise<TResponse> => {\n if (!ctx) {\n throw new Error(\"Context must be provided in SSR mode\")\n }\n\n const normalizedMethod = method.toLowerCase()\n\n if (normalizedMethod === \"get\") {\n const { matchPath, requestUrl, query } = buildQuery(path, payload)\n return callRoute<TResponse>(app, method, matchPath, requestUrl, { ...ctx.req, body: {}, query }, ctx.res)\n }\n\n const { matchPath, requestUrl, query } = buildQuery(path, {})\n return callRoute<TResponse>(app, method, matchPath, requestUrl, { ...ctx.req, body: payload, query }, ctx.res)\n }\n }\n\n const apiClient = {\n get: createMethod(\"get\"),\n post: createMethod(\"post\"),\n put: createMethod(\"put\"),\n delete: createMethod(\"delete\")\n }\n\n return apiClient\n}\n\nexport default getServerApiClient\n"],"names":["app","converted","matchPath","requestUrl","query"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -97,10 +97,11 @@ const startToaster = () => {
|
|
|
97
97
|
const ensureReady = () => {
|
|
98
98
|
if (typeof document === "undefined") startToaster();
|
|
99
99
|
};
|
|
100
|
+
const buildToastData = (data, id) => data ? { ...data, id } : { id };
|
|
100
101
|
const toastFn = ((message, data) => {
|
|
101
102
|
ensureReady();
|
|
102
103
|
const id = resolveId(data?.id) ?? createToastId();
|
|
103
|
-
const nextData = data
|
|
104
|
+
const nextData = buildToastData(data, id);
|
|
104
105
|
enqueue((m) => {
|
|
105
106
|
m.toast(message, nextData);
|
|
106
107
|
});
|
|
@@ -109,7 +110,7 @@ const toastFn = ((message, data) => {
|
|
|
109
110
|
const toastSuccess = (message, data) => {
|
|
110
111
|
ensureReady();
|
|
111
112
|
const id = resolveId(data?.id) ?? createToastId();
|
|
112
|
-
const nextData = data
|
|
113
|
+
const nextData = buildToastData(data, id);
|
|
113
114
|
enqueue((m) => {
|
|
114
115
|
m.toast.success(message, nextData);
|
|
115
116
|
});
|
|
@@ -118,7 +119,7 @@ const toastSuccess = (message, data) => {
|
|
|
118
119
|
const toastInfo = (message, data) => {
|
|
119
120
|
ensureReady();
|
|
120
121
|
const id = resolveId(data?.id) ?? createToastId();
|
|
121
|
-
const nextData = data
|
|
122
|
+
const nextData = buildToastData(data, id);
|
|
122
123
|
enqueue((m) => {
|
|
123
124
|
m.toast.info(message, nextData);
|
|
124
125
|
});
|
|
@@ -127,7 +128,7 @@ const toastInfo = (message, data) => {
|
|
|
127
128
|
const toastWarning = (message, data) => {
|
|
128
129
|
ensureReady();
|
|
129
130
|
const id = resolveId(data?.id) ?? createToastId();
|
|
130
|
-
const nextData = data
|
|
131
|
+
const nextData = buildToastData(data, id);
|
|
131
132
|
enqueue((m) => {
|
|
132
133
|
m.toast.warning(message, nextData);
|
|
133
134
|
});
|
|
@@ -136,7 +137,7 @@ const toastWarning = (message, data) => {
|
|
|
136
137
|
const toastError = (message, data) => {
|
|
137
138
|
ensureReady();
|
|
138
139
|
const id = resolveId(data?.id) ?? createToastId();
|
|
139
|
-
const nextData = data
|
|
140
|
+
const nextData = buildToastData(data, id);
|
|
140
141
|
enqueue((m) => {
|
|
141
142
|
m.toast.error(message, nextData);
|
|
142
143
|
});
|
|
@@ -145,7 +146,7 @@ const toastError = (message, data) => {
|
|
|
145
146
|
const toastMessage = (message, data) => {
|
|
146
147
|
ensureReady();
|
|
147
148
|
const id = resolveId(data?.id) ?? createToastId();
|
|
148
|
-
const nextData = data
|
|
149
|
+
const nextData = buildToastData(data, id);
|
|
149
150
|
enqueue((m) => {
|
|
150
151
|
m.toast.message(message, nextData);
|
|
151
152
|
});
|
|
@@ -154,7 +155,7 @@ const toastMessage = (message, data) => {
|
|
|
154
155
|
const toastLoading = (message, data) => {
|
|
155
156
|
ensureReady();
|
|
156
157
|
const id = resolveId(data?.id) ?? createToastId();
|
|
157
|
-
const nextData = data
|
|
158
|
+
const nextData = buildToastData(data, id);
|
|
158
159
|
enqueue((m) => {
|
|
159
160
|
m.toast.loading(message, nextData);
|
|
160
161
|
});
|
|
@@ -163,7 +164,7 @@ const toastLoading = (message, data) => {
|
|
|
163
164
|
const toastCustom = (jsx2, data) => {
|
|
164
165
|
ensureReady();
|
|
165
166
|
const id = resolveId(data?.id) ?? createToastId();
|
|
166
|
-
const nextData = data
|
|
167
|
+
const nextData = buildToastData(data, id);
|
|
167
168
|
enqueue((m) => {
|
|
168
169
|
m.toast.custom(jsx2, nextData);
|
|
169
170
|
});
|
|
@@ -180,7 +181,7 @@ const toastPromise = (promise, data) => {
|
|
|
180
181
|
});
|
|
181
182
|
return { unwrap };
|
|
182
183
|
}
|
|
183
|
-
const id = resolveId(data
|
|
184
|
+
const id = resolveId(data.id) ?? createToastId();
|
|
184
185
|
const nextData = { ...data, id };
|
|
185
186
|
enqueue((m) => {
|
|
186
187
|
m.toast.promise(startedPromise, nextData);
|
|
@@ -247,9 +248,9 @@ const ActiveToaster = () => {
|
|
|
247
248
|
swipeDirections: isCoarsePointer ? void 0 : [],
|
|
248
249
|
style: {
|
|
249
250
|
pointerEvents: "auto",
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
"--toast-close-button-start": "unset",
|
|
252
|
+
"--toast-close-button-end": "0",
|
|
253
|
+
"--toast-close-button-transform": "translate(35%, -35%)"
|
|
253
254
|
},
|
|
254
255
|
toastOptions: {
|
|
255
256
|
style: {
|
|
@@ -387,12 +388,14 @@ const pickNavigationGuard = (args) => {
|
|
|
387
388
|
};
|
|
388
389
|
const getLocationDedupKey = (location) => location.key ?? `${location.pathname}${location.search}`;
|
|
389
390
|
const hasUnloadBlockers = () => getNavigationGuards().some((guard) => guard.enabled && guard.shouldBlockUnload);
|
|
391
|
+
const WINDOW_STATE_KEY = "__rpcbaseNavigationGuardWindowState";
|
|
392
|
+
const INSTALLED_ROUTERS_KEY = "__rpcbaseNavigationGuardInstalledRouters";
|
|
393
|
+
const BEFORE_UNLOAD_INSTALLED_KEY = "__rpcbaseBeforeUnloadNavigationGuardInstalled";
|
|
390
394
|
const getWindowState = () => {
|
|
391
395
|
if (typeof window === "undefined") return null;
|
|
392
|
-
const
|
|
393
|
-
const
|
|
394
|
-
if (
|
|
395
|
-
const existing = globalAny[key];
|
|
396
|
+
const globalWindow = window;
|
|
397
|
+
const existing = globalWindow[WINDOW_STATE_KEY];
|
|
398
|
+
if (existing) {
|
|
396
399
|
if (typeof existing.suppressBeforeUnloadFromKey === "undefined") {
|
|
397
400
|
existing.suppressBeforeUnloadFromKey = null;
|
|
398
401
|
}
|
|
@@ -402,18 +405,17 @@ const getWindowState = () => {
|
|
|
402
405
|
suppressBeforeUnloadFromKey: null,
|
|
403
406
|
nativePromptActive: false
|
|
404
407
|
};
|
|
405
|
-
|
|
408
|
+
globalWindow[WINDOW_STATE_KEY] = created;
|
|
406
409
|
return created;
|
|
407
410
|
};
|
|
408
411
|
const getGlobalGuardWeakSet = () => {
|
|
409
|
-
const
|
|
410
|
-
const
|
|
411
|
-
const existing = globalAny[key];
|
|
412
|
+
const globalScope = globalThis;
|
|
413
|
+
const existing = globalScope[INSTALLED_ROUTERS_KEY];
|
|
412
414
|
if (existing && existing instanceof WeakSet) {
|
|
413
415
|
return existing;
|
|
414
416
|
}
|
|
415
417
|
const created = /* @__PURE__ */ new WeakSet();
|
|
416
|
-
|
|
418
|
+
globalScope[INSTALLED_ROUTERS_KEY] = created;
|
|
417
419
|
return created;
|
|
418
420
|
};
|
|
419
421
|
const installGlobalNavigationGuard = (router) => {
|
|
@@ -434,7 +436,7 @@ const installGlobalNavigationGuard = (router) => {
|
|
|
434
436
|
return pickNavigationGuard(args) !== null;
|
|
435
437
|
});
|
|
436
438
|
router.subscribe((state) => {
|
|
437
|
-
if (windowState?.suppressBeforeUnloadFromKey
|
|
439
|
+
if (windowState?.suppressBeforeUnloadFromKey) {
|
|
438
440
|
const currentKey = getLocationDedupKey(state.location);
|
|
439
441
|
if (currentKey !== windowState.suppressBeforeUnloadFromKey) {
|
|
440
442
|
windowState.suppressBeforeUnloadFromKey = null;
|
|
@@ -477,10 +479,9 @@ const installGlobalNavigationGuard = (router) => {
|
|
|
477
479
|
}
|
|
478
480
|
});
|
|
479
481
|
if (typeof window !== "undefined") {
|
|
480
|
-
const
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
globalAny[key] = true;
|
|
482
|
+
const globalWindow = window;
|
|
483
|
+
if (!globalWindow[BEFORE_UNLOAD_INSTALLED_KEY]) {
|
|
484
|
+
globalWindow[BEFORE_UNLOAD_INSTALLED_KEY] = true;
|
|
484
485
|
window.addEventListener("beforeunload", (event) => {
|
|
485
486
|
const state = getWindowState();
|
|
486
487
|
if (state && state.suppressBeforeUnloadFromKey) {
|
|
@@ -558,8 +559,9 @@ const showErrorOverlay = (err) => {
|
|
|
558
559
|
document.body.appendChild(overlay);
|
|
559
560
|
};
|
|
560
561
|
const handleServerErrors = () => {
|
|
561
|
-
|
|
562
|
-
|
|
562
|
+
const hydrationData = window.__staticRouterHydrationData;
|
|
563
|
+
if (hydrationData?.errors) {
|
|
564
|
+
const { errors } = hydrationData;
|
|
563
565
|
Object.values(errors).forEach((error) => {
|
|
564
566
|
showErrorOverlay({
|
|
565
567
|
plugin: "ssr-router",
|
|
@@ -583,14 +585,14 @@ const wrapLoaderWithTimeout = (loader, routeId) => async (...args) => new Promis
|
|
|
583
585
|
});
|
|
584
586
|
const applyLoaderTimeouts = (routes) => {
|
|
585
587
|
routes.forEach((route) => {
|
|
586
|
-
if (route.loader) {
|
|
588
|
+
if (typeof route.loader === "function") {
|
|
587
589
|
route.loader = wrapLoaderWithTimeout(route.loader, route.id);
|
|
588
590
|
}
|
|
589
|
-
if (route.lazy) {
|
|
591
|
+
if (typeof route.lazy === "function") {
|
|
590
592
|
const origLazy = route.lazy;
|
|
591
593
|
route.lazy = async (...lazyArgs) => {
|
|
592
594
|
const mod = await origLazy(...lazyArgs);
|
|
593
|
-
if (mod
|
|
595
|
+
if (typeof mod.loader === "function") {
|
|
594
596
|
const origLoader = mod.loader;
|
|
595
597
|
mod.loader = (...loaderArgs) => wrapLoaderWithTimeout(origLoader, route.id)(...loaderArgs);
|
|
596
598
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/hooks/useMediaQuery.ts","../src/toast.tsx","../src/apiClient/index.ts","../src/cleanupURL.ts","../src/navigationGuard/installGlobalNavigationGuard.ts","../src/ssrErrorState.ts","../src/components/SsrErrorFallback.tsx","../src/initWithRoutes.tsx","../../../node_modules/lodash/_arrayReduce.js","../../../node_modules/lodash/_basePropertyOf.js","../../../node_modules/lodash/_deburrLetter.js","../../../node_modules/lodash/_freeGlobal.js","../../../node_modules/lodash/_root.js","../../../node_modules/lodash/_Symbol.js","../../../node_modules/lodash/_arrayMap.js","../../../node_modules/lodash/isArray.js","../../../node_modules/lodash/_getRawTag.js","../../../node_modules/lodash/_objectToString.js","../../../node_modules/lodash/_baseGetTag.js","../../../node_modules/lodash/isObjectLike.js","../../../node_modules/lodash/isSymbol.js","../../../node_modules/lodash/_baseToString.js","../../../node_modules/lodash/toString.js","../../../node_modules/lodash/deburr.js","../../../node_modules/lodash/_asciiWords.js","../../../node_modules/lodash/_hasUnicodeWord.js","../../../node_modules/lodash/_unicodeWords.js","../../../node_modules/lodash/words.js","../../../node_modules/lodash/_createCompounder.js","../../../node_modules/lodash/snakeCase.js","../src/getFeatureFlag.ts","../src/utils/useApplyScroll.ts","../src/RootProvider/index.tsx","../../../node_modules/lodash/isObject.js","../../../node_modules/lodash/now.js","../../../node_modules/lodash/_trimmedEndIndex.js","../../../node_modules/lodash/_baseTrim.js","../../../node_modules/lodash/toNumber.js","../../../node_modules/lodash/debounce.js","../../../node_modules/lodash/throttle.js","../../../node_modules/fast-equals/dist/es/index.mjs","../src/hooks/useThrottledMeasure.ts","../src/components/RouteErrorBoundary.tsx","../src/notifications.ts","../src/notificationsRealtime.tsx"],"sourcesContent":["import { useSyncExternalStore } from \"react\"\n\n\nconst emptyUnsubscribe = () => {}\n\nexport const useMediaQuery = (query: string): boolean => {\n const isServer = typeof window === \"undefined\"\n\n const subscribe = (callback: () => void) => {\n if (isServer) return emptyUnsubscribe\n\n const mql = window.matchMedia(query)\n\n // Modern browsers\n if (mql.addEventListener) {\n mql.addEventListener(\"change\", callback)\n return () => mql.removeEventListener(\"change\", callback)\n }\n\n // Legacy fallback\n mql.addListener(callback)\n return () => mql.removeListener(callback)\n }\n\n const getSnapshot = () => {\n if (isServer) return false\n return window.matchMedia(query).matches\n }\n\n return useSyncExternalStore(subscribe, getSnapshot, () => false)\n}\n","import { lazy, Suspense, useEffect, useSyncExternalStore } from \"react\"\n\nimport { useMediaQuery } from \"./hooks/useMediaQuery\"\n\n\ntype SonnerModule = typeof import(\"sonner\")\ntype SonnerToast = typeof import(\"sonner\").toast\ntype ToastId = string | number\n\nlet sonner: SonnerModule | null = null\nlet sonnerImport: Promise<SonnerModule> | null = null\nconst queued: Array<(m: SonnerModule) => void> = []\n\nlet toasterRequested = false\nconst toasterListeners = new Set<() => void>()\nlet toasterMounted = false\nlet toasterPreloadStarted = false\n\nlet idCounter = 0\nconst createToastId = (): string => `rb-toast-${++idCounter}`\n\nconst resolveId = (id: unknown): ToastId | undefined => {\n if (typeof id === \"number\") return id\n if (typeof id === \"string\" && id.length > 0) return id\n return undefined\n}\n\nconst requestToasterMount = (): void => {\n if (toasterRequested) return\n toasterRequested = true\n for (const listener of toasterListeners) {\n listener()\n }\n}\n\nconst subscribeToasterRequested = (listener: () => void): (() => void) => {\n toasterListeners.add(listener)\n return () => {\n toasterListeners.delete(listener)\n }\n}\n\nconst getToasterRequested = (): boolean => toasterRequested\n\nconst flushQueue = (): void => {\n if (!sonner) return\n if (typeof document !== \"undefined\" && !toasterMounted) return\n while (queued.length) {\n const fn = queued.shift()\n if (fn) fn(sonner)\n }\n}\n\nconst setToasterMounted = (mounted: boolean): void => {\n toasterMounted = mounted\n if (mounted) flushQueue()\n}\n\nconst loadSonner = (): Promise<SonnerModule> => {\n if (sonner) return Promise.resolve(sonner)\n if (sonnerImport) return sonnerImport\n\n sonnerImport = import(\"sonner\").then((mod) => {\n sonner = mod\n flushQueue()\n return mod\n })\n\n return sonnerImport\n}\n\nconst enqueue = (fn: (mod: SonnerModule) => void): void => {\n if (sonner && (toasterMounted || typeof document === \"undefined\")) {\n fn(sonner)\n return\n }\n\n queued.push(fn)\n}\n\nconst isPageLoaded = (): boolean => {\n if (typeof document === \"undefined\") return false\n return document.readyState === \"complete\"\n}\n\nconst startToaster = (): void => {\n if (toasterPreloadStarted) return\n toasterPreloadStarted = true\n requestToasterMount()\n void loadSonner()\n}\n\nconst ensureReady = (): void => {\n if (typeof document === \"undefined\") startToaster()\n}\n\nconst toastFn = ((message: Parameters<SonnerToast>[0], data?: Parameters<SonnerToast>[1]) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast(message as any, nextData)\n })\n return id as any\n}) as SonnerToast\n\nconst toastSuccess: SonnerToast[\"success\"] = (message, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.success(message as any, nextData)\n })\n return id as any\n}\n\nconst toastInfo: SonnerToast[\"info\"] = (message, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.info(message as any, nextData)\n })\n return id as any\n}\n\nconst toastWarning: SonnerToast[\"warning\"] = (message, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.warning(message as any, nextData)\n })\n return id as any\n}\n\nconst toastError: SonnerToast[\"error\"] = (message, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.error(message as any, nextData)\n })\n return id as any\n}\n\nconst toastMessage: SonnerToast[\"message\"] = (message, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.message(message as any, nextData)\n })\n return id as any\n}\n\nconst toastLoading: SonnerToast[\"loading\"] = (message, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.loading(message as any, nextData)\n })\n return id as any\n}\n\nconst toastCustom: SonnerToast[\"custom\"] = (jsx, data) => {\n ensureReady()\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = data ? { ...(data as any), id } : ({ id } as any)\n enqueue((m) => {\n m.toast.custom(jsx as any, nextData)\n })\n return id as any\n}\n\nconst toastPromise: SonnerToast[\"promise\"] = (promise, data) => {\n ensureReady()\n if (!data) return undefined as any\n\n const startedPromise = promise instanceof Function ? promise() : promise\n const unwrap = () => Promise.resolve(startedPromise)\n\n if ((data as any).loading === undefined) {\n enqueue((m) => {\n m.toast.promise(startedPromise as any, data as any)\n })\n return { unwrap } as any\n }\n\n const id = resolveId((data as any)?.id) ?? createToastId()\n const nextData = { ...(data as any), id }\n\n enqueue((m) => {\n m.toast.promise(startedPromise as any, nextData)\n })\n\n return Object.assign(id as any, { unwrap }) as any\n}\n\nconst toastDismiss: SonnerToast[\"dismiss\"] = (id?: ToastId) => {\n ensureReady()\n enqueue((m) => {\n m.toast.dismiss(id as any)\n })\n return id as any\n}\n\nconst toastGetHistory: SonnerToast[\"getHistory\"] = () =>\n sonner ? (sonner.toast as any).getHistory() : []\n\nconst toastGetToasts: SonnerToast[\"getToasts\"] = () =>\n sonner ? (sonner.toast as any).getToasts() : []\n\nexport const toast = Object.assign(toastFn, {\n success: toastSuccess,\n info: toastInfo,\n warning: toastWarning,\n error: toastError,\n message: toastMessage,\n loading: toastLoading,\n custom: toastCustom,\n promise: toastPromise,\n dismiss: toastDismiss,\n getHistory: toastGetHistory,\n getToasts: toastGetToasts,\n}) as SonnerToast\n\nconst LazySonnerToaster = lazy(async () => {\n const mod = await import(\"sonner\")\n return { default: mod.Toaster }\n})\n\nconst MountedLazyToaster = (props: any) => {\n useEffect(() => {\n setToasterMounted(true)\n return () => setToasterMounted(false)\n }, [])\n\n return <LazySonnerToaster {...props} />\n}\n\nconst ActiveToaster = () => {\n const isMobile = useMediaQuery(\"(max-width: 767px)\")\n const isCoarsePointer = useMediaQuery(\"(hover: none) and (pointer: coarse)\")\n\n const position = isMobile ? \"top-center\" : undefined\n\n useEffect(() => {\n const handler = (event: Event) => {\n const target = event.target\n if (!(target instanceof Element)) return\n if (!target.closest(\"[data-sonner-toaster]\")) return\n event.preventDefault()\n }\n\n document.addEventListener(\"dismissableLayer.pointerDownOutside\", handler, true)\n document.addEventListener(\"dismissableLayer.focusOutside\", handler, true)\n\n return () => {\n document.removeEventListener(\"dismissableLayer.pointerDownOutside\", handler, true)\n document.removeEventListener(\"dismissableLayer.focusOutside\", handler, true)\n }\n }, [])\n\n return (\n <Suspense fallback={null}>\n <MountedLazyToaster\n closeButton={!isCoarsePointer}\n theme=\"dark\"\n position={position}\n swipeDirections={isCoarsePointer ? undefined : []}\n style={{\n pointerEvents: \"auto\",\n [\"--toast-close-button-start\" as any]: \"unset\",\n [\"--toast-close-button-end\" as any]: \"0\",\n [\"--toast-close-button-transform\" as any]: \"translate(35%, -35%)\",\n }}\n toastOptions={{\n style: {\n pointerEvents: \"auto\",\n userSelect: \"text\",\n },\n }}\n />\n </Suspense>\n )\n}\n\nexport const Toaster = () => {\n useEffect(() => {\n if (typeof window === \"undefined\") return\n\n const startDeferred = () => {\n if (typeof window.requestIdleCallback === \"function\") {\n window.requestIdleCallback(() => startToaster(), { timeout: 2000 })\n return\n }\n\n window.setTimeout(() => startToaster(), 150)\n }\n\n if (isPageLoaded()) {\n startDeferred()\n return\n }\n\n window.addEventListener(\"load\", startDeferred, { once: true })\n\n return () => {\n window.removeEventListener(\"load\", startDeferred)\n }\n }, [])\n\n const requested = useSyncExternalStore(\n subscribeToasterRequested,\n getToasterRequested,\n getToasterRequested,\n )\n\n if (!requested) return null\n\n return <ActiveToaster />\n}\n","import env from \"@rpcbase/env\"\nimport type { Application } from \"express\"\nimport type { Ctx } from \"@rpcbase/api\"\n\n\ntype ServerArgs = {\n app: Application;\n};\n\ntype InitOptions = {\n baseURL?: string;\n};\n\ntype PayloadNotCtx = Record<string, unknown> & {\n [P in keyof Ctx]?: never;\n};\n\ntype ApiClientMethod = <TResponse = Record<string, unknown>>(\n path: string,\n payload: PayloadNotCtx,\n ctx?: Ctx,\n) => Promise<TResponse>;\n\nexport type HttpMethod = \"get\" | \"put\" | \"post\" | \"delete\";\ntype MethodRecord<T> = Record<HttpMethod, T>;\n\nexport type ApiClient = MethodRecord<ApiClientMethod>;\n\nlet apiClient: ApiClient\n\nexport const initApiClient = async (args?: ServerArgs | InitOptions) => {\n if (env.SSR) {\n if (!args) {\n throw new Error(\"Server args must be provided in SSR mode\")\n }\n\n const { getServerApiClient } = await import(\"./getServerApiClient\")\n\n apiClient = await getServerApiClient((args as ServerArgs).app)\n } else {\n // Force the browser build of axios so Vite doesn't try to bundle the\n // Node http adapter (which drags in `follow-redirects` and core modules).\n const axios = (await import(\"axios/dist/browser/axios.cjs\")).default\n\n const axiosClient = axios.create({\n baseURL: args && \"baseURL\" in args ? args?.baseURL ?? \"/\" : \"/\",\n withCredentials: true,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n })\n\n const createMethod = (method: HttpMethod): ApiClientMethod => {\n return async <TResponse = Record<string, unknown>>(\n path: string,\n payload: PayloadNotCtx,\n _ctx?: Ctx,\n ): Promise<TResponse> => {\n const config = {\n method,\n url: path,\n ...(method === \"get\" ? { params: payload } : { data: payload }),\n headers: {\n // ...(typeof ctxOrPath !== 'string' && {\n // // 'X-Custom-Header': ctxOrPath.someHeaderValue,\n // // ...ctxOrPath.additionalHeaders,\n // }),\n },\n }\n\n try {\n const response = await axiosClient(config)\n return response.data\n } catch (error) {\n console.log(\"AXIOS API ERROR\", error)\n throw error\n }\n }\n }\n\n apiClient = {\n get: createMethod(\"get\"),\n put: createMethod(\"put\"),\n post: createMethod(\"post\"),\n delete: createMethod(\"delete\"),\n }\n }\n}\n\nexport { apiClient }\n","import env from \"@rpcbase/env\"\n\n\nconst CLEANUP_WAIT_DELAY = 1000\n\n// Function to clean UTM params while preserving others\nexport const cleanupURL = () => {\n if (env.SSR) {\n return\n }\n\n const runCleanup = () => {\n // Add a small delay before running cleanupURL\n setTimeout(() => {\n const url = new URL(window.location.href)\n const params = new URLSearchParams(url.search)\n\n // Get all current query parameter keys\n const paramKeys = Array.from(params.keys())\n\n // Remove any parameter starting with 'utm_'\n paramKeys.forEach((key) => {\n if (key.startsWith(\"utm_\")) {\n params.delete(key)\n }\n })\n\n // Build the new URL: keep pathname and append remaining query params (if any)\n const cleanUrl =\n url.pathname +\n (params.toString() ? \"?\" + params.toString() : \"\") +\n url.hash\n\n // Update the browser URL without reloading\n window.history.replaceState({}, document.title, cleanUrl)\n }, CLEANUP_WAIT_DELAY)\n }\n\n // If DOM is already loaded, schedule the cleanup\n if (\n document.readyState === \"complete\" ||\n document.readyState === \"interactive\"\n ) {\n runCleanup()\n } else {\n // Otherwise wait for the DOM content to be loaded\n document.addEventListener(\"DOMContentLoaded\", runCleanup, { once: true })\n }\n}\n","import { getNavigationGuards, type DataRouter, type NavigationGuard } from \"@rpcbase/router\"\n\n\nconst DEFAULT_PRIORITY = 0\n\nconst canBlockNavigation = (\n guard: NavigationGuard,\n {\n isPathnameChange,\n isSearchChange,\n }: {\n isPathnameChange: boolean\n isSearchChange: boolean\n },\n): boolean => {\n if (!guard.enabled) return false\n if (isPathnameChange) return true\n if (isSearchChange && guard.blockOnSearch) return true\n return false\n}\n\nconst pickNavigationGuard = (\n args: Parameters<NavigationGuard[\"shouldBlockNavigation\"]>[0],\n): NavigationGuard | null => {\n const isPathnameChange =\n args.currentLocation.pathname !== args.nextLocation.pathname\n const isSearchChange = args.currentLocation.search !== args.nextLocation.search\n\n if (!isPathnameChange && !isSearchChange) {\n return null\n }\n\n const eligibleGuards = getNavigationGuards()\n .filter((guard) => canBlockNavigation(guard, { isPathnameChange, isSearchChange }))\n .filter((guard) => guard.shouldBlockNavigation(args))\n\n if (eligibleGuards.length === 0) {\n return null\n }\n\n return eligibleGuards.reduce<NavigationGuard>((best, guard) => {\n const bestPriority = best.priority ?? DEFAULT_PRIORITY\n const guardPriority = guard.priority ?? DEFAULT_PRIORITY\n return guardPriority > bestPriority ? guard : best\n }, eligibleGuards[0]!)\n}\n\nconst getLocationDedupKey = (location: { key?: string; pathname: string; search: string }): string =>\n location.key ?? `${location.pathname}${location.search}`\n\nconst hasUnloadBlockers = (): boolean =>\n getNavigationGuards().some((guard) => guard.enabled && guard.shouldBlockUnload)\n\ntype NavigationGuardWindowState = {\n suppressBeforeUnloadFromKey: string | null\n nativePromptActive: boolean\n}\n\nconst getWindowState = (): NavigationGuardWindowState | null => {\n if (typeof window === \"undefined\") return null\n\n const key = \"__rpcbaseNavigationGuardWindowState\"\n const globalAny = window as any\n\n if (globalAny[key]) {\n const existing = globalAny[key] as any\n if (typeof existing.suppressBeforeUnloadFromKey === \"undefined\") {\n existing.suppressBeforeUnloadFromKey = null\n }\n return existing as NavigationGuardWindowState\n }\n\n const created: NavigationGuardWindowState = {\n suppressBeforeUnloadFromKey: null,\n nativePromptActive: false,\n }\n globalAny[key] = created\n return created\n}\n\nconst getGlobalGuardWeakSet = (): WeakSet<object> => {\n const key = \"__rpcbaseNavigationGuardInstalledRouters\"\n const globalAny = globalThis as any\n const existing = globalAny[key]\n if (existing && existing instanceof WeakSet) {\n return existing\n }\n const created = new WeakSet<object>()\n globalAny[key] = created\n return created\n}\n\nexport const installGlobalNavigationGuard = (router: DataRouter): void => {\n const installedRouters = getGlobalGuardWeakSet()\n if (installedRouters.has(router as unknown as object)) {\n return\n }\n installedRouters.add(router as unknown as object)\n\n const blockerKey = \"rpcbase:navigation-guards\"\n const windowState = getWindowState()\n\n let lastArgs: Parameters<NavigationGuard[\"shouldBlockNavigation\"]>[0] | null = null\n let lastPromptedLocationKey: string | null = null\n\n router.getBlocker(blockerKey, (args) => {\n lastArgs = args\n if (windowState?.nativePromptActive && args.historyAction !== \"POP\") {\n windowState.nativePromptActive = false\n }\n return pickNavigationGuard(args) !== null\n })\n\n router.subscribe((state) => {\n if (windowState?.suppressBeforeUnloadFromKey && (state as any)?.location) {\n const currentKey = getLocationDedupKey((state as any).location)\n if (currentKey !== windowState.suppressBeforeUnloadFromKey) {\n windowState.suppressBeforeUnloadFromKey = null\n }\n }\n\n const blocker = state.blockers.get(blockerKey)\n\n if (!blocker || blocker.state !== \"blocked\") {\n lastPromptedLocationKey = null\n return\n }\n\n const blockedLocation = blocker.location\n const dedupKey = getLocationDedupKey(blockedLocation)\n if (lastPromptedLocationKey === dedupKey) {\n return\n }\n\n lastPromptedLocationKey = dedupKey\n\n if (windowState?.nativePromptActive && lastArgs?.historyAction === \"POP\") {\n windowState.nativePromptActive = false\n blocker.reset()\n return\n }\n\n const args = lastArgs\n if (!args) {\n blocker.proceed()\n return\n }\n\n const guard = pickNavigationGuard(args)\n if (!guard) {\n blocker.proceed()\n return\n }\n\n const ok = window.confirm(guard.message)\n if (ok) {\n if (windowState) {\n windowState.suppressBeforeUnloadFromKey = getLocationDedupKey(args.currentLocation)\n }\n blocker.proceed()\n } else {\n blocker.reset()\n }\n })\n\n if (typeof window !== \"undefined\") {\n const key = \"__rpcbaseBeforeUnloadNavigationGuardInstalled\"\n const globalAny = window as any\n\n if (!globalAny[key]) {\n globalAny[key] = true\n\n window.addEventListener(\"beforeunload\", (event: BeforeUnloadEvent) => {\n const state = getWindowState()\n if (state && state.suppressBeforeUnloadFromKey) {\n state.suppressBeforeUnloadFromKey = null\n return\n }\n\n if (!hasUnloadBlockers()) {\n return\n }\n\n if (state) {\n state.nativePromptActive = true\n }\n\n event.preventDefault()\n event.returnValue = \"\"\n })\n }\n }\n}\n","export const SSR_ERROR_STATE_GLOBAL_KEY = \"__RPCBASE_SSR_ERROR__\"\n\nexport type SsrErrorStatePayload = {\n statusCode?: number\n title?: string\n message?: string\n details?: string\n}\n\nconst ESCAPED_LT = /</g\nconst ESCAPED_U2028 = /\\u2028/g\nconst ESCAPED_U2029 = /\\u2029/g\n\nexport const serializeSsrErrorState = (state: SsrErrorStatePayload): string =>\n JSON.stringify(state)\n .replace(ESCAPED_LT, \"\\\\u003c\")\n .replace(ESCAPED_U2028, \"\\\\u2028\")\n .replace(ESCAPED_U2029, \"\\\\u2029\")\n\nexport const peekClientSsrErrorState = (): SsrErrorStatePayload | null => {\n if (typeof window === \"undefined\") {\n return null\n }\n const globalScope = window as typeof window & Record<string, unknown>\n const state = globalScope[SSR_ERROR_STATE_GLOBAL_KEY] as SsrErrorStatePayload | undefined\n if (state && typeof state === \"object\") {\n return state\n }\n return null\n}\n\nexport const consumeClientSsrErrorState = (): SsrErrorStatePayload | null => {\n const state = peekClientSsrErrorState()\n if (!state) {\n return null\n }\n if (typeof window !== \"undefined\") {\n delete (window as typeof window & Record<string, unknown>)[SSR_ERROR_STATE_GLOBAL_KEY]\n }\n return state\n}\n","import { ReactNode } from \"react\"\n\nimport { SsrErrorStatePayload } from \"../ssrErrorState\"\n\n\ntype RenderErrorExtra = (state: SsrErrorStatePayload) => ReactNode\n\ntype SsrErrorFallbackProps = {\n state: SsrErrorStatePayload\n renderErrorExtra?: RenderErrorExtra\n}\n\nconst DEFAULT_TITLE = \"Something went wrong\"\nconst DEFAULT_MESSAGE = \"We couldn't render this page. Please try again in a few seconds.\"\n\nexport const SsrErrorFallback = ({ state, renderErrorExtra }: SsrErrorFallbackProps) => {\n const {\n statusCode = 500,\n title = DEFAULT_TITLE,\n message = DEFAULT_MESSAGE,\n details,\n } = state\n\n const extra = renderErrorExtra?.(state)\n\n return (\n <div className=\"bg-white min-h-screen\">\n <main className=\"mx-auto flex min-h-screen max-w-2xl flex-col items-center justify-center px-6 py-12 text-center sm:py-24\">\n <p className=\"text-base font-semibold text-rose-600\">{statusCode}</p>\n <h1 className=\"mt-4 text-pretty text-4xl font-semibold tracking-tight text-gray-900 sm:text-5xl\">\n {title}\n </h1>\n <p className=\"mt-6 text-lg text-gray-600 sm:text-xl/relaxed\">{message}</p>\n\n {details ? (\n <div className=\"mt-10 w-full rounded-2xl bg-gray-900/95 p-5 text-left shadow-2xl\">\n <p className=\"text-sm font-semibold uppercase tracking-wide text-gray-400\">Debug details</p>\n <pre className=\"mt-3 max-h-64 overflow-auto whitespace-pre-wrap text-sm text-gray-100\">\n {details}\n </pre>\n </div>\n ) : null}\n\n {extra ? (\n <div className=\"mt-10 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-center\">\n {extra}\n </div>\n ) : null}\n </main>\n </div>\n )\n}\n","import env from \"@rpcbase/env\"\nimport { ReactNode, StrictMode, useEffect, useState } from \"react\"\nimport {createBrowserRouter, createRoutesFromElements, RouterProvider} from \"@rpcbase/router\"\nimport { hydrateRoot } from \"react-dom/client\"\n\nimport { initApiClient } from \"./apiClient\"\nimport {cleanupURL} from \"./cleanupURL\"\nimport { reportClientException } from \"./errorReporting\"\nimport { installGlobalNavigationGuard } from \"./navigationGuard/installGlobalNavigationGuard\"\nimport { hydrateRtsFromWindow, resolveRtsHydrationIdentityFromStaticRouterData } from \"./rts/ssrHydration\"\nimport {\n consumeClientSsrErrorState,\n peekClientSsrErrorState,\n SsrErrorStatePayload,\n} from \"./ssrErrorState\"\nimport { SsrErrorFallback } from \"./components/SsrErrorFallback\"\nimport { Toaster } from \"./toast\"\n\n\nconst isProduction = env.MODE === \"production\"\n\nconst LOADER_TIMEOUT_MS = 8000\n\ntype ReactErrorInfo = { componentStack?: string }\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst showErrorOverlay = (err: { title: string, message: string, reason: string, plugin: string }) => {\n const ErrorOverlay = customElements.get(\"vite-error-overlay\")\n // don't open outside vite environment\n if (!ErrorOverlay) {return}\n console.log(err)\n const overlay = new ErrorOverlay(err)\n document.body.appendChild(overlay)\n}\n\n\nconst handleServerErrors = () => {\n if ((window as any).__staticRouterHydrationData?.errors) {\n\n const {errors} = (window as any).__staticRouterHydrationData\n\n Object.values(errors).forEach((error: any) => {\n showErrorOverlay({\n plugin: \"ssr-router\",\n ...error.reason\n })\n })\n }\n}\n\nconst wrapLoaderWithTimeout = <T extends (...args: any[]) => any>(loader: T, routeId?: string) =>\n async (...args: Parameters<T>): Promise<Awaited<ReturnType<T>>> =>\n new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n const timer = setTimeout(() => {\n console.error(\"[rpcbase timeout][client loader]\", {routeId, ms: LOADER_TIMEOUT_MS, url: window.location.href})\n reject(new Response(\"Loader timeout\", {status: 504}))\n }, LOADER_TIMEOUT_MS)\n\n Promise.resolve(loader(...args))\n .then((val) => {\n clearTimeout(timer)\n resolve(val as Awaited<ReturnType<T>>)\n })\n .catch((err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n\nconst applyLoaderTimeouts = (routes: any[]): void => {\n routes.forEach((route) => {\n if (route.loader) {\n route.loader = wrapLoaderWithTimeout(route.loader, route.id)\n }\n\n if (route.lazy) {\n const origLazy = route.lazy\n route.lazy = async (...lazyArgs: any[]) => {\n const mod = await origLazy(...lazyArgs)\n if (mod?.loader) {\n const origLoader = mod.loader\n mod.loader = (...loaderArgs: any[]) =>\n wrapLoaderWithTimeout(origLoader as any, route.id)(...loaderArgs)\n }\n return mod\n }\n }\n\n if (route.children) {\n applyLoaderTimeouts(route.children)\n }\n })\n}\n\ntype InitWithRoutesOptions = {\n devThrowsOnHydrationErrors?: boolean\n renderErrorExtra?: (state: SsrErrorStatePayload) => ReactNode\n}\n\ntype RoutesElement = Parameters<typeof createRoutesFromElements>[0]\n\nconst getRootElement = () => {\n const el = document.getElementById(\"root\")\n if (!el) {\n throw new Error(\"Root element #root not found\")\n }\n return el\n}\n\nconst hydrateSsrFallbackIfPresent = (\n rootElement: HTMLElement,\n renderErrorExtra?: (state: SsrErrorStatePayload) => ReactNode,\n): boolean => {\n const ssrErrorState = peekClientSsrErrorState()\n if (!ssrErrorState) {\n return false\n }\n\n consumeClientSsrErrorState()\n\n hydrateRoot(\n rootElement,\n <StrictMode>\n <SsrErrorFallback state={ssrErrorState} renderErrorExtra={renderErrorExtra} />\n </StrictMode>,\n )\n return true\n}\n\nconst ClientOnly = ({ children }: { children: ReactNode }) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n if (!mounted) return null\n\n return <>{children}</>\n}\n\nexport const initWithRoutes = async (\n routesElement: RoutesElement,\n opts?: InitWithRoutesOptions\n) => {\n\n const rootElement = getRootElement()\n\n if (hydrateSsrFallbackIfPresent(rootElement, opts?.renderErrorExtra)) {\n return\n }\n\n await initApiClient()\n\n cleanupURL()\n\n handleServerErrors()\n hydrateRtsFromWindow(resolveRtsHydrationIdentityFromStaticRouterData())\n\n\n const routes = createRoutesFromElements(routesElement)\n applyLoaderTimeouts(routes)\n const router = createBrowserRouter(routes, {})\n installGlobalNavigationGuard(router)\n\n const toError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error))\n\n const mentionsHydration = (value: unknown, depth = 0): boolean => {\n if (depth > 5) {\n return false\n }\n if (typeof value === \"string\") {\n return value.toLowerCase().includes(\"hydrat\")\n }\n if (value instanceof Error) {\n const digest = (value as { digest?: unknown }).digest\n const cause = (value as { cause?: unknown }).cause\n return (\n mentionsHydration(value.message, depth + 1) ||\n mentionsHydration(digest, depth + 1) ||\n mentionsHydration(cause, depth + 1)\n )\n }\n return false\n }\n\n const reactErrorHandler =\n (reactContext: \"uncaught\" | \"caught\" | \"recoverable\") =>\n (error: unknown, errorInfo?: ReactErrorInfo) => {\n const err = toError(error)\n reportClientException(err, {\n reactContext,\n componentStack: errorInfo?.componentStack,\n })\n if (reactContext === \"uncaught\") {\n console.warn(\"Uncaught error\", err, errorInfo?.componentStack)\n }\n }\n\n const hydrationOptions: Parameters<typeof hydrateRoot>[2] | undefined = isProduction ? {\n onUncaughtError: reactErrorHandler(\"uncaught\"),\n onCaughtError: reactErrorHandler(\"caught\"),\n onRecoverableError: reactErrorHandler(\"recoverable\")\n } : (opts?.devThrowsOnHydrationErrors ? {\n onRecoverableError(error, errorInfo) {\n const err = toError(error)\n if (mentionsHydration(err) || mentionsHydration(errorInfo?.componentStack)) {\n throw err\n }\n // For non-hydration recoverable errors in dev, keep a visible signal.\n console.error(err, errorInfo?.componentStack)\n }\n } : undefined)\n\n\n hydrateRoot(\n rootElement,\n <StrictMode>\n <>\n <RouterProvider router={router} />\n <ClientOnly>\n <Toaster />\n </ClientOnly>\n </>\n </StrictMode>,\n hydrationOptions\n )\n}\n\n// initialize react grab in dev\nif (!isProduction && !env.SSR) {\n import(\"react-grab/core\").then(({ init }) => {\n // eslint-disable-next-line\n const api = init({\n // theme: { hue: 350 }\n })\n })\n}\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n","import env from \"@rpcbase/env\"\nimport _snakeCase from \"lodash/snakeCase\"\n\n\nexport const getFeatureFlag = async (\n flag: string,\n): Promise<boolean | string | undefined> => {\n const envKey = `RB_PUBLIC_FLAG_${_snakeCase(flag).toUpperCase()}`\n\n if (env.SSR) {\n if (process.env[envKey] !== undefined) {\n return process.env[envKey]\n }\n\n const startTime = performance.now()\n // Use a runtime dynamic import so bundlers building for the browser don't\n // try to include the Node-only `posthog-node` package (it pulls in `fs`,\n // `path`, etc. and breaks client builds).\n const { PostHog } = await (Function(\"return import('posthog-node')\")() as Promise<typeof import(\"posthog-node\")>)\n const client = new PostHog(\n process.env.RB_PUBLIC_POSTHOG_KEY!,\n { host: \"https://eu.i.posthog.com\" },\n )\n\n const distinctId = \"server\"\n console.log(\"TODO: NYI server side feature flags client distinctId\")\n const value = await client.getFeatureFlag(flag, distinctId)\n const endTime = performance.now()\n console.log(`SSR: Feature flag \"${flag}\" loaded in ${(endTime - startTime).toFixed(2)}ms`)\n\n return value\n } else {\n if (import.meta.env[envKey] !== undefined) {\n return import.meta.env[envKey]\n }\n\n const startTime = performance.now()\n const { posthog } = await import(\"posthog-js\")\n\n let hasLoadedFeatureFlags = false\n const TIMEOUT_MS = 8000\n\n function waitForFeatureFlags(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (hasLoadedFeatureFlags) {\n resolve()\n } else {\n const timeout = setTimeout(() => {\n // Bubble up a clear failure instead of hanging indefinitely.\n reject(new Error(`PostHog feature flags did not load within ${TIMEOUT_MS}ms`))\n }, TIMEOUT_MS)\n\n posthog.onFeatureFlags(() => {\n hasLoadedFeatureFlags = true\n clearTimeout(timeout)\n resolve()\n })\n }\n })\n }\n\n await waitForFeatureFlags()\n const endTime = performance.now()\n\n console.log(`Client: Feature flag \"${flag}\" loaded in ${(endTime - startTime).toFixed(2)}ms`)\n\n return posthog.getFeatureFlag(flag)\n }\n}\n","import { useCallback, useEffect, useRef } from \"react\"\nimport { useLocation } from \"@rpcbase/router\"\n\n\nfunction throttle(callback: (...args: any[]) => void, limit: number) {\n let wait = false\n return (...args: any[]) => {\n if (!wait) {\n callback(...args)\n wait = true\n setTimeout(() => {\n wait = false\n }, limit)\n }\n }\n}\n\nexport function useApplyScroll() {\n const location = useLocation()\n const previousPathRef = useRef(location.pathname)\n const isScrollingProgrammatically = useRef(false)\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const lastAppliedHashRef = useRef(\"\")\n\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n lastAppliedHashRef.current = window.location.hash || \"\"\n }\n }, [])\n\n useEffect(() => {\n lastAppliedHashRef.current = location.hash || \"\"\n }, [location.hash])\n\n const replaceHashSilently = useCallback((hash: string) => {\n if (typeof window === \"undefined\") {\n return\n }\n if (lastAppliedHashRef.current === hash) {\n return\n }\n const base = `${window.location.pathname}${window.location.search}`\n window.history.replaceState(window.history.state, \"\", `${base}${hash}`)\n lastAppliedHashRef.current = hash\n }, [])\n\n const markProgrammaticScroll = useCallback(() => {\n isScrollingProgrammatically.current = true\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n scrollTimeoutRef.current = setTimeout(() => {\n isScrollingProgrammatically.current = false\n }, 1000)\n }, [])\n\n useEffect(() => {\n const pathChanged = previousPathRef.current !== location.pathname\n\n if (pathChanged) {\n previousPathRef.current = location.pathname\n\n if (!location.hash) {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" })\n return\n }\n\n setTimeout(() => {\n const id = location.hash.substring(1)\n const element = document.getElementById(id)\n if (element) {\n markProgrammaticScroll()\n element.scrollIntoView({ behavior: \"smooth\" })\n }\n }, 100)\n\n return\n }\n\n if (!location.hash) {\n return\n }\n\n const id = location.hash.substring(1)\n const element = document.getElementById(id)\n if (element) {\n markProgrammaticScroll()\n element.scrollIntoView({ behavior: \"smooth\" })\n }\n }, [location.hash, location.pathname, markProgrammaticScroll])\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n const handleScroll = throttle(() => {\n if (isScrollingProgrammatically.current) {\n return\n }\n\n const sections = Array.from(document.querySelectorAll<HTMLElement>(\"section[id]\"))\n\n if (sections.length === 0) {\n replaceHashSilently(\"\")\n return\n }\n\n const scrollPosition = window.scrollY\n const viewportHeight = window.innerHeight\n const checkPoint = scrollPosition + viewportHeight / 3\n\n let activeSectionId: string | null = null\n for (const section of sections) {\n if (\n section.offsetTop <= checkPoint &&\n section.offsetTop + section.offsetHeight > checkPoint\n ) {\n activeSectionId = section.id\n break\n }\n }\n\n const newHash = activeSectionId ? `#${activeSectionId}` : \"\"\n replaceHashSilently(newHash)\n }, 150)\n\n document.addEventListener(\"scroll\", handleScroll)\n return () => {\n document.removeEventListener(\"scroll\", handleScroll)\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n scrollTimeoutRef.current = null\n }\n }\n }, [replaceHashSilently])\n\n useEffect(() => {\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement | null\n const link = target?.closest(\"a\")\n const currentHash =\n typeof window !== \"undefined\"\n ? window.location.hash\n : location.hash || \"\"\n\n if (\n !link ||\n !link.hash ||\n link.pathname !== location.pathname ||\n link.hash !== currentHash\n ) {\n return\n }\n\n const id = link.hash.substring(1)\n const element = document.getElementById(id)\n if (element) {\n event.preventDefault()\n event.stopPropagation()\n markProgrammaticScroll()\n element.scrollIntoView({ behavior: \"smooth\" })\n }\n }\n\n document.addEventListener(\"click\", handleClick, true)\n return () => document.removeEventListener(\"click\", handleClick, true)\n }, [location.hash, location.pathname, markProgrammaticScroll])\n}\n","import { ReactNode } from \"react\"\n\nimport { useApplyScroll } from \"../utils/useApplyScroll\"\n\n\ntype RootProviderProps = {\n children: ReactNode\n}\n\nexport const RootProvider = ({children}: RootProviderProps) => {\n useApplyScroll()\n\n return <>{children}</>\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","const { getOwnPropertyNames, getOwnPropertySymbols } = Object;\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { hasOwnProperty } = Object.prototype;\n/**\n * Combine two comparators into a single comparators.\n */\nfunction combineComparators(comparatorA, comparatorB) {\n return function isEqual(a, b, state) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nfunction createIsCircular(areItemsEqual) {\n return function isCircular(a, b, state) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n const { cache } = state;\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n cache.set(a, b);\n cache.set(b, a);\n const result = areItemsEqual(a, b, state);\n cache.delete(a);\n cache.delete(b);\n return result;\n };\n}\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nfunction getStrictProperties(object) {\n return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n}\n/**\n * Whether the object contains the property passed as an own property.\n */\nconst hasOwn = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.hasOwn || ((object, property) => hasOwnProperty.call(object, property));\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_OWNER = '_owner';\nconst { getOwnPropertyDescriptor, keys } = Object;\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevalue) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`) or both are `NaN`.\n *\n * @note\n * When available in the environment, this is just a re-export of the global\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) method.\n */\nconst sameValueEqual = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.is\n || function sameValueEqual(a, b) {\n return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n };\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevaluezero) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`), both are `NaN`, or both\n * are either positive or negative zero.\n */\nfunction sameValueZeroEqual(a, b) {\n return a === b || (a !== a && b !== b);\n}\n/**\n * Whether the values passed are equal based on a\n * [Strict Equality Comparison](https://262.ecma-international.org/7.0/#sec-strict-equality-comparison) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`).\n *\n * @note\n * This is mainly available as a convenience function, such as being a default when a function to determine equality between\n * two objects is used.\n */\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\n * Whether the array buffers are equal in value.\n */\nfunction areArrayBuffersEqual(a, b) {\n return a.byteLength === b.byteLength && areTypedArraysEqual(new Uint8Array(a), new Uint8Array(b));\n}\n/**\n * Whether the arrays are equal in value.\n */\nfunction areArraysEqual(a, b, state) {\n let index = a.length;\n if (b.length !== index) {\n return false;\n }\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the dataviews are equal in value.\n */\nfunction areDataViewsEqual(a, b) {\n return (a.byteLength === b.byteLength\n && areTypedArraysEqual(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)));\n}\n/**\n * Whether the dates passed are equal in value.\n */\nfunction areDatesEqual(a, b) {\n return sameValueEqual(a.getTime(), b.getTime());\n}\n/**\n * Whether the errors passed are equal in value.\n */\nfunction areErrorsEqual(a, b) {\n return a.name === b.name && a.message === b.message && a.cause === b.cause && a.stack === b.stack;\n}\n/**\n * Whether the `Map`s are equal in value.\n */\nfunction areMapsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Array(size);\n const aIterable = a.entries();\n let aResult;\n let bResult;\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.entries();\n let hasMatch = false;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n if (state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state)\n && state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n index++;\n }\n return true;\n}\n/**\n * Whether the objects are equal in value.\n */\nfunction areObjectsEqual(a, b, state) {\n const properties = keys(a);\n let index = properties.length;\n if (keys(b).length !== index) {\n return false;\n }\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n if (!isPropertyEqual(a, b, state, properties[index])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nfunction areObjectsEqualStrict(a, b, state) {\n const properties = getStrictProperties(a);\n let index = properties.length;\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n let property;\n let descriptorA;\n let descriptorB;\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index];\n if (!isPropertyEqual(a, b, state, property)) {\n return false;\n }\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n if ((descriptorA || descriptorB)\n && (!descriptorA\n || !descriptorB\n || descriptorA.configurable !== descriptorB.configurable\n || descriptorA.enumerable !== descriptorB.enumerable\n || descriptorA.writable !== descriptorB.writable)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nfunction arePrimitiveWrappersEqual(a, b) {\n return sameValueEqual(a.valueOf(), b.valueOf());\n}\n/**\n * Whether the regexps passed are equal in value.\n */\nfunction areRegExpsEqual(a, b) {\n return a.source === b.source && a.flags === b.flags;\n}\n/**\n * Whether the `Set`s are equal in value.\n */\nfunction areSetsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Array(size);\n const aIterable = a.values();\n let aResult;\n let bResult;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.values();\n let hasMatch = false;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (!matchedIndices[matchIndex]\n && state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the TypedArray instances are equal in value.\n */\nfunction areTypedArraysEqual(a, b) {\n let index = a.byteLength;\n if (b.byteLength !== index || a.byteOffset !== b.byteOffset) {\n return false;\n }\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the URL instances are equal in value.\n */\nfunction areUrlsEqual(a, b) {\n return (a.hostname === b.hostname\n && a.pathname === b.pathname\n && a.protocol === b.protocol\n && a.port === b.port\n && a.hash === b.hash\n && a.username === b.username\n && a.password === b.password);\n}\nfunction isPropertyEqual(a, b, state, property) {\n if ((property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE)\n && (a.$$typeof || b.$$typeof)) {\n return true;\n }\n return hasOwn(b, property) && state.equals(a[property], b[property], property, property, a, b, state);\n}\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nfunction createEqualityComparator(config) {\n const supportedComparatorMap = createSupportedComparatorMap(config);\n const { areArraysEqual, areDatesEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, areRegExpsEqual, areSetsEqual, getUnsupportedCustomComparator, } = config;\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a, b, state) {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n // If either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n const type = typeof a;\n if (type !== typeof b) {\n return false;\n }\n if (type !== 'object') {\n if (type === 'number' || type === 'bigint') {\n return areNumbersEqual(a, b, state);\n }\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\n }\n const constructor = a.constructor;\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is creating a subclass from a native class, it will be\n // handled with the string tag comparison.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n if (constructor === Array) {\n return areArraysEqual(a, b, state);\n }\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n if (constructor === Promise) {\n // Avoid tag checks for promise values, since we know if they are not referentially equal\n // then they are not equal.\n return false;\n }\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` in edge cases.\n if (Array.isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n // Since this is a custom object, capture the string tag to determining its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = toString.call(a);\n const supportedComparator = supportedComparatorMap[tag];\n if (supportedComparator) {\n return supportedComparator(a, b, state);\n }\n const unsupportedCustomComparator = getUnsupportedCustomComparator && getUnsupportedCustomComparator(a, b, state, tag);\n if (unsupportedCustomComparator) {\n return unsupportedCustomComparator(a, b, state);\n }\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n/**\n * Create the configuration object used for building comparators.\n */\nfunction createEqualityComparatorConfig({ circular, createCustomConfig, strict, }) {\n let config = {\n areArrayBuffersEqual,\n areArraysEqual: strict ? areObjectsEqualStrict : areArraysEqual,\n areDataViewsEqual,\n areDatesEqual: areDatesEqual,\n areErrorsEqual: areErrorsEqual,\n areFunctionsEqual: strictEqual,\n areMapsEqual: strict ? combineComparators(areMapsEqual, areObjectsEqualStrict) : areMapsEqual,\n areNumbersEqual: sameValueEqual,\n areObjectsEqual: strict ? areObjectsEqualStrict : areObjectsEqual,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqual,\n areRegExpsEqual: areRegExpsEqual,\n areSetsEqual: strict ? combineComparators(areSetsEqual, areObjectsEqualStrict) : areSetsEqual,\n areTypedArraysEqual: strict\n ? combineComparators(areTypedArraysEqual, areObjectsEqualStrict)\n : areTypedArraysEqual,\n areUrlsEqual: areUrlsEqual,\n getUnsupportedCustomComparator: undefined,\n };\n if (createCustomConfig) {\n config = Object.assign({}, config, createCustomConfig(config));\n }\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n config = Object.assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n return config;\n}\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nfunction createInternalEqualityComparator(compare) {\n return function (a, b, _indexOrKeyA, _indexOrKeyB, _parentA, _parentB, state) {\n return compare(a, b, state);\n };\n}\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nfunction createIsEqual({ circular, comparator, createState, equals, strict }) {\n if (createState) {\n return function isEqual(a, b) {\n const { cache = circular ? new WeakMap() : undefined, meta } = createState();\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n });\n };\n }\n if (circular) {\n return function isEqual(a, b) {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined,\n strict,\n });\n };\n }\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n };\n return function isEqual(a, b) {\n return comparator(a, b, state);\n };\n}\n/**\n * Create a map of `toString()` values to their respective handlers for `tag`-based lookups.\n */\nfunction createSupportedComparatorMap({ areArrayBuffersEqual, areArraysEqual, areDataViewsEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual, }) {\n return {\n '[object Arguments]': areObjectsEqual,\n '[object Array]': areArraysEqual,\n '[object ArrayBuffer]': areArrayBuffersEqual,\n '[object AsyncGeneratorFunction]': areFunctionsEqual,\n '[object BigInt]': areNumbersEqual,\n '[object BigInt64Array]': areTypedArraysEqual,\n '[object BigUint64Array]': areTypedArraysEqual,\n '[object Boolean]': arePrimitiveWrappersEqual,\n '[object DataView]': areDataViewsEqual,\n '[object Date]': areDatesEqual,\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n '[object Error]': areErrorsEqual,\n '[object Float16Array]': areTypedArraysEqual,\n '[object Float32Array]': areTypedArraysEqual,\n '[object Float64Array]': areTypedArraysEqual,\n '[object Function]': areFunctionsEqual,\n '[object GeneratorFunction]': areFunctionsEqual,\n '[object Int8Array]': areTypedArraysEqual,\n '[object Int16Array]': areTypedArraysEqual,\n '[object Int32Array]': areTypedArraysEqual,\n '[object Map]': areMapsEqual,\n '[object Number]': arePrimitiveWrappersEqual,\n '[object Object]': (a, b, state) => \n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n typeof a.then !== 'function' && typeof b.then !== 'function' && areObjectsEqual(a, b, state),\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\n '[object RegExp]': areRegExpsEqual,\n '[object Set]': areSetsEqual,\n '[object String]': arePrimitiveWrappersEqual,\n '[object URL]': areUrlsEqual,\n '[object Uint8Array]': areTypedArraysEqual,\n '[object Uint8ClampedArray]': areTypedArraysEqual,\n '[object Uint16Array]': areTypedArraysEqual,\n '[object Uint32Array]': areTypedArraysEqual,\n };\n}\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nconst deepEqual = createCustomEqual();\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nconst strictDeepEqual = createCustomEqual({ strict: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nconst circularDeepEqual = createCustomEqual({ circular: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nconst shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nconst strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nconst circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n strict: true,\n});\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nfunction createCustomEqual(options = {}) {\n const { circular = false, createInternalComparator: createCustomInternalComparator, createState, strict = false, } = options;\n const config = createEqualityComparatorConfig(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n\nexport { circularDeepEqual, circularShallowEqual, createCustomEqual, deepEqual, sameValueEqual, sameValueZeroEqual, shallowEqual, strictCircularDeepEqual, strictCircularShallowEqual, strictDeepEqual, strictEqual, strictShallowEqual };\n","import {useState, useEffect, useCallback, useLayoutEffect, useRef, useMemo} from \"react\"\nimport _throttle from \"lodash/throttle\"\nimport { deepEqual } from \"fast-equals\"\n\n\ntype Rect = {x: number, y: number, width: number, height: number, top: number, left: number, bottom: number, right: number}\n\nconst defaultRect: Rect = {x: 0, y: 0, width: 0, height: 0, top: 0, left: 0, bottom: 0, right: 0}\n\nconst useLocalMeasure = () => {\n const [node, setNode] = useState<HTMLElement | null>(null)\n const ref = useCallback((el: HTMLElement | null) => setNode(el), [])\n const [rect, setRect] = useState<Rect>(defaultRect)\n\n // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we call\n // useLayoutEffect directly and guard browser-only APIs inside the effect.\n useLayoutEffect(() => {\n if (typeof window === \"undefined\" || typeof ResizeObserver === \"undefined\") return\n if (!node) return\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry?.contentRect) return\n const { x, y, width, height, top, left, bottom, right } = entry.contentRect as DOMRectReadOnly\n setRect({ x, y, width, height, top, left, bottom, right })\n })\n\n observer.observe(node)\n return () => observer.disconnect()\n }, [node])\n\n return [ref, rect] as const\n}\n\nconst DEFAULT_THROTTLE_TIME = 16\n\nexport const useThrottledMeasure = (throttleDuration = DEFAULT_THROTTLE_TIME) => {\n const hasInitialMeasure = useRef(false)\n\n const [ref, measuredRect] = useLocalMeasure()\n const [rect, setRect] = useState(() => defaultRect)\n\n const throttledSetRect = useMemo(\n () =>\n _throttle(\n (newRect: Rect) => {\n setRect((current) => {\n return deepEqual(current, newRect) ? current : newRect\n })\n },\n throttleDuration,\n {leading: true, trailing: true},\n ),\n [throttleDuration],\n )\n\n useEffect(() => {\n if (measuredRect.width > 0 && !hasInitialMeasure.current) {\n hasInitialMeasure.current = true\n setRect((current) => {\n return deepEqual(current, measuredRect) ? current : measuredRect\n })\n return\n }\n\n throttledSetRect(measuredRect)\n\n return () => {\n throttledSetRect.cancel()\n }\n }, [measuredRect, throttledSetRect])\n\n return [ref, rect]\n}\n","import env from \"@rpcbase/env\"\nimport { ReactNode } from \"react\"\nimport { isRouteErrorResponse, useRouteError } from \"@rpcbase/router\"\n\nimport { SsrErrorFallback } from \"./SsrErrorFallback\"\nimport { SsrErrorStatePayload } from \"../ssrErrorState\"\n\n\ntype RenderErrorExtra = (state: SsrErrorStatePayload) => ReactNode\n\ntype RouteErrorBoundaryProps = {\n renderErrorExtra?: RenderErrorExtra\n}\n\nconst defaultState: Required<Pick<SsrErrorStatePayload, \"statusCode\" | \"title\" | \"message\">> = {\n statusCode: 500,\n title: \"Something went wrong\",\n message: \"We couldn't render this route. Please try again shortly.\",\n}\n\nconst toSsrErrorState = (error: unknown): SsrErrorStatePayload => {\n if (isRouteErrorResponse(error)) {\n const data = error.data as { message?: string } | string | undefined\n const message = typeof data === \"string\" ? data : data?.message || defaultState.message\n\n let details: string | undefined\n if (env.DEV && data && typeof data !== \"string\") {\n try {\n details = JSON.stringify(data, null, 2)\n } catch {\n details = undefined\n }\n }\n\n return {\n statusCode: error.status ?? defaultState.statusCode,\n title: error.statusText || defaultState.title,\n message,\n details,\n }\n }\n\n if (error instanceof Error) {\n return {\n statusCode: defaultState.statusCode,\n title: defaultState.title,\n message: error.message || defaultState.message,\n details: import.meta.env.DEV ? error.stack ?? error.message : undefined,\n }\n }\n\n if (typeof error === \"string\") {\n return {\n statusCode: defaultState.statusCode,\n title: defaultState.title,\n message: error,\n }\n }\n\n return defaultState\n}\n\nexport const RouteErrorBoundary = ({ renderErrorExtra }: RouteErrorBoundaryProps) => {\n const routeError = useRouteError()\n const state = toSsrErrorState(routeError)\n\n return (\n <SsrErrorFallback\n state={state}\n renderErrorExtra={renderErrorExtra}\n />\n )\n}\n","import { apiClient } from \"./apiClient\"\n\n\nexport type NotificationItem = {\n id: string\n topic?: string\n title: string\n body?: string\n url?: string\n createdAt: string\n seenAt?: string\n readAt?: string\n archivedAt?: string\n metadata?: Record<string, unknown>\n}\n\nexport type NotificationDigestFrequency = \"off\" | \"daily\" | \"weekly\"\n\nexport type NotificationTopicPreference = {\n topic: string\n inApp: boolean\n emailDigest: boolean\n push: boolean\n}\n\nexport type NotificationSettings = {\n digestFrequency: NotificationDigestFrequency\n topicPreferences: NotificationTopicPreference[]\n lastDigestSentAt?: string\n}\n\nexport type ListNotificationsInput = {\n includeArchived?: boolean\n unreadOnly?: boolean\n limit?: number\n markSeen?: boolean\n}\n\nexport type ListNotificationsResponse = {\n ok: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\nexport const listNotifications = async (input: ListNotificationsInput = {}) => {\n const result = await apiClient.post<ListNotificationsResponse>(\"/api/rb/notifications\", input)\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to load notifications\")\n }\n return {\n notifications: Array.isArray(result.notifications) ? result.notifications : [],\n unreadCount: Number.isFinite(result.unreadCount) ? Math.max(0, Math.floor(result.unreadCount ?? 0)) : 0,\n unseenCount: Number.isFinite(result.unseenCount) ? Math.max(0, Math.floor(result.unseenCount ?? 0)) : 0,\n }\n}\n\nexport const markNotificationRead = async (notificationId: string) => {\n const id = notificationId.trim()\n if (!id) throw new Error(\"notificationId is required\")\n\n const result = await apiClient.post<{ ok?: boolean; error?: string }>(\n `/api/rb/notifications/${encodeURIComponent(id)}/read`,\n {},\n )\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to mark notification read\")\n }\n}\n\nexport const archiveNotification = async (notificationId: string) => {\n const id = notificationId.trim()\n if (!id) throw new Error(\"notificationId is required\")\n\n const result = await apiClient.post<{ ok?: boolean; error?: string }>(\n `/api/rb/notifications/${encodeURIComponent(id)}/archive`,\n {},\n )\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to archive notification\")\n }\n}\n\nexport const markAllNotificationsRead = async () => {\n const result = await apiClient.post<{ ok?: boolean; error?: string }>(\"/api/rb/notifications/mark-all-read\", {})\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to mark all notifications read\")\n }\n}\n\ntype SettingsResponse = {\n ok?: boolean\n error?: string\n settings?: NotificationSettings\n}\n\nexport const getNotificationSettings = async (): Promise<NotificationSettings> => {\n const result = await apiClient.get<SettingsResponse>(\"/api/rb/notifications/settings\", {})\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to load notification settings\")\n }\n\n return result.settings ?? { digestFrequency: \"weekly\", topicPreferences: [] }\n}\n\nexport const updateNotificationSettings = async (\n partial: Partial<Pick<NotificationSettings, \"digestFrequency\" | \"topicPreferences\">>,\n): Promise<NotificationSettings> => {\n const result = await apiClient.put<SettingsResponse>(\"/api/rb/notifications/settings\", partial)\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to update notification settings\")\n }\n return result.settings ?? { digestFrequency: \"weekly\", topicPreferences: [] }\n}\n\nexport const runNotificationDigest = async ({ force = false }: { force?: boolean } = {}) => {\n const result = await apiClient.post<{ ok?: boolean; error?: string; sent?: boolean; skippedReason?: string }>(\n \"/api/rb/notifications/digest/run\",\n { force },\n )\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to run digest\")\n }\n return { sent: result.sent === true, skippedReason: result.skippedReason }\n}\n","import { createContext, useContext, useEffect, useMemo, useRef, type ReactNode } from \"react\"\n\nimport { toast } from \"./toast\"\nimport { useQuery } from \"./rts\"\nimport type { NotificationItem } from \"./notifications\"\n\n\ntype SettingsDoc = {\n _id: string\n userId: string\n topicPreferences?: Array<{\n topic?: string\n inApp?: boolean\n }>\n}\n\ntype NotificationDoc = {\n _id: string\n userId?: string\n topic?: string\n title?: string\n body?: string\n url?: string\n createdAt?: string | Date\n seenAt?: string | Date\n readAt?: string | Date\n archivedAt?: string | Date\n metadata?: Record<string, unknown>\n}\n\nexport type NotificationsRealtimeState = {\n notifications: NotificationItem[]\n unreadCount: number\n unseenCount: number\n loading: boolean\n error: unknown\n}\n\nexport const NotificationsRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nconst toIso = (value: unknown): string | undefined => {\n if (value instanceof Date) return value.toISOString()\n if (typeof value === \"string\") return value\n return undefined\n}\n\nconst toNotificationItem = (doc: NotificationDoc): NotificationItem | null => {\n const id = typeof doc._id === \"string\" ? doc._id : String(doc._id ?? \"\")\n if (!id) return null\n\n return {\n id,\n topic: typeof doc.topic === \"string\" ? doc.topic : undefined,\n title: typeof doc.title === \"string\" ? doc.title : \"\",\n body: typeof doc.body === \"string\" ? doc.body : undefined,\n url: typeof doc.url === \"string\" ? doc.url : undefined,\n createdAt: toIso(doc.createdAt) ?? new Date().toISOString(),\n seenAt: toIso(doc.seenAt),\n readAt: toIso(doc.readAt),\n archivedAt: toIso(doc.archivedAt),\n metadata: typeof doc.metadata === \"object\" && doc.metadata !== null ? doc.metadata : undefined,\n }\n}\n\nconst buildDisabledTopics = (settings: SettingsDoc | null): string[] => {\n const raw = settings?.topicPreferences\n if (!Array.isArray(raw) || raw.length === 0) return []\n\n return raw\n .map((pref) => {\n if (!pref || typeof pref !== \"object\") return null\n const topic = typeof pref.topic === \"string\" ? pref.topic.trim() : \"\"\n if (!topic) return null\n return pref.inApp === false ? topic : null\n })\n .filter((topic): topic is string => Boolean(topic))\n}\n\nexport function NotificationsRealtimeProvider({\n userId,\n limit = 200,\n toastOnNew = true,\n children,\n}: {\n userId?: string\n limit?: number\n toastOnNew?: boolean\n children: ReactNode\n}) {\n const trimmedUserId = typeof userId === \"string\" ? userId.trim() : \"\"\n const canUseRts = Boolean(trimmedUserId)\n\n const settingsQuery = useQuery<SettingsDoc>(\n \"RBNotificationSettings\",\n useMemo(() => (canUseRts ? { userId: trimmedUserId } : {}), [canUseRts, trimmedUserId]),\n useMemo(() => ({ key: \"rb.notifications.settings\", limit: 1, enabled: canUseRts }), [canUseRts]),\n )\n\n const settings = (settingsQuery.data?.[0] ?? null) as SettingsDoc | null\n const disabledTopics = useMemo(() => buildDisabledTopics(settings), [settings])\n\n const query = useMemo(() => {\n if (!canUseRts) return {}\n const base: Record<string, unknown> = {\n userId: trimmedUserId,\n archivedAt: { $exists: false },\n }\n if (disabledTopics.length > 0) {\n base.topic = { $nin: disabledTopics }\n }\n return base\n }, [canUseRts, disabledTopics, trimmedUserId])\n\n const notificationsQuery = useQuery<NotificationDoc>(\n \"RBNotification\",\n query,\n useMemo(() => ({\n key: \"rb.notifications\",\n sort: { createdAt: -1 },\n limit,\n enabled: canUseRts,\n }), [canUseRts, limit]),\n )\n\n const notifications = useMemo(() => {\n const raw = notificationsQuery.data\n if (!Array.isArray(raw)) return []\n return raw\n .map((doc) => toNotificationItem(doc))\n .filter((n): n is NotificationItem => Boolean(n))\n }, [notificationsQuery.data])\n\n const unreadCount = useMemo(() => notifications.reduce((acc, n) => acc + (n.readAt ? 0 : 1), 0), [notifications])\n const unseenCount = useMemo(() => notifications.reduce((acc, n) => acc + (n.seenAt ? 0 : 1), 0), [notifications])\n\n const lastToastIds = useRef<Set<string>>(new Set())\n const hasSeededToastIds = useRef(false)\n const toastStartMs = useRef<number>(Date.now())\n\n useEffect(() => {\n hasSeededToastIds.current = false\n lastToastIds.current = new Set()\n toastStartMs.current = Date.now()\n }, [trimmedUserId])\n\n useEffect(() => {\n if (!toastOnNew) return\n if (!canUseRts) return\n if (notificationsQuery.loading) return\n\n if (!hasSeededToastIds.current) {\n hasSeededToastIds.current = true\n lastToastIds.current = new Set(notifications.map((n) => n.id))\n return\n }\n\n const nextNew = notifications.filter((n) => !lastToastIds.current.has(n.id))\n if (!nextNew.length) return\n\n for (const n of nextNew) {\n lastToastIds.current.add(n.id)\n }\n\n const isTabActive = typeof document !== \"undefined\" && document.visibilityState === \"visible\"\n if (!isTabActive) return\n\n const eligible = nextNew.filter((n) => {\n const createdAtMs = Date.parse(n.createdAt)\n if (!Number.isFinite(createdAtMs)) return true\n return createdAtMs >= toastStartMs.current\n })\n if (!eligible.length) return\n\n if (eligible.length > 3) {\n toast(`${eligible.length} new notifications`, { description: \"Open the notifications drawer to view them.\" })\n return\n }\n\n for (const n of eligible) {\n toast(n.title || \"New notification\", { description: n.body })\n }\n }, [canUseRts, notifications, notificationsQuery.loading, toastOnNew])\n\n const value = useMemo<NotificationsRealtimeState>(() => ({\n notifications,\n unreadCount,\n unseenCount,\n loading: notificationsQuery.loading,\n error: notificationsQuery.error,\n }), [notifications, notificationsQuery.error, notificationsQuery.loading, unreadCount, unseenCount])\n\n return (\n <NotificationsRealtimeContext.Provider value={canUseRts ? value : null}>\n {children}\n </NotificationsRealtimeContext.Provider>\n )\n}\n\nexport const useNotificationsRealtime = (): NotificationsRealtimeState | null => {\n return useContext(NotificationsRealtimeContext)\n}\n"],"names":["jsx","require$$0","global","hasOwnProperty","require$$1","require$$2","require$$3","toString","id","element","throttle","sameValueEqual","areArraysEqual","areDatesEqual","areMapsEqual","areObjectsEqual","areRegExpsEqual","areSetsEqual","areArrayBuffersEqual","areDataViewsEqual","areErrorsEqual","arePrimitiveWrappersEqual","areTypedArraysEqual","areUrlsEqual","n"],"mappings":"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,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAC1B,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACtF,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACtF,KAAU;AAAA,IAAM,KAAU;AAAA,IAC1B,KAA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","x_google_ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,33,34,35,36,37,38,39,40]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/hooks/useMediaQuery.ts","../src/toast.tsx","../src/apiClient/index.ts","../src/cleanupURL.ts","../src/navigationGuard/installGlobalNavigationGuard.ts","../src/ssrErrorState.ts","../src/components/SsrErrorFallback.tsx","../src/initWithRoutes.tsx","../../../node_modules/lodash/_arrayReduce.js","../../../node_modules/lodash/_basePropertyOf.js","../../../node_modules/lodash/_deburrLetter.js","../../../node_modules/lodash/_freeGlobal.js","../../../node_modules/lodash/_root.js","../../../node_modules/lodash/_Symbol.js","../../../node_modules/lodash/_arrayMap.js","../../../node_modules/lodash/isArray.js","../../../node_modules/lodash/_getRawTag.js","../../../node_modules/lodash/_objectToString.js","../../../node_modules/lodash/_baseGetTag.js","../../../node_modules/lodash/isObjectLike.js","../../../node_modules/lodash/isSymbol.js","../../../node_modules/lodash/_baseToString.js","../../../node_modules/lodash/toString.js","../../../node_modules/lodash/deburr.js","../../../node_modules/lodash/_asciiWords.js","../../../node_modules/lodash/_hasUnicodeWord.js","../../../node_modules/lodash/_unicodeWords.js","../../../node_modules/lodash/words.js","../../../node_modules/lodash/_createCompounder.js","../../../node_modules/lodash/snakeCase.js","../src/getFeatureFlag.ts","../src/utils/useApplyScroll.ts","../src/RootProvider/index.tsx","../../../node_modules/lodash/isObject.js","../../../node_modules/lodash/now.js","../../../node_modules/lodash/_trimmedEndIndex.js","../../../node_modules/lodash/_baseTrim.js","../../../node_modules/lodash/toNumber.js","../../../node_modules/lodash/debounce.js","../../../node_modules/lodash/throttle.js","../../../node_modules/fast-equals/dist/es/index.mjs","../src/hooks/useThrottledMeasure.ts","../src/components/RouteErrorBoundary.tsx","../src/notifications.ts","../src/notificationsRealtime.tsx"],"sourcesContent":["import { useSyncExternalStore } from \"react\"\n\n\nconst emptyUnsubscribe = () => {}\n\nexport const useMediaQuery = (query: string): boolean => {\n const isServer = typeof window === \"undefined\"\n\n const subscribe = (callback: () => void) => {\n if (isServer) return emptyUnsubscribe\n\n const mql = window.matchMedia(query)\n\n // Modern browsers\n if (mql.addEventListener) {\n mql.addEventListener(\"change\", callback)\n return () => mql.removeEventListener(\"change\", callback)\n }\n\n // Legacy fallback\n mql.addListener(callback)\n return () => mql.removeListener(callback)\n }\n\n const getSnapshot = () => {\n if (isServer) return false\n return window.matchMedia(query).matches\n }\n\n return useSyncExternalStore(subscribe, getSnapshot, () => false)\n}\n","import {\n lazy,\n Suspense,\n useEffect,\n useSyncExternalStore,\n type ComponentProps,\n} from \"react\"\n\nimport { useMediaQuery } from \"./hooks/useMediaQuery\"\n\n\ntype SonnerModule = typeof import(\"sonner\")\ntype SonnerToast = typeof import(\"sonner\").toast\ntype ToastId = string | number\ntype ToastMessage = Parameters<SonnerToast>[0]\ntype ToastData = Parameters<SonnerToast>[1]\ntype ToastPromiseData = Exclude<Parameters<SonnerToast[\"promise\"]>[1], undefined>\n\nlet sonner: SonnerModule | null = null\nlet sonnerImport: Promise<SonnerModule> | null = null\nconst queued: Array<(m: SonnerModule) => void> = []\n\nlet toasterRequested = false\nconst toasterListeners = new Set<() => void>()\nlet toasterMounted = false\nlet toasterPreloadStarted = false\n\nlet idCounter = 0\nconst createToastId = (): string => `rb-toast-${++idCounter}`\n\nconst resolveId = (id: unknown): ToastId | undefined => {\n if (typeof id === \"number\") return id\n if (typeof id === \"string\" && id.length > 0) return id\n return undefined\n}\n\nconst requestToasterMount = (): void => {\n if (toasterRequested) return\n toasterRequested = true\n for (const listener of toasterListeners) {\n listener()\n }\n}\n\nconst subscribeToasterRequested = (listener: () => void): (() => void) => {\n toasterListeners.add(listener)\n return () => {\n toasterListeners.delete(listener)\n }\n}\n\nconst getToasterRequested = (): boolean => toasterRequested\n\nconst flushQueue = (): void => {\n if (!sonner) return\n if (typeof document !== \"undefined\" && !toasterMounted) return\n while (queued.length) {\n const fn = queued.shift()\n if (fn) fn(sonner)\n }\n}\n\nconst setToasterMounted = (mounted: boolean): void => {\n toasterMounted = mounted\n if (mounted) flushQueue()\n}\n\nconst loadSonner = (): Promise<SonnerModule> => {\n if (sonner) return Promise.resolve(sonner)\n if (sonnerImport) return sonnerImport\n\n sonnerImport = import(\"sonner\").then((mod) => {\n sonner = mod\n flushQueue()\n return mod\n })\n\n return sonnerImport\n}\n\nconst enqueue = (fn: (mod: SonnerModule) => void): void => {\n if (sonner && (toasterMounted || typeof document === \"undefined\")) {\n fn(sonner)\n return\n }\n\n queued.push(fn)\n}\n\nconst isPageLoaded = (): boolean => {\n if (typeof document === \"undefined\") return false\n return document.readyState === \"complete\"\n}\n\nconst startToaster = (): void => {\n if (toasterPreloadStarted) return\n toasterPreloadStarted = true\n requestToasterMount()\n void loadSonner()\n}\n\nconst ensureReady = (): void => {\n if (typeof document === \"undefined\") startToaster()\n}\n\nconst buildToastData = (data: ToastData, id: ToastId): NonNullable<ToastData> =>\n data ? { ...data, id } : { id }\n\nconst toastFn = ((message: ToastMessage, data?: ToastData) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast(message, nextData)\n })\n return id\n}) as SonnerToast\n\nconst toastSuccess: SonnerToast[\"success\"] = (message, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.success(message, nextData)\n })\n return id\n}\n\nconst toastInfo: SonnerToast[\"info\"] = (message, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.info(message, nextData)\n })\n return id\n}\n\nconst toastWarning: SonnerToast[\"warning\"] = (message, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.warning(message, nextData)\n })\n return id\n}\n\nconst toastError: SonnerToast[\"error\"] = (message, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.error(message, nextData)\n })\n return id\n}\n\nconst toastMessage: SonnerToast[\"message\"] = (message, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.message(message, nextData)\n })\n return id\n}\n\nconst toastLoading: SonnerToast[\"loading\"] = (message, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.loading(message, nextData)\n })\n return id\n}\n\nconst toastCustom: SonnerToast[\"custom\"] = (jsx, data) => {\n ensureReady()\n const id = resolveId(data?.id) ?? createToastId()\n const nextData = buildToastData(data, id)\n enqueue((m) => {\n m.toast.custom(jsx, nextData)\n })\n return id\n}\n\nconst toastPromise = <ToastDataType,>(\n promise: Promise<ToastDataType> | (() => Promise<ToastDataType>),\n data?: ToastPromiseData,\n) => {\n ensureReady()\n if (!data) return undefined as unknown as ReturnType<SonnerToast[\"promise\"]>\n\n const startedPromise = promise instanceof Function ? promise() : promise\n const unwrap = (): Promise<ToastDataType> => Promise.resolve(startedPromise)\n\n if (data.loading === undefined) {\n enqueue((m) => {\n m.toast.promise(startedPromise, data)\n })\n return { unwrap } as unknown as ReturnType<SonnerToast[\"promise\"]>\n }\n\n const id = resolveId(data.id) ?? createToastId()\n const nextData = { ...data, id }\n\n enqueue((m) => {\n m.toast.promise(startedPromise, nextData)\n })\n\n return Object.assign(id, { unwrap }) as unknown as ReturnType<SonnerToast[\"promise\"]>\n}\n\nconst toastDismiss: SonnerToast[\"dismiss\"] = (id?: ToastId) => {\n ensureReady()\n enqueue((m) => {\n m.toast.dismiss(id)\n })\n return id as unknown as ReturnType<SonnerToast[\"dismiss\"]>\n}\n\nconst toastGetHistory: SonnerToast[\"getHistory\"] = () =>\n sonner ? sonner.toast.getHistory() : []\n\nconst toastGetToasts: SonnerToast[\"getToasts\"] = () =>\n sonner ? sonner.toast.getToasts() : []\n\nexport const toast = Object.assign(toastFn, {\n success: toastSuccess,\n info: toastInfo,\n warning: toastWarning,\n error: toastError,\n message: toastMessage,\n loading: toastLoading,\n custom: toastCustom,\n promise: toastPromise as SonnerToast[\"promise\"],\n dismiss: toastDismiss,\n getHistory: toastGetHistory,\n getToasts: toastGetToasts,\n}) as SonnerToast\n\nconst LazySonnerToaster = lazy(async () => {\n const mod = await import(\"sonner\")\n return { default: mod.Toaster }\n})\n\ntype MountedLazyToasterProps = ComponentProps<SonnerModule[\"Toaster\"]>\n\nconst MountedLazyToaster = (props: MountedLazyToasterProps) => {\n useEffect(() => {\n setToasterMounted(true)\n return () => setToasterMounted(false)\n }, [])\n\n return <LazySonnerToaster {...props} />\n}\n\nconst ActiveToaster = () => {\n const isMobile = useMediaQuery(\"(max-width: 767px)\")\n const isCoarsePointer = useMediaQuery(\"(hover: none) and (pointer: coarse)\")\n\n const position = isMobile ? \"top-center\" : undefined\n\n useEffect(() => {\n const handler = (event: Event) => {\n const target = event.target\n if (!(target instanceof Element)) return\n if (!target.closest(\"[data-sonner-toaster]\")) return\n event.preventDefault()\n }\n\n document.addEventListener(\"dismissableLayer.pointerDownOutside\", handler, true)\n document.addEventListener(\"dismissableLayer.focusOutside\", handler, true)\n\n return () => {\n document.removeEventListener(\"dismissableLayer.pointerDownOutside\", handler, true)\n document.removeEventListener(\"dismissableLayer.focusOutside\", handler, true)\n }\n }, [])\n\n return (\n <Suspense fallback={null}>\n <MountedLazyToaster\n closeButton={!isCoarsePointer}\n theme=\"dark\"\n position={position}\n swipeDirections={isCoarsePointer ? undefined : []}\n style={{\n pointerEvents: \"auto\",\n \"--toast-close-button-start\": \"unset\",\n \"--toast-close-button-end\": \"0\",\n \"--toast-close-button-transform\": \"translate(35%, -35%)\",\n } as MountedLazyToasterProps[\"style\"]}\n toastOptions={{\n style: {\n pointerEvents: \"auto\",\n userSelect: \"text\",\n },\n }}\n />\n </Suspense>\n )\n}\n\nexport const Toaster = () => {\n useEffect(() => {\n if (typeof window === \"undefined\") return\n\n const startDeferred = () => {\n if (typeof window.requestIdleCallback === \"function\") {\n window.requestIdleCallback(() => startToaster(), { timeout: 2000 })\n return\n }\n\n window.setTimeout(() => startToaster(), 150)\n }\n\n if (isPageLoaded()) {\n startDeferred()\n return\n }\n\n window.addEventListener(\"load\", startDeferred, { once: true })\n\n return () => {\n window.removeEventListener(\"load\", startDeferred)\n }\n }, [])\n\n const requested = useSyncExternalStore(\n subscribeToasterRequested,\n getToasterRequested,\n getToasterRequested,\n )\n\n if (!requested) return null\n\n return <ActiveToaster />\n}\n","import env from \"@rpcbase/env\"\nimport type { Application } from \"express\"\nimport type { Ctx } from \"@rpcbase/api\"\n\n\ntype ServerArgs = {\n app: Application;\n};\n\ntype InitOptions = {\n baseURL?: string;\n};\n\ntype PayloadNotCtx = Record<string, unknown> & {\n [P in keyof Ctx]?: never;\n};\n\ntype ApiClientMethod = <TResponse = Record<string, unknown>>(\n path: string,\n payload: PayloadNotCtx,\n ctx?: Ctx,\n) => Promise<TResponse>;\n\nexport type HttpMethod = \"get\" | \"put\" | \"post\" | \"delete\";\ntype MethodRecord<T> = Record<HttpMethod, T>;\n\nexport type ApiClient = MethodRecord<ApiClientMethod>;\n\nlet apiClient: ApiClient\n\nexport const initApiClient = async (args?: ServerArgs | InitOptions) => {\n if (env.SSR) {\n if (!args) {\n throw new Error(\"Server args must be provided in SSR mode\")\n }\n\n const { getServerApiClient } = await import(\"./getServerApiClient\")\n\n apiClient = await getServerApiClient((args as ServerArgs).app)\n } else {\n // Force the browser build of axios so Vite doesn't try to bundle the\n // Node http adapter (which drags in `follow-redirects` and core modules).\n const axios = (await import(\"axios/dist/browser/axios.cjs\")).default\n\n const axiosClient = axios.create({\n baseURL: args && \"baseURL\" in args ? args?.baseURL ?? \"/\" : \"/\",\n withCredentials: true,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n })\n\n const createMethod = (method: HttpMethod): ApiClientMethod => {\n return async <TResponse = Record<string, unknown>>(\n path: string,\n payload: PayloadNotCtx,\n _ctx?: Ctx,\n ): Promise<TResponse> => {\n const config = {\n method,\n url: path,\n ...(method === \"get\" ? { params: payload } : { data: payload }),\n headers: {\n // ...(typeof ctxOrPath !== 'string' && {\n // // 'X-Custom-Header': ctxOrPath.someHeaderValue,\n // // ...ctxOrPath.additionalHeaders,\n // }),\n },\n }\n\n try {\n const response = await axiosClient(config)\n return response.data\n } catch (error) {\n console.log(\"AXIOS API ERROR\", error)\n throw error\n }\n }\n }\n\n apiClient = {\n get: createMethod(\"get\"),\n put: createMethod(\"put\"),\n post: createMethod(\"post\"),\n delete: createMethod(\"delete\"),\n }\n }\n}\n\nexport { apiClient }\n","import env from \"@rpcbase/env\"\n\n\nconst CLEANUP_WAIT_DELAY = 1000\n\n// Function to clean UTM params while preserving others\nexport const cleanupURL = () => {\n if (env.SSR) {\n return\n }\n\n const runCleanup = () => {\n // Add a small delay before running cleanupURL\n setTimeout(() => {\n const url = new URL(window.location.href)\n const params = new URLSearchParams(url.search)\n\n // Get all current query parameter keys\n const paramKeys = Array.from(params.keys())\n\n // Remove parameters starting with 'utm_'\n paramKeys.forEach((key) => {\n if (key.startsWith(\"utm_\")) {\n params.delete(key)\n }\n })\n\n // Build the new URL: keep pathname and append remaining query params when present\n const cleanUrl =\n url.pathname +\n (params.toString() ? \"?\" + params.toString() : \"\") +\n url.hash\n\n // Update the browser URL without reloading\n window.history.replaceState({}, document.title, cleanUrl)\n }, CLEANUP_WAIT_DELAY)\n }\n\n // If DOM is already loaded, schedule the cleanup\n if (\n document.readyState === \"complete\" ||\n document.readyState === \"interactive\"\n ) {\n runCleanup()\n } else {\n // Otherwise wait for the DOM content to be loaded\n document.addEventListener(\"DOMContentLoaded\", runCleanup, { once: true })\n }\n}\n","import { getNavigationGuards, type DataRouter, type NavigationGuard } from \"@rpcbase/router\"\n\n\nconst DEFAULT_PRIORITY = 0\n\nconst canBlockNavigation = (\n guard: NavigationGuard,\n {\n isPathnameChange,\n isSearchChange,\n }: {\n isPathnameChange: boolean\n isSearchChange: boolean\n },\n): boolean => {\n if (!guard.enabled) return false\n if (isPathnameChange) return true\n if (isSearchChange && guard.blockOnSearch) return true\n return false\n}\n\nconst pickNavigationGuard = (\n args: Parameters<NavigationGuard[\"shouldBlockNavigation\"]>[0],\n): NavigationGuard | null => {\n const isPathnameChange =\n args.currentLocation.pathname !== args.nextLocation.pathname\n const isSearchChange = args.currentLocation.search !== args.nextLocation.search\n\n if (!isPathnameChange && !isSearchChange) {\n return null\n }\n\n const eligibleGuards = getNavigationGuards()\n .filter((guard) => canBlockNavigation(guard, { isPathnameChange, isSearchChange }))\n .filter((guard) => guard.shouldBlockNavigation(args))\n\n if (eligibleGuards.length === 0) {\n return null\n }\n\n return eligibleGuards.reduce<NavigationGuard>((best, guard) => {\n const bestPriority = best.priority ?? DEFAULT_PRIORITY\n const guardPriority = guard.priority ?? DEFAULT_PRIORITY\n return guardPriority > bestPriority ? guard : best\n }, eligibleGuards[0]!)\n}\n\nconst getLocationDedupKey = (location: { key?: string; pathname: string; search: string }): string =>\n location.key ?? `${location.pathname}${location.search}`\n\nconst hasUnloadBlockers = (): boolean =>\n getNavigationGuards().some((guard) => guard.enabled && guard.shouldBlockUnload)\n\ntype NavigationGuardWindowState = {\n suppressBeforeUnloadFromKey: string | null\n nativePromptActive: boolean\n}\n\nconst WINDOW_STATE_KEY = \"__rpcbaseNavigationGuardWindowState\"\nconst INSTALLED_ROUTERS_KEY = \"__rpcbaseNavigationGuardInstalledRouters\"\nconst BEFORE_UNLOAD_INSTALLED_KEY = \"__rpcbaseBeforeUnloadNavigationGuardInstalled\"\n\ntype NavigationGuardWindow = Window & {\n [WINDOW_STATE_KEY]?: NavigationGuardWindowState\n [BEFORE_UNLOAD_INSTALLED_KEY]?: boolean\n}\n\ntype NavigationGuardGlobal = typeof globalThis & {\n [INSTALLED_ROUTERS_KEY]?: WeakSet<object>\n}\n\nconst getWindowState = (): NavigationGuardWindowState | null => {\n if (typeof window === \"undefined\") return null\n\n const globalWindow = window as NavigationGuardWindow\n const existing = globalWindow[WINDOW_STATE_KEY]\n if (existing) {\n if (typeof existing.suppressBeforeUnloadFromKey === \"undefined\") {\n existing.suppressBeforeUnloadFromKey = null\n }\n return existing\n }\n\n const created: NavigationGuardWindowState = {\n suppressBeforeUnloadFromKey: null,\n nativePromptActive: false,\n }\n globalWindow[WINDOW_STATE_KEY] = created\n return created\n}\n\nconst getGlobalGuardWeakSet = (): WeakSet<object> => {\n const globalScope = globalThis as NavigationGuardGlobal\n const existing = globalScope[INSTALLED_ROUTERS_KEY]\n if (existing && existing instanceof WeakSet) {\n return existing\n }\n const created = new WeakSet<object>()\n globalScope[INSTALLED_ROUTERS_KEY] = created\n return created\n}\n\nexport const installGlobalNavigationGuard = (router: DataRouter): void => {\n const installedRouters = getGlobalGuardWeakSet()\n if (installedRouters.has(router as unknown as object)) {\n return\n }\n installedRouters.add(router as unknown as object)\n\n const blockerKey = \"rpcbase:navigation-guards\"\n const windowState = getWindowState()\n\n let lastArgs: Parameters<NavigationGuard[\"shouldBlockNavigation\"]>[0] | null = null\n let lastPromptedLocationKey: string | null = null\n\n router.getBlocker(blockerKey, (args) => {\n lastArgs = args\n if (windowState?.nativePromptActive && args.historyAction !== \"POP\") {\n windowState.nativePromptActive = false\n }\n return pickNavigationGuard(args) !== null\n })\n\n router.subscribe((state) => {\n if (windowState?.suppressBeforeUnloadFromKey) {\n const currentKey = getLocationDedupKey(state.location)\n if (currentKey !== windowState.suppressBeforeUnloadFromKey) {\n windowState.suppressBeforeUnloadFromKey = null\n }\n }\n\n const blocker = state.blockers.get(blockerKey)\n\n if (!blocker || blocker.state !== \"blocked\") {\n lastPromptedLocationKey = null\n return\n }\n\n const blockedLocation = blocker.location\n const dedupKey = getLocationDedupKey(blockedLocation)\n if (lastPromptedLocationKey === dedupKey) {\n return\n }\n\n lastPromptedLocationKey = dedupKey\n\n if (windowState?.nativePromptActive && lastArgs?.historyAction === \"POP\") {\n windowState.nativePromptActive = false\n blocker.reset()\n return\n }\n\n const args = lastArgs\n if (!args) {\n blocker.proceed()\n return\n }\n\n const guard = pickNavigationGuard(args)\n if (!guard) {\n blocker.proceed()\n return\n }\n\n const ok = window.confirm(guard.message)\n if (ok) {\n if (windowState) {\n windowState.suppressBeforeUnloadFromKey = getLocationDedupKey(args.currentLocation)\n }\n blocker.proceed()\n } else {\n blocker.reset()\n }\n })\n\n if (typeof window !== \"undefined\") {\n const globalWindow = window as NavigationGuardWindow\n if (!globalWindow[BEFORE_UNLOAD_INSTALLED_KEY]) {\n globalWindow[BEFORE_UNLOAD_INSTALLED_KEY] = true\n\n window.addEventListener(\"beforeunload\", (event: BeforeUnloadEvent) => {\n const state = getWindowState()\n if (state && state.suppressBeforeUnloadFromKey) {\n state.suppressBeforeUnloadFromKey = null\n return\n }\n\n if (!hasUnloadBlockers()) {\n return\n }\n\n if (state) {\n state.nativePromptActive = true\n }\n\n event.preventDefault()\n event.returnValue = \"\"\n })\n }\n }\n}\n","export const SSR_ERROR_STATE_GLOBAL_KEY = \"__RPCBASE_SSR_ERROR__\"\n\nexport type SsrErrorStatePayload = {\n statusCode?: number\n title?: string\n message?: string\n details?: string\n}\n\nconst ESCAPED_LT = /</g\nconst ESCAPED_U2028 = /\\u2028/g\nconst ESCAPED_U2029 = /\\u2029/g\n\nexport const serializeSsrErrorState = (state: SsrErrorStatePayload): string =>\n JSON.stringify(state)\n .replace(ESCAPED_LT, \"\\\\u003c\")\n .replace(ESCAPED_U2028, \"\\\\u2028\")\n .replace(ESCAPED_U2029, \"\\\\u2029\")\n\nexport const peekClientSsrErrorState = (): SsrErrorStatePayload | null => {\n if (typeof window === \"undefined\") {\n return null\n }\n const globalScope = window as typeof window & Record<string, unknown>\n const state = globalScope[SSR_ERROR_STATE_GLOBAL_KEY] as SsrErrorStatePayload | undefined\n if (state && typeof state === \"object\") {\n return state\n }\n return null\n}\n\nexport const consumeClientSsrErrorState = (): SsrErrorStatePayload | null => {\n const state = peekClientSsrErrorState()\n if (!state) {\n return null\n }\n if (typeof window !== \"undefined\") {\n delete (window as typeof window & Record<string, unknown>)[SSR_ERROR_STATE_GLOBAL_KEY]\n }\n return state\n}\n","import { ReactNode } from \"react\"\n\nimport { SsrErrorStatePayload } from \"../ssrErrorState\"\n\n\ntype RenderErrorExtra = (state: SsrErrorStatePayload) => ReactNode\n\ntype SsrErrorFallbackProps = {\n state: SsrErrorStatePayload\n renderErrorExtra?: RenderErrorExtra\n}\n\nconst DEFAULT_TITLE = \"Something went wrong\"\nconst DEFAULT_MESSAGE = \"We couldn't render this page. Please try again in a few seconds.\"\n\nexport const SsrErrorFallback = ({ state, renderErrorExtra }: SsrErrorFallbackProps) => {\n const {\n statusCode = 500,\n title = DEFAULT_TITLE,\n message = DEFAULT_MESSAGE,\n details,\n } = state\n\n const extra = renderErrorExtra?.(state)\n\n return (\n <div className=\"bg-white min-h-screen\">\n <main className=\"mx-auto flex min-h-screen max-w-2xl flex-col items-center justify-center px-6 py-12 text-center sm:py-24\">\n <p className=\"text-base font-semibold text-rose-600\">{statusCode}</p>\n <h1 className=\"mt-4 text-pretty text-4xl font-semibold tracking-tight text-gray-900 sm:text-5xl\">\n {title}\n </h1>\n <p className=\"mt-6 text-lg text-gray-600 sm:text-xl/relaxed\">{message}</p>\n\n {details ? (\n <div className=\"mt-10 w-full rounded-2xl bg-gray-900/95 p-5 text-left shadow-2xl\">\n <p className=\"text-sm font-semibold uppercase tracking-wide text-gray-400\">Debug details</p>\n <pre className=\"mt-3 max-h-64 overflow-auto whitespace-pre-wrap text-sm text-gray-100\">\n {details}\n </pre>\n </div>\n ) : null}\n\n {extra ? (\n <div className=\"mt-10 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-center\">\n {extra}\n </div>\n ) : null}\n </main>\n </div>\n )\n}\n","import env from \"@rpcbase/env\"\nimport { ReactNode, StrictMode, useEffect, useState } from \"react\"\nimport {\n createBrowserRouter,\n createRoutesFromElements,\n RouteObject,\n RouterProvider,\n} from \"@rpcbase/router\"\nimport { hydrateRoot } from \"react-dom/client\"\n\nimport { initApiClient } from \"./apiClient\"\nimport {cleanupURL} from \"./cleanupURL\"\nimport { reportClientException } from \"./errorReporting\"\nimport { installGlobalNavigationGuard } from \"./navigationGuard/installGlobalNavigationGuard\"\nimport { hydrateRtsFromWindow, resolveRtsHydrationIdentityFromStaticRouterData } from \"./rts/ssrHydration\"\nimport {\n consumeClientSsrErrorState,\n peekClientSsrErrorState,\n SsrErrorStatePayload,\n} from \"./ssrErrorState\"\nimport { SsrErrorFallback } from \"./components/SsrErrorFallback\"\nimport { Toaster } from \"./toast\"\n\n\nconst isProduction = env.MODE === \"production\"\n\nconst LOADER_TIMEOUT_MS = 8000\n\ntype ReactErrorInfo = { componentStack?: string }\n\ntype ViteErrorOverlayData = {\n title: string\n message: string\n reason: string\n plugin: string\n}\n\ntype ViteErrorOverlayConstructor = new (err: ViteErrorOverlayData) => HTMLElement\n\ntype StaticRouterHydrationError = {\n reason: Omit<ViteErrorOverlayData, \"plugin\"> & Partial<Pick<ViteErrorOverlayData, \"plugin\">>\n}\n\ntype StaticRouterHydrationData = {\n errors?: Record<string, StaticRouterHydrationError>\n}\n\ntype StaticRouterWindow = Window & {\n __staticRouterHydrationData?: StaticRouterHydrationData\n}\n\ntype LoaderLike = (...args: never[]) => unknown\n\nconst showErrorOverlay = (err: ViteErrorOverlayData) => {\n const ErrorOverlay = customElements.get(\"vite-error-overlay\") as ViteErrorOverlayConstructor | undefined\n // don't open outside vite environment\n if (!ErrorOverlay) {return}\n console.log(err)\n const overlay = new ErrorOverlay(err)\n document.body.appendChild(overlay)\n}\n\n\nconst handleServerErrors = () => {\n const hydrationData = (window as StaticRouterWindow).__staticRouterHydrationData\n if (hydrationData?.errors) {\n const {errors} = hydrationData\n\n Object.values(errors).forEach((error) => {\n showErrorOverlay({\n plugin: \"ssr-router\",\n ...error.reason\n })\n })\n }\n}\n\nconst wrapLoaderWithTimeout = <TLoader extends LoaderLike>(loader: TLoader, routeId?: string) =>\n async (...args: Parameters<TLoader>): Promise<Awaited<ReturnType<TLoader>>> =>\n new Promise<Awaited<ReturnType<TLoader>>>((resolve, reject) => {\n const timer = setTimeout(() => {\n console.error(\"[rpcbase timeout][client loader]\", {routeId, ms: LOADER_TIMEOUT_MS, url: window.location.href})\n reject(new Response(\"Loader timeout\", {status: 504}))\n }, LOADER_TIMEOUT_MS)\n\n Promise.resolve(loader(...args))\n .then((val) => {\n clearTimeout(timer)\n resolve(val as Awaited<ReturnType<TLoader>>)\n })\n .catch((err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n\nconst applyLoaderTimeouts = (routes: RouteObject[]): void => {\n routes.forEach((route) => {\n if (typeof route.loader === \"function\") {\n route.loader = wrapLoaderWithTimeout(route.loader, route.id)\n }\n\n if (typeof route.lazy === \"function\") {\n const origLazy = route.lazy\n route.lazy = async (...lazyArgs: Parameters<typeof origLazy>) => {\n const mod = await origLazy(...lazyArgs)\n if (typeof mod.loader === \"function\") {\n const origLoader = mod.loader\n mod.loader = (...loaderArgs: Parameters<typeof origLoader>) =>\n wrapLoaderWithTimeout(origLoader, route.id)(...loaderArgs)\n }\n return mod\n }\n }\n\n if (route.children) {\n applyLoaderTimeouts(route.children)\n }\n })\n}\n\ntype InitWithRoutesOptions = {\n devThrowsOnHydrationErrors?: boolean\n renderErrorExtra?: (state: SsrErrorStatePayload) => ReactNode\n}\n\ntype RoutesElement = Parameters<typeof createRoutesFromElements>[0]\n\nconst getRootElement = () => {\n const el = document.getElementById(\"root\")\n if (!el) {\n throw new Error(\"Root element #root not found\")\n }\n return el\n}\n\nconst hydrateSsrFallbackIfPresent = (\n rootElement: HTMLElement,\n renderErrorExtra?: (state: SsrErrorStatePayload) => ReactNode,\n): boolean => {\n const ssrErrorState = peekClientSsrErrorState()\n if (!ssrErrorState) {\n return false\n }\n\n consumeClientSsrErrorState()\n\n hydrateRoot(\n rootElement,\n <StrictMode>\n <SsrErrorFallback state={ssrErrorState} renderErrorExtra={renderErrorExtra} />\n </StrictMode>,\n )\n return true\n}\n\nconst ClientOnly = ({ children }: { children: ReactNode }) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n if (!mounted) return null\n\n return <>{children}</>\n}\n\nexport const initWithRoutes = async (\n routesElement: RoutesElement,\n opts?: InitWithRoutesOptions\n) => {\n\n const rootElement = getRootElement()\n\n if (hydrateSsrFallbackIfPresent(rootElement, opts?.renderErrorExtra)) {\n return\n }\n\n await initApiClient()\n\n cleanupURL()\n\n handleServerErrors()\n hydrateRtsFromWindow(resolveRtsHydrationIdentityFromStaticRouterData())\n\n\n const routes = createRoutesFromElements(routesElement)\n applyLoaderTimeouts(routes)\n const router = createBrowserRouter(routes, {})\n installGlobalNavigationGuard(router)\n\n const toError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error))\n\n const mentionsHydration = (value: unknown, depth = 0): boolean => {\n if (depth > 5) {\n return false\n }\n if (typeof value === \"string\") {\n return value.toLowerCase().includes(\"hydrat\")\n }\n if (value instanceof Error) {\n const digest = (value as { digest?: unknown }).digest\n const cause = (value as { cause?: unknown }).cause\n return (\n mentionsHydration(value.message, depth + 1) ||\n mentionsHydration(digest, depth + 1) ||\n mentionsHydration(cause, depth + 1)\n )\n }\n return false\n }\n\n const reactErrorHandler =\n (reactContext: \"uncaught\" | \"caught\" | \"recoverable\") =>\n (error: unknown, errorInfo?: ReactErrorInfo) => {\n const err = toError(error)\n reportClientException(err, {\n reactContext,\n componentStack: errorInfo?.componentStack,\n })\n if (reactContext === \"uncaught\") {\n console.warn(\"Uncaught error\", err, errorInfo?.componentStack)\n }\n }\n\n const hydrationOptions: Parameters<typeof hydrateRoot>[2] | undefined = isProduction ? {\n onUncaughtError: reactErrorHandler(\"uncaught\"),\n onCaughtError: reactErrorHandler(\"caught\"),\n onRecoverableError: reactErrorHandler(\"recoverable\")\n } : (opts?.devThrowsOnHydrationErrors ? {\n onRecoverableError(error, errorInfo) {\n const err = toError(error)\n if (mentionsHydration(err) || mentionsHydration(errorInfo?.componentStack)) {\n throw err\n }\n // For non-hydration recoverable errors in dev, keep a visible signal.\n console.error(err, errorInfo?.componentStack)\n }\n } : undefined)\n\n\n hydrateRoot(\n rootElement,\n <StrictMode>\n <>\n <RouterProvider router={router} />\n <ClientOnly>\n <Toaster />\n </ClientOnly>\n </>\n </StrictMode>,\n hydrationOptions\n )\n}\n\n// initialize react grab in dev\nif (!isProduction && !env.SSR) {\n import(\"react-grab/core\").then(({ init }) => {\n // eslint-disable-next-line\n const api = init({\n // theme: { hue: 350 }\n })\n })\n}\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n","import env from \"@rpcbase/env\"\nimport _snakeCase from \"lodash/snakeCase\"\n\n\nexport const getFeatureFlag = async (\n flag: string,\n): Promise<boolean | string | undefined> => {\n const envKey = `RB_PUBLIC_FLAG_${_snakeCase(flag).toUpperCase()}`\n\n if (env.SSR) {\n if (process.env[envKey] !== undefined) {\n return process.env[envKey]\n }\n\n const startTime = performance.now()\n // Use a runtime dynamic import so bundlers building for the browser don't\n // try to include the Node-only `posthog-node` package (it pulls in `fs`,\n // `path`, etc. and breaks client builds).\n const { PostHog } = await (Function(\"return import('posthog-node')\")() as Promise<typeof import(\"posthog-node\")>)\n const client = new PostHog(\n process.env.RB_PUBLIC_POSTHOG_KEY!,\n { host: \"https://eu.i.posthog.com\" },\n )\n\n const distinctId = \"server\"\n console.log(\"TODO: NYI server side feature flags client distinctId\")\n const value = await client.getFeatureFlag(flag, distinctId)\n const endTime = performance.now()\n console.log(`SSR: Feature flag \"${flag}\" loaded in ${(endTime - startTime).toFixed(2)}ms`)\n\n return value\n } else {\n if (import.meta.env[envKey] !== undefined) {\n return import.meta.env[envKey]\n }\n\n const startTime = performance.now()\n const { posthog } = await import(\"posthog-js\")\n\n let hasLoadedFeatureFlags = false\n const TIMEOUT_MS = 8000\n\n function waitForFeatureFlags(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (hasLoadedFeatureFlags) {\n resolve()\n } else {\n const timeout = setTimeout(() => {\n // Bubble up a clear failure instead of hanging indefinitely.\n reject(new Error(`PostHog feature flags did not load within ${TIMEOUT_MS}ms`))\n }, TIMEOUT_MS)\n\n posthog.onFeatureFlags(() => {\n hasLoadedFeatureFlags = true\n clearTimeout(timeout)\n resolve()\n })\n }\n })\n }\n\n await waitForFeatureFlags()\n const endTime = performance.now()\n\n console.log(`Client: Feature flag \"${flag}\" loaded in ${(endTime - startTime).toFixed(2)}ms`)\n\n return posthog.getFeatureFlag(flag)\n }\n}\n","import { useCallback, useEffect, useRef } from \"react\"\nimport { useLocation } from \"@rpcbase/router\"\n\n\nfunction throttle<TArgs extends unknown[]>(callback: (...args: TArgs) => void, limit: number) {\n let wait = false\n return (...args: TArgs) => {\n if (!wait) {\n callback(...args)\n wait = true\n setTimeout(() => {\n wait = false\n }, limit)\n }\n }\n}\n\nexport function useApplyScroll() {\n const location = useLocation()\n const previousPathRef = useRef(location.pathname)\n const isScrollingProgrammatically = useRef(false)\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const lastAppliedHashRef = useRef(\"\")\n\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n lastAppliedHashRef.current = window.location.hash || \"\"\n }\n }, [])\n\n useEffect(() => {\n lastAppliedHashRef.current = location.hash || \"\"\n }, [location.hash])\n\n const replaceHashSilently = useCallback((hash: string) => {\n if (typeof window === \"undefined\") {\n return\n }\n if (lastAppliedHashRef.current === hash) {\n return\n }\n const base = `${window.location.pathname}${window.location.search}`\n window.history.replaceState(window.history.state, \"\", `${base}${hash}`)\n lastAppliedHashRef.current = hash\n }, [])\n\n const markProgrammaticScroll = useCallback(() => {\n isScrollingProgrammatically.current = true\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n scrollTimeoutRef.current = setTimeout(() => {\n isScrollingProgrammatically.current = false\n }, 1000)\n }, [])\n\n useEffect(() => {\n const pathChanged = previousPathRef.current !== location.pathname\n\n if (pathChanged) {\n previousPathRef.current = location.pathname\n\n if (!location.hash) {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" })\n return\n }\n\n setTimeout(() => {\n const id = location.hash.substring(1)\n const element = document.getElementById(id)\n if (element) {\n markProgrammaticScroll()\n element.scrollIntoView({ behavior: \"smooth\" })\n }\n }, 100)\n\n return\n }\n\n if (!location.hash) {\n return\n }\n\n const id = location.hash.substring(1)\n const element = document.getElementById(id)\n if (element) {\n markProgrammaticScroll()\n element.scrollIntoView({ behavior: \"smooth\" })\n }\n }, [location.hash, location.pathname, markProgrammaticScroll])\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n const handleScroll = throttle(() => {\n if (isScrollingProgrammatically.current) {\n return\n }\n\n const sections = Array.from(document.querySelectorAll<HTMLElement>(\"section[id]\"))\n\n if (sections.length === 0) {\n replaceHashSilently(\"\")\n return\n }\n\n const scrollPosition = window.scrollY\n const viewportHeight = window.innerHeight\n const checkPoint = scrollPosition + viewportHeight / 3\n\n let activeSectionId: string | null = null\n for (const section of sections) {\n if (\n section.offsetTop <= checkPoint &&\n section.offsetTop + section.offsetHeight > checkPoint\n ) {\n activeSectionId = section.id\n break\n }\n }\n\n const newHash = activeSectionId ? `#${activeSectionId}` : \"\"\n replaceHashSilently(newHash)\n }, 150)\n\n document.addEventListener(\"scroll\", handleScroll)\n return () => {\n document.removeEventListener(\"scroll\", handleScroll)\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n scrollTimeoutRef.current = null\n }\n }\n }, [replaceHashSilently])\n\n useEffect(() => {\n const handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement | null\n const link = target?.closest(\"a\")\n const currentHash =\n typeof window !== \"undefined\"\n ? window.location.hash\n : location.hash || \"\"\n\n if (\n !link ||\n !link.hash ||\n link.pathname !== location.pathname ||\n link.hash !== currentHash\n ) {\n return\n }\n\n const id = link.hash.substring(1)\n const element = document.getElementById(id)\n if (element) {\n event.preventDefault()\n event.stopPropagation()\n markProgrammaticScroll()\n element.scrollIntoView({ behavior: \"smooth\" })\n }\n }\n\n document.addEventListener(\"click\", handleClick, true)\n return () => document.removeEventListener(\"click\", handleClick, true)\n }, [location.hash, location.pathname, markProgrammaticScroll])\n}\n","import { ReactNode } from \"react\"\n\nimport { useApplyScroll } from \"../utils/useApplyScroll\"\n\n\ntype RootProviderProps = {\n children: ReactNode\n}\n\nexport const RootProvider = ({children}: RootProviderProps) => {\n useApplyScroll()\n\n return <>{children}</>\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","const { getOwnPropertyNames, getOwnPropertySymbols } = Object;\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { hasOwnProperty } = Object.prototype;\n/**\n * Combine two comparators into a single comparators.\n */\nfunction combineComparators(comparatorA, comparatorB) {\n return function isEqual(a, b, state) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nfunction createIsCircular(areItemsEqual) {\n return function isCircular(a, b, state) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n const { cache } = state;\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n cache.set(a, b);\n cache.set(b, a);\n const result = areItemsEqual(a, b, state);\n cache.delete(a);\n cache.delete(b);\n return result;\n };\n}\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nfunction getStrictProperties(object) {\n return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n}\n/**\n * Whether the object contains the property passed as an own property.\n */\nconst hasOwn = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.hasOwn || ((object, property) => hasOwnProperty.call(object, property));\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_OWNER = '_owner';\nconst { getOwnPropertyDescriptor, keys } = Object;\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevalue) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`) or both are `NaN`.\n *\n * @note\n * When available in the environment, this is just a re-export of the global\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) method.\n */\nconst sameValueEqual = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.is\n || function sameValueEqual(a, b) {\n return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n };\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevaluezero) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`), both are `NaN`, or both\n * are either positive or negative zero.\n */\nfunction sameValueZeroEqual(a, b) {\n return a === b || (a !== a && b !== b);\n}\n/**\n * Whether the values passed are equal based on a\n * [Strict Equality Comparison](https://262.ecma-international.org/7.0/#sec-strict-equality-comparison) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`).\n *\n * @note\n * This is mainly available as a convenience function, such as being a default when a function to determine equality between\n * two objects is used.\n */\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\n * Whether the array buffers are equal in value.\n */\nfunction areArrayBuffersEqual(a, b) {\n return a.byteLength === b.byteLength && areTypedArraysEqual(new Uint8Array(a), new Uint8Array(b));\n}\n/**\n * Whether the arrays are equal in value.\n */\nfunction areArraysEqual(a, b, state) {\n let index = a.length;\n if (b.length !== index) {\n return false;\n }\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the dataviews are equal in value.\n */\nfunction areDataViewsEqual(a, b) {\n return (a.byteLength === b.byteLength\n && areTypedArraysEqual(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)));\n}\n/**\n * Whether the dates passed are equal in value.\n */\nfunction areDatesEqual(a, b) {\n return sameValueEqual(a.getTime(), b.getTime());\n}\n/**\n * Whether the errors passed are equal in value.\n */\nfunction areErrorsEqual(a, b) {\n return a.name === b.name && a.message === b.message && a.cause === b.cause && a.stack === b.stack;\n}\n/**\n * Whether the `Map`s are equal in value.\n */\nfunction areMapsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Array(size);\n const aIterable = a.entries();\n let aResult;\n let bResult;\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.entries();\n let hasMatch = false;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n if (state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state)\n && state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n index++;\n }\n return true;\n}\n/**\n * Whether the objects are equal in value.\n */\nfunction areObjectsEqual(a, b, state) {\n const properties = keys(a);\n let index = properties.length;\n if (keys(b).length !== index) {\n return false;\n }\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n if (!isPropertyEqual(a, b, state, properties[index])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nfunction areObjectsEqualStrict(a, b, state) {\n const properties = getStrictProperties(a);\n let index = properties.length;\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n let property;\n let descriptorA;\n let descriptorB;\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index];\n if (!isPropertyEqual(a, b, state, property)) {\n return false;\n }\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n if ((descriptorA || descriptorB)\n && (!descriptorA\n || !descriptorB\n || descriptorA.configurable !== descriptorB.configurable\n || descriptorA.enumerable !== descriptorB.enumerable\n || descriptorA.writable !== descriptorB.writable)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nfunction arePrimitiveWrappersEqual(a, b) {\n return sameValueEqual(a.valueOf(), b.valueOf());\n}\n/**\n * Whether the regexps passed are equal in value.\n */\nfunction areRegExpsEqual(a, b) {\n return a.source === b.source && a.flags === b.flags;\n}\n/**\n * Whether the `Set`s are equal in value.\n */\nfunction areSetsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Array(size);\n const aIterable = a.values();\n let aResult;\n let bResult;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.values();\n let hasMatch = false;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (!matchedIndices[matchIndex]\n && state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the TypedArray instances are equal in value.\n */\nfunction areTypedArraysEqual(a, b) {\n let index = a.byteLength;\n if (b.byteLength !== index || a.byteOffset !== b.byteOffset) {\n return false;\n }\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the URL instances are equal in value.\n */\nfunction areUrlsEqual(a, b) {\n return (a.hostname === b.hostname\n && a.pathname === b.pathname\n && a.protocol === b.protocol\n && a.port === b.port\n && a.hash === b.hash\n && a.username === b.username\n && a.password === b.password);\n}\nfunction isPropertyEqual(a, b, state, property) {\n if ((property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE)\n && (a.$$typeof || b.$$typeof)) {\n return true;\n }\n return hasOwn(b, property) && state.equals(a[property], b[property], property, property, a, b, state);\n}\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nfunction createEqualityComparator(config) {\n const supportedComparatorMap = createSupportedComparatorMap(config);\n const { areArraysEqual, areDatesEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, areRegExpsEqual, areSetsEqual, getUnsupportedCustomComparator, } = config;\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a, b, state) {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n // If either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n const type = typeof a;\n if (type !== typeof b) {\n return false;\n }\n if (type !== 'object') {\n if (type === 'number' || type === 'bigint') {\n return areNumbersEqual(a, b, state);\n }\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\n }\n const constructor = a.constructor;\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is creating a subclass from a native class, it will be\n // handled with the string tag comparison.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n if (constructor === Array) {\n return areArraysEqual(a, b, state);\n }\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n if (constructor === Promise) {\n // Avoid tag checks for promise values, since we know if they are not referentially equal\n // then they are not equal.\n return false;\n }\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` in edge cases.\n if (Array.isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n // Since this is a custom object, capture the string tag to determining its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = toString.call(a);\n const supportedComparator = supportedComparatorMap[tag];\n if (supportedComparator) {\n return supportedComparator(a, b, state);\n }\n const unsupportedCustomComparator = getUnsupportedCustomComparator && getUnsupportedCustomComparator(a, b, state, tag);\n if (unsupportedCustomComparator) {\n return unsupportedCustomComparator(a, b, state);\n }\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n/**\n * Create the configuration object used for building comparators.\n */\nfunction createEqualityComparatorConfig({ circular, createCustomConfig, strict, }) {\n let config = {\n areArrayBuffersEqual,\n areArraysEqual: strict ? areObjectsEqualStrict : areArraysEqual,\n areDataViewsEqual,\n areDatesEqual: areDatesEqual,\n areErrorsEqual: areErrorsEqual,\n areFunctionsEqual: strictEqual,\n areMapsEqual: strict ? combineComparators(areMapsEqual, areObjectsEqualStrict) : areMapsEqual,\n areNumbersEqual: sameValueEqual,\n areObjectsEqual: strict ? areObjectsEqualStrict : areObjectsEqual,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqual,\n areRegExpsEqual: areRegExpsEqual,\n areSetsEqual: strict ? combineComparators(areSetsEqual, areObjectsEqualStrict) : areSetsEqual,\n areTypedArraysEqual: strict\n ? combineComparators(areTypedArraysEqual, areObjectsEqualStrict)\n : areTypedArraysEqual,\n areUrlsEqual: areUrlsEqual,\n getUnsupportedCustomComparator: undefined,\n };\n if (createCustomConfig) {\n config = Object.assign({}, config, createCustomConfig(config));\n }\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n config = Object.assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n return config;\n}\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nfunction createInternalEqualityComparator(compare) {\n return function (a, b, _indexOrKeyA, _indexOrKeyB, _parentA, _parentB, state) {\n return compare(a, b, state);\n };\n}\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nfunction createIsEqual({ circular, comparator, createState, equals, strict }) {\n if (createState) {\n return function isEqual(a, b) {\n const { cache = circular ? new WeakMap() : undefined, meta } = createState();\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n });\n };\n }\n if (circular) {\n return function isEqual(a, b) {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined,\n strict,\n });\n };\n }\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n };\n return function isEqual(a, b) {\n return comparator(a, b, state);\n };\n}\n/**\n * Create a map of `toString()` values to their respective handlers for `tag`-based lookups.\n */\nfunction createSupportedComparatorMap({ areArrayBuffersEqual, areArraysEqual, areDataViewsEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual, }) {\n return {\n '[object Arguments]': areObjectsEqual,\n '[object Array]': areArraysEqual,\n '[object ArrayBuffer]': areArrayBuffersEqual,\n '[object AsyncGeneratorFunction]': areFunctionsEqual,\n '[object BigInt]': areNumbersEqual,\n '[object BigInt64Array]': areTypedArraysEqual,\n '[object BigUint64Array]': areTypedArraysEqual,\n '[object Boolean]': arePrimitiveWrappersEqual,\n '[object DataView]': areDataViewsEqual,\n '[object Date]': areDatesEqual,\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n '[object Error]': areErrorsEqual,\n '[object Float16Array]': areTypedArraysEqual,\n '[object Float32Array]': areTypedArraysEqual,\n '[object Float64Array]': areTypedArraysEqual,\n '[object Function]': areFunctionsEqual,\n '[object GeneratorFunction]': areFunctionsEqual,\n '[object Int8Array]': areTypedArraysEqual,\n '[object Int16Array]': areTypedArraysEqual,\n '[object Int32Array]': areTypedArraysEqual,\n '[object Map]': areMapsEqual,\n '[object Number]': arePrimitiveWrappersEqual,\n '[object Object]': (a, b, state) => \n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n typeof a.then !== 'function' && typeof b.then !== 'function' && areObjectsEqual(a, b, state),\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\n '[object RegExp]': areRegExpsEqual,\n '[object Set]': areSetsEqual,\n '[object String]': arePrimitiveWrappersEqual,\n '[object URL]': areUrlsEqual,\n '[object Uint8Array]': areTypedArraysEqual,\n '[object Uint8ClampedArray]': areTypedArraysEqual,\n '[object Uint16Array]': areTypedArraysEqual,\n '[object Uint32Array]': areTypedArraysEqual,\n };\n}\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nconst deepEqual = createCustomEqual();\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nconst strictDeepEqual = createCustomEqual({ strict: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nconst circularDeepEqual = createCustomEqual({ circular: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nconst shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nconst strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nconst circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n strict: true,\n});\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nfunction createCustomEqual(options = {}) {\n const { circular = false, createInternalComparator: createCustomInternalComparator, createState, strict = false, } = options;\n const config = createEqualityComparatorConfig(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n\nexport { circularDeepEqual, circularShallowEqual, createCustomEqual, deepEqual, sameValueEqual, sameValueZeroEqual, shallowEqual, strictCircularDeepEqual, strictCircularShallowEqual, strictDeepEqual, strictEqual, strictShallowEqual };\n","import {useState, useEffect, useCallback, useLayoutEffect, useRef, useMemo} from \"react\"\nimport _throttle from \"lodash/throttle\"\nimport { deepEqual } from \"fast-equals\"\n\n\ntype Rect = {x: number, y: number, width: number, height: number, top: number, left: number, bottom: number, right: number}\n\nconst defaultRect: Rect = {x: 0, y: 0, width: 0, height: 0, top: 0, left: 0, bottom: 0, right: 0}\n\nconst useLocalMeasure = () => {\n const [node, setNode] = useState<HTMLElement | null>(null)\n const ref = useCallback((el: HTMLElement | null) => setNode(el), [])\n const [rect, setRect] = useState<Rect>(defaultRect)\n\n // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we call\n // useLayoutEffect directly and guard browser-only APIs inside the effect.\n useLayoutEffect(() => {\n if (typeof window === \"undefined\" || typeof ResizeObserver === \"undefined\") return\n if (!node) return\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry?.contentRect) return\n const { x, y, width, height, top, left, bottom, right } = entry.contentRect as DOMRectReadOnly\n setRect({ x, y, width, height, top, left, bottom, right })\n })\n\n observer.observe(node)\n return () => observer.disconnect()\n }, [node])\n\n return [ref, rect] as const\n}\n\nconst DEFAULT_THROTTLE_TIME = 16\n\nexport const useThrottledMeasure = (throttleDuration = DEFAULT_THROTTLE_TIME) => {\n const hasInitialMeasure = useRef(false)\n\n const [ref, measuredRect] = useLocalMeasure()\n const [rect, setRect] = useState(() => defaultRect)\n\n const throttledSetRect = useMemo(\n () =>\n _throttle(\n (newRect: Rect) => {\n setRect((current) => {\n return deepEqual(current, newRect) ? current : newRect\n })\n },\n throttleDuration,\n {leading: true, trailing: true},\n ),\n [throttleDuration],\n )\n\n useEffect(() => {\n if (measuredRect.width > 0 && !hasInitialMeasure.current) {\n hasInitialMeasure.current = true\n setRect((current) => {\n return deepEqual(current, measuredRect) ? current : measuredRect\n })\n return\n }\n\n throttledSetRect(measuredRect)\n\n return () => {\n throttledSetRect.cancel()\n }\n }, [measuredRect, throttledSetRect])\n\n return [ref, rect]\n}\n","import env from \"@rpcbase/env\"\nimport { ReactNode } from \"react\"\nimport { isRouteErrorResponse, useRouteError } from \"@rpcbase/router\"\n\nimport { SsrErrorFallback } from \"./SsrErrorFallback\"\nimport { SsrErrorStatePayload } from \"../ssrErrorState\"\n\n\ntype RenderErrorExtra = (state: SsrErrorStatePayload) => ReactNode\n\ntype RouteErrorBoundaryProps = {\n renderErrorExtra?: RenderErrorExtra\n}\n\nconst defaultState: Required<Pick<SsrErrorStatePayload, \"statusCode\" | \"title\" | \"message\">> = {\n statusCode: 500,\n title: \"Something went wrong\",\n message: \"We couldn't render this route. Please try again shortly.\",\n}\n\nconst toSsrErrorState = (error: unknown): SsrErrorStatePayload => {\n if (isRouteErrorResponse(error)) {\n const data = error.data as { message?: string } | string | undefined\n const message = typeof data === \"string\" ? data : data?.message || defaultState.message\n\n let details: string | undefined\n if (env.DEV && data && typeof data !== \"string\") {\n try {\n details = JSON.stringify(data, null, 2)\n } catch {\n details = undefined\n }\n }\n\n return {\n statusCode: error.status ?? defaultState.statusCode,\n title: error.statusText || defaultState.title,\n message,\n details,\n }\n }\n\n if (error instanceof Error) {\n return {\n statusCode: defaultState.statusCode,\n title: defaultState.title,\n message: error.message || defaultState.message,\n details: import.meta.env.DEV ? error.stack ?? error.message : undefined,\n }\n }\n\n if (typeof error === \"string\") {\n return {\n statusCode: defaultState.statusCode,\n title: defaultState.title,\n message: error,\n }\n }\n\n return defaultState\n}\n\nexport const RouteErrorBoundary = ({ renderErrorExtra }: RouteErrorBoundaryProps) => {\n const routeError = useRouteError()\n const state = toSsrErrorState(routeError)\n\n return (\n <SsrErrorFallback\n state={state}\n renderErrorExtra={renderErrorExtra}\n />\n )\n}\n","import { apiClient } from \"./apiClient\"\n\n\nexport type NotificationItem = {\n id: string\n topic?: string\n title: string\n body?: string\n url?: string\n createdAt: string\n seenAt?: string\n readAt?: string\n archivedAt?: string\n metadata?: Record<string, unknown>\n}\n\nexport type NotificationDigestFrequency = \"off\" | \"daily\" | \"weekly\"\n\nexport type NotificationTopicPreference = {\n topic: string\n inApp: boolean\n emailDigest: boolean\n push: boolean\n}\n\nexport type NotificationSettings = {\n digestFrequency: NotificationDigestFrequency\n topicPreferences: NotificationTopicPreference[]\n lastDigestSentAt?: string\n}\n\nexport type ListNotificationsInput = {\n includeArchived?: boolean\n unreadOnly?: boolean\n limit?: number\n markSeen?: boolean\n}\n\nexport type ListNotificationsResponse = {\n ok: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\nexport const listNotifications = async (input: ListNotificationsInput = {}) => {\n const result = await apiClient.post<ListNotificationsResponse>(\"/api/rb/notifications\", input)\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to load notifications\")\n }\n return {\n notifications: Array.isArray(result.notifications) ? result.notifications : [],\n unreadCount: Number.isFinite(result.unreadCount) ? Math.max(0, Math.floor(result.unreadCount ?? 0)) : 0,\n unseenCount: Number.isFinite(result.unseenCount) ? Math.max(0, Math.floor(result.unseenCount ?? 0)) : 0,\n }\n}\n\nexport const markNotificationRead = async (notificationId: string) => {\n const id = notificationId.trim()\n if (!id) throw new Error(\"notificationId is required\")\n\n const result = await apiClient.post<{ ok?: boolean; error?: string }>(\n `/api/rb/notifications/${encodeURIComponent(id)}/read`,\n {},\n )\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to mark notification read\")\n }\n}\n\nexport const archiveNotification = async (notificationId: string) => {\n const id = notificationId.trim()\n if (!id) throw new Error(\"notificationId is required\")\n\n const result = await apiClient.post<{ ok?: boolean; error?: string }>(\n `/api/rb/notifications/${encodeURIComponent(id)}/archive`,\n {},\n )\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to archive notification\")\n }\n}\n\nexport const markAllNotificationsRead = async () => {\n const result = await apiClient.post<{ ok?: boolean; error?: string }>(\"/api/rb/notifications/mark-all-read\", {})\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to mark all notifications read\")\n }\n}\n\ntype SettingsResponse = {\n ok?: boolean\n error?: string\n settings?: NotificationSettings\n}\n\nexport const getNotificationSettings = async (): Promise<NotificationSettings> => {\n const result = await apiClient.get<SettingsResponse>(\"/api/rb/notifications/settings\", {})\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to load notification settings\")\n }\n\n return result.settings ?? { digestFrequency: \"weekly\", topicPreferences: [] }\n}\n\nexport const updateNotificationSettings = async (\n partial: Partial<Pick<NotificationSettings, \"digestFrequency\" | \"topicPreferences\">>,\n): Promise<NotificationSettings> => {\n const result = await apiClient.put<SettingsResponse>(\"/api/rb/notifications/settings\", partial)\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to update notification settings\")\n }\n return result.settings ?? { digestFrequency: \"weekly\", topicPreferences: [] }\n}\n\nexport const runNotificationDigest = async ({ force = false }: { force?: boolean } = {}) => {\n const result = await apiClient.post<{ ok?: boolean; error?: string; sent?: boolean; skippedReason?: string }>(\n \"/api/rb/notifications/digest/run\",\n { force },\n )\n if (!result?.ok) {\n throw new Error(result?.error || \"Failed to run digest\")\n }\n return { sent: result.sent === true, skippedReason: result.skippedReason }\n}\n","import { createContext, useContext, useEffect, useMemo, useRef, type ReactNode } from \"react\"\n\nimport { toast } from \"./toast\"\nimport { useQuery } from \"./rts\"\nimport type { NotificationItem } from \"./notifications\"\n\n\ntype SettingsDoc = {\n _id: string\n userId: string\n topicPreferences?: Array<{\n topic?: string\n inApp?: boolean\n }>\n}\n\ntype NotificationDoc = {\n _id: string\n userId?: string\n topic?: string\n title?: string\n body?: string\n url?: string\n createdAt?: string | Date\n seenAt?: string | Date\n readAt?: string | Date\n archivedAt?: string | Date\n metadata?: Record<string, unknown>\n}\n\nexport type NotificationsRealtimeState = {\n notifications: NotificationItem[]\n unreadCount: number\n unseenCount: number\n loading: boolean\n error: unknown\n}\n\nexport const NotificationsRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nconst toIso = (value: unknown): string | undefined => {\n if (value instanceof Date) return value.toISOString()\n if (typeof value === \"string\") return value\n return undefined\n}\n\nconst toNotificationItem = (doc: NotificationDoc): NotificationItem | null => {\n const id = typeof doc._id === \"string\" ? doc._id : String(doc._id ?? \"\")\n if (!id) return null\n\n return {\n id,\n topic: typeof doc.topic === \"string\" ? doc.topic : undefined,\n title: typeof doc.title === \"string\" ? doc.title : \"\",\n body: typeof doc.body === \"string\" ? doc.body : undefined,\n url: typeof doc.url === \"string\" ? doc.url : undefined,\n createdAt: toIso(doc.createdAt) ?? new Date().toISOString(),\n seenAt: toIso(doc.seenAt),\n readAt: toIso(doc.readAt),\n archivedAt: toIso(doc.archivedAt),\n metadata: typeof doc.metadata === \"object\" && doc.metadata !== null ? doc.metadata : undefined,\n }\n}\n\nconst buildDisabledTopics = (settings: SettingsDoc | null): string[] => {\n const raw = settings?.topicPreferences\n if (!Array.isArray(raw) || raw.length === 0) return []\n\n return raw\n .map((pref) => {\n if (!pref || typeof pref !== \"object\") return null\n const topic = typeof pref.topic === \"string\" ? pref.topic.trim() : \"\"\n if (!topic) return null\n return pref.inApp === false ? topic : null\n })\n .filter((topic): topic is string => Boolean(topic))\n}\n\nexport function NotificationsRealtimeProvider({\n userId,\n limit = 200,\n toastOnNew = true,\n children,\n}: {\n userId?: string\n limit?: number\n toastOnNew?: boolean\n children: ReactNode\n}) {\n const trimmedUserId = typeof userId === \"string\" ? userId.trim() : \"\"\n const canUseRts = Boolean(trimmedUserId)\n\n const settingsQuery = useQuery<SettingsDoc>(\n \"RBNotificationSettings\",\n useMemo(() => (canUseRts ? { userId: trimmedUserId } : {}), [canUseRts, trimmedUserId]),\n useMemo(() => ({ key: \"rb.notifications.settings\", limit: 1, enabled: canUseRts }), [canUseRts]),\n )\n\n const settings = (settingsQuery.data?.[0] ?? null) as SettingsDoc | null\n const disabledTopics = useMemo(() => buildDisabledTopics(settings), [settings])\n\n const query = useMemo(() => {\n if (!canUseRts) return {}\n const base: Record<string, unknown> = {\n userId: trimmedUserId,\n archivedAt: { $exists: false },\n }\n if (disabledTopics.length > 0) {\n base.topic = { $nin: disabledTopics }\n }\n return base\n }, [canUseRts, disabledTopics, trimmedUserId])\n\n const notificationsQuery = useQuery<NotificationDoc>(\n \"RBNotification\",\n query,\n useMemo(() => ({\n key: \"rb.notifications\",\n sort: { createdAt: -1 },\n limit,\n enabled: canUseRts,\n }), [canUseRts, limit]),\n )\n\n const notifications = useMemo(() => {\n const raw = notificationsQuery.data\n if (!Array.isArray(raw)) return []\n return raw\n .map((doc) => toNotificationItem(doc))\n .filter((n): n is NotificationItem => Boolean(n))\n }, [notificationsQuery.data])\n\n const unreadCount = useMemo(() => notifications.reduce((acc, n) => acc + (n.readAt ? 0 : 1), 0), [notifications])\n const unseenCount = useMemo(() => notifications.reduce((acc, n) => acc + (n.seenAt ? 0 : 1), 0), [notifications])\n\n const lastToastIds = useRef<Set<string>>(new Set())\n const hasSeededToastIds = useRef(false)\n const toastStartMs = useRef<number>(Date.now())\n\n useEffect(() => {\n hasSeededToastIds.current = false\n lastToastIds.current = new Set()\n toastStartMs.current = Date.now()\n }, [trimmedUserId])\n\n useEffect(() => {\n if (!toastOnNew) return\n if (!canUseRts) return\n if (notificationsQuery.loading) return\n\n if (!hasSeededToastIds.current) {\n hasSeededToastIds.current = true\n lastToastIds.current = new Set(notifications.map((n) => n.id))\n return\n }\n\n const nextNew = notifications.filter((n) => !lastToastIds.current.has(n.id))\n if (!nextNew.length) return\n\n for (const n of nextNew) {\n lastToastIds.current.add(n.id)\n }\n\n const isTabActive = typeof document !== \"undefined\" && document.visibilityState === \"visible\"\n if (!isTabActive) return\n\n const eligible = nextNew.filter((n) => {\n const createdAtMs = Date.parse(n.createdAt)\n if (!Number.isFinite(createdAtMs)) return true\n return createdAtMs >= toastStartMs.current\n })\n if (!eligible.length) return\n\n if (eligible.length > 3) {\n toast(`${eligible.length} new notifications`, { description: \"Open the notifications drawer to view them.\" })\n return\n }\n\n for (const n of eligible) {\n toast(n.title || \"New notification\", { description: n.body })\n }\n }, [canUseRts, notifications, notificationsQuery.loading, toastOnNew])\n\n const value = useMemo<NotificationsRealtimeState>(() => ({\n notifications,\n unreadCount,\n unseenCount,\n loading: notificationsQuery.loading,\n error: notificationsQuery.error,\n }), [notifications, notificationsQuery.error, notificationsQuery.loading, unreadCount, unseenCount])\n\n return (\n <NotificationsRealtimeContext.Provider value={canUseRts ? value : null}>\n {children}\n </NotificationsRealtimeContext.Provider>\n )\n}\n\nexport const useNotificationsRealtime = (): NotificationsRealtimeState | null => {\n return useContext(NotificationsRealtimeContext)\n}\n"],"names":["jsx","require$$0","global","hasOwnProperty","require$$1","require$$2","require$$3","toString","id","element","throttle","sameValueEqual","areArraysEqual","areDatesEqual","areMapsEqual","areObjectsEqual","areRegExpsEqual","areSetsEqual","areArrayBuffersEqual","areDataViewsEqual","areErrorsEqual","arePrimitiveWrappersEqual","areTypedArraysEqual","areUrlsEqual","n"],"mappings":"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,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAC1B,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACvE,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACxD,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACtF,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IAAK,KAAU;AAAA,IACtF,KAAU;AAAA,IAAM,KAAU;AAAA,IAC1B,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAAU;AAAA,IACzC,KAAU;AAAA,IAAM,KAAU;AAAA,IAAK,KAA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","x_google_ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,33,34,35,36,37,38,39,40]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initWithRoutes.d.ts","sourceRoot":"","sources":["../src/initWithRoutes.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAA;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"initWithRoutes.d.ts","sourceRoot":"","sources":["../src/initWithRoutes.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAA;AAClE,OAAO,EAEL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AAQxB,OAAO,EAGL,oBAAoB,EACrB,MAAM,iBAAiB,CAAA;AAsGxB,KAAK,qBAAqB,GAAG;IAC3B,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,SAAS,CAAA;CAC9D,CAAA;AAED,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAA;AA0CnE,eAAO,MAAM,cAAc,GACzB,eAAe,aAAa,EAC5B,OAAO,qBAAqB,kBAqF7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installGlobalNavigationGuard.d.ts","sourceRoot":"","sources":["../../src/navigationGuard/installGlobalNavigationGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,UAAU,EAAwB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"installGlobalNavigationGuard.d.ts","sourceRoot":"","sources":["../../src/navigationGuard/installGlobalNavigationGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAsG5F,eAAO,MAAM,4BAA4B,GAAI,QAAQ,UAAU,KAAG,IAkGjE,CAAA"}
|
package/dist/toast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"AAYA,KAAK,WAAW,GAAG,cAAc,QAAQ,EAAE,KAAK,CAAA;AAyNhD,eAAO,MAAM,KAAK,EAYZ,WAAW,CAAA;AAiEjB,eAAO,MAAM,OAAO,sDAkCnB,CAAA"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,MAAM,MAAM,UAAU,GAAG;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,MAAM,MAAM,UAAU,GAAG;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAC,CAAA;AACnD,MAAM,MAAM,MAAM,GAAG,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA"}
|