utils.ts — ui Source File
Architecture documentation for utils.ts, a typescript file in the ui codebase. 3 imports, 1 dependents.
Entity Profile
Dependency Diagram
graph LR 7d2e02dc_279c_932c_e7c4_5c1f3787e593["utils.ts"] b969017e_0ead_3c70_277e_2e4416d7a8ed["react"] 7d2e02dc_279c_932c_e7c4_5c1f3787e593 --> b969017e_0ead_3c70_277e_2e4416d7a8ed 1d141819_425e_b5fd_4c8e_32f7c6a42cf2["react"] 7d2e02dc_279c_932c_e7c4_5c1f3787e593 --> 1d141819_425e_b5fd_4c8e_32f7c6a42cf2 052778fd_1a4c_7f8d_8295_ec523652ac24["user.server"] 7d2e02dc_279c_932c_e7c4_5c1f3787e593 --> 052778fd_1a4c_7f8d_8295_ec523652ac24 afdca75e_cdc4_c379_56c7_a08d256702f5["utils.test.ts"] afdca75e_cdc4_c379_56c7_a08d256702f5 --> 7d2e02dc_279c_932c_e7c4_5c1f3787e593 style 7d2e02dc_279c_932c_e7c4_5c1f3787e593 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { useMatches } from "@remix-run/react";
import { useMemo } from "react";
import type { User } from "~/models/user.server";
const DEFAULT_REDIRECT = "/";
/**
* This should be used any time the redirect path is user-provided
* (Like the query string on our login/signup pages). This avoids
* open-redirect vulnerabilities.
* @param {string} to The redirect destination
* @param {string} defaultRedirect The redirect to use if the to is unsafe.
*/
export function safeRedirect(
to: FormDataEntryValue | string | null | undefined,
defaultRedirect: string = DEFAULT_REDIRECT,
) {
if (!to || typeof to !== "string") {
return defaultRedirect;
}
if (!to.startsWith("/") || to.startsWith("//")) {
return defaultRedirect;
}
return to;
}
/**
* This base hook is used in other hooks to quickly search for specific data
* across all loader data using useMatches.
* @param {string} id The route id
* @returns {JSON|undefined} The router data or undefined if not found
*/
export function useMatchesData(
id: string,
): Record<string, unknown> | undefined {
const matchingRoutes = useMatches();
const route = useMemo(
() => matchingRoutes.find((route) => route.id === id),
[matchingRoutes, id],
);
return route?.data as Record<string, unknown>;
}
function isUser(user: unknown): user is User {
return (
user != null &&
typeof user === "object" &&
"email" in user &&
typeof user.email === "string"
);
}
export function useOptionalUser(): User | undefined {
const data = useMatchesData("root");
if (!data || !isUser(data.user)) {
return undefined;
}
return data.user;
}
export function useUser(): User {
const maybeUser = useOptionalUser();
if (!maybeUser) {
throw new Error(
"No user found in root loader, but user is required by useUser. If user is optional, try useOptionalUser instead.",
);
}
return maybeUser;
}
export function validateEmail(email: unknown): email is string {
return typeof email === "string" && email.length > 3 && email.includes("@");
}
Domain
Subdomains
Dependencies
- react
- react
- user.server
Source
Frequently Asked Questions
What does utils.ts do?
utils.ts is a source file in the ui codebase, written in typescript. It belongs to the FrameworkTooling domain, SchemaValidation subdomain.
What functions are defined in utils.ts?
utils.ts defines 6 function(s): isUser, safeRedirect, useMatchesData, useOptionalUser, useUser, validateEmail.
What does utils.ts depend on?
utils.ts imports 3 module(s): react, react, user.server.
What files import utils.ts?
utils.ts is imported by 1 file(s): utils.test.ts.
Where is utils.ts in the architecture?
utils.ts is located at packages/shadcn/test/fixtures/frameworks/remix-indie-stack/app/utils.ts (domain: FrameworkTooling, subdomain: SchemaValidation, directory: packages/shadcn/test/fixtures/frameworks/remix-indie-stack/app).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free