@tstdl/base 0.85.23 → 0.85.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/decorators/log.js CHANGED
@@ -22,22 +22,29 @@ __export(log_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(log_exports);
24
24
  var import_log = require("../function/log.js");
25
- var import_registry = require("../reflection/registry.js");
26
25
  var import_utils = require("../reflection/utils.js");
27
26
  var import_object = require("../utils/object/object.js");
28
27
  var import_type_guards = require("../utils/type-guards.js");
29
- const logWrapped = Symbol("logged wrapped");
28
+ const wrappedStaticMethods = /* @__PURE__ */ new WeakMap();
29
+ const wrappedInstanceMethods = /* @__PURE__ */ new WeakMap();
30
+ function isWrapped(constructor, property, isStatic) {
31
+ return (isStatic ? wrappedStaticMethods : wrappedInstanceMethods).get(constructor)?.has(property) ?? false;
32
+ }
33
+ function setWrapped(constructor, property, isStatic) {
34
+ const map = isStatic ? wrappedStaticMethods : wrappedInstanceMethods;
35
+ if (!map.has(constructor)) {
36
+ map.set(constructor, /* @__PURE__ */ new Set());
37
+ }
38
+ map.get(constructor).add(property);
39
+ }
30
40
  function Log() {
31
- return (0, import_utils.createDecorator)({ class: true, method: true }, (data, metadata) => {
32
- if (metadata.data.has(logWrapped)) {
33
- return void 0;
34
- }
35
- metadata.data.set(logWrapped, true);
41
+ return (0, import_utils.createDecorator)({ class: true, method: true }, (data) => {
36
42
  if (data.type == "method") {
43
+ setWrapped(data.constructor, data.methodKey, data.static);
37
44
  return { value: (0, import_log.wrapLog)(data.descriptor.value) };
38
45
  }
39
- const staticProperties = (0, import_object.objectKeys)(data.constructor).filter((property) => property != "length" && property != "name" && property != "prototype" && (0, import_type_guards.isFunction)(data.constructor[property]) && !(import_registry.reflectionRegistry.getMetadata(data.constructor)?.staticMethods.get(property)?.data.has(logWrapped) ?? false));
40
- const instanceProperties = (0, import_object.objectKeys)(data.prototype).filter((property) => property != "constructor" && (0, import_type_guards.isFunction)(data.prototype[property]) && !(import_registry.reflectionRegistry.getMetadata(data.constructor)?.methods.get(property)?.data.has(logWrapped) ?? false));
46
+ const staticProperties = (0, import_object.objectKeys)(data.constructor).filter((property) => property != "length" && property != "name" && property != "prototype" && (0, import_type_guards.isFunction)(data.constructor[property]) && !isWrapped(data.constructor, property, true));
47
+ const instanceProperties = (0, import_object.objectKeys)(data.prototype).filter((property) => property != "constructor" && (0, import_type_guards.isFunction)(data.prototype[property]) && !isWrapped(data.constructor, property, false));
41
48
  for (const property of staticProperties) {
42
49
  data.constructor[property] = (0, import_log.wrapLog)(data.constructor[property], property);
43
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tstdl/base",
3
- "version": "0.85.23",
3
+ "version": "0.85.25",
4
4
  "author": "Patrick Hein",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -54,6 +54,5 @@ export declare class ReflectionRegistry {
54
54
  */
55
55
  unregister(type: AbstractConstructor): void;
56
56
  getOrInitializeMetadata(type: AbstractConstructor): TypeMetadata;
57
- private initializeType;
58
57
  }
59
58
  export declare const reflectionRegistry: ReflectionRegistry;
@@ -87,52 +87,51 @@ class ReflectionRegistry {
87
87
  throw new Error("Reflection data was accessed before registration was done.");
88
88
  }
89
89
  if (!this.metadataMap.has(type)) {
90
- const metadata = this.initializeType(type);
90
+ const metadata = initializeType(type);
91
91
  this.metadataMap.set(type, metadata);
92
92
  return metadata;
93
93
  }
94
94
  return this.metadataMap.get(type);
95
95
  }
96
- // eslint-disable-next-line max-lines-per-function
97
- initializeType(type) {
98
- return (0, import_lazy_property.lazyObject)({
99
- metadataType: "type",
100
- constructor: (0, import_lazy_property.lazyObjectValue)(type),
101
- parent: (0, import_lazy_property.lazyObjectValue)(Reflect.getPrototypeOf(type)),
102
- parameters: {
103
- initializer() {
104
- const parametersTypes = (0, import_reflection.getParameterTypes)(type);
105
- return parametersTypes?.map((parameterType, index) => ({ metadataType: "constructor-parameter", index, type: parameterType, data: new import_reflection_data_map.ReflectionDataMap() }));
96
+ }
97
+ function initializeType(type) {
98
+ return (0, import_lazy_property.lazyObject)({
99
+ metadataType: "type",
100
+ constructor: (0, import_lazy_property.lazyObjectValue)(type),
101
+ parent: (0, import_lazy_property.lazyObjectValue)(Reflect.getPrototypeOf(type)),
102
+ parameters: {
103
+ initializer() {
104
+ const parametersTypes = (0, import_reflection.getParameterTypes)(type);
105
+ return parametersTypes?.map((parameterType, index) => ({ metadataType: "constructor-parameter", index, type: parameterType, data: new import_reflection_data_map.ReflectionDataMap() }));
106
+ }
107
+ },
108
+ properties: {
109
+ initializer: () => new import_factory_map.FactoryMap((key) => ({ metadataType: "property", key, type: (0, import_reflection.getDesignType)(type.prototype, key), isAccessor: false, data: new import_reflection_data_map.ReflectionDataMap() }))
110
+ },
111
+ staticProperties: {
112
+ initializer: () => new import_factory_map.FactoryMap((key) => ({ metadataType: "property", key, type: (0, import_reflection.getDesignType)(type, key), isAccessor: false, data: new import_reflection_data_map.ReflectionDataMap() }))
113
+ },
114
+ methods: {
115
+ initializer: () => new import_factory_map.FactoryMap((key) => {
116
+ const parameters = (0, import_reflection.getParameterTypes)(type.prototype, key);
117
+ const returnType = (0, import_reflection.getReturnType)(type.prototype, key);
118
+ if ((0, import_type_guards.isUndefined)(parameters)) {
119
+ throw new Error(`Could not get parameters for method ${key.toString()} of type ${type.name}`);
106
120
  }
107
- },
108
- properties: {
109
- initializer: () => new import_factory_map.FactoryMap((key) => ({ metadataType: "property", key, type: (0, import_reflection.getDesignType)(type.prototype, key), isAccessor: false, data: new import_reflection_data_map.ReflectionDataMap() }))
110
- },
111
- staticProperties: {
112
- initializer: () => new import_factory_map.FactoryMap((key) => ({ metadataType: "property", key, type: (0, import_reflection.getDesignType)(type, key), isAccessor: false, data: new import_reflection_data_map.ReflectionDataMap() }))
113
- },
114
- methods: {
115
- initializer: () => new import_factory_map.FactoryMap((key) => {
116
- const parameters = (0, import_reflection.getParameterTypes)(type.prototype, key);
117
- const returnType = (0, import_reflection.getReturnType)(type.prototype, key);
118
- if ((0, import_type_guards.isUndefined)(parameters)) {
119
- throw new Error(`Could not get parameters for method ${key.toString()} of type ${type.name}`);
120
- }
121
- return { metadataType: "method", parameters: parameters.map((parameter, index) => ({ metadataType: "method-parameter", index, type: parameter, data: new import_reflection_data_map.ReflectionDataMap() })), returnType, data: new import_reflection_data_map.ReflectionDataMap() };
122
- })
123
- },
124
- staticMethods: {
125
- initializer: () => new import_factory_map.FactoryMap((key) => {
126
- const parameters = (0, import_reflection.getParameterTypes)(type, key);
127
- const returnType = (0, import_reflection.getReturnType)(type, key);
128
- if ((0, import_type_guards.isUndefined)(parameters)) {
129
- throw new Error(`Could not get parameters for static method ${key.toString()} of type ${type.name}`);
130
- }
131
- return { metadataType: "method", parameters: parameters.map((parameter, index) => ({ metadataType: "method-parameter", index, type: parameter, data: new import_reflection_data_map.ReflectionDataMap() })), returnType, data: new import_reflection_data_map.ReflectionDataMap() };
132
- })
133
- },
134
- data: { initializer: () => new import_reflection_data_map.ReflectionDataMap() }
135
- });
136
- }
121
+ return { metadataType: "method", parameters: parameters.map((parameter, index) => ({ metadataType: "method-parameter", index, type: parameter, data: new import_reflection_data_map.ReflectionDataMap() })), returnType, data: new import_reflection_data_map.ReflectionDataMap() };
122
+ })
123
+ },
124
+ staticMethods: {
125
+ initializer: () => new import_factory_map.FactoryMap((key) => {
126
+ const parameters = (0, import_reflection.getParameterTypes)(type, key);
127
+ const returnType = (0, import_reflection.getReturnType)(type, key);
128
+ if ((0, import_type_guards.isUndefined)(parameters)) {
129
+ throw new Error(`Could not get parameters for static method ${key.toString()} of type ${type.name}`);
130
+ }
131
+ return { metadataType: "method", parameters: parameters.map((parameter, index) => ({ metadataType: "method-parameter", index, type: parameter, data: new import_reflection_data_map.ReflectionDataMap() })), returnType, data: new import_reflection_data_map.ReflectionDataMap() };
132
+ })
133
+ },
134
+ data: { initializer: () => new import_reflection_data_map.ReflectionDataMap() }
135
+ });
137
136
  }
138
137
  const reflectionRegistry = new ReflectionRegistry();