proxy-facades 1.0.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/.idea/.name +1 -0
- package/.idea/modules.xml +8 -0
- package/.idea/proxy-facades.iml +8 -0
- package/.idea/vcs.xml +6 -0
- package/DEVELOPMENT.md +15 -0
- package/LICENSE +21 -0
- package/RecordedReadOnProxiedObjectExt.d.ts +22 -0
- package/RecordedReadOnProxiedObjectExt.d.ts.map +1 -0
- package/RecordedReadOnProxiedObjectExt.js +41 -0
- package/RecordedReadOnProxiedObjectExt.js.map +1 -0
- package/RecordedReadOnProxiedObjectExt.ts +41 -0
- package/Util.d.ts +85 -0
- package/Util.d.ts.map +1 -0
- package/Util.js +239 -0
- package/Util.js.map +1 -0
- package/Util.ts +254 -0
- package/class-trackers/Array.d.ts +93 -0
- package/class-trackers/Array.d.ts.map +1 -0
- package/class-trackers/Array.js +193 -0
- package/class-trackers/Array.js.map +1 -0
- package/class-trackers/Array.ts +245 -0
- package/class-trackers/Iterator.d.ts +38 -0
- package/class-trackers/Iterator.d.ts.map +1 -0
- package/class-trackers/Iterator.js +69 -0
- package/class-trackers/Iterator.js.map +1 -0
- package/class-trackers/Iterator.ts +73 -0
- package/class-trackers/Map.d.ts +128 -0
- package/class-trackers/Map.d.ts.map +1 -0
- package/class-trackers/Map.js +310 -0
- package/class-trackers/Map.js.map +1 -0
- package/class-trackers/Map.ts +403 -0
- package/class-trackers/Set.d.ts +85 -0
- package/class-trackers/Set.d.ts.map +1 -0
- package/class-trackers/Set.js +197 -0
- package/class-trackers/Set.js.map +1 -0
- package/class-trackers/Set.ts +245 -0
- package/class-trackers/index.d.ts +7 -0
- package/class-trackers/index.d.ts.map +1 -0
- package/class-trackers/index.js +36 -0
- package/class-trackers/index.js.map +1 -0
- package/class-trackers/index.ts +38 -0
- package/class-trackers/readme.md +2 -0
- package/common.d.ts +235 -0
- package/common.d.ts.map +1 -0
- package/common.js +378 -0
- package/common.js.map +1 -0
- package/common.ts +501 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +10 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +1 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.js +76 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.js.map +1 -0
- package/dev_generateEsRuntimeBehaviourCheckerCode.ts +85 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.d.ts +22 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.d.ts.map +1 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.js +37 -0
- package/dist/mjs/RecordedReadOnProxiedObjectExt.js.map +1 -0
- package/dist/mjs/Util.d.ts +85 -0
- package/dist/mjs/Util.d.ts.map +1 -0
- package/dist/mjs/Util.js +223 -0
- package/dist/mjs/Util.js.map +1 -0
- package/dist/mjs/class-trackers/Array.d.ts +93 -0
- package/dist/mjs/class-trackers/Array.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Array.js +186 -0
- package/dist/mjs/class-trackers/Array.js.map +1 -0
- package/dist/mjs/class-trackers/Iterator.d.ts +38 -0
- package/dist/mjs/class-trackers/Iterator.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Iterator.js +65 -0
- package/dist/mjs/class-trackers/Iterator.js.map +1 -0
- package/dist/mjs/class-trackers/Map.d.ts +128 -0
- package/dist/mjs/class-trackers/Map.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Map.js +299 -0
- package/dist/mjs/class-trackers/Map.js.map +1 -0
- package/dist/mjs/class-trackers/Set.d.ts +85 -0
- package/dist/mjs/class-trackers/Set.d.ts.map +1 -0
- package/dist/mjs/class-trackers/Set.js +189 -0
- package/dist/mjs/class-trackers/Set.js.map +1 -0
- package/dist/mjs/class-trackers/index.d.ts +7 -0
- package/dist/mjs/class-trackers/index.d.ts.map +1 -0
- package/dist/mjs/class-trackers/index.js +32 -0
- package/dist/mjs/class-trackers/index.js.map +1 -0
- package/dist/mjs/common.d.ts +235 -0
- package/dist/mjs/common.d.ts.map +1 -0
- package/dist/mjs/common.js +361 -0
- package/dist/mjs/common.js.map +1 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.d.ts +10 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.d.ts.map +1 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.js +76 -0
- package/dist/mjs/dev_generateEsRuntimeBehaviourCheckerCode.js.map +1 -0
- package/dist/mjs/index.d.ts +8 -0
- package/dist/mjs/index.d.ts.map +1 -0
- package/dist/mjs/index.js +8 -0
- package/dist/mjs/index.js.map +1 -0
- package/dist/mjs/objectChangeTracking.d.ts +43 -0
- package/dist/mjs/objectChangeTracking.d.ts.map +1 -0
- package/dist/mjs/objectChangeTracking.js +209 -0
- package/dist/mjs/objectChangeTracking.js.map +1 -0
- package/dist/mjs/origChangeTracking.d.ts +14 -0
- package/dist/mjs/origChangeTracking.d.ts.map +1 -0
- package/dist/mjs/origChangeTracking.js +58 -0
- package/dist/mjs/origChangeTracking.js.map +1 -0
- package/dist/mjs/proxyFacade.d.ts +45 -0
- package/dist/mjs/proxyFacade.d.ts.map +1 -0
- package/dist/mjs/proxyFacade.js +179 -0
- package/dist/mjs/proxyFacade.js.map +1 -0
- package/dist/mjs/watchedProxyFacade.d.ts +84 -0
- package/dist/mjs/watchedProxyFacade.d.ts.map +1 -0
- package/dist/mjs/watchedProxyFacade.js +300 -0
- package/dist/mjs/watchedProxyFacade.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.d.ts.map +1 -0
- package/index.js +36 -0
- package/index.js.map +1 -0
- package/index.ts +7 -0
- package/index_esm.mjs +44 -0
- package/objectChangeTracking.d.ts +43 -0
- package/objectChangeTracking.d.ts.map +1 -0
- package/objectChangeTracking.js +214 -0
- package/objectChangeTracking.js.map +1 -0
- package/objectChangeTracking.ts +251 -0
- package/origChangeTracking.d.ts +14 -0
- package/origChangeTracking.d.ts.map +1 -0
- package/origChangeTracking.js +63 -0
- package/origChangeTracking.js.map +1 -0
- package/origChangeTracking.ts +72 -0
- package/package.json +52 -0
- package/proxyFacade.d.ts +45 -0
- package/proxyFacade.d.ts.map +1 -0
- package/proxyFacade.js +187 -0
- package/proxyFacade.js.map +1 -0
- package/proxyFacade.ts +222 -0
- package/readme.md +111 -0
- package/watchedProxyFacade.d.ts +84 -0
- package/watchedProxyFacade.d.ts.map +1 -0
- package/watchedProxyFacade.js +312 -0
- package/watchedProxyFacade.js.map +1 -0
- package/watchedProxyFacade.ts +369 -0
package/common.js
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnspecificObjectChange = exports.objectMembershipInGraphs = exports.PartialGraph = exports.ClassTrackingConfiguration = exports.EventHook = exports.ChangeOperation = exports.RecordedReadOnProxiedObject = exports.RecordedRead = void 0;
|
|
4
|
+
exports.registerChangeOperationClass = registerChangeOperationClass;
|
|
5
|
+
exports.dualUseTracker_callOrigMethodOnTarget = dualUseTracker_callOrigMethodOnTarget;
|
|
6
|
+
exports.getPropertyDescriptor = getPropertyDescriptor;
|
|
7
|
+
exports.runChangeOperation = runChangeOperation;
|
|
8
|
+
exports.checkEsRuntimeBehaviour = checkEsRuntimeBehaviour;
|
|
9
|
+
exports.recordedReadsArraysAreEqual = recordedReadsArraysAreEqual;
|
|
10
|
+
exports.makeIteratorTranslateValue = makeIteratorTranslateValue;
|
|
11
|
+
const Util_1 = require("./Util");
|
|
12
|
+
const proxyFacade_1 = require("./proxyFacade");
|
|
13
|
+
const objectChangeTracking_1 = require("./objectChangeTracking");
|
|
14
|
+
class RecordedRead {
|
|
15
|
+
}
|
|
16
|
+
exports.RecordedRead = RecordedRead;
|
|
17
|
+
class RecordedReadOnProxiedObject extends RecordedRead {
|
|
18
|
+
}
|
|
19
|
+
exports.RecordedReadOnProxiedObject = RecordedReadOnProxiedObject;
|
|
20
|
+
/**
|
|
21
|
+
* A change operation that may later be serializable. Beeing able to store it in the transaction protocol of membrace-db. Or to syncronize live objects between server->client
|
|
22
|
+
*/
|
|
23
|
+
class ChangeOperation {
|
|
24
|
+
_unDo(undoInfo) {
|
|
25
|
+
throw new Error("Not yet implemented");
|
|
26
|
+
}
|
|
27
|
+
constructor() {
|
|
28
|
+
// Check if registered:
|
|
29
|
+
changeOperationsClasses.has(this.constructor.name) || (0, Util_1.throwError)("Change operation was not registered. Please register the class first, with registerChangeOperationClass(...)");
|
|
30
|
+
}
|
|
31
|
+
withInputs(...inputs) {
|
|
32
|
+
this.inputs = inputs;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
do() {
|
|
36
|
+
if (this.inputs === undefined)
|
|
37
|
+
throw new Error("inputs not set");
|
|
38
|
+
return this._do(...this.inputs).result;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.ChangeOperation = ChangeOperation;
|
|
42
|
+
const changeOperationsClasses = new Map();
|
|
43
|
+
function registerChangeOperationClass(clazz) {
|
|
44
|
+
const name = clazz.name;
|
|
45
|
+
name || (0, Util_1.throwError)("Change operation class does not have a name. Is it an anonymous class?");
|
|
46
|
+
!(changeOperationsClasses.has(name) && changeOperationsClasses.get(name) !== clazz) || (0, Util_1.throwError)("Another change operation class is already registered under the name: " + name);
|
|
47
|
+
changeOperationsClasses.set(name, clazz);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Registry for one possible potential target event type. I.e. a property of a certain object, or a more abstract one like: "some key of a certain object has changed".
|
|
51
|
+
*/
|
|
52
|
+
class EventHook {
|
|
53
|
+
constructor() {
|
|
54
|
+
/**
|
|
55
|
+
* Called before the change
|
|
56
|
+
* @param change
|
|
57
|
+
*/
|
|
58
|
+
this.beforeListeners = new Set();
|
|
59
|
+
/**
|
|
60
|
+
* Called after the change
|
|
61
|
+
* @param change
|
|
62
|
+
*/
|
|
63
|
+
this.afterListeners = new Set();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* To be able to easily control the before and after for exactly the same change. It's an idea / no good use case found yet.
|
|
67
|
+
* @param change
|
|
68
|
+
* @param doChange
|
|
69
|
+
*/
|
|
70
|
+
//interceptors = new Set<(change: RecordedChange, doChange: () => void) => void>();
|
|
71
|
+
fireBefore(change) {
|
|
72
|
+
this.beforeListeners.forEach(l => l(change));
|
|
73
|
+
}
|
|
74
|
+
fireAfter(change) {
|
|
75
|
+
this.afterListeners.forEach(l => l(change));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.EventHook = EventHook;
|
|
79
|
+
//@ts-ignore
|
|
80
|
+
function dualUseTracker_callOrigMethodOnTarget(tracker, methodName, args) {
|
|
81
|
+
const target = tracker._target;
|
|
82
|
+
const method = tracker._watchedProxyHandler !== undefined ? target[methodName] : Object.getPrototypeOf(Object.getPrototypeOf(tracker))[methodName];
|
|
83
|
+
return method.apply(target, args);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Like Object.getOwnPropertyDescriptor. But for all parent classes
|
|
87
|
+
* @param o
|
|
88
|
+
* @param p
|
|
89
|
+
*/
|
|
90
|
+
function getPropertyDescriptor(o, p) {
|
|
91
|
+
let result = Object.getOwnPropertyDescriptor(o, p);
|
|
92
|
+
if (result !== undefined) {
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
let proto = Object.getPrototypeOf(o);
|
|
96
|
+
if (proto !== null) {
|
|
97
|
+
return getPropertyDescriptor(proto, p);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const runAndCallListenersOnce_after_listeners = new Map();
|
|
101
|
+
/**
|
|
102
|
+
* Used by runChangeOperation
|
|
103
|
+
*/
|
|
104
|
+
class ChangeCall {
|
|
105
|
+
constructor() {
|
|
106
|
+
this.fired_beforeListeners = new Set();
|
|
107
|
+
this.afterListeners = new Set();
|
|
108
|
+
/**
|
|
109
|
+
* "binds" the ChangeOperation parameter to the afterListeners
|
|
110
|
+
*/
|
|
111
|
+
this.paramsForAfterListeners = new Map();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const runChangeOperation_Calls = (0, Util_1.newDefaultMap)(() => new ChangeCall());
|
|
115
|
+
/**
|
|
116
|
+
* Informs hooksToServe's beforeListeners + executes changeOperation + informs hooksToServe's afterListeners.
|
|
117
|
+
* All this while preventing listeners from beeing called twice (this is the main purpose of this function!). Even during the same operation (call) that spans a call stack (the stack can go through multiple proxy layers)
|
|
118
|
+
* <p>
|
|
119
|
+
* This function is needed, because there's some overlapping of concerns in listener types, especially for Arrays. Also internal methods may again call the set method which itsself wants to call the propertychange_listeners.
|
|
120
|
+
* </p>
|
|
121
|
+
* @param forTarget object to sync on. All hooks passed to nested runChangeOperation calls will only be fired once.
|
|
122
|
+
* @param paramForListeners the parameter for the change listeners. It won't be run by this function / it's just the parameter. When setting to undefined, it indicates that this runChangeOperation call is only to wrap multiple nested calls / sync them on targetObject. The default anyChange hook won't be called at this level either.
|
|
123
|
+
* @param hooksToServe these hooks will be called (not twice, as mentioned).
|
|
124
|
+
* @param changeOperationFn
|
|
125
|
+
*/
|
|
126
|
+
function runChangeOperation(forTarget, paramForListeners, hooksToServe, changeOperationFn) {
|
|
127
|
+
var _a;
|
|
128
|
+
const synchronizeOn = (0, proxyFacade_1.getGlobalOrig)(forTarget);
|
|
129
|
+
let isRootCall = !runChangeOperation_Calls.has(synchronizeOn); // is it not nested / the outermost call ?
|
|
130
|
+
const changeCall = runChangeOperation_Calls.get(synchronizeOn);
|
|
131
|
+
try {
|
|
132
|
+
if (paramForListeners) {
|
|
133
|
+
hooksToServe.push((0, objectChangeTracking_1.getChangeHooksForObject)(forTarget).anyChange); // Always serve this one as well
|
|
134
|
+
(_a = exports.objectMembershipInGraphs.get(forTarget)) === null || _a === void 0 ? void 0 : _a.forEach(graph => {
|
|
135
|
+
hooksToServe.push(graph._changeHook);
|
|
136
|
+
});
|
|
137
|
+
// Fire and register before-hooks:
|
|
138
|
+
hooksToServe.forEach(hook => {
|
|
139
|
+
hook.beforeListeners.forEach(listener => {
|
|
140
|
+
if (!changeCall.fired_beforeListeners.has(listener)) {
|
|
141
|
+
listener(paramForListeners); // fire
|
|
142
|
+
changeCall.fired_beforeListeners.add(listener);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
hook.afterListeners.forEach(afterListener => {
|
|
146
|
+
if (!changeCall.afterListeners.has(afterListener)) {
|
|
147
|
+
changeCall.afterListeners.add(afterListener);
|
|
148
|
+
changeCall.paramsForAfterListeners.set(afterListener, paramForListeners); // Ensure, it is called with the proper changeOperation parameter afterwards. Otherwise stuff from a higher level facade would leak to a change listeners, registered in a lower facade
|
|
149
|
+
}
|
|
150
|
+
}); // schedule afterListeners
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
const result = changeOperationFn();
|
|
154
|
+
if (isRootCall) {
|
|
155
|
+
// call afterListeners:
|
|
156
|
+
for (const listener of changeCall.afterListeners) {
|
|
157
|
+
listener(changeCall.paramsForAfterListeners.get(listener)); // fire
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
if (isRootCall) {
|
|
164
|
+
runChangeOperation_Calls.delete(synchronizeOn);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
let esRuntimeBehaviourAlreadyChecked = false;
|
|
169
|
+
function checkEsRuntimeBehaviour() {
|
|
170
|
+
if (esRuntimeBehaviourAlreadyChecked) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// **************************************************************************************************
|
|
174
|
+
// **** The following code is generated via `npm run dev:generateEsRuntimeBehaviourCheckerCode`: ****
|
|
175
|
+
// **************************************************************************************************
|
|
176
|
+
expectUsingMethodsOrFields(["a"], v => v.at(0), ["at", "length", "0"]);
|
|
177
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.concat("d", "e", "f"), ["concat", "constructor", Symbol.isConcatSpreadable, "length", "0", "1", "2"]);
|
|
178
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.map(x => (0, Util_1.read)(x)), ["map", "length", "constructor", "0", "1", "2"]);
|
|
179
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.forEach(x => (0, Util_1.read)(x)), ["forEach", "length", "0", "1", "2"]);
|
|
180
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.join(","), ["join", "length", "0", "1", "2"]);
|
|
181
|
+
expectUsingMethodsOrFields(["a", "b", "c", "d"], v => v.slice(1, 3), ["slice", "length", "constructor", "1", "2"]);
|
|
182
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.some(x => x === "a"), ["some", "length", "0"]);
|
|
183
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.filter(x => x === "a"), ["filter", "length", "constructor", "0", "1", "2"]);
|
|
184
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.find(x => x === "a"), ["find", "length", "0"]);
|
|
185
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.every(x => x === "a"), ["every", "length", "0", "1"]);
|
|
186
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.findIndex(x => x === "a"), ["findIndex", "length", "0"]);
|
|
187
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.includes("b", 1), ["includes", "length", "1"]);
|
|
188
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.indexOf("b", 1), ["indexOf", "length", "1"]);
|
|
189
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v[Symbol.iterator]().next(), [Symbol.iterator, "length", "0"]);
|
|
190
|
+
expectUsingMethodsOrFields(["a", "b", "b"], v => v.lastIndexOf("b", 1), ["lastIndexOf", "length", "1"]);
|
|
191
|
+
expectUsingMethodsOrFields(["a", "b", "b"], v => v.reduce((p, c) => p + c), ["reduce", "length", "0", "1", "2"]);
|
|
192
|
+
expectUsingMethodsOrFields(["a", "b", "b"], v => v.reduceRight((p, c) => p + c), ["reduceRight", "length", "2", "1", "0"]);
|
|
193
|
+
expectUsingMethodsOrFields(["a", "b", "b"], v => v.toLocaleString(), ["toLocaleString", "length", "0", "1", "2"]);
|
|
194
|
+
expectUsingMethodsOrFields(["a", "b", "b"], v => v.toString(), ["toString", "join", "length", "0", "1", "2"]);
|
|
195
|
+
expectUsingMethodsOrFields(["a", "b", "c"], v => v.unshift("_a", "_b"), ["length", "2", "1", "0"]);
|
|
196
|
+
expectUsingMethodsOrFields(["a", "b", "c", "d"], v => v.splice(1, 2, "newB", "newC", "newX"), ["length", "1", "2", "3"]);
|
|
197
|
+
expectUsingMethodsOrFields(["a", "b", "c", "d"], v => v.copyWithin(3, 1, 3), ["length", "1", "0", "2", "3"]);
|
|
198
|
+
expectUsingMethodsOrFields(["a", "b", "c", "d"], v => v.reverse(), ["length", "0", "3", "1", "2"]);
|
|
199
|
+
//@ts-ignore
|
|
200
|
+
if ([].values().forEach) { // Runtime supports these iterator functions like forEach, filter, ....
|
|
201
|
+
expectUsingMethodsOrFields(["a", "b", "c"][Symbol.iterator](), it => it.forEach(x => x), ["forEach", "next"]);
|
|
202
|
+
expectUsingMethodsOrFields(["a", "b", "c"][Symbol.iterator](), it => it.filter(x => x === "b"), ["filter", "next"]);
|
|
203
|
+
expectUsingMethodsOrFields(["a", "b", "c"][Symbol.iterator](), it => it.take(2), ["take", "next"]);
|
|
204
|
+
expectUsingMethodsOrFields(["a", "b", "c"][Symbol.iterator](), it => it.toArray(), ["toArray", "next"]);
|
|
205
|
+
}
|
|
206
|
+
// **************************************************************************************************
|
|
207
|
+
// **************************************************************************************************
|
|
208
|
+
// **************************************************************************************************
|
|
209
|
+
function expectUsingMethodsOrFields(orig, tester, expectedMethodsOrFields) {
|
|
210
|
+
// Run the tester and record used methods/fields:
|
|
211
|
+
const usedMethodsOrFields = new Set();
|
|
212
|
+
const proxy = new Proxy(orig, {
|
|
213
|
+
get(target, p, receiver) {
|
|
214
|
+
usedMethodsOrFields.add(p);
|
|
215
|
+
if (p === "next") {
|
|
216
|
+
//@ts-ignore
|
|
217
|
+
return (...args) => target.next(...args); // .next() method must run on target, not on proxy
|
|
218
|
+
}
|
|
219
|
+
//@ts-ignore
|
|
220
|
+
return target[p];
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
(0, Util_1.read)(tester(proxy));
|
|
224
|
+
!expectedMethodsOrFields.some(mf => mf !== "constructor" && !usedMethodsOrFields.has(mf)) || (0, Util_1.throwError)(new Error(`The javascript runtime is not behaving as expected. Please report this as a bug along with your javascript runtime (or Browser) version`));
|
|
225
|
+
}
|
|
226
|
+
esRuntimeBehaviourAlreadyChecked = true;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Configures tracking behaviour for a certain class
|
|
230
|
+
*/
|
|
231
|
+
class ClassTrackingConfiguration {
|
|
232
|
+
constructor() {
|
|
233
|
+
this.worksForSubclasses = false;
|
|
234
|
+
/**
|
|
235
|
+
* Built-in Methods, which are using fields / calling methods on the proxy transparently/loyally, so those methods don't call/use internal stuff directly.
|
|
236
|
+
* Tested with, see dev_generateEsRuntimeBehaviourCheckerCode.ts
|
|
237
|
+
* May include read-only / reader methods
|
|
238
|
+
*/
|
|
239
|
+
this.knownHighLevelMethods = new Set();
|
|
240
|
+
/**
|
|
241
|
+
* Non-high level. These fire `RecordedUnspecificRead`s then. So better implement them instead to fire i.e RecordedArrayValuesRead.
|
|
242
|
+
*/
|
|
243
|
+
this.readOnlyMethods = new Set();
|
|
244
|
+
/**
|
|
245
|
+
* Non-high level. Same as above: better implement them
|
|
246
|
+
*/
|
|
247
|
+
this.readOnlyFields = new Set();
|
|
248
|
+
/**
|
|
249
|
+
* Default, if not listed as high-level method
|
|
250
|
+
*/
|
|
251
|
+
this.receiverMustBeNonProxied = true;
|
|
252
|
+
/**
|
|
253
|
+
* Makes the WatchedProxyFacade's handler also track/fire reads for methods that are not **directly** in the this.readTracker class.
|
|
254
|
+
*/
|
|
255
|
+
this.trackTreads = true;
|
|
256
|
+
/**
|
|
257
|
+
* (For Array:) Flags to track setting properties, meaning changes are not only done by calling methods. This will use a Proxy (install a Proxy as Prototype).
|
|
258
|
+
*/
|
|
259
|
+
this.trackSettingObjectProperties = false;
|
|
260
|
+
/**
|
|
261
|
+
* Wrap the results of methods which are not in the readTracker or changeTracker in proxies
|
|
262
|
+
* Take caution when enabling this. It is not always a good idea. I.e. Map#entries() return new intermediates arrays [] and these will then also be proxied and result in a false positive something-has-changed detection when comparing recorded Reads.
|
|
263
|
+
*/
|
|
264
|
+
this.proxyUnhandledMethodResults = false;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Lists read and changeTracker as far as they're present
|
|
268
|
+
*/
|
|
269
|
+
getTrackerClasses() {
|
|
270
|
+
const result = [];
|
|
271
|
+
if (this.readTracker !== undefined) {
|
|
272
|
+
result.push(this.readTracker);
|
|
273
|
+
}
|
|
274
|
+
if (this.changeTracker !== undefined) {
|
|
275
|
+
result.push(this.changeTracker);
|
|
276
|
+
}
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.ClassTrackingConfiguration = ClassTrackingConfiguration;
|
|
281
|
+
function recordedReadsArraysAreEqual(a, b) {
|
|
282
|
+
return (0, Util_1.arraysAreEqualsByPredicateFn)(a, b, (a, b) => a.equals(b));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Patches the iterator so it runs the value through the translateFn
|
|
286
|
+
* @param iterator
|
|
287
|
+
* @param translateFn
|
|
288
|
+
*/
|
|
289
|
+
function makeIteratorTranslateValue(iterator, translateFn) {
|
|
290
|
+
const originalNext = iterator.next;
|
|
291
|
+
function next(...args) {
|
|
292
|
+
const result = originalNext.apply(this, args);
|
|
293
|
+
if (!result.done) {
|
|
294
|
+
result.value = translateFn(result.value);
|
|
295
|
+
}
|
|
296
|
+
return result;
|
|
297
|
+
}
|
|
298
|
+
iterator.next = next; // Patch iterator
|
|
299
|
+
return iterator;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Base for ProxyFacades and change-tracking of original objects (without proxy facades) See {@see changeTrackedOriginaObjects the changeTrackedOriginaObjects global instance}
|
|
303
|
+
*/
|
|
304
|
+
class PartialGraph {
|
|
305
|
+
constructor() {
|
|
306
|
+
/**
|
|
307
|
+
* True means, it spreads it's self when members are read or set. Not yet implemented for non-proxy-facades.
|
|
308
|
+
* Always true for proxy-facade subclasses (that's their job).
|
|
309
|
+
*/
|
|
310
|
+
this.viral = false;
|
|
311
|
+
/**
|
|
312
|
+
* Called after a change has been made to any object inside this graph
|
|
313
|
+
* Note: There are also listeners for specified properties/situations (which are more capable)
|
|
314
|
+
* @protected
|
|
315
|
+
*/
|
|
316
|
+
this._changeHook = new EventHook();
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
*
|
|
320
|
+
* @param listener Called when a change is made to any object inside this graph.
|
|
321
|
+
* The listener is called when the change is not yet written unlike {@see onAfterChange}. So throwing an exception in the listener will prevent the actual change from happening.
|
|
322
|
+
*/
|
|
323
|
+
onBeforeChange(listener) {
|
|
324
|
+
this._changeHook.beforeListeners.add(listener);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Unregister listener from {@see PartialGraph#onBeforeChange}
|
|
328
|
+
* @param listener
|
|
329
|
+
*/
|
|
330
|
+
offBeforeChange(listener) {
|
|
331
|
+
this._changeHook.beforeListeners.delete(listener);
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
*
|
|
335
|
+
* @param listener Called after a change has been made to any object inside this graph
|
|
336
|
+
*/
|
|
337
|
+
onAfterChange(listener) {
|
|
338
|
+
this._changeHook.afterListeners.add(listener);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Unregister listener from {@see PartialGraph#onAfterChange}
|
|
342
|
+
* @param listener
|
|
343
|
+
*/
|
|
344
|
+
offAfterChange(listener) {
|
|
345
|
+
this._changeHook.afterListeners.delete(listener);
|
|
346
|
+
}
|
|
347
|
+
hasObj(obj) {
|
|
348
|
+
var _a;
|
|
349
|
+
return (_a = exports.objectMembershipInGraphs.get(obj)) === null || _a === void 0 ? void 0 : _a.has(this);
|
|
350
|
+
}
|
|
351
|
+
_register(obj) {
|
|
352
|
+
exports.objectMembershipInGraphs.add(obj, this);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
exports.PartialGraph = PartialGraph;
|
|
356
|
+
exports.objectMembershipInGraphs = new Util_1.WeakMapSet();
|
|
357
|
+
/**
|
|
358
|
+
* TODO: Implement subclasses
|
|
359
|
+
*/
|
|
360
|
+
class UnspecificObjectChange extends ChangeOperation {
|
|
361
|
+
constructor(target) {
|
|
362
|
+
super();
|
|
363
|
+
if (target !== undefined) {
|
|
364
|
+
//@ts-ignore
|
|
365
|
+
this.inputs = [target, /* state of target AFTER the opertation*/];
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
_do(...inputs) {
|
|
369
|
+
// TODO: restore state after
|
|
370
|
+
return { result: undefined, undoInfo: undefined };
|
|
371
|
+
}
|
|
372
|
+
_unDo(undoInfo) {
|
|
373
|
+
throw new Error("Not yet implemented");
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.UnspecificObjectChange = UnspecificObjectChange;
|
|
377
|
+
registerChangeOperationClass(UnspecificObjectChange);
|
|
378
|
+
//# sourceMappingURL=common.js.map
|
package/common.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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"}
|