Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 0 additions & 135 deletions src/simulator/src/moduleSetup.js

This file was deleted.

141 changes: 141 additions & 0 deletions src/simulator/src/moduleSetup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import modules from './modules';
import Adder from './modules/Adder';
import ALU from './modules/ALU';
import AndGate from './modules/AndGate';
import Arrow from './modules/Arrow';
import ImageAnnotation from './modules/ImageAnnotation';
import BitSelector from './modules/BitSelector';
import Buffer from './modules/Buffer';
import Button from './modules/Button';
import ConstantVal from './modules/ConstantVal';
import ControlledInverter from './modules/ControlledInverter';
import Counter from './modules/Counter';
import Decoder from './modules/Decoder';
import Demultiplexer from './modules/Demultiplexer';
import DigitalLed from './modules/DigitalLed';
import Flag from './modules/Flag';
import Ground from './modules/Ground';
import HexDisplay from './modules/HexDisplay';
import Input from './modules/Input';
import LSB from './modules/LSB';
import MSB from './modules/MSB';
import Multiplexer from './modules/Multiplexer';
import NandGate from './modules/NandGate';
import NorGate from './modules/NorGate';
import NotGate from './modules/NotGate';
import OrGate from './modules/OrGate';
import Output from './modules/Output';
import Power from './modules/Power';
import PriorityEncoder from './modules/PriorityEncoder';
import Random from './modules/Random';
import Rectangle from './modules/Rectangle';
import RGBLed from './modules/RGBLed';
import RGBLedMatrix from './modules/RGBLedMatrix';
import SevenSegDisplay from './modules/SevenSegDisplay';
import SixteenSegDisplay from './modules/SixteenSegDisplay';
import Splitter from './modules/Splitter';
import SquareRGBLed from './modules/SquareRGBLed';
import Stepper from './modules/Stepper';
import Text from './modules/Text';
import TriState from './modules/TriState';
import Tunnel from './modules/Tunnel';
import TwoComplement from './modules/TwoComplement';
import VariableLed from './modules/VariableLed';
import XnorGate from './modules/XnorGate';
import XorGate from './modules/XorGate';
import Clock from './sequential/Clock';
import DflipFlop from './sequential/DflipFlop';
import Dlatch from './sequential/Dlatch';
import EEPROM from './sequential/EEPROM';
import JKflipFlop from './sequential/JKflipFlop';
import Keyboard from './sequential/Keyboard';
import RAM from './sequential/RAM';
import Rom from './sequential/Rom';
import SRflipFlop from './sequential/SRflipFlop';
import TflipFlop from './sequential/TflipFlop';
import TTY from './sequential/TTY';
import ForceGate from './sequential/ForceGate';
import TB_Input from './testbench/testbenchInput';
import TB_Output from './testbench/testbenchOutput';
import verilogMultiplier from './modules/verilogMultiplier';
import verilogDivider from './modules/verilogDivider';
import verilogPower from './modules/verilogPower';
import verilogShiftLeft from './modules/verilogShiftLeft';
import verilogShiftRight from './modules/verilogShiftRight';
import verilogRAM from './sequential/verilogRAM';

// Define an interface for the module set to provide type safety
interface ModuleSet {
[key: string]: any;
}
Comment on lines +67 to +70
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Strengthen type safety by avoiding 'any'.

The current interface uses any which negates TypeScript's type checking benefits. Consider creating a base interface for modules and using it as the value type:

interface SimulatorModule {
  // Common properties that all modules should have
  id?: string;
  type: string;
  // Add other common properties
}

interface ModuleSet {
  [key: string]: SimulatorModule;
}


export default function setupModules(): void {
const moduleSet: ModuleSet = {
AndGate,
Random,
NandGate,
Counter,
Multiplexer,
XorGate,
XnorGate,
SevenSegDisplay,
SixteenSegDisplay,
HexDisplay,
OrGate,
Stepper,
NotGate,
Text,
TriState,
Buffer,
ControlledInverter,
Adder,
verilogMultiplier,
verilogDivider,
verilogPower,
verilogShiftLeft,
verilogShiftRight,
TwoComplement,
Splitter,
Ground,
Power,
Input,
Output,
BitSelector,
ConstantVal,
NorGate,
DigitalLed,
VariableLed,
Button,
RGBLed,
SquareRGBLed,
Demultiplexer,
Decoder,
Flag,
MSB,
LSB,
PriorityEncoder,
Tunnel,
ALU,
Rectangle,
Arrow,
ImageAnnotation,
RGBLedMatrix,
TflipFlop,
DflipFlop,
Dlatch,
SRflipFlop,
JKflipFlop,
TTY,
Keyboard,
Clock,
Rom,
EEPROM,
RAM,
verilogRAM,
TB_Input,
TB_Output,
ForceGate,
};

Object.assign(modules, moduleSet);
}
Comment on lines +72 to +141
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add error handling and consider immutability.

The current implementation has several potential improvements:

  1. Add error handling for the modules object:
export default function setupModules(): void {
  if (!modules) {
    throw new Error('Modules registry is not initialized');
  }
  // ... rest of the function
}
  1. Consider returning a new modules object instead of mutating the existing one:
export default function setupModules(): Record<string, SimulatorModule> {
  return { ...modules, ...moduleSet };
}
  1. Add validation for required module properties before registration.