pailingual-odata
Version:
TypeScript client for OData v4 services
50 lines (44 loc) • 1.62 kB
text/typescript
import { Query } from "./query";
import { CollectionSource } from "./collectionSource";
import { ApiMetadata } from "./metadata";
import { SingleSource } from "./singleSource";
import { generateOperations } from "./utils";
import { Options } from "./options";
export class ApiContextImpl{
constructor(
protected readonly __metadata: ApiMetadata,
protected readonly __options?: Options)
{
this.generate();
}
generate() {
const apiMetaData = this.__metadata;
const opt = this.__options;
for (let p in apiMetaData.entitySets) {
const esMetadata = apiMetaData.entitySets[p];
Object.defineProperty(this, p, {
get() {
let query = Query.create(apiMetaData, esMetadata, opt);
query = query.navigate(p, esMetadata);
return new CollectionSource(esMetadata, apiMetaData, query);
}
});
}
for (let p in apiMetaData.singletons) {
const sMetadata = apiMetaData.singletons[p];
Object.defineProperty(this, p, {
get() {
let query = Query.create(apiMetaData, sMetadata, opt)
.navigate(p, sMetadata);
return new SingleSource(sMetadata, apiMetaData, query);
}
})
}
generateOperations(
this,
() => Query.create(apiMetaData, null as any, opt),
apiMetaData,
undefined
)
}
}