import type { WorkadventureImport } from './iframe_api';
type PromiseReturnType
= P extends Promise ? T : P;
type WorkadventureCommandClasses = PromiseReturnType[number];
type KeysOfUnion = T extends T ? keyof T : never;
type ObjectWithKeyOfUnion = O extends O ? (Key extends keyof O ? O[Key] : never) : never;
type ApiKeys = KeysOfUnion;
type ObjectOfKey = O extends O ? (Key extends keyof O ? O : never) : never;
type ShouldAddAttribute = ObjectWithKeyOfUnion;
type WorkadventureFunctions = {
[K in ApiKeys]: ObjectWithKeyOfUnion extends Function ? K : never;
}[ApiKeys];
type WorkadventureFunctionsFilteredByRoot = {
[K in WorkadventureFunctions]: ObjectOfKey["addMethodsAtRoot"] extends true ? K : never;
}[WorkadventureFunctions];
type JustMethodKeys = ({
[P in keyof T]: T[P] extends Function ? P : never;
})[keyof T];
type JustMethods = Pick>;
type SubObjectTypes = {
[importCl in WorkadventureCommandClasses as importCl["subObjectIdentifier"]]: JustMethods;
};
export type WorkAdventureApi = {
[Key in WorkadventureFunctionsFilteredByRoot]: ShouldAddAttribute;
} & SubObjectTypes;