0.1.2Updated 7 months ago
import { join } from "node:path";
import { existsSync, walkSync } from "jsr:@std/fs";

import { Entity } from "@infinity-beyond/classes/entity.ts";
import State from "@infinity-beyond/modules/state.ts";

export const Entities: Record<string, typeof Entity> = {}
const classes_path = join(Deno.cwd(), 'classes');

if(State.Environment == 'PROCESSOR') {
  if(!existsSync(classes_path)) {
    console.error(`Could not find a classes directory! Please add all necessary classes to:\n  ${classes_path}`)
  } else {
    for(const dirEntry of walkSync(classes_path, { includeDirs: false })) {
      if(!/\.tsx?$/.test(dirEntry.name)) continue;

      const entity_import = await import(`file://${dirEntry.path}`);
      const entity_exports = Object.values(entity_import) as (typeof Entity)[];

      const entity = entity_exports.find(e => e?.__is_typeof_entity || e instanceof Entity);
      if(!entity) continue;

      Entities[entity.name] = entity;
    }
  }
}