Просмотр исходного кода

fix: router definition should not be changed

e22m4u 2 недель назад
Родитель
Сommit
b2f37ed228
3 измененных файлов с 9 добавлено и 6 удалено
  1. 2 2
      dist/cjs/index.cjs
  2. 7 3
      src/route/route.js
  3. 0 1
      src/route/route.spec.js

+ 2 - 2
dist/cjs/index.cjs

@@ -1069,6 +1069,7 @@ var HttpMethod = {
   PATCH: "PATCH",
   PATCH: "PATCH",
   DELETE: "DELETE"
   DELETE: "DELETE"
 };
 };
+var DEFAULT_META = Object.freeze({});
 var _Route = class _Route extends import_js_debug.Debuggable {
 var _Route = class _Route extends import_js_debug.Debuggable {
   /**
   /**
    * Definition.
    * Definition.
@@ -1120,7 +1121,7 @@ var _Route = class _Route extends import_js_debug.Debuggable {
    * @returns {object}
    * @returns {object}
    */
    */
   get meta() {
   get meta() {
-    return this._definition.meta;
+    return this._definition.meta || DEFAULT_META;
   }
   }
   /**
   /**
    * Getter of the handler.
    * Getter of the handler.
@@ -1144,7 +1145,6 @@ var _Route = class _Route extends import_js_debug.Debuggable {
     validateRouteDefinition(routeDef);
     validateRouteDefinition(routeDef);
     this._definition = cloneDeep(routeDef);
     this._definition = cloneDeep(routeDef);
     this._definition.method = this._definition.method.toUpperCase();
     this._definition.method = this._definition.method.toUpperCase();
-    this._definition.meta = this._definition.meta || {};
     if (routeDef.preHandler !== void 0) {
     if (routeDef.preHandler !== void 0) {
       const preHandlerHooks = [routeDef.preHandler].flat().filter(Boolean);
       const preHandlerHooks = [routeDef.preHandler].flat().filter(Boolean);
       preHandlerHooks.forEach((hook) => {
       preHandlerHooks.forEach((hook) => {

+ 7 - 3
src/route/route.js

@@ -38,6 +38,11 @@ export const HttpMethod = {
   DELETE: 'DELETE',
   DELETE: 'DELETE',
 };
 };
 
 
+/**
+ * Объект метаданных по умолчанию.
+ */
+const DEFAULT_META = Object.freeze({});
+
 /**
 /**
  * Route.
  * Route.
  */
  */
@@ -98,7 +103,7 @@ export class Route extends Debuggable {
    * @returns {object}
    * @returns {object}
    */
    */
   get meta() {
   get meta() {
-    return this._definition.meta;
+    return this._definition.meta || DEFAULT_META;
   }
   }
 
 
   /**
   /**
@@ -125,10 +130,9 @@ export class Route extends Debuggable {
     // установка копии определения
     // установка копии определения
     // в свойство экземпляра
     // в свойство экземпляра
     this._definition = cloneDeep(routeDef);
     this._definition = cloneDeep(routeDef);
-    // нормализация метода и метаданных
+    // перевод метода в верхний регистр
     // выполняется в конструкторе единожды
     // выполняется в конструкторе единожды
     this._definition.method = this._definition.method.toUpperCase();
     this._definition.method = this._definition.method.toUpperCase();
-    this._definition.meta = this._definition.meta || {};
     // регистрация хуков маршрута
     // регистрация хуков маршрута
     // в экземпляре реестра
     // в экземпляре реестра
     if (routeDef.preHandler !== undefined) {
     if (routeDef.preHandler !== undefined) {

+ 0 - 1
src/route/route.spec.js

@@ -365,7 +365,6 @@ describe('Route', function () {
         method: HttpMethod.GET,
         method: HttpMethod.GET,
         path: '/myPath',
         path: '/myPath',
         handler: () => undefined,
         handler: () => undefined,
-        meta: {foo: 'bar'},
       };
       };
       const route = new Route(definition);
       const route = new Route(definition);
       expect(route.getDefinition()).to.be.eql(definition);
       expect(route.getDefinition()).to.be.eql(definition);