X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Frouter%2Fpath-parameter.js;h=81405948a2ea951b5b404aa4bc1bbe78153df117;hb=refs%2Fheads%2Fmaster;hp=3c6f1cb1f6e1c3a28129ee9bf0adbfe988192c05;hpb=f944684c37532e67a7d28e34909178435cba03a5;p=squeep-api-dingus diff --git a/lib/router/path-parameter.js b/lib/router/path-parameter.js index 3c6f1cb..7728295 100644 --- a/lib/router/path-parameter.js +++ b/lib/router/path-parameter.js @@ -3,38 +3,51 @@ const parameters = new Map(); /** * De-duplicating factory of minimal-objects to track the named-parameter parts of path definitions. - * - * @property {String} parameter */ class PathParameter extends null { + static #parameters = parameters; + + /** + * + * @param {string} parameter name + * @returns {PathParameter} frozen parameter object + */ constructor(parameter) { if (!parameter || typeof(parameter) !== 'string') { throw new RangeError('parameter must be string'); } - if (parameters.has(parameter)) { - return parameters.get(parameter); + + if (PathParameter.#parameters.has(parameter)) { + return PathParameter.#parameters.get(parameter); // NOSONAR } + const pathParameter = Object.create(PathParameter.prototype); pathParameter.parameter = parameter; - parameters.set(parameter, pathParameter); Object.freeze(pathParameter); - return pathParameter; + PathParameter.#parameters.set(parameter, pathParameter); + return pathParameter; // NOSONAR } /** - * @returns {String} + * @returns {string} parameter string */ toString() { - return `{${this.constructor.name} ${this.parameter}}`; + return this.parameter; + } + + /** + * @returns {string} parameter string + */ + toJSON() { + return this.parameter; } /** * Clear the de-duplication table, for tests. */ static _flush() { - this.parameters.clear(); + PathParameter.#parameters.clear(); } } -PathParameter.parameters = parameters; -module.exports = PathParameter; \ No newline at end of file +module.exports = PathParameter;