UNPKG

@data-client/rest

Version:

Quickly define typed REST resources and endpoints

35 lines 5.91 kB
import { compile, parse } from 'path-to-regexp'; const urlBaseCache = new Map(); export function getUrlBase(path) { if (!urlBaseCache.has(path)) { urlBaseCache.set(path, compile(path, { encode: encodeURIComponent, validate: false })); } return urlBaseCache.get(path); } const urlTokensCache = new Map(); export function getUrlTokens(path) { if (!urlTokensCache.has(path)) { urlTokensCache.set(path, new Set(parse(path).map(t => typeof t === 'string' ? t : `${t['name']}`))); } return urlTokensCache.get(path); } const proto = Object.prototype; const gpo = Object.getPrototypeOf; export function isPojo(obj) { if (obj === null || typeof obj !== 'object') { return false; } return gpo(obj) === proto; } export function shortenPath(path) { const lastColonIndex = path.lastIndexOf(':'); if (lastColonIndex === -1) throw new Error('Resource path requires at least one :parameter'); // this is for when not specifying a specific item like create/list let shortUrlRoot = path.substring(0, lastColonIndex); if (shortUrlRoot[shortUrlRoot.length - 1] === '/') shortUrlRoot = shortUrlRoot.substring(0, shortUrlRoot.length - 1); return shortUrlRoot; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlIiwicGFyc2UiLCJ1cmxCYXNlQ2FjaGUiLCJNYXAiLCJnZXRVcmxCYXNlIiwicGF0aCIsImhhcyIsInNldCIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInZhbGlkYXRlIiwiZ2V0IiwidXJsVG9rZW5zQ2FjaGUiLCJnZXRVcmxUb2tlbnMiLCJTZXQiLCJtYXAiLCJ0IiwicHJvdG8iLCJPYmplY3QiLCJwcm90b3R5cGUiLCJncG8iLCJnZXRQcm90b3R5cGVPZiIsImlzUG9qbyIsIm9iaiIsInNob3J0ZW5QYXRoIiwibGFzdENvbG9uSW5kZXgiLCJsYXN0SW5kZXhPZiIsIkVycm9yIiwic2hvcnRVcmxSb290Iiwic3Vic3RyaW5nIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RIZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBpbGUsIFBhdGhGdW5jdGlvbiwgcGFyc2UgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5cbmltcG9ydCB7IFNob3J0ZW5QYXRoIH0gZnJvbSAnLi9wYXRoVHlwZXMuanMnO1xuXG5jb25zdCB1cmxCYXNlQ2FjaGU6IE1hcDxzdHJpbmcsIFBhdGhGdW5jdGlvbjxvYmplY3Q+PiA9IG5ldyBNYXAoKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxCYXNlKHBhdGg6IHN0cmluZyk6IFBhdGhGdW5jdGlvbiB7XG4gIGlmICghdXJsQmFzZUNhY2hlLmhhcyhwYXRoKSkge1xuICAgIHVybEJhc2VDYWNoZS5zZXQoXG4gICAgICBwYXRoLFxuICAgICAgY29tcGlsZShwYXRoLCB7XG4gICAgICAgIGVuY29kZTogZW5jb2RlVVJJQ29tcG9uZW50LFxuICAgICAgICB2YWxpZGF0ZTogZmFsc2UsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG4gIHJldHVybiB1cmxCYXNlQ2FjaGUuZ2V0KHBhdGgpIGFzIFBhdGhGdW5jdGlvbjtcbn1cblxuY29uc3QgdXJsVG9rZW5zQ2FjaGU6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxUb2tlbnMocGF0aDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICBpZiAoIXVybFRva2Vuc0NhY2hlLmhhcyhwYXRoKSkge1xuICAgIHVybFRva2Vuc0NhY2hlLnNldChcbiAgICAgIHBhdGgsXG4gICAgICBuZXcgU2V0KFxuICAgICAgICBwYXJzZShwYXRoKS5tYXAodCA9PiAodHlwZW9mIHQgPT09ICdzdHJpbmcnID8gdCA6IGAke3RbJ25hbWUnXX1gKSksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVybFRva2Vuc0NhY2hlLmdldChwYXRoKSBhcyBTZXQ8c3RyaW5nPjtcbn1cblxuY29uc3QgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3QgZ3BvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQb2pvKG9iajogdW5rbm93bik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ3BvKG9iaikgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvcnRlblBhdGg8UyBleHRlbmRzIHN0cmluZz4ocGF0aDogUyk6IFNob3J0ZW5QYXRoPFM+IHtcbiAgY29uc3QgbGFzdENvbG9uSW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCc6Jyk7XG4gIGlmIChsYXN0Q29sb25JbmRleCA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNvdXJjZSBwYXRoIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSA6cGFyYW1ldGVyJyk7XG4gIC8vIHRoaXMgaXMgZm9yIHdoZW4gbm90IHNwZWNpZnlpbmcgYSBzcGVjaWZpYyBpdGVtIGxpa2UgY3JlYXRlL2xpc3RcbiAgbGV0IHNob3J0VXJsUm9vdDogU2hvcnRlblBhdGg8Uz4gPSBwYXRoLnN1YnN0cmluZygwLCBsYXN0Q29sb25JbmRleCkgYXMgYW55O1xuICBpZiAoc2hvcnRVcmxSb290W3Nob3J0VXJsUm9vdC5sZW5ndGggLSAxXSA9PT0gJy8nKVxuICAgIHNob3J0VXJsUm9vdCA9IHNob3J0VXJsUm9vdC5zdWJzdHJpbmcoXG4gICAgICAwLFxuICAgICAgc2hvcnRVcmxSb290Lmxlbmd0aCAtIDEsXG4gICAgKSBhcyBTaG9ydGVuUGF0aDxTPjtcbiAgcmV0dXJuIHNob3J0VXJsUm9vdDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxFQUFnQkMsS0FBSyxRQUFRLGdCQUFnQjtBQUk3RCxNQUFNQyxZQUErQyxHQUFHLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLE9BQU8sU0FBU0MsVUFBVUEsQ0FBQ0MsSUFBWSxFQUFnQjtFQUNyRCxJQUFJLENBQUNILFlBQVksQ0FBQ0ksR0FBRyxDQUFDRCxJQUFJLENBQUMsRUFBRTtJQUMzQkgsWUFBWSxDQUFDSyxHQUFHLENBQ2RGLElBQUksRUFDSkwsT0FBTyxDQUFDSyxJQUFJLEVBQUU7TUFDWkcsTUFBTSxFQUFFQyxrQkFBa0I7TUFDMUJDLFFBQVEsRUFBRTtJQUNaLENBQUMsQ0FDSCxDQUFDO0VBQ0g7RUFDQSxPQUFPUixZQUFZLENBQUNTLEdBQUcsQ0FBQ04sSUFBSSxDQUFDO0FBQy9CO0FBRUEsTUFBTU8sY0FBd0MsR0FBRyxJQUFJVCxHQUFHLENBQUMsQ0FBQztBQUMxRCxPQUFPLFNBQVNVLFlBQVlBLENBQUNSLElBQVksRUFBZTtFQUN0RCxJQUFJLENBQUNPLGNBQWMsQ0FBQ04sR0FBRyxDQUFDRCxJQUFJLENBQUMsRUFBRTtJQUM3Qk8sY0FBYyxDQUFDTCxHQUFHLENBQ2hCRixJQUFJLEVBQ0osSUFBSVMsR0FBRyxDQUNMYixLQUFLLENBQUNJLElBQUksQ0FBQyxDQUFDVSxHQUFHLENBQUNDLENBQUMsSUFBSyxPQUFPQSxDQUFDLEtBQUssUUFBUSxHQUFHQSxDQUFDLEdBQUcsR0FBR0EsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFHLENBQ25FLENBQ0YsQ0FBQztFQUNIO0VBQ0EsT0FBT0osY0FBYyxDQUFDRCxHQUFHLENBQUNOLElBQUksQ0FBQztBQUNqQztBQUVBLE1BQU1ZLEtBQUssR0FBR0MsTUFBTSxDQUFDQyxTQUFTO0FBQzlCLE1BQU1DLEdBQUcsR0FBR0YsTUFBTSxDQUFDRyxjQUFjO0FBRWpDLE9BQU8sU0FBU0MsTUFBTUEsQ0FBQ0MsR0FBWSxFQUE4QjtFQUMvRCxJQUFJQSxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7SUFDM0MsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxPQUFPSCxHQUFHLENBQUNHLEdBQUcsQ0FBQyxLQUFLTixLQUFLO0FBQzNCO0FBRUEsT0FBTyxTQUFTTyxXQUFXQSxDQUFtQm5CLElBQU8sRUFBa0I7RUFDckUsTUFBTW9CLGNBQWMsR0FBR3BCLElBQUksQ0FBQ3FCLFdBQVcsQ0FBQyxHQUFHLENBQUM7RUFDNUMsSUFBSUQsY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUN2QixNQUFNLElBQUlFLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQztFQUNuRTtFQUNBLElBQUlDLFlBQTRCLEdBQUd2QixJQUFJLENBQUN3QixTQUFTLENBQUMsQ0FBQyxFQUFFSixjQUFjLENBQVE7RUFDM0UsSUFBSUcsWUFBWSxDQUFDQSxZQUFZLENBQUNFLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQy9DRixZQUFZLEdBQUdBLFlBQVksQ0FBQ0MsU0FBUyxDQUNuQyxDQUFDLEVBQ0RELFlBQVksQ0FBQ0UsTUFBTSxHQUFHLENBQ3hCLENBQW1CO0VBQ3JCLE9BQU9GLFlBQVk7QUFDckIiLCJpZ25vcmVMaXN0IjpbXX0=