Files
plainleaf/lib/box_proxy.ts
T
Zef HemelandGitHub dc2987a3f9 Sync engine rearchitecture (#1516)
* Don't require auth for .ping
* Finally introducing loggers
* Remove file list caching from disk_space_primitives
I don't think this is required anymore with the sync model
* Simplification of space primitives and more tests
* More reliable online status
* Add .zed settings
* Remove selfUpdate argument from `writeFile` no longer used
- Add `sync` config schema and document sync options
- Move sync config handling to client boot logic
- Move BootConfig type to ui_types.ts
- Remove sync env vars from server
- Update documentation for sync and architecture
* Improve sync logic and proxy routing for full sync state
* Add BoxProxy for late-bound client and improve Lua boot
- Add isMobile syscall for editor
* Add concurrency to sync process and log indexing duration
* Better service worker lifecycle management
2025-09-12 14:43:57 +02:00

47 lines
1.1 KiB
TypeScript

/**
* A proxy class that enables swapping out the target object later on
*/
export class BoxProxy {
/**
* Initializes a new instance of the BoxProxy class.
* @param target The initial target object
*/
constructor(private target: any) {
}
/**
* Swaps out the target object :magic:
*/
setTarget(target: any) {
this.target = target;
}
/**
* Builds a proxy object that forwards everything we care about to the target object
*/
buildProxy() {
return new Proxy(this, {
get: (_obj: any, prop) => {
return this.target[prop];
},
set: (_obj: any, prop, value) => {
this.target[prop] = value;
return true;
},
has: (_obj: any, prop) => {
return prop in this.target;
},
deleteProperty: (_obj: any, prop) => {
delete this.target[prop];
return true;
},
ownKeys: (_obj: any) => {
return Object.keys(this.target);
},
getOwnPropertyDescriptor: (_obj: any, prop) => {
return Object.getOwnPropertyDescriptor(this.target, prop);
},
});
}
}