From 9de3b920198ded47f9947161dc78ca7aab045057 Mon Sep 17 00:00:00 2001 From: SirStendec Date: Tue, 14 Nov 2023 12:51:30 -0500 Subject: [PATCH] Bit more work. --- src/modules/metadata.tsx | 2 +- src/settings/index.ts | 32 ++++++++++++++------------------ src/utilities/module.ts | 13 +++++-------- src/utilities/types.ts | 3 +++ 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/modules/metadata.tsx b/src/modules/metadata.tsx index 55b487af..6ae6da3a 100644 --- a/src/modules/metadata.tsx +++ b/src/modules/metadata.tsx @@ -755,7 +755,7 @@ export default class Metadata extends Module { } /** @internal */ - getAddonProxy(addon_id: string, addon: AddonInfo, module: GenericModule): GenericModule { + getAddonProxy(addon_id: string, addon: AddonInfo, module: GenericModule) { if ( ! addon_id ) return this; diff --git a/src/settings/index.ts b/src/settings/index.ts index 08172b4b..39c71082 100644 --- a/src/settings/index.ts +++ b/src/settings/index.ts @@ -4,7 +4,7 @@ // Settings System // ============================================================================ -import Module, { GenericModule } from 'utilities/module'; +import Module, { GenericModule, buildAddonProxy } from 'utilities/module'; import {deep_equals, has, debounce, deep_copy} from 'utilities/object'; import {parse as parse_path} from 'utilities/path-parser'; @@ -19,6 +19,7 @@ import * as CLEARABLES from './clearables'; import type { SettingsProfileMetadata, ContextData, ExportedFullDump, SettingsClearable, SettingsDefinition, SettingsProcessor, SettingsUiDefinition, SettingsValidator } from './types'; import type { FilterType } from '../utilities/filtering'; import { AdvancedSettingsProvider, IndexedDBProvider, LocalStorageProvider, Providers, type SettingsProvider } from './providers'; +import type { AddonInfo } from '../utilities/types'; export {parse as parse_path} from 'utilities/path-parser'; @@ -122,6 +123,8 @@ export default class SettingsManager extends Module<'settings', SettingsEvents> this.providers[key] = provider; } + const test = this.resolve('load_tracker'); + // This cannot be modified at a future time, as providers NEED // to be ready very early in FFZ intitialization. Seal it. Object.seal(this.providers); @@ -1113,33 +1116,26 @@ export default class SettingsManager extends Module<'settings', SettingsEvents> // Add-On Proxy // ======================================================================== - getAddonProxy(addon_id: string) { + getAddonProxy(addon_id: string, addon: AddonInfo, module: GenericModule) { if ( ! addon_id ) return this; - const add = (key, definition) => { + const overrides: Record = {}, + is_dev = DEBUG || addon?.dev; + + overrides.add = (key: string, definition: SettingsDefinition) => { return this.add(key, definition, addon_id); - } + }; - const addUI = (key, definition) => { + overrides.addUI = (key: string, definition: SettingsUiDefinition) => { return this.addUI(key, definition, addon_id); - } + }; - const addClearable = (key, definition) => { + overrides.addClearable = (key: string, definition: SettingsClearable) => { return this.addClearable(key, definition, addon_id); } - return new Proxy(this, { - get(obj, prop) { - if ( prop === 'add' ) - return add; - if ( prop === 'addUI' ) - return addUI; - if ( prop === 'addClearable' ) - return addClearable; - return Reflect.get(...arguments); - } - }); + return buildAddonProxy(module, this, 'settings', overrides); } // ======================================================================== diff --git a/src/utilities/module.ts b/src/utilities/module.ts index 9efa7a1f..3a14dadf 100644 --- a/src/utilities/module.ts +++ b/src/utilities/module.ts @@ -8,7 +8,7 @@ import EventEmitter, { EventKey, EventListener, EventMap, NamespacedEventArgs, NamespacedEventKey, NamespacedEvents } from 'utilities/events'; import {has} from 'utilities/object'; import type Logger from './logging'; -import type { AddonInfo, KnownEvents, ModuleMap, OptionalPromise } from './types'; +import type { AddonInfo, KnownEvents, ModuleKeys, ModuleMap, ModuleMap, ModuleMap, ModuleMap, OptionalPromise } from './types'; import type { Addon } from './addon'; @@ -805,12 +805,9 @@ export class Module< } resolve< - TPath extends string, - TModule extends Module = - TPath extends keyof ModuleMap - ? ModuleMap[TPath] - : Module - >(name: TPath): TModule | null { + TPath extends ModuleKeys, + TReturn extends GenericModule = ModuleMap[TPath] + >(name: TPath): TReturn | null { let module = this.__resolve(name); if ( !(module instanceof Module) ) return null; @@ -818,7 +815,7 @@ export class Module< if ( this.__processModule ) module = this.__processModule(module); - return module as TModule; + return module as TReturn; } diff --git a/src/utilities/types.ts b/src/utilities/types.ts index 2c092549..f4f25a6d 100644 --- a/src/utilities/types.ts +++ b/src/utilities/types.ts @@ -179,3 +179,6 @@ export type ModuleMap = { 'translation_ui': TranslationUI; 'vue': Vue; }; + + +export type ModuleKeys = string & keyof ModuleMap;