X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Frouter%2Fpath-parameter.js;h=81405948a2ea951b5b404aa4bc1bbe78153df117;hb=refs%2Fheads%2Fmaster;hp=585aaec7500a3ccf3fd6c9529fdb288f817f14e8;hpb=9fe1e9b22b8e753c44dec77d1dee3d0061b2e991;p=squeep-api-dingus diff --git a/lib/router/path-parameter.js b/lib/router/path-parameter.js index 585aaec..7728295 100644 --- a/lib/router/path-parameter.js +++ b/lib/router/path-parameter.js @@ -1,49 +1,53 @@ 'use strict'; -const kPathParameter = Symbol('kSqueepDingusRouterPathParameter'); 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[kPathParameter] = parameter; // eslint-disable-line security/detect-object-injection - parameters.set(parameter, pathParameter); + pathParameter.parameter = parameter; Object.freeze(pathParameter); - return pathParameter; + PathParameter.#parameters.set(parameter, pathParameter); + return pathParameter; // NOSONAR } /** - * Return the parameter name. + * @returns {string} parameter string */ - get parameter() { - return this[kPathParameter];// eslint-disable-line security/detect-object-injection + toString() { + return this.parameter; } /** - * @returns {String} + * @returns {string} parameter string */ - toString() { - return `{${this.constructor.name} ${this.parameter}}`; // eslint-disable-line security/detect-object-injection + toJSON() { + return this.parameter; } /** * Clear the de-duplication table, for tests. */ static _flush() { - this.parameters.clear(); + PathParameter.#parameters.clear(); } } -PathParameter.kPathParameter = kPathParameter; -PathParameter.parameters = parameters; -module.exports = PathParameter; \ No newline at end of file +module.exports = PathParameter;