Merge branch 'v2.1-dev' as v2.1.2
[squeep-api-dingus] / lib / router / path-parameter.js
index 3c6f1cb1f6e1c3a28129ee9bf0adbfe988192c05..7728295250b182f88323a524d48a37f93b43c8cc 100644 (file)
@@ -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;