panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
72 lines (60 loc) • 4.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _urlTemplate = _interopRequireDefault(require("url-template"));
var _method = _interopRequireDefault(require("./method"));
var _pandaParchment = require("panda-parchment");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createResource, createTemplate, urlJoin;
// 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.default.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 = (0, _pandaParchment.merge)(context, {
path: url,
methodName: name,
signatures
});
return (0, _method.default)(lib, _context, method);
} else if (name === "path") {
return path;
} else if (name === "url") {
return url;
} else {
return void 0;
}
}
});
};
};
var _default = createResource;
exports.default = _default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1za3ktY2xpZW50L3NyYy9yZXNvdXJjZS5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOzs7O0FBRkEsSUFBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUE7OztBQUtBLE9BQUEsR0FBVSxVQUFBLElBQUEsRUFBQSxJQUFBLEVBQUE7QUFDUixNQUFHLElBQUssQ0FBQSxLQUFMLENBQUssQ0FBTCxDQUFBLE1BQUgsR0FBQSxFQUFBO1dBQ0UsSUFBSyxDQUFBLEtBQUwsQ0FBSyxDQUFMLEVBQUssQ0FBTCxDQUFBLElBREYsSTtBQUFBLEdBQUEsTUFBQTtXQUdFLElBQUEsR0FIRixJOztBQURRLENBQVY7O0FBTUEsY0FBQSxHQUFpQixVQUFBLENBQUEsRUFBQTtTQUNmLFVBQUEsV0FBQSxFQUFBO1dBQWlCLHFCQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsTUFBQSxDQUFBLFdBQUEsQztBQUFqQixHO0FBRGUsQ0FBakI7O0FBR0EsY0FBQSxHQUFpQixVQUFBLEdBQUEsRUFBQSxPQUFBLEVBQWU7QUFBQSxFQUFBLFFBQUE7QUFBZixFQUFBO0FBQWUsQ0FBZixFQUFBO0FBQ2YsTUFBQSxVQUFBO0FBQUEsRUFBQSxVQUFBLEdBQWEsY0FBQSxDQUFBLFFBQUEsQ0FBYjtTQUNBLFVBQUMsV0FBQSxHQUFELEVBQUEsRUFBQTtXQUNFLElBQUEsS0FBQSxDQUFBLEVBQUEsRUFDRTtBQUFBLE1BQUEsR0FBQSxFQUFLLFVBQUEsTUFBQSxFQUFBLElBQUEsRUFBQTtBQUNILFlBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUE7O0FBQUEsUUFBQSxJQUFBLEdBQU8sVUFBQSxDQUFBLFdBQUEsQ0FBUDtBQUNBLFFBQUEsR0FBQSxHQUFNLE9BQUEsQ0FBUSxPQUFPLENBQWYsUUFBQSxFQUFBLElBQUEsQ0FBTjs7QUFFQSxZQUFHLENBQUEsTUFBQSxHQUFBLE9BQUEsQ0FBQSxJQUFBLENBQUEsS0FBSCxJQUFBLEVBQUE7QUFDRSxXQUFBO0FBQUEsWUFBQTtBQUFBLGNBQUEsTUFBQTtBQUNBLFVBQUEsUUFBQSxHQUFXLDJCQUFBLE9BQUEsRUFBZTtBQUFDLFlBQUEsSUFBQSxFQUFELEdBQUE7QUFBWSxZQUFBLFVBQUEsRUFBWixJQUFBO0FBQThCLFlBQUE7QUFBOUIsV0FBZixDQUFYO2lCQUNBLHFCQUFBLEdBQUEsRUFBQSxRQUFBLEVBSEYsTUFHRSxDO0FBSEYsU0FBQSxNQUlLLElBQUcsSUFBQSxLQUFILE1BQUEsRUFBQTtpQkFBQSxJO0FBQUEsU0FBQSxNQUVBLElBQUcsSUFBQSxLQUFILEtBQUEsRUFBQTtpQkFBQSxHO0FBQUEsU0FBQSxNQUFBO2lCQUdILEtBSEcsQzs7QUFWRjtBQUFMLEtBREYsQztBQURGLEc7QUFGZSxDQUFqQjs7ZUFtQmUsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1cmxUZW1wbGF0ZSBmcm9tIFwidXJsLXRlbXBsYXRlXCJcbmltcG9ydCBjcmVhdGVNZXRob2QgZnJvbSBcIi4vbWV0aG9kXCJcbmltcG9ydCB7bWVyZ2V9IGZyb20gXCJwYW5kYS1wYXJjaG1lbnRcIlxuXG4jIEpvaW4gdGhlIGJhc2VwYXRoIHRvIHRoZSBBUEkgZW5kcG9pbnQgcGF0aC5cbnVybEpvaW4gPSAoYmFzZSwgcGF0aCkgLT5cbiAgaWYgYmFzZVstMS4uXSA9PSBcIi9cIlxuICAgIGJhc2VbLi4uLTFdICsgcGF0aFxuICBlbHNlXG4gICAgYmFzZSArIHBhdGhcblxuY3JlYXRlVGVtcGxhdGUgPSAoVCkgLT5cbiAgKGRlc2NyaXB0aW9uKSAtPiB1cmxUZW1wbGF0ZS5wYXJzZShUKS5leHBhbmQgZGVzY3JpcHRpb25cblxuY3JlYXRlUmVzb3VyY2UgPSAobGliLCBjb250ZXh0LCB7dGVtcGxhdGUsIG1ldGhvZHN9KSAtPlxuICBjcmVhdGVQYXRoID0gY3JlYXRlVGVtcGxhdGUgdGVtcGxhdGVcbiAgKGRlc2NyaXB0aW9uPXt9KSAtPlxuICAgIG5ldyBQcm94eSB7fSxcbiAgICAgIGdldDogKHRhcmdldCwgbmFtZSkgLT5cbiAgICAgICAgcGF0aCA9IGNyZWF0ZVBhdGgoZGVzY3JpcHRpb24pXG4gICAgICAgIHVybCA9IHVybEpvaW4gY29udGV4dC5iYXNlUGF0aCwgcGF0aFxuXG4gICAgICAgIGlmIChtZXRob2QgPSBtZXRob2RzW25hbWVdKT9cbiAgICAgICAgICB7c2lnbmF0dXJlc30gPSBtZXRob2RcbiAgICAgICAgICBfY29udGV4dCA9IG1lcmdlIGNvbnRleHQsIHtwYXRoOiB1cmwsIG1ldGhvZE5hbWU6IG5hbWUsIHNpZ25hdHVyZXN9XG4gICAgICAgICAgY3JlYXRlTWV0aG9kIGxpYiwgX2NvbnRleHQsIG1ldGhvZFxuICAgICAgICBlbHNlIGlmIG5hbWUgPT0gXCJwYXRoXCJcbiAgICAgICAgICBwYXRoXG4gICAgICAgIGVsc2UgaWYgbmFtZSA9PSBcInVybFwiXG4gICAgICAgICAgdXJsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICB1bmRlZmluZWRcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVzb3VyY2VcbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceURL=/Users/david/repos/panda-sky-client/src/resource.coffee