| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.ApiProxy = void 0;const const_js_1 = require("./const.js");const time_js_1 = require("./time.js");class ApiProxy {    constructor(plugin, hook) {        this.target = null;        this.targetQueue = [];        this.onQueue = [];        this.plugin = plugin;        this.hook = hook;        const defaultSettings = {};        if (plugin.settings) {            for (const id in plugin.settings) {                const item = plugin.settings[id];                defaultSettings[id] = item.defaultValue;            }        }        const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;        let currentSettings = Object.assign({}, defaultSettings);        try {            const raw = localStorage.getItem(localSettingsSaveId);            const data = JSON.parse(raw);            Object.assign(currentSettings, data);        }        catch (e) {            // noop        }        this.fallbacks = {            getSettings() {                return currentSettings;            },            setSettings(value) {                try {                    localStorage.setItem(localSettingsSaveId, JSON.stringify(value));                }                catch (e) {                    // noop                }                currentSettings = value;            },            now() {                return (0, time_js_1.now)();            },        };        if (hook) {            hook.on(const_js_1.HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {                if (pluginId === this.plugin.id) {                    this.fallbacks.setSettings(value);                }            });        }        this.proxiedOn = new Proxy({}, {            get: (_target, prop) => {                if (this.target) {                    return this.target.on[prop];                }                else {                    return (...args) => {                        this.onQueue.push({                            method: prop,                            args,                        });                    };                }            },        });        this.proxiedTarget = new Proxy({}, {            get: (_target, prop) => {                if (this.target) {                    return this.target[prop];                }                else if (prop === 'on') {                    return this.proxiedOn;                }                else if (Object.keys(this.fallbacks).includes(prop)) {                    return (...args) => {                        this.targetQueue.push({                            method: prop,                            args,                            resolve: () => { },                        });                        return this.fallbacks[prop](...args);                    };                }                else {                    return (...args) => {                        return new Promise(resolve => {                            this.targetQueue.push({                                method: prop,                                args,                                resolve,                            });                        });                    };                }            },        });    }    async setRealTarget(target) {        this.target = target;        for (const item of this.onQueue) {            this.target.on[item.method](...item.args);        }        for (const item of this.targetQueue) {            item.resolve(await this.target[item.method](...item.args));        }    }}exports.ApiProxy = ApiProxy;
 |