semantic-network
Version:
A utility library for manipulating a list of links that form a semantic interface to a network of resources.
53 lines • 2.37 kB
JavaScript
import { __awaiter } from "tslib";
import { LinkUtil } from 'semantic-link';
import { LinkRelation } from '../linkRelation';
import anylogger from 'anylogger';
import { bottleneckLoader } from './bottleneckLoader';
const log = anylogger('HttpRequest');
export class HttpRequest {
constructor(options) {
this.options = options;
const { loader = bottleneckLoader } = Object.assign({}, options);
this.loader = loader;
if (!loader) {
throw new Error('Loader must be provided');
}
}
/**
* TODO: should probably return T | undefined
*/
load(link, rel, options) {
return __awaiter(this, void 0, void 0, function* () {
const { getFactory = this.options.getFactory } = Object.assign({}, options);
// TODO: does the id factory needs to be eTag aware?
// note: leaving media type out of id
const id = LinkUtil.getUri(link, rel);
if (id) {
return yield this.loader.schedule(id, () => getFactory(link, rel, options), options);
}
else {
log.warn('uri not found on link for id - using default loader');
return yield this.loader.submit(() => getFactory(link, rel, options), options);
}
});
}
update(resource, document, options) {
return __awaiter(this, void 0, void 0, function* () {
const { rel = LinkRelation.Self, putFactory = this.options.putFactory, } = Object.assign({}, options);
return yield this.loader.submit(() => putFactory(resource, rel, document, options), options);
});
}
create(resource, document, options) {
return __awaiter(this, void 0, void 0, function* () {
const { rel = LinkRelation.Self, postFactory = this.options.postFactory, } = Object.assign({}, options);
return yield this.loader.submit(() => postFactory(resource, rel, document, options), options);
});
}
del(resource, options) {
return __awaiter(this, void 0, void 0, function* () {
const { rel = LinkRelation.Self, deleteFactory = this.options.deleteFactory, } = Object.assign({}, options);
return yield this.loader.submit(() => deleteFactory(resource, rel), options);
});
}
}
//# sourceMappingURL=httpRequest.js.map