chain-simple 1.1.1 → 1.2.1

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/built/index.d.ts CHANGED
@@ -3,6 +3,12 @@ type TReplaceReturnType<T extends TFn, TNewReturnType> = (...args: Parameters<T>
3
3
  export type TChainable<T extends Record<string, TFn>> = {
4
4
  [K in keyof T]: TReplaceReturnType<T[K], ReturnType<T[K]> & TChainable<T>>;
5
5
  };
6
+ type TConfig = {
7
+ getEntity?: string;
8
+ extendProxed?: (propName: any) => {
9
+ [k: string]: any;
10
+ };
11
+ };
6
12
  /**
7
13
  * @example
8
14
  * const {makePropertiesChainable} = require('chain-simple');
@@ -34,10 +40,6 @@ export type TChainable<T extends Record<string, TFn>> = {
34
40
  * @param {{getEntity: string}} [config] config to describe how to get original not project object
35
41
  * @returns {object} object with chainable properties
36
42
  */
37
- declare function makePropertiesChainable(item: any, config?: {
38
- getEntity: string;
39
- }): any;
40
- declare function makeConstructorInstancePropertiesChainable(constructorFunction: any, config?: {
41
- getEntity: string;
42
- }): any;
43
+ declare function makePropertiesChainable(item: any, config?: TConfig): any;
44
+ declare function makeConstructorInstancePropertiesChainable(constructorFunction: any, config?: TConfig): any;
43
45
  export { makePropertiesChainable, makeConstructorInstancePropertiesChainable };
package/built/index.js CHANGED
@@ -61,6 +61,19 @@ function makePropertiesChainable(item, config) {
61
61
  return proxifiedResult;
62
62
  };
63
63
  }
64
+ if (p !== 'then' &&
65
+ p !== 'catch' &&
66
+ (0, sat_utils_1.isUndefined)(Reflect.get(item, p, r)) &&
67
+ (0, sat_utils_1.isObject)(config) &&
68
+ (0, sat_utils_1.isFunction)(config.extendProxed)) {
69
+ try {
70
+ const extension = config.extendProxed(p);
71
+ Object.assign(item, extension);
72
+ }
73
+ catch (error) {
74
+ console.error(error);
75
+ }
76
+ }
64
77
  const isCallable = (0, sat_utils_1.isFunction)(Reflect.get(item, p, r)) || (0, sat_utils_1.isAsyncFunction)(Reflect.get(item, p, r));
65
78
  if (!isCallable && !(0, sat_utils_1.isPromise)(proxifiedResult) && item[p] && !proxifiedResult[p]) {
66
79
  logger_1.logger.info('In to not function, not async function, resulter is not a promise and target has prop');
package/lib/index.ts CHANGED
@@ -12,6 +12,8 @@ export type TChainable<T extends Record<string, TFn>> = {
12
12
  [K in keyof T]: TReplaceReturnType<T[K], ReturnType<T[K]> & TChainable<T>>;
13
13
  };
14
14
 
15
+ type TConfig = { getEntity?: string; extendProxed?: (propName) => { [k: string]: any } };
16
+
15
17
  /**
16
18
  * @example
17
19
  * const {makePropertiesChainable} = require('chain-simple');
@@ -43,7 +45,7 @@ export type TChainable<T extends Record<string, TFn>> = {
43
45
  * @param {{getEntity: string}} [config] config to describe how to get original not project object
44
46
  * @returns {object} object with chainable properties
45
47
  */
46
- function makePropertiesChainable(item, config?: { getEntity: string }) {
48
+ function makePropertiesChainable(item, config?: TConfig) {
47
49
  if (!canBeProxed(item)) {
48
50
  throw new TypeError('makePropertiesChainable(): first argument should be an entity that can be proxed');
49
51
  }
@@ -74,6 +76,20 @@ function makePropertiesChainable(item, config?: { getEntity: string }) {
74
76
  return proxifiedResult;
75
77
  };
76
78
  }
79
+ if (
80
+ p !== 'then' &&
81
+ p !== 'catch' &&
82
+ isUndefined(Reflect.get(item, p, r)) &&
83
+ isObject(config) &&
84
+ isFunction(config.extendProxed)
85
+ ) {
86
+ try {
87
+ const extension = config.extendProxed(p);
88
+ Object.assign(item, extension);
89
+ } catch (error) {
90
+ console.error(error);
91
+ }
92
+ }
77
93
 
78
94
  const isCallable = isFunction(Reflect.get(item, p, r)) || isAsyncFunction(Reflect.get(item, p, r));
79
95
 
@@ -131,7 +147,7 @@ function handlerConstructor(config) {
131
147
  };
132
148
  }
133
149
 
134
- function makeConstructorInstancePropertiesChainable(constructorFunction, config?: { getEntity: string }) {
150
+ function makeConstructorInstancePropertiesChainable(constructorFunction, config?: TConfig) {
135
151
  return new Proxy(constructorFunction, handlerConstructor(config));
136
152
  }
137
153
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chain-simple",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "description": "Main purpose of this package is - provide simple way to build chain between any item methods",
5
5
  "main": "built/index.js",
6
6
  "directories": {