- Added "packages/ui/scripts/**" to .oxlintrc.json for linting. - Excluded ".claude/**" from biome.jsonc. - Refactored API path types in apiPaths.ts for better clarity. - Updated error handling in errorCodes.ts to ensure stack trace is always available. - Modified preferenceSchemas.ts to include new features and updated generated timestamp. - Cleaned up tsconfig.json for better organization. - Adjusted CustomTag component to improve rendering logic. - Enhanced CodeEditor utility functions for better type safety. - Improved Scrollbar story for better readability. - Refactored CacheService to streamline comments and improve documentation. - Updated useCache and useSharedCache hooks for better clarity and functionality. - Cleaned up selectionStore and settings.ts by commenting out deprecated actions. - Updated DataApiHookTests for better optimistic update handling.
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import type { ApiSchemas } from './apiSchemas'
|
|
|
|
/**
|
|
* Template literal type utilities for converting parameterized paths to concrete paths
|
|
* This enables type-safe API calls with actual paths like '/test/items/123' instead of '/test/items/:id'
|
|
*/
|
|
|
|
/**
|
|
* Convert parameterized path templates to concrete path types
|
|
* @example '/test/items/:id' -> '/test/items/${string}'
|
|
* @example '/topics/:id/messages' -> '/topics/${string}/messages'
|
|
*/
|
|
export type ResolvedPath<T extends string> = T extends `${infer Prefix}/:${string}/${infer Suffix}`
|
|
? `${Prefix}/${string}/${ResolvedPath<Suffix>}`
|
|
: T extends `${infer Prefix}/:${string}`
|
|
? `${Prefix}/${string}`
|
|
: T
|
|
|
|
/**
|
|
* Generate all possible concrete paths from ApiSchemas
|
|
* This creates a union type of all valid API paths
|
|
*/
|
|
export type ConcreteApiPaths = {
|
|
[K in keyof ApiSchemas]: ResolvedPath<K & string>
|
|
}[keyof ApiSchemas]
|
|
|
|
/**
|
|
* Reverse lookup: from concrete path back to original template path
|
|
* Used to determine which ApiSchema entry matches a concrete path
|
|
*/
|
|
export type MatchApiPath<Path extends string> = {
|
|
[K in keyof ApiSchemas]: Path extends ResolvedPath<K & string> ? K : never
|
|
}[keyof ApiSchemas]
|
|
|
|
/**
|
|
* Extract query parameters type for a given concrete path
|
|
*/
|
|
export type QueryParamsForPath<Path extends string> = MatchApiPath<Path> extends keyof ApiSchemas
|
|
? ApiSchemas[MatchApiPath<Path>] extends { GET: { query?: infer Q } }
|
|
? Q
|
|
: Record<string, any>
|
|
: Record<string, any>
|
|
|
|
/**
|
|
* Extract request body type for a given concrete path and HTTP method
|
|
*/
|
|
export type BodyForPath<Path extends string, Method extends string> = MatchApiPath<Path> extends keyof ApiSchemas
|
|
? ApiSchemas[MatchApiPath<Path>] extends { [M in Method]: { body: infer B } }
|
|
? B
|
|
: any
|
|
: any
|
|
|
|
/**
|
|
* Extract response type for a given concrete path and HTTP method
|
|
*/
|
|
export type ResponseForPath<Path extends string, Method extends string> = MatchApiPath<Path> extends keyof ApiSchemas
|
|
? ApiSchemas[MatchApiPath<Path>] extends { [M in Method]: { response: infer R } }
|
|
? R
|
|
: any
|
|
: any
|