dinoloop-es8
Version:
A lightweight REST API Library for building scalable Node.js server-side applications powered by Typescript
59 lines • 4.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
// Refer: https://github.com/pillarjs/path-to-regexp
// tslint:disable-next-line:no-require-imports
const pathToRegexp = require("path-to-regexp");
const object_utility_1 = require("./object.utility");
const data_utility_1 = require("./data.utility");
class RouteUtility {
// @returns {} when no segmented values are matched
// @returns { id: 45 } for the matched segments values
static getNamedSegmentKeyValues(
// holds the original url of place holders
// ex: user/:id
originalUri,
// holds the requested url which has values
// user/45
requestedUri) {
let keys = [];
let route = pathToRegexp(originalUri, keys);
let values = route.exec(requestedUri);
if (!data_utility_1.DataUtility.isArray(values)) {
return {};
}
// According to "path-to-regexp" docs,
// matched values start from index: 1
let i = 1;
let obj = {};
for (const key of keys) {
obj[key.name] = values[i];
i++;
}
return obj;
}
// map the segmented values and query strings to action parameters.
// if action parameter keys and variable segment / query string are matched,
// it simply returns the array of values which are indexed to action parameter key
static mapSegmentsAndQueryToActionArguments(originalUri, requestedUri, queryString, params) {
let arr = [];
if (params.length === 0)
return [];
let val = RouteUtility
.getNamedSegmentKeyValues(originalUri, requestedUri);
// If variable segment and query param have same keys
// it overwrites with query string, since we are passing the query-keys
// which are explicitly set using @QueryParam
let values = Object.assign(val, queryString);
// find the index of action parameter and
// insert the value from url at matched index
object_utility_1.ObjectUtility.keys(values).forEach(key => {
let index = params.findIndex(e => e === key);
arr[index] = values[key];
});
return params.map((val, index) => {
return { key: val, value: arr[index] };
});
}
}
exports.RouteUtility = RouteUtility;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUudXRpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2R1bGVzL3V0aWxpdHkvcm91dGUudXRpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9EQUFvRDtBQUNwRCw4Q0FBOEM7QUFDOUMsK0NBQWdEO0FBR2hELHFEQUFpRDtBQUNqRCxpREFBNkM7QUFHN0M7SUFFSSxtREFBbUQ7SUFDbkQsc0RBQXNEO0lBQ3RELE1BQU0sQ0FBQyx3QkFBd0I7SUFDM0IsMENBQTBDO0lBQzFDLGVBQWU7SUFDZixXQUFtQjtJQUNuQiwyQ0FBMkM7SUFDM0MsVUFBVTtJQUNWLFlBQW9CO1FBRXBCLElBQUksSUFBSSxHQUFVLEVBQUUsQ0FBQztRQUNyQixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLDBCQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxzQ0FBc0M7UUFDdEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUViLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUMsRUFBRSxDQUFDO1NBQ1A7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLGtGQUFrRjtJQUNsRixNQUFNLENBQUMsb0NBQW9DLENBQ3ZDLFdBQW1CLEVBQ25CLFlBQW9CLEVBQ3BCLFdBQWdCLEVBQ2hCLE1BQWdCO1FBRWhCLElBQUksR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUV2QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRW5DLElBQUksR0FBRyxHQUFHLFlBQVk7YUFDakIsd0JBQXdCLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpELHFEQUFxRDtRQUNyRCx3RUFBd0U7UUFDeEUsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTdDLHlDQUF5QztRQUN6Qyw2Q0FBNkM7UUFDN0MsOEJBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFqRUQsb0NBaUVDIn0=