* 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
47 lines
1.1 KiB
TypeScript
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);
|
|
},
|
|
});
|
|
}
|
|
}
|