panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
35 lines (29 loc) • 935 B
text/coffeescript
import urlTemplate from "url-template"
import createMethod from "./method"
import {merge} from "panda-parchment"
urlJoin = (base, path) ->
if base[-1..] == "/"
base[...-1] + path
else
base + path
createTemplate = (T) ->
(description) -> urlTemplate.parse(T).expand description
createResource = (lib, context, {template, methods}) ->
createPath = createTemplate template
(description={}) ->
new Proxy {},
get: (target, name) ->
path = createPath(description)
url = urlJoin context.basePath, path
if (method = methods[name])?
{signatures} = method
_context = merge context, {path: url, methodName: name, signatures}
createMethod lib, _context, method
else if name == "path"
path
else if name == "url"
url
else
undefined
export default createResource