benchling_typescript_sdk
Version:
Typescript SDK for Benchling API
50 lines (47 loc) • 1.87 kB
text/typescript
import { compileAppConfigItems, ConfigItem, KeyName, SubKeyName } from "../../utils/readAppConfig";
import { BaseClient } from "../BaseClient";
import { chunkQueries } from "../superModules/chunkQueries";
import {
AppConfigItem,
AppConfigurationItemsGetParamQuery,
BenchlingApp,
BenchlingAppGetParamQuery,
} from "../types";
type LimitedListQueries = keyof NonNullable<AppConfigurationItemsGetParamQuery>;
export class Apps {
private client: BaseClient;
constructor(client: BaseClient) {
this.client = client;
}
public listApps(parameters: BenchlingAppGetParamQuery): AsyncGenerator<BenchlingApp[]> {
return this.client.fetchPagesIterator<BenchlingApp>("apps", parameters);
}
public async *listAppConfigurationItemsNoLimits(
paramQuery: AppConfigurationItemsGetParamQuery
): AsyncGenerator<AppConfigItem[]> {
// console.log("I was run!!");
const limitedSearches: LimitedListQueries[] = ["ids"];
if (!paramQuery || typeof paramQuery !== "object") {
throw new Error("Invalid query parameters provided.");
}
// Generate the list of chunked queries so that no list of queries is longer than 100
let paramQueries: AppConfigurationItemsGetParamQuery[] = chunkQueries<
NonNullable<AppConfigurationItemsGetParamQuery>
>(paramQuery, 100, limitedSearches);
// Iterate over each chunked query
for (const query of paramQueries) {
// console.log(query);
// Call list for the current query
for await (const batch of this.listAppConfigurationItems(query)) {
// Yield each batch
// console.log(batch);
yield batch;
}
}
}
public listAppConfigurationItems(
parameters: AppConfigurationItemsGetParamQuery
): AsyncGenerator<AppConfigItem[]> {
return this.client.fetchPagesIterator<AppConfigItem>("app-configuration-items", parameters);
}
}