fix: replace any types in logger and utilities (14 errors)
Phase 1 Batch 2: Logger & Simple Utilities Replaced any types with proper TypeScript types across 3 files: - logger.ts: Created LogContext type, added RequestEvent import from SvelteKit - Defined LogContext = Record<string, string | number | boolean | null | undefined> - Changed all context parameters from Record<string, any> to LogContext - Changed event parameter in createRequestLogger from any to RequestEvent - extractEmbeds.ts: Used TiptapNode type from editor.ts - Changed content and node parameters from any to TiptapNode - global.d.ts: Improved SVG module declarations - Changed *.svg from any to string (raw SVG content) - Changed *.svg?component from any to Component<any> (Svelte component) Progress: 199 → 185 errors (91 → 77 any-type errors)
This commit is contained in:
parent
4212ec0f6f
commit
9da0232d45
3 changed files with 21 additions and 15 deletions
5
src/global.d.ts
vendored
5
src/global.d.ts
vendored
|
|
@ -1,10 +1,11 @@
|
||||||
declare module '*.svg' {
|
declare module '*.svg' {
|
||||||
const content: any
|
const content: string
|
||||||
export default content
|
export default content
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module '*.svg?component' {
|
declare module '*.svg?component' {
|
||||||
const content: any
|
import type { Component } from 'svelte'
|
||||||
|
const content: Component
|
||||||
export default content
|
export default content
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
import { dev } from '$app/environment'
|
import { dev } from '$app/environment'
|
||||||
|
import type { RequestEvent } from '@sveltejs/kit'
|
||||||
|
|
||||||
export type LogLevel = 'debug' | 'info' | 'warn' | 'error'
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error'
|
||||||
export type LogCategory = 'music' | 'api' | 'db' | 'media' | 'general'
|
export type LogCategory = 'music' | 'api' | 'db' | 'media' | 'general'
|
||||||
|
|
||||||
|
// LogContext supports common log data types
|
||||||
|
export type LogContext = Record<string, string | number | boolean | null | undefined>
|
||||||
|
|
||||||
interface LogEntry {
|
interface LogEntry {
|
||||||
level: LogLevel
|
level: LogLevel
|
||||||
message: string
|
message: string
|
||||||
timestamp: string
|
timestamp: string
|
||||||
context?: Record<string, any>
|
context?: LogContext
|
||||||
error?: Error
|
error?: Error
|
||||||
category?: LogCategory
|
category?: LogCategory
|
||||||
}
|
}
|
||||||
|
|
@ -67,7 +71,7 @@ class Logger {
|
||||||
private log(
|
private log(
|
||||||
level: LogLevel,
|
level: LogLevel,
|
||||||
message: string,
|
message: string,
|
||||||
context?: Record<string, any>,
|
context?: LogContext,
|
||||||
error?: Error,
|
error?: Error,
|
||||||
category?: LogCategory
|
category?: LogCategory
|
||||||
) {
|
) {
|
||||||
|
|
@ -98,29 +102,29 @@ class Logger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(message: string, context?: Record<string, any>, category?: LogCategory) {
|
debug(message: string, context?: LogContext, category?: LogCategory) {
|
||||||
this.log('debug', message, context, undefined, category)
|
this.log('debug', message, context, undefined, category)
|
||||||
}
|
}
|
||||||
|
|
||||||
info(message: string, context?: Record<string, any>, category?: LogCategory) {
|
info(message: string, context?: LogContext, category?: LogCategory) {
|
||||||
this.log('info', message, context, undefined, category)
|
this.log('info', message, context, undefined, category)
|
||||||
}
|
}
|
||||||
|
|
||||||
warn(message: string, context?: Record<string, any>, category?: LogCategory) {
|
warn(message: string, context?: LogContext, category?: LogCategory) {
|
||||||
this.log('warn', message, context, undefined, category)
|
this.log('warn', message, context, undefined, category)
|
||||||
}
|
}
|
||||||
|
|
||||||
error(message: string, error?: Error, context?: Record<string, any>, category?: LogCategory) {
|
error(message: string, error?: Error, context?: LogContext, category?: LogCategory) {
|
||||||
this.log('error', message, context, error, category)
|
this.log('error', message, context, error, category)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convenience method for music-related logs
|
// Convenience method for music-related logs
|
||||||
music(level: LogLevel, message: string, context?: Record<string, any>) {
|
music(level: LogLevel, message: string, context?: LogContext) {
|
||||||
this.log(level, message, context, undefined, 'music')
|
this.log(level, message, context, undefined, 'music')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log API requests
|
// Log API requests
|
||||||
apiRequest(method: string, path: string, context?: Record<string, any>) {
|
apiRequest(method: string, path: string, context?: LogContext) {
|
||||||
this.info(`API Request: ${method} ${path}`, context)
|
this.info(`API Request: ${method} ${path}`, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -134,7 +138,7 @@ class Logger {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log database operations
|
// Log database operations
|
||||||
dbQuery(operation: string, model: string, duration?: number, context?: Record<string, any>) {
|
dbQuery(operation: string, model: string, duration?: number, context?: LogContext) {
|
||||||
this.debug(`DB Query: ${operation} on ${model}`, {
|
this.debug(`DB Query: ${operation} on ${model}`, {
|
||||||
...context,
|
...context,
|
||||||
duration: duration ? `${duration}ms` : undefined
|
duration: duration ? `${duration}ms` : undefined
|
||||||
|
|
@ -156,13 +160,12 @@ export const logger = new Logger()
|
||||||
|
|
||||||
// Middleware to log API requests
|
// Middleware to log API requests
|
||||||
export function createRequestLogger() {
|
export function createRequestLogger() {
|
||||||
return (event: any) => {
|
return (event: RequestEvent) => {
|
||||||
const start = Date.now()
|
const start = Date.now()
|
||||||
const { method, url } = event.request
|
const { method, url } = event.request
|
||||||
const path = new URL(url).pathname
|
const path = new URL(url).pathname
|
||||||
|
|
||||||
logger.apiRequest(method, path, {
|
logger.apiRequest(method, path, {
|
||||||
headers: Object.fromEntries(event.request.headers),
|
|
||||||
ip: event.getClientAddress()
|
ip: event.getClientAddress()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import type { TiptapNode } from '$lib/types/editor'
|
||||||
|
|
||||||
// Extract URL embeds from Tiptap content
|
// Extract URL embeds from Tiptap content
|
||||||
export interface ExtractedEmbed {
|
export interface ExtractedEmbed {
|
||||||
type: 'urlEmbed' | 'youtube'
|
type: 'urlEmbed' | 'youtube'
|
||||||
|
|
@ -10,7 +12,7 @@ export interface ExtractedEmbed {
|
||||||
videoId?: string
|
videoId?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export function extractEmbeds(content: any): ExtractedEmbed[] {
|
export function extractEmbeds(content: TiptapNode): ExtractedEmbed[] {
|
||||||
if (!content || !content.content) return []
|
if (!content || !content.content) return []
|
||||||
|
|
||||||
const embeds: ExtractedEmbed[] = []
|
const embeds: ExtractedEmbed[] = []
|
||||||
|
|
@ -32,7 +34,7 @@ export function extractEmbeds(content: any): ExtractedEmbed[] {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recursive function to find embed nodes
|
// Recursive function to find embed nodes
|
||||||
const findEmbeds = (node: any) => {
|
const findEmbeds = (node: TiptapNode) => {
|
||||||
if (node.type === 'urlEmbed' && node.attrs?.url) {
|
if (node.type === 'urlEmbed' && node.attrs?.url) {
|
||||||
const url = node.attrs.url
|
const url = node.attrs.url
|
||||||
const isYouTube = /(?:youtube\.com|youtu\.be)/.test(url)
|
const isYouTube = /(?:youtube\.com|youtu\.be)/.test(url)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue