///
declare namespace Leaf {
interface DynamicValueConfig {
type: "raw" | "value";
content: string;
value?: string;
reverse?: boolean;
}
interface DynamicStringConfig {
templates: DynamicValueConfig[];
}
interface DynamicPropertyConfig extends DynamicStringConfig {
name: string;
}
type DOMEventInfo = {
name: string;
bubble: boolean;
target?: string[];
};
type ElementConfigProperties = {
[index: string]: DynamicPropertyConfig | string;
};
type DynamicProperties = {
[index: string]: DynamicPropertyConfig;
};
type WidgetEventHandler = {
(e: Event): void;
};
type WidgetTemplate = string | HTMLElement | {
(): string | HTMLElement;
};
interface WidgetEnhancedEvent extends Event {
capture?: {
(): void;
};
bubblingTarget: HTMLElement;
}
type Slot = {
name: string;
el: Element | Text;
};
type Callback = (error?: E, option?: T) => void;
}
declare namespace Leaf {
class Logger {
static debug(...args: any[]): void;
static error(...args: any[]): void;
static log(...args: any[]): void;
static line(str: string): void;
static lineEnd(): void;
static trace(): void;
}
}
declare namespace Leaf {
interface PropertyDefination {
get?: (cache: PropertyCache) => T;
set?: (value: T, cache: PropertyCache) => void;
value?: T;
}
interface PropertyCache {
[index: string]: any;
value?: T;
}
class Property {
static define(who: any, name: string, def: PropertyDefination): T;
static withProps(who: any): WithProperty;
}
class WithProperty {
who: any;
constructor(who: any);
define(name: string, def: PropertyDefination): this;
}
}
declare namespace Leaf {
class Serializer {
typeKey: string;
dataKey: string;
typeMap: {
[type: string]: Serializer.ConvertConfig;
};
private tokenize;
private detokenize;
serialize(data: any): string;
deserialize(data: any): any;
register(type: string, config: Serializer.ConvertConfig): void;
static defaultSerializer: Serializer;
static getDefault(): Serializer;
}
namespace Serializer {
type Constructor = new (...args: any[]) => T;
interface ConvertConfig {
Cons: Constructor;
fromType: (T: any) => V;
toType: (V: any) => T;
}
}
}
declare namespace Leaf {
class Util {
constructor();
static clone(obj: T): T;
static capitalize(str: string): string;
static uncapitalize(str: string): string;
static camelToSlug(str: string): string;
static slugToCamel(str: string): string;
static deepEqual(a: any, b: any): boolean;
static dictDiff(d1: {
[index: string]: T;
}, d2: {
[index: string]: T;
}, identical?: (a: T, b: T) => boolean): {
left: string[];
right: string[];
interact: string[];
intersect?: string[];
};
static arrayDiffTyped(arr1: TLeft[], arr2: TRight[], identical?: (a: TLeft, b: TRight) => boolean): {
left: TLeft[];
right: TRight[];
leftShare: TLeft[];
rightShare: TRight[];
};
static arrayDiff(arr1?: T[], arr2?: T[], identical?: (a: T, b: T) => boolean): {
left: T[];
right: T[];
interact: T[];
intersect: T[];
};
static buildOption(defaultOption: T, option?: Partial): T;
static getBrowserInfo(): BrowserInfo;
static isMobile(): boolean;
static browser: BrowserInfo;
static isEmptyValue(v: any): boolean;
static getObjectValue(obj: any, path: string): any;
static reconstructObjectMap(map: any): {};
}
interface BrowserInfo {
name: string;
version: string;
mobile: boolean;
}
interface SharedCallbackFunction {
(...args: any[]): void;
push?: {
(fn: Function): void;
};
clear?: {
(): void;
};
callbacks?: Function[];
count?: number;
}
const SharedCallbacks: {
create(): SharedCallbackFunction;
};
}
declare namespace Leaf {
type Match = {
path: string;
type: "lte" | "gte" | "lt" | "gt" | "eq" | "reg" | "wildcard" | "in";
reference?: string;
value?: any;
optional?: boolean;
} & Tagged<"match">;
namespace Condition {
function empty(): Criteria;
function never(): CriteriaTemplate;
function realize(template: CriteriaTemplate, data: T | T[]): Criteria;
function and(...criterias: T[]): T;
function criteriaToTemplateByPath(cri: Criteria): CriteriaTemplate;
function criteriaToValue(cri: Criteria): any;
function or(criterias: Criteria[]): Criteria;
function build(cri: CriteriaTemplate, obj?: any): Criteria;
function test(condition: Criteria | Matches | Match, data: any): boolean;
function testCriteria(cri: Criteria, data: any): boolean;
function testMatches(matches: Matches, data: any): boolean;
function testMatch(match: Match, data: any): boolean;
function subInplace(criteria: Criteria | CriteriaTemplate, path: string): void;
}
class CriteriaBuilder {
tb: CriteriaTemplateBuilder;
sub(path: string): void;
path(path: string): this;
lt(value: number): this;
gt(value: number): this;
lte(value: number): this;
gte(value: number): this;
eq(value: number | string | boolean): this;
in(value: string[] | number[]): this;
reg(value: RegExp): this;
build(): Criteria;
}
class CriteriaTemplateBuilder {
currentPath: string;
currentConditions: Matches;
criteria: CriteriaTemplate;
currentOptional: boolean;
optional(): this;
getTemplate(): CriteriaTemplate;
private ensureCurrentConditions;
private createEmptyConditions;
private isEmptyMatches;
path(path: string): this;
gt(reference: string, value?: number): this;
lt(reference: string, value?: number): this;
lte(reference: string, value?: number): this;
gte(reference: string, value?: number): this;
eq(reference: string, value?: number | string | boolean): this;
in(reference: any, value?: string[] | number[]): this;
or(): void;
reg(reference: string, value?: RegExp): this;
wildcard(): void;
isSealed: boolean;
seal(): this;
private numericType;
build(obj: any): Criteria;
}
}
declare namespace Leaf {
type StringFunction = (name: string) => string;
function renderString(str: string, actions: {
[index: string]: string | StringFunction;
}): string;
function render(obj: T, actions: {
[index: string]: string | StringFunction;
}): T;
}
declare namespace Leaf {
type EventEmitterHandler = (data: T, ...args: any[]) => void;
interface EventHandlerInfo {
owner?: any;
once?: boolean;
handler: Function;
}
interface EventHandlers {
[index: string]: EventHandlerInfo[];
}
class EventEmitter {
private events;
readonly DECLARE: E;
constructor();
addEventListener(event: K, handler: (data: E[K], ...args: any[]) => void): this;
addListener: (event: K, handler: (data: E[K], ...args: any[]) => void) => this;
off: (event?: keyof E, handler?: (data: E[K], ...args: any[]) => void) => this;
removeAllListeners(): void;
on(event: keyof E, handler: (data: E[K], ...args: any[]) => void): this;
once(event: keyof E, handler: (data: E[K], ...args: any[]) => void): this;
listenByOnce(who: any, event: K, handler: (data: E[K], ...args: any[]) => void): this;
listenBy(who: any, event: K | K[], handler: (data: E[K], ...args: any[]) => void): this;
stopListenBy(who: any, event?: keyof E, handler?: (data: E[K], ...args: any[]) => void): this;
removeEventListener(event?: keyof E, handler?: (data: E[K], ...args: any[]) => void): this;
emit(event: K, ...values: E[K][]): this;
private getOrCreateEventHandlers;
}
}
declare namespace Leaf {
type TStateDefaultEnum = "void" | "panic" | "recursivePanic";
class States {
events: EventEmitter<{
[key: string]: any;
reset?: void;
state?: TStateEnum | "void" | "panic" | "recursivePanic";
}>;
state: TStateEnum | TStateDefaultEnum;
previousState: TStateEnum | TStateDefaultEnum;
private sole;
private soleEmitted;
private lastException;
private rescues;
protected data: any;
private feeds;
private isDebugging;
private clearHandler;
name: string;
panicErrorRecursive: Error;
panicError: Error;
panicState: TStateEnum | TStateDefaultEnum;
constructor();
reset(): void;
errorOrGoto(err: any, state: string, ...args: any[]): void;
setState(state: TStateEnum | TStateDefaultEnum, ...args: any[]): void;
private _stateFinish;
protected clearConsumers(): void;
private _setState;
error(err: Error): void;
protected atPanic(): void;
recover(recoverState?: TStateEnum | TStateDefaultEnum): {
error: Error;
state: TStateEnum | "void" | "panic" | "recursivePanic";
};
respawn(): void;
clear(handler?: {
(): void;
}): void;
private ensureFeed;
feed(name: keyof TSignalEnum, signal?: any): void;
consumeAll(name: keyof TSignalEnum): number;
hasFeed(name: keyof TSignalEnum): boolean;
consume(name: keyof TSignalEnum): boolean | any;
consumeWhenAvailableMergeToLast(name: K, callback: {
(signal: TSignalEnum[K]): void;
}): void;
isConsuming(name: keyof TSignalEnum): boolean;
consumeWhenAvailable(name: keyof TSignalEnum, callback: {
(signal: any): void;
}): void;
debug(option?: any): void;
private debugStateHandler;
setLogger(logger: (...infos: any[]) => void): void;
private _logger;
private _assertingStateSequence;
private _assertingStateCallback;
private _assertingStateIndex;
assertStateSequence(states: TStateEnum[], callback: (err: Error) => void): void;
private _endStateAssertion;
private _updateStateAssertion;
protected atRecursivePanic(): void;
private setImmediate;
}
}
declare namespace Leaf {
class ErrorDoc {
private errorNames;
private errors;
static create(): ErrorDoc;
static build(info: TErrors): {
[K in keyof TErrors]: CustomErrorConstructor;
};
define(name: string, base?: string | Error | Constructor, defaultProperty?: any): this;
generate(): TErrors;
}
type Constructor = {
new (...params: any[]): T;
};
function createError(name: string, Base?: Constructor, defaultProperty?: any): {
new (message: string, detail: any): {
message: string;
name: string;
detail: any;
via: Error;
toJSON: () => any;
stack?: string;
};
};
type Partial = {
[P in keyof T]?: T[P];
};
interface CustomErrorConstructor {
new (message?: string, detail?: Partial & {
via?: Error;
}): {
detail: TDetail;
} & Error & {
via: Error;
};
}
const Errors: ErrorsOf<{
Timeout: {};
Abort: {};
IOError: {};
NetworkError: {
raw?: string;
};
}>;
type ErrorsOf = {
[P in keyof T]?: CustomErrorConstructor;
};
}
declare namespace Leaf {
interface APICallback {
(error?: Error, result?: TResult): void;
}
interface APIFunction {
(option: TOption, callback: APICallback): void;
API?: APIDeclare;
mock: (option: TOption, error?: Error, result?: TResult) => APIFunction;
with(data: Partial): APIFunction;
transform(result: (option: TResult) => TModifiedResult): ({
(option: TOption, callback: APICallback): void;
});
}
interface APIOption {
method: string | "GET" | "POST" | "PUT" | "DELETE";
path: string;
timeout?: number;
headers?: any;
data?: any;
withCredentials?: boolean;
bodyType?: "json" | "query";
mock?: boolean;
}
class APIFactory {
option: {
root?: string;
prefix?: string;
suffix?: string;
defaultTimeout?: number;
withCredentials?: boolean;
headers?: any;
bodyType?: "json" | "query";
mock?: boolean;
errorMapper?: (err: Error) => Error;
serializer?: {
serialize: (data: any) => string;
deserialize: (data: string) => any;
};
};
lastResponse: string;
responseHandler: {
(response: string, callback: (error: Error, data: any) => void): void;
};
private _handleResponse;
constructor(option: {
root?: string;
prefix?: string;
suffix?: string;
defaultTimeout?: number;
withCredentials?: boolean;
headers?: any;
bodyType?: "json" | "query";
mock?: boolean;
errorMapper?: (err: Error) => Error;
serializer?: {
serialize: (data: any) => string;
deserialize: (data: string) => any;
};
});
createAPI(option: APIOption): APIDeclare;
createAPIFunction(option: APIOption): APIFunction;
errorMapper: (err: Error) => Error;
private solveResponse;
request(option: {
method?: string;
url: string;
query?: any;
withCredentials?: boolean;
headers?: any;
timeout?: number;
bodyType?: "json" | "query";
}, callback: {
(err: any, result: TResult): void;
}): XMLHttpRequest;
buildQueryString(query: any): string;
}
class APIDeclare {
private factory;
private option;
private mocks;
constructor(factory: APIFactory, option: APIOption);
mock(option: TOption, error?: Error, result?: TResult): this;
private _mock;
private decorateAPIOption;
getFunction(): APIFunction;
invoke(data: TOption, callback: APICallback): void;
}
}
declare namespace Leaf {
class History {
handlePopState(): void;
constructor();
private stack;
push(id: string, callback: Function): void;
remove(id: string): void;
activate(): void;
deactivate(): void;
}
}
declare namespace Leaf {
class DataSource {
readonly _name: string;
protected _fields: (keyof TAttribute)[];
events: EventEmitter<{
[key: string]: any;
change: Partial;
}>;
readonly fields: (keyof TAttribute)[];
id: string;
protected _data: TAttribute;
readonly data: TAttribute;
[index: string]: any;
constructor(_name: string, _fields?: (keyof TAttribute)[]);
protected define(name: keyof TAttribute, defaultValue?: any): void;
hasKey(key: string): boolean;
sets(obj: any): boolean;
set(key: keyof TAttribute, value: any, silent?: boolean): boolean;
get(key: keyof TAttribute): any;
toJSON(): any;
}
class Model extends DataSource {
}
class DataTree {
readonly source: DataSource;
constructor(source: DataSource);
getNode(path?: string): DataNode;
valueCanBeObject(v: any): boolean;
getValueByPath(path: string): any;
setValueByPath(path: string, v: any): boolean;
}
class DataNode {
readonly tree: DataTree;
readonly path: string;
constructor(tree: DataTree, path?: string);
getProxyOrValue(): any;
set(v: T): boolean;
get(): T;
toString(): string;
}
}
declare namespace Leaf {
class Namespace {
private Widgets;
include(W: any, name?: string): void;
getWidgetByName(name: string): WidgetConstructor;
createWidgetByName(name: string, props?: any): WidgetAny;
isTagWidgetName(name: string, who: WidgetAny): boolean;
clear(): void;
has(name: string): boolean;
}
}
declare namespace Leaf {
class ViewModel extends Model {
readonly _name: string;
protected _fields: (keyof TVMs)[];
private depChain;
constructor(_name: string, _fields?: (keyof TVMs)[]);
tree: DataTree;
set(key: keyof TVMs, value: any, silent?: boolean): boolean;
}
class DependencyChain {
events: EventEmitter<{
declare: {
src: string;
target: string;
};
revoke: {
src: string;
target: string;
};
}>;
extractFunctionDependency(fn: Function): string[];
maxDepth: number;
updateFunctionDependency(name: string, fn: Function): void;
validateDependency(target: string, src: string[], depth?: number): boolean;
dependencyMap: {
[index: string]: string[];
};
}
}
declare namespace Leaf {
interface WidgetElement extends HTMLElement {
widget: WidgetAny;
propertyConfigs: WidgetDynamicPropertyConfig[];
}
interface WidgetDynamicPropertyConfig {
master: WidgetAny;
rules: DynamicProperties;
}
abstract class WidgetCoreDesign {
protected widget: WidgetAny;
constructor(widget: WidgetAny);
subWidgetPlaceholder: {
[index: string]: {
holder: HTMLElement;
dynamics: DynamicProperties;
slots: Slot[];
};
};
slotsPlaceholder: {
[index: string]: {
el: HTMLElement;
name: string;
dynamics: DynamicProperties;
index: number;
};
};
slotIndexOffset: number;
abstract attachElement(el: WidgetElement, dynamics: DynamicProperties): any;
abstract detachElement(el: WidgetElement): any;
abstract attachText(text: Text, config: Leaf.DynamicStringConfig): any;
abstract detachText(text: Text): any;
abstract extractDynamicPropertyConfig(el: WidgetElement): DynamicProperties;
abstract extractDynamicStringConfig(content: string): Leaf.DynamicStringConfig;
abstract attachDynamicProperty(el: WidgetElement, dynamics: DynamicProperties): any;
abstract detachDynamicProperty(el: WidgetElement): any;
abstract getExistDynamicProperty(el: WidgetElement): DynamicProperties;
abstract syncDynamicProperties(el: WidgetElement): any;
abstract syncDynamicProperty(el: WidgetElement, name: string): any;
abstract syncDynamicText(text: Text, rule: Leaf.DynamicStringConfig): any;
abstract attachDynamicText(text: Text, rule: Leaf.DynamicStringConfig): any;
abstract detachDynamicText(text: Text): any;
abstract bindUI(node: WidgetElement, id: string): any;
abstract unbindUI(id: string): any;
abstract checkAndBindUI(el: WidgetElement): any;
abstract checkAndUnbindUI(el: WidgetElement): any;
protected abstract explain(config: DynamicValueConfig): any;
abstract defineSlot(name: string, el: Element, dynamics: DynamicProperties): any;
abstract fillSlots(slots: Slot[]): any;
abstract defineSubWidget(name: string, el: WidgetElement, dynamics: DynamicProperties, slots: Slot[]): any;
abstract setSubWidget(name: string, widget: any): any;
abstract mergeProps(from: HTMLElement, to: HTMLElement, props: string[]): any;
abstract defineList(name: string, el: HTMLElement): any;
abstract extractTemplates(node: HTMLElement): {
[index: string]: string;
};
abstract transferProperties(to: WidgetElement, dynamics: DynamicProperties): any;
}
abstract class WidgetInitializerDesign {
protected widget: WidgetAny;
constructor(widget: WidgetAny);
abstract initTemplate(template?: WidgetTemplate): any;
abstract traverseAndInitialize(node: WidgetElement | HTMLElement | Text): any;
abstract createElement(tagName: string, properties: ElementConfigProperties, children: WidgetElement[]): WidgetElement;
abstract createText(rule: Leaf.DynamicStringConfig): any;
}
class WidgetCore extends WidgetCoreDesign {
attachElement(el: WidgetElement, dynamics: DynamicProperties): WidgetElement;
detachElement(el: WidgetElement): void;
attachText(text: Text, config: Leaf.DynamicStringConfig): void;
detachText(text: Text): void;
extractDynamicPropertyConfig(el: WidgetElement): DynamicProperties;
getExistDynamicProperty(el: WidgetElement): DynamicProperties;
syncDynamicProperties(el: WidgetElement): void;
syncDynamicProperty(el: WidgetElement, propertyName: string): void;
syncDynamicText(text: Text, rule: Leaf.DynamicStringConfig): void;
explain(config: DynamicValueConfig): any;
checkAndUnbindUI(el: WidgetElement): void;
checkAndBindUI(el: WidgetElement, name?: string): void;
bindUI(node: WidgetElement, id: string): void;
unbindUI(id: string): void;
defineSubWidget(name: string, el: WidgetElement, dynamics: DynamicProperties, slots: Slot[]): void;
setSubWidget(name: string, widget: WidgetAny): void;
attachDynamicProperty(el: WidgetElement, dynamics?: DynamicProperties): void;
detachDynamicProperty(el: WidgetElement): void;
attachDynamicText(text: Text, rule: Leaf.DynamicStringConfig): void;
detachDynamicText(text: Text): void;
extractTemplates(node: HTMLElement): {};
defineSlot(name: string, el: Element, dynamics: DynamicProperties): void;
fillSlots(slots: Slot[]): void;
extractDynamicStringConfig(content: string): Leaf.DynamicStringConfig;
mergeProps(from: HTMLElement, to: HTMLElement, props: string[]): void;
transferProperties(to: WidgetElement, dynamics: DynamicProperties): void;
defineList(name: string, el: HTMLElement): void;
protected getPropsFromElement(el: HTMLElement): {};
protected getChildrenAsSlot(el: HTMLElement): Slot[];
protected getSlotHolder(name: string, index: number): {
el: HTMLElement;
name: string;
dynamics: DynamicProperties;
index: number;
};
}
class WidgetInitializer extends WidgetInitializerDesign {
initTemplate(template?: WidgetTemplate): any;
traverseAndInitialize(node: WidgetElement | Text): void;
createElement(tagName: string, properties: ElementConfigProperties, children: WidgetElement[]): WidgetElement;
createText(rule: Leaf.DynamicStringConfig): Text;
}
class WidgetDOMEventDelegator {
readonly widget: any;
constructor(widget: any);
private lazyHandlers;
private prepareUIDelegates;
private prepareUIDelegate;
private unbindLazyHandler;
private bindLazyHandler;
private provideLazyHandler;
clearUIDelegateOwner(id: string): void;
applyUIDelegateOwner(id: string): void;
private delegateTo;
}
class WidgetSlotBehavior {
readonly widget: Leaf.Widget;
constructor(widget: Leaf.Widget);
fill(...widgets: Leaf.Widget[]): any;
fill(widgets: T): any;
private fillSequentially;
private fillNamingly;
}
}
declare namespace Leaf {
class Widget {
template?: WidgetTemplate;
_VMFields: (keyof TVMs)[];
isWidget: boolean;
static namespace: Namespace;
static events: EventEmitter<{
create: Widget<{
[index: string]: HTMLElement;
}, {
[key: string]: any;
}, {}>;
}>;
namespace: Namespace;
static setTemplate(template: WidgetTemplate): void;
ListItemData: any;
VM: TVMs;
VMNest: TVMs;
ViewModel: ViewModel;
parent: WidgetAny;
events: EventEmitter;
UI: TUIs;
node: WidgetElement;
templates: {
[index: string]: string;
};
providingEvents: DOMEventInfo[];
interestingUnbubblingEvents: DOMEventInfo[];
interestingBubblingEvents: DOMEventInfo[];
readonly asSlot: Leaf.WidgetSlotBehavior;
private _asSlot;
readonly widgetName: string;
readonly core: WidgetCoreDesign;
readonly delegates: WidgetDOMEventDelegator;
readonly initializer: WidgetInitializerDesign;
toString(): string;
before(who: WidgetAny | HTMLElement): boolean;
after(who: WidgetAny | HTMLElement): boolean;
prependTo(who: WidgetAny | HTMLElement): boolean;
appendTo(who: WidgetAny | HTMLElement): boolean;
constructor(template?: WidgetTemplate, name?: string, _VMFields?: (keyof TVMs)[]);
static makeList(el: HTMLElement): any;
protected emitDOMEvent(name: string, bubble: boolean, props?: any): void;
protected emitWidgetEvent(name: string, value?: any): void;
protected include(W: any): void;
protected expose(name: string, remoteName?: string): void;
protected makeList(who: (keyof TUIs) | HTMLElement): any;
behave(handler: THandlers): void;
}
abstract class GeneratedWidget extends Widget {
private generator;
_VMFields: (keyof TVMs)[];
constructor(generator: Function, name: string, _VMFields?: (keyof TVMs)[]);
GeneratedConstructor: WidgetConstructor;
BindedWidgets: {
path: string;
name: string;
}[];
BindedLists: {
name: string;
type: "inline" | "reference" | "void" | string;
reference: string;
}[];
TestDatas: {
name: string;
content: string;
json: any;
}[];
InitialData: any;
initGeneratedTemplate(node: WidgetElement): void;
protected _e(tagName: string, properties: ElementConfigProperties, children: WidgetElement[]): WidgetElement;
protected _t(rule: Leaf.DynamicStringConfig): Text;
renderRecursive(data?: any, R?: any): void;
private resolveWidgetByPath;
}
interface StandaloneWidgetConstructor {
new (): WidgetAny;
}
interface WidgetConstructor {
new (el: HTMLElement): WidgetAny;
}
type WidgetAny = Widget;
}
declare namespace Leaf {
class List extends Widget {
[index: number]: TListItem;
ListItemConstructor: WidgetConstructor;
constructor(el: HTMLElement);
fill(datas: any[], Cons: WidgetConstructor): void;
events: Leaf.EventEmitter<{
"child/add": TListItem;
"child/change": TListItem;
"child/remove": TListItem;
}>;
private _length;
length: number;
forEach: (callbackFn: (item: TListItem, index?: number, array?: TListItem[]) => void) => void;
some: (callbackFn: (item: TListItem, index?: number, array?: TListItem[]) => boolean) => boolean;
every: (callbackFn: (item: TListItem, index?: number, array?: TListItem[]) => boolean) => boolean;
map: (callbackFn: (item: TListItem, index?: number, array?: TListItem[]) => any) => any[];
filter: (callbackFn: (item: TListItem, index?: number, array?: TListItem[]) => boolean) => TListItem[];
slice: (start?: number, end?: number) => TListItem[];
empty(): void;
indexOf(item: TListItem): number;
private check;
push(...items: TListItem[]): void;
pop(): TListItem;
unshift(item: TListItem): number;
shift(): TListItem;
splice(index: number, count?: number, ...toAdd: TListItem[]): TListItem[];
removeItem(item: TListItem): TListItem;
private attach;
private detach;
toArray(): TListItem[];
}
interface ListItem extends Widget {
}
}
declare namespace Leaf {
type RPCId = number;
const RPCErrors: ErrorsOf<{
APINotExists: any;
Timeout: any;
Conflict: any;
BrokenConnection: any;
Abort: any;
}>;
interface RPCCallback {
(error: Error, result: TResult): void;
}
interface RPCInvoke {
(option?: TOption, callback?: RPCCallback): void;
RPC?: RPCDeclare;
}
interface RPCOption {
name: string;
timeout?: number;
}
function RPCMethod(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
interface RPCMethodHandler {
(data: any, callback: {
(err?: Error, data?: any): void;
}): void;
}
class RPCComposer {
option: {
defaultTimeout?: number;
};
declares: any;
requestOffset: number;
methods: {
[index: string]: RPCMethodHandler;
};
remoteEvents: EventEmitter<{
"*": { [K in keyof E]: E[K]; };
} & { [P in keyof E]: E[P]; }>;
isOpen(): boolean;
protected connection: RPCConnection;
private responseHandlers;
customNormalize: {
(data: any): string;
};
customDenormalize: {
(data: string): any;
};
private allocateId;
install(obj?: any, decorator?: (fn: Function, name?: string) => Function): void;
constructor(option?: {
defaultTimeout?: number;
});
setConnection(con: RPCConnection): void;
events: EventEmitter<{
open: any;
close: any;
timeout: any;
response: {
method: string;
id: number;
error: Error;
value: any;
};
}>;
unsetConnection(): void;
revokeRPCMethod(name: string): void;
registerRPCMethod(name: string, handler: RPCMethodHandler): void;
createRPCDeclare(option: RPCOption): RPCDeclare;
createRPCInvokeInterface(option: RPCOption): RPCInvoke;
emitRemoteEvent(name: string, data?: any): void;
invoke(name: string, data: any, callback?: Function, option?: {
timeout?: number;
}): void;
protected serializer: Serializer;
protected serialize(data: any): string;
protected deserialize(content: string): any;
private send;
private handleMessage;
private handleInvoke;
private handleResponse;
private handleEvent;
private transformObject;
private normalize;
private denormalize;
private finishHandlerById;
private finishHandler;
}
class RPCDeclare {
private center;
private option;
constructor(center: RPCComposer, option: RPCOption);
getFunction(): RPCInvoke;
invoke(data?: TOption, callback?: RPCCallback): void;
}
type RPCBaseConnectionMessage = string;
interface RPCConnection {
events: EventEmitter<{
message: string;
close: null;
open: null;
}>;
describe?(): string;
isOpen(): boolean;
send(data: string): any;
close(): any;
}
abstract class RPCConnectionBase implements RPCConnection {
events: EventEmitter<{
message: string;
close: null;
open: null;
}>;
abstract send(data: string): void;
abstract close(): any;
abstract isOpen(): boolean;
}
enum RPCProtocolBlobType {
INVOKE = 1,
RESPONSE = 2,
EVENT = 3
}
interface RPCResponseHandler {
id: RPCId;
callback: Function;
timer: any;
finished: boolean;
method: string;
}
interface RPCProtocolBlob {
type: RPCProtocolBlobType;
}
interface RPCProtocolResponseBlob extends RPCProtocolBlob {
id: RPCId;
data?: any;
error?: any;
type: RPCProtocolBlobType;
}
interface RPCProtocolInvokeBlob extends RPCProtocolBlob {
id: RPCId;
method: string;
data: any;
type: RPCProtocolBlobType;
}
interface RPCProtocolEventBlob extends RPCProtocolBlob {
name: string;
data: any;
type: RPCProtocolBlobType;
}
class RPCBrowserWebSocketConnection extends RPCConnectionBase implements RPCConnection {
connection: WebSocket;
constructor(connection: WebSocket);
send(content: string): void;
isOpen(): boolean;
close(): void;
describe(): string;
}
}
declare namespace Leaf {
namespace CoreLogic {
function createDynamicValueConfigs(templateString: string): DynamicValueConfig[];
const MergablePropertyNames: string[];
function isPropertyMergable(name: string): boolean;
function mergeProperty(name: string, values: string[]): string;
const BubbleEvents: {
name: string;
bubble: boolean;
}[];
const UnbubbleEvents: {
name: string;
bubble: boolean;
target: string[];
}[];
const AllEvents: {
name: string;
bubble: boolean;
}[];
function explainDynamicString(model: DataTree, config: Leaf.DynamicStringConfig): string;
function explainDynamicValue(tree: DataTree, config: DynamicValueConfig): any;
function getPropertyRoot(str: string): string;
}
}
declare namespace Leaf {
namespace Key {
let cmd: number;
let a: number;
let b: number;
let c: number;
let d: number;
let e: number;
let f: number;
let g: number;
let h: number;
let i: number;
let j: number;
let k: number;
let l: number;
let m: number;
let n: number;
let o: number;
let p: number;
let q: number;
let r: number;
let s: number;
let t: number;
let u: number;
let v: number;
let w: number;
let x: number;
let y: number;
let z: number;
let space: number;
let shift: number;
let ctrl: number;
let alt: number;
let left: number;
let up: number;
let right: number;
let down: number;
let enter: number;
let backspace: number;
let escape: number;
let del: number;
let esc: number;
let pageup: number;
let pagedown: number;
let tab: number;
let home: number;
let end: number;
let quote: number;
let openBracket: number;
let closeBracket: number;
let backSlash: number;
let slash: number;
let equal: number;
let comma: number;
let period: number;
let dash: number;
let semiColon: number;
let graveAccent: number;
}
namespace Mouse {
let left: number;
let middle: number;
let right: number;
}
}
declare namespace Leaf {
const ValidatorErrors: {
Invalid: CustomErrorConstructor<{
path: string;
code: any;
}>;
};
type Stringable = {
toString(): string;
};
type ComplexData = any;
class Validator {
currentRouteName: string;
readonly parent: PV;
static currentReason: Stringable;
static currentCode: any;
static create(name: string): Validator;
constructor(currentRouteName: string, parent?: PV);
clone(parent?: PV): this;
private checkers;
private children;
field(key: K): Validator;
with(key: K, handler?: (validator: Validator) => void): this;
use(validator: Validator): this;
private elementValidator;
each(): Validator;
check(data: any, root?: any, parent?: any): void;
reason(reason: Stringable): this;
code(code: any): this;
private addChecker;
private getRoute;
string(): this;
int(): this;
number(): this;
has(): this;
lt(num: number): this;
gt(num: number): this;
lte(num: number): this;
gte(num: number): this;
reg(reg: RegExp): this;
pass(fn: (data: T, root?: R) => void): this;
}
}
declare namespace Leaf {
class ServiceStateModel extends DataSource {
constructor(service: Service, fields?: (keyof TState)[]);
}
type AnyService = Service;
abstract class Service {
isInitialized: boolean;
readonly dependencies: string[];
abstract name: string;
initialize(...args: any[]): void;
settings: TSettings;
constructor(defaultSettings?: TSettings, settings?: TSettings);
events: EventEmitter<{
[key: string]: any;
}>;
services: {
[name: string]: AnyService;
};
private apiNames;
connect(delegator: {
invoke: (uri: string, data: any, callback: Function) => void;
}): void;
private bindAPINames;
private api;
createAPI(handler?: (option: TOption, callback: (err?: Error, result?: TResult) => void) => void): {
(option?: TOption, callback?: (err: Error, result: TResult) => void): void;
};
}
interface TaggedFunction {
tag?: "api";
api?: string;
}
type DependencyMatcher = string | RegExp;
class DependencyManager {
private context;
add(name: string, deps: DependencyMatcher[]): void;
onAddDymanicDependency: (name: string) => void;
resolveDependency(name: string, chain?: string[]): string[];
resolve(): string[];
}
class ServiceSetupProcedure extends Leaf.States {
private services;
private setupSequence;
constructor(services: {
[key: string]: AnyService;
}, setupSequence: string[]);
protected data: {
dones?: Function[];
todo?: string[];
};
setup(callback: (err: Error) => void): void;
atPrepare(): void;
atSetup(): void;
atFinish(): void;
atPanic(): void;
private logInitialized;
}
class ServiceContext {
private settings;
private BuiltInServiceInstances;
constructor(settings?: any);
services: {
[index: string]: AnyService;
};
dependencyManager: DependencyManager;
register(s: T): T;
private procedure;
setup(callback: (err: Error) => void): void;
}
}
declare namespace Leaf {
namespace Background {
class ChannelBackgroundEnd {
}
class BackgroundLayer {
version: string;
private context;
constructor(version?: string);
}
}
}
declare namespace Leaf {
namespace Foreground {
class ChannelForegroundEnd {
}
class ChannelForegroundLayer {
version: string;
private context;
private rpc;
private invokeBackgroundServiceAPI;
private connectBackgroundLayer;
constructor(version?: string);
}
}
}
declare namespace Leaf {
interface ApplicationLifeCircle {
foregroundInitialize: () => void;
backgroundInitialize: () => void;
}
abstract class Application implements ApplicationLifeCircle {
initialize(): void;
implements(lifecircle: Partial): void;
foregroundInitialize: () => void;
backgroundInitialize: () => void;
serviceContext: ServiceContext;
}
}
declare namespace Leaf {
class Referencer {
events: EventEmitter<{
ref: any;
deref: any;
init: any;
release: any;
}>;
counter: number;
ref(): void;
deref(): void;
}
class OwnerReferencer {
ttl(time?: number): OwnerReferenceCachier;
events: EventEmitter<{
ref: any;
deref: any;
init: any;
release: any;
}>;
refs: {
owner: any;
counter: number;
}[];
release(): void;
getCounter(): number;
refBy(who: any): boolean;
derefBy(who: any): boolean;
}
class MultipleReference {
constructor();
refs: {
target: T;
owner: any;
counter: number;
}[];
targetRefs: {
target: T;
counter: number;
}[];
private refTarget;
private derefTarget;
private derefAll;
refBy(who: any, target: T): boolean;
derefBy(who: any, target?: T): boolean | void;
events: EventEmitter<{
init: T;
release: T;
ref: T;
deref: T;
}>;
}
class OwnerReferenceCachier {
readonly referencer: OwnerReferencer;
readonly time: number;
constructor(referencer: OwnerReferencer, time?: number);
timer: any;
debounceDeref(): void;
stopDebounceDeref(): void;
}
}
declare namespace Leaf {
type LifeOwner = {
events?: Leaf.EventEmitter;
life: Life;
};
class Life {
readonly owner: LifeOwner;
constructor(owner: any);
private fns;
referencer: OwnerReferencer;
connect(referencer: OwnerReferencer): this;
dead(fn: any): this;
depends: LifeOwner[];
children: LifeOwner[];
uses: LifeOwner[];
containBy(owner: LifeOwner): this;
contain(item: LifeOwner): this;
purge(item: LifeOwner): this;
use(obj: LifeOwner): this;
unuse(obj: LifeOwner): this;
need(obj: LifeOwner): this;
kill(): void;
isDestroyed: boolean;
events: EventEmitter<{
dead: any;
}>;
private keeper;
keep(): this;
unkeep(): this;
ttl(time?: number): this;
}
}
declare namespace Leaf {
class ReadyBehavior {
isReady: boolean;
private readyCallbacks;
counter: number;
debug: boolean;
yes(): void;
error(err: Error): void;
no(): void;
events: EventEmitter<{
ready: any;
unready: any;
}>;
whenReady(cb: Function): void;
}
class FrameBehavior {
interval: number;
setInterval(interval: number): this;
private framer;
frame(fn: (callback: Callback) => void): this;
isStart: boolean;
start(): this;
stop(): this;
private isFrameActive;
timer: any;
do(): void;
timeMode: string;
mode(mode: "include" | "beteen"): this;
}
}
declare namespace Leaf {
class Debouncer {
readonly option: {
time: number;
maxTime: number;
};
constructor(option: {
time: number;
maxTime: number;
});
previousEmit: number;
timer: any;
debounce(fn: Function): void;
}
class GroupDebouncer {
readonly option: {
time: number;
maxTime: number;
};
constructor(option: {
time: number;
maxTime: number;
});
debouncers: {
[name: string]: Debouncer;
};
debounce(name: string, fn: Function): void;
}
}
declare namespace Leaf {
}
declare module "leaf-ts" {
export = Leaf
}
///