diff --git a/src/backend/common/AbstractComponent.ts b/src/backend/common/AbstractComponent.ts index f73ed9d3..16a57e30 100644 --- a/src/backend/common/AbstractComponent.ts +++ b/src/backend/common/AbstractComponent.ts @@ -1,19 +1,19 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import { cacheFunctions, } from "@foxxmd/regex-buddy-core"; import EventEmitter from "events"; -import { ComponentType, LifecycleInput, LifecycleStep, PlayData, PlayObject } from "../../core/Atomic.js"; +import { type ComponentType, type LifecycleInput, type LifecycleStep, type PlayData, type PlayObject } from "../../core/Atomic.js"; import { buildTrackString } from "../../core/StringUtils.js"; -import { CommonClientConfig } from "./infrastructure/config/client/index.js"; -import { CommonSourceConfig } from "./infrastructure/config/source/index.js"; +import { type CommonClientConfig } from "./infrastructure/config/client/index.js"; +import { type CommonSourceConfig } from "./infrastructure/config/source/index.js"; import { mergeSimpleError, SimpleError, SkipTransformStageError, StagePrerequisiteError, StageTransformError, TransformRulesError } from "./errors/MSErrors.js"; import { FLOW_CONTROL_TERM, - PlayTransformRules, - StageConfig, + type PlayTransformRules, + type StageConfig, TRANSFORM_HOOK, - TransformHook + type TransformHook } from "./infrastructure/Transform.js"; import AbstractInitializable from "./AbstractInitializable.js"; import TransformerManager from "./transforms/TransformerManager.js"; @@ -28,18 +28,18 @@ import { diffObjects, diffObjectsConsoleOutput, patchObject } from "../../core/D import clone from "clone"; import { loggerNoop } from "./MaybeLogger.js"; import { objectsEqual } from "../utils/DataUtils.js"; -import { RetentionOptions } from "./infrastructure/config/database.js"; +import { type RetentionOptions } from "./infrastructure/config/database.js"; import { getRetentionCompactAfterFromEnv, getRetentionDeleteAfterFromEnv, isCompactableProperty, parseRetentionOptions, parseRetentionOptionsDurations } from "./database/Database.js"; -import { DbConcrete } from "./database/drizzle/drizzleUtils.js"; -import { ComponentMinimalSelect, ComponentSelect } from "./database/drizzle/drizzleTypes.js"; +import { type DbConcrete } from "./database/drizzle/drizzleUtils.js"; +import { type ComponentMinimalSelect, type ComponentSelect } from "./database/drizzle/drizzleTypes.js"; import { DrizzlePlayRepository } from "./database/drizzle/repositories/PlayRepository.js"; -import { ClientType } from "./infrastructure/config/client/clients.js"; -import { SourceType } from "./infrastructure/config/source/sources.js"; +import { type ClientType } from "./infrastructure/config/client/clients.js"; +import { type SourceType } from "./infrastructure/config/source/sources.js"; import { DrizzleComponentRepository } from "./database/drizzle/repositories/ComponentRepository.js"; import dayjs from "dayjs"; -import { COMPONENT_STATE, ComponentCommonApi, ComponentCommonApiJson, ComponentState, PlayApiCommonDetailed } from "../../core/Api.js"; -import { WebhookPayload } from "./infrastructure/config/health/webhooks.js"; -import { MarkRequired } from "ts-essentials"; +import { COMPONENT_STATE, type ComponentCommonApi, type ComponentCommonApiJson, type ComponentState, type PlayApiCommonDetailed } from "../../core/Api.js"; +import { type WebhookPayload } from "./infrastructure/config/health/webhooks.js"; +import type { MarkRequired } from "ts-essentials"; import { serializeError } from "serialize-error"; export type AbstractComponentConfig = (CommonClientConfig | CommonSourceConfig) & { transformManager?: TransformerManager }; diff --git a/src/backend/common/AbstractInitializable.ts b/src/backend/common/AbstractInitializable.ts index 906acb31..03c2a8b7 100644 --- a/src/backend/common/AbstractInitializable.ts +++ b/src/backend/common/AbstractInitializable.ts @@ -1,8 +1,8 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import {truncateStringToLength } from "../../core/StringUtils.js"; import { hasNodeNetworkException } from "./errors/NodeErrors.js"; import { hasUpstreamError } from "./errors/UpstreamError.js"; -import { WebhookPayload } from "./infrastructure/config/health/webhooks.js"; +import { type WebhookPayload } from "./infrastructure/config/health/webhooks.js"; import { AuthCheckError, BuildDataError, ConnectionCheckError, ParseCacheError, PostInitError, StageError } from "./errors/MSErrors.js"; import { messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.js"; import { spawn } from 'abort-controller-x'; diff --git a/src/backend/common/Cache.ts b/src/backend/common/Cache.ts index 4e75e703..d677684a 100644 --- a/src/backend/common/Cache.ts +++ b/src/backend/common/Cache.ts @@ -1,6 +1,6 @@ -import { Cacheable, createKeyv, Keyv, KeyvStoreAdapter, KeyvOptions, CacheableOptions, KeyvCacheableMemory } from 'cacheable'; -import { FlatCache, FlatCacheOptions } from 'flat-cache'; -import KeyvValkey, { KeyvValkeyOptions } from '@keyv/valkey'; +import { Cacheable, createKeyv, Keyv, type KeyvStoreAdapter, type KeyvOptions, type CacheableOptions, KeyvCacheableMemory } from 'cacheable'; +import { FlatCache, type FlatCacheOptions } from 'flat-cache'; +import KeyvValkey, { type KeyvValkeyOptions } from '@keyv/valkey'; import dayjs, { Dayjs } from 'dayjs'; import duration from 'dayjs/plugin/duration.js'; import isBetween from 'dayjs/plugin/isBetween.js'; @@ -9,13 +9,13 @@ import isToday from 'dayjs/plugin/isToday.js'; import timezone from 'dayjs/plugin/timezone.js'; import utc from 'dayjs/plugin/utc.js'; import clone from 'clone'; -import { childLogger, Logger } from '@foxxmd/logging'; +import { childLogger, type Logger } from '@foxxmd/logging'; import { projectDir } from './index.js'; import path from 'path'; import { cacheFunctions } from "@foxxmd/regex-buddy-core"; import { fileExists, fileOrDirectoryIsWriteable } from '../utils/FSUtils.js'; import { copyFile } from 'fs/promises'; -import { asCacheConfig, CacheAuthProvider, CacheConfig, CacheConfigOptions, CacheConfigUser, CacheScrobbleProvider } from './infrastructure/Atomic.js'; +import { asCacheConfig, type CacheAuthProvider, type CacheConfig, type CacheConfigOptions, type CacheConfigUser, type CacheScrobbleProvider } from './infrastructure/Atomic.js'; import { Typeson } from 'typeson'; import { builtin } from 'typeson-registry'; import { loggerNoop } from './MaybeLogger.js'; diff --git a/src/backend/common/MaybeLogger.ts b/src/backend/common/MaybeLogger.ts index ca681a8a..d8059f9c 100644 --- a/src/backend/common/MaybeLogger.ts +++ b/src/backend/common/MaybeLogger.ts @@ -1,4 +1,4 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; export class MaybeLogger { diff --git a/src/backend/common/database/Database.ts b/src/backend/common/database/Database.ts index bdc3312d..3a310bf0 100644 --- a/src/backend/common/database/Database.ts +++ b/src/backend/common/database/Database.ts @@ -1,12 +1,12 @@ import { configDir } from '../index.js'; import * as path from 'path'; import { promises as fs } from 'fs' -import { childLogger, Logger } from '@foxxmd/logging'; +import { childLogger, type Logger } from '@foxxmd/logging'; import { loggerNoop } from '../MaybeLogger.js'; import { fileExists, fileOrDirectoryIsWriteable } from '../../utils/FSUtils.js'; -import { COMPACTABLE, compactableProperties, CompactableProperty, DEFAULT_RETENTION_COMPACT_AFTER, DEFAULT_RETENTION_DELETE_AFTER, RententionGranular, RetentionConfig, RetentionConfigValue, RetentionOption, RetentionValue, RetentionValueUnparsed } from '../infrastructure/config/database.js'; -import { DurationValue } from '../infrastructure/Atomic.js'; -import { Duration } from 'dayjs/plugin/duration.js'; +import { COMPACTABLE, compactableProperties, type CompactableProperty, DEFAULT_RETENTION_COMPACT_AFTER, DEFAULT_RETENTION_DELETE_AFTER, type RententionGranular, type RetentionConfig, type RetentionConfigValue, type RetentionOption, type RetentionValue, type RetentionValueUnparsed } from '../infrastructure/config/database.js'; +import { type DurationValue } from '../infrastructure/Atomic.js'; +import { type Duration } from 'dayjs/plugin/duration.js'; import dayjs from 'dayjs'; import { parseDurationFromDurationValue } from '../../utils/TimeUtils.js'; import assert, { AssertionError } from 'node:assert'; diff --git a/src/backend/common/database/appMigrations/001_lifecycleLoc.ts b/src/backend/common/database/appMigrations/001_lifecycleLoc.ts index baa8a9a2..16846c48 100644 --- a/src/backend/common/database/appMigrations/001_lifecycleLoc.ts +++ b/src/backend/common/database/appMigrations/001_lifecycleLoc.ts @@ -1,9 +1,9 @@ import type { SqliteDatabase, Migration } from 'sqlite-up'; -import { MigrateBaseContext } from '../appMigrator.js'; +import { type MigrateBaseContext } from '../appMigrator.js'; import { plays as drizzlePlays } from '../drizzle/schema/schema.js'; import clone from 'clone'; import { eq } from 'drizzle-orm'; -import { PlayLifecycle, PlayObject } from '../../../../core/Atomic.js'; +import { type PlayLifecycle, type PlayObject } from '../../../../core/Atomic.js'; export const up: Migration['up'] = async (db: SqliteDatabase, ctx: MigrateBaseContext): Promise => { diff --git a/src/backend/common/database/appMigrator.ts b/src/backend/common/database/appMigrator.ts index 93dc2eed..5e826c04 100644 --- a/src/backend/common/database/appMigrator.ts +++ b/src/backend/common/database/appMigrator.ts @@ -1,10 +1,10 @@ -import { DbConcrete } from "./drizzle/drizzleUtils.js"; +import { type DbConcrete } from "./drizzle/drizzleUtils.js"; import { loggerNoop } from "../MaybeLogger.js"; import * as path from 'path'; -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import { projectDir } from "../index.js"; import { Migrator } from 'sqlite-up'; -import { MigrationStatus } from "../infrastructure/Atomic.js"; +import { type MigrationStatus } from "../infrastructure/Atomic.js"; export interface MigrateBaseContext { db: DbConcrete diff --git a/src/backend/common/database/drizzle/drizzleTypes.ts b/src/backend/common/database/drizzle/drizzleTypes.ts index a63972e7..e5c88a4a 100644 --- a/src/backend/common/database/drizzle/drizzleTypes.ts +++ b/src/backend/common/database/drizzle/drizzleTypes.ts @@ -1,7 +1,6 @@ -import { DBQueryConfig, DBQueryConfigWith, ExtractTablesFromSchema, KnownKeysOnly, RelationFieldsFilterInternals, Many, InferSelectModel, ExtractTablesWithRelations, type BuildQueryResult, RelationsFilter } from "drizzle-orm"; +import { type DBQueryConfig, type DBQueryConfigWith, type ExtractTablesFromSchema, type KnownKeysOnly, type RelationFieldsFilterInternals, Many, type InferSelectModel, type ExtractTablesWithRelations, type BuildQueryResult, type RelationsFilter } from "drizzle-orm"; import { components, componentMigrations, playInputs, plays, queueStates, relations, playsHistorical } from "./schema/schema.js"; -import {TSchema, TableName, Schema } from "./schema/schema.js"; -import { MarkOptional, MarkRequired } from "ts-essentials"; +import {type TSchema, type TableName } from "./schema/schema.js"; export type ComponentNew = typeof components.$inferInsert; diff --git a/src/backend/common/database/drizzle/drizzleUtils.ts b/src/backend/common/database/drizzle/drizzleUtils.ts index 516e55a3..d5c205d3 100644 --- a/src/backend/common/database/drizzle/drizzleUtils.ts +++ b/src/backend/common/database/drizzle/drizzleUtils.ts @@ -1,19 +1,19 @@ import { drizzle } from 'drizzle-orm/node-sqlite'; import { migrate } from 'drizzle-orm/node-sqlite/migrator'; import { BaseSQLiteDatabase } from "drizzle-orm/sqlite-core"; -import { sql as dsl, LogWriter, Logger as DrizzleLogger } from 'drizzle-orm'; +import { sql as dsl, type LogWriter, type Logger as DrizzleLogger } from 'drizzle-orm'; import * as fs from 'fs/promises'; import * as path from 'path'; import { backupDb, getDbPath, getDbBackupPath, MEMORY_DB_NAME } from '../Database.js'; import { fileExists, fileOrDirectoryIsWriteable } from '../../../utils/FSUtils.js'; -import { childLogger, Logger, LogLevel } from '@foxxmd/logging'; +import { childLogger, type Logger, type LogLevel } from '@foxxmd/logging'; import { loggerNoop } from '../../MaybeLogger.js'; import { projectDir } from '../../index.js'; import { relations } from './schema/schema.js'; import { addToContext, executeQuery } from './logContext.js'; import { DatabaseSync } from 'node:sqlite'; import { migrateApp, getAppMigrationStatus } from '../appMigrator.js'; -import { MigrationStatus } from '../../infrastructure/Atomic.js'; +import { type MigrationStatus } from '../../infrastructure/Atomic.js'; export async function getDbMigrationStatus(dbVal: string | DbConcrete, opts: {logger?: Logger, migrationsFolder?: string} = {}): Promise { const { diff --git a/src/backend/common/database/drizzle/entityUtils.ts b/src/backend/common/database/drizzle/entityUtils.ts index d5833e2f..68681e75 100644 --- a/src/backend/common/database/drizzle/entityUtils.ts +++ b/src/backend/common/database/drizzle/entityUtils.ts @@ -1,10 +1,10 @@ import assert from "node:assert"; -import { PlayHistoricalNew, PlayHistoricalSelect, PlayNew, PlaySelect, PlaySelectWithQueueStates } from "./drizzleTypes.js"; -import { PlayInputNew } from "./drizzleTypes.js"; -import { QueueStateNew } from "./drizzleTypes.js"; -import { ComponentNew } from "./drizzleTypes.js"; -import { MarkOptional, MarkRequired } from "ts-essentials"; -import { CLIENT_DEAD_QUEUE, DeadLetterScrobble, ErrorLike, PlayObject } from "../../../../core/Atomic.js"; +import { type PlayHistoricalNew, type PlayHistoricalSelect, type PlayNew, type PlaySelect, type PlaySelectWithQueueStates } from "./drizzleTypes.js"; +import { type PlayInputNew } from "./drizzleTypes.js"; +import { type QueueStateNew } from "./drizzleTypes.js"; +import { type ComponentNew } from "./drizzleTypes.js"; +import type { MarkOptional } from "ts-essentials"; +import { CLIENT_DEAD_QUEUE, type DeadLetterScrobble, type ErrorLike, type PlayObject } from "../../../../core/Atomic.js"; import dayjs, { Dayjs } from "dayjs"; import { asPlay } from "../../../../core/PlayMarshalUtils.js"; import { playContentBasicInvariantTransform, playMbidIdentifier } from "../../../utils/PlayComparisonUtils.js"; diff --git a/src/backend/common/database/drizzle/logContext.ts b/src/backend/common/database/drizzle/logContext.ts index 3901f6c0..c12c9a4a 100644 --- a/src/backend/common/database/drizzle/logContext.ts +++ b/src/backend/common/database/drizzle/logContext.ts @@ -1,4 +1,4 @@ -import { Logger } from '@foxxmd/logging' +import { type Logger } from '@foxxmd/logging' import { AsyncLocalStorage } from 'async_hooks' // based on https://numeric.substack.com/p/upgrading-drizzleorm-logging-with diff --git a/src/backend/common/database/drizzle/repositories/BaseRepository.ts b/src/backend/common/database/drizzle/repositories/BaseRepository.ts index 2ade26bf..c37fb9fa 100644 --- a/src/backend/common/database/drizzle/repositories/BaseRepository.ts +++ b/src/backend/common/database/drizzle/repositories/BaseRepository.ts @@ -1,14 +1,14 @@ -import { childLogger, Logger } from "@foxxmd/logging"; -import { DbConcrete } from "../drizzleUtils.js"; -import { CompareOpKey } from "../drizzleTypes.js"; +import { childLogger, type Logger } from "@foxxmd/logging"; +import { type DbConcrete } from "../drizzleUtils.js"; +import { type CompareOpKey } from "../drizzleTypes.js"; import { Dayjs } from "dayjs"; -import { RelationsFieldFilter, eq, inArray } from "drizzle-orm"; +import { type RelationsFieldFilter, eq, inArray } from "drizzle-orm"; import { loggerNoop } from "../../../MaybeLogger.js"; import { capitalize } from "../../../../../core/StringUtils.js"; -import { getConfigByTableName, relations, TableName } from "../schema/schema.js"; +import { getConfigByTableName, relations, type TableName } from "../schema/schema.js"; import assert from 'node:assert'; import { Cacheable } from "cacheable"; -import { DateLike } from "../../../../../core/Atomic.js"; +import { type DateLike } from "../../../../../core/Atomic.js"; export interface DrizzleRepositoryOpts { logger?: Logger diff --git a/src/backend/common/database/drizzle/repositories/ComponentRepository.ts b/src/backend/common/database/drizzle/repositories/ComponentRepository.ts index 62e291e9..a88e7415 100644 --- a/src/backend/common/database/drizzle/repositories/ComponentRepository.ts +++ b/src/backend/common/database/drizzle/repositories/ComponentRepository.ts @@ -1,10 +1,10 @@ -import { Logger } from "drizzle-orm"; -import { DrizzleBaseRepository, DrizzleRepositoryOpts } from "./BaseRepository.js"; -import { DbConcrete } from "../drizzleUtils.js"; -import { ComponentNew, ComponentSelect, FindWhere } from "../drizzleTypes.js"; +import { type Logger } from "drizzle-orm"; +import { DrizzleBaseRepository, type DrizzleRepositoryOpts } from "./BaseRepository.js"; +import { type DbConcrete } from "../drizzleUtils.js"; +import { type ComponentNew, type ComponentSelect, type FindWhere } from "../drizzleTypes.js"; import { components } from "../schema/schema.js"; import { generateComponentEntity } from "../entityUtils.js"; -import { ComponentType } from "../../../../../core/Atomic.js"; +import { type ComponentType } from "../../../../../core/Atomic.js"; export class DrizzleComponentRepository extends DrizzleBaseRepository<'components'> { diff --git a/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts b/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts index 35f02b0c..6864133b 100644 --- a/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts +++ b/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts @@ -1,23 +1,23 @@ -import { childLogger, Logger, LoggerAppExtras } from "@foxxmd/logging"; -import { DbConcrete, runTransaction } from "../drizzleUtils.js"; +import { childLogger, type Logger, type LoggerAppExtras } from "@foxxmd/logging"; +import { type DbConcrete, runTransaction } from "../drizzleUtils.js"; import { loggerNoop } from "../../../MaybeLogger.js"; -import { ErrorLike, PlayObject, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_EXACT, TemporalAccuracy } from "../../../../../core/Atomic.js"; -import { generateInputEntity, generatePlayEntity, PlayEntityOpts, hydratePlaySelect, PlayHydateOptions, PlayHistoricalEntityOpts } from "../entityUtils.js"; +import { type ErrorLike, type PlayObject, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_EXACT, type TemporalAccuracy } from "../../../../../core/Atomic.js"; +import { generateInputEntity, generatePlayEntity, type PlayEntityOpts, hydratePlaySelect, type PlayHydateOptions, type PlayHistoricalEntityOpts } from "../entityUtils.js"; import { playInputs, plays, playsHistorical, queueStates, relations } from "../schema/schema.js"; -import { PlayNew, PlaySelect, PlayInputNew, FindWhere, FindMany, QueueStateSelect, FindWith, PlaySelectWithQueueStates, WhereClause, PlayWith, PlayHistoricalSelect, PlayHistoricalNew } from "../drizzleTypes.js";; -import { MarkOptional, MarkRequired, PathValue } from "ts-essentials"; +import { type PlayNew, type PlaySelect, type PlayInputNew, type FindWhere, type FindMany, type QueueStateSelect, type FindWith, type PlaySelectWithQueueStates, type WhereClause, type PlayWith, type PlayHistoricalSelect, type PlayHistoricalNew } from "../drizzleTypes.js";; +import type { MarkOptional } from "ts-essentials"; import { genGroupIdStrFromPlay, removeEmptyArrays, removeUndefinedKeys } from "../../../../utils.js"; import dayjs, { Dayjs } from "dayjs"; -import { RelationsFieldFilter, eq, inArray, ne, notInArray, desc, asc, and, sql, Placeholder } from "drizzle-orm"; -import { CompactableProperty, RetentionOptions, retentionPlayTypes } from "../../../infrastructure/config/database.js"; +import { type RelationsFieldFilter, eq, inArray, ne, notInArray, desc, asc, and, sql, Placeholder } from "drizzle-orm"; +import { type CompactableProperty, type RetentionOptions, retentionPlayTypes } from "../../../infrastructure/config/database.js"; import { shortTodayAwareFormat } from "../../../../../core/TimeUtils.js"; -import { buildDateCompare, CompareDateOp, ComponentConstrainedRepoOpts, DrizzleBaseRepository, DrizzleRepositoryOpts, PaginatedQueryResponse, PaginatedResponse } from "./BaseRepository.js"; +import { buildDateCompare, type CompareDateOp, type ComponentConstrainedRepoOpts, DrizzleBaseRepository, type DrizzleRepositoryOpts, type PaginatedQueryResponse, type PaginatedResponse } from "./BaseRepository.js"; import { asPlay } from "../../../../../core/PlayMarshalUtils.js"; import assert, { Assert } from "node:assert"; import { hashObject, parseArrayFromMaybeString } from "../../../../utils/StringUtils.js"; import { playContentBasicInvariantTransform, playMbidIdentifier } from "../../../../utils/PlayComparisonUtils.js"; import { comparePlayTemporally, getScrobbleTsSOCDate, getScrobbleTsSOCDateWithContext, getTemporalAccuracyCloseVal, hasAcceptableTemporalAccuracy } from "../../../../utils/TimeUtils.js"; -import { SourceType } from "../../../infrastructure/config/source/sources.js"; +import { type SourceType } from "../../../infrastructure/config/source/sources.js"; import { getTemporallyCloseDateCompareOp } from "./PlayRepository.js"; // https://github.com/drizzle-team/drizzle-orm/issues/695 may be useful for typing models with relations? diff --git a/src/backend/common/database/drizzle/repositories/PlayRepository.ts b/src/backend/common/database/drizzle/repositories/PlayRepository.ts index fed33661..52fb0685 100644 --- a/src/backend/common/database/drizzle/repositories/PlayRepository.ts +++ b/src/backend/common/database/drizzle/repositories/PlayRepository.ts @@ -1,24 +1,24 @@ -import { childLogger, Logger, LoggerAppExtras } from "@foxxmd/logging"; -import { DbConcrete, runTransaction } from "../drizzleUtils.js"; +import { childLogger, type Logger, type LoggerAppExtras } from "@foxxmd/logging"; +import { type DbConcrete, runTransaction } from "../drizzleUtils.js"; import clone from 'clone'; -import { Traverse, TraverseContext } from 'neotraverse/modern'; +import { Traverse, type TraverseContext } from 'neotraverse/modern'; import { loggerNoop } from "../../../MaybeLogger.js"; -import { DateLike, DeepReplaceValue, ErrorLike, PlayObject, PlayState, QueueName, REGEX_ISO8601_LOOSE, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_EXACT, TemporalAccuracy } from "../../../../../core/Atomic.js"; -import { generateInputEntity, generatePlayEntity, PlayEntityOpts, hydratePlaySelect, PlayHydateOptions } from "../entityUtils.js"; +import { type DateLike, type DeepReplaceValue, type ErrorLike, type PlayObject, type PlayState, type QueueName, REGEX_ISO8601_LOOSE, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_EXACT, type TemporalAccuracy } from "../../../../../core/Atomic.js"; +import { generateInputEntity, generatePlayEntity, type PlayEntityOpts, hydratePlaySelect, type PlayHydateOptions } from "../entityUtils.js"; import { playInputs, plays, queueStates, relations, schema } from "../schema/schema.js"; -import { PlayNew, PlaySelect, PlayInputNew, FindWhere, FindMany, QueueStateSelect, FindWith, PlaySelectWithQueueStates, WhereClause, PlayWith } from "../drizzleTypes.js";; -import { MarkOptional, MarkRequired, PathValue } from "ts-essentials"; +import { type PlayNew, type PlaySelect, type PlayInputNew, type FindWhere, type FindMany, type QueueStateSelect, type FindWith, type PlaySelectWithQueueStates, type WhereClause, type PlayWith } from "../drizzleTypes.js";; +import type { MarkOptional, MarkRequired, PathValue } from "ts-essentials"; import { genGroupIdStrFromPlay, removeEmptyArrays, removeUndefinedKeys } from "../../../../utils.js"; import dayjs, { Dayjs } from "dayjs"; -import { RelationsFieldFilter, eq, inArray, ne, notInArray, desc, asc, and, sql, Placeholder, relationsFilterToSQL } from "drizzle-orm"; -import { CompactableProperty, RetentionOptions, retentionPlayTypes } from "../../../infrastructure/config/database.js"; +import { type RelationsFieldFilter, eq, inArray, ne, notInArray, desc, asc, and, sql, Placeholder, relationsFilterToSQL } from "drizzle-orm"; +import { type CompactableProperty, type RetentionOptions, retentionPlayTypes } from "../../../infrastructure/config/database.js"; import { shortTodayAwareFormat } from "../../../../../core/TimeUtils.js"; -import { buildDateCompare, CompareDateOp, ComponentConstrainedRepoOpts, DrizzleBaseRepository, DrizzleRepositoryOpts, PaginatedQueryResponse, PaginatedResponse } from "./BaseRepository.js"; +import { buildDateCompare, type CompareDateOp, type ComponentConstrainedRepoOpts, DrizzleBaseRepository, type DrizzleRepositoryOpts, type PaginatedQueryResponse, type PaginatedResponse } from "./BaseRepository.js"; import assert, { Assert } from "node:assert"; import { hashObject, parseArrayFromMaybeString } from "../../../../utils/StringUtils.js"; import { playContentBasicInvariantTransform, playMbidIdentifier } from "../../../../utils/PlayComparisonUtils.js"; import { comparePlayTemporally, getScrobbleTsSOCDate, getScrobbleTsSOCDateWithContext, getTemporalAccuracyCloseVal, hasAcceptableTemporalAccuracy } from "../../../../utils/TimeUtils.js"; -import { SourceType } from "../../../infrastructure/config/source/sources.js"; +import { type SourceType } from "../../../infrastructure/config/source/sources.js"; // https://github.com/drizzle-team/drizzle-orm/issues/695 may be useful for typing models with relations? diff --git a/src/backend/common/database/drizzle/repositories/QueueRepository.ts b/src/backend/common/database/drizzle/repositories/QueueRepository.ts index 54c8d379..efb76b08 100644 --- a/src/backend/common/database/drizzle/repositories/QueueRepository.ts +++ b/src/backend/common/database/drizzle/repositories/QueueRepository.ts @@ -1,7 +1,7 @@ import { eq, and, lte, inArray } from "drizzle-orm"; -import { DrizzleBaseRepository, DrizzleRepositoryOpts } from "./BaseRepository.js"; -import { DbConcrete } from "../drizzleUtils.js"; -import { QueueStateSelect } from "../drizzleTypes.js"; +import { DrizzleBaseRepository, type DrizzleRepositoryOpts } from "./BaseRepository.js"; +import { type DbConcrete } from "../drizzleUtils.js"; +import { type QueueStateSelect } from "../drizzleTypes.js"; import { queueStates } from "../schema/schema.js"; import { CLIENT_DEAD_QUEUE } from "../../../../../core/Atomic.js"; export class DrizzleQueueRepository extends DrizzleBaseRepository<'queueStates'> { diff --git a/src/backend/common/database/drizzle/schema/schema.ts b/src/backend/common/database/drizzle/schema/schema.ts index 69a1f4ce..e1b5ac3e 100644 --- a/src/backend/common/database/drizzle/schema/schema.ts +++ b/src/backend/common/database/drizzle/schema/schema.ts @@ -1,11 +1,11 @@ -import { integer, sqliteTable, text, index, uniqueIndex, customType, AnySQLiteColumn } from "drizzle-orm/sqlite-core"; +import { integer, sqliteTable, text, index, uniqueIndex, customType, type AnySQLiteColumn } from "drizzle-orm/sqlite-core"; import { defineRelations } from 'drizzle-orm'; import dayjs, { Dayjs } from "dayjs"; import { nanoid } from "nanoid"; -import { ErrorLike, PlayObject } from "../../../../../core/Atomic.js"; +import { type ErrorLike, type PlayObject } from "../../../../../core/Atomic.js"; import { asPlayCheap } from "../../../../../core/PlayMarshalUtils.js"; -import { ExternalMetadataTerm, PlayTransformPartsConfig, SearchAndReplaceTerm } from "../../../infrastructure/Transform.js"; -import { JobRangeCount, JobRangeTime } from "../../../infrastructure/Job.js"; +import { type ExternalMetadataTerm, type PlayTransformPartsConfig, type SearchAndReplaceTerm } from "../../../infrastructure/Transform.js"; +import { type JobRangeCount, type JobRangeTime } from "../../../infrastructure/Job.js"; import { serializeError, deserializeError } from "serialize-error"; import { generatePlayUid } from "../../../../../core/StringUtils.js"; diff --git a/src/backend/common/errors/ErrorUtils.ts b/src/backend/common/errors/ErrorUtils.ts index e8f0f72d..882fa0aa 100644 --- a/src/backend/common/errors/ErrorUtils.ts +++ b/src/backend/common/errors/ErrorUtils.ts @@ -1,4 +1,4 @@ -import { ResponseError } from "superagent"; +import { type ResponseError } from "superagent"; export const isSuperAgentResponseError = (e: any): e is ResponseError => { return typeof e === 'object' diff --git a/src/backend/common/errors/MSErrors.ts b/src/backend/common/errors/MSErrors.ts index 88004124..c404729c 100644 --- a/src/backend/common/errors/MSErrors.ts +++ b/src/backend/common/errors/MSErrors.ts @@ -1,9 +1,9 @@ import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; import mergeErrorCause from 'merge-error-cause'; import { findCauseByFunc, isAbortReasonErrorLike } from "../../utils/ErrorUtils.js"; -import { UpstreamError, UpstreamErrorOptions } from "./UpstreamError.js"; +import { UpstreamError, type UpstreamErrorOptions } from "./UpstreamError.js"; import {addKnownErrorConstructor, serializeError} from 'serialize-error'; -import { LifecycleInput } from "../../../core/Atomic.js"; +import { type LifecycleInput } from "../../../core/Atomic.js"; export abstract class NamedError extends Error { public abstract name: string; diff --git a/src/backend/common/infrastructure/Atomic.ts b/src/backend/common/infrastructure/Atomic.ts index f8c38e81..d6389d78 100644 --- a/src/backend/common/infrastructure/Atomic.ts +++ b/src/backend/common/infrastructure/Atomic.ts @@ -1,13 +1,13 @@ -import { Logger } from '@foxxmd/logging'; -import { Dayjs, ManipulateType } from "dayjs"; -import { Request, Response } from "express"; +import { type Logger } from '@foxxmd/logging'; +import { Dayjs, type ManipulateType } from "dayjs"; +import { type Request, type Response } from "express"; import { type NextFunction, type ParamsDictionary, type Query } from "express-serve-static-core"; import { FixedSizeList } from 'fixed-size-list'; -import { ErrorLike, isPlayObject, PlayMeta, PlayObject, PlayObjectMinimal, UnixTimestamp } from "../../../core/Atomic.js"; +import { type ErrorLike, isPlayObject, type PlayMeta, type PlayObject, type PlayObjectMinimal, type UnixTimestamp } from "../../../core/Atomic.js"; import TupleMap from "../TupleMap.js"; import { MusicBrainzApi } from 'musicbrainz-api'; -import { SourceType } from './config/source/sources.js'; -import { ClientType, clientTypes } from './config/client/clients.js'; +import { type SourceType } from './config/source/sources.js'; +import { type ClientType, clientTypes } from './config/client/clients.js'; import assert, { AssertionError } from 'assert'; export const lowGranularitySources: SourceType[] = ['subsonic', 'ytmusic']; diff --git a/src/backend/common/infrastructure/Job.ts b/src/backend/common/infrastructure/Job.ts index 1dc12b78..9d048704 100644 --- a/src/backend/common/infrastructure/Job.ts +++ b/src/backend/common/infrastructure/Job.ts @@ -1,4 +1,4 @@ -import { UnixTimestamp } from "../../../core/Atomic.js" +import { type UnixTimestamp } from "../../../core/Atomic.js" export interface JobParameters { /** maximum number of results to get for the entire job */ diff --git a/src/backend/common/infrastructure/Transform.ts b/src/backend/common/infrastructure/Transform.ts index ef1b0143..85dba0e5 100644 --- a/src/backend/common/infrastructure/Transform.ts +++ b/src/backend/common/infrastructure/Transform.ts @@ -1,4 +1,4 @@ -import { SearchAndReplaceRegExp } from "@foxxmd/regex-buddy-core"; +import { type SearchAndReplaceRegExp } from "@foxxmd/regex-buddy-core"; export interface ConditionalSearchAndReplaceRegExp extends SearchAndReplaceRegExp, Whennable { } diff --git a/src/backend/common/infrastructure/config/aioConfig.ts b/src/backend/common/infrastructure/config/aioConfig.ts index 6b7f9dfd..daa60da1 100644 --- a/src/backend/common/infrastructure/config/aioConfig.ts +++ b/src/backend/common/infrastructure/config/aioConfig.ts @@ -1,13 +1,13 @@ -import { LogOptions } from "@foxxmd/logging"; -import { ClientAIOConfig } from "./client/clients.js"; -import { CommonClientOptions } from "./client/index.js"; -import { RequestRetryOptions } from "./common.js"; -import { WebhookConfig } from "./health/webhooks.js"; -import { CommonSourceOptions, SourceRetryOptions } from "./source/index.js"; -import { SourceAIOConfig } from "./source/sources.js"; -import { CacheConfigOptions, CacheConfigUser, DurationValue } from "../Atomic.js"; -import { TransformerCommonConfig } from "../../../../core/Atomic.js"; -import { RetentionConfig } from "./database.js"; +import { type LogOptions } from "@foxxmd/logging"; +import { type ClientAIOConfig } from "./client/clients.js"; +import { type CommonClientOptions } from "./client/index.js"; +import { type RequestRetryOptions } from "./common.js"; +import { type WebhookConfig } from "./health/webhooks.js"; +import { type CommonSourceOptions, type SourceRetryOptions } from "./source/index.js"; +import { type SourceAIOConfig } from "./source/sources.js"; +import { type CacheConfigOptions, type CacheConfigUser, type DurationValue } from "../Atomic.js"; +import { type TransformerCommonConfig } from "../../../../core/Atomic.js"; +import { type RetentionConfig } from "./database.js"; export interface SourceDefaults extends CommonSourceOptions { diff --git a/src/backend/common/infrastructure/config/client/atproto.ts b/src/backend/common/infrastructure/config/client/atproto.ts index 69244dc5..2e0042be 100644 --- a/src/backend/common/infrastructure/config/client/atproto.ts +++ b/src/backend/common/infrastructure/config/client/atproto.ts @@ -1,4 +1,4 @@ -import { AtprotoDid } from "@atcute/lexicons/syntax"; +import { type AtprotoDid } from "@atcute/lexicons/syntax"; export interface ATProtoUserIdentifierData { /** diff --git a/src/backend/common/infrastructure/config/client/clients.ts b/src/backend/common/infrastructure/config/client/clients.ts index 534144f7..538e0000 100644 --- a/src/backend/common/infrastructure/config/client/clients.ts +++ b/src/backend/common/infrastructure/config/client/clients.ts @@ -1,11 +1,11 @@ -import { KoitoClientAIOConfig, KoitoClientConfig } from "./koito.js"; -import { LastfmClientAIOConfig, LastfmClientConfig } from "./lastfm.js"; -import { ListenBrainzClientAIOConfig, ListenBrainzClientConfig } from "./listenbrainz.js"; -import { MalojaClientAIOConfig, MalojaClientConfig } from "./maloja.js"; -import { TealClientAIOConfig, TealClientConfig } from "./tealfm.js"; -import { RockSkyClientAIOConfig, RockSkyClientConfig } from "./rocksky.js"; -import { LibrefmClientConfig, LibrefmClientAIOConfig } from "./librefm.js"; -import { DiscordClientAIOConfig, DiscordClientConfig } from "./discord.js"; +import { type KoitoClientAIOConfig, type KoitoClientConfig } from "./koito.js"; +import { type LastfmClientAIOConfig, type LastfmClientConfig } from "./lastfm.js"; +import { type ListenBrainzClientAIOConfig, type ListenBrainzClientConfig } from "./listenbrainz.js"; +import { type MalojaClientAIOConfig, type MalojaClientConfig } from "./maloja.js"; +import { type TealClientAIOConfig, type TealClientConfig } from "./tealfm.js"; +import { type RockSkyClientAIOConfig, type RockSkyClientConfig } from "./rocksky.js"; +import { type LibrefmClientConfig, type LibrefmClientAIOConfig } from "./librefm.js"; +import { type DiscordClientAIOConfig, type DiscordClientConfig } from "./discord.js"; export type ClientConfig = MalojaClientConfig diff --git a/src/backend/common/infrastructure/config/client/discord.ts b/src/backend/common/infrastructure/config/client/discord.ts index 33f108b0..17db740a 100644 --- a/src/backend/common/infrastructure/config/client/discord.ts +++ b/src/backend/common/infrastructure/config/client/discord.ts @@ -1,6 +1,6 @@ import { ActivityType, StatusDisplayType } from "discord.js" -import { CommonClientConfig, CommonClientData } from "./index.js" -import { ComponentType } from "../../../../../core/Atomic.js" +import { type CommonClientConfig, type CommonClientData } from "./index.js" +import { type ComponentType } from "../../../../../core/Atomic.js" export interface DiscordData { token?: string @@ -63,10 +63,6 @@ export interface ActivityTimestamps { end?: number } -export enum ActivityTypeOthers { - Hanging = 6 -} - export declare enum ActivityTypeReal { /** * Playing \{game\} diff --git a/src/backend/common/infrastructure/config/client/index.ts b/src/backend/common/infrastructure/config/client/index.ts index 83b13a59..d050f29d 100644 --- a/src/backend/common/infrastructure/config/client/index.ts +++ b/src/backend/common/infrastructure/config/client/index.ts @@ -1,7 +1,7 @@ -import { DurationValue } from "../../Atomic.js"; -import { PlayTransformConfig, PlayTransformOptions } from "../../Transform.js"; -import { CommonConfig, CommonData, RequestRetryOptions } from "../common.js"; -import { RetentionConfig } from "../database.js"; +import { type DurationValue } from "../../Atomic.js"; +import { type PlayTransformConfig, type PlayTransformOptions } from "../../Transform.js"; +import { type CommonConfig, type CommonData, type RequestRetryOptions } from "../common.js"; +import { type RetentionConfig } from "../database.js"; /** * Scrobble matching (between new source track and existing client scrobbles) logging options. Used for debugging. diff --git a/src/backend/common/infrastructure/config/client/koito.ts b/src/backend/common/infrastructure/config/client/koito.ts index 6f5d8709..548d8016 100644 --- a/src/backend/common/infrastructure/config/client/koito.ts +++ b/src/backend/common/infrastructure/config/client/koito.ts @@ -1,6 +1,6 @@ -import { ComponentType, UnixTimestamp } from "../../../../../core/Atomic.js" -import { RequestRetryOptions } from "../common.js" -import { CommonClientConfig, CommonClientData } from "./index.js" +import { type ComponentType, type UnixTimestamp } from "../../../../../core/Atomic.js" +import { type RequestRetryOptions } from "../common.js" +import { type CommonClientConfig, type CommonClientData } from "./index.js" export interface ListensResponse { items: ListenObjectResponse[] diff --git a/src/backend/common/infrastructure/config/client/lastfm.ts b/src/backend/common/infrastructure/config/client/lastfm.ts index db664e6c..a43db655 100644 --- a/src/backend/common/infrastructure/config/client/lastfm.ts +++ b/src/backend/common/infrastructure/config/client/lastfm.ts @@ -1,5 +1,5 @@ -import { RequestRetryOptions } from "../common.js"; -import { CommonClientConfig, CommonClientData, CommonClientOptions, NowPlayingOptions } from "./index.js"; +import { type RequestRetryOptions } from "../common.js"; +import { type CommonClientConfig, type CommonClientData, type CommonClientOptions, type NowPlayingOptions } from "./index.js"; export interface LastfmData extends CommonClientData, RequestRetryOptions { /** diff --git a/src/backend/common/infrastructure/config/client/librefm.ts b/src/backend/common/infrastructure/config/client/librefm.ts index 0c0b4fbf..641d91d6 100644 --- a/src/backend/common/infrastructure/config/client/librefm.ts +++ b/src/backend/common/infrastructure/config/client/librefm.ts @@ -1,6 +1,6 @@ -import { RequestRetryOptions } from "../common.js"; -import { CommonClientConfig, CommonClientData } from "./index.js"; -import { LastfmClientOptions } from "./lastfm.js"; +import { type RequestRetryOptions } from "../common.js"; +import { type CommonClientConfig, type CommonClientData } from "./index.js"; +import { type LastfmClientOptions } from "./lastfm.js"; export interface LibrefmData extends CommonClientData, RequestRetryOptions { /** diff --git a/src/backend/common/infrastructure/config/client/listenbrainz.ts b/src/backend/common/infrastructure/config/client/listenbrainz.ts index 6155915e..a6312a5e 100644 --- a/src/backend/common/infrastructure/config/client/listenbrainz.ts +++ b/src/backend/common/infrastructure/config/client/listenbrainz.ts @@ -1,6 +1,6 @@ -import { ComponentType } from "../../../../../core/Atomic.js"; -import { RequestRetryOptions } from "../common.js"; -import { CommonClientConfig, CommonClientData } from "./index.js"; +import { type ComponentType } from "../../../../../core/Atomic.js"; +import { type RequestRetryOptions } from "../common.js"; +import { type CommonClientConfig, type CommonClientData } from "./index.js"; export interface ListenBrainzData extends RequestRetryOptions{ /** diff --git a/src/backend/common/infrastructure/config/client/maloja.ts b/src/backend/common/infrastructure/config/client/maloja.ts index 5f4d759d..7d05350d 100644 --- a/src/backend/common/infrastructure/config/client/maloja.ts +++ b/src/backend/common/infrastructure/config/client/maloja.ts @@ -1,6 +1,6 @@ -import { ComponentType } from "../../../../../core/Atomic.js"; -import { RequestRetryOptions } from "../common.js"; -import { CommonClientConfig, CommonClientData } from "./index.js"; +import { type ComponentType } from "../../../../../core/Atomic.js"; +import { type RequestRetryOptions } from "../common.js"; +import { type CommonClientConfig, type CommonClientData } from "./index.js"; export interface MalojaData extends RequestRetryOptions { /** diff --git a/src/backend/common/infrastructure/config/client/rocksky.ts b/src/backend/common/infrastructure/config/client/rocksky.ts index a1576919..16f5bf47 100644 --- a/src/backend/common/infrastructure/config/client/rocksky.ts +++ b/src/backend/common/infrastructure/config/client/rocksky.ts @@ -1,5 +1,5 @@ -import { RequestRetryOptions } from "../common.js"; -import { CommonClientConfig, CommonClientData, CommonClientOptions, NowPlayingOptions } from "./index.js"; +import { type RequestRetryOptions } from "../common.js"; +import { type CommonClientConfig, type CommonClientData, type CommonClientOptions, type NowPlayingOptions } from "./index.js"; export interface RockSkyData extends RequestRetryOptions{ diff --git a/src/backend/common/infrastructure/config/client/tealfm.ts b/src/backend/common/infrastructure/config/client/tealfm.ts index 2ee03224..24acdc4f 100644 --- a/src/backend/common/infrastructure/config/client/tealfm.ts +++ b/src/backend/common/infrastructure/config/client/tealfm.ts @@ -1,7 +1,7 @@ -import { ComponentType } from "../../../../../core/Atomic.js" -import { RequestRetryOptions } from "../common.js" -import { ATProtoAppData, ATProtoUserIdentifierData } from "./atproto.js" -import { CommonClientConfig, CommonClientData, CommonClientOptions } from "./index.js" +import { type ComponentType } from "../../../../../core/Atomic.js" +import { type RequestRetryOptions } from "../common.js" +import { type ATProtoAppData, type ATProtoUserIdentifierData } from "./atproto.js" +import { type CommonClientConfig, type CommonClientData, type CommonClientOptions } from "./index.js" export type TealData = RequestRetryOptions & ATProtoUserIdentifierData & Partial & { /** diff --git a/src/backend/common/infrastructure/config/common.ts b/src/backend/common/infrastructure/config/common.ts index f9f6fea6..765804dd 100644 --- a/src/backend/common/infrastructure/config/common.ts +++ b/src/backend/common/infrastructure/config/common.ts @@ -1,4 +1,4 @@ -import { keyOmit } from "../Atomic.js"; +import { type keyOmit } from "../Atomic.js"; export interface CommonConfigPrimitives { name?: string diff --git a/src/backend/common/infrastructure/config/database.ts b/src/backend/common/infrastructure/config/database.ts index abcfab19..1b8cda07 100644 --- a/src/backend/common/infrastructure/config/database.ts +++ b/src/backend/common/infrastructure/config/database.ts @@ -1,5 +1,5 @@ -import { Duration } from "dayjs/plugin/duration.js"; -import { DurationValue } from "../Atomic.js"; +import { type Duration } from "dayjs/plugin/duration.js"; +import { type DurationValue } from "../Atomic.js"; export type RetentionPlayType = 'failed' | 'completed' | 'duped'; export const retentionPlayTypes: RetentionPlayType[] = ['failed','completed','duped']; diff --git a/src/backend/common/infrastructure/config/source/azuracast.ts b/src/backend/common/infrastructure/config/source/azuracast.ts index 9cd2a562..fc97d727 100644 --- a/src/backend/common/infrastructure/config/source/azuracast.ts +++ b/src/backend/common/infrastructure/config/source/azuracast.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions, ManualListeningOptions } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions, type ManualListeningOptions } from "./index.js"; export interface AzuraStationInfoResponse { id: string diff --git a/src/backend/common/infrastructure/config/source/chromecast.ts b/src/backend/common/infrastructure/config/source/chromecast.ts index b2120069..75c2fee2 100644 --- a/src/backend/common/infrastructure/config/source/chromecast.ts +++ b/src/backend/common/infrastructure/config/source/chromecast.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface ChromecastData extends CommonSourceData { /** diff --git a/src/backend/common/infrastructure/config/source/deezer.ts b/src/backend/common/infrastructure/config/source/deezer.ts index 5ad075c7..f13e855c 100644 --- a/src/backend/common/infrastructure/config/source/deezer.ts +++ b/src/backend/common/infrastructure/config/source/deezer.ts @@ -1,6 +1,6 @@ -import { Second } from "../../../../../core/Atomic.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type Second } from "../../../../../core/Atomic.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface DeezerData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/endpointlfm.ts b/src/backend/common/infrastructure/config/source/endpointlfm.ts index 80abc281..28975d28 100644 --- a/src/backend/common/infrastructure/config/source/endpointlfm.ts +++ b/src/backend/common/infrastructure/config/source/endpointlfm.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface LastFMEndpointData extends CommonSourceData { /** diff --git a/src/backend/common/infrastructure/config/source/endpointlz.ts b/src/backend/common/infrastructure/config/source/endpointlz.ts index 51b6b0f3..0d4c4ca2 100644 --- a/src/backend/common/infrastructure/config/source/endpointlz.ts +++ b/src/backend/common/infrastructure/config/source/endpointlz.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface ListenbrainzEndpointData extends CommonSourceData { /** diff --git a/src/backend/common/infrastructure/config/source/icecast.ts b/src/backend/common/infrastructure/config/source/icecast.ts index 5329d2df..878165b3 100644 --- a/src/backend/common/infrastructure/config/source/icecast.ts +++ b/src/backend/common/infrastructure/config/source/icecast.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions, ManualListeningOptions } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions, type ManualListeningOptions } from "./index.js"; export interface IcecastMetadata { diff --git a/src/backend/common/infrastructure/config/source/index.ts b/src/backend/common/infrastructure/config/source/index.ts index 8d87c72f..c73253ff 100644 --- a/src/backend/common/infrastructure/config/source/index.ts +++ b/src/backend/common/infrastructure/config/source/index.ts @@ -1,9 +1,9 @@ -import { FileLogOptions, LogLevel } from "@foxxmd/logging"; +import { type FileLogOptions, type LogLevel } from "@foxxmd/logging"; -import { PlayTransformConfig, PlayTransformOptions } from "../../Transform.js"; -import { CommonConfig, CommonData, RequestRetryOptions } from "../common.js"; -import { RetentionConfig } from "../database.js"; -import { DurationValue } from "../../Atomic.js"; +import { type PlayTransformConfig, type PlayTransformOptions } from "../../Transform.js"; +import { type CommonConfig, type CommonData, type RequestRetryOptions } from "../common.js"; +import { type RetentionConfig } from "../database.js"; +import { type DurationValue } from "../../Atomic.js"; export interface SourceRetryOptions extends RequestRetryOptions { /** diff --git a/src/backend/common/infrastructure/config/source/jellyfin.ts b/src/backend/common/infrastructure/config/source/jellyfin.ts index 535e2845..c9ccdb7a 100644 --- a/src/backend/common/infrastructure/config/source/jellyfin.ts +++ b/src/backend/common/infrastructure/config/source/jellyfin.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; import { // @ts-expect-error weird typings? CollectionType, diff --git a/src/backend/common/infrastructure/config/source/jriver.ts b/src/backend/common/infrastructure/config/source/jriver.ts index 6dc7f8c2..be7ca26a 100644 --- a/src/backend/common/infrastructure/config/source/jriver.ts +++ b/src/backend/common/infrastructure/config/source/jriver.ts @@ -1,5 +1,5 @@ -import { PollingOptions, RequestRetryOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type PollingOptions, type RequestRetryOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface JRiverData extends CommonSourceData, PollingOptions, RequestRetryOptions { /** diff --git a/src/backend/common/infrastructure/config/source/kodi.ts b/src/backend/common/infrastructure/config/source/kodi.ts index f7680940..1b61b29f 100644 --- a/src/backend/common/infrastructure/config/source/kodi.ts +++ b/src/backend/common/infrastructure/config/source/kodi.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface KodiData extends CommonSourceData, PollingOptions { diff --git a/src/backend/common/infrastructure/config/source/koito.ts b/src/backend/common/infrastructure/config/source/koito.ts index 3cceb4ae..3adf1937 100644 --- a/src/backend/common/infrastructure/config/source/koito.ts +++ b/src/backend/common/infrastructure/config/source/koito.ts @@ -1,7 +1,7 @@ -import { KoitoData } from "../client/koito.js"; -import { ListenBrainzData } from "../client/listenbrainz.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type KoitoData } from "../client/koito.js"; +import { type ListenBrainzData } from "../client/listenbrainz.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface KoitoSourceData extends KoitoData, CommonSourceData, PollingOptions { } diff --git a/src/backend/common/infrastructure/config/source/lastfm.ts b/src/backend/common/infrastructure/config/source/lastfm.ts index 97b497ad..121b9980 100644 --- a/src/backend/common/infrastructure/config/source/lastfm.ts +++ b/src/backend/common/infrastructure/config/source/lastfm.ts @@ -1,6 +1,6 @@ -import { LastfmData } from "../client/lastfm.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type LastfmData } from "../client/lastfm.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface LastFmSourceData extends CommonSourceData, PollingOptions, LastfmData{} diff --git a/src/backend/common/infrastructure/config/source/librefm.ts b/src/backend/common/infrastructure/config/source/librefm.ts index cc67cb87..4efae58d 100644 --- a/src/backend/common/infrastructure/config/source/librefm.ts +++ b/src/backend/common/infrastructure/config/source/librefm.ts @@ -1,6 +1,6 @@ -import { LibrefmData } from "../client/librefm.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type LibrefmData } from "../client/librefm.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface librefmSourceData extends CommonSourceData, PollingOptions, LibrefmData{} diff --git a/src/backend/common/infrastructure/config/source/listenbrainz.ts b/src/backend/common/infrastructure/config/source/listenbrainz.ts index a26213e6..bc6cbcea 100644 --- a/src/backend/common/infrastructure/config/source/listenbrainz.ts +++ b/src/backend/common/infrastructure/config/source/listenbrainz.ts @@ -1,6 +1,6 @@ -import { ListenBrainzData } from "../client/listenbrainz.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type ListenBrainzData } from "../client/listenbrainz.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface ListenBrainzSourceData extends ListenBrainzData, CommonSourceData, PollingOptions { } diff --git a/src/backend/common/infrastructure/config/source/maloja.ts b/src/backend/common/infrastructure/config/source/maloja.ts index 4f508feb..7a52b667 100644 --- a/src/backend/common/infrastructure/config/source/maloja.ts +++ b/src/backend/common/infrastructure/config/source/maloja.ts @@ -1,6 +1,6 @@ -import { MalojaData } from "../client/maloja.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type MalojaData } from "../client/maloja.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface MalojaSourceData extends MalojaData, CommonSourceData, PollingOptions { } diff --git a/src/backend/common/infrastructure/config/source/mopidy.ts b/src/backend/common/infrastructure/config/source/mopidy.ts index bf4b1d12..610f7c52 100644 --- a/src/backend/common/infrastructure/config/source/mopidy.ts +++ b/src/backend/common/infrastructure/config/source/mopidy.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface MopidyData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/mpd.ts b/src/backend/common/infrastructure/config/source/mpd.ts index a7cd34f6..76a05409 100644 --- a/src/backend/common/infrastructure/config/source/mpd.ts +++ b/src/backend/common/infrastructure/config/source/mpd.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface MPDData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/mpris.ts b/src/backend/common/infrastructure/config/source/mpris.ts index 558f5ddf..593a9190 100644 --- a/src/backend/common/infrastructure/config/source/mpris.ts +++ b/src/backend/common/infrastructure/config/source/mpris.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export const PLAYBACK_STATUS_PLAYING = 'Playing'; export const PLAYBACK_STATUS_PAUSED = 'Paused'; diff --git a/src/backend/common/infrastructure/config/source/musiccast.ts b/src/backend/common/infrastructure/config/source/musiccast.ts index 23e0f868..188b2a3c 100644 --- a/src/backend/common/infrastructure/config/source/musiccast.ts +++ b/src/backend/common/infrastructure/config/source/musiccast.ts @@ -1,5 +1,5 @@ -import { REPORTED_PLAYER_STATUSES, ReportedPlayerStatus } from "../../Atomic.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { REPORTED_PLAYER_STATUSES, type ReportedPlayerStatus } from "../../Atomic.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export type PlaybackStatus = 'play' | 'stop' | 'pause' | 'fast_reverse' | 'fast_forward' diff --git a/src/backend/common/infrastructure/config/source/musikcube.ts b/src/backend/common/infrastructure/config/source/musikcube.ts index 2bff4ff5..cc716a9e 100644 --- a/src/backend/common/infrastructure/config/source/musikcube.ts +++ b/src/backend/common/infrastructure/config/source/musikcube.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export const PLAYBACK_STATUS_PLAYING_MC = 'playing'; export const PLAYBACK_STATUS_PAUSED_MC = 'paused'; diff --git a/src/backend/common/infrastructure/config/source/plex.ts b/src/backend/common/infrastructure/config/source/plex.ts index 57b91106..b95f3b58 100644 --- a/src/backend/common/infrastructure/config/source/plex.ts +++ b/src/backend/common/infrastructure/config/source/plex.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface PlexApiData extends CommonSourceData, PollingOptions { token?: string diff --git a/src/backend/common/infrastructure/config/source/rocksky.ts b/src/backend/common/infrastructure/config/source/rocksky.ts index 15c66ff2..159f5ea5 100644 --- a/src/backend/common/infrastructure/config/source/rocksky.ts +++ b/src/backend/common/infrastructure/config/source/rocksky.ts @@ -1,6 +1,6 @@ -import { RockSkyData, RockSkyOptions } from "../client/rocksky.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type RockSkyData, type RockSkyOptions } from "../client/rocksky.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface RockskySourceData extends RockSkyData, CommonSourceData, PollingOptions { } diff --git a/src/backend/common/infrastructure/config/source/sonos.ts b/src/backend/common/infrastructure/config/source/sonos.ts index 40222680..d7b2c926 100644 --- a/src/backend/common/infrastructure/config/source/sonos.ts +++ b/src/backend/common/infrastructure/config/source/sonos.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface SonosData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/sources.ts b/src/backend/common/infrastructure/config/source/sources.ts index a5f3c2c1..49e8e20f 100644 --- a/src/backend/common/infrastructure/config/source/sources.ts +++ b/src/backend/common/infrastructure/config/source/sources.ts @@ -1,32 +1,32 @@ -import { AzuracastSourceAIOConfig, AzuracastSourceConfig } from "./azuracast.js"; -import { ChromecastSourceAIOConfig, ChromecastSourceConfig } from "./chromecast.js"; -import { ListenbrainzEndpointSourceAIOConfig, ListenbrainzEndpointSourceConfig } from "./endpointlz.js"; -import { LastFMEndpointSourceAIOConfig, LastFMEndpointSourceConfig } from "./endpointlfm.js"; -import { DeezerInternalSourceConfig, DeezerInternalAIOConfig, DeezerSourceAIOConfig, DeezerSourceConfig, DeezerCompatConfig, DeezerAIOCompatConfig } from "./deezer.js"; -import { JellyApiSourceAIOConfig, JellyApiSourceConfig } from "./jellyfin.js"; -import { JRiverSourceAIOConfig, JRiverSourceConfig } from "./jriver.js"; -import { KodiSourceAIOConfig, KodiSourceConfig } from "./kodi.js"; -import { LastFmSouceAIOConfig, LastfmSourceConfig } from "./lastfm.js"; -import { ListenBrainzSourceAIOConfig, ListenBrainzSourceConfig } from "./listenbrainz.js"; -import { MopidySourceAIOConfig, MopidySourceConfig } from "./mopidy.js"; -import { MPDSourceAIOConfig, MPDSourceConfig } from "./mpd.js"; -import { MPRISSourceAIOConfig, MPRISSourceConfig } from "./mpris.js"; -import { MusikcubeSourceAIOConfig, MusikcubeSourceConfig } from "./musikcube.js"; -import { MusicCastSourceConfig, MusicCastSourceAIOConfig } from "./musiccast.js"; -import { PlexApiSourceConfig, PlexApiSourceAIOConfig } from "./plex.js"; -import { SpotifySourceAIOConfig, SpotifySourceConfig } from "./spotify.js"; -import { SubsonicSourceAIOConfig, SubSonicSourceConfig } from "./subsonic.js"; -import { VLCSourceAIOConfig, VLCSourceConfig } from "./vlc.js"; -import { WebScrobblerSourceAIOConfig, WebScrobblerSourceConfig } from "./webscrobbler.js"; -import { YTMusicSourceAIOConfig, YTMusicSourceConfig } from "./ytmusic.js"; -import { YandexMusicBridgeSourceAIOConfig, YandexMusicBridgeSourceConfig } from "./ymbridge.js"; -import { IcecastSourceAIOConfig, IcecastSourceConfig } from "./icecast.js"; -import { KoitoSourceAIOConfig, KoitoSourceConfig } from "./koito.js"; -import { MalojaSourceAIOConfig, MalojaSourceConfig } from "./maloja.js"; -import { TealSourceAIOConfig, TealSourceConfig } from "./tealfm.js"; -import { RockskySourceAIOConfig, RockskySourceConfig } from "./rocksky.js"; -import { LibrefmSouceAIOConfig, LibrefmSourceConfig } from "./librefm.js"; -import { SonosSourceAIOConfig, SonosSourceConfig } from "./sonos.js"; +import { type AzuracastSourceAIOConfig, type AzuracastSourceConfig } from "./azuracast.js"; +import { type ChromecastSourceAIOConfig, type ChromecastSourceConfig } from "./chromecast.js"; +import { type ListenbrainzEndpointSourceAIOConfig, type ListenbrainzEndpointSourceConfig } from "./endpointlz.js"; +import { type LastFMEndpointSourceAIOConfig, type LastFMEndpointSourceConfig } from "./endpointlfm.js"; +import { type DeezerInternalSourceConfig, type DeezerInternalAIOConfig, type DeezerSourceAIOConfig, type DeezerSourceConfig, type DeezerCompatConfig, type DeezerAIOCompatConfig } from "./deezer.js"; +import { type JellyApiSourceAIOConfig, type JellyApiSourceConfig } from "./jellyfin.js"; +import { type JRiverSourceAIOConfig, type JRiverSourceConfig } from "./jriver.js"; +import { type KodiSourceAIOConfig, type KodiSourceConfig } from "./kodi.js"; +import { type LastFmSouceAIOConfig, type LastfmSourceConfig } from "./lastfm.js"; +import { type ListenBrainzSourceAIOConfig, type ListenBrainzSourceConfig } from "./listenbrainz.js"; +import { type MopidySourceAIOConfig, type MopidySourceConfig } from "./mopidy.js"; +import { type MPDSourceAIOConfig, type MPDSourceConfig } from "./mpd.js"; +import { type MPRISSourceAIOConfig, type MPRISSourceConfig } from "./mpris.js"; +import { type MusikcubeSourceAIOConfig, type MusikcubeSourceConfig } from "./musikcube.js"; +import { type MusicCastSourceConfig, type MusicCastSourceAIOConfig } from "./musiccast.js"; +import { type PlexApiSourceConfig, type PlexApiSourceAIOConfig } from "./plex.js"; +import { type SpotifySourceAIOConfig, type SpotifySourceConfig } from "./spotify.js"; +import { type SubsonicSourceAIOConfig, type SubSonicSourceConfig } from "./subsonic.js"; +import { type VLCSourceAIOConfig, type VLCSourceConfig } from "./vlc.js"; +import { type WebScrobblerSourceAIOConfig, type WebScrobblerSourceConfig } from "./webscrobbler.js"; +import { type YTMusicSourceAIOConfig, type YTMusicSourceConfig } from "./ytmusic.js"; +import { type YandexMusicBridgeSourceAIOConfig, type YandexMusicBridgeSourceConfig } from "./ymbridge.js"; +import { type IcecastSourceAIOConfig, type IcecastSourceConfig } from "./icecast.js"; +import { type KoitoSourceAIOConfig, type KoitoSourceConfig } from "./koito.js"; +import { type MalojaSourceAIOConfig, type MalojaSourceConfig } from "./maloja.js"; +import { type TealSourceAIOConfig, type TealSourceConfig } from "./tealfm.js"; +import { type RockskySourceAIOConfig, type RockskySourceConfig } from "./rocksky.js"; +import { type LibrefmSouceAIOConfig, type LibrefmSourceConfig } from "./librefm.js"; +import { type SonosSourceAIOConfig, type SonosSourceConfig } from "./sonos.js"; export type SourceConfig = diff --git a/src/backend/common/infrastructure/config/source/spotify.ts b/src/backend/common/infrastructure/config/source/spotify.ts index 6feae73e..56bebc8b 100644 --- a/src/backend/common/infrastructure/config/source/spotify.ts +++ b/src/backend/common/infrastructure/config/source/spotify.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface SpotifySourceData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/subsonic.ts b/src/backend/common/infrastructure/config/source/subsonic.ts index c79acda9..c7106b43 100644 --- a/src/backend/common/infrastructure/config/source/subsonic.ts +++ b/src/backend/common/infrastructure/config/source/subsonic.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface SubsonicData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/tealfm.ts b/src/backend/common/infrastructure/config/source/tealfm.ts index c7235d8f..89f307a9 100644 --- a/src/backend/common/infrastructure/config/source/tealfm.ts +++ b/src/backend/common/infrastructure/config/source/tealfm.ts @@ -1,6 +1,6 @@ -import { TealData, TealOptions } from "../client/tealfm.js" -import { PollingOptions } from "../common.js" -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js" +import { type TealData, type TealOptions } from "../client/tealfm.js" +import { type PollingOptions } from "../common.js" +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js" export interface TealSourceData extends TealData, CommonSourceData, PollingOptions { diff --git a/src/backend/common/infrastructure/config/source/vlc.ts b/src/backend/common/infrastructure/config/source/vlc.ts index 45efb16a..4f3eab5f 100644 --- a/src/backend/common/infrastructure/config/source/vlc.ts +++ b/src/backend/common/infrastructure/config/source/vlc.ts @@ -1,6 +1,6 @@ -import { VlcMeta } from "vlc-client/dist/Types.js"; -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type VlcMeta } from "vlc-client/dist/Types.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface VLCData extends CommonSourceData, PollingOptions { /** diff --git a/src/backend/common/infrastructure/config/source/webscrobbler.ts b/src/backend/common/infrastructure/config/source/webscrobbler.ts index f7574d31..95757f3a 100644 --- a/src/backend/common/infrastructure/config/source/webscrobbler.ts +++ b/src/backend/common/infrastructure/config/source/webscrobbler.ts @@ -1,4 +1,4 @@ -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface WebScrobblerData extends CommonSourceData { /** diff --git a/src/backend/common/infrastructure/config/source/ymbridge.ts b/src/backend/common/infrastructure/config/source/ymbridge.ts index a5d3e733..aa8fed83 100644 --- a/src/backend/common/infrastructure/config/source/ymbridge.ts +++ b/src/backend/common/infrastructure/config/source/ymbridge.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData } from "./index.js"; export interface YandexMusicBridgeData extends CommonSourceData, PollingOptions { /** URL of the local Python bridge, for example http://yandex-music-bridge:9980 */ diff --git a/src/backend/common/infrastructure/config/source/ytmusic.ts b/src/backend/common/infrastructure/config/source/ytmusic.ts index b0b91cea..959f1e14 100644 --- a/src/backend/common/infrastructure/config/source/ytmusic.ts +++ b/src/backend/common/infrastructure/config/source/ytmusic.ts @@ -1,5 +1,5 @@ -import { PollingOptions } from "../common.js"; -import { CommonSourceConfig, CommonSourceData, CommonSourceOptions } from "./index.js"; +import { type PollingOptions } from "../common.js"; +import { type CommonSourceConfig, type CommonSourceData, type CommonSourceOptions } from "./index.js"; export interface InnertubeOptions { /** diff --git a/src/backend/common/logging.ts b/src/backend/common/logging.ts index 68bcfcea..6b00efda 100644 --- a/src/backend/common/logging.ts +++ b/src/backend/common/logging.ts @@ -1,4 +1,4 @@ -import { FileLogOptions, Logger, loggerAppRolling, LogLevel, LogLevelStreamEntry, LogOptions, parseLogOptions } from '@foxxmd/logging'; +import { type FileLogOptions, type Logger, loggerAppRolling, type LogLevel, type LogLevelStreamEntry, type LogOptions, parseLogOptions } from '@foxxmd/logging'; import { buildDestinationJsonPrettyStream, buildDestinationRollingFile, buildDestinationStdout, buildLogger } from "@foxxmd/logging/factory"; import { PassThrough, Transform } from "node:stream"; import path from "path"; diff --git a/src/backend/common/transforms/AbstractTransformer.ts b/src/backend/common/transforms/AbstractTransformer.ts index 782d2230..b7180026 100644 --- a/src/backend/common/transforms/AbstractTransformer.ts +++ b/src/backend/common/transforms/AbstractTransformer.ts @@ -1,15 +1,15 @@ -import { childLogger, Logger } from "@foxxmd/logging"; -import { PlayObject, TransformerCommon, TransformerCommonConfig } from "../../../core/Atomic.js"; +import { childLogger, type Logger } from "@foxxmd/logging"; +import { type PlayObject, type TransformerCommon, type TransformerCommonConfig } from "../../../core/Atomic.js"; import { isStageTyped, testWhenConditions } from "../../utils/PlayTransformUtils.js"; import AbstractInitializable from "../AbstractInitializable.js"; -import { StageConfig } from "../infrastructure/Transform.js"; +import { type StageConfig } from "../infrastructure/Transform.js"; import { cacheFunctions, parseToRegexOrLiteralSearch, testMaybeRegex, searchAndReplace} from "@foxxmd/regex-buddy-core"; import { Cacheable } from "cacheable"; import { hashObject } from "../../utils/StringUtils.js"; import { playContentInvariantTransform } from "../../utils/PlayComparisonUtils.js"; import { isSimpleError, SkipTransformStageError, StagePrerequisiteError } from "../errors/MSErrors.js"; import { capitalize } from "../../../core/StringUtils.js"; -import { StaggerOptions } from "../../utils/AsyncUtils.js"; +import { type StaggerOptions } from "../../utils/AsyncUtils.js"; export interface TransformerOptions { logger: Logger diff --git a/src/backend/common/transforms/AtomicPartsTransformer.ts b/src/backend/common/transforms/AtomicPartsTransformer.ts index 8386aae8..8cce4502 100644 --- a/src/backend/common/transforms/AtomicPartsTransformer.ts +++ b/src/backend/common/transforms/AtomicPartsTransformer.ts @@ -1,5 +1,5 @@ -import { ArtistCredit, isPlayObject, ObjectPlayData, PlayObject, TrackMeta } from "../../../core/Atomic.js"; -import { AtomicStageConfig, StageConfig } from "../infrastructure/Transform.js"; +import { type ArtistCredit, isPlayObject, type ObjectPlayData, type PlayObject, type TrackMeta } from "../../../core/Atomic.js"; +import { type AtomicStageConfig, type StageConfig } from "../infrastructure/Transform.js"; import AbstractTransformer from "./AbstractTransformer.js"; //export type GenericAtomicStageConfig = diff --git a/src/backend/common/transforms/MusicbrainzTransformer.ts b/src/backend/common/transforms/MusicbrainzTransformer.ts index 49c92842..28e3b00e 100644 --- a/src/backend/common/transforms/MusicbrainzTransformer.ts +++ b/src/backend/common/transforms/MusicbrainzTransformer.ts @@ -1,14 +1,14 @@ -import { ArtistCredit, asMBReleasePrimaryGroupType, asMBReleaseSecondaryGroupType, asMBReleaseStatus, DEFAULT_MISSING_TYPES, isMBReleasePrimaryGroupType, LifecycleInput, MBReleaseGroupPrimaryType, MBReleaseGroupSecondaryType, MBReleaseStatus, MissingMbidType, PlayObject, TrackMeta, TransformerCommon, TransformOptions } from "../../../core/Atomic.js"; +import { type ArtistCredit, asMBReleasePrimaryGroupType, asMBReleaseSecondaryGroupType, asMBReleaseStatus, DEFAULT_MISSING_TYPES, isMBReleasePrimaryGroupType, type LifecycleInput, type MBReleaseGroupPrimaryType, type MBReleaseGroupSecondaryType, type MBReleaseStatus, type MissingMbidType, type PlayObject, type TrackMeta, type TransformerCommon, type TransformOptions } from "../../../core/Atomic.js"; import { isWhenCondition, testWhenConditions } from "../../utils/PlayTransformUtils.js"; -import { WebhookPayload } from "../infrastructure/config/health/webhooks.js"; -import { ExternalMetadataTerm, PlayTransformMetadataStage } from "../infrastructure/Transform.js"; +import { type WebhookPayload } from "../infrastructure/config/health/webhooks.js"; +import { type ExternalMetadataTerm, type PlayTransformMetadataStage } from "../infrastructure/Transform.js"; import AtomicPartsTransformer from "./AtomicPartsTransformer.js"; -import { TransformerOptions } from "./AbstractTransformer.js"; -import { ARTIST_WEIGHT, DELIMITERS, MUSICBRAINZ_URL, MusicbrainzApiConfigData, TITLE_WEIGHT } from "../infrastructure/Atomic.js"; +import { type TransformerOptions } from "./AbstractTransformer.js"; +import { ARTIST_WEIGHT, DELIMITERS, MUSICBRAINZ_URL, type MusicbrainzApiConfigData, TITLE_WEIGHT } from "../infrastructure/Atomic.js"; import { MaybeLogger } from '../MaybeLogger.js'; -import { childLogger, Logger } from "@foxxmd/logging"; -import { MusicbrainzApiClient, MusicbrainzApiConfig, recordingToPlay, UsingTypes } from "../vendor/musicbrainz/MusicbrainzApiClient.js"; -import { IRecordingList, IRecordingMatch, IRelease, MusicBrainzApi } from "musicbrainz-api"; +import { childLogger, type Logger } from "@foxxmd/logging"; +import { MusicbrainzApiClient, type MusicbrainzApiConfig, recordingToPlay, type UsingTypes } from "../vendor/musicbrainz/MusicbrainzApiClient.js"; +import { type IRecordingList, type IRecordingMatch, type IRelease, MusicBrainzApi } from "musicbrainz-api"; import { intersect, isDebugMode, missingMbidTypes, removeUndefinedKeys } from "../../utils.js"; import { SimpleError, SkipTransformStageError, StagePrerequisiteError, StageTransformError } from "../errors/MSErrors.js"; import { parseArrayFromMaybeString, scoreNormalizedStringsWeighted } from "../../utils/StringUtils.js"; diff --git a/src/backend/common/transforms/NativeTransformer.ts b/src/backend/common/transforms/NativeTransformer.ts index 34d81178..fa81204d 100644 --- a/src/backend/common/transforms/NativeTransformer.ts +++ b/src/backend/common/transforms/NativeTransformer.ts @@ -1,11 +1,11 @@ -import { ArtistCredit, PlayObject, TransformerCommon } from "../../../core/Atomic.js"; +import { type ArtistCredit, type PlayObject, type TransformerCommon } from "../../../core/Atomic.js"; import { isWhenCondition, testWhenConditions } from "../../utils/PlayTransformUtils.js"; -import { WebhookPayload } from "../infrastructure/config/health/webhooks.js"; -import { ExternalMetadataTerm, PlayTransformNativeStage, StageConfig } from "../infrastructure/Transform.js"; +import { type WebhookPayload } from "../infrastructure/config/health/webhooks.js"; +import { type ExternalMetadataTerm, type PlayTransformNativeStage, type StageConfig } from "../infrastructure/Transform.js"; import AtomicPartsTransformer from "./AtomicPartsTransformer.js"; import { parseArtistCredits, parseTrackCredits, uniqueNormalizedStrArr } from "../../utils/StringUtils.js"; import { parseRegexSingle, parseToRegexOrLiteralSearch } from "@foxxmd/regex-buddy-core"; -import { TransformerOptions } from "./AbstractTransformer.js"; +import { type TransformerOptions } from "./AbstractTransformer.js"; import { DELIMITERS_NO_AMP } from "../infrastructure/Atomic.js"; import { asArray } from "../../utils/DataUtils.js"; import { MaybeLogger } from '../MaybeLogger.js'; diff --git a/src/backend/common/transforms/TransformerManager.ts b/src/backend/common/transforms/TransformerManager.ts index bd3ef4b0..569b8eaa 100644 --- a/src/backend/common/transforms/TransformerManager.ts +++ b/src/backend/common/transforms/TransformerManager.ts @@ -1,13 +1,13 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import AbstractTransformer from "./AbstractTransformer.js"; -import { TransformerCommonConfig } from "../../../core/Atomic.js"; +import { type TransformerCommonConfig } from "../../../core/Atomic.js"; import UserTransformer from "./UserTransformer.js"; -import { StageConfig } from "../infrastructure/Transform.js"; -import { PlayObject } from "../../../core/Atomic.js"; +import { type StageConfig } from "../infrastructure/Transform.js"; +import { type PlayObject } from "../../../core/Atomic.js"; import { isStageTyped } from "../../utils/PlayTransformUtils.js"; import { MSCache } from "../Cache.js"; import NativeTransformer from "./NativeTransformer.js"; -import MusicbrainzTransformer, { configFromEnv, MusicbrainzTransformerConfig } from "./MusicbrainzTransformer.js"; +import MusicbrainzTransformer, { configFromEnv, type MusicbrainzTransformerConfig } from "./MusicbrainzTransformer.js"; import { AsyncLocalStorage } from 'node:async_hooks'; import { nanoid } from "nanoid"; import { SimpleError, StageTransformError } from "../errors/MSErrors.js"; diff --git a/src/backend/common/transforms/UserTransformer.ts b/src/backend/common/transforms/UserTransformer.ts index c16bbc76..cdc4ae4e 100644 --- a/src/backend/common/transforms/UserTransformer.ts +++ b/src/backend/common/transforms/UserTransformer.ts @@ -1,8 +1,8 @@ import { searchAndReplace } from "@foxxmd/regex-buddy-core"; -import { ArtistCredit, PlayObject } from "../../../core/Atomic.js"; +import { type ArtistCredit, type PlayObject } from "../../../core/Atomic.js"; import { configValToSearchReplace, isSearchAndReplaceTerm, isUserStage, testWhenConditions } from "../../utils/PlayTransformUtils.js"; -import { WebhookPayload } from "../infrastructure/config/health/webhooks.js"; -import { ConditionalSearchAndReplaceRegExp, PlayTransformUserStage, StageConfig } from "../infrastructure/Transform.js"; +import { type WebhookPayload } from "../infrastructure/config/health/webhooks.js"; +import { type ConditionalSearchAndReplaceRegExp, type PlayTransformUserStage, type StageConfig } from "../infrastructure/Transform.js"; import AtomicPartsTransformer from "./AtomicPartsTransformer.js"; export default class UserTransformer extends AtomicPartsTransformer { diff --git a/src/backend/common/vendor/AbstractApiClient.ts b/src/backend/common/vendor/AbstractApiClient.ts index f7dbdae1..2d21ce3a 100644 --- a/src/backend/common/vendor/AbstractApiClient.ts +++ b/src/backend/common/vendor/AbstractApiClient.ts @@ -1,7 +1,7 @@ -import { childLogger, Logger } from "@foxxmd/logging"; -import { PlayObject } from "../../../core/Atomic.js"; +import { childLogger, type Logger } from "@foxxmd/logging"; +import { type PlayObject } from "../../../core/Atomic.js"; import { capitalize } from "../../../core/StringUtils.js"; -import { AbstractApiOptions, FormatPlayObjectOptions } from "../infrastructure/Atomic.js"; +import { type AbstractApiOptions, type FormatPlayObjectOptions } from "../infrastructure/Atomic.js"; export default abstract class AbstractApiClient { name: string; diff --git a/src/backend/common/vendor/JRiverApiClient.ts b/src/backend/common/vendor/JRiverApiClient.ts index ffc73575..9d58a495 100644 --- a/src/backend/common/vendor/JRiverApiClient.ts +++ b/src/backend/common/vendor/JRiverApiClient.ts @@ -1,7 +1,7 @@ import request, { Request, Response } from 'superagent'; import xml2js from 'xml2js'; -import { AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER } from "../infrastructure/Atomic.js"; -import { JRiverData } from "../infrastructure/config/source/jriver.js"; +import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER } from "../infrastructure/Atomic.js"; +import { type JRiverData } from "../infrastructure/config/source/jriver.js"; import AbstractApiClient from "./AbstractApiClient.js"; const parser = new xml2js.Parser({'async': true}); @@ -120,7 +120,7 @@ export class JRiverApiClient extends AbstractApiClient { const resp = await req as Response; if (resp.text !== '') { const rawBody = await parser.parseStringPromise(resp.text); - resp.body = jriverResponseTransform(rawBody); + resp.body = jriverResponseTransform(rawBody); } return resp; } catch (e) { diff --git a/src/backend/common/vendor/KodiApiClient.ts b/src/backend/common/vendor/KodiApiClient.ts index 8b316eb1..e8569c32 100644 --- a/src/backend/common/vendor/KodiApiClient.ts +++ b/src/backend/common/vendor/KodiApiClient.ts @@ -2,10 +2,10 @@ import dayjs from "dayjs"; import { KodiClient } from 'kodi-api' import normalizeUrl from "normalize-url"; import { URL } from "url"; -import { PlayObject, PlayObjectMinimal } from "../../../core/Atomic.js"; -import { RecentlyPlayedOptions } from "../../sources/AbstractSource.js"; -import { AbstractApiOptions, FormatPlayObjectOptions } from "../infrastructure/Atomic.js"; -import { KodiData } from "../infrastructure/config/source/kodi.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../../core/Atomic.js"; +import { type RecentlyPlayedOptions } from "../../sources/AbstractSource.js"; +import { type AbstractApiOptions, type FormatPlayObjectOptions } from "../infrastructure/Atomic.js"; +import { type KodiData } from "../infrastructure/config/source/kodi.js"; import AbstractApiClient from "./AbstractApiClient.js"; import { baseFormatPlayObj } from "../../utils/PlayTransformUtils.js"; import { artistNamesToCredits } from "../../../core/StringUtils.js"; diff --git a/src/backend/common/vendor/LastfmApiClient.ts b/src/backend/common/vendor/LastfmApiClient.ts index b4974471..cbbebcb0 100644 --- a/src/backend/common/vendor/LastfmApiClient.ts +++ b/src/backend/common/vendor/LastfmApiClient.ts @@ -1,5 +1,5 @@ -import dayjs, { Dayjs, ManipulateType } from "dayjs"; -import { BrainzMeta, PlayObject, PlayObjectMinimal, ScrobbleActionResult, UnixTimestamp, URLData, Writeable } from "../../../core/Atomic.js"; +import dayjs, { Dayjs, type ManipulateType } from "dayjs"; +import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type UnixTimestamp, type URLData, type Writeable } from "../../../core/Atomic.js"; import { artistNamesToCredits, artistNameToCredit, nonEmptyStringOrDefault, splitByFirstFound } from "../../../core/StringUtils.js"; import { removeUndefinedKeys, sleep } from "../../utils.js"; import { writeFile } from '../../utils/FSUtils.js'; @@ -8,11 +8,11 @@ import { isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../../ut import { getScrobbleTsSOCDate } from "../../utils/TimeUtils.js"; import { getNodeNetworkException, isNodeNetworkException } from "../errors/NodeErrors.js"; import { UpstreamError } from "../errors/UpstreamError.js"; -import { AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, FormatPlayObjectOptions, InternalConfigOptional, PaginatedListensTimeRangeOptions, PaginatedTimeRangeListens, PaginatedTimeRangeListensResult } from "../infrastructure/Atomic.js"; -import { LastfmData } from "../infrastructure/config/client/lastfm.js"; +import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type InternalConfigOptional, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../infrastructure/Atomic.js"; +import { type LastfmData } from "../infrastructure/config/client/lastfm.js"; import AbstractApiClient from "./AbstractApiClient.js"; import { normalizeStr, parseArtistCredits } from "../../utils/StringUtils.js"; -import { LastFMUser, LastFMAuth, LastFMTrack, LastFMUserGetRecentTracksResponse, LastFMBooleanNumber, LastFMUpdateNowPlayingResponse, LastFMUserGetInfoResponse, LastFMUserGetRecentTracksParams } from 'lastfm-ts-api'; +import { LastFMUser, LastFMAuth, LastFMTrack, type LastFMUserGetRecentTracksResponse, type LastFMBooleanNumber, type LastFMUpdateNowPlayingResponse, type LastFMUserGetInfoResponse, type LastFMUserGetRecentTracksParams } from 'lastfm-ts-api'; import clone from 'clone'; import { IncomingMessage } from "http"; import { baseFormatPlayObj } from "../../utils/PlayTransformUtils.js"; diff --git a/src/backend/common/vendor/ListenbrainzApiClient.ts b/src/backend/common/vendor/ListenbrainzApiClient.ts index e9567828..1a7e3ed2 100644 --- a/src/backend/common/vendor/ListenbrainzApiClient.ts +++ b/src/backend/common/vendor/ListenbrainzApiClient.ts @@ -1,7 +1,7 @@ import { stringSameness } from '@foxxmd/string-sameness'; import dayjs from "dayjs"; import request, { Request, Response } from 'superagent'; -import { BrainzMeta, PlayObject, PlayObjectMinimal, ScrobbleActionResult, UnixTimestamp, URLData } from "../../../core/Atomic.js"; +import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type UnixTimestamp, type URLData } from "../../../core/Atomic.js"; import { artistNamesToCredits, combinePartsToString, slice } from "../../../core/StringUtils.js"; import { normalizeListenbrainzUrl, @@ -13,12 +13,12 @@ import { } from "../../utils/StringUtils.js"; import { findDelimiters } from "../../../core/StringUtils.js"; import { UpstreamError } from "../errors/UpstreamError.js"; -import { AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, DELIMITERS, FormatPlayObjectOptions, PagelessListensTimeRangeOptions, PagelessTimeRangeListens, PagelessTimeRangeListensResult } from "../infrastructure/Atomic.js"; -import { DEFAULT_ITEMS_PER_GET_LZ, ListenBrainzClientData, MAX_ITEMS_PER_GET_LZ } from "../infrastructure/config/client/listenbrainz.js"; +import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, DELIMITERS, type FormatPlayObjectOptions, type PagelessListensTimeRangeOptions, type PagelessTimeRangeListens, type PagelessTimeRangeListensResult } from "../infrastructure/Atomic.js"; +import { DEFAULT_ITEMS_PER_GET_LZ, type ListenBrainzClientData, MAX_ITEMS_PER_GET_LZ } from "../infrastructure/config/client/listenbrainz.js"; import AbstractApiClient from "./AbstractApiClient.js"; import { getBaseFromUrl, isPortReachableConnect, joinedUrl, normalizeWebAddress } from '../../utils/NetworkUtils.js'; import { removeUndefinedKeys, unique } from '../../utils.js'; -import { ListenPayload, ListenResponse, ListenType, SubmitPayload } from './listenbrainz/interfaces.js'; +import { type ListenPayload, type ListenResponse, type ListenType, type SubmitPayload } from './listenbrainz/interfaces.js'; import { baseFormatPlayObj } from '../../utils/PlayTransformUtils.js'; import { ScrobbleSubmitError, SimpleError } from '../errors/MSErrors.js'; import pRetry from 'p-retry'; diff --git a/src/backend/common/vendor/RockSkyApiClient.ts b/src/backend/common/vendor/RockSkyApiClient.ts index 557a8f49..06265523 100644 --- a/src/backend/common/vendor/RockSkyApiClient.ts +++ b/src/backend/common/vendor/RockSkyApiClient.ts @@ -1,25 +1,25 @@ import dayjs from "dayjs"; import request, { Request, Response } from 'superagent'; -import { PlayObject, PlayObjectMinimal, ScrobbleActionResult, URLData } from "../../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type URLData } from "../../../core/Atomic.js"; import { artistCreditsToNames, artistNamesToCredits, nonEmptyStringOrDefault } from "../../../core/StringUtils.js"; import { UpstreamError } from "../errors/UpstreamError.js"; -import { AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, FormatPlayObjectOptions } from "../infrastructure/Atomic.js"; -import { RockSkyClientData, RockSkyData, RockSkyOptions } from "../infrastructure/config/client/rocksky.js"; +import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions } from "../infrastructure/Atomic.js"; +import { type RockSkyClientData, type RockSkyData, type RockSkyOptions } from "../infrastructure/config/client/rocksky.js"; import AbstractApiClient from "./AbstractApiClient.js"; import { isPortReachableConnect, joinedUrl, normalizeWebAddress } from '../../utils/NetworkUtils.js'; import { unique } from '../../utils.js'; -import { ListenPayload, ListenResponse, ListenType, SubmitPayload } from './listenbrainz/interfaces.js'; +import { type ListenPayload, type ListenResponse, type ListenType, type SubmitPayload } from './listenbrainz/interfaces.js'; import { playToListenPayload } from './listenbrainz/lzUtils.js'; -import { RockskyScrobble } from './rocksky/interfaces.js'; -import { Handle } from "@atcute/lexicons"; +import { type RockskyScrobble } from './rocksky/interfaces.js'; +import { type Handle } from "@atcute/lexicons"; import { getATProtoIdentifier, identifierToAtProtoHandle } from './atproto/atUtils.js'; import { baseFormatPlayObj } from "../../utils/PlayTransformUtils.js"; import { ScrobbleSubmitError } from "../errors/MSErrors.js"; import { tryApiCall } from "../../utils/RequestUtils.js"; -import { CreateScrobbleInput, RockskyClient } from "@rocksky/sdk"; +import { type CreateScrobbleInput, RockskyClient } from "@rocksky/sdk"; import { getRoot } from "../../ioc.js"; import { MSCache } from "../Cache.js"; -import { HandleData } from "../infrastructure/config/client/atproto.js"; +import { type HandleData } from "../infrastructure/config/client/atproto.js"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; interface SubmitOptions { diff --git a/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts b/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts index 94e1cba0..f21df803 100644 --- a/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts +++ b/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts @@ -1,10 +1,10 @@ import dayjs from 'dayjs'; -import { AbstractApiOptions } from "../../infrastructure/Atomic.js"; -import { TealClientData } from "../../infrastructure/config/client/tealfm.js"; +import { type AbstractApiOptions } from "../../infrastructure/Atomic.js"; +import { type TealClientData } from "../../infrastructure/config/client/tealfm.js"; import { getATProtoIdentifier } from "./atUtils.js"; -import { ATProtoAppData, ATProtoUserIdentifierData } from "../../infrastructure/config/client/atproto.js"; +import { type ATProtoAppData, type ATProtoUserIdentifierData } from "../../infrastructure/config/client/atproto.js"; import { ATProtoAuthenticatedApiClient } from "./ATProtoAuthenticatedApiClient.js"; -import { PasswordSession, PasswordSessionData } from '@atcute/password-session'; +import { PasswordSession, type PasswordSessionData } from '@atcute/password-session'; import { Client, ClientResponseError, parseRateLimitHeaders } from "@atcute/client"; import { UpstreamError } from "../../errors/UpstreamError.js"; import { todayAwareFormat } from '../../../../core/TimeUtils.js'; diff --git a/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts b/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts index 7eb2f328..6dabca84 100644 --- a/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts +++ b/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts @@ -1,10 +1,10 @@ import { UpstreamError } from "../../errors/UpstreamError.js"; -import { HandleData } from "../../infrastructure/config/client/atproto.js"; +import { type HandleData } from "../../infrastructure/config/client/atproto.js"; import { AbstractATProtoApiClient } from "./AbstractATProtoApiClient.js"; import { getATProtoIdentifier, checkPds } from "./atUtils.js"; import { Client, simpleFetchHandler } from '@atcute/client'; import type {} from '@atcute/atproto'; -import { Nsid } from "@atcute/lexicons"; +import { type Nsid } from "@atcute/lexicons"; export class ATProtoUnauthenticatedApiClient extends AbstractATProtoApiClient { diff --git a/src/backend/common/vendor/atproto/AbstractATProtoApiClient.ts b/src/backend/common/vendor/atproto/AbstractATProtoApiClient.ts index b2863c2b..b1d8f03c 100644 --- a/src/backend/common/vendor/atproto/AbstractATProtoApiClient.ts +++ b/src/backend/common/vendor/atproto/AbstractATProtoApiClient.ts @@ -1,17 +1,17 @@ import { getRoot } from "../../../ioc.js"; -import { AbstractApiOptions } from "../../infrastructure/Atomic.js"; +import { type AbstractApiOptions } from "../../infrastructure/Atomic.js"; import AbstractApiClient from "../AbstractApiClient.js"; import { MSCache } from "../../Cache.js"; import { UpstreamError } from "../../errors/UpstreamError.js"; import { streamBodyProgress } from "../../../utils/NetworkUtils.js"; -import { ATProtoUserIdentifierData, HandleData } from "../../infrastructure/config/client/atproto.js"; +import { type ATProtoUserIdentifierData, type HandleData } from "../../infrastructure/config/client/atproto.js"; import { checkPds, isDID, identifierToAtProtoHandle, getATProtoIdentifier } from "./atUtils.js"; import { Client, ClientResponseError, isXRPCErrorPayload, parseRateLimitHeaders } from '@atcute/client'; import { ComAtprotoSyncGetRepo } from '@atcute/atproto'; -import { AtprotoDid } from "@atcute/lexicons/syntax"; +import { type AtprotoDid } from "@atcute/lexicons/syntax"; import { todayAwareFormat } from "../../../../core/TimeUtils.js"; import dayjs from "dayjs"; -import { Millisecond } from "../../../../core/Atomic.js"; +import { type Millisecond } from "../../../../core/Atomic.js"; export interface RateLimitInfo { limit: number diff --git a/src/backend/common/vendor/atproto/atUtils.ts b/src/backend/common/vendor/atproto/atUtils.ts index 12a0cbd4..c13795ef 100644 --- a/src/backend/common/vendor/atproto/atUtils.ts +++ b/src/backend/common/vendor/atproto/atUtils.ts @@ -1,9 +1,9 @@ -import { Handle } from "@atcute/lexicons"; -import { isHandle, AtprotoDid } from "@atcute/lexicons/syntax"; -import { Logger } from "@foxxmd/logging"; +import { type Handle } from "@atcute/lexicons"; +import { isHandle, type AtprotoDid } from "@atcute/lexicons/syntax"; +import { type Logger } from "@foxxmd/logging"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; import { loggerNoop, MaybeLogger } from '../../MaybeLogger.js'; -import { ATProtoUserIdentifierData, HandleData } from "../../infrastructure/config/client/atproto.js"; +import { type ATProtoUserIdentifierData, type HandleData } from "../../infrastructure/config/client/atproto.js"; import { Cacheable } from "cacheable"; import { CompositeDidDocumentResolver, diff --git a/src/backend/common/vendor/azuracast/AzuracastApiClient.ts b/src/backend/common/vendor/azuracast/AzuracastApiClient.ts index c6fd50c0..da273f3a 100644 --- a/src/backend/common/vendor/azuracast/AzuracastApiClient.ts +++ b/src/backend/common/vendor/azuracast/AzuracastApiClient.ts @@ -1,8 +1,8 @@ import { childLogger } from "@foxxmd/logging"; -import { URLData } from "../../../../core/Atomic.js"; +import { type URLData } from "../../../../core/Atomic.js"; import { joinedUrl, normalizeWSAddress } from "../../../utils/NetworkUtils.js"; -import { AbstractApiOptions } from "../../infrastructure/Atomic.js"; -import { AzuracastData, AzuraStationResponse } from "../../infrastructure/config/source/azuracast.js"; +import { type AbstractApiOptions } from "../../infrastructure/Atomic.js"; +import { type AzuracastData, type AzuraStationResponse } from "../../infrastructure/config/source/azuracast.js"; import AbstractApiClient from "../AbstractApiClient.js"; import { WS, CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' diff --git a/src/backend/common/vendor/chromecast/ChromecastClientUtils.ts b/src/backend/common/vendor/chromecast/ChromecastClientUtils.ts index fb3517ff..146ad2e6 100644 --- a/src/backend/common/vendor/chromecast/ChromecastClientUtils.ts +++ b/src/backend/common/vendor/chromecast/ChromecastClientUtils.ts @@ -1,7 +1,7 @@ import { Media, MediaController, Result } from "@foxxmd/chromecast-client"; -import { PlayObject } from "../../../../core/Atomic.js"; -import { REPORTED_PLAYER_STATUSES, ReportedPlayerStatus } from "../../infrastructure/Atomic.js"; -import { PlatformApplication, PlatformType } from "./interfaces.js"; +import { type PlayObject } from "../../../../core/Atomic.js"; +import { REPORTED_PLAYER_STATUSES, type ReportedPlayerStatus } from "../../infrastructure/Atomic.js"; +import { type PlatformApplication, type PlatformType } from "./interfaces.js"; import { hashObject } from "../../../utils/StringUtils.js"; export const chromePlayerStateToReported = (state: string): ReportedPlayerStatus => { diff --git a/src/backend/common/vendor/chromecast/interfaces.ts b/src/backend/common/vendor/chromecast/interfaces.ts index f2929989..23759a4f 100644 --- a/src/backend/common/vendor/chromecast/interfaces.ts +++ b/src/backend/common/vendor/chromecast/interfaces.ts @@ -1,7 +1,7 @@ import { createPlatform, MediaController } from "@foxxmd/chromecast-client"; -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import { Dayjs } from "dayjs"; -import { FormatPlayObjectOptions } from "../../infrastructure/Atomic.js"; +import { type FormatPlayObjectOptions } from "../../infrastructure/Atomic.js"; export type PlatformType = ReturnType; export interface PlatformApplication { diff --git a/src/backend/common/vendor/discord/DiscordAbstractClient.ts b/src/backend/common/vendor/discord/DiscordAbstractClient.ts index 6f5abc52..b9a5dc04 100644 --- a/src/backend/common/vendor/discord/DiscordAbstractClient.ts +++ b/src/backend/common/vendor/discord/DiscordAbstractClient.ts @@ -4,8 +4,8 @@ import { isDebugMode } from "../../../utils.js"; import { urlContainsKnownMediaDomain } from "../../../utils/RequestUtils.js"; import { MSCache } from "../../Cache.js"; import { isSuperAgentResponseError } from "../../errors/ErrorUtils.js"; -import { AbstractApiOptions, SourceData } from "../../infrastructure/Atomic.js"; -import { ActivityAssets, ARTWORK_PLACEHOLDER, DiscordStrongData, MS_ART } from "../../infrastructure/config/client/discord.js"; +import { type AbstractApiOptions, type SourceData } from "../../infrastructure/Atomic.js"; +import { type ActivityAssets, ARTWORK_PLACEHOLDER, type DiscordStrongData, MS_ART } from "../../infrastructure/config/client/discord.js"; import AbstractApiClient from "../AbstractApiClient.js"; import { CoverArtApiClient } from "../musicbrainz/CoverArtApiClient.js"; import EventEmitter from "events"; diff --git a/src/backend/common/vendor/discord/DiscordIPCClient.ts b/src/backend/common/vendor/discord/DiscordIPCClient.ts index 05b5f4b5..18798ee2 100644 --- a/src/backend/common/vendor/discord/DiscordIPCClient.ts +++ b/src/backend/common/vendor/discord/DiscordIPCClient.ts @@ -1,17 +1,17 @@ import { childLogger } from "@foxxmd/logging"; -import { AbstractApiOptions, SourceData } from "../../infrastructure/Atomic.js"; -import { ActivityData, DiscordIPCData, DiscordStrongData } from "../../infrastructure/config/client/discord.js"; +import { type AbstractApiOptions } from "../../infrastructure/Atomic.js"; +import { type ActivityData, type DiscordIPCData, type DiscordStrongData } from "../../infrastructure/config/client/discord.js"; import EventEmitter from "events"; import { getRoot } from "../../../ioc.js"; -import { Client, SetActivity } from "@xhayper/discord-rpc"; +import { Client, type SetActivity } from "@xhayper/discord-rpc"; import {realpathSync} from 'fs'; import {sep, join} from 'path'; -import { PathData } from "@xhayper/discord-rpc/dist/transport/IPC.js"; -import { removeUndefinedKeys, sleep } from "../../../utils.js"; +import { type PathData } from "@xhayper/discord-rpc/dist/transport/IPC.js"; +import { removeUndefinedKeys } from "../../../utils.js"; import { playStateToActivityData } from "./DiscordUtils.js"; import { DiscordAbstractClient } from "./DiscordAbstractClient.js"; import dayjs from "dayjs"; -import { isPlayObject, SourcePlayerObj } from "../../../../core/Atomic.js"; +import { isPlayObject, type SourcePlayerObj } from "../../../../core/Atomic.js"; import { mergeSimpleError, SimpleError } from "../../errors/MSErrors.js"; import { UpstreamError } from "../../errors/UpstreamError.js"; diff --git a/src/backend/common/vendor/discord/DiscordUtils.ts b/src/backend/common/vendor/discord/DiscordUtils.ts index a9ba5888..98d836e0 100644 --- a/src/backend/common/vendor/discord/DiscordUtils.ts +++ b/src/backend/common/vendor/discord/DiscordUtils.ts @@ -1,10 +1,10 @@ import dayjs from "dayjs"; -import { isPlayObject, PlayObject, SourcePlayerObj } from "../../../../core/Atomic.js"; -import { asPlayerStateData, SourceData } from "../../infrastructure/Atomic.js"; -import { GatewayActivity, GatewayOpcodes, PresenceUpdateStatus } from "discord.js"; +import { isPlayObject, type PlayObject, type SourcePlayerObj } from "../../../../core/Atomic.js"; +import { asPlayerStateData, type SourceData } from "../../infrastructure/Atomic.js"; +import { GatewayOpcodes, PresenceUpdateStatus } from "discord.js"; import { capitalize } from "../../../../core/StringUtils.js"; import { urlToMusicService } from '../listenbrainz/lzUtils.js'; -import { ACTIVITY_TYPE, ActivityData, ActivityTypes, DiscordData, DiscordStrongData, ActivityTypeString as MSActivityType, StatusType } from "../../infrastructure/config/client/discord.js"; +import { ACTIVITY_TYPE, type ActivityData, ActivityTypes, type DiscordData, type DiscordStrongData, type ActivityTypeString as MSActivityType, type StatusType } from "../../infrastructure/config/client/discord.js"; import { parseBool, removeUndefinedKeys } from "../../../utils.js"; import { parseArrayFromMaybeString, parseBoolOrArrayFromMaybeString } from "../../../utils/StringUtils.js"; diff --git a/src/backend/common/vendor/discord/DiscordWSClient.ts b/src/backend/common/vendor/discord/DiscordWSClient.ts index 0ac5b671..9e376af0 100644 --- a/src/backend/common/vendor/discord/DiscordWSClient.ts +++ b/src/backend/common/vendor/discord/DiscordWSClient.ts @@ -1,14 +1,15 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import { WS } from 'iso-websocket' -import { DiscordStrongData, StatusType, DiscordWSData, ActivityData, ACTIVITY_TYPE } from "../../infrastructure/config/client/discord.js"; -import { _DataPayload, _NonDispatchPayload, APIUser, GatewayActivity, GatewayActivityAssets, GatewayCloseCodes, GatewayDispatchEvents, GatewayHeartbeatRequest, GatewayHelloData, GatewayIdentify, GatewayInvalidSessionData, GatewayOpcodes, GatewayPresenceUpdateData, GatewayReadyDispatchData, GatewayResumeData, GatewayUpdatePresence, PresenceUpdateStatus } from "discord.js"; +import { type DiscordStrongData, type StatusType, type DiscordWSData, type ActivityData, ACTIVITY_TYPE } from "../../infrastructure/config/client/discord.js"; +import type { _DataPayload, _NonDispatchPayload, APIUser, GatewayActivity, GatewayActivityAssets, GatewayHeartbeatRequest, GatewayHelloData, GatewayIdentify, GatewayInvalidSessionData, GatewayPresenceUpdateData, GatewayReadyDispatchData, GatewayResumeData, GatewayUpdatePresence } from "discord.js"; +import { GatewayCloseCodes, GatewayDispatchEvents, GatewayOpcodes, PresenceUpdateStatus } from "discord.js" import { isDebugMode, removeUndefinedKeys, sleep } from "../../../utils.js"; import pEvent from 'p-event'; import EventEmitter from "events"; import { randomInt } from "crypto"; import request from 'superagent'; -import { AbstractApiOptions,SourceData } from "../../infrastructure/Atomic.js"; -import { isPlayObject, SourcePlayerObj } from "../../../../core/Atomic.js"; +import { type AbstractApiOptions } from "../../infrastructure/Atomic.js"; +import { isPlayObject, type SourcePlayerObj } from "../../../../core/Atomic.js"; import dayjs, { Dayjs } from "dayjs"; import { getRoot } from "../../../ioc.js"; import { formatWebsocketClose, isCloseEvent, isErrorEvent, wsReadyStateToStr } from "../../../utils/NetworkUtils.js"; diff --git a/src/backend/common/vendor/koito/KoitoApiClient.ts b/src/backend/common/vendor/koito/KoitoApiClient.ts index 6c4f1770..4010661e 100644 --- a/src/backend/common/vendor/koito/KoitoApiClient.ts +++ b/src/backend/common/vendor/koito/KoitoApiClient.ts @@ -1,14 +1,14 @@ import dayjs from "dayjs"; -import { PlayObject, PlayObjectMinimal, ScrobbleActionResult, URLData } from "../../../../core/Atomic.js"; -import { AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, PaginatedListensTimeRangeOptions, PaginatedTimeRangeListens, PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.js"; -import { GetListensOptions, KoitoData, ListenObjectResponse, ListensResponse } from "../../infrastructure/config/client/koito.js"; +import { type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type URLData } from "../../../../core/Atomic.js"; +import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.js"; +import { type GetListensOptions, type KoitoData, type ListenObjectResponse, type ListensResponse } from "../../infrastructure/config/client/koito.js"; import AbstractApiClient from "../AbstractApiClient.js"; import { getBaseFromUrl, isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../../../utils/NetworkUtils.js"; import request, { Request, Response } from 'superagent'; import { UpstreamError } from "../../errors/UpstreamError.js"; import { playToListenPayload } from '../listenbrainz/lzUtils.js'; -import { SubmitPayload } from '../listenbrainz/interfaces.js'; -import { ListenType } from '../listenbrainz/interfaces.js'; +import { type SubmitPayload } from '../listenbrainz/interfaces.js'; +import { type ListenType } from '../listenbrainz/interfaces.js'; import { baseFormatPlayObj } from "../../../utils/PlayTransformUtils.js"; import { ScrobbleSubmitError } from "../../errors/MSErrors.js"; import { tryApiCall } from "../../../utils/RequestUtils.js"; diff --git a/src/backend/common/vendor/listenbrainz/lzUtils.ts b/src/backend/common/vendor/listenbrainz/lzUtils.ts index 00bdc6ea..e82d828a 100644 --- a/src/backend/common/vendor/listenbrainz/lzUtils.ts +++ b/src/backend/common/vendor/listenbrainz/lzUtils.ts @@ -1,8 +1,8 @@ -import { PlayObject } from "../../../../core/Atomic.js"; +import { type PlayObject } from "../../../../core/Atomic.js"; import { isEmptyArrayOrUndefined, removeUndefinedKeys } from "../../../utils.js"; import { getScrobbleTsSOCDate } from "../../../utils/TimeUtils.js"; -import { SubmitOptions } from "../ListenbrainzApiClient.js"; -import { ListenPayload, MinimumTrack, SubmitListenAdditionalTrackInfo, SubmitPayload } from "./interfaces.js"; +import { type SubmitOptions } from "../ListenbrainzApiClient.js"; +import { type ListenPayload, type MinimumTrack, type SubmitListenAdditionalTrackInfo, type SubmitPayload } from "./interfaces.js"; import {version as appVersion } from '../../../version.js'; import { artistCreditsToNames, artistCreditToName } from "../../../../core/StringUtils.js"; diff --git a/src/backend/common/vendor/maloja/MalojaApiClient.ts b/src/backend/common/vendor/maloja/MalojaApiClient.ts index 9b391b7c..d6b7559e 100644 --- a/src/backend/common/vendor/maloja/MalojaApiClient.ts +++ b/src/backend/common/vendor/maloja/MalojaApiClient.ts @@ -1,16 +1,16 @@ -import dayjs, { ManipulateType } from 'dayjs'; +import dayjs, { type ManipulateType } from 'dayjs'; import request, { Response, Request } from 'superagent'; import compareVersions from "compare-versions"; import AbstractApiClient from "../AbstractApiClient.js"; import { getBaseFromUrl, isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../../../utils/NetworkUtils.js"; -import { MalojaData } from "../../infrastructure/config/client/maloja.js"; -import { PlayObject, PlayObjectMinimal, ScrobbleActionResult, URLData } from "../../../../core/Atomic.js"; -import { AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, FormatPlayObjectOptions, PaginatedListensTimeRangeOptions, PaginatedTimeRangeListens, PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.js"; +import { type MalojaData } from "../../infrastructure/config/client/maloja.js"; +import { type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type URLData } from "../../../../core/Atomic.js"; +import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.js"; import { isNodeNetworkException } from "../../errors/NodeErrors.js"; import { isSuperAgentResponseError } from "../../errors/ErrorUtils.js"; import { getNonEmptyVal, parseRetryAfterSecsFromObj, removeUndefinedKeys, sleep } from "../../../utils.js"; import { UpstreamError } from "../../errors/UpstreamError.js"; -import { getMalojaResponseError, isMalojaAPIErrorBody, MalojaResponseV3CommonData, MalojaScrobbleData, MalojaScrobbleRequestData, MalojaScrobbleV3RequestData, MalojaScrobbleV3ResponseData, MalojaScrobbleWarning } from "./interfaces.js"; +import { getMalojaResponseError, isMalojaAPIErrorBody, type MalojaResponseV3CommonData, type MalojaScrobbleData, type MalojaScrobbleRequestData, type MalojaScrobbleV3RequestData, type MalojaScrobbleV3ResponseData, type MalojaScrobbleWarning } from "./interfaces.js"; import { getScrobbleTsSOCDate, getScrobbleTsSOCDateWithContext } from '../../../utils/TimeUtils.js'; import { artistCreditsToNames, artistNamesToCredits, buildTrackString } from '../../../../core/StringUtils.js'; import { baseFormatPlayObj } from '../../../utils/PlayTransformUtils.js'; diff --git a/src/backend/common/vendor/maloja/interfaces.ts b/src/backend/common/vendor/maloja/interfaces.ts index 87ba7167..3ca76f68 100644 --- a/src/backend/common/vendor/maloja/interfaces.ts +++ b/src/backend/common/vendor/maloja/interfaces.ts @@ -1,4 +1,4 @@ -import { ResponseError } from "superagent"; +import { type ResponseError } from "superagent"; import { findCauseByFunc } from "../../../utils/ErrorUtils.js"; import { isSuperAgentResponseError } from "../../errors/ErrorUtils.js"; diff --git a/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts b/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts index f229d4ec..53cec62f 100644 --- a/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts +++ b/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts @@ -1,15 +1,15 @@ import { Cacheable } from "cacheable"; -import { AbstractApiOptions } from "../../infrastructure/Atomic.js"; +import { type AbstractApiOptions } from "../../infrastructure/Atomic.js"; import AbstractApiClient from "../AbstractApiClient.js"; -import request, { ResponseError } from 'superagent'; +import request, { type ResponseError } from 'superagent'; import { isSuperAgentResponseError } from "../../errors/ErrorUtils.js"; import { UpstreamError } from "../../errors/UpstreamError.js"; import { initMemoryCache } from "../../Cache.js"; import { joinedUrl } from "../../../utils/NetworkUtils.js"; import { hasNodeNetworkException } from "../../errors/NodeErrors.js"; import { sleep } from "../../../utils.js"; -import { RequestRetryOptions } from "../../infrastructure/config/common.js"; -import { RetryContext } from "p-retry"; +import { type RequestRetryOptions } from "../../infrastructure/config/common.js"; +import { type RetryContext } from "p-retry"; import { NO_RETRY_HTTP_STATUS, tryApiCall } from "../../../utils/RequestUtils.js"; export type ThumbSize = 250 | 500 | 1200; diff --git a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts index c2b47da6..4f9a5e4c 100644 --- a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts +++ b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts @@ -1,10 +1,10 @@ import { Response } from 'superagent'; -import { ArtistCredit, PlayObject, PlayObjectMinimal, URLData } from "../../../../core/Atomic.js"; +import { type ArtistCredit, type PlayObject, type PlayObjectMinimal, type URLData } from "../../../../core/Atomic.js"; import { UpstreamError } from "../../errors/UpstreamError.js"; -import { AbstractApiOptions, FormatPlayObjectOptions, MUSICBRAINZ_URL, MusicbrainzApiConfigData } from "../../infrastructure/Atomic.js"; +import { type AbstractApiOptions, type FormatPlayObjectOptions, MUSICBRAINZ_URL, type MusicbrainzApiConfigData } from "../../infrastructure/Atomic.js"; import AbstractApiClient from "../AbstractApiClient.js"; import { isPortReachableConnect, normalizeWebAddress } from '../../../utils/NetworkUtils.js'; -import { MusicBrainzApi, IRecording, IRecordingList, IRelease } from 'musicbrainz-api'; +import { MusicBrainzApi, type IRecording, type IRecordingList, type IRelease } from 'musicbrainz-api'; import { difference, isDebugMode, isEmptyArrayOrUndefined, sleep } from "../../../utils.js"; import {SequentialRoundRobin} from 'round-robin-js'; import { Cacheable } from "cacheable"; @@ -19,7 +19,7 @@ import { stripIndents } from "common-tags"; import { getNodeNetworkException, hasNodeNetworkException, isNodeNetworkException } from '../../errors/NodeErrors.js'; import { SimpleError } from '../../errors/MSErrors.js'; import { baseFormatPlayObj } from '../../../utils/PlayTransformUtils.js'; -import { IRecordingMSList } from '../../transforms/MusicbrainzTransformer.js'; +import { type IRecordingMSList } from '../../transforms/MusicbrainzTransformer.js'; import dayjs, { Dayjs } from 'dayjs'; import { artistCreditsToNames } from '../../../../core/StringUtils.js'; diff --git a/src/backend/common/vendor/rocksky/interfaces.ts b/src/backend/common/vendor/rocksky/interfaces.ts index 730de870..057bec17 100644 --- a/src/backend/common/vendor/rocksky/interfaces.ts +++ b/src/backend/common/vendor/rocksky/interfaces.ts @@ -1,3 +1,3 @@ -import { ScrobbleViewBasic } from "@rocksky/sdk"; +import { type ScrobbleViewBasic } from "@rocksky/sdk"; export type RockskyScrobble = ScrobbleViewBasic; \ No newline at end of file diff --git a/src/backend/common/vendor/teal/TealApiClient.ts b/src/backend/common/vendor/teal/TealApiClient.ts index f0265f8f..89d7bc4e 100644 --- a/src/backend/common/vendor/teal/TealApiClient.ts +++ b/src/backend/common/vendor/teal/TealApiClient.ts @@ -1,11 +1,11 @@ -import dayjs, { Dayjs, ManipulateType } from "dayjs"; -import { PlayObject, PlayObjectMinimal, BrainzMeta, MBID, ScrobbleActionResult, UnixTimestamp } from "../../../../core/Atomic.js"; +import dayjs, { Dayjs, type ManipulateType } from "dayjs"; +import { type PlayObject, type PlayObjectMinimal, type BrainzMeta, type MBID, type ScrobbleActionResult, type UnixTimestamp } from "../../../../core/Atomic.js"; import { getRoot } from "../../../ioc.js"; import { removeUndefinedKeys } from "../../../utils.js"; import { baseFormatPlayObj } from "../../../utils/PlayTransformUtils.js"; import { MSCache } from "../../Cache.js"; -import { AbstractApiOptions, PagelessListensTimeRangeOptions, PagelessTimeRangeListens, PagelessTimeRangeListensResult } from "../../infrastructure/Atomic.js"; -import { ListRecord, RecordOptions, TealClientData } from "../../infrastructure/config/client/tealfm.js"; +import { type AbstractApiOptions, type PagelessListensTimeRangeOptions, type PagelessTimeRangeListens, type PagelessTimeRangeListensResult } from "../../infrastructure/Atomic.js"; +import { type ListRecord, type RecordOptions, type TealClientData } from "../../infrastructure/config/client/tealfm.js"; import AbstractApiClient from "../AbstractApiClient.js"; import { ATProtoAppApiClient } from "../atproto/ATProtoAppApiClient.js"; import { FmTealAlphaActorStatus, FmTealAlphaFeedPlay } from "./lexicons/index.js"; diff --git a/src/backend/index.ts b/src/backend/index.ts index 8b2443b0..def40189 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -1,5 +1,5 @@ import 'dotenv/config'; -import { childLogger, LogDataPretty, Logger as FoxLogger } from "@foxxmd/logging"; +import { childLogger, type LogDataPretty, type Logger as FoxLogger } from "@foxxmd/logging"; import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration.js'; import isBetween from 'dayjs/plugin/isBetween.js'; @@ -11,7 +11,7 @@ import utc from 'dayjs/plugin/utc.js'; import * as path from "path"; import { SimpleIntervalJob, ToadScheduler } from "toad-scheduler"; import { projectDir } from "./common/index.js"; -import { AIOConfig } from "./common/infrastructure/config/aioConfig.js"; +import { type AIOConfig } from "./common/infrastructure/config/aioConfig.js"; import { appLogger, initLogger as getInitLogger } from "./common/logging.js"; import { getRoot } from "./ioc.js"; import { parseVersion } from "./version.js"; @@ -21,7 +21,7 @@ import { readJson } from './utils/DataUtils.js'; import ScrobbleClients from './scrobblers/ScrobbleClients.js'; import ScrobbleSources from './sources/ScrobbleSources.js'; import { Notifiers } from './notifier/Notifiers.js'; -import { DbConcrete, getMigratedDb } from './common/database/drizzle/drizzleUtils.js'; +import { type DbConcrete, getMigratedDb } from './common/database/drizzle/drizzleUtils.js'; import { getDbPath } from './common/database/Database.js'; import { createRetentionCleanupTask } from './tasks/retentionCleanup.js'; import { parseUserConfig } from './common/Cache.js'; diff --git a/src/backend/ioc.ts b/src/backend/ioc.ts index bbe098f3..cd5d8822 100644 --- a/src/backend/ioc.ts +++ b/src/backend/ioc.ts @@ -1,4 +1,4 @@ -import { Logger, loggerDebug, LogOptions } from "@foxxmd/logging"; +import { type Logger, loggerDebug, type LogOptions } from "@foxxmd/logging"; import { EventEmitter } from "events"; import { createContainer } from "iti"; import path from "path"; @@ -7,15 +7,15 @@ import { WildcardEmitter } from "./common/WildcardEmitter.js"; import { generateBaseURL } from "./utils/NetworkUtils.js"; import { PassThrough } from "stream"; -import { CacheConfigOptions, MusicBrainzSingletonMap } from "./common/infrastructure/Atomic.js"; +import { type CacheConfigOptions, type MusicBrainzSingletonMap } from "./common/infrastructure/Atomic.js"; import { MSCache } from "./common/Cache.js"; import TransformerManager from "./common/transforms/TransformerManager.js"; -import { TransformerCommonConfig } from "../core/Atomic.js"; +import { type TransformerCommonConfig } from "../core/Atomic.js"; import prom, { Counter, Gauge } from 'prom-client'; import { CoverArtApiClient } from "./common/vendor/musicbrainz/CoverArtApiClient.js"; import { version } from "./version.js"; -import { StaggerOptions } from "./utils/AsyncUtils.js"; -import { DbConcrete } from "./common/database/drizzle/drizzleUtils.js"; +import { type StaggerOptions } from "./utils/AsyncUtils.js"; +import { type DbConcrete } from "./common/database/drizzle/drizzleUtils.js"; let root: ReturnType; export interface RootOptions { diff --git a/src/backend/notifier/AbstractWebhookNotifier.ts b/src/backend/notifier/AbstractWebhookNotifier.ts index 089b1cdb..2d9eff62 100644 --- a/src/backend/notifier/AbstractWebhookNotifier.ts +++ b/src/backend/notifier/AbstractWebhookNotifier.ts @@ -1,9 +1,9 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import { - AppriseConfig, - GotifyConfig, - NtfyConfig, - WebhookPayload + type AppriseConfig, + type GotifyConfig, + type NtfyConfig, + type WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; export abstract class AbstractWebhookNotifier { diff --git a/src/backend/notifier/AppriseWebhookNotifier.ts b/src/backend/notifier/AppriseWebhookNotifier.ts index e0a1f250..754dd8c7 100644 --- a/src/backend/notifier/AppriseWebhookNotifier.ts +++ b/src/backend/notifier/AppriseWebhookNotifier.ts @@ -1,17 +1,17 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import request, { Request } from "superagent"; import { truncateStringToLength } from "../../core/StringUtils.js"; import { isSuperAgentResponseError } from "../common/errors/ErrorUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; import { UpstreamError } from "../common/errors/UpstreamError.js"; import { - AppriseConfig, - PrioritiesConfig, - Priority, - WebhookPayload + type AppriseConfig, + type PrioritiesConfig, + type Priority, + type WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; import { AbstractWebhookNotifier } from "./AbstractWebhookNotifier.js"; -import { URLData } from "../../core/Atomic.js"; +import { type URLData } from "../../core/Atomic.js"; import { isPortReachable, joinedUrl, normalizeWebAddress } from "../utils/NetworkUtils.js"; import { isDebugMode } from "../utils.js"; diff --git a/src/backend/notifier/GotifyWebhookNotifier.ts b/src/backend/notifier/GotifyWebhookNotifier.ts index 8702043a..0f7f39c1 100644 --- a/src/backend/notifier/GotifyWebhookNotifier.ts +++ b/src/backend/notifier/GotifyWebhookNotifier.ts @@ -1,11 +1,11 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import { HTTPError } from "got"; import { gotify } from 'gotify'; import request from 'superagent'; -import { GotifyConfig, PrioritiesConfig, WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; +import { type GotifyConfig, type PrioritiesConfig, type WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; import { AbstractWebhookNotifier } from "./AbstractWebhookNotifier.js"; import { isPortReachable, normalizeWebAddress } from "../utils/NetworkUtils.js"; -import { URLData } from "../../core/Atomic.js"; +import { type URLData } from "../../core/Atomic.js"; export class GotifyWebhookNotifier extends AbstractWebhookNotifier { diff --git a/src/backend/notifier/Notifiers.ts b/src/backend/notifier/Notifiers.ts index 4222cb45..05086f8e 100644 --- a/src/backend/notifier/Notifiers.ts +++ b/src/backend/notifier/Notifiers.ts @@ -1,11 +1,11 @@ -import { childLogger, Logger } from '@foxxmd/logging'; +import { childLogger, type Logger } from '@foxxmd/logging'; import { EventEmitter } from "events"; import { - AppriseConfig, - GotifyConfig, - NtfyConfig, - WebhookConfig, - WebhookPayload + type AppriseConfig, + type GotifyConfig, + type NtfyConfig, + type WebhookConfig, + type WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; import { AbstractWebhookNotifier } from "./AbstractWebhookNotifier.js"; import { AppriseWebhookNotifier } from "./AppriseWebhookNotifier.js"; diff --git a/src/backend/notifier/NtfyWebhookNotifier.ts b/src/backend/notifier/NtfyWebhookNotifier.ts index 1e7a9a74..5eecdafd 100644 --- a/src/backend/notifier/NtfyWebhookNotifier.ts +++ b/src/backend/notifier/NtfyWebhookNotifier.ts @@ -1,10 +1,10 @@ -import { Logger } from "@foxxmd/logging"; -import { Config, publish } from 'ntfy'; +import { type Logger } from "@foxxmd/logging"; +import { type Config, publish } from 'ntfy'; import request from "superagent"; import {redactString} from '@foxxmd/redact-string'; -import { NtfyConfig, PrioritiesConfig, WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; +import { type NtfyConfig, type PrioritiesConfig, type WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; import { AbstractWebhookNotifier } from "./AbstractWebhookNotifier.js"; -import { URLData } from "../../core/Atomic.js"; +import { type URLData } from "../../core/Atomic.js"; import { isPortReachable, normalizeWebAddress } from "../utils/NetworkUtils.js"; export class NtfyWebhookNotifier extends AbstractWebhookNotifier { diff --git a/src/backend/scrobblers/AbstractHistoricalScrobbleClient.ts b/src/backend/scrobblers/AbstractHistoricalScrobbleClient.ts index 2d0050dc..3a0d87d1 100644 --- a/src/backend/scrobblers/AbstractHistoricalScrobbleClient.ts +++ b/src/backend/scrobblers/AbstractHistoricalScrobbleClient.ts @@ -1,14 +1,14 @@ import dayjs, { Dayjs } from "dayjs"; import { sortByNewestDate } from "../../core/PlayUtils.js"; import AbstractScrobbleClient from "./AbstractScrobbleClient.js"; -import { ComponentMigrationSelect } from "../common/database/drizzle/drizzleTypes.js"; -import { ErrorIsh } from "../../core/ErrorUtils.js"; -import { DrizzlePlayHistoricalRepository, playToRepositoryCreatePlayHistoricalOpts, RepositoryCreatePlayHistoricalOpts } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; +import { type ComponentMigrationSelect } from "../common/database/drizzle/drizzleTypes.js"; +import { type ErrorIsh } from "../../core/ErrorUtils.js"; +import { DrizzlePlayHistoricalRepository, playToRepositoryCreatePlayHistoricalOpts, type RepositoryCreatePlayHistoricalOpts } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; import { spawn, isAbortError } from 'abort-controller-x'; import { generateLoggableAbortReason } from "../common/errors/MSErrors.js"; -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import { buildTrackString } from "../../core/StringUtils.js"; -import { PlayObject } from "../../core/Atomic.js"; +import { type PlayObject } from "../../core/Atomic.js"; export default abstract class AbstractHistoricalScrobbleClient extends AbstractScrobbleClient { diff --git a/src/backend/scrobblers/AbstractScrobbleClient.ts b/src/backend/scrobblers/AbstractScrobbleClient.ts index cc4033f6..fd2cab94 100644 --- a/src/backend/scrobblers/AbstractScrobbleClient.ts +++ b/src/backend/scrobblers/AbstractScrobbleClient.ts @@ -1,25 +1,25 @@ -import { childLogger, Logger, LogLevel } from "@foxxmd/logging"; +import { childLogger, type Logger, type LogLevel } from "@foxxmd/logging"; import dayjs, { Dayjs } from "dayjs"; -import { Duration } from "dayjs/plugin/duration.js"; +import { type Duration } from "dayjs/plugin/duration.js"; import EventEmitter from "events"; import { nanoid } from "nanoid"; -import { MarkOptional, MarkRequired } from "ts-essentials"; +import type { MarkOptional } from "ts-essentials"; import { - DeadLetterScrobble, - NowPlayingUpdateThreshold, - PlayObject, - PlayObjectMinimal, - QueuedScrobble, ScrobbleActionResult, PlayMatchResult, SourcePlayerObj, TA_DURING, + type DeadLetterScrobble, + type NowPlayingUpdateThreshold, + type PlayObject, + type PlayObjectMinimal, + type QueuedScrobble, type ScrobbleActionResult, type PlayMatchResult, type SourcePlayerObj, TA_DURING, TA_FUZZY, - TrackStringOptions, + type TrackStringOptions, TA_EXACT, SOURCE_SOT, - ErrorLike, + type ErrorLike, CLIENT_INGRESS_QUEUE, CLIENT_DEAD_QUEUE, - PlayOriginal, - PlayLifecycle, - SourcePlayerJson, + type PlayOriginal, + type PlayLifecycle, + type SourcePlayerJson, QUEUE_STATUS_COMPLETED } from "../../core/Atomic.js"; import { artistNamesToCredits, buildTrackString, capitalize, truncateStringToLength } from "../../core/StringUtils.js"; @@ -27,22 +27,22 @@ import AbstractComponent from "../common/AbstractComponent.js"; import { hasUpstreamError } from "../common/errors/UpstreamError.js"; import { ARTIST_WEIGHT, - Authenticatable, + type Authenticatable, CALCULATED_PLAYER_STATUSES, DEFAULT_RETRY_MULTIPLIER, DUP_SCORE_THRESHOLD, - FormatPlayObjectOptions, - PaginatedTimeRangeOptions, + type FormatPlayObjectOptions, + type PaginatedTimeRangeOptions, REFRESH_STALE_DEFAULT, - ReportedPlayerStatus, - ScrobbledPlayObject, - SourceIdentifier, + type ReportedPlayerStatus, + type ScrobbledPlayObject, + type SourceIdentifier, TIME_WEIGHT, - TimeRangeListensFetcher, + type TimeRangeListensFetcher, TITLE_WEIGHT, } from "../common/infrastructure/Atomic.js"; -import { ClientType } from '../common/infrastructure/config/client/clients.js'; -import { CommonClientConfig, NowPlayingOptions, UpstreamRefreshOptions } from "../common/infrastructure/config/client/index.js"; +import { type ClientType } from '../common/infrastructure/config/client/clients.js'; +import { type CommonClientConfig, type NowPlayingOptions, type UpstreamRefreshOptions } from "../common/infrastructure/config/client/index.js"; import { TRANSFORM_HOOK } from "../common/infrastructure/Transform.js"; import { Notifiers } from "../notifier/Notifiers.js"; import { @@ -56,7 +56,7 @@ import { sortByOldestPlayDate, } from "../utils.js"; import { findCauseByReference } from "../utils/ErrorUtils.js"; -import { ErrorIsh, messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.js"; +import { type ErrorIsh, messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.js"; import { messageWithCauses } from "../../core/ErrorUtils.js"; import { comparePlayTemporally, @@ -66,12 +66,12 @@ import { temporalPlayComparisonSummary, } from "../utils/TimeUtils.js"; import { todayAwareFormat } from "../../core/TimeUtils.js"; -import { WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; +import { type WebhookPayload } from "../common/infrastructure/config/health/webhooks.js"; import { AsyncTask, SimpleIntervalJob, Task, ToadScheduler } from "toad-scheduler"; import { getRoot } from "../ioc.js"; -import { findAsyncSequential, staggerMapper, StaggerOptions } from "../utils/AsyncUtils.js"; +import { findAsyncSequential, staggerMapper, type StaggerOptions } from "../utils/AsyncUtils.js"; import pMap, { pMapIterable } from "p-map"; -import { comparePlayArtistsNormalized, comparePlayTracksNormalized, existingScrobble, ExistingScrobbleOpts } from "../utils/PlayComparisonUtils.js"; +import { comparePlayArtistsNormalized, comparePlayTracksNormalized, existingScrobble, type ExistingScrobbleOpts } from "../utils/PlayComparisonUtils.js"; import { statefulInvariantTransform } from "../../core/PlayUtils.js"; import { normalizeStr } from "../utils/StringUtils.js"; import prom, { Counter, Gauge } from 'prom-client'; @@ -79,14 +79,14 @@ import { generateLoggableAbortReason, ScrobbleSubmitError, SimpleError } from ". import {isErrorLike, serializeError} from 'serialize-error'; import { DEFAULT_NEW_PADDING, groupPlaysToTimeRanges } from "../utils/ListenFetchUtils.js"; import { spawn, catchAbortError, isAbortError, rethrowAbortError, delay, forever, AbortError, throwIfAborted } from 'abort-controller-x'; -import { DrizzlePlayRepository, playToRepositoryCreatePlayOpts, QueryPlaysOpts, WithPlayRelation } from "../common/database/drizzle/repositories/PlayRepository.js"; -import { ComponentMigrationNew, PlaySelect, PlaySelectWithQueueStates, QueueStateNew, QueueStateSelect } from "../common/database/drizzle/drizzleTypes.js"; +import { DrizzlePlayRepository, playToRepositoryCreatePlayOpts, type QueryPlaysOpts, type WithPlayRelation } from "../common/database/drizzle/repositories/PlayRepository.js"; +import { type ComponentMigrationNew, type PlaySelect, type PlaySelectWithQueueStates, type QueueStateNew, type QueueStateSelect } from "../common/database/drizzle/drizzleTypes.js"; import { asPlay } from "../../core/PlayMarshalUtils.js"; import { DrizzleQueueRepository } from "../common/database/drizzle/repositories/QueueRepository.js"; import { GenericRepository } from "../common/database/drizzle/repositories/BaseRepository.js"; import assert from "node:assert"; -import { COMPONENT_STATE, ComponentClientApi, ComponentClientApiJson, PlayApiCommonDetailed } from "../../core/Api.js"; -import { ComponentState } from "react"; +import { COMPONENT_STATE, type ComponentClientApi, type ComponentClientApiJson, type PlayApiCommonDetailed } from "../../core/Api.js"; +import { type ComponentState } from "react"; type PlatformMappedPlays = Map; type NowPlayingQueue = Map; diff --git a/src/backend/scrobblers/DiscordScrobbler.ts b/src/backend/scrobblers/DiscordScrobbler.ts index 774363f3..e2728b41 100644 --- a/src/backend/scrobblers/DiscordScrobbler.ts +++ b/src/backend/scrobblers/DiscordScrobbler.ts @@ -1,11 +1,11 @@ -import { Logger, LogLevel } from "@foxxmd/logging"; +import { type Logger, type LogLevel } from "@foxxmd/logging"; import EventEmitter from "events"; -import { PlayMatchResult, PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; -import { CALCULATED_PLAYER_STATUSES, FormatPlayObjectOptions, REPORTED_PLAYER_STATUSES, ReportedPlayerStatus, SINGLE_USER_PLATFORM_ID_STR, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type PlayMatchResult, type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; +import { CALCULATED_PLAYER_STATUSES, type FormatPlayObjectOptions, REPORTED_PLAYER_STATUSES, type ReportedPlayerStatus, SINGLE_USER_PLATFORM_ID_STR, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; import { Notifiers } from "../notifier/Notifiers.js"; import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration, shouldClearNPStatus } from "./AbstractScrobbleClient.js"; -import { DiscordClientConfig, DiscordStrongData } from "../common/infrastructure/config/client/discord.js"; +import { type DiscordClientConfig, type DiscordStrongData } from "../common/infrastructure/config/client/discord.js"; import { DiscordWSClient } from "../common/vendor/discord/DiscordWSClient.js"; import { configToStrong } from "../common/vendor/discord/DiscordUtils.js"; import { DiscordIPCClient } from "../common/vendor/discord/DiscordIPCClient.js"; diff --git a/src/backend/scrobblers/KoitoScrobbler.ts b/src/backend/scrobblers/KoitoScrobbler.ts index ccfa6a70..b98c3d90 100644 --- a/src/backend/scrobblers/KoitoScrobbler.ts +++ b/src/backend/scrobblers/KoitoScrobbler.ts @@ -1,15 +1,15 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import EventEmitter from "events"; -import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; +import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; import { buildTrackString, capitalize } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type FormatPlayObjectOptions, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.js'; import { Notifiers } from "../notifier/Notifiers.js"; import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration } from "./AbstractScrobbleClient.js"; import { isDebugMode } from "../utils.js"; -import { KoitoClientConfig } from "../common/infrastructure/config/client/koito.js"; +import { type KoitoClientConfig } from "../common/infrastructure/config/client/koito.js"; import { KoitoApiClient, listenObjectResponseToPlay } from "../common/vendor/koito/KoitoApiClient.js"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.js"; diff --git a/src/backend/scrobblers/LastfmScrobbler.ts b/src/backend/scrobblers/LastfmScrobbler.ts index 11e8f798..b84a751b 100644 --- a/src/backend/scrobblers/LastfmScrobbler.ts +++ b/src/backend/scrobblers/LastfmScrobbler.ts @@ -1,11 +1,11 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import dayjs, { Dayjs } from "dayjs"; import EventEmitter from "events"; -import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; +import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; import { buildTrackString, capitalize } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, InternalConfigOptional, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; -import { LastfmClientConfig } from "../common/infrastructure/config/client/lastfm.js"; +import { type FormatPlayObjectOptions, type InternalConfigOptional, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type LastfmClientConfig } from "../common/infrastructure/config/client/lastfm.js"; import LastfmApiClient, { LastFMIgnoredScrobble, playToClientPayload, formatPlayObj } from "../common/vendor/LastfmApiClient.js"; import { Notifiers } from "../notifier/Notifiers.js"; import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration, playerInNPPlayingOnlyState } from "./AbstractScrobbleClient.js"; diff --git a/src/backend/scrobblers/LibrefmScrobbler.ts b/src/backend/scrobblers/LibrefmScrobbler.ts index c3b247f5..a6f24024 100644 --- a/src/backend/scrobblers/LibrefmScrobbler.ts +++ b/src/backend/scrobblers/LibrefmScrobbler.ts @@ -1,11 +1,11 @@ import EventEmitter from "events"; -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import LastfmScrobbler from "./LastfmScrobbler.js"; import { Notifiers } from "../notifier/Notifiers.js"; -import { LibrefmClientConfig } from "../common/infrastructure/config/client/librefm.js"; +import { type LibrefmClientConfig } from "../common/infrastructure/config/client/librefm.js"; import { formatPlayObj, LIBREFM_HOST, LIBREFM_PATH } from "../common/vendor/LastfmApiClient.js"; -import { LastfmClientConfig, LastfmData } from "../common/infrastructure/config/client/lastfm.js"; -import { FormatPlayObjectOptions, InternalConfigOptional } from "../common/infrastructure/Atomic.js"; +import { type LastfmClientConfig, type LastfmData } from "../common/infrastructure/config/client/lastfm.js"; +import { type FormatPlayObjectOptions, type InternalConfigOptional } from "../common/infrastructure/Atomic.js"; export default class LibrefmScrobbler extends LastfmScrobbler { diff --git a/src/backend/scrobblers/ListenbrainzScrobbler.ts b/src/backend/scrobblers/ListenbrainzScrobbler.ts index 4ca28fb0..e3d051d4 100644 --- a/src/backend/scrobblers/ListenbrainzScrobbler.ts +++ b/src/backend/scrobblers/ListenbrainzScrobbler.ts @@ -1,15 +1,15 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import dayjs, { Dayjs } from "dayjs"; import EventEmitter from "events"; -import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; +import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; import { buildTrackString, capitalize } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; import { hasUpstreamError, UpstreamError } from "../common/errors/UpstreamError.js"; -import { FormatPlayObjectOptions, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; -import { DEFAULT_MS_ITEMS_PER_GET_LZ, ListenBrainzClientConfig } from "../common/infrastructure/config/client/listenbrainz.js"; +import { type FormatPlayObjectOptions, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { DEFAULT_MS_ITEMS_PER_GET_LZ, type ListenBrainzClientConfig } from "../common/infrastructure/config/client/listenbrainz.js"; import { ListenbrainzApiClient } from "../common/vendor/ListenbrainzApiClient.js"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.js'; -import { ListenPayload } from '../common/vendor/listenbrainz/interfaces.js'; +import { type ListenPayload } from '../common/vendor/listenbrainz/interfaces.js'; import { Notifiers } from "../notifier/Notifiers.js"; import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration, playerInNPPlayingOnlyState } from "./AbstractScrobbleClient.js"; diff --git a/src/backend/scrobblers/MalojaScrobbler.ts b/src/backend/scrobblers/MalojaScrobbler.ts index 7de50d52..a182a5a4 100644 --- a/src/backend/scrobblers/MalojaScrobbler.ts +++ b/src/backend/scrobblers/MalojaScrobbler.ts @@ -1,13 +1,13 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import EventEmitter from "events"; import normalizeUrl from "normalize-url"; -import { PlayObject } from "../../core/Atomic.js"; +import { type PlayObject } from "../../core/Atomic.js"; import { buildTrackString, capitalize } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; -import { MalojaClientConfig } from "../common/infrastructure/config/client/maloja.js"; +import { type FormatPlayObjectOptions, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type MalojaClientConfig } from "../common/infrastructure/config/client/maloja.js"; import { - MalojaScrobbleRequestData, + type MalojaScrobbleRequestData, } from "../common/vendor/maloja/interfaces.js"; import { Notifiers } from "../notifier/Notifiers.js"; import AbstractScrobbleClient from "./AbstractScrobbleClient.js"; diff --git a/src/backend/scrobblers/RockskyScrobbler.ts b/src/backend/scrobblers/RockskyScrobbler.ts index ba730744..1bfeaecb 100644 --- a/src/backend/scrobblers/RockskyScrobbler.ts +++ b/src/backend/scrobblers/RockskyScrobbler.ts @@ -1,17 +1,17 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import EventEmitter from "events"; -import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; +import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; import { buildTrackString, capitalize } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, InternalConfigOptional } from "../common/infrastructure/Atomic.js"; +import { type FormatPlayObjectOptions, type InternalConfigOptional } from "../common/infrastructure/Atomic.js"; import { ListenbrainzApiClient } from "../common/vendor/ListenbrainzApiClient.js"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.js'; -import { ListenPayload } from '../common/vendor/listenbrainz/interfaces.js'; +import { type ListenPayload } from '../common/vendor/listenbrainz/interfaces.js'; import { Notifiers } from "../notifier/Notifiers.js"; import { durationToHuman, isDebugMode } from "../utils.js"; -import { RockSkyApiClient, rockskyScrobbleToPlay, SubmitResponse } from "../common/vendor/RockSkyApiClient.js"; -import { RockSkyClientConfig } from "../common/infrastructure/config/client/rocksky.js"; +import { RockSkyApiClient, rockskyScrobbleToPlay, type SubmitResponse } from "../common/vendor/RockSkyApiClient.js"; +import { type RockSkyClientConfig } from "../common/infrastructure/config/client/rocksky.js"; import { ScrobbleSubmitError } from "../common/errors/MSErrors.js"; import AbstractHistoricalScrobbleClient from "./AbstractHistoricalScrobbleClient.js"; import { fromStream } from '@atcute/repo'; @@ -21,7 +21,7 @@ import path from 'path'; import dayjs from "dayjs"; import { Readable } from 'stream'; import { ATProtoUnauthenticatedApiClient } from "../common/vendor/atproto/ATProtoUnauthenticatedApiClient.js"; -import { playToRepositoryCreatePlayHistoricalOpts, RepositoryCreatePlayHistoricalOpts } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; +import { playToRepositoryCreatePlayHistoricalOpts, type RepositoryCreatePlayHistoricalOpts } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; import { isAbortError } from "abort-controller-x"; export default class RockskyScrobbler extends AbstractHistoricalScrobbleClient { diff --git a/src/backend/scrobblers/ScrobbleClients.ts b/src/backend/scrobblers/ScrobbleClients.ts index 1a2b552f..195175b2 100644 --- a/src/backend/scrobblers/ScrobbleClients.ts +++ b/src/backend/scrobblers/ScrobbleClients.ts @@ -1,28 +1,28 @@ /* eslint-disable no-case-declarations */ -import { childLogger, Logger } from '@foxxmd/logging'; +import { childLogger, type Logger } from '@foxxmd/logging'; import dayjs, { Dayjs } from "dayjs"; -import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; -import { ConfigMeta, InternalConfig, InternalConfigOptional, isClientType, SourceIdentifier } from "../common/infrastructure/Atomic.js"; -import { clientTypes, ClientType } from '../common/infrastructure/config/client/clients.js'; -import { AIOConfig } from "../common/infrastructure/config/aioConfig.js"; -import { ClientAIOConfig, ClientConfig } from "../common/infrastructure/config/client/clients.js"; -import { LastfmClientConfig, LastfmData } from "../common/infrastructure/config/client/lastfm.js"; -import { ListenBrainzClientConfig, ListenBrainzData } from "../common/infrastructure/config/client/listenbrainz.js"; -import { MalojaClientConfig, MalojaData } from "../common/infrastructure/config/client/maloja.js"; +import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; +import { type ConfigMeta, type InternalConfig, type InternalConfigOptional, isClientType, type SourceIdentifier } from "../common/infrastructure/Atomic.js"; +import { clientTypes, type ClientType } from '../common/infrastructure/config/client/clients.js'; +import { type AIOConfig } from "../common/infrastructure/config/aioConfig.js"; +import { type ClientAIOConfig, type ClientConfig } from "../common/infrastructure/config/client/clients.js"; +import { type LastfmClientConfig, type LastfmData } from "../common/infrastructure/config/client/lastfm.js"; +import { type ListenBrainzClientConfig, type ListenBrainzData } from "../common/infrastructure/config/client/listenbrainz.js"; +import { type MalojaClientConfig, type MalojaData } from "../common/infrastructure/config/client/maloja.js"; import { WildcardEmitter } from "../common/WildcardEmitter.js"; import { Notifiers } from "../notifier/Notifiers.js"; import { isDebugMode, nonEmptyObj, parseBool, removeUndefinedKeys } from "../utils.js"; import { getCommonComponentEnvConfig, readJson } from '../utils/DataUtils.js'; import { validateJson } from "../utils/ValidationUtils.js"; import AbstractScrobbleClient from "./AbstractScrobbleClient.js"; -import { KoitoClientConfig, KoitoData } from '../common/infrastructure/config/client/koito.js'; -import { TealClientConfig, TealData } from '../common/infrastructure/config/client/tealfm.js'; -import { RockSkyClientConfig, RockSkyData } from '../common/infrastructure/config/client/rocksky.js'; -import { CommonClientOptions } from '../common/infrastructure/config/client/index.js'; -import { ExternalMetadataTerm, PlayTransformHooks } from '../common/infrastructure/Transform.js'; -import { LibrefmClientConfig, LibrefmData } from '../common/infrastructure/config/client/librefm.js'; +import { type KoitoClientConfig, type KoitoData } from '../common/infrastructure/config/client/koito.js'; +import { type TealClientConfig, type TealData } from '../common/infrastructure/config/client/tealfm.js'; +import { type RockSkyClientConfig, type RockSkyData } from '../common/infrastructure/config/client/rocksky.js'; +import { type CommonClientOptions } from '../common/infrastructure/config/client/index.js'; +import { type ExternalMetadataTerm, type PlayTransformHooks } from '../common/infrastructure/Transform.js'; +import { type LibrefmClientConfig, type LibrefmData } from '../common/infrastructure/config/client/librefm.js'; import clone from 'clone'; -import { DiscordClientConfig, DiscordData } from '../common/infrastructure/config/client/discord.js'; +import { type DiscordClientConfig, type DiscordData } from '../common/infrastructure/config/client/discord.js'; type groupedNamedConfigs = {[key: string]: ParsedConfig[]}; diff --git a/src/backend/scrobblers/TealfmScrobbler.ts b/src/backend/scrobblers/TealfmScrobbler.ts index 9c49b06a..900ebe14 100644 --- a/src/backend/scrobblers/TealfmScrobbler.ts +++ b/src/backend/scrobblers/TealfmScrobbler.ts @@ -1,19 +1,19 @@ -import { childLogger, Logger, LogLevel } from "@foxxmd/logging"; +import { childLogger, type Logger, type LogLevel } from "@foxxmd/logging"; import EventEmitter from "events"; import fsPromise from 'node:fs/promises'; import fs from 'node:fs'; import path from 'path'; import { Readable } from 'stream'; -import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; +import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.js"; import { buildTrackString, capitalize } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, CALCULATED_PLAYER_STATUSES, ReportedPlayerStatus, InternalConfigOptional } from "../common/infrastructure/Atomic.js"; +import { type FormatPlayObjectOptions, CALCULATED_PLAYER_STATUSES, type ReportedPlayerStatus, type InternalConfigOptional } from "../common/infrastructure/Atomic.js"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.js'; import { Notifiers } from "../notifier/Notifiers.js"; import { nowPlayingUpdateByPlayDuration, shouldClearNPStatus } from "./AbstractScrobbleClient.js"; -import { TealClientConfig } from "../common/infrastructure/config/client/tealfm.js"; +import { type TealClientConfig } from "../common/infrastructure/config/client/tealfm.js"; import { ATProtoAppApiClient } from "../common/vendor/atproto/ATProtoAppApiClient.js"; import { playToRecord, TealApiClient } from "../common/vendor/teal/TealApiClient.js"; import { playToStatusRecord } from "../common/vendor/teal/TealApiClient.js"; @@ -23,7 +23,7 @@ import dayjs, { Dayjs } from "dayjs"; import { durationToHuman, isDebugMode } from "../utils.js"; import AbstractHistoricalScrobbleClient from "./AbstractHistoricalScrobbleClient.js"; import { fromStream } from '@atcute/repo'; -import { playToRepositoryCreatePlayHistoricalOpts, RepositoryCreatePlayHistoricalOpts } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; +import { playToRepositoryCreatePlayHistoricalOpts, type RepositoryCreatePlayHistoricalOpts } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; import { isAbortError } from "abort-controller-x"; import { FmTealAlphaFeedPlay } from "../common/vendor/teal/lexicons/index.js"; diff --git a/src/backend/server/api.ts b/src/backend/server/api.ts index ebc9d785..9ad89e98 100644 --- a/src/backend/server/api.ts +++ b/src/backend/server/api.ts @@ -1,5 +1,5 @@ -import { LogDataPretty, Logger, LogLevel } from "@foxxmd/logging"; -import { Express } from 'express'; +import { type LogDataPretty, type Logger, type LogLevel } from "@foxxmd/logging"; +import { type Express } from 'express'; import bsseDef from 'better-sse'; import bodyParser from "body-parser"; import { FixedSizeList } from 'fixed-size-list'; @@ -7,20 +7,20 @@ import { PassThrough } from "node:stream"; import { Transform } from "stream"; import { CLIENT_DEAD_QUEUE, - ClientStatusData, - DeadLetterScrobble, - LeveledLogData, - LogOutputConfig, + type ClientStatusData, + type DeadLetterScrobble, + type LeveledLogData, + type LogOutputConfig, PLAY_CLIENT_STATE, PLAY_SOURCE_STATE, - PlayObject, + type PlayObject, SOURCE_SOT, - SOURCE_SOT_TYPES, - SourcePlayerJson, - SourceStatusData, + type SOURCE_SOT_TYPES, + type SourcePlayerJson, + type SourceStatusData, } from "../../core/Atomic.js"; import { capitalize } from "../../core/StringUtils.js"; -import { ExpressHandler } from "../common/infrastructure/Atomic.js"; +import { type ExpressHandler } from "../common/infrastructure/Atomic.js"; import { getRoot } from "../ioc.js"; import AbstractScrobbleClient from "../scrobblers/AbstractScrobbleClient.js"; import AbstractSource from "../sources/AbstractSource.js"; @@ -31,17 +31,17 @@ import { setupAuthRoutes } from "./auth.js"; import { setupDeezerRoutes } from "./deezerRoutes.js"; import {setupLZEndpointRoutes} from "./endpointListenbrainzRoutes.js"; import {setupLastfmEndpointRoutes} from "./endpointLastfmRoutes.js"; -import { ClientAwareRequest, ComponentAwareRequest, makeClientCheckMiddle, makeClientNextMiddle, makeComponentMiddle, makeSourceCheckMiddle, makeSourceNextMiddle, SourceAwareRequest } from "./middleware.js"; +import { type ClientAwareRequest, type ComponentAwareRequest, makeClientCheckMiddle, makeClientNextMiddle, makeComponentMiddle, makeSourceCheckMiddle, makeSourceNextMiddle, type SourceAwareRequest } from "./middleware.js"; import { setupWebscrobblerRoutes } from "./webscrobblerRoutes.js"; import ScrobbleSources from "../sources/ScrobbleSources.js"; import ScrobbleClients from "../scrobblers/ScrobbleClients.js"; import prom from 'prom-client'; import { SimpleError } from "../common/errors/MSErrors.js"; -import { DrizzlePlayRepository, QueryPlaysOpts, QueryPlaysOptsJson } from "../common/database/drizzle/repositories/PlayRepository.js"; +import { DrizzlePlayRepository, type QueryPlaysOpts, type QueryPlaysOptsJson } from "../common/database/drizzle/repositories/PlayRepository.js"; import { playSelectToDeadScrobble } from "../common/database/drizzle/entityUtils.js"; import AbstractHistoricalScrobbleClient from "../scrobblers/AbstractHistoricalScrobbleClient.js"; import { DrizzlePlayHistoricalRepository } from "../common/database/drizzle/repositories/PlayHistoricalRepository.js"; -import { ComponentClientApi, ComponentClientApiJson, ComponentSourceApi, ComponentSourceApiJson } from "../../core/Api.js"; +import { type ComponentClientApi, type ComponentClientApiJson, type ComponentSourceApi, type ComponentSourceApiJson } from "../../core/Api.js"; import { asDayjsHydratedObject } from "../../core/DataUtils.js"; import { Dayjs } from "dayjs"; import { asSerializablePlaySelect } from "../../core/PlayMarshalUtils.js"; diff --git a/src/backend/server/auth.ts b/src/backend/server/auth.ts index be3cc035..ecea09db 100644 --- a/src/backend/server/auth.ts +++ b/src/backend/server/auth.ts @@ -1,7 +1,7 @@ -import { Express } from 'express'; -import { Logger } from "@foxxmd/logging"; +import { type Express } from 'express'; +import { type Logger } from "@foxxmd/logging"; import passport from "passport"; -import { ExpressHandler } from "../common/infrastructure/Atomic.js"; +import { type ExpressHandler } from "../common/infrastructure/Atomic.js"; import LastfmScrobbler from "../scrobblers/LastfmScrobbler.js"; import ScrobbleClients from "../scrobblers/ScrobbleClients.js"; import LastfmSource from "../sources/LastfmSource.js"; diff --git a/src/backend/server/deezerRoutes.ts b/src/backend/server/deezerRoutes.ts index a5c3d452..3aaa3b90 100644 --- a/src/backend/server/deezerRoutes.ts +++ b/src/backend/server/deezerRoutes.ts @@ -1,5 +1,5 @@ -import { Express } from 'express'; -import { Logger } from "@foxxmd/logging"; +import { type Express } from 'express'; +import { type Logger } from "@foxxmd/logging"; import passport from "passport"; import DeezerSource from "../sources/DeezerSource.js"; import ScrobbleSources from "../sources/ScrobbleSources.js"; diff --git a/src/backend/server/endpointLastfmRoutes.ts b/src/backend/server/endpointLastfmRoutes.ts index a13b1bb5..7119dd4e 100644 --- a/src/backend/server/endpointLastfmRoutes.ts +++ b/src/backend/server/endpointLastfmRoutes.ts @@ -1,12 +1,12 @@ /* eslint-disable prefer-arrow-functions/prefer-arrow-functions */ -import { Express } from 'express'; -import { childLogger, Logger } from "@foxxmd/logging"; +import { type Express } from 'express'; +import { childLogger, type Logger } from "@foxxmd/logging"; import bodyParser from "body-parser"; import ScrobbleSources from "../sources/ScrobbleSources.js"; import { nonEmptyBody } from "./middleware.js"; import { LFMEndpointNotifier } from "../sources/ingressNotifiers/LFMEndpointNotifier.js"; import { EndpointLastfmSource, playStateFromRequest, parseDisplayIdentifiersFromRequest } from "../sources/EndpointLastfmSource.js"; -import { LastFMScrobbleRequestPayload } from "../common/vendor/LastfmApiClient.js"; +import { type LastFMScrobbleRequestPayload } from "../common/vendor/LastfmApiClient.js"; export const setupLastfmEndpointRoutes = (app: Express, parentLogger: Logger, scrobbleSources: ScrobbleSources) => { diff --git a/src/backend/server/endpointListenbrainzRoutes.ts b/src/backend/server/endpointListenbrainzRoutes.ts index 061cc49a..90ffc0de 100644 --- a/src/backend/server/endpointListenbrainzRoutes.ts +++ b/src/backend/server/endpointListenbrainzRoutes.ts @@ -1,13 +1,13 @@ /* eslint-disable prefer-arrow-functions/prefer-arrow-functions */ -import { Express } from 'express'; -import { childLogger, Logger } from "@foxxmd/logging"; +import { type Express } from 'express'; +import { childLogger, type Logger } from "@foxxmd/logging"; import bodyParser from "body-parser"; import { EndpointListenbrainzSource, playStateFromRequest, parseDisplayIdentifiersFromRequest } from "../sources/EndpointListenbrainzSource.js"; import { LZEndpointNotifier } from "../sources/ingressNotifiers/LZEndpointNotifier.js"; import ScrobbleSources from "../sources/ScrobbleSources.js"; import { nonEmptyBody } from "./middleware.js"; import { isDebugMode } from "../utils.js"; -import { PlayingNowPayload } from '../common/vendor/listenbrainz/interfaces.js'; +import { type PlayingNowPayload } from '../common/vendor/listenbrainz/interfaces.js'; import ScrobbleClients from '../scrobblers/ScrobbleClients.js'; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.js'; import { stringToDeterministicNumber } from '../utils/StringUtils.js'; diff --git a/src/backend/server/index.ts b/src/backend/server/index.ts index 95938925..6c951414 100644 --- a/src/backend/server/index.ts +++ b/src/backend/server/index.ts @@ -1,5 +1,5 @@ import express, { Router } from 'express'; -import { childLogger, LogDataPretty, Logger } from "@foxxmd/logging"; +import { childLogger, type LogDataPretty, type Logger } from "@foxxmd/logging"; import bodyParser from 'body-parser'; import { stripIndents } from "common-tags"; import session from 'express-session'; diff --git a/src/backend/server/middleware.ts b/src/backend/server/middleware.ts index 3bf856c1..ed760363 100644 --- a/src/backend/server/middleware.ts +++ b/src/backend/server/middleware.ts @@ -1,8 +1,8 @@ -import { Logger } from "@foxxmd/logging"; -import { ExpressHandler } from "../common/infrastructure/Atomic.js"; +import { type Logger } from "@foxxmd/logging"; +import { type ExpressHandler } from "../common/infrastructure/Atomic.js"; import ScrobbleClients from "../scrobblers/ScrobbleClients.js"; import ScrobbleSources from "../sources/ScrobbleSources.js"; -import { Request, Response, NextFunction } from "express"; +import { type Request, type Response, type NextFunction } from "express"; import AbstractSource from "../sources/AbstractSource.js"; import AbstractScrobbleClient from "../scrobblers/AbstractScrobbleClient.js"; diff --git a/src/backend/server/webscrobblerRoutes.ts b/src/backend/server/webscrobblerRoutes.ts index ad6e7667..60870dd3 100644 --- a/src/backend/server/webscrobblerRoutes.ts +++ b/src/backend/server/webscrobblerRoutes.ts @@ -1,5 +1,5 @@ -import { Express } from 'express'; -import { childLogger, Logger } from "@foxxmd/logging"; +import { type Express } from 'express'; +import { childLogger, type Logger } from "@foxxmd/logging"; import bodyParser from "body-parser"; import cors from 'cors'; import path from "path"; diff --git a/src/backend/sources/AbstractSource.ts b/src/backend/sources/AbstractSource.ts index 1874dad2..2f905425 100644 --- a/src/backend/sources/AbstractSource.ts +++ b/src/backend/sources/AbstractSource.ts @@ -1,25 +1,25 @@ -import { childLogger, LogDataPretty, LogLevel } from '@foxxmd/logging'; +import { childLogger, type LogDataPretty, type LogLevel } from '@foxxmd/logging'; import dayjs, { Dayjs } from "dayjs"; import { EventEmitter } from "events"; import { FixedSizeList } from "fixed-size-list"; -import { JsonPlayObject, PlayMatchResult, PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type JsonPlayObject, type PlayMatchResult, type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { buildTrackString, capitalize, truncateStringToLength } from "../../core/StringUtils.js"; import AbstractComponent from "../common/AbstractComponent.js"; import { - Authenticatable, + type Authenticatable, DEFAULT_POLLING_INTERVAL, DEFAULT_POLLING_MAX_INTERVAL, DEFAULT_RETRY_MULTIPLIER, - DeviceId, - GroupedFixedPlays, - InternalConfig, + type DeviceId, + type GroupedFixedPlays, + type InternalConfig, NO_USER, - PlayPlatformId, - PlayUserId, - ProgressAwarePlayObject, + type PlayPlatformId, + type PlayUserId, + type ProgressAwarePlayObject, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; -import { SourceType, SourceConfig } from '../common/infrastructure/config/source/sources.js'; +import { type SourceType, type SourceConfig } from '../common/infrastructure/config/source/sources.js'; import { TRANSFORM_HOOK } from "../common/infrastructure/Transform.js"; import TupleMap from "../common/TupleMap.js"; import { @@ -37,21 +37,21 @@ import { timeToHumanTimestamp } from "../../core/TimeUtils.js"; import { todayAwareFormat } from "../../core/TimeUtils.js"; import { getRoot } from '../ioc.js'; import { componentFileLogger } from '../common/logging.js'; -import { WebhookPayload } from '../common/infrastructure/config/health/webhooks.js';; +import { type WebhookPayload } from '../common/infrastructure/config/health/webhooks.js';; import { messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.js"; -import { existingScrobble, ExistingScrobbleOpts } from '../utils/PlayComparisonUtils.js'; -import { findAsync, staggerMapper, StaggerOptions } from '../utils/AsyncUtils.js'; +import { existingScrobble, type ExistingScrobbleOpts } from '../utils/PlayComparisonUtils.js'; +import { findAsync, staggerMapper, type StaggerOptions } from '../utils/AsyncUtils.js'; import pMap, {pMapIterable} from 'p-map'; import prom, { Counter, Gauge } from 'prom-client'; import { normalizeStr } from '../utils/StringUtils.js'; import { spawn, catchAbortError, isAbortError, rethrowAbortError, delay, forever, AbortError, throwIfAborted } from 'abort-controller-x'; import { AbortedError, generateLoggableAbortReason } from '../common/errors/MSErrors.js'; -import { DrizzlePlayRepository, playToRepositoryCreatePlayOpts, QueryPlaysOpts, RequestPlayQuery, WithPlayRelation } from '../common/database/drizzle/repositories/PlayRepository.js'; +import { DrizzlePlayRepository, playToRepositoryCreatePlayOpts, type QueryPlaysOpts, type RequestPlayQuery, type WithPlayRelation } from '../common/database/drizzle/repositories/PlayRepository.js'; import { asPlay } from '../../core/PlayMarshalUtils.js'; import { AsyncTask, SimpleIntervalJob, ToadScheduler } from 'toad-scheduler'; -import { ComponentMinimalSelect } from '../common/database/drizzle/drizzleTypes.js'; -import { COMPONENT_STATE, ComponentSourceApi, ComponentSourceApiJson, ComponentState, PlayApiCommonDetailed } from '../../core/Api.js'; -import { PaginatedResponse } from '../common/database/drizzle/repositories/BaseRepository.js'; +import { type ComponentMinimalSelect } from '../common/database/drizzle/drizzleTypes.js'; +import { COMPONENT_STATE, type ComponentSourceApi, type ComponentSourceApiJson, type ComponentState, type PlayApiCommonDetailed } from '../../core/Api.js'; +import { type PaginatedResponse } from '../common/database/drizzle/repositories/BaseRepository.js'; export interface RecentlyPlayedOptions { limit?: number diff --git a/src/backend/sources/AzuracastSource.ts b/src/backend/sources/AzuracastSource.ts index 4c3bdd95..f5b6194e 100644 --- a/src/backend/sources/AzuracastSource.ts +++ b/src/backend/sources/AzuracastSource.ts @@ -1,20 +1,20 @@ import MemorySource from "./MemorySource.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; -import { childLogger, Logger } from "@foxxmd/logging"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; +import { childLogger, type Logger } from "@foxxmd/logging"; import { EventEmitter } from "events"; import { WS, CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' import pEvent from 'p-event'; -import { PlayObject, PlayObjectMinimal, URLData } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.js"; import { UpstreamError } from "../common/errors/UpstreamError.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, - PlayPlatformId, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, + type PlayPlatformId, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; -import { AzuracastSourceConfig, AzuraNowPlayingResponse, AzuraStationResponse } from "../common/infrastructure/config/source/azuracast.js"; +import { type AzuracastSourceConfig, type AzuraNowPlayingResponse, type AzuraStationResponse } from "../common/infrastructure/config/source/azuracast.js"; import { isPortReachable, normalizeWSAddress } from "../utils/NetworkUtils.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { artistNamesToCredits } from "../../core/StringUtils.js"; diff --git a/src/backend/sources/ChromecastSource.ts b/src/backend/sources/ChromecastSource.ts index ae927447..f467cf2e 100644 --- a/src/backend/sources/ChromecastSource.ts +++ b/src/backend/sources/ChromecastSource.ts @@ -1,22 +1,22 @@ import { createPlatform, Media, MediaController, PersistentClient } from "@foxxmd/chromecast-client"; import { ContextualValidationError } from "@foxxmd/chromecast-client/dist/cjs/src/utils.js"; -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import { Client as CastClient } from 'castv2'; import dayjs from "dayjs"; import { EventEmitter } from "events"; import e from "express"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { artistNamesToCredits, buildTrackString } from "../../core/StringUtils.js"; import { NETWORK_ERROR_FAILURE_CODES } from "../common/errors/NodeErrors.js"; import { - FormatPlayObjectOptions, - InternalConfig, - MdnsDeviceInfo, + type FormatPlayObjectOptions, + type InternalConfig, + type MdnsDeviceInfo, NO_USER, - PlayerStateData, - SourceData, + type PlayerStateData, + type SourceData, } from "../common/infrastructure/Atomic.js"; -import { ChromecastSourceConfig } from "../common/infrastructure/config/source/chromecast.js"; +import { type ChromecastSourceConfig } from "../common/infrastructure/config/source/chromecast.js"; import { MaybeLogger } from '../common/MaybeLogger.js'; import { chromePlayerStateToReported, @@ -26,15 +26,15 @@ import { getMediaStatus, } from "../common/vendor/chromecast/ChromecastClientUtils.js"; import { - PlatformApplication, - PlatformApplicationWithContext, - PlatformType + type PlatformApplication, + type PlatformApplicationWithContext, + type PlatformType } from "../common/vendor/chromecast/interfaces.js"; import { difference, isDebugMode, parseBool } from "../utils.js"; import { genGroupIdStr } from '../../core/PlayUtils.js'; import { findCauseByReference } from "../utils/ErrorUtils.js"; import { discoveryAvahi, discoveryNative } from "../utils/MDNSUtils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; diff --git a/src/backend/sources/DeezerInternalSource.ts b/src/backend/sources/DeezerInternalSource.ts index 99de663c..e3b04070 100644 --- a/src/backend/sources/DeezerInternalSource.ts +++ b/src/backend/sources/DeezerInternalSource.ts @@ -1,17 +1,17 @@ import dayjs from "dayjs"; import EventEmitter from "events"; -import request, { Request, Response, SuperAgent } from 'superagent'; -import { PlayObject, PlayObjectMinimal, SOURCE_SOT, TA_CLOSE, TA_DURING, TA_EXACT, TA_FUZZY, TemporalAccuracy } from "../../core/Atomic.js"; -import { DEFAULT_RETRY_MULTIPLIER, FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; -import { DeezerInternalSourceConfig, DeezerInternalTrackData, DeezerSourceConfig } from "../common/infrastructure/config/source/deezer.js"; +import request, { Request, Response, type SuperAgent } from 'superagent'; +import { type PlayObject, type PlayObjectMinimal, SOURCE_SOT, TA_CLOSE, TA_DURING, TA_EXACT, TA_FUZZY, type TemporalAccuracy } from "../../core/Atomic.js"; +import { DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type DeezerInternalSourceConfig, type DeezerInternalTrackData, type DeezerSourceConfig } from "../common/infrastructure/config/source/deezer.js"; import { TRANSFORM_HOOK } from "../common/infrastructure/Transform.js"; import { parseRetryAfterSecsFromObj, playObjDataMatch, sleep, sortByOldestPlayDate} from "../utils.js"; -import AbstractSource, { RecentlyPlayedOptions } from "./AbstractSource.js"; +import AbstractSource, { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { CookieJar, Cookie } from 'tough-cookie'; import { MixedCookieAgent } from 'http-cookie-agent/http'; import MemorySource from "./MemorySource.js"; import { genericSourcePlayMatch } from "../utils/PlayComparisonUtils.js"; -import { TemporalPlayComparisonOptions } from "../utils/TimeUtils.js"; +import { type TemporalPlayComparisonOptions } from "../utils/TimeUtils.js"; import { findAsync, findIndexAsync } from "../utils/AsyncUtils.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { UpstreamError } from "../common/errors/UpstreamError.js"; diff --git a/src/backend/sources/DeezerSource.ts b/src/backend/sources/DeezerSource.ts index 7ecdcb5e..1919ae3f 100644 --- a/src/backend/sources/DeezerSource.ts +++ b/src/backend/sources/DeezerSource.ts @@ -3,14 +3,14 @@ import EventEmitter from "events"; import passport from "passport"; import { Strategy as DeezerStrategy } from 'passport-deezer'; import request from 'superagent'; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; -import { DEFAULT_RETRY_MULTIPLIER, FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; -import { DeezerSourceConfig } from "../common/infrastructure/config/source/deezer.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; +import { DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type DeezerSourceConfig } from "../common/infrastructure/config/source/deezer.js"; import { parseRetryAfterSecsFromObj, sleep, sortByOldestPlayDate, } from "../utils.js"; import { writeFile } from '../utils/FSUtils.js'; import { readJson } from '../utils/DataUtils.js'; import { joinedUrl } from "../utils/NetworkUtils.js"; -import AbstractSource, { RecentlyPlayedOptions } from "./AbstractSource.js"; +import AbstractSource, { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; export default class DeezerSource extends AbstractSource { diff --git a/src/backend/sources/EndpointLastfmSource.ts b/src/backend/sources/EndpointLastfmSource.ts index 10bef574..3b91ae5b 100644 --- a/src/backend/sources/EndpointLastfmSource.ts +++ b/src/backend/sources/EndpointLastfmSource.ts @@ -1,21 +1,21 @@ import dayjs from "dayjs"; import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { - ExpressRequest, - FormatPlayObjectOptions, - InternalConfig, + type ExpressRequest, + type FormatPlayObjectOptions, + type InternalConfig, NO_USER, - PlayerStateData, - PlayPlatformId, + type PlayerStateData, + type PlayPlatformId, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus + type ReportedPlayerStatus } from "../common/infrastructure/Atomic.js"; import MemorySource from "./MemorySource.js"; -import { LastFMEndpointSourceConfig } from "../common/infrastructure/config/source/endpointlfm.js"; -import { LastFMScrobbleRequestPayload, scrobblePayloadToPlay } from "../common/vendor/LastfmApiClient.js"; -import { Logger } from "@foxxmd/logging"; -import { PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { type LastFMEndpointSourceConfig } from "../common/infrastructure/config/source/endpointlfm.js"; +import { type LastFMScrobbleRequestPayload, scrobblePayloadToPlay } from "../common/vendor/LastfmApiClient.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { NowPlayingPlayerState } from "./PlayerState/NowPlayingPlayerState.js"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; diff --git a/src/backend/sources/EndpointListenbrainzSource.ts b/src/backend/sources/EndpointListenbrainzSource.ts index 12da9618..3f5e0467 100644 --- a/src/backend/sources/EndpointListenbrainzSource.ts +++ b/src/backend/sources/EndpointListenbrainzSource.ts @@ -1,24 +1,24 @@ import dayjs from "dayjs"; import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { - ExpressRequest, - FormatPlayObjectOptions, - InternalConfig, + type ExpressRequest, + type FormatPlayObjectOptions, + type InternalConfig, NO_USER, - PlayerStateData, - PlayPlatformId, + type PlayerStateData, + type PlayPlatformId, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus + type ReportedPlayerStatus } from "../common/infrastructure/Atomic.js"; -import { ListenbrainzEndpointSourceConfig } from "../common/infrastructure/config/source/endpointlz.js"; +import { type ListenbrainzEndpointSourceConfig } from "../common/infrastructure/config/source/endpointlz.js"; import { ListenbrainzApiClient, listenPayloadToPlay } from "../common/vendor/ListenbrainzApiClient.js"; -import { SubmitPayload } from '../common/vendor/listenbrainz/interfaces.js'; -import { ListenPayload } from '../common/vendor/listenbrainz/interfaces.js'; +import { type SubmitPayload } from '../common/vendor/listenbrainz/interfaces.js'; +import { type ListenPayload } from '../common/vendor/listenbrainz/interfaces.js'; import MemorySource from "./MemorySource.js"; import { NowPlayingPlayerState } from "./PlayerState/NowPlayingPlayerState.js"; -import { Logger } from "@foxxmd/logging"; -import { PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; const noSlugMatch = new RegExp(/(?:\/api\/listenbrainz\/?)$|(?:\/1\/?|\/1\/submit-listens\/?\/1\/validate-token\/|)$/i); diff --git a/src/backend/sources/IcecastSource.ts b/src/backend/sources/IcecastSource.ts index b7145236..e3a5fc89 100644 --- a/src/backend/sources/IcecastSource.ts +++ b/src/backend/sources/IcecastSource.ts @@ -1,16 +1,16 @@ -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { EventEmitter } from "events"; -import { PlayObject, PlayObjectMinimal, URLData } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; import { isPortReachableConnect, normalizeWebAddress } from "../utils/NetworkUtils.js"; import MemorySource from "./MemorySource.js"; -import { IcecastMetadata, IcecastSourceConfig } from "../common/infrastructure/config/source/icecast.js"; +import { type IcecastMetadata, type IcecastSourceConfig } from "../common/infrastructure/config/source/icecast.js"; import IcecastMetadataStats from "icecast-metadata-stats"; import { parseArtistCredits, parseTrackCredits } from "../utils/StringUtils.js"; import { isDebugMode, sleep } from "../utils.js"; diff --git a/src/backend/sources/JRiverSource.ts b/src/backend/sources/JRiverSource.ts index 05e79ccb..9ba8260a 100644 --- a/src/backend/sources/JRiverSource.ts +++ b/src/backend/sources/JRiverSource.ts @@ -2,11 +2,11 @@ import dayjs from "dayjs"; import { EventEmitter } from "events"; import normalizeUrl from 'normalize-url'; import { URL } from "url"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; -import { FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; -import { JRiverSourceConfig } from "../common/infrastructure/config/source/jriver.js"; -import { Info, JRiverApiClient, PLAYER_STATE } from "../common/vendor/JRiverApiClient.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; +import { type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type JRiverSourceConfig } from "../common/infrastructure/config/source/jriver.js"; +import { type Info, JRiverApiClient, PLAYER_STATE } from "../common/vendor/JRiverApiClient.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { artistNamesToCredits } from "../../core/StringUtils.js"; diff --git a/src/backend/sources/JellyfinApiSource.ts b/src/backend/sources/JellyfinApiSource.ts index 69213668..5f8be2d7 100644 --- a/src/backend/sources/JellyfinApiSource.ts +++ b/src/backend/sources/JellyfinApiSource.ts @@ -1,4 +1,4 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import { WS } from "iso-websocket"; // @ts-expect-error weird typings? import { Api, Jellyfin } from "@jellyfin/sdk"; @@ -42,16 +42,16 @@ import { from "@jellyfin/sdk/lib/index.js"; import dayjs from "dayjs"; import EventEmitter from "events"; -import { ArtistCredit, BrainzMeta, PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type ArtistCredit, type BrainzMeta, type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { artistNamesToCredits, artistNameToCredit, buildTrackString, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, - PlayerStateDataMaybePlay, - PlayPlatformId, REPORTED_PLAYER_STATUSES + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, + type PlayerStateDataMaybePlay, + type PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../common/infrastructure/Atomic.js"; -import { JellyApiSourceConfig } from "../common/infrastructure/config/source/jellyfin.js"; +import { type JellyApiSourceConfig } from "../common/infrastructure/config/source/jellyfin.js"; import { getPlatformIdFromData, isDebugMode, parseBool, } from "../utils.js"; import { genGroupIdStr } from '../../core/PlayUtils.js'; import { joinedUrl } from "../utils/NetworkUtils.js"; diff --git a/src/backend/sources/KodiSource.ts b/src/backend/sources/KodiSource.ts index 5ccb6155..6a9010ca 100644 --- a/src/backend/sources/KodiSource.ts +++ b/src/backend/sources/KodiSource.ts @@ -1,9 +1,9 @@ import { EventEmitter } from "events"; -import { PlayObject } from "../../core/Atomic.js"; -import { FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; -import { KodiSourceConfig } from "../common/infrastructure/config/source/kodi.js"; +import { type PlayObject } from "../../core/Atomic.js"; +import { type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type KodiSourceConfig } from "../common/infrastructure/config/source/kodi.js"; import { KodiApiClient } from "../common/vendor/KodiApiClient.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; export class KodiSource extends MemoryPositionalSource { diff --git a/src/backend/sources/KoitoSource.ts b/src/backend/sources/KoitoSource.ts index 58b4e25c..c16cbd4c 100644 --- a/src/backend/sources/KoitoSource.ts +++ b/src/backend/sources/KoitoSource.ts @@ -1,11 +1,11 @@ import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, InternalConfig, PaginatedListensTimeRangeOptions, PaginatedTimeRangeListens, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type FormatPlayObjectOptions, type InternalConfig, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { KoitoApiClient, listenObjectResponseToPlay } from "../common/vendor/koito/KoitoApiClient.js"; -import { KoitoSourceConfig } from "../common/infrastructure/config/source/koito.js"; +import { type KoitoSourceConfig } from "../common/infrastructure/config/source/koito.js"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.js"; export default class KoitoSource extends MemorySource { diff --git a/src/backend/sources/LastfmSource.ts b/src/backend/sources/LastfmSource.ts index af4b5e62..7fc56740 100644 --- a/src/backend/sources/LastfmSource.ts +++ b/src/backend/sources/LastfmSource.ts @@ -1,14 +1,14 @@ import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; -import { FormatPlayObjectOptions, InternalConfig, PlayPlatformId, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; -import { SourceType } from '../common/infrastructure/config/source/sources.js'; -import { LastfmSourceConfig } from "../common/infrastructure/config/source/lastfm.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type FormatPlayObjectOptions, type InternalConfig, type PlayPlatformId, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type SourceType } from '../common/infrastructure/config/source/sources.js'; +import { type LastfmSourceConfig } from "../common/infrastructure/config/source/lastfm.js"; import LastfmApiClient, { formatPlayObj } from "../common/vendor/LastfmApiClient.js"; import { sortByOldestPlayDate } from "../utils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; -import { Logger } from "@foxxmd/logging"; -import { PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { NowPlayingPlayerState } from "./PlayerState/NowPlayingPlayerState.js"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.js"; diff --git a/src/backend/sources/LibrefmSource.ts b/src/backend/sources/LibrefmSource.ts index 6d091d25..b41e9882 100644 --- a/src/backend/sources/LibrefmSource.ts +++ b/src/backend/sources/LibrefmSource.ts @@ -1,10 +1,10 @@ import { EventEmitter } from "stream"; -import { InternalConfig } from "../common/infrastructure/Atomic.js"; -import { LibrefmSourceConfig } from "../common/infrastructure/config/source/librefm.js"; +import { type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type LibrefmSourceConfig } from "../common/infrastructure/config/source/librefm.js"; import LastfmSource from "./LastfmSource.js"; import { LIBREFM_HOST, LIBREFM_PATH } from "../common/vendor/LastfmApiClient.js"; -import { LastfmData } from "../common/infrastructure/config/client/lastfm.js"; -import { LastfmSourceConfig } from "../common/infrastructure/config/source/lastfm.js"; +import { type LastfmData } from "../common/infrastructure/config/client/lastfm.js"; +import { type LastfmSourceConfig } from "../common/infrastructure/config/source/lastfm.js"; export default class LibrefmSource extends LastfmSource { diff --git a/src/backend/sources/ListenbrainzSource.ts b/src/backend/sources/ListenbrainzSource.ts index bf7326c9..5319f5cc 100644 --- a/src/backend/sources/ListenbrainzSource.ts +++ b/src/backend/sources/ListenbrainzSource.ts @@ -1,16 +1,16 @@ import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, InternalConfig, PlayPlatformId, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; -import { ListenBrainzSourceConfig } from "../common/infrastructure/config/source/listenbrainz.js"; +import { type FormatPlayObjectOptions, type InternalConfig, type PlayPlatformId, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type ListenBrainzSourceConfig } from "../common/infrastructure/config/source/listenbrainz.js"; import { ListenbrainzApiClient } from "../common/vendor/ListenbrainzApiClient.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { isPortReachableConnect } from "../utils/NetworkUtils.js"; -import { Logger } from "@foxxmd/logging"; -import { PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { NowPlayingPlayerState } from "./PlayerState/NowPlayingPlayerState.js"; -import { ManipulateType } from "dayjs"; +import { type ManipulateType } from "dayjs"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.js"; export default class ListenbrainzSource extends MemorySource { diff --git a/src/backend/sources/MPDSource.ts b/src/backend/sources/MPDSource.ts index 882eb236..da646e07 100644 --- a/src/backend/sources/MPDSource.ts +++ b/src/backend/sources/MPDSource.ts @@ -2,21 +2,21 @@ import dayjs from "dayjs"; import { EventEmitter } from "events"; import path from 'path'; import {MPC, type Status, type Song, type PlaylistItem} from 'mpc-js'; -import { BrainzMeta, PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type BrainzMeta, type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus, + type ReportedPlayerStatus, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; import { - MPDSourceConfig, - PlayerState, + type MPDSourceConfig, + type PlayerState, } from "../common/infrastructure/config/source/mpd.js"; import { isPortReachable } from "../utils/NetworkUtils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { isDebugMode, sleep } from "../utils.js"; diff --git a/src/backend/sources/MPRISSource.ts b/src/backend/sources/MPRISSource.ts index 93801112..f84adaab 100644 --- a/src/backend/sources/MPRISSource.ts +++ b/src/backend/sources/MPRISSource.ts @@ -1,21 +1,21 @@ -import { Interfaces as Notifications } from '@dbus-types/notifications' +import { type Interfaces as Notifications } from '@dbus-types/notifications' import dayjs from "dayjs"; -import { DBusInterface, MessageBus, sessionBus, Connection, ConnectOpts } from 'dbus-ts'; +import { DBusInterface, sessionBus, Connection, type ConnectOpts } from 'dbus-ts'; import EventEmitter from "events"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; -import { FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; +import { type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; import { MPRIS_IFACE, MPRIS_PATH, - MPRISMetadata, - MPRISSourceConfig, + type MPRISMetadata, + type MPRISSourceConfig, PLAYBACK_STATUS_STOPPED, - PlaybackStatus, - PlayerInfo, + type PlaybackStatus, + type PlayerInfo, } from "../common/infrastructure/config/source/mpris.js"; import { removeDuplicates } from "../utils.js"; import { findCauseByMessage } from "../utils/ErrorUtils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { Readable, Writable } from 'stream'; import net from 'net'; diff --git a/src/backend/sources/MalojaSource.ts b/src/backend/sources/MalojaSource.ts index 9e75afb1..e48a365f 100644 --- a/src/backend/sources/MalojaSource.ts +++ b/src/backend/sources/MalojaSource.ts @@ -1,11 +1,11 @@ import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { InternalConfig, PaginatedListensTimeRangeOptions, PaginatedTimeRangeListens } from "../common/infrastructure/Atomic.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type InternalConfig, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens } from "../common/infrastructure/Atomic.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { MalojaApiClient } from "../common/vendor/maloja/MalojaApiClient.js"; -import { MalojaSourceConfig } from "../common/infrastructure/config/source/maloja.js"; +import { type MalojaSourceConfig } from "../common/infrastructure/config/source/maloja.js"; export default class MalojaSource extends MemorySource { diff --git a/src/backend/sources/MemoryPositionalSource.ts b/src/backend/sources/MemoryPositionalSource.ts index b6696925..b150e86a 100644 --- a/src/backend/sources/MemoryPositionalSource.ts +++ b/src/backend/sources/MemoryPositionalSource.ts @@ -1,9 +1,9 @@ -import { Logger } from "@foxxmd/logging"; -import { InternalConfig, PlayPlatformId } from "../common/infrastructure/Atomic.js"; +import { type Logger } from "@foxxmd/logging"; +import { type InternalConfig, type PlayPlatformId } from "../common/infrastructure/Atomic.js"; import MemorySource from "./MemorySource.js"; -import { PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { PositionalPlayerState } from "./PlayerState/PositionalPlayerState.js"; -import { SourceConfig, SourceType } from "../common/infrastructure/config/source/sources.js"; +import { type SourceConfig, type SourceType } from "../common/infrastructure/config/source/sources.js"; import EventEmitter from "events"; export class MemoryPositionalSource extends MemorySource { diff --git a/src/backend/sources/MemorySource.ts b/src/backend/sources/MemorySource.ts index 76607404..b79ebd26 100644 --- a/src/backend/sources/MemorySource.ts +++ b/src/backend/sources/MemorySource.ts @@ -1,17 +1,17 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import dayjs, { Dayjs } from "dayjs"; import { EventEmitter } from "events"; import { AsyncTask, SimpleIntervalJob, Task, ToadScheduler } from "toad-scheduler"; -import { PlayObject, SOURCE_SOT, SOURCE_SOT_TYPES, SourcePlayerJson, SourcePlayerObj } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT, type SOURCE_SOT_TYPES, type SourcePlayerJson, type SourcePlayerObj } from "../../core/Atomic.js"; import { buildTrackString } from "../../core/StringUtils.js"; import { asPlayerStateDataMaybePlay, CALCULATED_PLAYER_STATUSES, - InternalConfig, PlayerStateDataMaybePlay, - PlayPlatformId, - ProgressAwarePlayObject} from "../common/infrastructure/Atomic.js"; -import { SourceType, SourceConfig } from '../common/infrastructure/config/source/sources.js'; -import { PollingOptions } from "../common/infrastructure/config/common.js"; + type InternalConfig, type PlayerStateDataMaybePlay, + type PlayPlatformId, + type ProgressAwarePlayObject} from "../common/infrastructure/Atomic.js"; +import { type SourceType, type SourceConfig } from '../common/infrastructure/config/source/sources.js'; +import { type PollingOptions } from "../common/infrastructure/config/common.js"; import { genGroupId, getPlatformIdFromData, @@ -25,11 +25,11 @@ import { timePassesScrobbleThreshold } from "../utils/TimeUtils.js"; import { timeToHumanTimestamp } from "../../core/TimeUtils.js"; import { PromisePool } from "@supercharge/promise-pool"; import AbstractSource from "./AbstractSource.js"; -import { AbstractPlayerState, createPlayerOptions, PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { AbstractPlayerState, createPlayerOptions, type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { GenericPlayerState } from "./PlayerState/GenericPlayerState.js"; import { hashObject } from "../utils/StringUtils.js"; import { useDebugValue } from "react"; -import { ComponentSourceApi, ComponentSourceApiJson } from "../../core/Api.js"; +import { type ComponentSourceApi, type ComponentSourceApiJson } from "../../core/Api.js"; const EXPECTED_NON_DISCOVERED_REASON = 'not added because an identical play with the same timestamp was already discovered.'; diff --git a/src/backend/sources/MopidySource.ts b/src/backend/sources/MopidySource.ts index 133c267c..e2f1e3b6 100644 --- a/src/backend/sources/MopidySource.ts +++ b/src/backend/sources/MopidySource.ts @@ -5,16 +5,16 @@ import Mopidy, { models } from "mopidy"; import normalizeUrl from 'normalize-url'; import pEvent from 'p-event'; import { URL } from "url"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { artistNamesToCredits, buildTrackString } from "../../core/StringUtils.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; -import { MopidySourceConfig } from "../common/infrastructure/config/source/mopidy.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type MopidySourceConfig } from "../common/infrastructure/config/source/mopidy.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; diff --git a/src/backend/sources/MusicCastSource.ts b/src/backend/sources/MusicCastSource.ts index c5fdd18d..5e71f0d8 100644 --- a/src/backend/sources/MusicCastSource.ts +++ b/src/backend/sources/MusicCastSource.ts @@ -1,15 +1,15 @@ import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { EventEmitter } from "events"; -import { PlayObject, PlayObjectMinimal, URLData } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; import { isPortReachable, isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../utils/NetworkUtils.js"; -import { DeviceInfoResponse, DeviceStatusResponse, MusicCastResponseCodes, MusicCastSourceConfig, playbackToReportedStatus, PlayInfoCDResponse, PlayInfoNetResponse } from "../common/infrastructure/config/source/musiccast.js"; +import { type DeviceInfoResponse, type DeviceStatusResponse, MusicCastResponseCodes, type MusicCastSourceConfig, playbackToReportedStatus, type PlayInfoCDResponse, type PlayInfoNetResponse } from "../common/infrastructure/config/source/musiccast.js"; import request, { Request, Response } from 'superagent'; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { artistNamesToCredits } from "../../core/StringUtils.js"; diff --git a/src/backend/sources/MusikcubeSource.ts b/src/backend/sources/MusikcubeSource.ts index 8f7937ae..eceb82e6 100644 --- a/src/backend/sources/MusikcubeSource.ts +++ b/src/backend/sources/MusikcubeSource.ts @@ -5,23 +5,23 @@ import { randomUUID } from "node:crypto"; import normalizeUrl from 'normalize-url'; import pEvent from 'p-event'; import { URL } from "url"; -import { PlayObject, PlayObjectMinimal, URLData } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.js"; import { UpstreamError } from "../common/errors/UpstreamError.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; import { - MCAuthenticateRequest, - MCAuthenticateResponse, - MCPlaybackOverviewRequest, - MCPlaybackOverviewResponse, - MusikcubeSourceConfig + type MCAuthenticateRequest, + type MCAuthenticateResponse, + type MCPlaybackOverviewRequest, + type MCPlaybackOverviewResponse, + type MusikcubeSourceConfig } from "../common/infrastructure/config/source/musikcube.js"; import { sleep } from "../utils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { normalizeWSAddress } from "../utils/NetworkUtils.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; diff --git a/src/backend/sources/PlayerState/AbstractPlayerState.ts b/src/backend/sources/PlayerState/AbstractPlayerState.ts index c02c9899..146edbcf 100644 --- a/src/backend/sources/PlayerState/AbstractPlayerState.ts +++ b/src/backend/sources/PlayerState/AbstractPlayerState.ts @@ -1,22 +1,22 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import dayjs, { Dayjs } from "dayjs"; -import { PlayObject, PlayProgress, Second, SOURCE_SOT, SOURCE_SOT_TYPES, SourcePlayerObj } from "../../../core/Atomic.js"; +import { type PlayObject, type PlayProgress, type Second, SOURCE_SOT, type SOURCE_SOT_TYPES, type SourcePlayerObj } from "../../../core/Atomic.js"; import { buildTrackString } from "../../../core/StringUtils.js"; import { asPlayerStateData, CALCULATED_PLAYER_STATUSES, - CalculatedPlayerStatus, - PlayerStateData, - PlayerStateDataMaybePlay, - PlayPlatformId, + type CalculatedPlayerStatus, + type PlayerStateData, + type PlayerStateDataMaybePlay, + type PlayPlatformId, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus, + type ReportedPlayerStatus, } from "../../common/infrastructure/Atomic.js"; -import { PollingOptions } from "../../common/infrastructure/config/common.js"; +import { type PollingOptions } from "../../common/infrastructure/config/common.js"; import { playObjDataMatch, progressBar } from "../../utils.js"; import { genGroupIdStr } from '../../../core/PlayUtils.js'; import { formatNumber } from '../../../core/DataUtils.js'; -import { ListenProgress } from "./ListenProgress.js"; +import { type ListenProgress } from "./ListenProgress.js"; import { ListenRange, ListenRangePositional } from "./ListenRange.js"; import { closeToPlayEnd, closeToPlayStart, repeatDurationPlayed } from "../../utils/TimeUtils.js"; import { timeToHumanTimestamp } from "../../../core/TimeUtils.js"; diff --git a/src/backend/sources/PlayerState/GenericPlayerState.ts b/src/backend/sources/PlayerState/GenericPlayerState.ts index 41c4aa7c..f75e097f 100644 --- a/src/backend/sources/PlayerState/GenericPlayerState.ts +++ b/src/backend/sources/PlayerState/GenericPlayerState.ts @@ -1,8 +1,8 @@ -import { Logger } from "@foxxmd/logging"; -import { CALCULATED_PLAYER_STATUSES, PlayPlatformId } from "../../common/infrastructure/Atomic.js"; -import { AbstractPlayerState, PlayerStateOptions } from "./AbstractPlayerState.js"; -import { PlayProgress } from "../../../core/Atomic.js"; -import { ListenProgress, ListenProgressTS } from "./ListenProgress.js"; +import { type Logger } from "@foxxmd/logging"; +import { CALCULATED_PLAYER_STATUSES, type PlayPlatformId } from "../../common/infrastructure/Atomic.js"; +import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.js"; +import { type PlayProgress } from "../../../core/Atomic.js"; +import { type ListenProgress, ListenProgressTS } from "./ListenProgress.js"; import { ListenRange, ListenRangeTS } from "./ListenRange.js"; import { Dayjs } from "dayjs"; diff --git a/src/backend/sources/PlayerState/JellyfinPlayerState.ts b/src/backend/sources/PlayerState/JellyfinPlayerState.ts index 1ecac4f6..9d86fac0 100644 --- a/src/backend/sources/PlayerState/JellyfinPlayerState.ts +++ b/src/backend/sources/PlayerState/JellyfinPlayerState.ts @@ -1,7 +1,7 @@ -import { Logger } from "@foxxmd/logging"; -import { PlayObject } from "../../../core/Atomic.js"; -import { PlayerStateDataMaybePlay, PlayPlatformId, ReportedPlayerStatus } from "../../common/infrastructure/Atomic.js"; -import { PlayerStateOptions } from "./AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayObject } from "../../../core/Atomic.js"; +import { type PlayerStateDataMaybePlay, type PlayPlatformId, type ReportedPlayerStatus } from "../../common/infrastructure/Atomic.js"; +import { type PlayerStateOptions } from "./AbstractPlayerState.js"; import { GenericPlayerState } from "./GenericPlayerState.js"; import { PositionalPlayerState } from "./PositionalPlayerState.js"; diff --git a/src/backend/sources/PlayerState/ListenProgress.ts b/src/backend/sources/PlayerState/ListenProgress.ts index ac517189..9493e45a 100644 --- a/src/backend/sources/PlayerState/ListenProgress.ts +++ b/src/backend/sources/PlayerState/ListenProgress.ts @@ -1,6 +1,6 @@ import dayjs, { Dayjs } from "dayjs"; -import { PlayProgress, PlayProgressPositional, Second } from "../../../core/Atomic.js"; +import { type PlayProgress, type PlayProgressPositional, type Second } from "../../../core/Atomic.js"; export class ListenProgressTS implements PlayProgress { diff --git a/src/backend/sources/PlayerState/ListenRange.ts b/src/backend/sources/PlayerState/ListenRange.ts index cf6b511f..945cf3db 100644 --- a/src/backend/sources/PlayerState/ListenRange.ts +++ b/src/backend/sources/PlayerState/ListenRange.ts @@ -1,6 +1,6 @@ import dayjs, { Dayjs } from "dayjs"; -import { ListenRangeData, Millisecond, PlayProgress, PlayProgressPositional, Second } from "../../../core/Atomic.js"; -import { ListenProgress, ListenProgressPositional, ListenProgressTS } from "./ListenProgress.js"; +import { type ListenRangeData, type Millisecond, type PlayProgress, type PlayProgressPositional, type Second } from "../../../core/Atomic.js"; +import { type ListenProgress, ListenProgressPositional, ListenProgressTS } from "./ListenProgress.js"; import { GenericRealtimePlayer, RealtimePlayer } from "./RealtimePlayer.js"; export abstract class ListenRange { diff --git a/src/backend/sources/PlayerState/NowPlayingPlayerState.ts b/src/backend/sources/PlayerState/NowPlayingPlayerState.ts index 0e68a645..465c19bb 100644 --- a/src/backend/sources/PlayerState/NowPlayingPlayerState.ts +++ b/src/backend/sources/PlayerState/NowPlayingPlayerState.ts @@ -1,4 +1,4 @@ -import { SourcePlayerObj } from "../../../core/Atomic.js"; +import { type SourcePlayerObj } from "../../../core/Atomic.js"; import { GenericPlayerState } from "./GenericPlayerState.js"; /** diff --git a/src/backend/sources/PlayerState/PlexPlayerState.ts b/src/backend/sources/PlayerState/PlexPlayerState.ts index c1629484..d7eecdbc 100644 --- a/src/backend/sources/PlayerState/PlexPlayerState.ts +++ b/src/backend/sources/PlayerState/PlexPlayerState.ts @@ -1,6 +1,6 @@ -import { Logger } from "@foxxmd/logging"; -import { PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; -import { AbstractPlayerState, PlayerStateOptions } from "./AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; +import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.js"; import { GenericPlayerState } from "./GenericPlayerState.js"; import { PositionalPlayerState } from "./PositionalPlayerState.js"; diff --git a/src/backend/sources/PlayerState/PositionalPlayerState.ts b/src/backend/sources/PlayerState/PositionalPlayerState.ts index 7452197e..9c9dc907 100644 --- a/src/backend/sources/PlayerState/PositionalPlayerState.ts +++ b/src/backend/sources/PlayerState/PositionalPlayerState.ts @@ -1,7 +1,7 @@ -import { Logger } from "@foxxmd/logging"; -import { CALCULATED_PLAYER_STATUSES, PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; -import { AbstractPlayerState, PlayerStateOptions } from "./AbstractPlayerState.js"; -import { PlayProgressPositional, Second } from "../../../core/Atomic.js"; +import { type Logger } from "@foxxmd/logging"; +import { CALCULATED_PLAYER_STATUSES, type PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; +import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.js"; +import { type PlayProgressPositional, type Second } from "../../../core/Atomic.js"; import { Dayjs } from "dayjs"; import { ListenProgressPositional } from "./ListenProgress.js"; import { ListenRangePositional } from "./ListenRange.js"; diff --git a/src/backend/sources/PlayerState/RealtimePlayerState.ts b/src/backend/sources/PlayerState/RealtimePlayerState.ts index ddcc1001..eb853ef6 100644 --- a/src/backend/sources/PlayerState/RealtimePlayerState.ts +++ b/src/backend/sources/PlayerState/RealtimePlayerState.ts @@ -1,9 +1,9 @@ -import { Logger } from "@foxxmd/logging"; -import { PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; -import { AbstractPlayerState, PlayerStateOptions } from "./AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; +import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.js"; import { GenericPlayerState } from "./GenericPlayerState.js"; import { GenericRealtimePlayer, RealtimePlayer } from "./RealtimePlayer.js"; -import { Second } from "../../../core/Atomic.js"; +import { type Second } from "../../../core/Atomic.js"; import { Dayjs } from "dayjs"; // export class RealtimePlayerState extends GenericPlayerState { diff --git a/src/backend/sources/PlayerState/SubsonicPlayerState.ts b/src/backend/sources/PlayerState/SubsonicPlayerState.ts index e5f078a2..b84a96f7 100644 --- a/src/backend/sources/PlayerState/SubsonicPlayerState.ts +++ b/src/backend/sources/PlayerState/SubsonicPlayerState.ts @@ -1,4 +1,4 @@ -import { SourcePlayerObj } from "../../../core/Atomic.js"; +import { type SourcePlayerObj } from "../../../core/Atomic.js"; import { GenericPlayerState } from "./GenericPlayerState.js"; import { Dayjs } from "dayjs"; diff --git a/src/backend/sources/PlexApiSource.ts b/src/backend/sources/PlexApiSource.ts index 05c6d7c1..8eac10b9 100644 --- a/src/backend/sources/PlexApiSource.ts +++ b/src/backend/sources/PlexApiSource.ts @@ -1,30 +1,30 @@ import EventEmitter from "events"; -import { BrainzMeta, PlayObject, PlayObjectMinimal, URLData } from "../../core/Atomic.js"; +import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.js"; import { artistNamesToCredits, buildTrackString, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.js"; import { asPlayerStateDataMaybePlay, - FormatPlayObjectOptions, - InternalConfig, + type FormatPlayObjectOptions, + type InternalConfig, MBID_VARIOUS_ARTISTS, NO_USER, - PlayerStateData, - PlayerStateDataMaybePlay, - PlayPlatformId, REPORTED_PLAYER_STATUSES + type PlayerStateData, + type PlayerStateDataMaybePlay, + type PlayPlatformId, REPORTED_PLAYER_STATUSES } from "../common/infrastructure/Atomic.js"; import { getFirstNonEmptyString, getPlatformIdFromData, isDebugMode, parseBool, } from "../utils.js"; import { genGroupIdStr } from '../../core/PlayUtils.js'; import { buildStatePlayerPlayIdententifyingInfo, hashObject, parseArrayFromMaybeString } from "../utils/StringUtils.js"; -import { GetSessionsMetadata } from "@lukehagar/plexjs/sdk/models/operations/getsessions.js"; -import { PlexAPI, HTTPClient, Fetcher } from "@lukehagar/plexjs"; +import { type GetSessionsMetadata } from "@lukehagar/plexjs/sdk/models/operations/getsessions.js"; +import { PlexAPI, HTTPClient, type Fetcher } from "@lukehagar/plexjs"; import { Agent } from 'undici'; -import { PlexApiSourceConfig } from "../common/infrastructure/config/source/plex.js"; +import { type PlexApiSourceConfig } from "../common/infrastructure/config/source/plex.js"; import { isPortReachable, joinedUrl, normalizeWebAddress } from '../utils/NetworkUtils.js'; -import { GetTokenDetailsResponse, GetTokenDetailsUserPlexAccount } from '@lukehagar/plexjs/sdk/models/operations/gettokendetails.js'; +import { type GetTokenDetailsResponse, type GetTokenDetailsUserPlexAccount } from '@lukehagar/plexjs/sdk/models/operations/gettokendetails.js'; import { parseRegexSingle } from '@foxxmd/regex-buddy-core'; import { Readable } from 'node:stream'; import { PlexPlayerState } from './PlayerState/PlexPlayerState.js'; -import { AbstractPlayerState, PlayerStateOptions } from './PlayerState/AbstractPlayerState.js'; -import { Logger } from '@foxxmd/logging'; +import { AbstractPlayerState, type PlayerStateOptions } from './PlayerState/AbstractPlayerState.js'; +import { type Logger } from '@foxxmd/logging'; import { MemoryPositionalSource } from './MemoryPositionalSource.js'; import { FixedSizeList } from 'fixed-size-list'; import { SDKValidationError } from '@lukehagar/plexjs/sdk/models/errors/sdkvalidationerror.js'; diff --git a/src/backend/sources/RockskySource.ts b/src/backend/sources/RockskySource.ts index 9fc1ffe1..1dd96445 100644 --- a/src/backend/sources/RockskySource.ts +++ b/src/backend/sources/RockskySource.ts @@ -1,11 +1,11 @@ import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, InternalConfig, PlayPlatformId } from "../common/infrastructure/Atomic.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type FormatPlayObjectOptions, type InternalConfig, type PlayPlatformId } from "../common/infrastructure/Atomic.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { RockSkyApiClient } from "../common/vendor/RockSkyApiClient.js"; -import { RockskySourceConfig } from "../common/infrastructure/config/source/rocksky.js"; +import { type RockskySourceConfig } from "../common/infrastructure/config/source/rocksky.js"; export default class RockskySource extends MemorySource { diff --git a/src/backend/sources/ScrobbleSources.ts b/src/backend/sources/ScrobbleSources.ts index e0d14f57..f51ceefa 100644 --- a/src/backend/sources/ScrobbleSources.ts +++ b/src/backend/sources/ScrobbleSources.ts @@ -1,59 +1,59 @@ /* eslint-disable no-case-declarations */ -import { childLogger, Logger } from '@foxxmd/logging'; +import { childLogger, type Logger } from '@foxxmd/logging'; import EventEmitter from "events"; -import { ConfigMeta, ConfigureAs, ConfigureAsSource, InternalConfig, InternalConfigOptional } from "../common/infrastructure/Atomic.js"; +import { type ConfigMeta, type ConfigureAs, type ConfigureAsSource, type InternalConfig, type InternalConfigOptional } from "../common/infrastructure/Atomic.js"; import { isSourceType } from '../common/infrastructure/config/source/sources.js'; import { sourceTypes } from '../common/infrastructure/config/source/sources.js'; -import { SourceType } from '../common/infrastructure/config/source/sources.js'; -import { AIOConfig, SourceDefaults } from "../common/infrastructure/config/aioConfig.js"; -import { AzuracastData, AzuracastSourceConfig } from "../common/infrastructure/config/source/azuracast.js"; -import { ChromecastData, ChromecastSourceConfig } from "../common/infrastructure/config/source/chromecast.js"; -import { DeezerData, DeezerSourceConfig, DeezerInternalSourceConfig, DeezerCompatConfig, DeezerInternalData } from "../common/infrastructure/config/source/deezer.js"; -import { ListenbrainzEndpointSourceConfig, ListenbrainzEndpointData } from "../common/infrastructure/config/source/endpointlz.js"; -import { LastFMEndpointSourceConfig, LastFMEndpointData } from "../common/infrastructure/config/source/endpointlfm.js"; +import { type SourceType } from '../common/infrastructure/config/source/sources.js'; +import { type AIOConfig, type SourceDefaults } from "../common/infrastructure/config/aioConfig.js"; +import { type AzuracastData, type AzuracastSourceConfig } from "../common/infrastructure/config/source/azuracast.js"; +import { type ChromecastData, type ChromecastSourceConfig } from "../common/infrastructure/config/source/chromecast.js"; +import { type DeezerData, type DeezerSourceConfig, type DeezerInternalSourceConfig, type DeezerCompatConfig, type DeezerInternalData } from "../common/infrastructure/config/source/deezer.js"; +import { type ListenbrainzEndpointSourceConfig, type ListenbrainzEndpointData } from "../common/infrastructure/config/source/endpointlz.js"; +import { type LastFMEndpointSourceConfig, type LastFMEndpointData } from "../common/infrastructure/config/source/endpointlfm.js"; import { - JellyApiData, - JellyApiSourceConfig, + type JellyApiData, + type JellyApiSourceConfig, } from "../common/infrastructure/config/source/jellyfin.js"; -import { JRiverData, JRiverSourceConfig } from "../common/infrastructure/config/source/jriver.js"; -import { KodiData, KodiSourceConfig } from "../common/infrastructure/config/source/kodi.js"; -import { LastfmSourceConfig } from "../common/infrastructure/config/source/lastfm.js"; -import { ListenBrainzSourceConfig } from "../common/infrastructure/config/source/listenbrainz.js"; -import { MopidySourceConfig } from "../common/infrastructure/config/source/mopidy.js"; -import { MusicCastData, MusicCastSourceConfig } from "../common/infrastructure/config/source/musiccast.js"; -import { IcecastData, IcecastSourceConfig, IcecastSourceOptions } from "../common/infrastructure/config/source/icecast.js"; -import { MPDData, MPDSourceConfig } from "../common/infrastructure/config/source/mpd.js"; -import { MPRISData, MPRISSourceConfig } from "../common/infrastructure/config/source/mpris.js"; -import { MusikcubeData, MusikcubeSourceConfig } from "../common/infrastructure/config/source/musikcube.js"; -import { PlexApiData, PlexApiSourceConfig } from "../common/infrastructure/config/source/plex.js"; -import { MalojaSourceConfig } from "../common/infrastructure/config/source/maloja.js"; -import { SourceAIOConfig, SourceConfig } from "../common/infrastructure/config/source/sources.js"; -import { SpotifySourceConfig, SpotifySourceData } from "../common/infrastructure/config/source/spotify.js"; -import { SubsonicData, SubSonicSourceConfig } from "../common/infrastructure/config/source/subsonic.js"; -import { VLCData, VLCSourceConfig } from "../common/infrastructure/config/source/vlc.js"; -import { WebScrobblerData, WebScrobblerSourceConfig } from "../common/infrastructure/config/source/webscrobbler.js"; -import { YTMusicData, YTMusicSourceConfig } from "../common/infrastructure/config/source/ytmusic.js"; -import { YandexMusicBridgeData, YandexMusicBridgeSourceConfig } from "../common/infrastructure/config/source/ymbridge.js"; -import { SonosData, SonosSourceConfig } from "../common/infrastructure/config/source/sonos.js"; +import { type JRiverData, type JRiverSourceConfig } from "../common/infrastructure/config/source/jriver.js"; +import { type KodiData, type KodiSourceConfig } from "../common/infrastructure/config/source/kodi.js"; +import { type LastfmSourceConfig } from "../common/infrastructure/config/source/lastfm.js"; +import { type ListenBrainzSourceConfig } from "../common/infrastructure/config/source/listenbrainz.js"; +import { type MopidySourceConfig } from "../common/infrastructure/config/source/mopidy.js"; +import { type MusicCastData, type MusicCastSourceConfig } from "../common/infrastructure/config/source/musiccast.js"; +import { type IcecastData, type IcecastSourceConfig, type IcecastSourceOptions } from "../common/infrastructure/config/source/icecast.js"; +import { type MPDData, type MPDSourceConfig } from "../common/infrastructure/config/source/mpd.js"; +import { type MPRISData, type MPRISSourceConfig } from "../common/infrastructure/config/source/mpris.js"; +import { type MusikcubeData, type MusikcubeSourceConfig } from "../common/infrastructure/config/source/musikcube.js"; +import { type PlexApiData, type PlexApiSourceConfig } from "../common/infrastructure/config/source/plex.js"; +import { type MalojaSourceConfig } from "../common/infrastructure/config/source/maloja.js"; +import { type SourceAIOConfig, type SourceConfig } from "../common/infrastructure/config/source/sources.js"; +import { type SpotifySourceConfig, type SpotifySourceData } from "../common/infrastructure/config/source/spotify.js"; +import { type SubsonicData, type SubSonicSourceConfig } from "../common/infrastructure/config/source/subsonic.js"; +import { type VLCData, type VLCSourceConfig } from "../common/infrastructure/config/source/vlc.js"; +import { type WebScrobblerData, type WebScrobblerSourceConfig } from "../common/infrastructure/config/source/webscrobbler.js"; +import { type YTMusicData, type YTMusicSourceConfig } from "../common/infrastructure/config/source/ytmusic.js"; +import { type YandexMusicBridgeData, type YandexMusicBridgeSourceConfig } from "../common/infrastructure/config/source/ymbridge.js"; +import { type SonosData, type SonosSourceConfig } from "../common/infrastructure/config/source/sonos.js"; import { WildcardEmitter } from "../common/WildcardEmitter.js"; import { nonEmptyObj, parseBool, removeUndefinedKeys } from "../utils.js"; import { getCommonComponentEnvConfig, readJson } from '../utils/DataUtils.js'; import { validateJson } from "../utils/ValidationUtils.js"; import AbstractSource from "./AbstractSource.js"; import { nonEmptyStringOrDefault } from '../../core/StringUtils.js'; -import { KoitoSourceConfig } from '../common/infrastructure/config/source/koito.js'; -import { TealSourceConfig } from '../common/infrastructure/config/source/tealfm.js'; -import { RockskySourceConfig } from '../common/infrastructure/config/source/rocksky.js'; -import { CommonSourceOptions } from '../common/infrastructure/config/source/index.js'; -import { ExternalMetadataTerm, PlayTransformHooks, PlayTransformOptions } from '../common/infrastructure/Transform.js'; -import { LibrefmSourceConfig } from '../common/infrastructure/config/source/librefm.js'; -import { LastfmData } from '../common/infrastructure/config/client/lastfm.js'; -import { MalojaData } from '../common/infrastructure/config/client/maloja.js'; -import { LibrefmData } from '../common/infrastructure/config/client/librefm.js'; -import { ListenBrainzData } from '../common/infrastructure/config/client/listenbrainz.js'; -import { KoitoData } from '../common/infrastructure/config/client/koito.js'; -import { TealData } from '../common/infrastructure/config/client/tealfm.js'; -import { RockSkyData } from '../common/infrastructure/config/client/rocksky.js'; +import { type KoitoSourceConfig } from '../common/infrastructure/config/source/koito.js'; +import { type TealSourceConfig } from '../common/infrastructure/config/source/tealfm.js'; +import { type RockskySourceConfig } from '../common/infrastructure/config/source/rocksky.js'; +import { type CommonSourceOptions } from '../common/infrastructure/config/source/index.js'; +import { type ExternalMetadataTerm, type PlayTransformHooks, type PlayTransformOptions } from '../common/infrastructure/Transform.js'; +import { type LibrefmSourceConfig } from '../common/infrastructure/config/source/librefm.js'; +import { type LastfmData } from '../common/infrastructure/config/client/lastfm.js'; +import { type MalojaData } from '../common/infrastructure/config/client/maloja.js'; +import { type LibrefmData } from '../common/infrastructure/config/client/librefm.js'; +import { type ListenBrainzData } from '../common/infrastructure/config/client/listenbrainz.js'; +import { type KoitoData } from '../common/infrastructure/config/client/koito.js'; +import { type TealData } from '../common/infrastructure/config/client/tealfm.js'; +import { type RockSkyData } from '../common/infrastructure/config/client/rocksky.js'; import { DEFAULT_RETENTION_DELETE_AFTER } from '../common/infrastructure/config/database.js'; type groupedNamedConfigs = {[key: string]: ParsedConfig[]}; diff --git a/src/backend/sources/SonosSource.ts b/src/backend/sources/SonosSource.ts index a17ce148..bd360712 100644 --- a/src/backend/sources/SonosSource.ts +++ b/src/backend/sources/SonosSource.ts @@ -1,21 +1,21 @@ import { EventEmitter } from "events"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { - FormatPlayObjectOptions, - InternalConfig, + type FormatPlayObjectOptions, + type InternalConfig, NO_DEVICE, NO_USER, - PlayerStateData, + type PlayerStateData, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus, + type ReportedPlayerStatus, } from "../common/infrastructure/Atomic.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; -import { SonosSourceConfig } from "../common/infrastructure/config/source/sonos.js"; +import { type SonosSourceConfig } from "../common/infrastructure/config/source/sonos.js"; import { SonosDevice, SonosManager } from '@svrooij/sonos'; -import { SonosState } from "@svrooij/sonos/lib/models/sonos-state.js"; +import { type SonosState } from "@svrooij/sonos/lib/models/sonos-state.js"; import { GroupTransportState } from "@svrooij/sonos/lib/models/transport-state.js"; -import { Track } from "@svrooij/sonos/lib/models/track.js"; +import { type Track } from "@svrooij/sonos/lib/models/track.js"; import { parseDurationFromTimestamp } from "../utils/TimeUtils.js"; import { FixedSizeList } from "fixed-size-list"; import { buildStatePlayerPlayIdententifyingInfo, hashObject, parseArrayFromMaybeString } from "../utils/StringUtils.js"; diff --git a/src/backend/sources/SpotifySource.ts b/src/backend/sources/SpotifySource.ts index d01e53d6..1d17b503 100644 --- a/src/backend/sources/SpotifySource.ts +++ b/src/backend/sources/SpotifySource.ts @@ -2,25 +2,25 @@ import dayjs, { Dayjs } from "dayjs"; import EventEmitter from "events"; import SpotifyWebApi from "spotify-web-api-node"; import request from 'superagent'; -import { BrainzMeta, PlayObject, PlayObjectMinimal, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, ScrobbleTsSOC, SpotifyMeta } from "../../core/Atomic.js"; +import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, type ScrobbleTsSOC, type SpotifyMeta } from "../../core/Atomic.js"; import { artistNamesToCredits, artistNameToCredit, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; import { hasUpstreamError, UpstreamError } from "../common/errors/UpstreamError.js"; import { DEFAULT_POLLING_INTERVAL, - FormatPlayObjectOptions, - InternalConfig, + type FormatPlayObjectOptions, + type InternalConfig, NO_DEVICE, NO_USER, - PaginatedListensTimeRangeOptions, - PaginatedTimeRangeListens, - PaginatedTimeRangeListensResult, - PlayerStateData, - ReportedPlayerStatus, - SourceData, - TimeRangeListensFetcher, + type PaginatedListensTimeRangeOptions, + type PaginatedTimeRangeListens, + type PaginatedTimeRangeListensResult, + type PlayerStateData, + type ReportedPlayerStatus, + type SourceData, + type TimeRangeListensFetcher, } from "../common/infrastructure/Atomic.js"; -import { SpotifySourceConfig } from "../common/infrastructure/config/source/spotify.js"; +import { type SpotifySourceConfig } from "../common/infrastructure/config/source/spotify.js"; import { parseRetryAfterSecsFromObj, sleep, @@ -30,7 +30,7 @@ import { writeFile } from '../utils/FSUtils.js'; import { readJson } from '../utils/DataUtils.js'; import { findCauseByFunc } from "../utils/ErrorUtils.js"; import { joinedUrl } from "../utils/NetworkUtils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import AlbumObjectSimplified = SpotifyApi.AlbumObjectSimplified; import ArtistObjectSimplified = SpotifyApi.ArtistObjectSimplified; import CurrentlyPlayingObject = SpotifyApi.CurrentlyPlayingObject; @@ -39,7 +39,6 @@ import TrackObjectFull = SpotifyApi.TrackObjectFull; import UserDevice = SpotifyApi.UserDevice; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; -import { metaFromJSON } from "@lukehagar/plexjs/sdk/models/operations/getrecentlyadded.js"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.js"; const scopes = ['user-read-recently-played', 'user-read-currently-playing', 'user-read-playback-state', 'user-read-playback-position']; diff --git a/src/backend/sources/SubsonicSource.ts b/src/backend/sources/SubsonicSource.ts index 5490306e..c7e08a82 100644 --- a/src/backend/sources/SubsonicSource.ts +++ b/src/backend/sources/SubsonicSource.ts @@ -3,19 +3,19 @@ import dayjs from "dayjs"; import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js"; import EventEmitter from "events"; import request, { Request } from 'superagent'; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; import { UpstreamError } from "../common/errors/UpstreamError.js"; -import { DEFAULT_RETRY_MULTIPLIER, FormatPlayObjectOptions, InternalConfig, PlayPlatformId } from "../common/infrastructure/Atomic.js"; -import { SubSonicSourceConfig } from "../common/infrastructure/config/source/subsonic.js"; -import { getSubsonicResponse, SubsonicResponse, SubsonicResponseCommon } from "../common/vendor/subsonic/interfaces.js"; +import { DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type InternalConfig, type PlayPlatformId } from "../common/infrastructure/Atomic.js"; +import { type SubSonicSourceConfig } from "../common/infrastructure/config/source/subsonic.js"; +import { getSubsonicResponse, type SubsonicResponse, type SubsonicResponseCommon } from "../common/vendor/subsonic/interfaces.js"; import { removeDuplicates } from "../utils.js"; import { findCauseByFunc } from "../utils/ErrorUtils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { SubsonicPlayerState } from './PlayerState/SubsonicPlayerState.js'; -import { PlayerStateOptions } from './PlayerState/AbstractPlayerState.js'; -import { Logger } from '@foxxmd/logging'; +import { type PlayerStateOptions } from './PlayerState/AbstractPlayerState.js'; +import { type Logger } from '@foxxmd/logging'; import { baseFormatPlayObj } from '../utils/PlayTransformUtils.js'; import { noRetryOnUpstreamError, tryApiCall } from '../utils/RequestUtils.js'; import { artistNameToCredit } from '../../core/StringUtils.js'; diff --git a/src/backend/sources/TealfmSource.ts b/src/backend/sources/TealfmSource.ts index d11117ef..d5a2a137 100644 --- a/src/backend/sources/TealfmSource.ts +++ b/src/backend/sources/TealfmSource.ts @@ -1,12 +1,12 @@ import EventEmitter from "events"; -import { PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.js"; import { isNodeNetworkException } from "../common/errors/NodeErrors.js"; -import { FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import MemorySource from "./MemorySource.js"; import { TealApiClient } from "../common/vendor/teal/TealApiClient.js"; import { recordToPlay } from "../common/vendor/teal/TealApiClient.js"; -import { TealSourceConfig } from "../common/infrastructure/config/source/tealfm.js"; +import { type TealSourceConfig } from "../common/infrastructure/config/source/tealfm.js"; import { ATProtoAppApiClient } from "../common/vendor/atproto/ATProtoAppApiClient.js"; import { parseArrayFromMaybeString } from "../utils/StringUtils.js"; diff --git a/src/backend/sources/VLCSource.ts b/src/backend/sources/VLCSource.ts index b55bd485..f142de1d 100644 --- a/src/backend/sources/VLCSource.ts +++ b/src/backend/sources/VLCSource.ts @@ -1,20 +1,20 @@ import { parseRegexSingle, parseToRegex } from "@foxxmd/regex-buddy-core"; import { EventEmitter } from "events"; import * as VLC from "vlc-client" -import { VlcMeta, VlcStatus } from "vlc-client/dist/Types.js"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type VlcMeta, type VlcStatus } from "vlc-client/dist/Types.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { - FormatPlayObjectOptions, - InternalConfig, - PlayerStateData, + type FormatPlayObjectOptions, + type InternalConfig, + type PlayerStateData, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus, + type ReportedPlayerStatus, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.js"; -import { VlcAudioMeta, VLCSourceConfig, PlayerState } from "../common/infrastructure/config/source/vlc.js"; +import { type VlcAudioMeta, type VLCSourceConfig, type PlayerState } from "../common/infrastructure/config/source/vlc.js"; import { isPortReachable } from "../utils/NetworkUtils.js"; import { firstNonEmptyStr } from "../utils/StringUtils.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; import { isDebugMode } from "../utils.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; diff --git a/src/backend/sources/WebScrobblerSource.ts b/src/backend/sources/WebScrobblerSource.ts index 036687b7..35be653f 100644 --- a/src/backend/sources/WebScrobblerSource.ts +++ b/src/backend/sources/WebScrobblerSource.ts @@ -1,26 +1,26 @@ import dayjs, { Dayjs } from "dayjs"; import EventEmitter from "events"; -import { PlayObject, PlayObjectMinimal, SOURCE_SOT } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal, SOURCE_SOT } from "../../core/Atomic.js"; import { - FormatPlayObjectOptions, - InternalConfig, + type FormatPlayObjectOptions, + type InternalConfig, NO_USER, - PlayerStateData, - PlayPlatformId, + type PlayerStateData, + type PlayPlatformId, REPORTED_PLAYER_STATUSES, - ReportedPlayerStatus, + type ReportedPlayerStatus, } from "../common/infrastructure/Atomic.js"; -import { WebScrobblerSourceConfig } from "../common/infrastructure/config/source/webscrobbler.js"; +import { type WebScrobblerSourceConfig } from "../common/infrastructure/config/source/webscrobbler.js"; import { - WebScrobblerHookEvent, - WebScrobblerPayload, - WebScrobblerSong + type WebScrobblerHookEvent, + type WebScrobblerPayload, + type WebScrobblerSong } from "../common/vendor/webscrobbler/interfaces.js"; import { joinedUrl } from "../utils/NetworkUtils.js"; import MemorySource from "./MemorySource.js"; -import { Logger } from "@foxxmd/logging"; -import { PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; +import { type Logger } from "@foxxmd/logging"; +import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.js"; import { NowPlayingPlayerState } from "./PlayerState/NowPlayingPlayerState.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { artistCreditToName, artistNameToCredit } from "../../core/StringUtils.js"; diff --git a/src/backend/sources/YTMusicSource.ts b/src/backend/sources/YTMusicSource.ts index 291fe818..183f64ad 100644 --- a/src/backend/sources/YTMusicSource.ts +++ b/src/backend/sources/YTMusicSource.ts @@ -1,23 +1,23 @@ import dayjs, { Dayjs } from "dayjs"; import EventEmitter from "events"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; -import { FormatPlayObjectOptions, InternalConfig } from "../common/infrastructure/Atomic.js"; -import { YTMusicSourceConfig } from "../common/infrastructure/config/source/ytmusic.js"; -import { Innertube, UniversalCache, Parser, YTNodes, ApiResponse, IBrowseResponse, Log, SessionOptions } from 'youtubei.js'; -import { GenerateAuthUrlOpts, OAuth2Client } from 'google-auth-library'; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; +import { type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.js"; +import { type YTMusicSourceConfig } from "../common/infrastructure/config/source/ytmusic.js"; +import { Innertube, UniversalCache, Parser, YTNodes, type ApiResponse, type IBrowseResponse, Log, type SessionOptions } from 'youtubei.js'; +import { type GenerateAuthUrlOpts, OAuth2Client } from 'google-auth-library'; import {resolve} from 'path'; import { isDebugMode, parseBool, sleep } from "../utils.js"; import { formatNumber } from '../../core/DataUtils.js'; import { getPlaysDiff, humanReadableDiff, - PlayOrderChangeType, - PlayOrderConsistencyResults, + type PlayOrderChangeType, + type PlayOrderConsistencyResults, playsAreAddedOnly, playsAreBumpedOnly, playsAreSortConsistent } from "../utils/PlayComparisonUtils.js"; -import AbstractSource, { RecentlyPlayedOptions } from "./AbstractSource.js"; +import AbstractSource, { type RecentlyPlayedOptions } from "./AbstractSource.js"; import { artistNamesToCredits, buildTrackString, truncateStringToLength } from "../../core/StringUtils.js"; import { joinedUrl } from "../utils/NetworkUtils.js"; import { todayAwareFormat } from "../../core/TimeUtils.js"; diff --git a/src/backend/sources/YandexMusicBridgeSource.ts b/src/backend/sources/YandexMusicBridgeSource.ts index 28d92261..a0bb23fc 100644 --- a/src/backend/sources/YandexMusicBridgeSource.ts +++ b/src/backend/sources/YandexMusicBridgeSource.ts @@ -1,17 +1,17 @@ import { EventEmitter } from "events"; import request from 'superagent'; import { MemoryPositionalSource } from "./MemoryPositionalSource.js"; -import { RecentlyPlayedOptions } from "./AbstractSource.js"; -import { PlayObject, PlayObjectMinimal, URLData } from "../../core/Atomic.js"; +import { type RecentlyPlayedOptions } from "./AbstractSource.js"; +import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.js"; import { - InternalConfig, + type InternalConfig, NO_DEVICE, NO_USER, - PlayerStateData, - PlayerStateDataMaybePlay, + type PlayerStateData, + type PlayerStateDataMaybePlay, REPORTED_PLAYER_STATUSES, } from "../common/infrastructure/Atomic.js"; -import { YandexMusicBridgeSourceConfig } from "../common/infrastructure/config/source/ymbridge.js"; +import { type YandexMusicBridgeSourceConfig } from "../common/infrastructure/config/source/ymbridge.js"; import { isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../utils/NetworkUtils.js"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.js"; import { UpstreamError } from "../common/errors/UpstreamError.js"; diff --git a/src/backend/sources/ingressNotifiers/IngressNotifier.ts b/src/backend/sources/ingressNotifiers/IngressNotifier.ts index c82d3f1f..68b360f8 100644 --- a/src/backend/sources/ingressNotifiers/IngressNotifier.ts +++ b/src/backend/sources/ingressNotifiers/IngressNotifier.ts @@ -1,6 +1,6 @@ -import { childLogger, Logger } from '@foxxmd/logging'; -import { Request } from "express"; -import { RemoteIdentityParts } from "../../common/infrastructure/Atomic.js"; +import { childLogger, type Logger } from '@foxxmd/logging'; +import { type Request } from "express"; +import { type RemoteIdentityParts } from "../../common/infrastructure/Atomic.js"; import { remoteHostIdentifiers, remoteHostStr } from "../../utils.js"; diff --git a/src/backend/sources/ingressNotifiers/LFMEndpointNotifier.ts b/src/backend/sources/ingressNotifiers/LFMEndpointNotifier.ts index e46e5f32..0ea45166 100644 --- a/src/backend/sources/ingressNotifiers/LFMEndpointNotifier.ts +++ b/src/backend/sources/ingressNotifiers/LFMEndpointNotifier.ts @@ -1,8 +1,8 @@ -import { Logger } from "@foxxmd/logging"; -import { Request } from "express"; +import { type Logger } from "@foxxmd/logging"; +import { type Request } from "express"; import { parseIdentifiersFromRequest } from "../EndpointLastfmSource.js"; import { IngressNotifier } from "./IngressNotifier.js"; -import { LastFMScrobbleRequestPayload } from "../../common/vendor/LastfmApiClient.js"; +import { type LastFMScrobbleRequestPayload } from "../../common/vendor/LastfmApiClient.js"; export class LFMEndpointNotifier extends IngressNotifier { diff --git a/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts b/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts index 0bd8e95c..022711b5 100644 --- a/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts +++ b/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts @@ -1,5 +1,5 @@ -import { Logger } from "@foxxmd/logging"; -import { Request } from "express"; +import { type Logger } from "@foxxmd/logging"; +import { type Request } from "express"; import { EndpointListenbrainzSource, parseIdentifiersFromRequest } from "../EndpointListenbrainzSource.js"; import { IngressNotifier } from "./IngressNotifier.js"; diff --git a/src/backend/sources/ingressNotifiers/WebhookNotifier.ts b/src/backend/sources/ingressNotifiers/WebhookNotifier.ts index 7de2d58a..8d71a07d 100644 --- a/src/backend/sources/ingressNotifiers/WebhookNotifier.ts +++ b/src/backend/sources/ingressNotifiers/WebhookNotifier.ts @@ -1,5 +1,5 @@ -import { Logger } from "@foxxmd/logging"; -import { Request } from "express"; +import { type Logger } from "@foxxmd/logging"; +import { type Request } from "express"; import path from "path"; import { IngressNotifier } from "./IngressNotifier.js"; diff --git a/src/backend/tasks/retentionCleanup.ts b/src/backend/tasks/retentionCleanup.ts index cb623b21..ace76a85 100644 --- a/src/backend/tasks/retentionCleanup.ts +++ b/src/backend/tasks/retentionCleanup.ts @@ -1,4 +1,4 @@ -import { childLogger, Logger } from '@foxxmd/logging'; +import { childLogger, type Logger } from '@foxxmd/logging'; import { AsyncTask } from "toad-scheduler"; import ScrobbleSources from "../sources/ScrobbleSources.js"; import ScrobbleClients from '../scrobblers/ScrobbleClients.js'; diff --git a/src/backend/tests/component/transformers.test.ts b/src/backend/tests/component/transformers.test.ts index 41dc1bb9..f1052722 100644 --- a/src/backend/tests/component/transformers.test.ts +++ b/src/backend/tests/component/transformers.test.ts @@ -2,24 +2,24 @@ import { loggerTest, loggerDebug, childLogger } from "@foxxmd/logging"; import chai, { assert, expect } from 'chai'; import asPromised from 'chai-as-promised'; import { after, before, describe, it } from 'mocha'; -import AbstractComponent, { AbstractComponentConfig } from "../../common/AbstractComponent.js"; +import AbstractComponent, { type AbstractComponentConfig } from "../../common/AbstractComponent.js"; -import { ConditionalSearchAndReplaceRegExp, STAGE_TYPES, STAGE_TYPES_METADATA, STAGE_TYPES_USER, TRANSFORM_HOOK } from "../../common/infrastructure/Transform.js"; +import { type ConditionalSearchAndReplaceRegExp, STAGE_TYPES, STAGE_TYPES_METADATA, STAGE_TYPES_USER, TRANSFORM_HOOK } from "../../common/infrastructure/Transform.js"; import { isConditionalSearchAndReplace } from "../../utils/PlayTransformUtils.js"; import { generateArtistsStr, generatePlay } from "../../../core/PlayTestUtils.js"; -import { WebhookPayload } from "../../common/infrastructure/config/health/webhooks.js"; +import { type WebhookPayload } from "../../common/infrastructure/config/health/webhooks.js"; import { findCauseByMessage } from "../../utils/ErrorUtils.js"; import NativeTransformer from "../../common/transforms/NativeTransformer.js"; import { initMemoryCache } from "../../common/Cache.js"; import { Cacheable } from "cacheable"; -import { TransformerCommonConfig } from "../../../core/Atomic.js"; +import { type TransformerCommonConfig } from "../../../core/Atomic.js"; import TransformerManager from "../../common/transforms/TransformerManager.js"; import { transientCache } from "../utils/TransientTestUtils.js"; import dayjs from "dayjs"; import clone from "clone"; import { artistCreditsToNames, artistNamesToCredits } from "../../../core/StringUtils.js"; -import { COMPONENT_STATE, ComponentState } from "../../../core/Api.js"; +import { COMPONENT_STATE, type ComponentState } from "../../../core/Api.js"; chai.use(asPromised); diff --git a/src/backend/tests/database/drizzle.test.ts b/src/backend/tests/database/drizzle.test.ts index f2cfaf9a..78a5d043 100644 --- a/src/backend/tests/database/drizzle.test.ts +++ b/src/backend/tests/database/drizzle.test.ts @@ -1,6 +1,6 @@ import chai, { assert, expect } from 'chai'; import asPromised from 'chai-as-promised'; -import { getDb, migrateDb, getDbMigrationStatus, getMigratedDb, DbConcrete } from '../../common/database/drizzle/drizzleUtils.js'; +import { getDb, migrateDb, getDbMigrationStatus, getMigratedDb, type DbConcrete } from '../../common/database/drizzle/drizzleUtils.js'; import withLocalTmpDir from 'with-local-tmp-dir'; import { components, playInputs, plays, queueStates } from '../../common/database/drizzle/schema/schema.js'; import dayjs from 'dayjs'; @@ -11,12 +11,12 @@ import * as path from 'path'; import * as fs from 'fs/promises'; import { projectDir } from '../../common/index.js'; import { fixtureCreateComponent, fixtureCreateInput, fixtureCreatePlay } from '../utils/databaseFixtures.js'; -import { DrizzlePlayRepository, RepositoryCreatePlayOpts } from '../../common/database/drizzle/repositories/PlayRepository.js'; +import { DrizzlePlayRepository, type RepositoryCreatePlayOpts } from '../../common/database/drizzle/repositories/PlayRepository.js'; import { generatePlayWithLifecycle, generateRandomObj } from '../../../core/tests/utils/fixtures.js'; import { formatNumber, generateArray } from '../../../core/DataUtils.js'; import { objectsEqual } from '../../utils/DataUtils.js'; import { eq, sql } from 'drizzle-orm'; -import { PlaySelect } from '../../common/database/drizzle/drizzleTypes.js'; +import { type PlaySelect } from '../../common/database/drizzle/drizzleTypes.js'; import { loggerDebug } from '@foxxmd/logging'; import { transientDb } from '../utils/TransientTestUtils.js'; import { getRoot } from '../../ioc.js'; diff --git a/src/backend/tests/database/testAppMigrations/001_testFoo.ts b/src/backend/tests/database/testAppMigrations/001_testFoo.ts index d28fc038..b7d28a38 100644 --- a/src/backend/tests/database/testAppMigrations/001_testFoo.ts +++ b/src/backend/tests/database/testAppMigrations/001_testFoo.ts @@ -1,6 +1,6 @@ import type { SqliteDatabase, Migration } from 'sqlite-up'; import { DrizzlePlayRepository } from '../../../common/database/drizzle/repositories/PlayRepository.js'; -import { MigrateBaseContext } from '../../../common/database/appMigrator.js'; +import { type MigrateBaseContext } from '../../../common/database/appMigrator.js'; export const up: Migration['up'] = async (db: SqliteDatabase, ctx): Promise => { diff --git a/src/backend/tests/jellyfin/jellyfin.test.ts b/src/backend/tests/jellyfin/jellyfin.test.ts index 2ca248fb..1ddedd72 100644 --- a/src/backend/tests/jellyfin/jellyfin.test.ts +++ b/src/backend/tests/jellyfin/jellyfin.test.ts @@ -2,11 +2,11 @@ import { loggerTest } from "@foxxmd/logging"; import { assert, expect } from 'chai'; import EventEmitter from "events"; import { describe, it } from 'mocha'; -import { JsonPlayObject, PlayMeta, PlayObject } from "../../../core/Atomic.js"; +import { type JsonPlayObject, type PlayMeta, type PlayObject } from "../../../core/Atomic.js"; import JellyfinApiSource from "../../sources/JellyfinApiSource.js"; import validSession from './validSession.json' with { type: "json" }; -import { JellyApiData } from "../../common/infrastructure/config/source/jellyfin.js"; +import { type JellyApiData } from "../../common/infrastructure/config/source/jellyfin.js"; import { generatePlay } from "../../../core/PlayTestUtils.js"; import { faker, fakerJA } from "@faker-js/faker"; import { @@ -17,7 +17,7 @@ import { } from "@jellyfin/sdk/lib/generated-client/index.js"; // @ts-expect-error weird typings? import { getImageApi } from "@jellyfin/sdk/lib/utils/api/index.js"; -import { PlayerStateDataMaybePlay } from "../../common/infrastructure/Atomic.js"; +import { type PlayerStateDataMaybePlay } from "../../common/infrastructure/Atomic.js"; const dataAsFixture = (data: any): TestFixture => { return data as TestFixture; diff --git a/src/backend/tests/listenbrainz/listenbrainz.test.ts b/src/backend/tests/listenbrainz/listenbrainz.test.ts index fb7ccedf..23d4a4c0 100644 --- a/src/backend/tests/listenbrainz/listenbrainz.test.ts +++ b/src/backend/tests/listenbrainz/listenbrainz.test.ts @@ -3,13 +3,13 @@ import { assert, expect } from 'chai'; import dayjs from "dayjs"; import { describe, it } from 'mocha'; import { http, HttpResponse } from "msw"; -import { PlayObject } from "../../../core/Atomic.js"; +import { type PlayObject } from "../../../core/Atomic.js"; import { UpstreamError } from "../../common/errors/UpstreamError.js"; import { ListenbrainzApiClient, listenResponseToPlay, listenPayloadToPlay } from "../../common/vendor/ListenbrainzApiClient.js"; import { playToListenPayload } from '../../common/vendor/listenbrainz/lzUtils.js'; -import { ListenPayload, ListenResponse, SubmitPayload } from '../../common/vendor/listenbrainz/interfaces.js'; -import { ExpectedResults } from "../utils/interfaces.js"; +import { type ListenPayload, type ListenResponse, type SubmitPayload } from '../../common/vendor/listenbrainz/interfaces.js'; +import { type ExpectedResults } from "../utils/interfaces.js"; import { withRequestInterception } from "../utils/networking.js"; import artistWithProperJoiner from './correctlyMapped/artistProperHasJoinerInName.json' with { type: "json" }; // correct mappings diff --git a/src/backend/tests/musicbrainz/musicbrainz.test.ts b/src/backend/tests/musicbrainz/musicbrainz.test.ts index e7470aac..a24322f9 100644 --- a/src/backend/tests/musicbrainz/musicbrainz.test.ts +++ b/src/backend/tests/musicbrainz/musicbrainz.test.ts @@ -5,16 +5,16 @@ import asPromised from 'chai-as-promised'; import { after, before, describe, it } from 'mocha'; import { initMemoryCache } from "../../common/Cache.js"; import { Cacheable } from "cacheable"; -import MusicbrainzTransformer, { DEFAULT_SEARCHTYPE_ORDER, MusicbrainzTransformerDataStage } from "../../common/transforms/MusicbrainzTransformer.js"; -import { DEFAULT_MISSING_TYPES, PlayObject } from "../../../core/Atomic.js"; +import MusicbrainzTransformer, { DEFAULT_SEARCHTYPE_ORDER, type MusicbrainzTransformerDataStage } from "../../common/transforms/MusicbrainzTransformer.js"; +import { DEFAULT_MISSING_TYPES, type PlayObject } from "../../../core/Atomic.js"; import { projectDir } from '../../common/index.js'; import path from 'path'; -import { MusicbrainzApiConfigData } from '../../common/infrastructure/Atomic.js'; +import { type MusicbrainzApiConfigData } from '../../common/infrastructure/Atomic.js'; import { MockNetworkError, withRequestInterception } from '../utils/networking.js'; import { http, HttpResponse, delay } from "msw"; import { generatePlay, withBrainz } from '../../../core/PlayTestUtils.js'; import { intersect, missingMbidTypes } from '../../utils.js'; -import { CoverArtApiClient, CoverArtApiConfig } from '../../common/vendor/musicbrainz/CoverArtApiClient.js'; +import { CoverArtApiClient, type CoverArtApiConfig } from '../../common/vendor/musicbrainz/CoverArtApiClient.js'; import { artistCreditToName, artistNamesToCredits, artistNameToCredit } from '../../../core/StringUtils.js'; const envPath = path.join(projectDir, '.env'); diff --git a/src/backend/tests/musiccast/musiccast.test.ts b/src/backend/tests/musiccast/musiccast.test.ts index 9ca984aa..ba7465e7 100644 --- a/src/backend/tests/musiccast/musiccast.test.ts +++ b/src/backend/tests/musiccast/musiccast.test.ts @@ -5,7 +5,7 @@ import dayjs from "dayjs"; import { describe, it, before, after } from 'mocha'; import { http, HttpResponse } from "msw"; import { withRequestInterception } from "../utils/networking.js"; -import { MusicCastData } from "../../common/infrastructure/config/source/musiccast.js"; +import { type MusicCastData } from "../../common/infrastructure/config/source/musiccast.js"; import { MusicCastSource } from "../../sources/MusicCastSource.js"; import netInterceptor from "@gr2m/net-interceptor"; import { REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; diff --git a/src/backend/tests/player/player.test.ts b/src/backend/tests/player/player.test.ts index dff27917..bd9bc03d 100644 --- a/src/backend/tests/player/player.test.ts +++ b/src/backend/tests/player/player.test.ts @@ -7,7 +7,7 @@ import { CALCULATED_PLAYER_STATUSES, NO_DEVICE, NO_USER, - PlayerStateDataMaybePlay, + type PlayerStateDataMaybePlay, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID } from "../../common/infrastructure/Atomic.js"; diff --git a/src/backend/tests/plays/playParsing.test.ts b/src/backend/tests/plays/playParsing.test.ts index 1b1b53cf..2f78c727 100644 --- a/src/backend/tests/plays/playParsing.test.ts +++ b/src/backend/tests/plays/playParsing.test.ts @@ -6,7 +6,7 @@ import { generateArtistsStr, } from "../../../core/PlayTestUtils.js"; import { parseArtistCredits, parseCredits, parseTrackCredits, uniqueNormalizedStrArr } from "../../utils/StringUtils.js"; import testData from '../utils/playTestData.json' with { type: "json" }; import { intersect } from "../../utils.js"; -import { ExpectedResults } from "../utils/interfaces.js"; +import { type ExpectedResults } from "../utils/interfaces.js"; interface PlayTestFixture { caseHints: string[] diff --git a/src/backend/tests/plex/plex.test.ts b/src/backend/tests/plex/plex.test.ts index 5da5c603..00d3814a 100644 --- a/src/backend/tests/plex/plex.test.ts +++ b/src/backend/tests/plex/plex.test.ts @@ -2,14 +2,14 @@ import { loggerTest } from "@foxxmd/logging"; import { assert, expect } from 'chai'; import EventEmitter from "events"; import { describe, it } from 'mocha'; -import { PlayMeta } from "../../../core/Atomic.js"; +import { type PlayMeta } from "../../../core/Atomic.js"; import validSessionResponse from './validSession.json' with { type: "json" }; import { generatePlay } from "../../../core/PlayTestUtils.js"; -import { PlayerStateDataMaybePlay } from "../../common/infrastructure/Atomic.js"; -import { PlexApiData } from "../../common/infrastructure/config/source/plex.js"; +import { type PlayerStateDataMaybePlay } from "../../common/infrastructure/Atomic.js"; +import { type PlexApiData } from "../../common/infrastructure/config/source/plex.js"; import PlexApiSource from "../../sources/PlexApiSource.js"; -import { GetSessionsMetadata } from "@lukehagar/plexjs/sdk/models/operations/getsessions.js"; +import { type GetSessionsMetadata } from "@lukehagar/plexjs/sdk/models/operations/getsessions.js"; const validSession = validSessionResponse.object.mediaContainer.metadata[0]; diff --git a/src/backend/tests/scrobbler/TestScrobbler.ts b/src/backend/tests/scrobbler/TestScrobbler.ts index d25b466e..96afbd00 100644 --- a/src/backend/tests/scrobbler/TestScrobbler.ts +++ b/src/backend/tests/scrobbler/TestScrobbler.ts @@ -1,15 +1,15 @@ import EventEmitter from "events"; import request from "superagent"; -import { PlayObject } from "../../../core/Atomic.js"; +import { type PlayObject } from "../../../core/Atomic.js"; import { Notifiers } from "../../notifier/Notifiers.js"; import AbstractScrobbleClient from "../../scrobblers/AbstractScrobbleClient.js"; -import { CommonClientConfig, CommonClientOptions, NowPlayingOptions } from "../../common/infrastructure/config/client/index.js"; +import { type CommonClientConfig, type CommonClientOptions, type NowPlayingOptions } from "../../common/infrastructure/config/client/index.js"; import clone from "clone"; -import { TimeRangeListensFetcher } from "../../common/infrastructure/Atomic.js"; +import { type TimeRangeListensFetcher } from "../../common/infrastructure/Atomic.js"; import { loggerNoop } from "../../common/MaybeLogger.js"; -import { DrizzlePlayRepository, RepositoryCreatePlayOpts } from "../../common/database/drizzle/repositories/PlayRepository.js"; +import { DrizzlePlayRepository, type RepositoryCreatePlayOpts } from "../../common/database/drizzle/repositories/PlayRepository.js"; import { DrizzleQueueRepository } from "../../common/database/drizzle/repositories/QueueRepository.js"; -import { PlaySelect } from "../../common/database/drizzle/drizzleTypes.js"; +import { type PlaySelect } from "../../common/database/drizzle/drizzleTypes.js"; import { loggerDebug } from "@foxxmd/logging"; import dayjs from "dayjs"; diff --git a/src/backend/tests/scrobbler/scrobblers.test.ts b/src/backend/tests/scrobbler/scrobblers.test.ts index 9dc39fb9..8bc4d111 100644 --- a/src/backend/tests/scrobbler/scrobblers.test.ts +++ b/src/backend/tests/scrobbler/scrobblers.test.ts @@ -6,7 +6,7 @@ import dayjs from "dayjs"; import { after, before, describe, it } from 'mocha'; import { http, HttpResponse } from 'msw'; import pEvent from 'p-event'; -import { CLIENT_INGRESS_QUEUE, PlayObject, SOURCE_SOT } from "../../../core/Atomic.js"; +import { CLIENT_INGRESS_QUEUE, type PlayObject, SOURCE_SOT } from "../../../core/Atomic.js"; import { sleep, sortByOldestPlayDate } from "../../utils.js"; import { genGroupIdStr } from '../../../core/PlayUtils.js'; import mixedDuration from '../plays/mixedDuration.json' with { type: 'json' }; @@ -16,7 +16,7 @@ import { generatePlay, generatePlayPlatformId, generatePlays, generateSourcePlay import MockDate from 'mockdate'; import { NowPlayingScrobbler, TestAuthScrobbler, TestScrobbler } from "./TestScrobbler.js"; -import { PaginatedTimeRangeOptions, PlayPlatformId, REFRESH_STALE_DEFAULT } from '../../common/infrastructure/Atomic.js'; +import { type PaginatedTimeRangeOptions, type PlayPlatformId, REFRESH_STALE_DEFAULT } from '../../common/infrastructure/Atomic.js'; import { shuffleArray } from '../../utils/DataUtils.js'; import { DEFAULT_CONSOLIDATE_DURATION, DEFAULT_GROUP_DURATION, groupPlaysToTimeRanges } from '../../utils/ListenFetchUtils.js'; import { asPlay } from '../../../core/PlayMarshalUtils.js'; @@ -24,7 +24,7 @@ import { nanoid } from 'nanoid'; import { getRoot } from '../../ioc.js'; import { transientCache } from '../utils/TransientTestUtils.js'; import { generateArray } from '../../../core/DataUtils.js'; -import { RepositoryCreatePlayOpts } from '../../common/database/drizzle/repositories/PlayRepository.js'; +import { type RepositoryCreatePlayOpts } from '../../common/database/drizzle/repositories/PlayRepository.js'; import { fixtureCreatePlay } from '../utils/databaseFixtures.js'; import { isAbortError } from 'abort-controller-x'; import { artistNamesToCredits } from '../../../core/StringUtils.js'; diff --git a/src/backend/tests/sonos/sonos.test.ts b/src/backend/tests/sonos/sonos.test.ts index 4fa5e5e3..2962c8d2 100644 --- a/src/backend/tests/sonos/sonos.test.ts +++ b/src/backend/tests/sonos/sonos.test.ts @@ -2,7 +2,7 @@ import { loggerTest, loggerDebug } from "@foxxmd/logging"; import { assert, expect } from 'chai'; import EventEmitter from "events"; import { describe, it } from 'mocha'; -import { SonosData } from "../../common/infrastructure/config/source/sonos.js"; +import { type SonosData } from "../../common/infrastructure/config/source/sonos.js"; import { SonosSource } from "../../sources/SonosSource.js"; import * as dotenv from 'dotenv'; import path from 'path'; diff --git a/src/backend/tests/source/TestSource.ts b/src/backend/tests/source/TestSource.ts index e17009a7..181bc266 100644 --- a/src/backend/tests/source/TestSource.ts +++ b/src/backend/tests/source/TestSource.ts @@ -1,4 +1,4 @@ -import { PlayObject } from "../../../core/Atomic.js"; +import { type PlayObject } from "../../../core/Atomic.js"; import AbstractSource from "../../sources/AbstractSource.js"; import { MemoryPositionalSource } from "../../sources/MemoryPositionalSource.js"; import MemorySource from "../../sources/MemorySource.js"; diff --git a/src/backend/tests/source/source.test.ts b/src/backend/tests/source/source.test.ts index 8b04678c..6ecfd57b 100644 --- a/src/backend/tests/source/source.test.ts +++ b/src/backend/tests/source/source.test.ts @@ -5,7 +5,7 @@ import EventEmitter from "events"; import { after, before, describe, it } from 'mocha'; import pEvent from "p-event"; import clone from 'clone'; -import { PlayObject } from "../../../core/Atomic.js"; +import { type PlayObject } from "../../../core/Atomic.js"; import { generatePlay, generatePlayerStateData, generatePlays, normalizePlays } from "../../../core/PlayTestUtils.js"; import { TestMemoryPositionalSource, TestMemorySource, TestSource } from "./TestSource.js"; import spotifyPayload from '../plays/spotifyCurrentPlaybackState.json' with { type: "json" }; @@ -13,12 +13,12 @@ import SpotifySource from "../../sources/SpotifySource.js"; import MockDate from 'mockdate'; import dayjs, { Dayjs } from "dayjs"; import { REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.js"; -import { SourceConfig } from "../../common/infrastructure/config/source/sources.js"; +import { type SourceConfig } from "../../common/infrastructure/config/source/sources.js"; import MemorySource from "../../sources/MemorySource.js"; import { RT_TICK_DEFAULT, setRtTick } from "../../sources/PlayerState/RealtimePlayer.js"; import { sleep } from "../../utils.js"; import DeezerInternalSource from "../../sources/DeezerInternalSource.js"; -import { DeezerInternalSourceOptions } from "../../common/infrastructure/config/source/deezer.js"; +import { type DeezerInternalSourceOptions } from "../../common/infrastructure/config/source/deezer.js"; import { artistCreditsToNames } from "../../../core/StringUtils.js"; chai.use(asPromised); diff --git a/src/backend/tests/utils/databaseFixtures.ts b/src/backend/tests/utils/databaseFixtures.ts index a53eb7f9..2660e1bc 100644 --- a/src/backend/tests/utils/databaseFixtures.ts +++ b/src/backend/tests/utils/databaseFixtures.ts @@ -1,10 +1,10 @@ import { generatePlay } from "../../../core/PlayTestUtils.js"; import { generateRandomObj } from "../../../core/tests/utils/fixtures.js"; import { generateComponentEntity, generateInputEntity, generatePlayEntity } from "../../common/database/drizzle/entityUtils.js"; -import { PlayNew } from "../../common/database/drizzle/drizzleTypes.js"; -import { PlayInputNew } from "../../common/database/drizzle/drizzleTypes.js"; -import { ComponentNew } from "../../common/database/drizzle/drizzleTypes.js"; -import { ObjectPlayData } from "../../../core/Atomic.js"; +import { type PlayNew } from "../../common/database/drizzle/drizzleTypes.js"; +import { type PlayInputNew } from "../../common/database/drizzle/drizzleTypes.js"; +import { type ComponentNew } from "../../common/database/drizzle/drizzleTypes.js"; +import { type ObjectPlayData } from "../../../core/Atomic.js"; export const fixtureCreateComponent = (data: Partial = {}): ComponentNew => { return generateComponentEntity( diff --git a/src/backend/tests/utils/networking.ts b/src/backend/tests/utils/networking.ts index 8fe3ab21..f64b026a 100644 --- a/src/backend/tests/utils/networking.ts +++ b/src/backend/tests/utils/networking.ts @@ -1,5 +1,5 @@ -import { setupServer, SetupServer } from 'msw/node'; -import { NodeNetworkErrorCode, NodeNetworkException } from "../../common/errors/NodeErrors.js"; +import { setupServer, type SetupServer } from 'msw/node'; +import { type NodeNetworkErrorCode, type NodeNetworkException } from "../../common/errors/NodeErrors.js"; export class MockNetworkError extends Error implements NodeNetworkException { diff --git a/src/backend/tests/utils/playComparisons.test.ts b/src/backend/tests/utils/playComparisons.test.ts index 57a4dd0c..cabce2c9 100644 --- a/src/backend/tests/utils/playComparisons.test.ts +++ b/src/backend/tests/utils/playComparisons.test.ts @@ -3,7 +3,7 @@ import clone from "clone"; import { describe, it } from 'mocha'; import { genericSourcePlayMatch, playsAreAddedOnly, playsAreBumpedOnly, playsAreSortConsistent } from "../../utils/PlayComparisonUtils.js"; import { generatePlay, generatePlays } from "../../../core/PlayTestUtils.js"; -import { PlayObject } from "../../../core/Atomic.js"; +import { type PlayObject } from "../../../core/Atomic.js"; const newPlay = generatePlay(); diff --git a/src/backend/tests/ytm/ytm.test.ts b/src/backend/tests/ytm/ytm.test.ts index 115284a2..01bd21de 100644 --- a/src/backend/tests/ytm/ytm.test.ts +++ b/src/backend/tests/ytm/ytm.test.ts @@ -7,10 +7,10 @@ import YTMusicSource, { ytiHistoryResponseFromShelfToPlays, ytiHistoryResponseTo import ytHistoryRes from './ytres.json' with {type: 'json'}; import EventEmitter from "events"; import { generatePlay, generatePlays, normalizePlays } from '../../../core/PlayTestUtils.js'; -import { YTMusicSourceConfig } from '../../common/infrastructure/config/source/ytmusic.js'; +import { type YTMusicSourceConfig } from '../../common/infrastructure/config/source/ytmusic.js'; import { sleep } from '../../utils.js'; import dayjs from 'dayjs'; -import { ApiResponse } from 'youtubei.js'; +import { type ApiResponse } from 'youtubei.js'; chai.use(asPromised); diff --git a/src/backend/utils.ts b/src/backend/utils.ts index 56711494..dec3547f 100644 --- a/src/backend/utils.ts +++ b/src/backend/utils.ts @@ -1,22 +1,22 @@ import backoffStrategies from '@kenyip/backoff-strategies'; import { replaceResultTransformer, stripIndentTransformer, TemplateTag, trimResultTransformer } from 'common-tags'; import dayjs, { Dayjs } from 'dayjs'; -import { Duration } from "dayjs/plugin/duration.js"; +import { type Duration } from "dayjs/plugin/duration.js"; import utc from 'dayjs/plugin/utc.js'; -import { Request } from "express"; +import { type Request } from "express"; // https://github.com/jfromaniello/url-join#in-nodejs import { TimeoutError, WebapiError } from "spotify-web-api-node/src/response-error.js"; -import { DEFAULT_MISSING_MBIDS_TYPES, DEFAULT_MISSING_TYPES, MissingMbidType, PlayObject } from "../core/Atomic.js"; +import { DEFAULT_MISSING_MBIDS_TYPES, DEFAULT_MISSING_TYPES, type MissingMbidType, type PlayObject } from "../core/Atomic.js"; import { asPlayerStateDataMaybePlay, NO_DEVICE, NO_USER, - PlayerStateDataMaybePlay, - PlayPlatformId, - ProgressAwarePlayObject, - RegExResult, - RemoteIdentityParts, - ScrobbleThresholdResult, + type PlayerStateDataMaybePlay, + type PlayPlatformId, + type ProgressAwarePlayObject, + type RegExResult, + type RemoteIdentityParts, + type ScrobbleThresholdResult, } from "./common/infrastructure/Atomic.js"; import { genGroupIdStr } from '../core/PlayUtils.js'; diff --git a/src/backend/utils/AsyncUtils.ts b/src/backend/utils/AsyncUtils.ts index 02bc77ad..2f8a2f50 100644 --- a/src/backend/utils/AsyncUtils.ts +++ b/src/backend/utils/AsyncUtils.ts @@ -1,4 +1,4 @@ -import pMap, { Mapper, Options, pMapIterable } from "p-map"; +import pMap, { type Mapper, type Options, pMapIterable } from "p-map"; import { sleep } from "../utils.js"; /** https://stackoverflow.com/a/63795192/1469797 */ diff --git a/src/backend/utils/DataUtils.ts b/src/backend/utils/DataUtils.ts index 12d0ca84..e6196019 100644 --- a/src/backend/utils/DataUtils.ts +++ b/src/backend/utils/DataUtils.ts @@ -2,7 +2,7 @@ import JSON5 from "json5"; import { constants, promises } from "fs"; import { MaybeLogger } from '../common/MaybeLogger.js'; import { deepEqual } from 'fast-equals'; -import { CommonConfigPrimitives } from "../common/infrastructure/config/common.js"; +import { type CommonConfigPrimitives } from "../common/infrastructure/config/common.js"; import { parseBoolStrict, removeUndefinedKeys } from "../utils.js"; import { nonEmptyStringOrDefault } from "../../core/StringUtils.js"; diff --git a/src/backend/utils/ListenFetchUtils.ts b/src/backend/utils/ListenFetchUtils.ts index 1ee078a1..eb874f4f 100644 --- a/src/backend/utils/ListenFetchUtils.ts +++ b/src/backend/utils/ListenFetchUtils.ts @@ -1,8 +1,8 @@ -import { childLogger, Logger } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import dayjs, { Dayjs } from "dayjs"; -import { Duration } from "dayjs/plugin/duration.js"; -import { PlayObject, UnixTimestamp } from "../../core/Atomic.js"; -import { CursorType, hasPagelessTimeRangeListens, hasPaginatedTimeRangeListens, PagelessListensTimeRangeOptions, PagelessTimeRangeListens, PagelessTimeRangeListensResult, PaginatedListensTimeRangeOptions, PaginatedTimeRangeCommonOptions, PaginatedTimeRangeListens, PaginatedTimeRangeListensResult, PaginatedTimeRangeOptions, PaginatedTimeRangeSource, REFRESH_STALE_DEFAULT, TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; +import { type Duration } from "dayjs/plugin/duration.js"; +import { type PlayObject, type UnixTimestamp } from "../../core/Atomic.js"; +import { type CursorType, hasPagelessTimeRangeListens, hasPaginatedTimeRangeListens, type PagelessListensTimeRangeOptions, type PagelessTimeRangeListens, type PagelessTimeRangeListensResult, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeCommonOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult, type PaginatedTimeRangeOptions, type PaginatedTimeRangeSource, REFRESH_STALE_DEFAULT, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.js"; import { loggerNoop } from '../common/MaybeLogger.js'; import { MaybeLogger } from '../common/MaybeLogger.js'; import { sortByOldestPlayDate } from "../utils.js"; diff --git a/src/backend/utils/MDNSUtils.ts b/src/backend/utils/MDNSUtils.ts index ae2c0141..b01b6c26 100644 --- a/src/backend/utils/MDNSUtils.ts +++ b/src/backend/utils/MDNSUtils.ts @@ -1,10 +1,10 @@ -import { Browser, Service, ServiceType } from "@astronautlabs/mdns"; -import { Logger } from "@foxxmd/logging"; +import { Browser, type Service, ServiceType } from "@astronautlabs/mdns"; +import { type Logger } from "@foxxmd/logging"; import AvahiBrowser from 'avahi-browse'; -import { MdnsDeviceInfo } from "../common/infrastructure/Atomic.js"; +import { type MdnsDeviceInfo } from "../common/infrastructure/Atomic.js"; import { MaybeLogger } from '../common/MaybeLogger.js'; import { sleep } from "../utils.js"; -import { debounce, DebouncedFunction } from "./debounce.js"; +import { debounce, type DebouncedFunction } from "./debounce.js"; export interface AvahiService { service_name: string diff --git a/src/backend/utils/NetworkUtils.ts b/src/backend/utils/NetworkUtils.ts index f8f26d4a..651c9b24 100644 --- a/src/backend/utils/NetworkUtils.ts +++ b/src/backend/utils/NetworkUtils.ts @@ -1,11 +1,11 @@ -import { Logger, LogLevel } from "@foxxmd/logging"; +import { type Logger, type LogLevel } from "@foxxmd/logging"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; import address from "address"; import net from 'node:net'; import normalizeUrl from "normalize-url"; import { join as joinPath } from "path"; import { getFirstNonEmptyVal, isDebugMode} from "../utils.js"; -import { URLData } from "../../core/Atomic.js"; +import { type URLData } from "../../core/Atomic.js"; import { CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' import { WEBSOCKET_CLOSE_CODE_REASONS } from "../common/infrastructure/Atomic.js"; import { loggerNoop } from "../common/MaybeLogger.js"; diff --git a/src/backend/utils/PlayComparisonUtils.ts b/src/backend/utils/PlayComparisonUtils.ts index 86700063..dc613f54 100644 --- a/src/backend/utils/PlayComparisonUtils.ts +++ b/src/backend/utils/PlayComparisonUtils.ts @@ -1,14 +1,14 @@ -import { getListDiff, ListDiff } from "@donedeal0/superdiff"; -import { PlayMatchResult, PlayObject, PlayObjectMinimal, SOURCE_SOT, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_DURING, TA_EXACT, TA_FUZZY, TemporalAccuracy, TrackStringOptions } from "../../core/Atomic.js"; +import { getListDiff, type ListDiff } from "@donedeal0/superdiff"; +import { type PlayMatchResult, type PlayObject, type PlayObjectMinimal, SOURCE_SOT, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_DURING, TA_EXACT, TA_FUZZY, type TemporalAccuracy, type TrackStringOptions } from "../../core/Atomic.js"; import { buildTrackString, capitalize, truncateStringToLength } from "../../core/StringUtils.js"; import { comparingMultipleArtists, playObjDataMatch, setIntersection } from "../utils.js"; -import { comparePlayTemporally, hasAcceptableTemporalAccuracy, temporalAccuracyToString, TemporalPlayComparisonOptions, temporalPlayComparisonSummary } from "./TimeUtils.js"; -import { compareNormalizedStrings, compareScrobbleArtists, compareScrobbleTracks, compareTracks, normalizeStr, TrackSamenessResults } from "./StringUtils.js"; -import { ARTIST_WEIGHT, DUP_SCORE_THRESHOLD, ScrobbledPlayObject, TIME_WEIGHT, TITLE_WEIGHT } from "../common/infrastructure/Atomic.js"; -import { StringSamenessResult } from "@foxxmd/string-sameness"; -import { Duration } from "dayjs/plugin/duration.js"; -import { PlayTransformRules, TRANSFORM_HOOK, TransformHook } from "../common/infrastructure/Transform.js"; -import { Logger } from "@foxxmd/logging"; +import { comparePlayTemporally, hasAcceptableTemporalAccuracy, temporalAccuracyToString, type TemporalPlayComparisonOptions, temporalPlayComparisonSummary } from "./TimeUtils.js"; +import { compareNormalizedStrings, compareScrobbleArtists, compareScrobbleTracks, compareTracks, normalizeStr, type TrackSamenessResults } from "./StringUtils.js"; +import { ARTIST_WEIGHT, DUP_SCORE_THRESHOLD, type ScrobbledPlayObject, TIME_WEIGHT, TITLE_WEIGHT } from "../common/infrastructure/Atomic.js"; +import { type StringSamenessResult } from "@foxxmd/string-sameness"; +import { type Duration } from "dayjs/plugin/duration.js"; +import { type PlayTransformRules, TRANSFORM_HOOK, type TransformHook } from "../common/infrastructure/Transform.js"; +import { type Logger } from "@foxxmd/logging"; import { loggerNoop } from '../common/MaybeLogger.js'; import { statefulInvariantTransform } from "../../core/PlayUtils.js"; import { findAsyncSequential } from "./AsyncUtils.js"; diff --git a/src/backend/utils/PlayTransformUtils.ts b/src/backend/utils/PlayTransformUtils.ts index f56f6390..1e98412e 100644 --- a/src/backend/utils/PlayTransformUtils.ts +++ b/src/backend/utils/PlayTransformUtils.ts @@ -1,19 +1,19 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import { searchAndReplace as searchAndReplaceFunc, testMaybeRegex as testMaybeRegexFunc } from "@foxxmd/regex-buddy-core"; -import { PlayObject, PlayObjectMinimal } from "../../core/Atomic.js"; +import { type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.js"; import { - ConditionalSearchAndReplaceRegExp, - ConditionalSearchAndReplaceTerm, - ExternalMetadataTerm, - PlayTransformParts, - PlayTransformStage, - SearchAndReplaceTerm, + type ConditionalSearchAndReplaceRegExp, + type ConditionalSearchAndReplaceTerm, + type ExternalMetadataTerm, + type PlayTransformParts, + type PlayTransformStage, + type SearchAndReplaceTerm, STAGE_TYPES, - StageType, - StageTypedConfig, - WhenConditionsConfig, - WhenParts + type StageType, + type StageTypedConfig, + type WhenConditionsConfig, + type WhenParts } from "../common/infrastructure/Transform.js"; import dayjs from "dayjs"; diff --git a/src/backend/utils/RequestUtils.ts b/src/backend/utils/RequestUtils.ts index 0bb05147..a8875ae3 100644 --- a/src/backend/utils/RequestUtils.ts +++ b/src/backend/utils/RequestUtils.ts @@ -1,16 +1,16 @@ -import { Files, File } from "formidable"; +import { type Files, File } from "formidable"; import VolatileFile from "formidable/VolatileFile.js"; import { KNOWN_MEDIA_PROVIDER_URLS } from "../../core/Atomic.js"; -import { RequestRetryOptions } from "../common/infrastructure/config/common.js"; -import { Logger } from "@foxxmd/logging"; +import { type RequestRetryOptions } from "../common/infrastructure/config/common.js"; +import { type Logger } from "@foxxmd/logging"; import request, { Request, Response } from 'superagent'; -import pRetry, { RetryContext, Options } from 'p-retry'; +import pRetry, { type RetryContext, type Options } from 'p-retry'; import { DEFAULT_RETRY_MULTIPLIER } from "../common/infrastructure/Atomic.js"; import { SimpleError } from "../common/errors/MSErrors.js"; import { loggerNoop } from '../common/MaybeLogger.js'; import { findCauseByFunc } from "./ErrorUtils.js"; import { isSuperAgentResponseError } from "../common/errors/ErrorUtils.js"; -import { isNodeNetworkException, NodeNetworkException } from "../common/errors/NodeErrors.js"; +import { isNodeNetworkException, type NodeNetworkException } from "../common/errors/NodeErrors.js"; import { formatNumber } from '../../core/DataUtils.js'; import { UpstreamError } from "../common/errors/UpstreamError.js"; diff --git a/src/backend/utils/SchemaUtils.ts b/src/backend/utils/SchemaUtils.ts index a10905d2..a10402eb 100644 --- a/src/backend/utils/SchemaUtils.ts +++ b/src/backend/utils/SchemaUtils.ts @@ -1,9 +1,9 @@ import { resolve } from "path"; import { projectDir } from "../common/index.js"; import { - Definition as TSJDefinition, + type Definition as TSJDefinition, createFormatter, - CompletedConfig as TSJCompletedConfig, + type CompletedConfig as TSJCompletedConfig, DEFAULT_CONFIG, createProgram, createParser, diff --git a/src/backend/utils/StringUtils.ts b/src/backend/utils/StringUtils.ts index fb7530dc..a3337c31 100644 --- a/src/backend/utils/StringUtils.ts +++ b/src/backend/utils/StringUtils.ts @@ -1,7 +1,7 @@ -import { strategies, stringSameness, StringSamenessResult } from "@foxxmd/string-sameness"; +import { strategies, stringSameness, type StringSamenessResult } from "@foxxmd/string-sameness"; import { hasher } from 'node-object-hash'; -import { PlayObject } from "../../core/Atomic.js"; -import { asPlayerStateData, DELIMITERS, DELIMITERS_NO_AMP, PlayerStateDataMaybePlay } from "../common/infrastructure/Atomic.js"; +import { type PlayObject } from "../../core/Atomic.js"; +import { asPlayerStateData, DELIMITERS, DELIMITERS_NO_AMP, type PlayerStateDataMaybePlay } from "../common/infrastructure/Atomic.js"; import { getPlatformIdFromData, intersect, parseBool, parseBoolStrict } from "../utils.js"; import { genGroupIdStr } from '../../core/PlayUtils.js'; import { buildTrackString } from "../../core/StringUtils.js"; diff --git a/src/backend/utils/TimeUtils.ts b/src/backend/utils/TimeUtils.ts index 6e8233ce..27ee6c1c 100644 --- a/src/backend/utils/TimeUtils.ts +++ b/src/backend/utils/TimeUtils.ts @@ -2,20 +2,20 @@ import dayjs, { Dayjs } from "dayjs"; //import isToday from 'dayjs/plugin/isToday.js'; import { - AcceptableTemporalDuringReference, - PlayObject, + type AcceptableTemporalDuringReference, + type PlayObject, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, - ScrobbleTsSOC, + type ScrobbleTsSOC, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_DURING, TA_EXACT, TA_FUZZY, TA_NONE, - TemporalAccuracy, - TemporalPlayComparison, - UnixTimestamp, + type TemporalAccuracy, + type TemporalPlayComparison, + type UnixTimestamp, } from "../../core/Atomic.js"; import { capitalize, stringIsOnlyNumbers } from "../../core/StringUtils.js"; import { @@ -25,17 +25,17 @@ import { DEFAULT_DURATION_REPEAT_PERCENT, DEFAULT_SCROBBLE_DURATION_THRESHOLD, DEFAULT_SCROBBLE_PERCENT_THRESHOLD, - DurationValue, + type DurationValue, lowGranularitySources, - ScrobbleThresholdResult, + type ScrobbleThresholdResult, } from "../common/infrastructure/Atomic.js"; -import { ScrobbleThresholds } from "../common/infrastructure/config/source/index.js"; +import { type ScrobbleThresholds } from "../common/infrastructure/config/source/index.js"; import { formatNumber } from '../../core/DataUtils.js'; import { InvalidRegexError, SimpleError } from "../common/errors/MSErrors.js"; -import { NamedGroup, parseRegex } from "@foxxmd/regex-buddy-core"; -import { Duration } from "dayjs/plugin/duration.js"; -import { SourceType } from "../common/infrastructure/config/source/sources.js"; -import { Logger } from "@foxxmd/logging"; +import { type NamedGroup, parseRegex } from "@foxxmd/regex-buddy-core"; +import { type Duration } from "dayjs/plugin/duration.js"; +import { type SourceType } from "../common/infrastructure/config/source/sources.js"; +import { type Logger } from "@foxxmd/logging"; import { loggerNoop } from "../common/MaybeLogger.js"; //dayjs.extend(isToday); diff --git a/src/backend/utils/ValidationUtils.ts b/src/backend/utils/ValidationUtils.ts index cb482ba3..6e7f2793 100644 --- a/src/backend/utils/ValidationUtils.ts +++ b/src/backend/utils/ValidationUtils.ts @@ -1,6 +1,6 @@ -import { Logger } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import * as AjvNS from "ajv"; -import Ajv, { Schema } from "ajv"; +import Ajv from "ajv"; import f from "ajv-formats" import { resolve } from "path"; import { projectDir } from "../common/index.js"; diff --git a/src/client/App.tsx b/src/client/App.tsx index 8dbf95ec..d1c9995b 100644 --- a/src/client/App.tsx +++ b/src/client/App.tsx @@ -1,10 +1,10 @@ import React from 'react'; import { createBrowserRouter, - createHashRouter, RouteObject, + createHashRouter, type RouteObject, RouterProvider, useLocation, } from "react-router-dom"; -import {connect, ConnectedProps, Provider} from 'react-redux' +import {connect, type ConnectedProps, Provider} from 'react-redux' import './App.css'; import CopyToClipboard from "./components/CopyToClipboard"; import ExternalLink from "./components/ExternalLink"; diff --git a/src/client/AppNext.tsx b/src/client/AppNext.tsx index 0f1aa43c..a7b242b3 100644 --- a/src/client/AppNext.tsx +++ b/src/client/AppNext.tsx @@ -1,10 +1,10 @@ import React, {useState, useRef, Fragment} from 'react'; import { createBrowserRouter, - createHashRouter, RouteObject, + createHashRouter, type RouteObject, RouterProvider, useLocation, Outlet } from "react-router-dom"; -import {connect, ConnectedProps, Provider as ReduxProvider} from 'react-redux' +import {connect, type ConnectedProps, Provider as ReduxProvider} from 'react-redux' import './App.css'; import CopyToClipboard from "./components/CopyToClipboard"; import {store} from './store'; diff --git a/src/client/Version.tsx b/src/client/Version.tsx index 78743bfa..0d16573d 100644 --- a/src/client/Version.tsx +++ b/src/client/Version.tsx @@ -1,5 +1,5 @@ -import React, {ComponentProps} from 'react'; -import { QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; +import React, {type ComponentProps} from 'react'; +import { type QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; import { Span } from '@chakra-ui/react'; diff --git a/src/client/components/ActivityDetail.tsx b/src/client/components/ActivityDetail.tsx index ccb4a527..8f759266 100644 --- a/src/client/components/ActivityDetail.tsx +++ b/src/client/components/ActivityDetail.tsx @@ -6,7 +6,7 @@ import { ErrorAlert } from "./ErrorAlert"; import { ActivityTimeline } from "./ActivityTimeline"; import { ExpandCollapse } from "./ExpandCollapse"; import { MsSseEvent, PlayApiCommonDetailed, SortPlaysByProps } from "../../core/Api"; -import { InfiniteData, useQuery, useQueryClient } from '@tanstack/react-query'; +import { type InfiniteData, useQuery, useQueryClient } from '@tanstack/react-query'; import { ShortDateDisplay } from "./DateDisplay"; import { TextMuted } from "./TextMuted"; import { EphemeralElement, PlayStateBadge } from "./Badges"; diff --git a/src/client/components/AppHeader.tsx b/src/client/components/AppHeader.tsx index 5d96c412..c2d23ddd 100644 --- a/src/client/components/AppHeader.tsx +++ b/src/client/components/AppHeader.tsx @@ -1,4 +1,4 @@ -import React, { ComponentProps, useMemo, forwardRef, Fragment, useEffect, PropsWithChildren, useCallback, useRef, useState } from "react" +import React, { type ComponentProps, useMemo, forwardRef, Fragment, useEffect, type PropsWithChildren, useCallback, useRef, useState } from "react" import { Image, Heading, HStack, Link, LinkOverlay, LinkBox, Span, Flex, Box, Separator, Switch, FloatingPanel, Portal, Text, IconButton, Status, Stack } from '@chakra-ui/react'; import { VersionNext } from "../Version"; import { TextMuted } from "./TextMuted"; diff --git a/src/client/components/Badges.tsx b/src/client/components/Badges.tsx index 0b65f720..c247d05c 100644 --- a/src/client/components/Badges.tsx +++ b/src/client/components/Badges.tsx @@ -1,5 +1,5 @@ import { Badge, Separator, HStack } from "@chakra-ui/react"; -import React, { ComponentProps, useState, useCallback, useEffect, PropsWithChildren } from "react"; +import React, { type ComponentProps, useState, useCallback, useEffect, type PropsWithChildren } from "react"; import { COMPONENT_STATE, ComponentCommonApiJson, componentStateToFriendly, MsSseEvent, PlayApiCommon } from "../../core/Api"; import { capitalizeWords } from "../../core/StringUtils"; import {useSSEContext, useSSEEvent} from "@flamefrontend/sse-runtime-react"; diff --git a/src/client/components/ChakraClipboard.tsx b/src/client/components/ChakraClipboard.tsx index 2273676c..5f07061d 100644 --- a/src/client/components/ChakraClipboard.tsx +++ b/src/client/components/ChakraClipboard.tsx @@ -1,4 +1,4 @@ -import { ComponentProps, useMemo, useCallback, useEffect, useState } from 'react'; +import { type ComponentProps, useMemo, useCallback, useEffect, useState } from 'react'; import { Clipboard, IconButton, useClipboard } from "@chakra-ui/react" import {safeStringify} from '../../core/StringUtils'; import { CheckIcon, CopyIcon } from './icons/ChakraIcons'; diff --git a/src/client/components/CodeBlock.tsx b/src/client/components/CodeBlock.tsx index 29b84695..1b1fef36 100644 --- a/src/client/components/CodeBlock.tsx +++ b/src/client/components/CodeBlock.tsx @@ -1,7 +1,7 @@ import type { HighlighterGeneric } from "shiki" import { createShikiAdapter, CodeBlock, IconButton, ClientOnly, ScrollArea } from "@chakra-ui/react" import { useColorMode } from "./Color-Mode"; -import { ComponentProps, PropsWithChildren, useMemo } from "react"; +import { type ComponentProps, type PropsWithChildren, useMemo } from "react"; import { safeStringify } from "../../core/StringUtils"; import { MarkOptional } from "ts-essentials"; import { shikiAdapter } from "./shikiAdapter"; diff --git a/src/client/components/DateDisplay.tsx b/src/client/components/DateDisplay.tsx index f85cbfc6..4b28f601 100644 --- a/src/client/components/DateDisplay.tsx +++ b/src/client/components/DateDisplay.tsx @@ -1,7 +1,7 @@ import { Text } from "@chakra-ui/react" import dayjs, {Dayjs} from 'dayjs'; import { shortTodayAwareFormat } from "../../core/TimeUtils"; -import { ComponentProps } from "react" +import { type ComponentProps } from "react" export type DateDisplayProps = { date?: string | Dayjs diff --git a/src/client/components/ErrorAlert.tsx b/src/client/components/ErrorAlert.tsx index 832caba6..54144d12 100644 --- a/src/client/components/ErrorAlert.tsx +++ b/src/client/components/ErrorAlert.tsx @@ -1,10 +1,10 @@ import { Alert, Accordion, Stack, Text, Box, Collapsible, HStack, Highlight, Span, Code, useCollapsible, UseCollapsibleReturn } from '@chakra-ui/react'; -import { Fragment, ComponentProps, useEffect, useState } from 'react'; +import { Fragment, type ComponentProps, useEffect, useState } from 'react'; import { ChakraCodeBlock } from './CodeBlock'; import { ChakraClip } from './ChakraClipboard'; import { ErrorIsh, isErrorIsh } from '../../core/ErrorUtils'; import { EllipsisButton, FatArrowRight } from './icons/ChakraIcons'; -import { ErrorObject } from 'serialize-error'; +import { type ErrorObject } from 'serialize-error'; export interface ErrorAlertProps { error: ErrorIsh diff --git a/src/client/components/ExpandCollapse.tsx b/src/client/components/ExpandCollapse.tsx index 87a4ab8b..a1c21267 100644 --- a/src/client/components/ExpandCollapse.tsx +++ b/src/client/components/ExpandCollapse.tsx @@ -1,5 +1,5 @@ import { IconButton, HStack } from "@chakra-ui/react" -import { ComponentProps, PropsWithChildren } from "react"; +import { type ComponentProps, type PropsWithChildren } from "react"; import { FaRegSquarePlus, FaRegSquareMinus } from "react-icons/fa6"; export interface ExpandCollapseProps { diff --git a/src/client/components/ExternaLinksMenu.tsx b/src/client/components/ExternaLinksMenu.tsx index 5f3f8935..0ecc1dd6 100644 --- a/src/client/components/ExternaLinksMenu.tsx +++ b/src/client/components/ExternaLinksMenu.tsx @@ -1,7 +1,7 @@ import { Button, Menu, Portal, Box, ChakraComponent } from "@chakra-ui/react" import { ExternalLinkIcon } from "./icons/ChakraIcons" import { EXTERNAL_LINKS } from "./SideNav" -import { ComponentProps } from "react" +import { type ComponentProps } from "react" export const ExternaLinksMenu = (props: ComponentProps = {}) => ( diff --git a/src/client/components/ExternalLink.tsx b/src/client/components/ExternalLink.tsx index a05e3aee..4d04b1f6 100644 --- a/src/client/components/ExternalLink.tsx +++ b/src/client/components/ExternalLink.tsx @@ -1,4 +1,4 @@ -import {PropsWithChildren} from "react"; +import {type PropsWithChildren} from "react"; import clsx from "clsx"; export interface TooltipProps { diff --git a/src/client/components/LogsNext.tsx b/src/client/components/LogsNext.tsx index 8465567e..ff701d59 100644 --- a/src/client/components/LogsNext.tsx +++ b/src/client/components/LogsNext.tsx @@ -1,12 +1,12 @@ -import React, {PropsWithChildren, useState, useEffect, useRef, useCallback} from 'react'; +import React, {type PropsWithChildren, useState, useEffect, useRef, useCallback} from 'react'; import * as AnsiImport from "ansi-to-react"; import { Text, Box, SegmentGroup, Separator, HStack, Stack, Span } from '@chakra-ui/react'; import {FixedSizeList} from "fixed-size-list"; import {useSSE} from "@flamefrontend/sse-runtime-react"; -import { useQueryClient, QueryFunctionContext, useQuery, useMutation } from '@tanstack/react-query' +import { useQueryClient, type QueryFunctionContext, useQuery, useMutation } from '@tanstack/react-query' import { LogOutputConfig } from '../../core/Atomic'; import ky from 'ky'; -import { LogLevel } from '@foxxmd/logging'; +import { type LogLevel } from '@foxxmd/logging'; import { tanQueries } from '../queries'; import { ChakraClip, ChakraClipDynamic } from './ChakraClipboard'; diff --git a/src/client/components/MSCollapsible.tsx b/src/client/components/MSCollapsible.tsx index 71db76cb..98d3b323 100644 --- a/src/client/components/MSCollapsible.tsx +++ b/src/client/components/MSCollapsible.tsx @@ -1,5 +1,5 @@ import { Collapsible, Stack, Box, useBreakpointValue } from "@chakra-ui/react" -import { ComponentProps, PropsWithChildren, useState, useEffect, useMemo } from "react"; +import { type ComponentProps, type PropsWithChildren, useState, useEffect, useMemo } from "react"; import { LuChevronRight } from "react-icons/lu" import { MSErrorBoundary } from "./ErrorBoundary"; diff --git a/src/client/components/MobileMenu.tsx b/src/client/components/MobileMenu.tsx index bfd1a5c5..db167a2b 100644 --- a/src/client/components/MobileMenu.tsx +++ b/src/client/components/MobileMenu.tsx @@ -4,7 +4,7 @@ import { Drawer, BreakpointName, } from "@chakra-ui/react" -import { useState, useEffect, ComponentProps } from 'react'; +import { useState, useEffect, type ComponentProps } from 'react'; import { useLocation } from 'react-router'; import { MenuButton, MenuIcon, XIcon } from "./icons/ChakraIcons"; import { NAV_LINKS, SideNavItems } from "./SideNav"; diff --git a/src/client/components/PlayData.tsx b/src/client/components/PlayData.tsx index 9196706a..6a0ad5bb 100644 --- a/src/client/components/PlayData.tsx +++ b/src/client/components/PlayData.tsx @@ -1,7 +1,7 @@ import React, { Fragment, useMemo, useState } from 'react'; import { EmptyState, DataList, HStack, Tag, Tabs, Wrap, Box, Flex, SegmentGroup, Stack, Text, Tooltip, Separator, IconButton, Container, SimpleGrid, Float, Spacer, Icon, Link, Span, Show } from "@chakra-ui/react" import { LuCode, LuText, LuCheck, LuX } from "react-icons/lu" -import { JsonPlayObject, PlayObjectMinimal } from '../../core/Atomic.js'; +import { type JsonPlayObject, type PlayObjectMinimal } from '../../core/Atomic.js'; import { shortTodayAwareFormat, timeToHumanTimestamp } from '../../core/TimeUtils.js'; import dayjs from 'dayjs'; import { ChakraCodeBlock } from './CodeBlock.js'; diff --git a/src/client/components/PlayDisplay.tsx b/src/client/components/PlayDisplay.tsx index a97ef42c..09de2611 100644 --- a/src/client/components/PlayDisplay.tsx +++ b/src/client/components/PlayDisplay.tsx @@ -1,4 +1,4 @@ -import React, {Fragment, PropsWithChildren, ReactElement} from 'react'; +import React, {Fragment, type PropsWithChildren, type ReactElement} from 'react'; import {JsonPlayObject, TrackStringOptions} from "../../core/Atomic"; import {buildTrackString} from "../../core/StringUtils"; diff --git a/src/client/components/StatusIndicator.tsx b/src/client/components/StatusIndicator.tsx index af638fb3..4de32391 100644 --- a/src/client/components/StatusIndicator.tsx +++ b/src/client/components/StatusIndicator.tsx @@ -1,4 +1,4 @@ -import React, {PropsWithChildren} from 'react'; +import React, {type PropsWithChildren} from 'react'; export type StatusType = 'active' | 'warn' | 'error' | 'inactive' | string; diff --git a/src/client/components/TextMuted.tsx b/src/client/components/TextMuted.tsx index eda1c2e1..bf917cb4 100644 --- a/src/client/components/TextMuted.tsx +++ b/src/client/components/TextMuted.tsx @@ -1,5 +1,5 @@ import { Text as ChakraText, Span } from "@chakra-ui/react" -import { ComponentProps } from "react" +import { type ComponentProps } from "react" export const TextMuted = (props: ComponentProps) => { const { diff --git a/src/client/components/ToggleButton.tsx b/src/client/components/ToggleButton.tsx index fc2388cc..add1c076 100644 --- a/src/client/components/ToggleButton.tsx +++ b/src/client/components/ToggleButton.tsx @@ -1,4 +1,4 @@ -import React, { ComponentProps, Fragment, useMemo, useState, useCallback } from "react" +import React, { type ComponentProps, Fragment, useMemo, useState, useCallback } from "react" import { Accordion, Span, Stack, Text, Box, HStack, Flex, Container, SkeletonText, Collapsible, ScrollArea, Button } from '@chakra-ui/react'; interface ToggleButtonProps { diff --git a/src/client/components/Tooltip.tsx b/src/client/components/Tooltip.tsx index 086b6a41..75f9a495 100644 --- a/src/client/components/Tooltip.tsx +++ b/src/client/components/Tooltip.tsx @@ -1,4 +1,4 @@ -import {PropsWithChildren, ReactElement} from "react"; +import {type PropsWithChildren, type ReactElement} from "react"; import clsx from "clsx"; export interface TooltipProps { diff --git a/src/client/components/TransformSteps.tsx b/src/client/components/TransformSteps.tsx index 2f9bcb25..35b94af0 100644 --- a/src/client/components/TransformSteps.tsx +++ b/src/client/components/TransformSteps.tsx @@ -1,4 +1,4 @@ -import React, { ComponentProps, Fragment, useMemo } from "react" +import React, { type ComponentProps, Fragment, useMemo } from "react" import { Timeline, Icon, Span, Stack, Heading, Box, Text } from '@chakra-ui/react'; import { JsonPlayObject, LifecycleStep } from "../../core/Atomic"; import { PlayData } from "./PlayData"; diff --git a/src/client/components/Typography.tsx b/src/client/components/Typography.tsx index bf3dfb75..2bd8b934 100644 --- a/src/client/components/Typography.tsx +++ b/src/client/components/Typography.tsx @@ -1,4 +1,4 @@ import { Span } from '@chakra-ui/react'; -import { ComponentProps } from 'react'; +import { type ComponentProps } from 'react'; export const Muted = (props: ComponentProps = {}) => \ No newline at end of file diff --git a/src/client/components/chakraPlayer/Player.tsx b/src/client/components/chakraPlayer/Player.tsx index 331533d4..2509dba4 100644 --- a/src/client/components/chakraPlayer/Player.tsx +++ b/src/client/components/chakraPlayer/Player.tsx @@ -1,10 +1,10 @@ -import React, { ComponentProps, useMemo, forwardRef, Fragment, useState, useEffect, useCallback } from "react" +import React, { type ComponentProps, useMemo, forwardRef, Fragment, useState, useEffect, useCallback } from "react" import { Accordion, Highlight, Em, Progress, For, Span, Stack, Spacer, Bleed, Text, Image, Box, Heading, AbsoluteCenter, Button, Separator, HStack, Flex, Center, Badge, IconButton, Container, Collapsible, Card, LinkOverlay, LinkBox } from '@chakra-ui/react'; import { TextMuted } from "../TextMuted"; import { SOURCE_SOT, SOURCE_SOT_TYPES, SourcePlayerJson } from "../../../core/Atomic"; import { timeToHumanTimestamp } from "../../../core/TimeUtils"; import { capitalize } from "../../../core/StringUtils"; -import { QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; +import { type QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; import { ErrorAlert } from "../ErrorAlert"; import ky from 'ky'; import { baseUrl } from "../../utils"; diff --git a/src/client/components/diffs/JsonDiff.tsx b/src/client/components/diffs/JsonDiff.tsx index be727bd5..ab92e572 100644 --- a/src/client/components/diffs/JsonDiff.tsx +++ b/src/client/components/diffs/JsonDiff.tsx @@ -1,4 +1,4 @@ -import React, { ComponentProps } from 'react'; +import React, { type ComponentProps } from 'react'; import { parseDiffFromFile, type FileContents @@ -9,7 +9,7 @@ import { FileDiff, } from '@pierre/diffs/react'; import { MarkRequired } from 'ts-essentials'; -import { Changeset } from 'json-diff-ts'; +import { type Changeset } from 'json-diff-ts'; import { MSErrorBoundary } from '../ErrorBoundary'; import { patchObject } from "../../../core/DataUtils"; diff --git a/src/client/components/icons/AnimatedIcons.tsx b/src/client/components/icons/AnimatedIcons.tsx index 1a07c2df..179ba0b7 100644 --- a/src/client/components/icons/AnimatedIcons.tsx +++ b/src/client/components/icons/AnimatedIcons.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import { type ComponentProps } from 'react'; import { Icon } from '@chakra-ui/react'; /** Ripple animated "loading" icon diff --git a/src/client/components/icons/ChakraIcons.tsx b/src/client/components/icons/ChakraIcons.tsx index e6e70d52..43edcd1c 100644 --- a/src/client/components/icons/ChakraIcons.tsx +++ b/src/client/components/icons/ChakraIcons.tsx @@ -31,7 +31,7 @@ import { MdOutlineFiberNew } from "react-icons/md"; import { RiZzzFill } from "react-icons/ri"; import { SiGoogledocs } from "react-icons/si"; import { IconButton, Clipboard, useClipboard, Spinner, Icon } from "@chakra-ui/react" -import { ComponentProps, PropsWithChildren } from 'react'; +import { type ComponentProps, type PropsWithChildren } from 'react'; import { IconBaseProps, IconType } from "react-icons/lib"; export const makeIconButton = (Icon: IconType) => (props: PropsWithChildren> & { iconProps?: IconBaseProps, loading?: boolean }) => { diff --git a/src/client/components/msComponent/MSComponentDetailed.tsx b/src/client/components/msComponent/MSComponentDetailed.tsx index ad948af7..b0b61c3a 100644 --- a/src/client/components/msComponent/MSComponentDetailed.tsx +++ b/src/client/components/msComponent/MSComponentDetailed.tsx @@ -1,6 +1,6 @@ -import React, { ComponentProps, useState } from "react" +import React, { type ComponentProps, useState } from "react" import { SegmentGroup, Switch, Portal, Group, Span, Menu, ButtonGroup, Button, Box, Heading, Skeleton, Wrap, HStack, Stack, Flex, Card, LinkOverlay, SkeletonText, BadgeProps, Badge, MenuItemProps } from '@chakra-ui/react'; -import { COMPONENT_STATE, ComponentClientApiJson, ComponentCommonApiJson, ComponentsApiJson, ComponentSourceApiJson, ComponentState, componentStateToFriendly, isComponentClientApiJson, isComponentSourceApiJson, MsSseEvent, MsSseEventPayload } from "../../../core/Api.js"; +import { COMPONENT_STATE, type ComponentClientApiJson, type ComponentCommonApiJson, type ComponentsApiJson, type ComponentSourceApiJson, type ComponentState, componentStateToFriendly, isComponentClientApiJson, isComponentSourceApiJson, type MsSseEvent, type MsSseEventPayload } from "../../../core/Api.js"; import { TextMuted } from "../TextMuted.js"; import { isClientType } from "../../../backend/common/infrastructure/Atomic.js"; import { capitalize } from "../../../core/StringUtils.js"; @@ -8,14 +8,14 @@ import { ShortDateDisplay } from "../DateDisplay.js"; import { ChevronLeftButton, EllipsisButton, EyeButton, EyeClosedIcon, EyeIcon, IdleIcon, PowerButton, PowerIcon, PowerOffButton, PowerOffIcon, RetryIcon } from "../icons/ChakraIcons.js"; import { ChakraPlayer, ChakraPlayerFetchable, PlayersContainer, PlayersContainerFetchable } from "../chakraPlayer/Player.js"; import { InfoTip, ToggleTip, Tooltip } from "../ToggleTip.js"; -import { QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; +import { type QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; import { ErrorAlert } from "../ErrorAlert"; import { useSSEContext, useSSEEvent, useSSEAnyEvent } from "@flamefrontend/sse-runtime-react"; -import { isComponentTypeSource, SourcePlayerJson } from "../../../core/Atomic.js"; +import { isComponentTypeSource, type SourcePlayerJson } from "../../../core/Atomic.js"; import { Link } from "react-router"; import { CountLiveIndicator, DateIndicator, DeadLetterIndicator, QueuedIndicator } from "./Stats.js"; import { ListContainerFetchable, ListContainerFilterable } from "../playActivity/ActivityList.js"; diff --git a/src/client/components/msComponent/MSComponentList.tsx b/src/client/components/msComponent/MSComponentList.tsx index 59978493..8dc14f36 100644 --- a/src/client/components/msComponent/MSComponentList.tsx +++ b/src/client/components/msComponent/MSComponentList.tsx @@ -1,8 +1,8 @@ -import React, { ComponentProps, useMemo, useState, forwardRef, Fragment } from "react" +import React, { type ComponentProps, useMemo, useState, forwardRef, Fragment } from "react" import { Stack, SegmentGroup, Text, Box, Center, Card, SkeletonText } from '@chakra-ui/react'; import { ComponentsApiJson } from "../../../core/Api"; import { MSComponentSummary, MSComponentSummaryFetchable } from "./MSComponentSummary"; -import { QueryFunctionContext, queryOptions, useQuery } from '@tanstack/react-query'; +import { type QueryFunctionContext, queryOptions, useQuery } from '@tanstack/react-query'; import ky from 'ky'; import { baseUrl } from "../../utils"; import { ErrorAlert } from "../ErrorAlert"; diff --git a/src/client/components/msComponent/MSComponentSummary.tsx b/src/client/components/msComponent/MSComponentSummary.tsx index 622b1024..8ade2de0 100644 --- a/src/client/components/msComponent/MSComponentSummary.tsx +++ b/src/client/components/msComponent/MSComponentSummary.tsx @@ -1,13 +1,13 @@ -import React, { ComponentProps, useMemo, forwardRef, Fragment, useEffect, useState, useCallback } from "react" +import React, { type ComponentProps, useMemo, forwardRef, Fragment, useEffect, useState, useCallback } from "react" import { Accordion, For, Span, Stack, Stat, Text, Box, Heading, AbsoluteCenter, Button, Separator, HStack, Flex, Badge, IconButton, Container, Collapsible, Card, LinkOverlay, LinkBox } from '@chakra-ui/react'; -import { COMPONENT_STATE, ComponentClientApiJson, ComponentCommonApi, ComponentCommonApiJson, ComponentSourceApiJson, componentStateToFriendly, isComponentClientApiJson, isComponentSourceApiJson, MsSseEvent, MsSseEventPayload } from "../../../core/Api.js"; +import { COMPONENT_STATE, type ComponentClientApiJson, type ComponentCommonApi, type ComponentCommonApiJson, type ComponentSourceApiJson, componentStateToFriendly, isComponentClientApiJson, isComponentSourceApiJson, type MsSseEvent, type MsSseEventPayload } from "../../../core/Api.js"; import { Link } from "react-router"; import { TextMuted } from "../TextMuted.js"; import { isClientType } from "../../../backend/common/infrastructure/Atomic.js"; import { capitalize } from "../../../core/StringUtils.js"; import { ChevronRightButton, IdleIcon } from "../icons/ChakraIcons.js"; import { PlayersContainer, PlayersContainerFetchable } from "../chakraPlayer/Player.js"; -import { QueryFunctionContext, useQuery, useQueryClient } from '@tanstack/react-query'; +import { type QueryFunctionContext, useQuery, useQueryClient } from '@tanstack/react-query'; import { ErrorAlert } from "../ErrorAlert"; import { useSSEContext, diff --git a/src/client/components/msComponent/Stats.tsx b/src/client/components/msComponent/Stats.tsx index bbaea622..eb725d40 100644 --- a/src/client/components/msComponent/Stats.tsx +++ b/src/client/components/msComponent/Stats.tsx @@ -1,6 +1,6 @@ -import React, { ComponentProps, useMemo, forwardRef, Fragment, useEffect, useState, useCallback } from "react" +import React, { type ComponentProps, useMemo, forwardRef, Fragment, useEffect, useState, useCallback } from "react" import { DataList, Badge, Box, Heading, Skeleton, Stat, Separator, HStack, Flex, Collapsible, Card, LinkOverlay, LinkBox, SkeletonText } from '@chakra-ui/react'; -import { COMPONENT_STATE, ComponentClientApiJson, ComponentCommonApiJson, ComponentSourceApiJson, ComponentState, componentStateToFriendly, isComponentClientApiJson, isComponentSourceApiJson, MsSseEvent, MsSseEventPayload } from "../../../core/Api.js"; +import { COMPONENT_STATE, type ComponentClientApiJson, type ComponentCommonApiJson, type ComponentSourceApiJson, type ComponentState, componentStateToFriendly, isComponentClientApiJson, isComponentSourceApiJson, type MsSseEvent, type MsSseEventPayload } from "../../../core/Api.js"; import { TextMuted } from "../TextMuted.js"; import { isClientType } from "../../../backend/common/infrastructure/Atomic.js"; import { capitalize } from "../../../core/StringUtils.js"; @@ -8,7 +8,7 @@ import { ShortDateDisplay } from "../DateDisplay.js"; import { ChevronRightButton, DownArrowIcon, UpArrowIcon } from "../icons/ChakraIcons.js"; import { ChakraPlayer, ChakraPlayerFetchable } from "../chakraPlayer/Player.js"; import { InfoTip } from "../ToggleTip.js"; -import { QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; +import { type QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; import { ErrorAlert } from "../ErrorAlert"; import ky from 'ky'; import { baseUrl } from "../../utils"; diff --git a/src/client/components/playActivity/ActivityList.tsx b/src/client/components/playActivity/ActivityList.tsx index 0dcc7b77..4ce6776a 100644 --- a/src/client/components/playActivity/ActivityList.tsx +++ b/src/client/components/playActivity/ActivityList.tsx @@ -1,21 +1,21 @@ import { Accordion, Span, Stack, Text, Box, HStack, Flex, Container, SkeletonText, Wrap, Card, Collapsible, Separator } from '@chakra-ui/react'; -import { ComponentType, PlayState, } from '../../../core/Atomic.js'; -import React, { ComponentProps, Fragment, useMemo, useCallback, useState } from "react" +import { type ComponentType, type PlayState, } from '../../../core/Atomic.js'; +import React, { type ComponentProps, Fragment, useMemo, useCallback, useState } from "react" import dayjs, { Dayjs } from 'dayjs'; import doy from 'dayjs/plugin/dayOfYear.js'; import { ActivityDetailFetchable, ActivityDetails, ActivitySummary, ActivitySummaryFetchable, ActivitySummarySkeleton } from '../ActivityDetail.js'; import "./PlayList.scss"; -import { MsSseEvent, MsSseEventPayload, PlayApiCommon, PlayApiCommonDetailed } from '../../../core/Api.js'; -import { useQuery, useInfiniteQuery, UseInfiniteQueryResult, InfiniteData, useQueryClient } from '@tanstack/react-query'; +import { type MsSseEvent, type MsSseEventPayload, type PlayApiCommon, type PlayApiCommonDetailed } from '../../../core/Api.js'; +import { useQuery, useInfiniteQuery, type UseInfiniteQueryResult, type InfiniteData, useQueryClient } from '@tanstack/react-query'; import { ErrorAlert } from '../ErrorAlert.js'; -import { QueryPlaysOptsJsonRefreshable, tanQueries } from '../../queries/index.js'; +import { type QueryPlaysOptsJsonRefreshable, tanQueries } from '../../queries/index.js'; import { VirtualizedListNormal } from './VirtualListNormal.js'; import { NoPlayResults, VirtualizedListDynamic } from './VirtualListDynamic.js'; import { VirtualizedListExp } from './VirtualListExperimental.js'; -import { ActivityLogProps, generateGroupPlays, GroupHeader } from './ListParts.js'; +import { type ActivityLogProps, generateGroupPlays, GroupHeader } from './ListParts.js'; import { ListFilters, todayRange } from './ListFilters.js'; -import { QueryPlaysOpts, QueryPlaysOptsJson } from '../../../backend/common/database/drizzle/repositories/PlayRepository.js'; -import { PaginatedResponse } from '../../../backend/common/database/drizzle/repositories/BaseRepository.js'; +import { type QueryPlaysOpts, type QueryPlaysOptsJson } from '../../../backend/common/database/drizzle/repositories/PlayRepository.js'; +import { type PaginatedResponse } from '../../../backend/common/database/drizzle/repositories/BaseRepository.js'; import { useSSEAnyEvent, useSSEContext } from '@flamefrontend/sse-runtime-react'; dayjs.extend(doy); diff --git a/src/client/components/playActivity/ListFilters.tsx b/src/client/components/playActivity/ListFilters.tsx index ac2241d6..10653041 100644 --- a/src/client/components/playActivity/ListFilters.tsx +++ b/src/client/components/playActivity/ListFilters.tsx @@ -1,6 +1,6 @@ import { Span, Stack, Text, Box, Spinner, HStack, Wrap, Flex, Container, Select, Portal, createListCollection, useSelectContext, DatePicker, VStack, Button, Spacer, TagsInput, Card } from '@chakra-ui/react'; -import { ComponentType, isComponentTypeSource, PLAY_CLIENT_STATE, PLAY_SOURCE_STATE, PlayState } from '../../../core/Atomic.js'; -import React, { ComponentProps, Fragment, useMemo, useCallback, useState } from "react" +import { type ComponentType, isComponentTypeSource, PLAY_CLIENT_STATE, PLAY_SOURCE_STATE, type PlayState } from '../../../core/Atomic.js'; +import React, { type ComponentProps, Fragment, useMemo, useCallback, useState } from "react" import dayjs, { Dayjs } from 'dayjs'; import doy from 'dayjs/plugin/dayOfYear.js'; import "./PlayList.scss"; @@ -19,13 +19,13 @@ import { parseAbsolute, ZonedDateTime } from "@internationalized/date" -import { QueryPlaysOptsJson } from '../../../backend/common/database/drizzle/repositories/PlayRepository.js'; +import { type QueryPlaysOptsJson } from '../../../backend/common/database/drizzle/repositories/PlayRepository.js'; import { cardHeaderSeparator } from '../../utils/ComponentUtils.js'; -import { CompareDateBetween } from '../../../backend/common/database/drizzle/repositories/BaseRepository.js'; +import { type CompareDateBetween } from '../../../backend/common/database/drizzle/repositories/BaseRepository.js'; import { CalendarButton, RefreshButton } from '../icons/ChakraIcons.js'; -import { QueryPlaysOptsJsonRefreshable, tanQueries, useQueryWatcher } from '../../queries/index.js'; +import { type QueryPlaysOptsJsonRefreshable, tanQueries, useQueryWatcher } from '../../queries/index.js'; import { useQueryClient } from '@tanstack/react-query'; -import { PlayStateUI } from '../../../core/Api.js'; +import { type PlayStateUI } from '../../../core/Api.js'; import { capitalizeWords } from '../../../core/StringUtils.js'; const noop = (_) => null; diff --git a/src/client/components/playActivity/ListParts.tsx b/src/client/components/playActivity/ListParts.tsx index 4e2afaa7..268a63d1 100644 --- a/src/client/components/playActivity/ListParts.tsx +++ b/src/client/components/playActivity/ListParts.tsx @@ -1,10 +1,10 @@ import { Accordion, Span, Stack, Text, Box, Separator, HStack, Flex, IconButton, Container, SkeletonText, Collapsible, ScrollArea } from '@chakra-ui/react'; -import { ComponentType } from '../../../core/Atomic.js'; -import React, { ComponentProps, Fragment, useMemo, useCallback } from "react" +import { type ComponentType } from '../../../core/Atomic.js'; +import React, { type ComponentProps, Fragment, useMemo, useCallback } from "react" import dayjs, { Dayjs } from 'dayjs'; import doy from 'dayjs/plugin/dayOfYear.js'; -import { PlayApiCommon, PlayApiCommonDetailed, SortPlaysByProps } from '../../../core/Api.js'; -import { QueryPlaysOpts, QueryPlaysOptsJson } from '../../../backend/common/database/drizzle/repositories/PlayRepository.js'; +import { type PlayApiCommon, type PlayApiCommonDetailed, type SortPlaysByProps } from '../../../core/Api.js'; +import { type QueryPlaysOpts, type QueryPlaysOptsJson } from '../../../backend/common/database/drizzle/repositories/PlayRepository.js'; import { VscDebugRestart } from 'react-icons/vsc'; import { sortByNewestDate } from '../../../core/PlayUtils.js'; import { getAllIndexes } from '../../../core/DataUtils.js'; diff --git a/src/client/components/playActivity/VirtualListDynamic.tsx b/src/client/components/playActivity/VirtualListDynamic.tsx index 0824cc1f..97d3b873 100644 --- a/src/client/components/playActivity/VirtualListDynamic.tsx +++ b/src/client/components/playActivity/VirtualListDynamic.tsx @@ -1,9 +1,9 @@ import { Accordion, Span, Spinner, Stack, VStack, Text, Box, Separator, HStack, Flex, IconButton, Container, SkeletonText, Collapsible, ScrollArea, SystemStyleObject, EmptyState } from '@chakra-ui/react'; -import React, { ComponentProps, Fragment, useMemo, useCallback } from "react" +import React, { type ComponentProps, Fragment, useMemo, useCallback } from "react" import { ActivityCollapsible } from '../ActivityDetail.js'; import { type VirtualItem, useVirtualizer } from "@tanstack/react-virtual" -import { ActivityLogProps, generateFlatItems, GroupHeader, isGroupInfo } from './ListParts.js'; -import { UseInfiniteQueryResult } from '@tanstack/react-query'; +import { type ActivityLogProps, generateFlatItems, GroupHeader, isGroupInfo } from './ListParts.js'; +import { type UseInfiniteQueryResult } from '@tanstack/react-query'; import { LuCaptionsOff } from "react-icons/lu"; const itemContainerStyle: React.ComponentProps<"div"> = { diff --git a/src/client/components/playActivity/VirtualListExperimental.tsx b/src/client/components/playActivity/VirtualListExperimental.tsx index 0f368efa..ca0f19a2 100644 --- a/src/client/components/playActivity/VirtualListExperimental.tsx +++ b/src/client/components/playActivity/VirtualListExperimental.tsx @@ -1,8 +1,8 @@ import { Accordion, Span, Stack, Text, Box, Separator, HStack, Flex, IconButton, Container, SkeletonText, Collapsible, ScrollArea } from '@chakra-ui/react'; -import React, { ComponentProps, Fragment, useMemo, useCallback } from "react" +import React, { type ComponentProps, Fragment, useMemo, useCallback } from "react" import { ActivityCollapsible } from '../ActivityDetail.js'; import { type VirtualItem, useVirtualizer } from "@tanstack/react-virtual" -import { ActivityLogProps, generateFlatItems, GroupHeader, isGroupInfo } from './ListParts.js'; +import { type ActivityLogProps, generateFlatItems, GroupHeader, isGroupInfo } from './ListParts.js'; export const VirtualizedListExp = (props: ActivityLogProps) => { const { diff --git a/src/client/components/playActivity/VirtualListNormal.tsx b/src/client/components/playActivity/VirtualListNormal.tsx index ec818648..2513bf1a 100644 --- a/src/client/components/playActivity/VirtualListNormal.tsx +++ b/src/client/components/playActivity/VirtualListNormal.tsx @@ -1,8 +1,8 @@ import { Accordion, Span, Stack, Text, Box, Separator, HStack, Flex, IconButton, Container, SkeletonText, Collapsible, ScrollArea } from '@chakra-ui/react'; -import React, { ComponentProps, Fragment, useMemo, useCallback } from "react" +import React, { type ComponentProps, Fragment, useMemo, useCallback } from "react" import { ActivityCollapsible } from '../ActivityDetail.js'; import { type VirtualItem, useVirtualizer } from "@tanstack/react-virtual" -import { ActivityLogProps, generateFlatItems, GroupHeader, isGroupInfo } from './ListParts.js'; +import { type ActivityLogProps, generateFlatItems, GroupHeader, isGroupInfo } from './ListParts.js'; export const VirtualizedListNormal = (props: ActivityLogProps) => { const { diff --git a/src/client/components/statusCard/ClientStatusCard.tsx b/src/client/components/statusCard/ClientStatusCard.tsx index e14955ff..739d3a26 100644 --- a/src/client/components/statusCard/ClientStatusCard.tsx +++ b/src/client/components/statusCard/ClientStatusCard.tsx @@ -3,7 +3,7 @@ import StatusCardSkeleton, {StatusCardSkeletonData} from "./StatusCardSkeleton"; import SkeletonParagraph from "../skeleton/SkeletonParagraph"; import {clientAdapter} from "../../status/ducks"; import {RootState} from "../../store"; -import {connect, ConnectedProps} from "react-redux"; +import {connect, type ConnectedProps} from "react-redux"; import {Link} from "react-router-dom"; import {useStartClientMutation} from "./clientDucks"; diff --git a/src/client/components/statusCard/SourceStatusCard.tsx b/src/client/components/statusCard/SourceStatusCard.tsx index 4df93f51..8a2fd97e 100644 --- a/src/client/components/statusCard/SourceStatusCard.tsx +++ b/src/client/components/statusCard/SourceStatusCard.tsx @@ -4,7 +4,7 @@ import SkeletonParagraph from "../skeleton/SkeletonParagraph"; import {Link} from "react-router-dom"; import {sourceAdapter} from "../../status/ducks"; import {RootState} from "../../store"; -import {connect, ConnectedProps} from "react-redux"; +import {connect, type ConnectedProps} from "react-redux"; import Player from "../player/Player"; import {useStartSourceMutation, useListenSourceMutation} from "./sourceDucks"; import './statusCard.scss'; diff --git a/src/client/components/statusCard/StatusCardSkeleton.tsx b/src/client/components/statusCard/StatusCardSkeleton.tsx index 1ec94e88..80efe2e8 100644 --- a/src/client/components/statusCard/StatusCardSkeleton.tsx +++ b/src/client/components/statusCard/StatusCardSkeleton.tsx @@ -1,4 +1,4 @@ -import React, {PropsWithChildren, ReactElement} from 'react'; +import React, {type PropsWithChildren, type ReactElement} from 'react'; import SkeletonTitle from "../skeleton/SkeletonTitle"; import SkeletonParagraph from "../skeleton/SkeletonParagraph"; import StatusIndicator, {StatusType} from "../StatusIndicator"; diff --git a/src/client/deadLetter/DeadPage.tsx b/src/client/deadLetter/DeadPage.tsx index 271386ea..a9d81acc 100644 --- a/src/client/deadLetter/DeadPage.tsx +++ b/src/client/deadLetter/DeadPage.tsx @@ -13,7 +13,7 @@ import { } from "./deadLetterDucks"; import dayjs from "dayjs"; import {RootState} from "../store"; -import {connect, ConnectedProps} from "react-redux"; +import {connect, type ConnectedProps} from "react-redux"; import { faBug } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import clsx from "clsx"; diff --git a/src/client/logs/LogLine.tsx b/src/client/logs/LogLine.tsx index 208129b9..1693c1db 100644 --- a/src/client/logs/LogLine.tsx +++ b/src/client/logs/LogLine.tsx @@ -1,4 +1,4 @@ -import React, {PropsWithChildren} from 'react'; +import React, {type PropsWithChildren} from 'react'; import * as AnsiImport from "ansi-to-react"; // @ts-expect-error Ansi export is built incorrectly diff --git a/src/client/logs/LogsSection.tsx b/src/client/logs/LogsSection.tsx index 504fbd76..b1846c4a 100644 --- a/src/client/logs/LogsSection.tsx +++ b/src/client/logs/LogsSection.tsx @@ -4,7 +4,7 @@ import {FixedSizeList} from "fixed-size-list"; import {useEventSource, useEventSourceListener} from "@react-nano/use-event-source"; import LogLine from "./LogLine"; import {useGetLogsQuery, useLazySetLogSettingsQuery} from "./logsApi"; -import {connect, ConnectedProps} from "react-redux"; +import {connect, type ConnectedProps} from "react-redux"; import {RootState} from "../store"; import Loading from "../components/loading/Loading"; diff --git a/src/client/logs/logDucks.ts b/src/client/logs/logDucks.ts index 0cc92c27..e20b7461 100644 --- a/src/client/logs/logDucks.ts +++ b/src/client/logs/logDucks.ts @@ -4,7 +4,7 @@ import { } from '@reduxjs/toolkit' import {logsApi} from "./logsApi"; import {LogOutputConfig} from "../../core/Atomic"; -import {LogDataPretty} from "@foxxmd/logging"; +import {type LogDataPretty} from "@foxxmd/logging"; export interface LogsState { data: (LogDataPretty & {levelLabel: string})[], settings: LogOutputConfig diff --git a/src/client/status/StatusSection.tsx b/src/client/status/StatusSection.tsx index 647c590b..9e4830ed 100644 --- a/src/client/status/StatusSection.tsx +++ b/src/client/status/StatusSection.tsx @@ -1,5 +1,5 @@ import React, {Fragment} from 'react'; -import {connect, ConnectedProps} from "react-redux"; +import {connect, type ConnectedProps} from "react-redux"; import StatusCardSkeleton from "../components/statusCard/StatusCardSkeleton"; import SourceStatusCard from "../components/statusCard/SourceStatusCard"; import ClientStatusCard from "../components/statusCard/ClientStatusCard"; diff --git a/src/client/status/ducks.ts b/src/client/status/ducks.ts index 78c1d27b..f0a43ab9 100644 --- a/src/client/status/ducks.ts +++ b/src/client/status/ducks.ts @@ -1,11 +1,11 @@ import { createAction, createReducer, - AnyAction, - PayloadAction, createEntityAdapter, + type AnyAction, + type PayloadAction, createEntityAdapter, createSlice } from '@reduxjs/toolkit' -import { Api } from '@reduxjs/toolkit/query/react'; +import { type Api } from '@reduxjs/toolkit/query/react'; import {statusApi} from "./statusApi"; import {ClientStatusData, SourcePlayerJson, SourceStatusData} from "../../core/Atomic"; diff --git a/src/client/utils/hooks/useIsWrapped.tsx b/src/client/utils/hooks/useIsWrapped.tsx index f616f2f6..98f23621 100644 --- a/src/client/utils/hooks/useIsWrapped.tsx +++ b/src/client/utils/hooks/useIsWrapped.tsx @@ -1,4 +1,4 @@ -import React, { ComponentProps, useState, useLayoutEffect } from "react" +import React, { type ComponentProps, useState, useLayoutEffect } from "react" import useResizeObserver from '@react-hook/resize-observer'; const getTop = item => Math.round(item.getBoundingClientRect().top); diff --git a/src/client/utils/index.tsx b/src/client/utils/index.tsx index 341a7ea6..fc0ba216 100644 --- a/src/client/utils/index.tsx +++ b/src/client/utils/index.tsx @@ -1,5 +1,5 @@ import {TrackStringOptions} from "../../core/Atomic"; -import React, {ReactElement, Fragment} from "react"; +import React, {type ReactElement, Fragment} from "react"; import {defaultBuildTrackStringTransformers} from "../../core/StringUtils"; import dayjs, {Dayjs} from 'dayjs'; diff --git a/src/core/Api.ts b/src/core/Api.ts index ab20422e..29d0afdd 100644 --- a/src/core/Api.ts +++ b/src/core/Api.ts @@ -1,11 +1,11 @@ -import { PickKeys, StrictOmit } from "ts-essentials" -import { ComponentMinimalSelect } from "../backend/common/database/drizzle/drizzleTypes.js" -import { ClientType } from "../backend/common/infrastructure/config/client/clients.js" -import { SourceType } from "../backend/common/infrastructure/config/source/sources.js" -import { ComponentType, ErrorLike, JsonPlayObject, PlayState, Replace, SOURCE_SOT_TYPES, SourcePlayerJson } from "./Atomic.js" +import type { PickKeys } from "ts-essentials" +import { type ComponentMinimalSelect } from "../backend/common/database/drizzle/drizzleTypes.js" +import { type ClientType } from "../backend/common/infrastructure/config/client/clients.js" +import { type SourceType } from "../backend/common/infrastructure/config/source/sources.js" +import { type ComponentType, type ErrorLike, type JsonPlayObject, type PlayState, type Replace, type SOURCE_SOT_TYPES, type SourcePlayerJson } from "./Atomic.js" import { Dayjs } from "dayjs" import { INITIALIZING } from "../backend/common/infrastructure/Atomic.js" -import { ErrorIsh } from "./ErrorUtils.js" +import { type ErrorIsh } from "./ErrorUtils.js" export interface PlayApiCommon { uid: string diff --git a/src/core/Atomic.ts b/src/core/Atomic.ts index 39f5d3c8..18ec059f 100644 --- a/src/core/Atomic.ts +++ b/src/core/Atomic.ts @@ -1,11 +1,11 @@ -import { LogDataPretty, LogLevel } from "@foxxmd/logging"; +import { type LogDataPretty, type LogLevel } from "@foxxmd/logging"; import { Dayjs } from "dayjs"; -import { AdditionalTrackInfoResponse } from "../backend/common/vendor/listenbrainz/interfaces.js"; -import { DeepOmit, Merge, RequiredKeys, StrictOmit } from "ts-essentials"; -import { ErrorObject } from "serialize-error"; -import { PlayPlatformIdStr } from "../backend/common/infrastructure/Atomic.js"; -import { FlowControlTerm, TransformHook } from "../backend/common/infrastructure/Transform.js"; -import { Changeset } from "json-diff-ts"; +import { type AdditionalTrackInfoResponse } from "../backend/common/vendor/listenbrainz/interfaces.js"; +import type { DeepOmit, Merge, RequiredKeys, StrictOmit } from "ts-essentials"; +import { type ErrorObject } from "serialize-error"; +import { type PlayPlatformIdStr } from "../backend/common/infrastructure/Atomic.js"; +import { type FlowControlTerm, type TransformHook } from "../backend/common/infrastructure/Transform.js"; +import { type Changeset } from "json-diff-ts"; import {type IParseBaseOptions } from 'qs'; export type ComponentTypeClient = 'client'; diff --git a/src/core/DataUtils.ts b/src/core/DataUtils.ts index abe39cca..bd5578b0 100644 --- a/src/core/DataUtils.ts +++ b/src/core/DataUtils.ts @@ -1,6 +1,6 @@ import { create as diffCreate } from "jsondiffpatch"; -import { DeepReplaceValue, numberFormatOptions, REGEX_ISO8601_LOOSE } from './Atomic.js'; -import { diff, applyChangeset, Changeset, Options } from 'json-diff-ts'; +import { type DeepReplaceValue, type numberFormatOptions, REGEX_ISO8601_LOOSE } from './Atomic.js'; +import { diff, applyChangeset, type Changeset, type Options } from 'json-diff-ts'; // may want to return to this one day // but currently the jsondiffpatch formatter is the best console/ansi diff output for humans :( //import {DiffOptions, DiffOptionsColor, diff as jestDiff} from 'jest-diff'; diff --git a/src/core/ErrorUtils.ts b/src/core/ErrorUtils.ts index c8b21a98..34776ef3 100644 --- a/src/core/ErrorUtils.ts +++ b/src/core/ErrorUtils.ts @@ -1,6 +1,6 @@ import { type MarkOptional } from "ts-essentials"; import { truncateStringToLength } from "./StringUtils.js"; -import { ErrorLike, isErrorLike } from 'serialize-error'; +import { type ErrorLike, isErrorLike } from 'serialize-error'; export type ErrorIsh = Error | MarkOptional; diff --git a/src/core/PlayMarshalUtils.ts b/src/core/PlayMarshalUtils.ts index 528a7bca..66921983 100644 --- a/src/core/PlayMarshalUtils.ts +++ b/src/core/PlayMarshalUtils.ts @@ -1,13 +1,13 @@ import clone from 'clone'; import dayjs, { Dayjs } from 'dayjs'; -import { Traverse, TraverseContext } from 'neotraverse/modern'; +import { Traverse, type TraverseContext } from 'neotraverse/modern'; import { ListenRange } from '../backend/sources/PlayerState/ListenRange.js'; -import { AmbPlayObject, DateLike, ErrorLike, JsonPlayObject, PlayObject, PlayProgressAmb, REGEX_ISO8601_LOOSE, Replace } from './Atomic.js'; +import { type AmbPlayObject, type DateLike, type ErrorLike, type JsonPlayObject, type PlayObject, type PlayProgressAmb, REGEX_ISO8601_LOOSE, type Replace } from './Atomic.js'; import { ListenProgressPositional, ListenProgressTS } from '../backend/sources/PlayerState/ListenProgress.js'; -import { DeepPick, ElementOf, MarkOptional, PickKeys } from 'ts-essentials'; -import { PlaySelectWithQueueStates } from '../backend/common/database/drizzle/drizzleTypes.js'; -import { ErrorObject, serializeError } from 'serialize-error'; -import { PlayApiCommonDetailed } from './Api.js'; +import type { DeepPick, ElementOf, MarkOptional, PickKeys } from 'ts-essentials'; +import { type PlaySelectWithQueueStates } from '../backend/common/database/drizzle/drizzleTypes.js'; +import { type ErrorObject, serializeError } from 'serialize-error'; +import { type PlayApiCommonDetailed } from './Api.js'; interface BlockPath { key: string, parent: string }; type BlockPaths = BlockPath[]; diff --git a/src/core/PlayTestUtils.ts b/src/core/PlayTestUtils.ts index 54e44d87..cabd7d4b 100644 --- a/src/core/PlayTestUtils.ts +++ b/src/core/PlayTestUtils.ts @@ -5,15 +5,15 @@ import isBetween from "dayjs/plugin/isBetween.js"; import relativeTime from "dayjs/plugin/relativeTime.js"; import timezone from "dayjs/plugin/timezone.js"; import utc from "dayjs/plugin/utc.js"; -import { ArtistCredit, BrainzMeta, FEAT, JOINERS, JOINERS_FINAL, JsonPlayObject, MBID, MissingMbidType, ObjectPlayData, PlayMeta, PlayObject, SourcePlayerObj } from "./Atomic.js"; +import { type ArtistCredit, type BrainzMeta, FEAT, JOINERS, JOINERS_FINAL, type JsonPlayObject, type MBID, type MissingMbidType, type ObjectPlayData, type PlayMeta, type PlayObject, type SourcePlayerObj } from "./Atomic.js"; import { genGroupIdStr } from './PlayUtils.js'; import { sortByNewestPlayDate } from './PlayUtils.js'; -import { CALCULATED_PLAYER_STATUSES, NO_DEVICE, NO_USER, PlayerStateDataMaybePlay, PlayPlatformId, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID } from '../backend/common/infrastructure/Atomic.js'; +import { CALCULATED_PLAYER_STATUSES, NO_DEVICE, NO_USER, type PlayerStateDataMaybePlay, type PlayPlatformId, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID } from '../backend/common/infrastructure/Atomic.js'; import { arrayListAnd, artistNamesToCredits } from './StringUtils.js'; import { findDelimiters } from "./StringUtils.js"; -import { ListRecord } from '../backend/common/infrastructure/config/client/tealfm.js'; +import { type ListRecord } from '../backend/common/infrastructure/config/client/tealfm.js'; import { nanoid } from 'nanoid'; -import { LastFMTrackObject } from '../backend/common/vendor/LastfmApiClient.js'; +import { type LastFMTrackObject } from '../backend/common/vendor/LastfmApiClient.js'; import clone from 'clone'; import { removeUndefinedKeys } from '../backend/utils.js'; import { FmTealAlphaFeedPlay } from '../backend/common/vendor/teal/lexicons/index.js'; diff --git a/src/core/PlayUtils.ts b/src/core/PlayUtils.ts index 0d079aa2..7955c3df 100644 --- a/src/core/PlayUtils.ts +++ b/src/core/PlayUtils.ts @@ -1,5 +1,5 @@ -import { PlayPlatformId } from "../backend/common/infrastructure/Atomic.js"; -import { AmbPlayObject, DateLike, PlayObject, PlayObjectMinimal } from "./Atomic.js"; +import { type PlayPlatformId } from "../backend/common/infrastructure/Atomic.js"; +import { type AmbPlayObject, type DateLike, type PlayObject, type PlayObjectMinimal } from "./Atomic.js"; import dayjs from "dayjs"; export const sortByNewestDate = (aPlayDate: DateLike, bPlayDate: DateLike) => { diff --git a/src/core/StringUtils.ts b/src/core/StringUtils.ts index e1762fb3..306dfacd 100644 --- a/src/core/StringUtils.ts +++ b/src/core/StringUtils.ts @@ -5,14 +5,14 @@ import relativeTime from "dayjs/plugin/relativeTime.js"; import timezone from "dayjs/plugin/timezone.js"; import utc from "dayjs/plugin/utc.js"; import { - AmbPlayObject, - ArtistCredit, - PlayData, - PlayObject, + type AmbPlayObject, + type ArtistCredit, + type PlayData, + type PlayObject, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, - ScrobbleTsSOC, - TrackStringOptions + type ScrobbleTsSOC, + type TrackStringOptions } from "./Atomic.js"; import { DELIMETERS_REGEX, DELIMITERS } from "../backend/common/infrastructure/Atomic.js"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; diff --git a/src/core/TimeUtils.ts b/src/core/TimeUtils.ts index faa91fa7..213117db 100644 --- a/src/core/TimeUtils.ts +++ b/src/core/TimeUtils.ts @@ -1,7 +1,7 @@ import dayjs, { Dayjs } from "dayjs"; import isToday from 'dayjs/plugin/isToday.js'; import { SHORT_CALENDAR_NOTZ_FORMAT, SHORT_TODAY_NOTZ_FORMAT } from "./Atomic.js"; -import { Milliseconds } from "../backend/utils/TimeUtils.js"; +import { type Milliseconds } from "../backend/utils/TimeUtils.js"; dayjs.extend(isToday); diff --git a/src/core/tests/utils/apiFixtures.ts b/src/core/tests/utils/apiFixtures.ts index 30f61329..4fb30737 100644 --- a/src/core/tests/utils/apiFixtures.ts +++ b/src/core/tests/utils/apiFixtures.ts @@ -1,20 +1,20 @@ import { faker } from "@faker-js/faker"; -import { ComponentClientApi, ComponentClientApiJson, ComponentCommonApi, ComponentCommonApiJson, ComponentSourceApi, ComponentSourceApiJson, ComponentState, PlayApiCommon, PlayApiCommonDetailed, PlayInputApi, QueueStateApi } from "../../Api.js"; -import { CLIENT_INGRESS_QUEUE, JsonPlayObject, PlayObject, PlayState, QUEUE_STATUSES, SOURCE_SOT, SourcePlayerJson, sourceSotTypes } from "../../Atomic.js"; +import { type ComponentClientApi, type ComponentClientApiJson, type ComponentCommonApi, type ComponentCommonApiJson, type ComponentSourceApi, type ComponentSourceApiJson, type ComponentState, type PlayApiCommon, type PlayApiCommonDetailed, type PlayInputApi, type QueueStateApi } from "../../Api.js"; +import { CLIENT_INGRESS_QUEUE, type JsonPlayObject, type PlayObject, type PlayState, QUEUE_STATUSES, SOURCE_SOT, type SourcePlayerJson, sourceSotTypes } from "../../Atomic.js"; import { generatePlay, normalizePlays } from "../../PlayTestUtils.js"; import { generatePlayInput, generatePlayWithLifecycle, playWithLifecycleScrobble, randomPlayState } from "./fixtures.js"; import { asJsonPlayObject } from "../../PlayMarshalUtils.js"; import { generatePlayUid } from "../../StringUtils.js"; import dayjs, { Dayjs } from "dayjs"; -import { ErrorLike } from "serialize-error"; +import { type ErrorLike } from "serialize-error"; import { nanoid } from "nanoid"; -import { isSourceType, SourceType, sourceTypes } from "../../../backend/common/infrastructure/config/source/sources.js"; -import { ClientType, clientTypes } from "../../../backend/common/infrastructure/config/client/clients.js"; -import { ComponentSelect } from "../../../backend/common/database/drizzle/drizzleTypes.js"; +import { isSourceType, type SourceType, sourceTypes } from "../../../backend/common/infrastructure/config/source/sources.js"; +import { type ClientType, clientTypes } from "../../../backend/common/infrastructure/config/client/clients.js"; +import { type ComponentSelect } from "../../../backend/common/database/drizzle/drizzleTypes.js"; import { CALCULATED_PLAYER_STATUSES, isClientType, REPORTED_PLAYER_STATUSES } from "../../../backend/common/infrastructure/Atomic.js"; import { faMarker } from "@fortawesome/free-solid-svg-icons"; import { generateArray } from "../../DataUtils.js"; -import { ErrorIsh } from "../../ErrorUtils.js"; +import { type ErrorIsh } from "../../ErrorUtils.js"; export const generatePlayApiCommon = (commonData: Partial & {play?: JsonPlayObject | PlayObject } = {}, ...playOpts: Parameters): PlayApiCommon => { let play: JsonPlayObject | PlayObject; diff --git a/src/core/tests/utils/fixtures.ts b/src/core/tests/utils/fixtures.ts index df8bff38..06044522 100644 --- a/src/core/tests/utils/fixtures.ts +++ b/src/core/tests/utils/fixtures.ts @@ -1,7 +1,7 @@ import { Traverse } from 'neotraverse/modern'; import { faker } from '@faker-js/faker'; -import { AmbPlayObject, DateLike, LifecycleInput, LifecycleStep, ObjectPlayData, PLAY_STATES, PlayMeta, PlayObject, PlayOriginal, PlayState, ScrobbleResult } from '../../Atomic.js'; -import { generateBrainz, generateMbid, generatePlay, GeneratePlayOpts, generatePlays } from '../../PlayTestUtils.js'; +import { type AmbPlayObject, type DateLike, type LifecycleInput, type LifecycleStep, type ObjectPlayData, PLAY_STATES, type PlayMeta, type PlayObject, type PlayOriginal, type PlayState, type ScrobbleResult } from '../../Atomic.js'; +import { generateBrainz, generateMbid, generatePlay, type GeneratePlayOpts, generatePlays } from '../../PlayTestUtils.js'; import { statefulInvariantTransform } from '../../PlayUtils.js'; import clone from 'clone'; import { diffObjects } from '../../DataUtils.js'; @@ -10,7 +10,7 @@ import { UpstreamError } from '../../../backend/common/errors/UpstreamError.js'; import { playToListenPayload } from '../../../backend/common/vendor/listenbrainz/lzUtils.js'; import { mergeSimpleError, SimpleError, SkipTransformStageError, StagePrerequisiteError, StageTransformError } from '../../../backend/common/errors/MSErrors.js'; import dayjs, { Dayjs } from 'dayjs'; -import { TransformHook } from '../../../backend/common/infrastructure/Transform.js'; +import { type TransformHook } from '../../../backend/common/infrastructure/Transform.js'; import { serializeError } from 'serialize-error'; export interface ScrobbleMatchOptions { diff --git a/src/stories/component/ComponentStatDead.stories.tsx b/src/stories/component/ComponentStatDead.stories.tsx index d2a0fcca..92aa4552 100644 --- a/src/stories/component/ComponentStatDead.stories.tsx +++ b/src/stories/component/ComponentStatDead.stories.tsx @@ -8,7 +8,7 @@ import { sseProviderOptions } from "../../client/AppNext.js"; import {Provider} from "../../client/components/Provider.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; -import { MsSseEvent } from "../../core/Api.js"; +import { type MsSseEvent } from "../../core/Api.js"; import { faker } from "@faker-js/faker"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/component/ComponentStatLive.stories.tsx b/src/stories/component/ComponentStatLive.stories.tsx index d36fa6a0..2830b865 100644 --- a/src/stories/component/ComponentStatLive.stories.tsx +++ b/src/stories/component/ComponentStatLive.stories.tsx @@ -8,7 +8,7 @@ import { sseProviderOptions } from "../../client/AppNext.js"; import {Provider} from "../../client/components/Provider.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; -import { MsSseEvent } from "../../core/Api.js"; +import { type MsSseEvent } from "../../core/Api.js"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export const meta = preview.meta({ diff --git a/src/stories/component/ComponentStatQueued.stories.tsx b/src/stories/component/ComponentStatQueued.stories.tsx index 108f663d..256522fb 100644 --- a/src/stories/component/ComponentStatQueued.stories.tsx +++ b/src/stories/component/ComponentStatQueued.stories.tsx @@ -8,7 +8,7 @@ import { sseProviderOptions } from "../../client/AppNext.js"; import {Provider} from "../../client/components/Provider.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../core/tests/utils/apiFixtures.js"; -import { MsSseEvent } from "../../core/Api.js"; +import { type MsSseEvent } from "../../core/Api.js"; import { faker } from "@faker-js/faker"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/component/ComponentSummary.stories.tsx b/src/stories/component/ComponentSummary.stories.tsx index 2a854df3..c5e88909 100644 --- a/src/stories/component/ComponentSummary.stories.tsx +++ b/src/stories/component/ComponentSummary.stories.tsx @@ -6,7 +6,7 @@ import { Container } from '@chakra-ui/react'; import { MSComponentSummary } from "../../client/components/msComponent/MSComponentSummary.js"; import {Provider} from "../../client/components/Provider.js"; import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; -import { MsSseEvent } from "../../core/Api.js"; +import { type MsSseEvent } from "../../core/Api.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from "../../client/AppNext.js"; import { faker } from "@faker-js/faker"; diff --git a/src/stories/component/Player.stories.tsx b/src/stories/component/Player.stories.tsx index 1bafbda1..0d4a4e39 100644 --- a/src/stories/component/Player.stories.tsx +++ b/src/stories/component/Player.stories.tsx @@ -6,7 +6,7 @@ import { Container } from '@chakra-ui/react'; import { ChakraPlayer, ChakraPlayerFetchable } from "../../client/components/chakraPlayer/Player.js"; import {Provider} from "../../client/components/Provider.js"; import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; -import { MsSseEvent } from "../../core/Api.js"; +import { type MsSseEvent } from "../../core/Api.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from "../../client/AppNext.js"; import dayjs from "dayjs"; diff --git a/src/stories/miscComponents/ErrorAlert.stories.tsx b/src/stories/miscComponents/ErrorAlert.stories.tsx index 61b86f83..f438c915 100644 --- a/src/stories/miscComponents/ErrorAlert.stories.tsx +++ b/src/stories/miscComponents/ErrorAlert.stories.tsx @@ -5,7 +5,7 @@ import { Container } from '@chakra-ui/react'; import { fn } from 'storybook/test'; import { ErrorAlert } from "../../client/components/ErrorAlert.js"; import {Provider} from "../../client/components/Provider.js"; -import { ErrorLike } from "../../core/Atomic.js"; +import { type ErrorLike } from "../../core/Atomic.js"; import { serializeError } from "serialize-error"; const stack = "Scrobble Submit Error: Failed to submit to Listenbrainz (listen_type single)\n at ListenbrainzApiClient.submitListen (/app/src/backend/common/vendor/ListenbrainzApiClient.ts:246:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async ListenbrainzScrobbler.doScrobble (/app/src/backend/scrobblers/ListenbrainzScrobbler.ts:87:28)\n at async ListenbrainzScrobbler.scrobble (/app/src/backend/scrobblers/AbstractScrobbleClient.ts:679:28)\n at async ListenbrainzScrobbler.processDeadLetterScrobble (/app/src/backend/scrobblers/AbstractScrobbleClient.ts:920:39)\n at async ListenbrainzScrobbler.processDeadLetterQueue (/app/src/backend/scrobblers/AbstractScrobbleClient.ts:894:43)\n at async PromisePoolExecutor.handler (/app/src/backend/tasks/heartbeatClients.ts:35:21)\n at async PromisePoolExecutor.waitForActiveTaskToFinish (/app/node_modules/@supercharge/promise-pool/dist/promise-pool-executor.js:375:9)\n at async PromisePoolExecutor.waitForProcessingSlot (/app/node_modules/@supercharge/promise-pool/dist/promise-pool-executor.js:368:13)\n at async PromisePoolExecutor.process (/app/node_modules/@supercharge/promise-pool/dist/promise-pool-executor.js:354:13)"; diff --git a/src/stories/pages/ComponentDetailed.stories.tsx b/src/stories/pages/ComponentDetailed.stories.tsx index 9b8bc8a2..7b6ee37d 100644 --- a/src/stories/pages/ComponentDetailed.stories.tsx +++ b/src/stories/pages/ComponentDetailed.stories.tsx @@ -6,11 +6,11 @@ import { Container } from '@chakra-ui/react'; import { ComponentDetailedDesktop } from "../../client/components/msComponent/MSComponentDetailed.js"; import {Provider} from "../../client/components/Provider.js"; import { generateClientApiJson, generateFakeError, generatePlayApiCommonDetailed, generatePlayApiCommonDetailedList, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; -import { MsSseEvent, PlayApiCommonDetailed } from "../../core/Api.js"; +import { type MsSseEvent, type PlayApiCommonDetailed } from "../../core/Api.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from "../../client/AppNext.js"; import { faker } from "@faker-js/faker"; -import { PaginatedResponse } from "../../backend/common/database/drizzle/repositories/BaseRepository.js"; +import { type PaginatedResponse } from "../../backend/common/database/drizzle/repositories/BaseRepository.js"; import dayjs from "dayjs"; import { serializeError } from "serialize-error"; import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router'; diff --git a/src/stories/pages/ComponentList.stories.tsx b/src/stories/pages/ComponentList.stories.tsx index 344bf288..7501d202 100644 --- a/src/stories/pages/ComponentList.stories.tsx +++ b/src/stories/pages/ComponentList.stories.tsx @@ -7,7 +7,7 @@ import {Provider} from "../../client/components/Provider.js"; import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; import { generateArray } from "../../core/DataUtils.js"; import { faker } from "@faker-js/faker"; -import { MsSseEvent } from "../../core/Api.js"; +import { type MsSseEvent } from "../../core/Api.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from "../../client/AppNext.js"; import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router'; diff --git a/src/stories/plays/ActivityList.stories.tsx b/src/stories/plays/ActivityList.stories.tsx index cc82040b..ba546c48 100644 --- a/src/stories/plays/ActivityList.stories.tsx +++ b/src/stories/plays/ActivityList.stories.tsx @@ -1,23 +1,23 @@ import '../../client/wdyr.js'; import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse, StrictRequest, DefaultBodyType, JsonBodyType } from 'msw'; +import { http, HttpResponse, delay, sse, type StrictRequest, type DefaultBodyType, type JsonBodyType } from 'msw'; import { fn } from 'storybook/test'; import { Container } from '@chakra-ui/react'; import { ListContainerFetchable, ListContainerFilterable, ActivityList } from "../../client/components/playActivity/ActivityList.js"; import {Provider} from "../../client/components/Provider.js"; import { generateJsonPlays, generatePlay, normalizePlays } from "../../core/PlayTestUtils.js"; -import { ErrorLike, JsonPlayObject, PlayState, qsOptions } from "../../core/Atomic.js"; +import { type ErrorLike, type JsonPlayObject, type PlayState, qsOptions } from "../../core/Atomic.js"; import {playWithLifecycleScrobble, generatePlayWithLifecycle, randomPlayState} from '../../core/tests/utils/fixtures.js' import { generateArray } from "../../core/DataUtils.js"; import dayjs from "dayjs"; import qs from 'qs'; import { asJsonPlayObject } from "../../core/PlayMarshalUtils.js"; import { generatePlayApiCommon, generatePlayApiCommonDetailed, generatePlayApiCommonDetailedList } from "../../core/tests/utils/apiFixtures.js"; -import { MsSseEvent, PlayApiCommonDetailed } from "../../core/Api.js"; -import { CompareDateBetween, PaginatedResponse } from "../../backend/common/database/drizzle/repositories/BaseRepository.js"; -import { QueryPlaysOptsJson } from '../../backend/common/database/drizzle/repositories/PlayRepository.js'; +import { type MsSseEvent, type PlayApiCommonDetailed } from "../../core/Api.js"; +import { type CompareDateBetween, type PaginatedResponse } from "../../backend/common/database/drizzle/repositories/BaseRepository.js"; +import { type QueryPlaysOptsJson } from '../../backend/common/database/drizzle/repositories/PlayRepository.js'; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from '../../client/AppNext.js'; import { faker } from '@faker-js/faker'; diff --git a/src/stories/plays/ActivityListSkeleton.stories.tsx b/src/stories/plays/ActivityListSkeleton.stories.tsx index dbb730f7..34c34202 100644 --- a/src/stories/plays/ActivityListSkeleton.stories.tsx +++ b/src/stories/plays/ActivityListSkeleton.stories.tsx @@ -5,7 +5,7 @@ import { Container } from '@chakra-ui/react'; import { fn } from 'storybook/test'; import { ErrorAlert } from "../../client/components/ErrorAlert.js"; import {Provider} from "../../client/components/Provider.js"; -import { ErrorLike } from "../../core/Atomic.js"; +import { type ErrorLike } from "../../core/Atomic.js"; import { ActivitySummarySkeleton } from "../../client/components/ActivityDetail.js"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/plays/PlayInfo.stories.tsx b/src/stories/plays/PlayInfo.stories.tsx index 8a6ab9c7..3b909b41 100644 --- a/src/stories/plays/PlayInfo.stories.tsx +++ b/src/stories/plays/PlayInfo.stories.tsx @@ -8,7 +8,7 @@ import { Container } from '@chakra-ui/react'; import { generateArtistCredits, generateArtists, generateJsonPlay, generatePlay, withBrainz } from "../../core/PlayTestUtils.js" import clone from "clone"; import { asJsonPlayObject } from '../../core/PlayMarshalUtils.js'; -import { JsonPlayObject } from "../../core/Atomic.js"; +import { type JsonPlayObject } from "../../core/Atomic.js"; type PropsAndCustomArgs = React.ComponentProps & { includeAlbumArtists?: boolean; diff --git a/src/stories/plays/listFilters/PlayFilters.stories.tsx b/src/stories/plays/listFilters/PlayFilters.stories.tsx index 183a5186..8ccf9a2a 100644 --- a/src/stories/plays/listFilters/PlayFilters.stories.tsx +++ b/src/stories/plays/listFilters/PlayFilters.stories.tsx @@ -5,9 +5,9 @@ import { Container, Stack } from '@chakra-ui/react'; import { fn } from 'storybook/test'; import { ErrorAlert } from "../../../client/components/ErrorAlert.js"; import {Provider} from "../../../client/components/Provider.js"; -import { ErrorLike } from "../../../core/Atomic.js"; +import { type ErrorLike } from "../../../core/Atomic.js"; import { ListFilters, todayRange } from "../../../client/components/playActivity/ListFilters.js"; -import { QueryPlaysOptsJson } from "../../../backend/common/database/drizzle/repositories/PlayRepository.js"; +import { type QueryPlaysOptsJson } from "../../../backend/common/database/drizzle/repositories/PlayRepository.js"; const ContainedFilter = (props: any) => { const [filters, setFilter] = useState({ diff --git a/src/stories/plays/listFilters/PlayState.stories.tsx b/src/stories/plays/listFilters/PlayState.stories.tsx index 8c2fe09b..a888200e 100644 --- a/src/stories/plays/listFilters/PlayState.stories.tsx +++ b/src/stories/plays/listFilters/PlayState.stories.tsx @@ -5,7 +5,7 @@ import { Container } from '@chakra-ui/react'; import { fn } from 'storybook/test'; import { ErrorAlert } from "../../../client/components/ErrorAlert.js"; import {Provider} from "../../../client/components/Provider.js"; -import { ErrorLike } from "../../../core/Atomic.js"; +import { type ErrorLike } from "../../../core/Atomic.js"; import { PlayStateFilter } from "../../../client/components/playActivity/ListFilters.js"; diff --git a/tsconfig.json b/tsconfig.json index 4c6cfbc0..4e7b8a40 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,9 @@ "noEmit": true, "jsx": "react-jsx", "sourceMap": false, + "rewriteRelativeImportExtensions": true, + "erasableSyntaxOnly": true, + "verbatimModuleSyntax": true }, "include": [ "src",