@studiometa/js-toolkit
Version:
A set of useful little bits of JavaScript to boost your project! 🚀
81 lines (80 loc) • 2.23 kB
TypeScript
import type { Options as DeepmergeOptions } from 'deepmerge';
import { AbstractManager } from './AbstractManager.js';
import type { Base } from '../index.js';
export type OptionType = StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor;
type ArrayOption = {
type: ArrayConstructor;
default?: (instance: Base) => unknown[];
merge?: boolean | DeepmergeOptions;
};
type ObjectOption = {
type: ObjectConstructor;
default?: (instance: Base) => unknown;
merge?: boolean | DeepmergeOptions;
};
type StringOption = {
type: StringConstructor;
default?: string | ((instance: Base) => string);
};
type NumberOption = {
type: NumberConstructor;
default?: number | ((instance: Base) => number);
};
type BooleanOption = {
type: BooleanConstructor;
default?: boolean | ((instance: Base) => boolean);
};
export type OptionObject = ArrayOption | ObjectOption | StringOption | NumberOption | BooleanOption;
export type OptionsSchema = {
[name: string]: OptionType | OptionObject;
};
export type OptionsInterface = {
[optionName: string]: unknown;
};
/**
* Get a property name.
*/
export declare const __getPropertyName: (name: string, prefix?: unknown, optionAttribute?: unknown) => string;
/**
* Class options to manage options as data attributes on an HTML element.
*
* @todo Use `MutationObserver` to update values? Might be more performant.
*/
export declare class OptionsManager<T> extends AbstractManager<T & {
name: string;
debug: boolean;
log: boolean;
}> {
/**
* An object to store Array and Object values for reference.
*
* @private
*/
__values: {};
/**
* Default props.
*/
__props: T & {
name: string;
debug: boolean;
log: boolean;
};
/**
* Class constructor.
*/
constructor(base: Base);
/**
* Get an option value.
*/
get(name: string, config: OptionObject): any;
/**
* Set an option value.
*/
set(name: string, value: unknown, config: OptionObject): void;
/**
* Register an option.
* @private
*/
__register(name: string, config: OptionObject): void;
}
export {};