✨ MAJOR FEATURES: • Auto-zoom intelligence với smart bounds fitting • Enhanced 3D GPS markers với pulsing effects • Professional route display với 6-layer rendering • Status-based parking icons với availability indicators • Production-ready build optimizations 🗺️ AUTO-ZOOM FEATURES: • Smart bounds fitting cho GPS + selected parking • Adaptive padding (50px) cho visual balance • Max zoom control (level 16) để tránh quá gần • Dynamic centering khi không có selection 🎨 ENHANCED VISUALS: • 3D GPS marker với multi-layer pulse effects • Advanced parking icons với status colors • Selection highlighting với animation • Dimming system cho non-selected items 🛣️ ROUTE SYSTEM: • OpenRouteService API integration • Multi-layer route rendering (glow, shadow, main, animated) • Real-time distance & duration calculation • Visual route info trong popup 📱 PRODUCTION READY: • SSR safe với dynamic imports • Build errors resolved • Global deployment via Vercel • Optimized performance 🌍 DEPLOYMENT: • Vercel: https://whatever-ctk2auuxr-phong12hexdockworks-projects.vercel.app • Bundle size: 22.8 kB optimized • Global CDN distribution • HTTPS enabled 💾 VERSION CONTROL: • MapView-v2.0.tsx backup created • MAPVIEW_VERSIONS.md documentation • Full version history tracking
50 lines
2.6 KiB
TypeScript
50 lines
2.6 KiB
TypeScript
/// <reference types="node" />
|
|
import { ClientCommandOptions } from '../client';
|
|
import { CommandOptions } from '../command-options';
|
|
import { RedisScriptConfig, SHA1 } from '../lua-script';
|
|
export type RedisCommandRawReply = string | number | Buffer | null | undefined | Array<RedisCommandRawReply>;
|
|
export type RedisCommandArgument = string | Buffer;
|
|
export type RedisCommandArguments = Array<RedisCommandArgument> & {
|
|
preserve?: unknown;
|
|
};
|
|
export interface RedisCommand {
|
|
FIRST_KEY_INDEX?: number | ((...args: Array<any>) => RedisCommandArgument | undefined);
|
|
IS_READ_ONLY?: boolean;
|
|
TRANSFORM_LEGACY_REPLY?: boolean;
|
|
transformArguments(this: void, ...args: Array<any>): RedisCommandArguments;
|
|
transformReply?(this: void, reply: any, preserved?: any): any;
|
|
}
|
|
export type RedisCommandReply<C extends RedisCommand> = C['transformReply'] extends (...args: any) => infer T ? T : RedisCommandRawReply;
|
|
export type ConvertArgumentType<Type, ToType> = Type extends RedisCommandArgument ? (Type extends (string & ToType) ? Type : ToType) : (Type extends Set<infer Member> ? Set<ConvertArgumentType<Member, ToType>> : (Type extends Map<infer Key, infer Value> ? Map<Key, ConvertArgumentType<Value, ToType>> : (Type extends Array<infer Member> ? Array<ConvertArgumentType<Member, ToType>> : (Type extends Date ? Type : (Type extends Record<PropertyKey, any> ? {
|
|
[Property in keyof Type]: ConvertArgumentType<Type[Property], ToType>;
|
|
} : Type)))));
|
|
export type RedisCommandSignature<Command extends RedisCommand, Params extends Array<unknown> = Parameters<Command['transformArguments']>> = <Options extends CommandOptions<ClientCommandOptions>>(...args: Params | [options: Options, ...rest: Params]) => Promise<ConvertArgumentType<RedisCommandReply<Command>, Options['returnBuffers'] extends true ? Buffer : string>>;
|
|
export interface RedisCommands {
|
|
[command: string]: RedisCommand;
|
|
}
|
|
export interface RedisModule {
|
|
[command: string]: RedisCommand;
|
|
}
|
|
export interface RedisModules {
|
|
[module: string]: RedisModule;
|
|
}
|
|
export interface RedisFunction extends RedisCommand {
|
|
NUMBER_OF_KEYS?: number;
|
|
}
|
|
export interface RedisFunctionLibrary {
|
|
[fn: string]: RedisFunction;
|
|
}
|
|
export interface RedisFunctions {
|
|
[library: string]: RedisFunctionLibrary;
|
|
}
|
|
export type RedisScript = RedisScriptConfig & SHA1;
|
|
export interface RedisScripts {
|
|
[script: string]: RedisScript;
|
|
}
|
|
export interface RedisExtensions<M extends RedisModules = RedisModules, F extends RedisFunctions = RedisFunctions, S extends RedisScripts = RedisScripts> {
|
|
modules?: M;
|
|
functions?: F;
|
|
scripts?: S;
|
|
}
|
|
export type ExcludeMappedString<S> = string extends S ? never : S;
|