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
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
*/
|
|
4
|
+
import { getPropertyDescriptor, PartialGraph } from "./common";
|
|
5
|
+
import { deleteProperty } from "./origChangeTracking";
|
|
6
|
+
export class ProxyFacade extends PartialGraph {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
// *** Configuration: ***
|
|
10
|
+
/**
|
|
11
|
+
* Treats them like functions, meaning, they get a proxied 'this'. WatchProxies will see the access to the real properties
|
|
12
|
+
*/
|
|
13
|
+
this.propertyAccessorsAsWhiteBox = true;
|
|
14
|
+
// *** State: ***
|
|
15
|
+
this.objectsToProxyHandlers = new WeakMap();
|
|
16
|
+
}
|
|
17
|
+
getProxyFor(value) {
|
|
18
|
+
if (value === null || typeof value !== "object") { // not an object?
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
if (this.hasObj(value)) { // Already our proxied object ?
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
let handlerForObj = this.objectsToProxyHandlers.get(value);
|
|
25
|
+
if (handlerForObj !== undefined) { // value was an unproxied object and we have the proxy for it ?
|
|
26
|
+
return handlerForObj.proxy;
|
|
27
|
+
}
|
|
28
|
+
handlerForObj = this.crateHandler(value, this);
|
|
29
|
+
// register:
|
|
30
|
+
proxyToProxyHandler.set(handlerForObj.proxy, handlerForObj);
|
|
31
|
+
this.objectsToProxyHandlers.set(value, handlerForObj);
|
|
32
|
+
this._register(handlerForObj.proxy);
|
|
33
|
+
return handlerForObj.proxy;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
*
|
|
37
|
+
* @param value
|
|
38
|
+
* @return the original non-proxied value
|
|
39
|
+
*/
|
|
40
|
+
getUnproxiedValue(value) {
|
|
41
|
+
var _a;
|
|
42
|
+
if (value === null || typeof value !== "object") { // not an object?
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
return ((_a = proxyToProxyHandler.get(value)) === null || _a === void 0 ? void 0 : _a.target) || value;
|
|
46
|
+
}
|
|
47
|
+
getHandlerFor(obj) {
|
|
48
|
+
return getProxyHandler(this.getProxyFor(obj));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class FacadeProxyHandler {
|
|
52
|
+
constructor(target, facade) {
|
|
53
|
+
this.target = target;
|
|
54
|
+
this.facade = facade;
|
|
55
|
+
// Create proxy:
|
|
56
|
+
//const targetForProxy = {}; // The virtual way
|
|
57
|
+
const targetForProxy = target; // Preserves Object.keys and instanceof behaviour :), iterators and other stuff. But the downside with this is, that it does not allow to proxy read only properties
|
|
58
|
+
this.proxy = new Proxy(targetForProxy, this);
|
|
59
|
+
}
|
|
60
|
+
deleteProperty(target, key) {
|
|
61
|
+
//@ts-ignore
|
|
62
|
+
return deleteProperty(this.target, key);
|
|
63
|
+
}
|
|
64
|
+
defineProperty(target, property, attributes) {
|
|
65
|
+
throw new Error("Must not use defineProperty on a proxied object. Handling of change tracking etc. for this may not be implemented");
|
|
66
|
+
}
|
|
67
|
+
get(fake_target, p, receiver) {
|
|
68
|
+
var _a;
|
|
69
|
+
// Validity check
|
|
70
|
+
if (receiver !== this.proxy) {
|
|
71
|
+
throw new Error("Invalid state. Get was called on a different object than this proxy is for."); // Cannot imagine a legal case
|
|
72
|
+
}
|
|
73
|
+
const getter = (_a = getPropertyDescriptor(this.target, p)) === null || _a === void 0 ? void 0 : _a.get;
|
|
74
|
+
let value;
|
|
75
|
+
if (this.facade.propertyAccessorsAsWhiteBox && getter !== undefined && getter.origHadGetter !== false) { // Access via real property accessor ?
|
|
76
|
+
return value = getter.apply(this.proxy, []); // Call the accessor with a proxied this
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
//@ts-ignore
|
|
80
|
+
value = this.rawRead(p);
|
|
81
|
+
}
|
|
82
|
+
if (value != null && typeof value === "object") {
|
|
83
|
+
const descriptor = Object.getOwnPropertyDescriptor(this.target, p);
|
|
84
|
+
// Handle read-only property:
|
|
85
|
+
if (descriptor !== undefined && descriptor.writable === false) {
|
|
86
|
+
// The js runtime would prevent us from returning a proxy :( Pretty mean :(
|
|
87
|
+
throw new Error("Cannot proxy a read-only property. This is not implemented."); // TODO: Implement the virtual way (see constructor)
|
|
88
|
+
}
|
|
89
|
+
return this.facade.getProxyFor(value);
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
rawRead(key) {
|
|
94
|
+
//@ts-ignore
|
|
95
|
+
return this.target[key];
|
|
96
|
+
}
|
|
97
|
+
set(fake_target, p, value, receiver) {
|
|
98
|
+
var _a;
|
|
99
|
+
// Validity check
|
|
100
|
+
if (receiver !== this.proxy) {
|
|
101
|
+
throw new Error("Invalid state. Set was called on a different object than this proxy is for."); // Cannot imagine a legal case
|
|
102
|
+
}
|
|
103
|
+
const setter = (_a = getPropertyDescriptor(this.target, p)) === null || _a === void 0 ? void 0 : _a.set;
|
|
104
|
+
if (this.facade.propertyAccessorsAsWhiteBox && setter !== undefined && setter.origHadSetter !== false) { // Setting via real property accessor ?
|
|
105
|
+
setter.apply(this.proxy, [value]); // Only call the accessor with a proxied this
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const unproxiedValue = this.facade.getUnproxiedValue(value);
|
|
109
|
+
//@ts-ignore
|
|
110
|
+
if (this.target[p] !== unproxiedValue) { // modify ?
|
|
111
|
+
this.rawChange(p, unproxiedValue);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
rawChange(p, newUnproxiedValue) {
|
|
117
|
+
//@ts-ignore
|
|
118
|
+
this.target[p] = newUnproxiedValue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const proxyToProxyHandler = new WeakMap();
|
|
122
|
+
function getProxyHandler(proxy) {
|
|
123
|
+
return proxyToProxyHandler.get(proxy);
|
|
124
|
+
}
|
|
125
|
+
export function isProxyForAFacade(obj) {
|
|
126
|
+
return proxyToProxyHandler.has(obj);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Makes the obj throw an error when trying to access it
|
|
130
|
+
* @param obj
|
|
131
|
+
* @param message
|
|
132
|
+
* @param cause
|
|
133
|
+
*/
|
|
134
|
+
export function invalidateObject(obj, message, cause) {
|
|
135
|
+
const throwInvalid = () => {
|
|
136
|
+
throw new Error(message, { cause: cause });
|
|
137
|
+
};
|
|
138
|
+
// Delete all writeable own props:
|
|
139
|
+
const descrs = Object.getOwnPropertyDescriptors(obj);
|
|
140
|
+
for (const k in descrs) {
|
|
141
|
+
const desc = descrs[k];
|
|
142
|
+
if (desc.configurable) {
|
|
143
|
+
//@ts-ignore
|
|
144
|
+
delete obj[k];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
Object.setPrototypeOf(obj, new Proxy(obj, {
|
|
148
|
+
get(target, p, receiver) {
|
|
149
|
+
throwInvalid();
|
|
150
|
+
},
|
|
151
|
+
set(target, p, newValue, receiver) {
|
|
152
|
+
throwInvalid();
|
|
153
|
+
return false;
|
|
154
|
+
},
|
|
155
|
+
defineProperty(target, property, attributes) {
|
|
156
|
+
throwInvalid();
|
|
157
|
+
return false;
|
|
158
|
+
},
|
|
159
|
+
deleteProperty(target, p) {
|
|
160
|
+
throwInvalid();
|
|
161
|
+
return false;
|
|
162
|
+
},
|
|
163
|
+
ownKeys(target) {
|
|
164
|
+
throwInvalid();
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* @returns the real real origial object from the real world
|
|
171
|
+
*/
|
|
172
|
+
export function getGlobalOrig(obj) {
|
|
173
|
+
let handler;
|
|
174
|
+
while ((handler = proxyToProxyHandler.get(obj)) !== undefined) {
|
|
175
|
+
obj = handler.target;
|
|
176
|
+
}
|
|
177
|
+
return obj;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=proxyFacade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyFacade.js","sourceRoot":"","sources":["../../proxyFacade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { FacadeProxyHandler, ProxyFacade } from "./proxyFacade";
|
|
2
|
+
import { AfterReadListener, ChangeListener, EventHook, IWatchedProxyHandler_common, ObjKey, RecordedRead, RecordedReadOnProxiedObject } from "./common";
|
|
3
|
+
import { RecordedReadOnProxiedObjectExt } from "./RecordedReadOnProxiedObjectExt";
|
|
4
|
+
/**
|
|
5
|
+
* Access a single value (=variable or return value from a function)
|
|
6
|
+
* This read is can only be constructed manually (not through a WatchedProxyFacade / WatchedProxyHandler
|
|
7
|
+
*/
|
|
8
|
+
export declare class RecordedValueRead extends RecordedRead {
|
|
9
|
+
value: unknown;
|
|
10
|
+
constructor(value: unknown);
|
|
11
|
+
get isChanged(): boolean;
|
|
12
|
+
onAfterChange(listener: () => void, trackOriginal?: boolean): void;
|
|
13
|
+
offAfterChange(listener: () => void): void;
|
|
14
|
+
equals(other: RecordedRead): boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare class RecordedPropertyRead extends RecordedReadOnProxiedObjectExt {
|
|
17
|
+
key: ObjKey;
|
|
18
|
+
value: unknown;
|
|
19
|
+
constructor(key: ObjKey, value: unknown);
|
|
20
|
+
get isChanged(): boolean;
|
|
21
|
+
getAffectingChangeHooks(target: this["obj"]): EventHook[];
|
|
22
|
+
equals(other: RecordedRead): boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare class RecordedOwnKeysRead extends RecordedReadOnProxiedObjectExt {
|
|
25
|
+
value: ArrayLike<string | symbol>;
|
|
26
|
+
constructor(value: RecordedOwnKeysRead["value"]);
|
|
27
|
+
get isChanged(): boolean;
|
|
28
|
+
getAffectingChangeHooks(target: this["obj"]): EventHook[];
|
|
29
|
+
equals(other: RecordedRead): boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Fired when a method was called that is not implemented in the supervisor. May be from a future js version
|
|
33
|
+
*/
|
|
34
|
+
export declare class RecordedUnspecificRead extends RecordedReadOnProxiedObjectExt {
|
|
35
|
+
get isChanged(): boolean;
|
|
36
|
+
getAffectingChangeHooks(target: this["obj"]): EventHook[];
|
|
37
|
+
equals(other: RecordedRead): boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Use cases:
|
|
41
|
+
* - record read + watch recorded for modifications. For re-render trigger
|
|
42
|
+
* - record read and make several snapshots (when load is called) and compare exactly those reads
|
|
43
|
+
*/
|
|
44
|
+
export declare class WatchedProxyFacade extends ProxyFacade<WatchedProxyHandler> {
|
|
45
|
+
trackReadsOnPrototype: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Called after a read has been made to any object inside this facade
|
|
48
|
+
* @protected
|
|
49
|
+
*/
|
|
50
|
+
_afterReadListeners: Set<AfterReadListener>;
|
|
51
|
+
onAfterRead(listener: AfterReadListener): void;
|
|
52
|
+
offAfterRead(listener: AfterReadListener): void;
|
|
53
|
+
constructor();
|
|
54
|
+
/**
|
|
55
|
+
* Watches for writes on a specified property
|
|
56
|
+
* @param obj
|
|
57
|
+
* @param key Not restricted here (for the tests), but it must not be number !
|
|
58
|
+
* @param listener
|
|
59
|
+
*/
|
|
60
|
+
onAfterWriteOnProperty<O extends object, K extends keyof O>(obj: O, key: K, listener: ChangeListener): void;
|
|
61
|
+
/**
|
|
62
|
+
* Watches for writes on a specified property
|
|
63
|
+
* @param obj
|
|
64
|
+
* @param key Not restricted here (for the tests), but it must not be number !
|
|
65
|
+
* @param listener
|
|
66
|
+
*/
|
|
67
|
+
offAfterWriteOnProperty<O extends object, K extends keyof O>(obj: O, key: K, listener: ChangeListener): void;
|
|
68
|
+
protected crateHandler(target: object, facade: any): WatchedProxyHandler;
|
|
69
|
+
}
|
|
70
|
+
export declare class WatchedProxyHandler extends FacadeProxyHandler<WatchedProxyFacade> implements IWatchedProxyHandler_common {
|
|
71
|
+
constructor(target: object, facade: WatchedProxyFacade);
|
|
72
|
+
get trackingConfig(): import("./common").ClassTrackingConfiguration | undefined;
|
|
73
|
+
fireAfterRead(read: RecordedReadOnProxiedObject): void;
|
|
74
|
+
getFacade(): WatchedProxyFacade;
|
|
75
|
+
get(fake_target: object, key: string | symbol, receiver: any): any;
|
|
76
|
+
rawRead(key: ObjKey): unknown;
|
|
77
|
+
protected rawChange(key: string | symbol, newUnproxiedValue: any): void;
|
|
78
|
+
deleteProperty(target: object, key: string | symbol): boolean;
|
|
79
|
+
ownKeys(target: object): ArrayLike<string | symbol>;
|
|
80
|
+
isForArray(): boolean;
|
|
81
|
+
isForSet(): boolean;
|
|
82
|
+
isForMap(): boolean;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=watchedProxyFacade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchedProxyFacade.d.ts","sourceRoot":"","sources":["../../watchedProxyFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAE9D,OAAO,EAEH,iBAAiB,EACjB,cAAc,EACW,SAAS,EAElC,2BAA2B,EAC3B,MAAM,EACN,YAAY,EACZ,2BAA2B,EAE9B,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC;AAGhF;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,KAAK,EAAE,OAAO,CAAC;gBAEH,KAAK,EAAE,OAAO;IAK1B,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,aAAa,UAAQ;IAIzD,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI;IAGnC,MAAM,CAAC,KAAK,EAAE,YAAY;CAO7B;AAED,qBAAa,oBAAqB,SAAQ,8BAA8B;IACpE,GAAG,EAAG,MAAM,CAAC;IACb,KAAK,EAAG,OAAO,CAAC;gBAGJ,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAMvC,IAAI,SAAS,YAGZ;IAED,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAU3C,MAAM,CAAC,KAAK,EAAE,YAAY;CAO7B;AAED,qBAAa,mBAAoB,SAAQ,8BAA8B;IACnE,KAAK,EAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;gBAEvB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;IAK/C,IAAI,SAAS,YAEZ;IAED,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAU3C,MAAM,CAAC,KAAK,EAAE,YAAY;CAO7B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,8BAA8B;IACtE,IAAI,SAAS,YAEZ;IAED,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IAM3C,MAAM,CAAC,KAAK,EAAE,YAAY;CAG7B;AAGD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,mBAAmB,CAAC;IAGpE,qBAAqB,UAAS;IAI9B;;;OAGG;IACH,mBAAmB,yBAA+B;IAGlD,WAAW,CAAC,QAAQ,EAAE,iBAAiB;IAIvC,YAAY,CAAC,QAAQ,EAAE,iBAAiB;;IASxC;;;;;OAKG;IACH,sBAAsB,CAAC,CAAC,SAAU,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAG,cAAc;IAItG;;;;;OAKG;IACH,uBAAuB,CAAC,CAAC,SAAU,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAG,cAAc;IAIvG,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,mBAAmB;CAG3E;AAED,qBAAa,mBAAoB,SAAQ,kBAAkB,CAAC,kBAAkB,CAAE,YAAY,2BAA2B;gBAEvG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB;IAItD,IAAI,cAAc,8DAEjB;IAED,aAAa,CAAC,IAAI,EAAE,2BAA2B;IAO/C,SAAS;IAIT,GAAG,CAAE,WAAW,EAAC,MAAM,EAAE,GAAG,EAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAC,GAAG;IAuF1D,OAAO,CAAC,GAAG,EAAE,MAAM;IAanB,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,iBAAiB,EAAE,GAAG;IAqBhE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAY7D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAQnD,UAAU;IAIV,QAAQ;IAIR,QAAQ;CAGX"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { FacadeProxyHandler, ProxyFacade } from "./proxyFacade";
|
|
2
|
+
import { throwError } from "./Util";
|
|
3
|
+
import { checkEsRuntimeBehaviour, getPropertyDescriptor, RecordedRead, runChangeOperation, UnspecificObjectChange, } from "./common";
|
|
4
|
+
import { getChangeHooksForObject, changeHooksForObject } from "./objectChangeTracking";
|
|
5
|
+
import _ from "underscore";
|
|
6
|
+
import { getTrackingConfigFor } from "./class-trackers/index";
|
|
7
|
+
import { RecordedReadOnProxiedObjectExt } from "./RecordedReadOnProxiedObjectExt";
|
|
8
|
+
/**
|
|
9
|
+
* Access a single value (=variable or return value from a function)
|
|
10
|
+
* This read is can only be constructed manually (not through a WatchedProxyFacade / WatchedProxyHandler
|
|
11
|
+
*/
|
|
12
|
+
export class RecordedValueRead extends RecordedRead {
|
|
13
|
+
constructor(value) {
|
|
14
|
+
super();
|
|
15
|
+
this.value = value;
|
|
16
|
+
}
|
|
17
|
+
get isChanged() {
|
|
18
|
+
throw new Error("Cannot check if simple value (not on object) has changed.");
|
|
19
|
+
}
|
|
20
|
+
onAfterChange(listener, trackOriginal = false) {
|
|
21
|
+
throw new Error("Cannot listen for changes on simple value (not on object)");
|
|
22
|
+
}
|
|
23
|
+
offAfterChange(listener) {
|
|
24
|
+
}
|
|
25
|
+
equals(other) {
|
|
26
|
+
if (!(other instanceof RecordedValueRead)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return this.value === other.value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export class RecordedPropertyRead extends RecordedReadOnProxiedObjectExt {
|
|
33
|
+
constructor(key, value) {
|
|
34
|
+
super();
|
|
35
|
+
this.key = key;
|
|
36
|
+
this.value = value;
|
|
37
|
+
}
|
|
38
|
+
get isChanged() {
|
|
39
|
+
//@ts-ignore
|
|
40
|
+
return this.obj[this.key] !== this.value;
|
|
41
|
+
}
|
|
42
|
+
getAffectingChangeHooks(target) {
|
|
43
|
+
const result = [
|
|
44
|
+
getChangeHooksForObject(target).changeSpecificProperty.get(this.key)
|
|
45
|
+
];
|
|
46
|
+
if (Array.isArray(this.obj)) {
|
|
47
|
+
result.push(getChangeHooksForObject(target).unspecificChange);
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
equals(other) {
|
|
52
|
+
if (!(other instanceof RecordedPropertyRead)) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return this.proxyHandler === other.proxyHandler && this.obj === other.obj && this.key === other.key && this.value === other.value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export class RecordedOwnKeysRead extends RecordedReadOnProxiedObjectExt {
|
|
59
|
+
constructor(value) {
|
|
60
|
+
super();
|
|
61
|
+
this.value = value;
|
|
62
|
+
}
|
|
63
|
+
get isChanged() {
|
|
64
|
+
return !_.isEqual(Reflect.ownKeys(this.obj), this.value);
|
|
65
|
+
}
|
|
66
|
+
getAffectingChangeHooks(target) {
|
|
67
|
+
const result = [
|
|
68
|
+
getChangeHooksForObject(target).changeOwnKeys
|
|
69
|
+
];
|
|
70
|
+
if (Array.isArray(this.obj)) {
|
|
71
|
+
result.push(getChangeHooksForObject(target).unspecificChange);
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
equals(other) {
|
|
76
|
+
if (!(other instanceof RecordedOwnKeysRead)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return this.proxyHandler === other.proxyHandler && this.obj === other.obj && _.isEqual(this.value, other.value);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Fired when a method was called that is not implemented in the supervisor. May be from a future js version
|
|
84
|
+
*/
|
|
85
|
+
export class RecordedUnspecificRead extends RecordedReadOnProxiedObjectExt {
|
|
86
|
+
get isChanged() {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
getAffectingChangeHooks(target) {
|
|
90
|
+
return [
|
|
91
|
+
getChangeHooksForObject(target).anyChange
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
equals(other) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Use cases:
|
|
100
|
+
* - record read + watch recorded for modifications. For re-render trigger
|
|
101
|
+
* - record read and make several snapshots (when load is called) and compare exactly those reads
|
|
102
|
+
*/
|
|
103
|
+
export class WatchedProxyFacade extends ProxyFacade {
|
|
104
|
+
onAfterRead(listener) {
|
|
105
|
+
this._afterReadListeners.add(listener);
|
|
106
|
+
}
|
|
107
|
+
offAfterRead(listener) {
|
|
108
|
+
this._afterReadListeners.delete(listener);
|
|
109
|
+
}
|
|
110
|
+
constructor() {
|
|
111
|
+
super();
|
|
112
|
+
// ** Configuration**
|
|
113
|
+
this.trackReadsOnPrototype = false;
|
|
114
|
+
// *** State: ****
|
|
115
|
+
/**
|
|
116
|
+
* Called after a read has been made to any object inside this facade
|
|
117
|
+
* @protected
|
|
118
|
+
*/
|
|
119
|
+
this._afterReadListeners = new Set();
|
|
120
|
+
checkEsRuntimeBehaviour();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Watches for writes on a specified property
|
|
124
|
+
* @param obj
|
|
125
|
+
* @param key Not restricted here (for the tests), but it must not be number !
|
|
126
|
+
* @param listener
|
|
127
|
+
*/
|
|
128
|
+
onAfterWriteOnProperty(obj, key, listener) {
|
|
129
|
+
getChangeHooksForObject(obj).changeSpecificProperty.get(key).afterListeners.add(listener);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Watches for writes on a specified property
|
|
133
|
+
* @param obj
|
|
134
|
+
* @param key Not restricted here (for the tests), but it must not be number !
|
|
135
|
+
* @param listener
|
|
136
|
+
*/
|
|
137
|
+
offAfterWriteOnProperty(obj, key, listener) {
|
|
138
|
+
var _a;
|
|
139
|
+
(_a = changeHooksForObject.get(obj)) === null || _a === void 0 ? void 0 : _a.changeSpecificProperty.get(key).afterListeners.delete(listener);
|
|
140
|
+
}
|
|
141
|
+
crateHandler(target, facade) {
|
|
142
|
+
return new WatchedProxyHandler(target, facade);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export class WatchedProxyHandler extends FacadeProxyHandler {
|
|
146
|
+
constructor(target, facade) {
|
|
147
|
+
super(target, facade);
|
|
148
|
+
}
|
|
149
|
+
get trackingConfig() {
|
|
150
|
+
return getTrackingConfigFor(this.target); // TODO: cache (performance)
|
|
151
|
+
}
|
|
152
|
+
fireAfterRead(read) {
|
|
153
|
+
read.proxyHandler = this;
|
|
154
|
+
read.obj = this.target;
|
|
155
|
+
this.facade._afterReadListeners.forEach(l => l(read)); // Inform listeners
|
|
156
|
+
}
|
|
157
|
+
getFacade() {
|
|
158
|
+
return this.facade;
|
|
159
|
+
}
|
|
160
|
+
get(fake_target, key, receiver) {
|
|
161
|
+
var _a;
|
|
162
|
+
const target = this.target;
|
|
163
|
+
const proxy = this.proxy;
|
|
164
|
+
const thisHandler = this;
|
|
165
|
+
const receiverMustBeNonProxied = ((_a = this.trackingConfig) === null || _a === void 0 ? void 0 : _a.receiverMustBeNonProxied) === true;
|
|
166
|
+
if (key === "_watchedProxyHandler") { // TODO: use symbol for that (performance)
|
|
167
|
+
return this;
|
|
168
|
+
}
|
|
169
|
+
if (key === "_target") { // TODO: use symbol for that (performance)
|
|
170
|
+
return this.target;
|
|
171
|
+
}
|
|
172
|
+
// Check for and use supervisor class:
|
|
173
|
+
if (this.trackingConfig !== undefined) {
|
|
174
|
+
for (const TrackerClass of this.trackingConfig.getTrackerClasses()) {
|
|
175
|
+
let propOnSupervisor = Object.getOwnPropertyDescriptor(TrackerClass.prototype, key);
|
|
176
|
+
if (propOnSupervisor !== undefined) { // Supervisor class is responsible for the property (or method) ?
|
|
177
|
+
//@ts-ignore
|
|
178
|
+
if (propOnSupervisor.get) { // Prop is a getter?
|
|
179
|
+
return this.facade.getProxyFor(propOnSupervisor.get.apply(this.proxy));
|
|
180
|
+
}
|
|
181
|
+
if (propOnSupervisor.set) { // Prop is a setter ?
|
|
182
|
+
throw new Error("setters not yet implemented");
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
typeof propOnSupervisor.value === "function" || throwError(`Accessing supervisor's plain property: ${String(key)}`); // validity check
|
|
186
|
+
const supervisorMethod = propOnSupervisor.value;
|
|
187
|
+
return supervisorMethod;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// When arriving here, the field is not **directly** in one of the tracker classes
|
|
192
|
+
//@ts-ignore
|
|
193
|
+
origMethod = this.target[key];
|
|
194
|
+
if (this.trackingConfig.knownHighLevelMethods.has(key)) {
|
|
195
|
+
return trapHighLevelReaderWriterMethod;
|
|
196
|
+
}
|
|
197
|
+
if (typeof origMethod === "function" && !(key in Object.prototype)) { // Read+write method that was not handled directly by supervisor class?
|
|
198
|
+
if (this.trackingConfig.readOnlyMethods.has(key)) {
|
|
199
|
+
return trapForGenericReaderMethod;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
return trapForGenericReaderWriterMethod; // Assume the worst, that it is a writer method
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return super.get(fake_target, key, receiver);
|
|
207
|
+
var origMethod = undefined;
|
|
208
|
+
/**
|
|
209
|
+
* Fires a RecordedUnspecificRead
|
|
210
|
+
*/
|
|
211
|
+
function trapForGenericReaderMethod(...args) {
|
|
212
|
+
var _a, _b;
|
|
213
|
+
const callResult = origMethod.apply(receiverMustBeNonProxied ? target : this, args); // call original method:
|
|
214
|
+
if (((_a = thisHandler.trackingConfig) === null || _a === void 0 ? void 0 : _a.trackTreads) !== false) { // not explicitly disabled ?
|
|
215
|
+
thisHandler.fireAfterRead(new RecordedUnspecificRead());
|
|
216
|
+
}
|
|
217
|
+
return ((_b = thisHandler.trackingConfig) === null || _b === void 0 ? void 0 : _b.proxyUnhandledMethodResults) ? thisHandler.facade.getProxyFor(callResult) : callResult;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Fires a RecordedUnspecificRead and calls the unspecificChange listeners
|
|
221
|
+
* @param args
|
|
222
|
+
*/
|
|
223
|
+
function trapForGenericReaderWriterMethod(...args) {
|
|
224
|
+
return runChangeOperation(proxy, new UnspecificObjectChange(proxy), [getChangeHooksForObject(proxy).unspecificChange], () => {
|
|
225
|
+
var _a, _b;
|
|
226
|
+
const callResult = origMethod.apply(receiverMustBeNonProxied ? target : this, args); // call original method:
|
|
227
|
+
if (((_a = thisHandler.trackingConfig) === null || _a === void 0 ? void 0 : _a.trackTreads) !== false) { // not explicitly disabled ?
|
|
228
|
+
thisHandler.fireAfterRead(new RecordedUnspecificRead());
|
|
229
|
+
}
|
|
230
|
+
return ((_b = thisHandler.trackingConfig) === null || _b === void 0 ? void 0 : _b.proxyUnhandledMethodResults) ? thisHandler.facade.getProxyFor(callResult) : callResult;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Wraps it in runAndCallListenersOnce_after
|
|
235
|
+
* @param args
|
|
236
|
+
*/
|
|
237
|
+
function trapHighLevelReaderWriterMethod(...args) {
|
|
238
|
+
return runChangeOperation(proxy, undefined, [], () => {
|
|
239
|
+
return origMethod.apply(this, args); // call original method
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
rawRead(key) {
|
|
244
|
+
var _a;
|
|
245
|
+
const result = super.rawRead(key);
|
|
246
|
+
if (!this.facade.trackReadsOnPrototype) {
|
|
247
|
+
if (Object.getOwnPropertyDescriptor(this.target, key) === undefined && getPropertyDescriptor(this.target, key) !== undefined) { // Property is on prototype only ?
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (((_a = this.trackingConfig) === null || _a === void 0 ? void 0 : _a.trackTreads) !== false) { // not explicitly disabled ?
|
|
252
|
+
this.fireAfterRead(new RecordedPropertyRead(key, result)); // Inform listeners
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
rawChange(key, newUnproxiedValue) {
|
|
257
|
+
const changeHooksForThisObject = getChangeHooksForObject(this.proxy);
|
|
258
|
+
const hooksToServe = [];
|
|
259
|
+
if (this.isForArray()) {
|
|
260
|
+
hooksToServe.push(changeHooksForThisObject.unspecificChange);
|
|
261
|
+
}
|
|
262
|
+
hooksToServe.push(changeHooksForThisObject.changeSpecificProperty.get(key));
|
|
263
|
+
hooksToServe.push(changeHooksForThisObject.changeAnyProperty);
|
|
264
|
+
const isNewProperty = getPropertyDescriptor(this.target, key) === undefined;
|
|
265
|
+
if (isNewProperty) {
|
|
266
|
+
hooksToServe.push(changeHooksForThisObject.changeOwnKeys);
|
|
267
|
+
}
|
|
268
|
+
runChangeOperation(this.proxy, new UnspecificObjectChange(this.proxy), hooksToServe, () => {
|
|
269
|
+
super.rawChange(key, newUnproxiedValue);
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
deleteProperty(target, key) {
|
|
273
|
+
const doesExists = Object.getOwnPropertyDescriptor(this.target, key) !== undefined;
|
|
274
|
+
if (!doesExists) {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
return runChangeOperation(this.proxy, new UnspecificObjectChange(this.proxy), [getChangeHooksForObject(this.proxy).changeOwnKeys], () => {
|
|
278
|
+
this.set(target, key, undefined, this.proxy); // Set to undefined first, so property change listeners will get informed
|
|
279
|
+
return super.deleteProperty(target, key);
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
ownKeys(target) {
|
|
283
|
+
var _a;
|
|
284
|
+
const result = Reflect.ownKeys(this.target);
|
|
285
|
+
if (((_a = this.trackingConfig) === null || _a === void 0 ? void 0 : _a.trackTreads) !== false) { // not explicitly disabled ?
|
|
286
|
+
this.fireAfterRead(new RecordedOwnKeysRead(result));
|
|
287
|
+
}
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
isForArray() {
|
|
291
|
+
return Array.isArray(this.target);
|
|
292
|
+
}
|
|
293
|
+
isForSet() {
|
|
294
|
+
return this.target instanceof Set;
|
|
295
|
+
}
|
|
296
|
+
isForMap() {
|
|
297
|
+
return this.target instanceof Map;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=watchedProxyFacade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchedProxyFacade.js","sourceRoot":"","sources":["../../watchedProxyFacade.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { RecordedRead, RecordedReadOnProxiedObject, ClassTrackingConfiguration, dualUseTracker_callOrigMethodOnTarget, IteratorReturningProxiedValue, GetIteratorValueProxiedFn, DualUseTracker, ForWatchedProxyHandler } from "./common";
|
|
2
|
+
export { ProxyFacade, FacadeProxyHandler, invalidateObject, getGlobalOrig } from "./proxyFacade";
|
|
3
|
+
export { deleteProperty, changeTrackedOrigObjects, installChangeTracker } from "./origChangeTracking";
|
|
4
|
+
export { RecordedArrayValuesRead } from "./class-trackers/Array";
|
|
5
|
+
export { RecordedMap_has, RecordedMap_get, RecordedMapEntriesRead, RecordedMapKeysRead, RecordedMapValuesRead } from "./class-trackers/Map";
|
|
6
|
+
export { RecordedSet_has, RecordedSetValuesRead } from "./class-trackers/Set";
|
|
7
|
+
export { RecordedValueRead, RecordedUnspecificRead, RecordedPropertyRead, RecordedOwnKeysRead, WatchedProxyFacade, WatchedProxyHandler } from "./watchedProxyFacade";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,qCAAqC,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,cAAc,EAAE,sBAAsB,EAAC,MAAM,UAAU,CAAA;AACvO,OAAO,EAAC,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAC,cAAc,EAAE,wBAAwB,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAA;AACnG,OAAO,EAAC,uBAAuB,EAAC,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAC,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,qBAAqB,EAAC,MAAM,sBAAsB,CAAA;AACzI,OAAO,EAAC,eAAe,EAAE,qBAAqB,EAAC,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAC,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAC,mBAAmB,EAAE,kBAAkB,EAAG,mBAAmB,EAAC,MAAM,sBAAsB,CAAC"}
|
package/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WatchedProxyHandler = exports.WatchedProxyFacade = exports.RecordedOwnKeysRead = exports.RecordedPropertyRead = exports.RecordedUnspecificRead = exports.RecordedValueRead = exports.RecordedSetValuesRead = exports.RecordedSet_has = exports.RecordedMapValuesRead = exports.RecordedMapKeysRead = exports.RecordedMapEntriesRead = exports.RecordedMap_get = exports.RecordedMap_has = exports.RecordedArrayValuesRead = exports.installChangeTracker = exports.changeTrackedOrigObjects = exports.deleteProperty = exports.getGlobalOrig = exports.invalidateObject = exports.FacadeProxyHandler = exports.ProxyFacade = exports.dualUseTracker_callOrigMethodOnTarget = exports.ClassTrackingConfiguration = exports.RecordedReadOnProxiedObject = exports.RecordedRead = void 0;
|
|
4
|
+
var common_1 = require("./common");
|
|
5
|
+
Object.defineProperty(exports, "RecordedRead", { enumerable: true, get: function () { return common_1.RecordedRead; } });
|
|
6
|
+
Object.defineProperty(exports, "RecordedReadOnProxiedObject", { enumerable: true, get: function () { return common_1.RecordedReadOnProxiedObject; } });
|
|
7
|
+
Object.defineProperty(exports, "ClassTrackingConfiguration", { enumerable: true, get: function () { return common_1.ClassTrackingConfiguration; } });
|
|
8
|
+
Object.defineProperty(exports, "dualUseTracker_callOrigMethodOnTarget", { enumerable: true, get: function () { return common_1.dualUseTracker_callOrigMethodOnTarget; } });
|
|
9
|
+
var proxyFacade_1 = require("./proxyFacade");
|
|
10
|
+
Object.defineProperty(exports, "ProxyFacade", { enumerable: true, get: function () { return proxyFacade_1.ProxyFacade; } });
|
|
11
|
+
Object.defineProperty(exports, "FacadeProxyHandler", { enumerable: true, get: function () { return proxyFacade_1.FacadeProxyHandler; } });
|
|
12
|
+
Object.defineProperty(exports, "invalidateObject", { enumerable: true, get: function () { return proxyFacade_1.invalidateObject; } });
|
|
13
|
+
Object.defineProperty(exports, "getGlobalOrig", { enumerable: true, get: function () { return proxyFacade_1.getGlobalOrig; } });
|
|
14
|
+
var origChangeTracking_1 = require("./origChangeTracking");
|
|
15
|
+
Object.defineProperty(exports, "deleteProperty", { enumerable: true, get: function () { return origChangeTracking_1.deleteProperty; } });
|
|
16
|
+
Object.defineProperty(exports, "changeTrackedOrigObjects", { enumerable: true, get: function () { return origChangeTracking_1.changeTrackedOrigObjects; } });
|
|
17
|
+
Object.defineProperty(exports, "installChangeTracker", { enumerable: true, get: function () { return origChangeTracking_1.installChangeTracker; } });
|
|
18
|
+
var Array_1 = require("./class-trackers/Array");
|
|
19
|
+
Object.defineProperty(exports, "RecordedArrayValuesRead", { enumerable: true, get: function () { return Array_1.RecordedArrayValuesRead; } });
|
|
20
|
+
var Map_1 = require("./class-trackers/Map");
|
|
21
|
+
Object.defineProperty(exports, "RecordedMap_has", { enumerable: true, get: function () { return Map_1.RecordedMap_has; } });
|
|
22
|
+
Object.defineProperty(exports, "RecordedMap_get", { enumerable: true, get: function () { return Map_1.RecordedMap_get; } });
|
|
23
|
+
Object.defineProperty(exports, "RecordedMapEntriesRead", { enumerable: true, get: function () { return Map_1.RecordedMapEntriesRead; } });
|
|
24
|
+
Object.defineProperty(exports, "RecordedMapKeysRead", { enumerable: true, get: function () { return Map_1.RecordedMapKeysRead; } });
|
|
25
|
+
Object.defineProperty(exports, "RecordedMapValuesRead", { enumerable: true, get: function () { return Map_1.RecordedMapValuesRead; } });
|
|
26
|
+
var Set_1 = require("./class-trackers/Set");
|
|
27
|
+
Object.defineProperty(exports, "RecordedSet_has", { enumerable: true, get: function () { return Set_1.RecordedSet_has; } });
|
|
28
|
+
Object.defineProperty(exports, "RecordedSetValuesRead", { enumerable: true, get: function () { return Set_1.RecordedSetValuesRead; } });
|
|
29
|
+
var watchedProxyFacade_1 = require("./watchedProxyFacade");
|
|
30
|
+
Object.defineProperty(exports, "RecordedValueRead", { enumerable: true, get: function () { return watchedProxyFacade_1.RecordedValueRead; } });
|
|
31
|
+
Object.defineProperty(exports, "RecordedUnspecificRead", { enumerable: true, get: function () { return watchedProxyFacade_1.RecordedUnspecificRead; } });
|
|
32
|
+
Object.defineProperty(exports, "RecordedPropertyRead", { enumerable: true, get: function () { return watchedProxyFacade_1.RecordedPropertyRead; } });
|
|
33
|
+
Object.defineProperty(exports, "RecordedOwnKeysRead", { enumerable: true, get: function () { return watchedProxyFacade_1.RecordedOwnKeysRead; } });
|
|
34
|
+
Object.defineProperty(exports, "WatchedProxyFacade", { enumerable: true, get: function () { return watchedProxyFacade_1.WatchedProxyFacade; } });
|
|
35
|
+
Object.defineProperty(exports, "WatchedProxyHandler", { enumerable: true, get: function () { return watchedProxyFacade_1.WatchedProxyHandler; } });
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,mCAAuO;AAA/N,sGAAA,YAAY,OAAA;AAAE,qHAAA,2BAA2B,OAAA;AAAE,oHAAA,0BAA0B,OAAA;AAAE,+HAAA,qCAAqC,OAAA;AACpH,6CAA+F;AAAvF,0GAAA,WAAW,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAAE,4GAAA,aAAa,OAAA;AACxE,2DAAmG;AAA3F,oHAAA,cAAc,OAAA;AAAE,8HAAA,wBAAwB,OAAA;AAAE,0HAAA,oBAAoB,OAAA;AACtE,gDAA8D;AAAtD,gHAAA,uBAAuB,OAAA;AAC/B,4CAAyI;AAAjI,sGAAA,eAAe,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,6GAAA,sBAAsB,OAAA;AAAE,0GAAA,mBAAmB,OAAA;AAAE,4GAAA,qBAAqB,OAAA;AAC5G,4CAA2E;AAAnE,sGAAA,eAAe,OAAA;AAAE,4GAAA,qBAAqB,OAAA;AAC9C,2DAAmK;AAA3J,uHAAA,iBAAiB,OAAA;AAAE,4HAAA,sBAAsB,OAAA;AAAE,0HAAA,oBAAoB,OAAA;AAAC,yHAAA,mBAAmB,OAAA;AAAE,wHAAA,kBAAkB,OAAA;AAAG,yHAAA,mBAAmB,OAAA"}
|