0.1.4•Updated 6 months ago
import { join } from "node:path";
import { existsSync, walkSync } from "jsr:@std/fs";
import type { Entity } from "@infinity-beyond/classes/data_types/entity/mod.ts";
export const FetchInfinityClasses = async (meta_dir: string) => {
const Entities: Map<string, typeof Entity | Entity> = new Map();
const classes_path = join(meta_dir, 'classes');
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(!/\.ts$/.test(dirEntry.name)) continue;
const entity_import = await import(`file://${dirEntry.path}`);
const entity_exports = Object.values(entity_import) as (Entity | typeof Entity)[];
const entity = entity_exports.find(e => (e as typeof Entity)?.__is_typeof_entity || (e as Entity).__is_instanceof_entity);
if(!entity) continue;
Entities.set(entity.name, entity);
}
}
return Entities;
}