forked from jsnbuchanan/crowd-funder-for-time-pwa
fix: linting
This commit is contained in:
@@ -82,7 +82,9 @@ export const baseUrlSchema = z.object({
|
||||
});
|
||||
|
||||
// Add a union type of all valid route paths
|
||||
export const VALID_DEEP_LINK_ROUTES = Object.keys(deepLinkSchemas) as readonly (keyof typeof deepLinkSchemas)[];
|
||||
export const VALID_DEEP_LINK_ROUTES = Object.keys(
|
||||
deepLinkSchemas,
|
||||
) as readonly (keyof typeof deepLinkSchemas)[];
|
||||
|
||||
export type DeepLinkParams = {
|
||||
[K in keyof typeof deepLinkSchemas]: z.infer<(typeof deepLinkSchemas)[K]>;
|
||||
@@ -94,4 +96,6 @@ export interface DeepLinkError extends Error {
|
||||
}
|
||||
|
||||
// Use the type to ensure route validation
|
||||
export const routeSchema = z.enum(VALID_DEEP_LINK_ROUTES as [string, ...string[]]);
|
||||
export const routeSchema = z.enum(
|
||||
VALID_DEEP_LINK_ROUTES as [string, ...string[]],
|
||||
);
|
||||
|
||||
@@ -72,7 +72,8 @@ const handleDeepLink = async (data: { url: string }) => {
|
||||
await deepLinkHandler.handleDeepLink(data.url);
|
||||
} catch (error) {
|
||||
logger.error("[DeepLink] Error handling deep link: ", error);
|
||||
let message: string = error instanceof Error ? error.message : safeStringify(error);
|
||||
let message: string =
|
||||
error instanceof Error ? error.message : safeStringify(error);
|
||||
if (data.url) {
|
||||
message += `\nURL: ${data.url}`;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,10 @@ import { logConsoleAndDb } from "../db/databaseUtil";
|
||||
import type { DeepLinkError } from "../interfaces/deepLinks";
|
||||
|
||||
// Helper function to extract the first key from a Zod object schema
|
||||
function getFirstKeyFromZodObject(schema: z.ZodObject<any>): string | undefined {
|
||||
function getFirstKeyFromZodObject(
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
schema: z.ZodObject<any>,
|
||||
): string | undefined {
|
||||
const shape = schema.shape;
|
||||
const keys = Object.keys(shape);
|
||||
return keys.length > 0 ? keys[0] : undefined;
|
||||
@@ -71,14 +74,18 @@ function getFirstKeyFromZodObject(schema: z.ZodObject<any>): string | undefined
|
||||
* because "router.replace" expects the right parameter name for the route.
|
||||
*/
|
||||
export const ROUTE_MAP: Record<string, { name: string; paramKey?: string }> =
|
||||
Object.entries(deepLinkSchemas).reduce((acc, [routeName, schema]) => {
|
||||
Object.entries(deepLinkSchemas).reduce(
|
||||
(acc, [routeName, schema]) => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const paramKey = getFirstKeyFromZodObject(schema as z.ZodObject<any>);
|
||||
acc[routeName] = {
|
||||
name: routeName,
|
||||
paramKey
|
||||
paramKey,
|
||||
};
|
||||
return acc;
|
||||
}, {} as Record<string, { name: string; paramKey?: string }>);
|
||||
},
|
||||
{} as Record<string, { name: string; paramKey?: string }>,
|
||||
);
|
||||
|
||||
/**
|
||||
* Handles processing and routing of deep links in the application.
|
||||
@@ -200,7 +207,10 @@ export class DeepLinkHandler {
|
||||
validatedQuery = await schema.parseAsync(query);
|
||||
} catch (error) {
|
||||
// For parameter validation errors, provide specific error feedback
|
||||
logConsoleAndDb(`[DeepLink] Invalid parameters for route name ${routeName} for path: ${path}: ${JSON.stringify(error)} ... with params: ${JSON.stringify(params)} ... and query: ${JSON.stringify(query)}`, true);
|
||||
logConsoleAndDb(
|
||||
`[DeepLink] Invalid parameters for route name ${routeName} for path: ${path}: ${JSON.stringify(error)} ... with params: ${JSON.stringify(params)} ... and query: ${JSON.stringify(query)}`,
|
||||
true,
|
||||
);
|
||||
await this.router.replace({
|
||||
name: "deep-link-error",
|
||||
params,
|
||||
@@ -223,7 +233,10 @@ export class DeepLinkHandler {
|
||||
query: validatedQuery,
|
||||
});
|
||||
} catch (error) {
|
||||
logConsoleAndDb(`[DeepLink] Error routing to route name ${routeName} for path: ${path}: ${JSON.stringify(error)} ... with validated params: ${JSON.stringify(validatedParams)} ... and validated query: ${JSON.stringify(validatedQuery)}`, true);
|
||||
logConsoleAndDb(
|
||||
`[DeepLink] Error routing to route name ${routeName} for path: ${path}: ${JSON.stringify(error)} ... with validated params: ${JSON.stringify(validatedParams)} ... and validated query: ${JSON.stringify(validatedQuery)}`,
|
||||
true,
|
||||
);
|
||||
// For parameter validation errors, provide specific error feedback
|
||||
await this.router.replace({
|
||||
name: "deep-link-error",
|
||||
@@ -231,12 +244,11 @@ export class DeepLinkHandler {
|
||||
query: {
|
||||
originalPath: path,
|
||||
errorCode: "ROUTING_ERROR",
|
||||
errorMessage: `Error routing to ${routeName}: ${(JSON.stringify(error))}`,
|
||||
errorMessage: `Error routing to ${routeName}: ${JSON.stringify(error)}`,
|
||||
...validatedQuery,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -31,7 +31,11 @@
|
||||
<h2>Supported Deep Links</h2>
|
||||
<ul>
|
||||
<li v-for="(routeItem, index) in validRoutes" :key="index">
|
||||
<code>timesafari://{{ routeItem }}/:{{ deepLinkSchemaKeys[routeItem] }}</code>
|
||||
<code
|
||||
>timesafari://{{ routeItem }}/:{{
|
||||
deepLinkSchemaKeys[routeItem]
|
||||
}}</code
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -41,7 +45,10 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted } from "vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { VALID_DEEP_LINK_ROUTES, deepLinkSchemas } from "../interfaces/deepLinks";
|
||||
import {
|
||||
VALID_DEEP_LINK_ROUTES,
|
||||
deepLinkSchemas,
|
||||
} from "../interfaces/deepLinks";
|
||||
import { logConsoleAndDb } from "../db/databaseUtil";
|
||||
import { logger } from "../utils/logger";
|
||||
|
||||
@@ -52,7 +59,7 @@ const deepLinkSchemaKeys = Object.fromEntries(
|
||||
Object.entries(deepLinkSchemas).map(([route, schema]) => {
|
||||
const param = Object.keys(schema.shape)[0];
|
||||
return [route, param];
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
// Extract error information from query params
|
||||
|
||||
@@ -128,7 +128,10 @@ export default class InviteOneAcceptView extends Vue {
|
||||
}
|
||||
|
||||
// Extract JWT from route path
|
||||
const jwt = (this.$route.params.jwt as string) || this.$route.query.jwt as string || "";
|
||||
const jwt =
|
||||
(this.$route.params.jwt as string) ||
|
||||
(this.$route.query.jwt as string) ||
|
||||
"";
|
||||
await this.processInvite(jwt, false);
|
||||
|
||||
this.checkingInvite = false;
|
||||
|
||||
@@ -153,9 +153,7 @@ export default class QuickActionBvcBeginView extends Vue {
|
||||
group: "alert",
|
||||
type: "danger",
|
||||
title: "Error",
|
||||
text:
|
||||
timeResult?.error ||
|
||||
"There was an error sending the time.",
|
||||
text: timeResult?.error || "There was an error sending the time.",
|
||||
},
|
||||
5000,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user