@elemental-concept/grappa
Version:
Decorator-powered REST client for Angular and its HttpClient
23 lines • 3.87 kB
JavaScript
// @dynamic
export class UrlParser {
static { this.SlashSuffix = /[\\/]*$/; }
static { this.SlashPrefix = /^[\\/]*/; }
static { this.Placeholder = /{([0-9]+)}/g; }
static { this.parse = (baseUrl, endpoint, args) => UrlParser
.merge(baseUrl, endpoint)
.replace(UrlParser.Placeholder, (match, index) => UrlParser.replace(index, args)); }
static { this.replace = (index, args) => {
const idx = parseInt(index, 10);
if (idx < 0 || idx >= args.length) {
throw new ReferenceError(`REST method was not provided with argument at index ${idx}.`);
}
return encodeURIComponent(args[idx]);
}; }
static { this.merge = (baseUrl, endpoint) => {
if (typeof baseUrl === 'string' && baseUrl.length > 0) {
return `${baseUrl.replace(UrlParser.SlashSuffix, '')}/${endpoint.replace(UrlParser.SlashPrefix, '')}`;
}
return endpoint;
}; }
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi9zcmMvbGliL3B1YmxpYy91cmwtcGFyc2VyL3VybC1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVztBQUNYLE1BQU0sT0FBTyxTQUFTO2FBQ0ksZ0JBQVcsR0FBRyxTQUFTLENBQUM7YUFDeEIsZ0JBQVcsR0FBRyxTQUFTLENBQUM7YUFDeEIsZ0JBQVcsR0FBRyxhQUFhLENBQUM7YUFFN0MsVUFBSyxHQUFHLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQUUsSUFBVyxFQUFFLEVBQUUsQ0FDaEUsU0FBUztTQUNOLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1NBQ3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUV2RSxZQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBVyxFQUFVLEVBQUU7UUFDdEQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVoQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakMsTUFBTSxJQUFJLGNBQWMsQ0FBQyx1REFBd0QsR0FBSSxHQUFHLENBQUMsQ0FBQztTQUMzRjtRQUVELE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFFLEdBQUcsQ0FBRSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDO2FBRWEsVUFBSyxHQUFHLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQVUsRUFBRTtRQUNuRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRCxPQUFPLEdBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBRSxJQUFLLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUUsRUFBRSxDQUFDO1NBQzNHO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFVybFBhcnNlciB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU2xhc2hTdWZmaXggPSAvW1xcXFwvXSokLztcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTbGFzaFByZWZpeCA9IC9eW1xcXFwvXSovO1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBsYWNlaG9sZGVyID0gL3soWzAtOV0rKX0vZztcclxuXHJcbiAgc3RhdGljIHBhcnNlID0gKGJhc2VVcmw6IHN0cmluZywgZW5kcG9pbnQ6IHN0cmluZywgYXJnczogYW55W10pID0+XHJcbiAgICBVcmxQYXJzZXJcclxuICAgICAgLm1lcmdlKGJhc2VVcmwsIGVuZHBvaW50KVxyXG4gICAgICAucmVwbGFjZShVcmxQYXJzZXIuUGxhY2Vob2xkZXIsIChtYXRjaCwgaW5kZXgpID0+IFVybFBhcnNlci5yZXBsYWNlKGluZGV4LCBhcmdzKSk7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlcGxhY2UgPSAoaW5kZXgsIGFyZ3M6IGFueVtdKTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IGlkeCA9IHBhcnNlSW50KGluZGV4LCAxMCk7XHJcblxyXG4gICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihgUkVTVCBtZXRob2Qgd2FzIG5vdCBwcm92aWRlZCB3aXRoIGFyZ3VtZW50IGF0IGluZGV4ICR7IGlkeCB9LmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYXJnc1sgaWR4IF0pO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG1lcmdlID0gKGJhc2VVcmw6IHN0cmluZywgZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGJhc2VVcmwgPT09ICdzdHJpbmcnICYmIGJhc2VVcmwubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gYCR7IGJhc2VVcmwucmVwbGFjZShVcmxQYXJzZXIuU2xhc2hTdWZmaXgsICcnKSB9LyR7IGVuZHBvaW50LnJlcGxhY2UoVXJsUGFyc2VyLlNsYXNoUHJlZml4LCAnJykgfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVuZHBvaW50O1xyXG4gIH07XHJcbn1cclxuIl19