@prostojs/mate 0.1.13 → 0.2.0

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/README.md CHANGED
@@ -2,208 +2,110 @@
2
2
 
3
3
  This small library is TS Metadata Organizer based on [`reflect-metadata`](https://github.com/rbuckton/reflect-metadata). "MA-TE" is for "ME-TA" in reverse order.
4
4
 
5
- Make it easier to write, read and type metadata objects. Gather all your metadata at a single metadata key in a typed object and access it with a matter of one call of `mate.read()`
5
+ It allows you to define, manipulate, and read metadata at different levels, including classes, properties, methods, and parameters.
6
6
 
7
- ## Install
7
+ The primary purpose of Mate is to streamline the use of metadata, making it simpler and more efficient to handle.
8
8
 
9
- `npm install @prostojs/mate`
9
+ ## Installation
10
10
 
11
- ## Quick Example
11
+ You can install Mate from the npm registry.
12
12
 
13
- ```ts
14
- import { TProstoMetadata, Mate } from '@prostojs/mate'
15
-
16
- interface TMyMeta extends TProstoMetadata {
17
- required: boolean
18
- label: string
19
- items: string[]
20
- }
21
-
22
- // Create an instance of Mate with metadata
23
- // key 'my-metadata-key'
24
- // This key will be used by Reflect.defineMetadata
25
- // and Reflect.getMetadata
26
- const mate = new Mate<TMyMeta>('my-metadata-key')
27
-
28
- @mate.decorate('required', true)
29
- @mate.decorate('label', 'My Class')
30
- @mate.decorate('items', 'first item', true)
31
- @mate.decorate('items', 'second item', true)
32
- class MyClass {
33
-
34
- }
35
-
36
- console.log(mate.read(MyClass))
37
- // {
38
- // params: undefined,
39
- // items: [ 'first item', 'second item' ],
40
- // label: 'My Class',
41
- // required: true
42
- // }
43
- ```
44
-
45
- ## Method Decorators
46
-
47
- ```ts
48
- import { Mate } from '@prostojs/mate'
49
- const mate = new Mate('my-metadata-key')
50
- class MyClass {
51
- @mate.decorate('required', true)
52
- @mate.decorate('label', 'My Method Label')
53
- methodName() {}
54
- }
55
- console.log(mate.read(MyClass, 'methodName'))
56
- // { params: [], label: 'My Method Label', required: true }
13
+ ```bash
14
+ npm install @prostojs/mate
57
15
  ```
58
16
 
59
- ## Constructor Params Decorators
17
+ ## Usage
60
18
 
61
- `params[].type` are filled from `design:paramtypes` automatically
19
+ After installation, you can start using Mate to define and handle metadata in your TypeScript project. Below is an example that showcases different levels of metadata usage.
62
20
 
63
21
  ```ts
64
- import { Mate } from '@prostojs/mate'
65
- const mate = new Mate('my-metadata-key')
66
- class MyClass {
67
- constructor(
68
- @mate.decorate('label', 'my string')
69
- str: string,
70
- @mate.decorate('label', 'my number')
71
- n: number,
72
- ) {}
22
+ import { TMateParamMeta } from '@prostojs/mate';
23
+ import { Mate } from '@prostojs/mate';
24
+
25
+ // Define your metadata interfaces
26
+ interface TClassMeta {
27
+ name: string;
28
+ model: string;
29
+ fromParam: string;
30
+ manufacturer: string;
31
+ data: string[];
32
+ inherit?: bolean;
73
33
  }
74
- console.log(mate.read(MyClass))
75
- // {
76
- // params: [
77
- // { type: [Function: String], label: 'my string' },
78
- // { type: [Function: Number], label: 'my number' }
79
- // ]
80
- // }
81
- ```
82
-
83
- ## Method Params Decorators
84
-
85
- `params[].type` are filled from `design:paramtypes` automatically
86
34
 
87
- ```ts
88
- import { Mate } from '@prostojs/mate'
89
- const mate = new Mate('my-metadata-key')
90
- class MyClass {
91
- myMethod(
92
- @mate.decorate('label', 'my string')
93
- str: string,
94
- @mate.decorate('label', 'my number')
95
- n: number,
96
- ) {}
35
+ interface TPropMeta<TParamMeta> {
36
+ description: string;
37
+ params: (TMateParamMeta & TParamMeta)[];
38
+ inherit?: bolean
97
39
  }
98
- console.log(mate.read(MyClass, 'myMethod'))
99
- // {
100
- // params: [
101
- // { type: [Function: String], label: 'my string' },
102
- // { type: [Function: Number], label: 'my number' }
103
- // ]
104
- // }
105
- ```
106
-
107
- ## Variety of use of Mate
108
40
 
109
- ```ts
110
- import { TProstoMetadata, Mate } from '@prostojs/mate'
111
-
112
- // Define the metadata type
113
- interface MyMeta extends TProstoMetadata {
114
- arg0: string
115
- arg1: string
116
- n: number
117
- simple: boolean
41
+ interface TParamMeta {
42
+ required: boolean;
118
43
  }
119
- const mate = new Mate<MyMeta>('my-metadata-key', {
120
- readReturnType: true, // to copy `design:returntype` -> `returnType` of metadata object
121
- readType: true, // to copy `design:type` -> `type` of metadata object
122
- inherit: false, // allow or disable metadata inheritance
123
- })
124
-
125
- // Example of simple decorator
126
- const SimpleDecorator = mate.decorate('simple', true)
127
-
128
- // Example of factory decorator
129
- const FactoryDecorator = (arg: string) => mate.decorate('arg0', arg)
130
-
131
- // Example of complex decorator
132
- // mate.apply returns a new decorator that applies
133
- // all passed decorators
134
- const ComplexDecorator = (arg: string) => mate.apply(
135
- SimpleDecorator,
136
- FactoryDecorator(arg),
137
- )
138
-
139
- // Example of Callback Decorator
140
- // meta.decorate may accept callback function
141
- // instead of key/value pare in case if some
142
- // complex logic need
143
- const CallbackDecorator = (arg1: string, n: number) => mate.decorate(meta => {
144
- meta.arg1 = [meta.arg0, arg1].join(', ')
145
- meta.n = meta.simple ? n : n * n
146
- return meta
147
- })
148
-
149
- // Applying decorators to our classes
150
- @SimpleDecorator
151
- @FactoryDecorator('arg0 value')
152
- class MyClass1 {
153
44
 
45
+ const mate = new Mate<TClassMeta, TPropMeta<TParamMeta>>('robot-meta', {
46
+ readReturnType: true,
47
+ readType: true,
48
+ collectPropKeys: true,
49
+ inherit(classMeta, targetMeta, level, prop) {
50
+ return !!targetMeta?.inherit || !!classMeta?.inherit;
51
+ },
52
+ });
53
+
54
+ // Annotate your class
55
+ @mate.decorate('name', 'NXT')
56
+ @mate.decorate('model', 'EV3')
57
+ @mate.decorate('manufacturer', 'LEGO')
58
+ @mate.decorate('data', 'NXT-0001', true)
59
+ class Robot {
60
+ @mate.decorate('description', 'Robotic arm for grabbing objects')
61
+ arm: string;
62
+
63
+ @mate.decorate('description', 'Sensors to detect objects')
64
+ sensors(
65
+ @mate.decorateClass('fromParam', 'hoised value')
66
+ @mate.decorate('required', true)
67
+ input: string
68
+ ): string {
69
+ return 'Activated sensors with input: ' + input;
70
+ }
154
71
  }
155
- console.log(mate.read(MyClass1))
156
- // { params: undefined, arg0: 'arg0 value', simple: true }
157
-
158
- @CallbackDecorator('arg1 value', 5)
159
- @ComplexDecorator('arg0 for complex decorator')
160
- class MyClass2 {
161
72
 
162
- }
163
- console.log(mate.read(MyClass2))
73
+ // Read the metadata
74
+ let classMeta = mate.read(Robot);
75
+ console.log(classMeta);
76
+ // Expected Output:
164
77
  // {
165
- // params: undefined,
166
- // simple: true,
167
- // arg0: 'arg0 for complex decorator',
168
- // arg1: 'arg0 for complex decorator, arg1 value',
169
- // n: 5
78
+ // name: 'NXT',
79
+ // model: 'EV3',
80
+ // fromParam: 'hoised value',
81
+ // manufacturer: 'LEGO',
82
+ // data: ['NXT-0001'], // Array type metadata
83
+ // properties: ['arm', 'sensors'],
84
+ // type: Function, // Type of Robot
85
+ // returnType: undefined // Only for methods
170
86
  // }
171
- ```
172
-
173
- ## TS Typing
174
-
175
- Metadata type is shared for class metadata and class method metadata and based on `TProstoMetadata` interface.
176
-
177
- Constructor params and method params metadata are stored in `TProstoMetadata['params']` array.
178
-
179
- By default `TProstoMetadata['params']` has type `TProstoParamsMetadata`.
180
87
 
181
- Here's an example of fully typed metadata:
182
- ```ts
183
- import { TProstoMetadata, TProstoParamsMetadata, Mate } from '@prostojs/mate'
184
-
185
- interface TMyParamsMeta extends TProstoParamsMetadata {
186
- paramProp1: string
187
- paramProp2: number
188
- }
189
- interface TMyMeta extends TProstoMetadata<TMyParamsMeta> {
190
- prop1: string
191
- prop2: number
192
- }
193
-
194
- // class and method metadata will look like this:
88
+ // read the property metadata
89
+ let armMeta = mate.read(Robot, 'arm');
90
+ console.log(armMeta);
91
+ // Expected Output:
195
92
  // {
196
- // prop1: string
197
- // prop2: number
198
- // params: { // inherited from TProstoMetadata
199
- // type: Function // inherited from TProstoParamsMetadata
200
- // paramProp1: string
201
- // paramProp2: number
202
- // }[]
93
+ // description: 'Robotic arm for grabbing objects',
94
+ // params: [],
95
+ // type: Function, // Type of 'arm'
96
+ // returnType: undefined // Only for methods
203
97
  // }
204
98
 
205
- // pass TMyMeta to Mate constructor to define types for mate instance
206
- const mate = new Mate<TMyMeta>('my-metadata-key')
99
+ // read the method metadata
100
+ let sensorsMeta = mate.read(Robot, 'sensors');
101
+ console.log(sensorsMeta);
102
+ // Expected Output:
103
+ // {
104
+ // description: 'Sensors to detect objects',
105
+ // params: [{ type: String, required: true }],
106
+ // type: Function, // Type of 'sensors'
107
+ // returnType: String // Return type of 'sensors'
108
+ // }
207
109
  ```
208
110
 
209
111
  ## Metadata Inheritance
@@ -239,7 +141,17 @@ const mate = new Mate<MyMeta>('my-metadata-key', {
239
141
  })
240
142
  ```
241
143
 
242
- ## Use or **reflect-metadata**
144
+ ## API Reference
145
+
146
+ 1. **`Mate<TClassMeta, TPropMeta>`**: The main Mate class. It provides methods to decorate and read metadata.
147
+
148
+ 2. **`decorate(key, value?, isArray?, level?)`**: A method for adding metadata to classes, properties, methods, and parameters.
149
+
150
+ 3. **`decorateClass(key, value?, isArray?)`**: A method for hoisting metadata from methods or parameters to the class level.
151
+
152
+ 4. **`read(target, prop?, paramIndex?)`**: A method for reading metadata.
153
+
154
+ ## Use of **reflect-metadata**
243
155
 
244
156
  It is recomended to include `reflect-metadata` dependency to rely on the original implementation. Although it's still possible to use `@prostojs/mate` with no dependency on `reflect-metadata` because it already includes its own limited implementation of reflect-metadata which ships only the features used by `@prostojs/mate` such as:
245
157
 
@@ -247,4 +159,4 @@ It is recomended to include `reflect-metadata` dependency to rely on the origina
247
159
 
248
160
  - `defineMetadata(key, data, target, prop?)`
249
161
 
250
- - `metadata(key, data)`
162
+ - `metadata(key, data)`
@@ -55,22 +55,12 @@ else {
55
55
  }
56
56
  const Reflect$1 = _reflect;
57
57
 
58
- const banner = () => `[prostojs/mate][${new Date().toISOString().replace('T', ' ').replace(/\.\d{3}z$/i, '')}] `;
59
-
60
- function logError(error) {
61
- console.error('' + '' + banner() + error + '');
62
- }
63
-
64
- function panic(error) {
65
- logError(error);
66
- return new Error(error);
67
- }
68
-
69
58
  const Reflect = (global === null || global === void 0 ? void 0 : global.Reflect) || (self === null || self === void 0 ? void 0 : self.Reflect) || Reflect$1;
70
59
  class Mate {
71
60
  constructor(workspace, options = {}) {
72
61
  this.workspace = workspace;
73
62
  this.options = options;
63
+ this.logger = options.logger || console;
74
64
  }
75
65
  set(args, key, value, isArray) {
76
66
  var _a;
@@ -78,7 +68,7 @@ class Mate {
78
68
  const newArgs = args.level === 'CLASS' ? { target: args.target }
79
69
  : args.level === 'PROP' ? { target: args.target, propKey: args.propKey }
80
70
  : args;
81
- let meta = Reflect.getOwnMetadata(this.workspace, newArgs.target, newArgs.propKey) || {};
71
+ let meta = (Reflect.getOwnMetadata(this.workspace, newArgs.target, newArgs.propKey) || {});
82
72
  if (newArgs.propKey && this.options.readReturnType && !meta.returnType && args.descriptor) {
83
73
  meta.returnType = Reflect.getOwnMetadata('design:returntype', newArgs.target, newArgs.propKey);
84
74
  }
@@ -120,7 +110,7 @@ class Mate {
120
110
  if (isArray) {
121
111
  const newArray = (data[key] || []);
122
112
  if (!Array.isArray(newArray)) {
123
- panic('Mate.add (isArray=true) called for non-array metadata');
113
+ this.logger.error('Mate.add (isArray=true) called for non-array metadata');
124
114
  }
125
115
  newArray.unshift(value);
126
116
  data[key] = newArray;
package/dist/mate.d.ts CHANGED
@@ -4,29 +4,40 @@ export declare function getConstructor<T = TAny>(instance: T): TFunction;
4
4
 
5
5
  export declare function isConstructor<T = TAny>(v: T): v is (T & TClassConstructor);
6
6
 
7
- export declare class Mate<TClass extends TObject = TEmpty, TProp extends TObject = TEmpty, TParam extends TObject = TEmpty> {
7
+ export declare class Mate<TClass extends TObject = TMateClassMeta, TProp extends {
8
+ params: TMateParamMeta[];
9
+ } = Required<TMatePropMeta<TMateParamMeta>>> {
8
10
  protected workspace: string;
9
- protected options: TMateOptions<TClass, TProp, TParam>;
10
- constructor(workspace: string, options?: TMateOptions<TClass, TProp, TParam>);
11
- set<TMeta extends TObject = Partial<TClass & TProp & TParam>>(args: TMergedDecoratorArgs, cb: ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta)): void;
12
- set<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta>(args: TMergedDecoratorArgs, key: keyof TMeta, value: TMeta[TKey]): void;
13
- set<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta>(args: TMergedDecoratorArgs, key: keyof TMeta, value: TMeta[TKey], isArray: boolean | undefined): void;
14
- read<TMeta extends Partial<TClass & TMateClassMeta & TProp & TMatePropMeta<TParam> & TParam & TMateParamMeta>>(target: TFunction | TObject, propKey?: string | symbol): TMeta | undefined;
11
+ protected options: TMateOptions<TClass, TProp>;
12
+ protected logger: TConsoleBase;
13
+ constructor(workspace: string, options?: TMateOptions<TClass, TProp>);
14
+ set<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>>(args: TMergedDecoratorArgs, cb: ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T)): void;
15
+ set<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T>(args: TMergedDecoratorArgs, key: keyof T, value: T[K]): void;
16
+ set<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T>(args: TMergedDecoratorArgs, key: keyof T, value: T[K], isArray: boolean | undefined): void;
17
+ read<T = TClass & TProp & TCommonMate<TProp['params'][0]>>(target: TFunction | TObject, propKey?: string | symbol): (TClass & TProp & TMateClassMeta & TMatePropMeta<TProp["params"][0]>) | undefined;
15
18
  apply(...decorators: (MethodDecorator | ClassDecorator | ParameterDecorator | PropertyDecorator)[]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
16
- decorate<TMeta extends TObject = Partial<TClass & TProp & TParam>>(cb: ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
17
- decorate<TMeta extends Partial<TClass & TProp & TParam>, TKey extends keyof TMeta>(key: TKey, value: TMeta[TKey]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
18
- decorate<TMeta extends Partial<TClass & TProp & TParam>, TKey extends keyof TMeta, TIsArray extends boolean = false>(key: TKey, value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey], isArray: TIsArray): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
19
- decorate<TMeta extends Partial<TClass & TProp & TParam>, TKey extends keyof TMeta, TIsArray extends boolean = false>(key: TKey | ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta), value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey], isArray: TIsArray, level: TMergedDecoratorArgs['level']): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
19
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>>(cb: ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
20
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T>(key: K, value: T[K]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
21
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K, value: TIsArray extends true ? ArrayElementType<T[K]> : T[K], isArray: TIsArray): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
22
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K | ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T), value: TIsArray extends true ? ArrayElementType<T[K]> : T[K], isArray: TIsArray, level: TMergedDecoratorArgs['level']): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
20
23
  decorateConditional(ccb: (level: TLevels) => (MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator) | void | undefined): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
21
- decorateClass<TMeta extends TObject = Partial<TClass & TProp & TParam>>(cb: ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
22
- decorateClass<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta, TIsArray extends boolean = false>(key: TKey, value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
23
- decorateClass<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta, TIsArray extends boolean = false>(key: TKey, value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey], isArray: boolean | undefined): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
24
+ decorateClass<T = TClass>(cb: ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
25
+ decorateClass<T = TClass, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K, value: TIsArray extends true ? ArrayElementType<T[K]> : T[K]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
26
+ decorateClass<T = TClass, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K, value: TIsArray extends true ? ArrayElementType<T[K]> : T[K], isArray: boolean | undefined): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
24
27
  }
25
28
 
26
29
  declare type TAny = any;
27
30
 
28
31
  declare type TClassConstructor<T = unknown> = new (...args: TAny[]) => T;
29
32
 
33
+ declare type TCommonMate<TParam extends TObject> = TMateClassMeta & TMatePropMeta<TParam>;
34
+
35
+ declare type TCommonMateWithParam<TParam extends TObject> = TMateClassMeta & TMatePropMeta<TParam> & TParam;
36
+
37
+ declare interface TConsoleBase {
38
+ error: ((...args: any) => void);
39
+ }
40
+
30
41
  declare interface TEmpty {
31
42
  }
32
43
 
@@ -40,11 +51,14 @@ export declare interface TMateClassMeta {
40
51
  returnType?: TFunction;
41
52
  }
42
53
 
43
- export declare interface TMateOptions<TClass extends TObject = TEmpty, TProp extends TObject = TEmpty, TParam extends TObject = TEmpty> {
54
+ export declare interface TMateOptions<TClass extends TObject = TMateClassMeta, TProp extends {
55
+ params: TMateParamMeta[];
56
+ } = Required<TMatePropMeta<TMateParamMeta>>> {
57
+ logger?: TConsoleBase;
44
58
  readReturnType?: boolean;
45
59
  readType?: boolean;
46
60
  collectPropKeys?: boolean;
47
- inherit?: boolean | ((classMeta: TClass & TMateClassMeta, targetMeta: (TMatePropMeta<TParam> & TProp) | (TMateParamMeta & TParam), level: 'CLASS' | 'PROP' | 'PARAM', key?: string) => boolean);
61
+ inherit?: boolean | ((classMeta: TClass & TMateClassMeta, targetMeta: (TMatePropMeta<TProp['params'][0]> & TProp) | (TMateParamMeta & TProp['params'][0]), level: 'CLASS' | 'PROP' | 'PARAM', key?: string) => boolean);
48
62
  }
49
63
 
50
64
  export declare interface TMateParamMeta {
@@ -51,22 +51,12 @@ else {
51
51
  }
52
52
  const Reflect$1 = _reflect;
53
53
 
54
- const banner = () => `[prostojs/mate][${new Date().toISOString().replace('T', ' ').replace(/\.\d{3}z$/i, '')}] `;
55
-
56
- function logError(error) {
57
- console.error('' + '' + banner() + error + '');
58
- }
59
-
60
- function panic(error) {
61
- logError(error);
62
- return new Error(error);
63
- }
64
-
65
54
  const Reflect = (global === null || global === void 0 ? void 0 : global.Reflect) || (self === null || self === void 0 ? void 0 : self.Reflect) || Reflect$1;
66
55
  class Mate {
67
56
  constructor(workspace, options = {}) {
68
57
  this.workspace = workspace;
69
58
  this.options = options;
59
+ this.logger = options.logger || console;
70
60
  }
71
61
  set(args, key, value, isArray) {
72
62
  var _a;
@@ -74,7 +64,7 @@ class Mate {
74
64
  const newArgs = args.level === 'CLASS' ? { target: args.target }
75
65
  : args.level === 'PROP' ? { target: args.target, propKey: args.propKey }
76
66
  : args;
77
- let meta = Reflect.getOwnMetadata(this.workspace, newArgs.target, newArgs.propKey) || {};
67
+ let meta = (Reflect.getOwnMetadata(this.workspace, newArgs.target, newArgs.propKey) || {});
78
68
  if (newArgs.propKey && this.options.readReturnType && !meta.returnType && args.descriptor) {
79
69
  meta.returnType = Reflect.getOwnMetadata('design:returntype', newArgs.target, newArgs.propKey);
80
70
  }
@@ -116,7 +106,7 @@ class Mate {
116
106
  if (isArray) {
117
107
  const newArray = (data[key] || []);
118
108
  if (!Array.isArray(newArray)) {
119
- panic('Mate.add (isArray=true) called for non-array metadata');
109
+ this.logger.error('Mate.add (isArray=true) called for non-array metadata');
120
110
  }
121
111
  newArray.unshift(value);
122
112
  data[key] = newArray;
@@ -1,5 +1,5 @@
1
1
  import { TAny, TFunction, TObject } from './types';
2
- type TLevels = 'CLASS' | 'METHOD' | 'PROP' | 'PARAM';
2
+ declare type TLevels = 'CLASS' | 'METHOD' | 'PROP' | 'PARAM';
3
3
  export interface TMergedDecoratorArgs {
4
4
  target: TFunction | TObject;
5
5
  propKey?: string | symbol;
@@ -18,32 +18,43 @@ export interface TMateClassMeta {
18
18
  type?: TFunction;
19
19
  returnType?: TFunction;
20
20
  }
21
- export interface TMateOptions<TClass extends TObject = TEmpty, TProp extends TObject = TEmpty, TParam extends TObject = TEmpty> {
21
+ declare type TCommonMate<TParam extends TObject> = TMateClassMeta & TMatePropMeta<TParam>;
22
+ declare type TCommonMateWithParam<TParam extends TObject> = TMateClassMeta & TMatePropMeta<TParam> & TParam;
23
+ interface TConsoleBase {
24
+ error: ((...args: any) => void);
25
+ }
26
+ export interface TMateOptions<TClass extends TObject = TMateClassMeta, TProp extends {
27
+ params: TMateParamMeta[];
28
+ } = Required<TMatePropMeta<TMateParamMeta>>> {
29
+ logger?: TConsoleBase;
22
30
  readReturnType?: boolean;
23
31
  readType?: boolean;
24
32
  collectPropKeys?: boolean;
25
- inherit?: boolean | ((classMeta: TClass & TMateClassMeta, targetMeta: (TMatePropMeta<TParam> & TProp) | (TMateParamMeta & TParam), level: 'CLASS' | 'PROP' | 'PARAM', key?: string) => boolean);
33
+ inherit?: boolean | ((classMeta: TClass & TMateClassMeta, targetMeta: (TMatePropMeta<TProp['params'][0]> & TProp) | (TMateParamMeta & TProp['params'][0]), level: 'CLASS' | 'PROP' | 'PARAM', key?: string) => boolean);
26
34
  }
27
35
  interface TEmpty {
28
36
  }
29
- export declare class Mate<TClass extends TObject = TEmpty, TProp extends TObject = TEmpty, TParam extends TObject = TEmpty> {
37
+ export declare class Mate<TClass extends TObject = TMateClassMeta, TProp extends {
38
+ params: TMateParamMeta[];
39
+ } = Required<TMatePropMeta<TMateParamMeta>>> {
30
40
  protected workspace: string;
31
- protected options: TMateOptions<TClass, TProp, TParam>;
32
- constructor(workspace: string, options?: TMateOptions<TClass, TProp, TParam>);
33
- set<TMeta extends TObject = Partial<TClass & TProp & TParam>>(args: TMergedDecoratorArgs, cb: ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta)): void;
34
- set<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta>(args: TMergedDecoratorArgs, key: keyof TMeta, value: TMeta[TKey]): void;
35
- set<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta>(args: TMergedDecoratorArgs, key: keyof TMeta, value: TMeta[TKey], isArray: boolean | undefined): void;
36
- read<TMeta extends Partial<TClass & TMateClassMeta & TProp & TMatePropMeta<TParam> & TParam & TMateParamMeta>>(target: TFunction | TObject, propKey?: string | symbol): TMeta | undefined;
41
+ protected options: TMateOptions<TClass, TProp>;
42
+ protected logger: TConsoleBase;
43
+ constructor(workspace: string, options?: TMateOptions<TClass, TProp>);
44
+ set<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>>(args: TMergedDecoratorArgs, cb: ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T)): void;
45
+ set<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T>(args: TMergedDecoratorArgs, key: keyof T, value: T[K]): void;
46
+ set<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T>(args: TMergedDecoratorArgs, key: keyof T, value: T[K], isArray: boolean | undefined): void;
47
+ read<T = TClass & TProp & TCommonMate<TProp['params'][0]>>(target: TFunction | TObject, propKey?: string | symbol): (TClass & TProp & TMateClassMeta & TMatePropMeta<TProp["params"][0]>) | undefined;
37
48
  apply(...decorators: (MethodDecorator | ClassDecorator | ParameterDecorator | PropertyDecorator)[]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
38
- decorate<TMeta extends TObject = Partial<TClass & TProp & TParam>>(cb: ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
39
- decorate<TMeta extends Partial<TClass & TProp & TParam>, TKey extends keyof TMeta>(key: TKey, value: TMeta[TKey]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
40
- decorate<TMeta extends Partial<TClass & TProp & TParam>, TKey extends keyof TMeta, TIsArray extends boolean = false>(key: TKey, value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey], isArray: TIsArray): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
41
- decorate<TMeta extends Partial<TClass & TProp & TParam>, TKey extends keyof TMeta, TIsArray extends boolean = false>(key: TKey | ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta), value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey], isArray: TIsArray, level: TMergedDecoratorArgs['level']): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
49
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>>(cb: ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
50
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T>(key: K, value: T[K]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
51
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K, value: TIsArray extends true ? ArrayElementType<T[K]> : T[K], isArray: TIsArray): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
52
+ decorate<T = TClass & TProp & TCommonMateWithParam<TProp['params'][0]>, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K | ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T), value: TIsArray extends true ? ArrayElementType<T[K]> : T[K], isArray: TIsArray, level: TMergedDecoratorArgs['level']): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
42
53
  decorateConditional(ccb: (level: TLevels) => (MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator) | void | undefined): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
43
- decorateClass<TMeta extends TObject = Partial<TClass & TProp & TParam>>(cb: ((meta: TMeta, level: TLevels, propKey?: string | symbol, index?: number) => TMeta)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
44
- decorateClass<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta, TIsArray extends boolean = false>(key: TKey, value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
45
- decorateClass<TMeta extends TObject = Partial<TClass & TProp & TParam>, TKey extends keyof TMeta = keyof TMeta, TIsArray extends boolean = false>(key: TKey, value: TIsArray extends true ? ArrayElementType<TMeta[TKey]> : TMeta[TKey], isArray: boolean | undefined): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
54
+ decorateClass<T = TClass>(cb: ((meta: T, level: TLevels, propKey?: string | symbol, index?: number) => T)): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
55
+ decorateClass<T = TClass, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K, value: TIsArray extends true ? ArrayElementType<T[K]> : T[K]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
56
+ decorateClass<T = TClass, K extends keyof T = keyof T, TIsArray extends boolean = false>(key: K, value: TIsArray extends true ? ArrayElementType<T[K]> : T[K], isArray: boolean | undefined): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator;
46
57
  }
47
- type ArrayElementType<T> = T extends (infer E)[] ? E : never;
58
+ declare type ArrayElementType<T> = T extends (infer E)[] ? E : never;
48
59
  export {};
49
60
  //# sourceMappingURL=mate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mate.d.ts","sourceRoot":"","sources":["../../src/mate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mate.d.ts","sourceRoot":"","sources":["../../src/mate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Mate } from '..';
1
+ import { Mate, TMateParamMeta } from '..';
2
2
  interface TClass {
3
3
  inherit?: boolean;
4
4
  fromPropertyCb?: string[];
@@ -10,7 +10,7 @@ interface TClass {
10
10
  classArray?: string[];
11
11
  fromProperty?: string;
12
12
  }
13
- interface TProp {
13
+ interface TProp<TParam> {
14
14
  inherit?: boolean;
15
15
  fromPropertyCb?: string[];
16
16
  prop1D?: string;
@@ -20,6 +20,7 @@ interface TProp {
20
20
  method2?: string;
21
21
  property?: string;
22
22
  empty?: string;
23
+ params: (TMateParamMeta & TParam)[];
23
24
  }
24
25
  interface TParam {
25
26
  inherit?: boolean;
@@ -29,7 +30,7 @@ interface TParam {
29
30
  param2?: string;
30
31
  paramArray?: string[];
31
32
  }
32
- export declare const mate: Mate<TClass, TProp, TParam>;
33
+ export declare const mate: Mate<TClass, TProp<TParam>>;
33
34
  export declare class MateTestClass {
34
35
  constructor(_a: string);
35
36
  prop1?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"mate.artifacts.d.ts","sourceRoot":"","sources":["../../../src/tests/mate.artifacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,UAAU,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,UAAU,KAAK;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,IAAI,6BAaf,CAAA;AAcF,qBAIa,aAAa;gBAKd,EAAE,EAAE,MAAM;IAOlB,KAAK,CAAC,EAAE,MAAM,CAAA;IAGd,KAAK,CAAC,EAAE,MAAM,CAAA;IAMd,IAAI,CAKI,EAAE,EAAE,MAAM,GAAG,MAAM;IAgB3B,KAAK,CAMG,EAAE,EAAE,MAAM;IAWlB,KAAK,EAAE,MAAM,CAAK;IAGlB,KAAK;CAGR;AAED,qBACa,cAAc;gBACX,CAAC,EAAE,MAAM;IAOrB,IAAI,CAGD,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAM9B,eAAe,CAAC,GAAG,EAAE,MAAM;CAG9B;AAED,qBACa,cAAe,SAAQ,cAAc;;IAM9C,KAAK;IAML,eAAe;CAGlB;AAED,qBACa,cAAe,SAAQ,cAAc;;IAM9C,KAAK;IAKL,eAAe;CAGlB"}
1
+ {"version":3,"file":"mate.artifacts.d.ts","sourceRoot":"","sources":["../../../src/tests/mate.artifacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AAEzC,UAAU,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,UAAU,KAAK,CAAC,MAAM;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,CAAA;CACtC;AAED,UAAU,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,IAAI,6BAaf,CAAA;AAcF,qBAIa,aAAa;gBAKd,EAAE,EAAE,MAAM;IAOlB,KAAK,CAAC,EAAE,MAAM,CAAA;IAGd,KAAK,CAAC,EAAE,MAAM,CAAA;IAMd,IAAI,CAKI,EAAE,EAAE,MAAM,GAAG,MAAM;IAgB3B,KAAK,CAMG,EAAE,EAAE,MAAM;IAWlB,KAAK,EAAE,MAAM,CAAK;IAGlB,KAAK;CAGR;AAED,qBACa,cAAc;gBACX,CAAC,EAAE,MAAM;IAOrB,IAAI,CAGD,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAM9B,eAAe,CAAC,GAAG,EAAE,MAAM;CAG9B;AAED,qBACa,cAAe,SAAQ,cAAc;;IAM9C,KAAK;IAML,eAAe;CAGlB;AAED,qBACa,cAAe,SAAQ,cAAc;;IAM9C,KAAK;IAKL,eAAe;CAGlB"}
@@ -1,5 +1,5 @@
1
- export type TAny = any;
2
- export type TObject = object;
3
- export type TFunction = Function;
4
- export type TClassConstructor<T = unknown> = new (...args: TAny[]) => T;
1
+ export declare type TAny = any;
2
+ export declare type TObject = object;
3
+ export declare type TFunction = Function;
4
+ export declare type TClassConstructor<T = unknown> = new (...args: TAny[]) => T;
5
5
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,IAAI,GAAG,GAAG,CAAA;AACtB,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAA;AAChC,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAG,IAAI,EAAE,KAAK,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,oBAAY,IAAI,GAAG,GAAG,CAAA;AACtB,oBAAY,OAAO,GAAG,MAAM,CAAA;AAC5B,oBAAY,SAAS,GAAG,QAAQ,CAAA;AAChC,oBAAY,iBAAiB,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAG,IAAI,EAAE,KAAK,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prostojs/mate",
3
- "version": "0.1.13",
3
+ "version": "0.2.0",
4
4
  "description": "MATE is TS Metadata Organizer",
5
5
  "main": "index.js",
6
6
  "module": "dist/mate.esm-bundler.js",
@@ -46,7 +46,6 @@
46
46
  },
47
47
  "homepage": "https://github.com/prostojs/mate#readme",
48
48
  "devDependencies": {
49
- "reflect-metadata": "^0.1.13",
50
49
  "@microsoft/api-extractor": "^7.30.0",
51
50
  "@prostojs/dye": "^0.3.0",
52
51
  "@rollup/plugin-commonjs": "^21.0.0",
@@ -67,6 +66,7 @@
67
66
  "fs-extra": "^10.0.0",
68
67
  "jest": "^27.2.5",
69
68
  "minimist": "^1.2.6",
69
+ "reflect-metadata": "^0.1.13",
70
70
  "rollup": "^2.58.0",
71
71
  "rollup-plugin-terser": "^7.0.2",
72
72
  "rollup-plugin-typescript2": "^0.30.0",
@@ -1,2 +0,0 @@
1
- export declare const banner: () => string;
2
- //# sourceMappingURL=banner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../../src/utils/banner.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,MAAM,cAAsG,CAAA"}
@@ -1,4 +0,0 @@
1
- export declare function log(text: string): void;
2
- export declare function warn(text: string): void;
3
- export declare function logError(error: string): void;
4
- //# sourceMappingURL=log.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/utils/log.ts"],"names":[],"mappings":"AAGA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,QAE/B;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,QAEhC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,QAErC"}
@@ -1,2 +0,0 @@
1
- export declare function panic(error: string): Error;
2
- //# sourceMappingURL=panic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"panic.d.ts","sourceRoot":"","sources":["../../../src/utils/panic.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,SAGlC"}