shift73k/assets_old/node_modules/svg-baker/lib/request.js

92 lines
1.7 KiB
JavaScript

const queryUtils = require('query-string');
class FileRequest {
/**
* @param {string} request
*/
constructor(request) {
const { file, query } = FileRequest.parse(request);
this.file = file;
this.query = query;
}
/**
* @param {string} request
* @return {{file: string, query: Object}}
*/
static parse(request) {
const parts = request.split('?');
const file = parts[0];
const query = parts[1] ? queryUtils.parse(parts[1]) : null;
return { file, query };
}
/**
* @return {string}
*/
toString() {
const { file, query } = this;
const queryEncoded = query ? `?${queryUtils.stringify(query)}` : '';
return `${file}${queryEncoded}`;
}
/**
* @return {string}
*/
stringify() {
return this.toString();
}
/**
* @return {string}
*/
stringifyQuery() {
return queryUtils.stringify(this.query);
}
/**
* @param {FileRequest} request
* @return {boolean}
*/
equals(request) {
if (!(request instanceof FileRequest)) {
throw TypeError('request should be instance of FileRequest');
}
return this.toString() === request.toString();
}
/**
* @param {FileRequest} request
* @return {boolean}
*/
fileEquals(request) {
return this.file === request.file;
}
/**
* @param {FileRequest} request
* @return {boolean}
*/
queryEquals(request) {
return this.stringifyQuery() === request.stringifyQuery();
}
/**
* @param {string} param
* @return {boolean}
*/
hasParam(param) {
return this.query && param in this.query;
}
/**
* @param {string} param
* @return {string|null}
*/
getParam(param) {
return this.hasParam(param) ? this.query[param] : null;
}
}
module.exports = FileRequest;