async getChildren()

in src/entityExplorer.ts [53:125]


    async getChildren(element?: WskEntity): Promise<WskEntity[]> {
        const listOptions = { limit: 0 };
        const compareName = (a: openwhisk.Desc, b: openwhisk.Desc) =>
            a.name?.localeCompare(b.name as string) as number;

        if (element) {
            if (element instanceof WskEndpoint) {
                const namespaces = this.storageManager.getNamespaces(element.apihost);
                if (namespaces) {
                    return Promise.resolve(
                        namespaces.map(
                            (ns) =>
                                new WskNamespace(
                                    ns.name,
                                    openwhisk({ apihost: element.apihost, api_key: ns.api_key }),
                                    element
                                )
                        )
                    );
                }
            } else if (element instanceof WskNamespace) {
                const packages = element.client.packages
                    .list(listOptions)
                    .then((ps) =>
                        ps.sort(compareName).map((p) => createWskPackage(p, element.client))
                    );
                const triggers = element.client.triggers
                    .list(listOptions)
                    .then((ts) =>
                        ts.sort(compareName).map((t) => createWskTrigger(t, element.client))
                    );
                const actions = element.client.actions.list(listOptions).then((as) =>
                    as
                        .filter((a) => !a.namespace?.includes('/'))
                        .sort(compareName)
                        .map((a) => createWskAction(a, element.client))
                );
                return Promise.all<WskEntity[], WskEntity[], WskEntity[]>([
                    packages,
                    actions,
                    triggers,
                ]).then((arrs) => Promise.resolve<WskEntity[]>(arrs[0].concat(...arrs.slice(1))));
            } else if (element instanceof WskPackage) {
                if (element.packageDesc.name) {
                    const actionsInPackage = (
                        await element.client.packages.get(element.packageDesc.name)
                    ).actions;
                    if (actionsInPackage) {
                        return Promise.resolve(
                            actionsInPackage.map((a) =>
                                createWskAction(a, element.client, element.packageDesc)
                            )
                        );
                    }
                }
            }
        } else {
            try {
                await updateStatesByLocalWskPropFile(this.storageManager);
            } catch (e) {
                vscode.window.showErrorMessage(`Failed to load .wskprops (${e.message})`);
            }
            const endpoints = this.storageManager.getEndpoints();
            if (endpoints) {
                return Promise.resolve(
                    Object.entries(endpoints).map(
                        ([host, value]) => new WskEndpoint(value.alias, host)
                    )
                );
            }
        }
        return [];
    }