import type { Company } from "./company.js"; import type { ConnectorType } from "./connector.js"; import type { SocketType } from "./cpu.js"; import type { MemoryType } from "./memory.js"; import type { DiscType, DiskType, IStorage } from "./storage.js"; import type { INet } from "./types.js"; enum ItemType { SCREWDRIVER, CPU, GRAPHIC_CARD, RAM_MODULE, DISK, DISC, TAPE, VHS, DISKETTE, CASE, PSU, MOTHERBOARD, FAN, CPU_COOLER, GPU_COOLER, NETWORK_CARD, SOUND_CARD, NETWORK_SWITCH, WIFI_AP, ROUTER, MODEM, MONITOR, KEYBOARD, MOUSE, JOYSTICK, HEADPHONES, DAC, MICROPHONE, CAMERA, PHONE, LAPTOP, COMPUTER, SECURITY_KEY, } enum FormFactorType { M_ATX, ATX, E_ATX, } interface IItem { type: ItemType; name: string; durability: number; manufacturer?: Company | "Player"; availability?: number; rarity?: number; price?: number; canFitInComputerCase?: boolean; canFitInLaptopCase?: boolean; canFitInMobileCase?: boolean; } interface IConnectedDevice extends IItem { connector: ConnectorType; } interface IScrewdriver extends IItem { quality: number; } interface ICPUCore { originalClockSpeed: number; clockSpeed: number; threads: number; cacheL1?: number; cacheL2?: number; } interface ICPU extends IItem { cores: ICPUCore[]; cacheL3?: number; cacheL4?: number; gpu?: IGPU; npu?: INPU; tdp: number; process: number; socket: SocketType; } interface IGPU extends IItem { originalClockSpeed: number; clockSpeed: number; coreCount: number; shadingUnitCount: number; tmuCount: number; ropCount: number; tensorCoreCount: number; rtCoreCount: number; cacheL0?: number; cacheL1?: number; cacheL2?: number; cacheL3?: number; tops: number; pixelRate: number; textureRate: number; fp16flops: number; fp32flops: number; fp64flops: number; features: IGPUFeatures; process: number; } interface INPU extends IItem { tops: number; } interface IGPUFeatures { directxVersion?: number; openglVersion?: number; openclVersion?: number; vulkanVersion?: number; cudaVersion?: number; shaderModel?: number; } interface IGraphicsCard extends IConnectedDevice { gpu: IGPU; memory: IGraphicsCardMemory; tdp: number; } interface IGraphicsCardMemory { type: MemoryType; originalClockSpeed: number; clockSpeed: number; busWidth: number; bandwidth: number; capacity: number; } interface IRAMModule extends IItem { memoryType: MemoryType; originalClockSpeed: number; clockSpeed: number; capacity: number; tdp: number; } interface IDisk extends IConnectedDevice { diskType: DiskType; bandwidth: number; capacity: number; tdp: number; storage: IStorage; } interface IDisc extends IItem { discType: DiscType; bandwidth: number; capacity: number; storage: IStorage; } interface ICase extends IItem { formFactor: FormFactorType; width: number; height: number; depth: number; installedDevices: IItem[]; } interface IPSU extends IItem { formFactor: FormFactorType; width: number; height: number; depth: number; wattage: number; connectors: ConnectorType[]; } interface IMotherboard extends IItem { formFactor: FormFactorType; connectors: ConnectorType[]; socket: SocketType; socketCount: number; memoryType: MemoryType; memorySlots: number; installedCPUs: ICPU[]; installedRAMs: IRAMModule[]; installedDevices: IConnectedDevice[]; } interface IModem extends IItem { bandwidth: number; net: INet; } export { ItemType, FormFactorType, type IItem, type IConnectedDevice, type IScrewdriver, type ICPU, type IGPU, type IGraphicsCard, type IRAMModule, type IDisk, type IDisc, type ICase, type IPSU, type IMotherboard, type IModem, };