import OB,{Keys,Enum} from "@onebro/oba-common"; import OBACore from "@onebro/oba-core"; import {Model,ModelControllerReqs} from "@onebro/oba-mongoose"; import { ModelSignatures as Sigs, ModelFactories, ModelControllers, UserRoles as Roles, } from "../../../src"; const getUsers:() => Enum = () => ({ john:OB.slugId("John"), jim:OB.slugId("Jim"), jenn:OB.slugId("Jenn"), jack:OB.slugId("Jack"), }); const getDevices:() => Enum = () => ({ john:OB.longId(), jim:OB.longId(), jenn:OB.longId(), jack:OB.longId(), }); export type FactoryCRUDMethods = { "create":"config"; "update":"updates"; "fetch":"fetches"; "query":"queries"; "remove":"fetches"; }; export interface FactoryNetwork { users:Enum; devices:Enum; factories:ModelFactories; instances:{[k in Keys]:Model["instance"][];}; init:(api:OBACore) => Promise; } export class FactoryNetwork { users = getUsers(); devices = getDevices(); init = async (api:OBACore) => { this.factories = await new ModelFactories().init(api); const instances:any = {}; for(const k in this.factories) instances[k as Keys] = []; this.instances = instances; }; } export type FactoryTestData = {[k in Keys]:{[l in Keys]:(O:FactoryNetwork) => Model[FactoryCRUDMethods[l]][];};}; export type FactoryTestFunc = {[k in Keys]:{[l in Keys]:(O:FactoryNetwork) => Promise;};}; export type ControllerKeys = Exclude,"init$">; export interface ControllerNetwork { users:Enum; devices:Enum; controllers:ModelControllers; jsons:{[k in ControllerKeys]:Model["json"][];}; init:(api:OBACore) => Promise; } export class ControllerNetwork { users = getUsers(); devices = getDevices(); init = async (api:OBACore) => { this.controllers = await new ModelControllers().init$(api); const jsons:any = {}; for(const k in this.controllers) jsons[k as ControllerKeys] = []; this.jsons = jsons; }; } export type controllers = ModelControllers[k]; export type cc>> = controllers[l]; export type ccc>> = cc extends (...a:any[]) => any?Parameters>[0]:never; export type ControllerTestData = {[k in ControllerKeys]:{[l in Keys>]:(O:ControllerNetwork) => ccc[];};}; export type ControllerTestFunc = {[k in ControllerKeys]:{[l in Keys>]:(O:ControllerNetwork) => Promise;};};