UNPKG

@riddance/host

Version:

71 lines 9.5 kB
const handlers = {}; function addHandler(type, handler) { ; (handlers[type] ??= []).push(handler); } export function getHandlers(type) { return (handlers[type] ?? []); } export function getHandler(type) { const hs = getHandlers(type); const [handler] = hs; if (!handler) { throw new Error(`No ${type} handler registered.`); } if (hs.length !== 1) { throw new Error(`Multiple ${type} handlers registered.`); } return handler; } let httpHostRegistry; function setHttpHost(host) { httpHostRegistry = host; } let metadata; export function setMeta(packageName, fileName, revision, config) { metadata = { packageName, fileName, revision, config, }; } function getMetadata() { return metadata; } export function pathToRegExp(path) { return new RegExp(('^' + path.replaceAll(/[/\\^$+?.()|[\]{}]/gu, '\\$&').replaceAll('*', '[^/\\?]+') + '(\\?.*)?$').replace('[^/\\?]+[^/\\?]+(\\?.*)?$', ''), 'u'); } function combineConfig(base, override) { if (base === undefined) { return override; } else if (override === undefined) { return base; } return { ...base, ...override }; } function httpHost(meta, cfg, method, path, entry) { addHandler('http', { meta, config: combineConfig(meta?.config, cfg), method, pathPattern: path, entry, }); } setHttpHost(httpHost); export function registerHttpHandler(method, path, configOrHandler, fn) { if (typeof configOrHandler === 'function') { httpHostRegistry(getMetadata(), undefined, method, path, configOrHandler); } else { if (!fn) { throw new Error('Please provide a handler function.'); } httpHostRegistry(getMetadata(), configOrHandler, method, path, fn); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxNQUFNLFFBQVEsR0FBaUMsRUFBRSxDQUFBO0FBRWpELFNBQVMsVUFBVSxDQUFDLElBQXdCLEVBQUUsT0FBb0I7SUFDOUQsQ0FBQztJQUFBLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUF3QjtJQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBa0IsQ0FBQTtBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUF3QjtJQUMvQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksdUJBQXVCLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUE7QUFDbEIsQ0FBQztBQVVELElBQUksZ0JBQTBCLENBQUE7QUFFOUIsU0FBUyxXQUFXLENBQUMsSUFBYztJQUMvQixnQkFBZ0IsR0FBRyxJQUFJLENBQUE7QUFDM0IsQ0FBQztBQUVELElBQUksUUFBOEIsQ0FBQTtBQUVsQyxNQUFNLFVBQVUsT0FBTyxDQUNuQixXQUFtQixFQUNuQixRQUFnQixFQUNoQixRQUE0QixFQUM1QixNQUF3QztJQUV4QyxRQUFRLEdBQUc7UUFDUCxXQUFXO1FBQ1gsUUFBUTtRQUNSLFFBQVE7UUFDUixNQUFNO0tBQ1QsQ0FBQTtBQUNMLENBQUM7QUFnQkQsU0FBUyxXQUFXO0lBQ2hCLE9BQU8sUUFBUSxDQUFBO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVk7SUFDckMsT0FBTyxJQUFJLE1BQU0sQ0FDYixDQUNJLEdBQUc7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1FBQzNFLFdBQVcsQ0FDZCxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsRUFDMUMsR0FBRyxDQUNOLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ2xCLElBQXNDLEVBQ3RDLFFBQTBDO0lBRTFDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sUUFBUSxDQUFBO0lBQ25CLENBQUM7U0FBTSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQ2IsSUFBMEIsRUFDMUIsR0FBcUMsRUFDckMsTUFBYyxFQUNkLElBQVksRUFDWixLQUFjO0lBRWQsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUNmLElBQUk7UUFDSixNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO1FBQ3hDLE1BQU07UUFDTixXQUFXLEVBQUUsSUFBSTtRQUNqQixLQUFLO0tBQ1IsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUlyQixNQUFNLFVBQVUsbUJBQW1CLENBQy9CLE1BQWMsRUFDZCxJQUFZLEVBQ1osZUFBK0MsRUFDL0MsRUFBWTtJQUVaLElBQUksT0FBTyxlQUFlLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDeEMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDN0UsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7UUFDekQsQ0FBQztRQUNELGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFuZGxlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gJy4uL2h0dHAuanMnXG5cbmV4cG9ydCB0eXBlIEh0dHBIYW5kbGVyID0ge1xuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXG4gICAgY29uZmlnOiBGdWxsQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZFxuICAgIG1ldGhvZDogTWV0aG9kXG4gICAgcGF0aFBhdHRlcm46IHN0cmluZ1xuICAgIGVudHJ5OiBIYW5kbGVyXG59XG5cbnR5cGUgSGFuZGxlclR5cGVzID0ge1xuICAgIGh0dHA6IEh0dHBIYW5kbGVyXG59XG5cbmNvbnN0IGhhbmRsZXJzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd25bXSB9ID0ge31cblxuZnVuY3Rpb24gYWRkSGFuZGxlcih0eXBlOiBrZXlvZiBIYW5kbGVyVHlwZXMsIGhhbmRsZXI6IEh0dHBIYW5kbGVyKSB7XG4gICAgOyhoYW5kbGVyc1t0eXBlXSA/Pz0gW10pLnB1c2goaGFuZGxlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhhbmRsZXJzKHR5cGU6IGtleW9mIEhhbmRsZXJUeXBlcykge1xuICAgIHJldHVybiAoaGFuZGxlcnNbdHlwZV0gPz8gW10pIGFzIEh0dHBIYW5kbGVyW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhhbmRsZXIodHlwZToga2V5b2YgSGFuZGxlclR5cGVzKSB7XG4gICAgY29uc3QgaHMgPSBnZXRIYW5kbGVycyh0eXBlKVxuICAgIGNvbnN0IFtoYW5kbGVyXSA9IGhzXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gJHt0eXBlfSBoYW5kbGVyIHJlZ2lzdGVyZWQuYClcbiAgICB9XG4gICAgaWYgKGhzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlICR7dHlwZX0gaGFuZGxlcnMgcmVnaXN0ZXJlZC5gKVxuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlclxufVxuXG50eXBlIEh0dHBIb3N0ID0gKFxuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIGNvbmZpZzogSGFuZGxlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgbWV0aG9kOiBNZXRob2QsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGhhbmRsZXI6IEhhbmRsZXIsXG4pID0+IHZvaWRcblxubGV0IGh0dHBIb3N0UmVnaXN0cnk6IEh0dHBIb3N0XG5cbmZ1bmN0aW9uIHNldEh0dHBIb3N0KGhvc3Q6IEh0dHBIb3N0KSB7XG4gICAgaHR0cEhvc3RSZWdpc3RyeSA9IGhvc3Rcbn1cblxubGV0IG1ldGFkYXRhOiBNZXRhZGF0YSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWV0YShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb25maWc6IFBhY2thZ2VDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuKSB7XG4gICAgbWV0YWRhdGEgPSB7XG4gICAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgcmV2aXNpb24sXG4gICAgICAgIGNvbmZpZyxcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhY2thZ2VDb25maWd1cmF0aW9uID0gSGFuZGxlckNvbmZpZ3VyYXRpb24gJiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHBhY2thZ2UtbGV2ZWwgY29uZmlndXJhdGlvbnNcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kdXBsaWNhdGUtdHlwZS1jb25zdGl0dWVudHNcbmV4cG9ydCB0eXBlIEZ1bGxDb25maWd1cmF0aW9uID0gUGFja2FnZUNvbmZpZ3VyYXRpb24gJiBIYW5kbGVyQ29uZmlndXJhdGlvblxuXG5leHBvcnQgdHlwZSBNZXRhZGF0YSA9IHtcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nXG4gICAgZmlsZU5hbWU6IHN0cmluZ1xuICAgIHJldmlzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICBjb25maWc/OiBQYWNrYWdlQ29uZmlndXJhdGlvblxufVxuXG5mdW5jdGlvbiBnZXRNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb1JlZ0V4cChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgKFxuICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgIHBhdGgucmVwbGFjZUFsbCgvWy9cXFxcXiQrPy4oKXxbXFxde31dL2d1LCAnXFxcXCQmJykucmVwbGFjZUFsbCgnKicsICdbXi9cXFxcP10rJykgK1xuICAgICAgICAgICAgJyhcXFxcPy4qKT8kJ1xuICAgICAgICApLnJlcGxhY2UoJ1teL1xcXFw/XStbXi9cXFxcP10rKFxcXFw/LiopPyQnLCAnJyksXG4gICAgICAgICd1JyxcbiAgICApXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVDb25maWcoXG4gICAgYmFzZTogUGFja2FnZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuKTogRnVsbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuICAgIGlmIChiYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlXG4gICAgfSBlbHNlIGlmIChvdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBiYXNlXG4gICAgfVxuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLm92ZXJyaWRlIH1cbn1cblxuZnVuY3Rpb24gaHR0cEhvc3QoXG4gICAgbWV0YTogTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgY2ZnOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBtZXRob2Q6IE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZW50cnk6IEhhbmRsZXIsXG4pIHtcbiAgICBhZGRIYW5kbGVyKCdodHRwJywge1xuICAgICAgICBtZXRhLFxuICAgICAgICBjb25maWc6IGNvbWJpbmVDb25maWcobWV0YT8uY29uZmlnLCBjZmcpLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHBhdGhQYXR0ZXJuOiBwYXRoLFxuICAgICAgICBlbnRyeSxcbiAgICB9KVxufVxuXG5zZXRIdHRwSG9zdChodHRwSG9zdClcblxuZXhwb3J0IHR5cGUgTWV0aG9kID0gJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJIdHRwSGFuZGxlcihcbiAgICBtZXRob2Q6IE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IEhhbmRsZXIsXG4gICAgZm4/OiBIYW5kbGVyLFxuKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25maWdPckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaHR0cEhvc3RSZWdpc3RyeShnZXRNZXRhZGF0YSgpLCB1bmRlZmluZWQsIG1ldGhvZCwgcGF0aCwgY29uZmlnT3JIYW5kbGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgYSBoYW5kbGVyIGZ1bmN0aW9uLicpXG4gICAgICAgIH1cbiAgICAgICAgaHR0cEhvc3RSZWdpc3RyeShnZXRNZXRhZGF0YSgpLCBjb25maWdPckhhbmRsZXIsIG1ldGhvZCwgcGF0aCwgZm4pXG4gICAgfVxufVxuIl19