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;