proxy-facades 1.7.1 → 1.7.2
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/dist/commonjs/objectChangeTracking.d.ts.map +1 -1
- package/dist/commonjs/objectChangeTracking.js +38 -8
- package/dist/commonjs/objectChangeTracking.js.map +1 -1
- package/dist/esm/objectChangeTracking.d.ts.map +1 -1
- package/dist/esm/objectChangeTracking.js +38 -8
- package/dist/esm/objectChangeTracking.js.map +1 -1
- package/objectChangeTracking.ts +42 -10
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;IA0BlF,iBAAiB,CAAC,GAAG,EAAE,MAAM;IA2F7B,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAIvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAC,GAAG,GAAG,GAAG;IA2EvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG;IAkB5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO;CAIrG"}
|
|
@@ -52,7 +52,13 @@ class ObjectProxyHandler {
|
|
|
52
52
|
if (key === "length" && Array.isArray(target)) {
|
|
53
53
|
return; // Leave the length property as is. It won't be set directly anyway
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
56
|
+
if (!descriptor.set) {
|
|
57
|
+
this.installSetterTrap(key);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Treat existing setters as white-box and leave them as they are
|
|
61
|
+
}
|
|
56
62
|
});
|
|
57
63
|
// Create proxy:
|
|
58
64
|
//const targetForProxy = {}; // The virtual way
|
|
@@ -62,8 +68,16 @@ class ObjectProxyHandler {
|
|
|
62
68
|
installSetterTrap(key) {
|
|
63
69
|
let target = this.target;
|
|
64
70
|
let origDescriptor = (0, common_1.getPropertyDescriptor)(target, key);
|
|
65
|
-
|
|
66
|
-
let
|
|
71
|
+
// Retrieve current:
|
|
72
|
+
let current = (() => {
|
|
73
|
+
try {
|
|
74
|
+
//@ts-ignore
|
|
75
|
+
return { isErrored: false, value: (origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.value /* performance */) || target[key] };
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
return { isErrored: true };
|
|
79
|
+
}
|
|
80
|
+
})();
|
|
67
81
|
const origSetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.set;
|
|
68
82
|
const origGetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.get;
|
|
69
83
|
let origOwnDescriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
@@ -83,11 +97,18 @@ class ObjectProxyHandler {
|
|
|
83
97
|
return;
|
|
84
98
|
}
|
|
85
99
|
if (origGetter !== undefined) {
|
|
86
|
-
|
|
100
|
+
// call the getter. Is this a good idea to refresh the value here?
|
|
101
|
+
try {
|
|
102
|
+
current = { isErrored: false, value: origGetter.apply(target) };
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
current = { isErrored: true };
|
|
106
|
+
throw e;
|
|
107
|
+
}
|
|
87
108
|
throw new TypeError("Target originally had a getter and no setter but the property is set.");
|
|
88
109
|
}
|
|
89
110
|
//@ts-ignore
|
|
90
|
-
if (newValue !==
|
|
111
|
+
if (current.isErrored || newValue !== current.value) { // modify ?
|
|
91
112
|
// run change operation and call listeners:
|
|
92
113
|
const hooksToServe = [];
|
|
93
114
|
if (Array.isArray(target)) {
|
|
@@ -97,16 +118,25 @@ class ObjectProxyHandler {
|
|
|
97
118
|
hooksToServe.push(changeHooksForTarget.changeAnyProperty);
|
|
98
119
|
(0, proxyFacade_1.runChangeOperation)(target, new common_1.UnspecificObjectChange(target), hooksToServe, () => {
|
|
99
120
|
//@ts-ignore
|
|
100
|
-
|
|
121
|
+
current = { isErrored: false, value: newValue };
|
|
101
122
|
});
|
|
102
123
|
}
|
|
103
124
|
}
|
|
104
125
|
newSetter.origHadSetter = origSetter !== undefined;
|
|
105
126
|
function newGetter() {
|
|
106
127
|
if (origGetter !== undefined) {
|
|
107
|
-
|
|
128
|
+
// Retrieve value from getter:
|
|
129
|
+
try {
|
|
130
|
+
current = { isErrored: false, value: origGetter.apply(this) }; // call the getter
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
current = { isErrored: true };
|
|
134
|
+
throw e;
|
|
135
|
+
}
|
|
108
136
|
}
|
|
109
|
-
|
|
137
|
+
if (current.isErrored)
|
|
138
|
+
throw new Error("Illegal state");
|
|
139
|
+
return current.value;
|
|
110
140
|
}
|
|
111
141
|
newGetter.origHadGetter = origGetter !== undefined;
|
|
112
142
|
Object.defineProperty(target, key, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":";;;AA8CA,0DAMC;AApDD;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.d.ts","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,SAAS,EAGT,MAAM,EAGT,MAAM,UAAU,CAAC;AAGlB;;;;GAIG;AACH,cAAM,iBAAiB;IACnB;;OAEG;IACH,YAAY,iDAA4D;IACxE,sBAAsB,iDAA4D;IAClF,iBAAiB,YAAmB;IAEpC;;OAEG;IACH,aAAa,YAAmB;IAChC;;OAEG;IACH,SAAS,YAAmB;IAE5B;;OAEG;IACH,gBAAgB,YAAmB;CACtC;AAID,eAAO,MAAM,oBAAoB,oCAA2C,CAAC;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,qBAMlD;AAED,qBAAa,kBAAmB,YAAW,YAAY,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,0BAA0B,CAAA;gBAE/B,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,0BAA0B,GAAG,SAAS;IA0BlF,iBAAiB,CAAC,GAAG,EAAE,MAAM;IA2F7B,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAIvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAC,GAAG,GAAG,GAAG;IA2EvD,GAAG,CAAC,WAAW,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG;IAkB5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO;CAIrG"}
|
|
@@ -48,7 +48,13 @@ export class ObjectProxyHandler {
|
|
|
48
48
|
if (key === "length" && Array.isArray(target)) {
|
|
49
49
|
return; // Leave the length property as is. It won't be set directly anyway
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
52
|
+
if (!descriptor.set) {
|
|
53
|
+
this.installSetterTrap(key);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Treat existing setters as white-box and leave them as they are
|
|
57
|
+
}
|
|
52
58
|
});
|
|
53
59
|
// Create proxy:
|
|
54
60
|
//const targetForProxy = {}; // The virtual way
|
|
@@ -58,8 +64,16 @@ export class ObjectProxyHandler {
|
|
|
58
64
|
installSetterTrap(key) {
|
|
59
65
|
let target = this.target;
|
|
60
66
|
let origDescriptor = getPropertyDescriptor(target, key);
|
|
61
|
-
|
|
62
|
-
let
|
|
67
|
+
// Retrieve current:
|
|
68
|
+
let current = (() => {
|
|
69
|
+
try {
|
|
70
|
+
//@ts-ignore
|
|
71
|
+
return { isErrored: false, value: (origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.value /* performance */) || target[key] };
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return { isErrored: true };
|
|
75
|
+
}
|
|
76
|
+
})();
|
|
63
77
|
const origSetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.set;
|
|
64
78
|
const origGetter = origDescriptor === null || origDescriptor === void 0 ? void 0 : origDescriptor.get;
|
|
65
79
|
let origOwnDescriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
@@ -79,11 +93,18 @@ export class ObjectProxyHandler {
|
|
|
79
93
|
return;
|
|
80
94
|
}
|
|
81
95
|
if (origGetter !== undefined) {
|
|
82
|
-
|
|
96
|
+
// call the getter. Is this a good idea to refresh the value here?
|
|
97
|
+
try {
|
|
98
|
+
current = { isErrored: false, value: origGetter.apply(target) };
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
current = { isErrored: true };
|
|
102
|
+
throw e;
|
|
103
|
+
}
|
|
83
104
|
throw new TypeError("Target originally had a getter and no setter but the property is set.");
|
|
84
105
|
}
|
|
85
106
|
//@ts-ignore
|
|
86
|
-
if (newValue !==
|
|
107
|
+
if (current.isErrored || newValue !== current.value) { // modify ?
|
|
87
108
|
// run change operation and call listeners:
|
|
88
109
|
const hooksToServe = [];
|
|
89
110
|
if (Array.isArray(target)) {
|
|
@@ -93,16 +114,25 @@ export class ObjectProxyHandler {
|
|
|
93
114
|
hooksToServe.push(changeHooksForTarget.changeAnyProperty);
|
|
94
115
|
runChangeOperation(target, new UnspecificObjectChange(target), hooksToServe, () => {
|
|
95
116
|
//@ts-ignore
|
|
96
|
-
|
|
117
|
+
current = { isErrored: false, value: newValue };
|
|
97
118
|
});
|
|
98
119
|
}
|
|
99
120
|
}
|
|
100
121
|
newSetter.origHadSetter = origSetter !== undefined;
|
|
101
122
|
function newGetter() {
|
|
102
123
|
if (origGetter !== undefined) {
|
|
103
|
-
|
|
124
|
+
// Retrieve value from getter:
|
|
125
|
+
try {
|
|
126
|
+
current = { isErrored: false, value: origGetter.apply(this) }; // call the getter
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
current = { isErrored: true };
|
|
130
|
+
throw e;
|
|
131
|
+
}
|
|
104
132
|
}
|
|
105
|
-
|
|
133
|
+
if (current.isErrored)
|
|
134
|
+
throw new Error("Illegal state");
|
|
135
|
+
return current.value;
|
|
106
136
|
}
|
|
107
137
|
newGetter.origHadGetter = origGetter !== undefined;
|
|
108
138
|
Object.defineProperty(target, key, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"objectChangeTracking.js","sourceRoot":"","sources":["../../objectChangeTracking.ts"],"names":[],"mappings":"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"}
|
package/objectChangeTracking.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Listeners for one object
|
|
3
3
|
*/
|
|
4
|
-
import {newDefaultMap} from "./Util";
|
|
4
|
+
import {newDefaultMap, throwError} from "./Util";
|
|
5
5
|
import {
|
|
6
6
|
ClassTrackingConfiguration,
|
|
7
7
|
EventHook,
|
|
@@ -68,7 +68,14 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
68
68
|
if(key === "length" && Array.isArray(target)) {
|
|
69
69
|
return; // Leave the length property as is. It won't be set directly anyway
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
|
|
72
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key)!;
|
|
73
|
+
if(!descriptor.set) {
|
|
74
|
+
this.installSetterTrap(key)
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Treat existing setters as white-box and leave them as they are
|
|
78
|
+
}
|
|
72
79
|
});
|
|
73
80
|
|
|
74
81
|
// Create proxy:
|
|
@@ -80,8 +87,18 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
80
87
|
installSetterTrap(key: ObjKey) {
|
|
81
88
|
let target = this.target;
|
|
82
89
|
let origDescriptor = getPropertyDescriptor(target, key);
|
|
83
|
-
|
|
84
|
-
|
|
90
|
+
|
|
91
|
+
// Retrieve current:
|
|
92
|
+
let current: {isErrored: false, value: unknown} | {/* Note: isErrored is currently useless, cause proxy-facades treats accessors as white-box */ isErrored: true} = (()=> {
|
|
93
|
+
try {
|
|
94
|
+
//@ts-ignore
|
|
95
|
+
return {isErrored: false, value: origDescriptor?.value /* performance */ || target[key]};
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return {isErrored: true} as any
|
|
99
|
+
}
|
|
100
|
+
})();
|
|
101
|
+
|
|
85
102
|
const origSetter = origDescriptor?.set;
|
|
86
103
|
const origGetter = origDescriptor?.get;
|
|
87
104
|
|
|
@@ -94,7 +111,7 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
94
111
|
delete target[key]; // delete the old, or the following Object.defineProperty will conflict
|
|
95
112
|
}
|
|
96
113
|
|
|
97
|
-
function newSetter(this:any, newValue:
|
|
114
|
+
function newSetter(this:any, newValue: unknown) {
|
|
98
115
|
const changeHooksForTarget = getChangeHooksForObject(target);
|
|
99
116
|
|
|
100
117
|
if(origSetter !== undefined) {
|
|
@@ -105,12 +122,19 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
105
122
|
}
|
|
106
123
|
|
|
107
124
|
if(origGetter !== undefined) {
|
|
108
|
-
|
|
125
|
+
// call the getter. Is this a good idea to refresh the value here?
|
|
126
|
+
try {
|
|
127
|
+
current = {isErrored: false, value: origGetter.apply(target)};
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
current = {isErrored: true};
|
|
131
|
+
throw e;
|
|
132
|
+
}
|
|
109
133
|
throw new TypeError("Target originally had a getter and no setter but the property is set.");
|
|
110
134
|
}
|
|
111
135
|
|
|
112
136
|
//@ts-ignore
|
|
113
|
-
if (newValue !==
|
|
137
|
+
if (current.isErrored || newValue !== current.value) { // modify ?
|
|
114
138
|
// run change operation and call listeners:
|
|
115
139
|
const hooksToServe: EventHook[] = [];
|
|
116
140
|
if(Array.isArray(target)) {
|
|
@@ -120,7 +144,7 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
120
144
|
hooksToServe.push(changeHooksForTarget.changeAnyProperty)
|
|
121
145
|
runChangeOperation(target, new UnspecificObjectChange(target),hooksToServe,() => {
|
|
122
146
|
//@ts-ignore
|
|
123
|
-
|
|
147
|
+
current = {isErrored: false, value: newValue};
|
|
124
148
|
});
|
|
125
149
|
}
|
|
126
150
|
|
|
@@ -129,9 +153,17 @@ export class ObjectProxyHandler implements ProxyHandler<object> {
|
|
|
129
153
|
|
|
130
154
|
function newGetter(this: any) {
|
|
131
155
|
if(origGetter !== undefined) {
|
|
132
|
-
|
|
156
|
+
// Retrieve value from getter:
|
|
157
|
+
try {
|
|
158
|
+
current = {isErrored: false, value: origGetter.apply(this)}; // call the getter
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
current = {isErrored: true}
|
|
162
|
+
throw e;
|
|
163
|
+
}
|
|
133
164
|
}
|
|
134
|
-
|
|
165
|
+
if(current.isErrored) throw new Error("Illegal state");
|
|
166
|
+
return current.value;
|
|
135
167
|
}
|
|
136
168
|
(newGetter as GetterFlags).origHadGetter = origGetter !== undefined;
|
|
137
169
|
|