1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-10 00:00:53 +00:00

Bit more work.

This commit is contained in:
SirStendec 2023-11-14 12:51:30 -05:00
parent b9d23accf0
commit 9de3b92019
4 changed files with 23 additions and 27 deletions

View file

@ -755,7 +755,7 @@ export default class Metadata extends Module {
} }
/** @internal */ /** @internal */
getAddonProxy(addon_id: string, addon: AddonInfo, module: GenericModule): GenericModule { getAddonProxy(addon_id: string, addon: AddonInfo, module: GenericModule) {
if ( ! addon_id ) if ( ! addon_id )
return this; return this;

View file

@ -4,7 +4,7 @@
// Settings System // 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 {deep_equals, has, debounce, deep_copy} from 'utilities/object';
import {parse as parse_path} from 'utilities/path-parser'; 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 { SettingsProfileMetadata, ContextData, ExportedFullDump, SettingsClearable, SettingsDefinition, SettingsProcessor, SettingsUiDefinition, SettingsValidator } from './types';
import type { FilterType } from '../utilities/filtering'; import type { FilterType } from '../utilities/filtering';
import { AdvancedSettingsProvider, IndexedDBProvider, LocalStorageProvider, Providers, type SettingsProvider } from './providers'; import { AdvancedSettingsProvider, IndexedDBProvider, LocalStorageProvider, Providers, type SettingsProvider } from './providers';
import type { AddonInfo } from '../utilities/types';
export {parse as parse_path} from 'utilities/path-parser'; 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; this.providers[key] = provider;
} }
const test = this.resolve('load_tracker');
// This cannot be modified at a future time, as providers NEED // This cannot be modified at a future time, as providers NEED
// to be ready very early in FFZ intitialization. Seal it. // to be ready very early in FFZ intitialization. Seal it.
Object.seal(this.providers); Object.seal(this.providers);
@ -1113,33 +1116,26 @@ export default class SettingsManager extends Module<'settings', SettingsEvents>
// Add-On Proxy // Add-On Proxy
// ======================================================================== // ========================================================================
getAddonProxy(addon_id: string) { getAddonProxy(addon_id: string, addon: AddonInfo, module: GenericModule) {
if ( ! addon_id ) if ( ! addon_id )
return this; return this;
const add = (key, definition) => { const overrides: Record<string, any> = {},
is_dev = DEBUG || addon?.dev;
overrides.add = <T,>(key: string, definition: SettingsDefinition<T>) => {
return this.add(key, definition, addon_id); return this.add(key, definition, addon_id);
} };
const addUI = (key, definition) => { overrides.addUI = <T,>(key: string, definition: SettingsUiDefinition<T>) => {
return this.addUI(key, definition, addon_id); 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 this.addClearable(key, definition, addon_id);
} }
return new Proxy(this, { return buildAddonProxy(module, this, 'settings', overrides);
get(obj, prop) {
if ( prop === 'add' )
return add;
if ( prop === 'addUI' )
return addUI;
if ( prop === 'addClearable' )
return addClearable;
return Reflect.get(...arguments);
}
});
} }
// ======================================================================== // ========================================================================

View file

@ -8,7 +8,7 @@
import EventEmitter, { EventKey, EventListener, EventMap, NamespacedEventArgs, NamespacedEventKey, NamespacedEvents } from 'utilities/events'; import EventEmitter, { EventKey, EventListener, EventMap, NamespacedEventArgs, NamespacedEventKey, NamespacedEvents } from 'utilities/events';
import {has} from 'utilities/object'; import {has} from 'utilities/object';
import type Logger from './logging'; 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'; import type { Addon } from './addon';
@ -805,12 +805,9 @@ export class Module<
} }
resolve< resolve<
TPath extends string, TPath extends ModuleKeys,
TModule extends Module = TReturn extends GenericModule = ModuleMap[TPath]
TPath extends keyof ModuleMap >(name: TPath): TReturn | null {
? ModuleMap[TPath]
: Module
>(name: TPath): TModule | null {
let module = this.__resolve(name); let module = this.__resolve(name);
if ( !(module instanceof Module) ) if ( !(module instanceof Module) )
return null; return null;
@ -818,7 +815,7 @@ export class Module<
if ( this.__processModule ) if ( this.__processModule )
module = this.__processModule(module); module = this.__processModule(module);
return module as TModule; return module as TReturn;
} }

View file

@ -179,3 +179,6 @@ export type ModuleMap = {
'translation_ui': TranslationUI; 'translation_ui': TranslationUI;
'vue': Vue; 'vue': Vue;
}; };
export type ModuleKeys = string & keyof ModuleMap;