panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
58 lines (52 loc) • 4.68 kB
JavaScript
var createResource, createTemplate, urlJoin;
import urlTemplate from "url-template";
import createMethod from "./method";
import { merge } from "panda-parchment"; // Join the basepath to the API endpoint path.
urlJoin = function (base, path) {
if (base.slice(-1) === "/") {
return base.slice(0, -1) + path;
} else {
return base + path;
}
};
createTemplate = function (T) {
return function (description) {
return urlTemplate.parse(T).expand(description);
};
};
createResource = function (lib, context, {
template,
methods
}) {
var createPath;
createPath = createTemplate(template);
return function (description = {}) {
return new Proxy({}, {
get: function (target, name) {
var _context, method, path, signatures, url;
path = createPath(description);
url = urlJoin(context.basePath, path);
if ((method = methods[name]) != null) {
({
signatures
} = method);
_context = merge(context, {
path: url,
methodName: name,
signatures
});
return createMethod(lib, _context, method);
} else if (name === "path") {
return path;
} else if (name === "url") {
return url;
} else {
return void 0;
}
}
});
};
};
export default createResource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1za3ktY2xpZW50L3NyYy9yZXNvdXJjZS5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUE7QUFBQSxPQUFBLFdBQUEsTUFBQSxjQUFBO0FBQ0EsT0FBQSxZQUFBLE1BQUEsVUFBQTtBQUNBLFNBQUEsS0FBQSxRQUZBLGlCQUVBLEM7O0FBR0EsT0FBQSxHQUFVLFVBQUEsSUFBQSxFQUFBLElBQUEsRUFBQTtBQUNSLE1BQUcsSUFBSyxDQUFBLEtBQUwsQ0FBSyxDQUFMLENBQUEsTUFBSCxHQUFBLEVBQUE7V0FDRSxJQUFLLENBQUEsS0FBTCxDQUFLLENBQUwsRUFBSyxDQUFMLENBQUEsSUFERixJO0FBQUEsR0FBQSxNQUFBO1dBR0UsSUFBQSxHQUhGLEk7O0FBRFEsQ0FBVjs7QUFNQSxjQUFBLEdBQWlCLFVBQUEsQ0FBQSxFQUFBO1NBQ2YsVUFBQSxXQUFBLEVBQUE7V0FBaUIsV0FBVyxDQUFYLEtBQUEsQ0FBQSxDQUFBLEVBQUEsTUFBQSxDQUFBLFdBQUEsQztBQUFqQixHO0FBRGUsQ0FBakI7O0FBR0EsY0FBQSxHQUFpQixVQUFBLEdBQUEsRUFBQSxPQUFBLEVBQWU7QUFBQSxFQUFBLFFBQUE7QUFBZixFQUFBO0FBQWUsQ0FBZixFQUFBO0FBQ2YsTUFBQSxVQUFBO0FBQUEsRUFBQSxVQUFBLEdBQWEsY0FBQSxDQUFBLFFBQUEsQ0FBYjtTQUNBLFVBQUMsV0FBQSxHQUFELEVBQUEsRUFBQTtXQUNFLElBQUEsS0FBQSxDQUFBLEVBQUEsRUFDRTtBQUFBLE1BQUEsR0FBQSxFQUFLLFVBQUEsTUFBQSxFQUFBLElBQUEsRUFBQTtBQUNILFlBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUE7O0FBQUEsUUFBQSxJQUFBLEdBQU8sVUFBQSxDQUFBLFdBQUEsQ0FBUDtBQUNBLFFBQUEsR0FBQSxHQUFNLE9BQUEsQ0FBUSxPQUFPLENBQWYsUUFBQSxFQUFBLElBQUEsQ0FBTjs7QUFFQSxZQUFHLENBQUEsTUFBQSxHQUFBLE9BQUEsQ0FBQSxJQUFBLENBQUEsS0FBSCxJQUFBLEVBQUE7QUFDRSxXQUFBO0FBQUEsWUFBQTtBQUFBLGNBQUEsTUFBQTtBQUNBLFVBQUEsUUFBQSxHQUFXLEtBQUEsQ0FBQSxPQUFBLEVBQWU7QUFBQyxZQUFBLElBQUEsRUFBRCxHQUFBO0FBQVksWUFBQSxVQUFBLEVBQVosSUFBQTtBQUE4QixZQUFBO0FBQTlCLFdBQWYsQ0FBWDtpQkFDQSxZQUFBLENBQUEsR0FBQSxFQUFBLFFBQUEsRUFIRixNQUdFLEM7QUFIRixTQUFBLE1BSUssSUFBRyxJQUFBLEtBQUgsTUFBQSxFQUFBO2lCQUFBLEk7QUFBQSxTQUFBLE1BRUEsSUFBRyxJQUFBLEtBQUgsS0FBQSxFQUFBO2lCQUFBLEc7QUFBQSxTQUFBLE1BQUE7aUJBR0gsS0FIRyxDOztBQVZGO0FBQUwsS0FERixDO0FBREYsRztBQUZlLENBQWpCOztBQW1CQSxlQUFlLGNBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXJsVGVtcGxhdGUgZnJvbSBcInVybC10ZW1wbGF0ZVwiXG5pbXBvcnQgY3JlYXRlTWV0aG9kIGZyb20gXCIuL21ldGhvZFwiXG5pbXBvcnQge21lcmdlfSBmcm9tIFwicGFuZGEtcGFyY2htZW50XCJcblxuIyBKb2luIHRoZSBiYXNlcGF0aCB0byB0aGUgQVBJIGVuZHBvaW50IHBhdGguXG51cmxKb2luID0gKGJhc2UsIHBhdGgpIC0+XG4gIGlmIGJhc2VbLTEuLl0gPT0gXCIvXCJcbiAgICBiYXNlWy4uLi0xXSArIHBhdGhcbiAgZWxzZVxuICAgIGJhc2UgKyBwYXRoXG5cbmNyZWF0ZVRlbXBsYXRlID0gKFQpIC0+XG4gIChkZXNjcmlwdGlvbikgLT4gdXJsVGVtcGxhdGUucGFyc2UoVCkuZXhwYW5kIGRlc2NyaXB0aW9uXG5cbmNyZWF0ZVJlc291cmNlID0gKGxpYiwgY29udGV4dCwge3RlbXBsYXRlLCBtZXRob2RzfSkgLT5cbiAgY3JlYXRlUGF0aCA9IGNyZWF0ZVRlbXBsYXRlIHRlbXBsYXRlXG4gIChkZXNjcmlwdGlvbj17fSkgLT5cbiAgICBuZXcgUHJveHkge30sXG4gICAgICBnZXQ6ICh0YXJnZXQsIG5hbWUpIC0+XG4gICAgICAgIHBhdGggPSBjcmVhdGVQYXRoKGRlc2NyaXB0aW9uKVxuICAgICAgICB1cmwgPSB1cmxKb2luIGNvbnRleHQuYmFzZVBhdGgsIHBhdGhcblxuICAgICAgICBpZiAobWV0aG9kID0gbWV0aG9kc1tuYW1lXSk/XG4gICAgICAgICAge3NpZ25hdHVyZXN9ID0gbWV0aG9kXG4gICAgICAgICAgX2NvbnRleHQgPSBtZXJnZSBjb250ZXh0LCB7cGF0aDogdXJsLCBtZXRob2ROYW1lOiBuYW1lLCBzaWduYXR1cmVzfVxuICAgICAgICAgIGNyZWF0ZU1ldGhvZCBsaWIsIF9jb250ZXh0LCBtZXRob2RcbiAgICAgICAgZWxzZSBpZiBuYW1lID09IFwicGF0aFwiXG4gICAgICAgICAgcGF0aFxuICAgICAgICBlbHNlIGlmIG5hbWUgPT0gXCJ1cmxcIlxuICAgICAgICAgIHVybFxuICAgICAgICBlbHNlXG4gICAgICAgICAgdW5kZWZpbmVkXG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlc291cmNlXG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceURL=/Users/david/repos/panda-sky-client/src/resource.coffee