UNPKG

mmir-lib

Version:

MMIR (Mobile Multimodal Interaction and Relay) library

1,177 lines (1,001 loc) 48.7 kB
/** * the `mmir-lib` package provides the mmir core library * for lightweight, client-centric, multimodal interaction development. * * See also the [HTML API docs](https://mmig.github.io/mmir/api-ts/). * * __NOTE__ The API documentation for `mmir-lib` has not been fully migrated to * TypeScript yet. * For more detailed descriptions see generated JSDoc-based API at * [mmig.github.io/mmir/api](https://mmig.github.io/mmir/api/) * * @see [[MmirModule]] * @module mmir-lib */ /** * export global variable mmir * * @type MmirModule */ export as namespace mmir; ////////////////////// namespace / module definition (type MmirModule) ///////////////////////////////// // interface MmirCore: // export function applyConfig (mainConfig: {}) : void;//DISABLED: "officially" this function has visibility protected // export function setInitialized: () : void;//DISABLED: "officially" this function has visibility protected export function config(requirejsConfig: {}): void; export function ready(onFrameworkReady: (...args: any[]) => any): any; export function isVersion(verion: string, comparator: Comparator): boolean; export const require: RequireJs; export const version: string; export const mmirName: "mmir" | string;//DEFAULT: "mmir" //NOTE changing exported var_s only has effect, if done before initialization export var startModule: string;//DEFAULT: 'mmirf/main'; export var startModules: undefined | string[];//DEFAULT: undefined export var viewEngine: string;//DEFAULT: "mmirf/simpleViewEngine"; export var debug: boolean;//DEFAULT: true; export var logLevel: LogLevelNum | LogLevel | LogLevelOptions;//DEFAULT: 'debug'; export var logTrace: boolean | { trace: boolean, depth: 'full' | any };//DEFAULT: true export var libMode: undefined | "min";//DEFAULT: undefined export var jquery: undefined | any;//DEFAULT: undefined //semi-public members: use with caution export const _define: null | RequireJsDefine; export var _mmirLibPath: string;//DEFAULT: "mmirf/" // interface MmirModule: export const util: CommonUtils; export const conf: ConfigurationManager; export const res: Resources; export const ctrl: ControllerManager; export const dialogEngine: DialogEngine; export const dialog: DialogManager; export const inputEngine: InputEngine; export const input: InputManager; export const lang: LanguageManager; export const media: MediaManager; export const model: ModelManager; export const notifier: NotificationManager; export const present: PresentationManager; export const semantic: SemanticInterpreter; ////////////////////// end of namespace / module definition ///////////////////////////////// export interface MmirCore { // applyConfig: (mainConfig: {}) => void;//DISABLED: "officially" this function has visibility protected // setInitialized: () => void;//DISABLED: "officially" this function has visibility protected config: (requirejsConfig: {}) => void; ready: (onFrameworkReady: (...args: any[]) => any) => any; isVersion(verion: string, comparator: Comparator): boolean; readonly require: RequireJs; readonly version: string; readonly mmirName: "mmir" | string;//DEFAULT: "mmir" startModule: string;//DEFAULT: 'mmirf/main'; startModules: undefined | string[];//DEFAULT: undefined viewEngine: string;//DEFAULT: "mmirf/simpleViewEngine"; debug: boolean;//DEFAULT: true; logLevel: LogLevelNum | LogLevel | LogLevelOptions;//DEFAULT: 'debug'; logTrace: boolean | { trace: boolean, depth: 'full' | any };//DEFAULT: true libMode: undefined | "min";//DEFAULT: undefined jquery: undefined | any;//DEFAULT: undefined //semi-public members: use with caution readonly _define: null | RequireJsDefine; _mmirLibPath: string;//DEFAULT: "mmirf/" } export interface MmirModule extends MmirCore { readonly util: CommonUtils; readonly conf: ConfigurationManager; readonly res: Resources; readonly ctrl: ControllerManager; readonly dialogEngine: DialogEngine; readonly dialog: DialogManager; readonly inputEngine: InputEngine; readonly input: InputManager; readonly lang: LanguageManager; readonly media: MediaManager; readonly model: ModelManager; readonly notifier: NotificationManager; readonly present: PresentationManager; readonly semantic: SemanticInterpreter; } //exported main module in node environment: export interface NodeMmirModule extends MmirModule { _config: {[field: string]: any}; readonly _requirejs: RequireJs; init: (preConfigure?: (mmirCore: MmirCore) => (&MmirModule | void)) => &NodeMmirModule; } export type LogLevel = 'verbose' | 'debug' | 'info' | 'warn' | 'error' | 'critical' | 'disabled'; export type LogLevelNum = 0 | 1 | 2 | 3 | 4 | 5 | 6; export type LogLevelNumField ='0'| '1' | '2' | '3' | '4' | '5' | '6'; export interface LogLevelOptions { level?: LogLevel | LogLevelNum; levels?: {[logLevel in LogLevel]?: string[]} & {[logLevelNum in LogLevelNumField]?: string[]}; modules?: {[moduleId: string]: LogLevel | LogLevelNum}; } export type Comparator = '>=' | '<=' | '>' | '<' | '!=' | '!==' | '=' | '==' | '==='; /** * interface definition for JSON grammar */ export interface Grammar { /** @deprecated use field [[example_phrases]] instead */ example_phrase?: string; example_phrases?: string | string[]; stopwords: string[]; /** @deprecated use field [[stopwords]] instead */ stop_word?: string[]; tokens: { [id: string]: string[] }; utterances: { [id: string]: { 'phrases': string[], 'semantic': any } }; } export interface Positions { text: string; pos: Pos[]; } export interface ProcessingOrderInfo { _order?: string[]; } export interface PositionsInfo { [processingName: string]: Pos[]; } export type ProcessingPositionsInfo = ProcessingOrderInfo & PositionsInfo; export interface GrammarConverter { new(): GrammarConverter; procList: ProcessingStep[]; loadGrammar: (successCallback: ()=> any, errorCallback: ()=> any, grammarUrl: string, doLoadSynchronously?: boolean) => void; loadResource: (successCallback: ()=> any, errorCallback: ()=> any, resourceUrl: string, doLoadSynchronously?: boolean) => void; setStopWords: (stopWordArray: string[]) => void; getStopWords: () => string[]; getEncodedStopwords: () => string[]; parseStopWords: () => void; getStopWordsRegExpr: () => RegExp; getStopWordsEncRegExpr: () => RegExp; getGrammarDef: () => string; setGrammarDef: (rawGrammarSyntax: string) => void; getGrammarSource: () => string; setGrammarSource: (src_code: string) => void; setGrammarFunction: (execGrammarFunc: (text: string, callback?: (semanticResult: {}) => void) => void, isAsync?: boolean) => void; isAsyncExec: () => boolean; preproc: (thePhrase: string, pos?: ProcessingPositionsInfo, processingSteps?: ProcessingStep[]) => string; postproc: (procResult: any, pos: ProcessingPositionsInfo, processingSteps?: ProcessingStep[]) => any; addProc: (proc: ProcessingStep, indexOrIsPrepend?: number|boolean) => void; removeProc: (proc: number|string) => ProcessingStep | undefined; getProcIndex: (procName: string, startIndex?: number) => number; removeStopwords: (inputStr : string, isCalcPosition?: boolean) => string | Positions; executeGrammar: (text: string, callback?: (semanticResult: {}) => void) => void; maskString: (str: string, computePositions?: boolean, prefix?: string, postfix?: string) => string | Positions; maskAsUnicode: (str: string, computePositions?: boolean) => string; unmaskString: (str: string, computePositions?: boolean, detector?: RegExp) => string | Positions; unmaskJSON: (json: any, isMaskValues?: boolean, isMaskNames?: boolean) => any; recodeJSON: (json: any, recodeFunc:(str:string)=>string, isMaskValues?: boolean, isMaskNames?: boolean) => any; //semi-private fields grammar_definition: string; js_grammar_definition: string; json_grammar_definition: Grammar; stop_words_regexp: RegExp; maskValues: boolean; maskNames: boolean; convertOldFormat: boolean; } export interface EncodeUtils { encodeUmlauts: (target: string | {}, doAlsoEncodeUpperCase?: boolean) => string | {}; decodeUmlauts: (target: string | {}, doAlsoEncodeUpperCase?: boolean) => string | {}; } export interface Pos { /** index */ i: number; /** original word length (i.e. before modification) */ len: number; /** modified word legnth (i.e. after modification) */ mlen?: number; } export interface SemanticInterpreter { interpret: (phrase: string, langCode?: string, callback?: (semanticResult: GrammarResult) => void) => GrammarResult | void; /** @deprecated use [[applyPreProcessing]] instead */ removeStopwords: (thePhrase: string, lang?: string) => string; applyPreProcessing: (thePhrase: string, lang?: string, processingSteps?: ProcessingStep[]) => string; getGrammarDefinitionText: (id: string) => string; getGrammarParserText: (id: string) => string; getGrammarConverter: (id: string) => GrammarConverter; createGrammar: (rawGrammarSrc: string | {}, id: string, callback?: (created?: GrammarConverter) => void) => SemanticInterpreter; addGrammar: (id: string, grammarImpl: (text: string, callback?: (semanticResult: {}) => void) => void | GrammarConverter, fileFormatNo?: number) => void; setStopwords: (id: string, stopwordArray: string[]) => void; hasGrammar: (id: string) => boolean; removeGrammar: (id: string) => void; addProcessing: (id: string, processingStep: ProcessingStep, indexOrIsPrepend?: number|boolean, callback?: Function) => void; setCurrentGrammar: (id: string) => void; getCurrentGrammar: () => string; setEnabled: (isEnabled: boolean) => void; isEnabled: () => boolean; getGrammarEngine: () => GrammarEngineType;//DEFAULT: "jscc" setGrammarEngine: (engineId: GrammarEngineType, asyncCompileMode?: boolean, disableStrictCompileMode?: boolean) => void; setEngineCompileMode: (asyncCompileMode: boolean, disableStrictCompileMode?: boolean) => void;//DEFAULT: false getEngineCompileMode: () => boolean; getEngineCompileStrictMode: () => boolean; getFileVersion: () => number; isPreProcessPositionsEnabled: () => boolean; setPreProcessPositionsEnabled: (enabled: boolean) => void; get_json_grammar_url: (id: string) => string;//NOTE may get removed/renamed } export type GrammarEngineType = "jscc" | "jison" | "pegjs"; export interface GrammarResult { engine: GrammarEngineType; phrase: string; preproc: {[preprocName: string]: Pos[]}; phrases?: PhraseInfo[]; utterance?: string; semantic?: any; error?: any; } export interface PhraseInfo { /** the index with the phrase */ i: number; /** the token type or utterance type */ type: string; /** the matched token(s) */ tok: string | PhraseInfo[]; } export interface ProcessingStep { name: string; pre?: ProcessingFunction; post?: ProcessingFunction; } export type ProcessingFunction = (input: string | Positions, isProcessPositions?: boolean) => string | Positions; //////////////////////////////////////////////////////////// TODO ////////////////////////////////////////////////////// export interface CommonUtils { readonly regexHTMLComment: RegExp; readonly requireProtocol: string; checkNetworkConnection: () => any; concatArray: (array: any) => any; getCompiledGrammarPath: (generatedGrammarsPath: string, grammarId: string, isFileNameOnly?: boolean) => string; getCompiledResourcesIds: (compiledResourcesPath: string) => string[]; getDirectoryStructure: () => any; getLocalScript: (scriptUrl: any, success: any, fail: any, ...args: any[]) => void; getPartialsPrefix: () => any; init: (onsuccess: any, onerror: any) => any; isArray: (object: any) => any; isRunningOnAndroid: () => any; isRunningOnSmartphone: () => any; loadCompiledGrammars: (generatedGrammarsPath: string, cbFunction: Function, ignoreGrammarIds?: string[]) => any; loadDirectoryStructure: (success: any, errorFunc: any) => any; listDir: (pathname: string, filter: RegExp|((entry: string)=>boolean)) => string[]; loadImpl: (librariesPath: any, isSerial: any, completedCallback: any, checkIsAlreadyLoadedFunc: any, statusCallback: any) => any; loadScript: (url: any, successCallback: any, errorCallback: any, ...args: any[]) => any; parseParamsToDictionary: (urlParamsPartStrings: any) => any; stripPathName: (pathname: any) => any; } declare interface ConfigurationManager { get(propertyName: string | string[], defaultValue?: any, setAsDefaultIfUnset?: boolean): any; get<T>(propertyName: string | string[], defaultValue?: T, setAsDefaultIfUnset?: boolean): T; getBoolean(propertyName: string | string[], defaultValue?: any, setAsDefaultIfUnset?: boolean): boolean; getString(propertyName: string | string[], defaultValue?: any, setAsDefaultIfUnset?: boolean): string; getNumber(propertyName: string | string[], defaultValue?: any, setAsDefaultIfUnset?: boolean): number; set(propertyName: string | string[], value: any): any; set<T>(propertyName: string | string[], value: T): T; on(propertyName: string, listener: ConfigurationChangeListener, emitOnAdding?: boolean): void; on(propertyNamePath: string[], listener: ConfigurationChangeListener, emitOnAdding?: boolean): void; on(allChangesListener: ConfigurationChangeListener): void; addListener(propertyName: string, listener: ConfigurationChangeListener, emitOnAdding?: boolean): void; addListener(propertyNamePath: string[], listener: ConfigurationChangeListener, emitOnAdding?: boolean): void; addListener(allChangesListener: ConfigurationChangeListener): void; off(propertyName: string, listener: ConfigurationChangeListener): void; off(propertyNamePath: string[], listener: ConfigurationChangeListener): void; off(allChangesListener: ConfigurationChangeListener): void; removeListener(propertyName: string, listener: ConfigurationChangeListener): void; removeListener(propertyNamePath: string[], listener: ConfigurationChangeListener): void; removeListener(allChangesListener: ConfigurationChangeListener): void; toPath(pathStringOrList: string | string[]): string[]; } export type ConfigurationChangeListener = (newValue: any, oldValue?: any, propertyName?: string[]) => void; export interface Resources { getBasePath: () => string; getBeepUrl: () => string; getCompiledLayoutPath: () => string; getCompiledViewPath: () => string; getConfigurationFileUrl: () => string; getControllerPath: () => string; getDictionaryFileUrl: (langCode?: string) => string; getDirectoriesFileUrl: () => string; getEnv: () => EnvType | "default" | string; getEnvPlatform: () => PlatfromType | "default"; getExtensionsPath: () => string; getGeneratedGrammarsPath: () => string; getGrammarFileUrl: (langCode?: string) => string; getGrammarPluginPath: () => string; getGeneratedStateModelsPath: () => string; getHelperPath: () => string; getHelperSuffix: () => string; getLanguage: () => string; getLanguagePath: () => string; getLayoutPath: () => string; getMediaPluginPath: () => string; getModelPath: () => string; getPartialsPrefix: () => string; getSpeechConfigFileUrl: (langCode?: string) => string; getViewPath: () => string; getWorkerPath: () => string; init: (theForBrowserParameter?: EnvType|EnvInfo&{isAbsolutePath?: true|((path: string)=>boolean)}|string|boolean, isReset?: boolean) => any; isBrowserEnv: () => boolean; isCordovaEnv: () => boolean; isCapacitorEnv: () => boolean; } export type PlatfromType = "browser" | "android" | "ios" | "node" | "electron"; export type EnvType = PlatfromType | "cordova"; export interface EnvInfo { isBrowserEnv: boolean, isCordovaEnv: boolean, isCapacitorEnv: boolean, isNodeEnv: boolean, platform: PlatfromType | "default", envSetting: EnvType | "default" | string } export interface ControllerManager { create: () => any; get: (ctrlName: string) => Controller | undefined; getNames: () => string[]; init: (callback: any, ctx: any) => any; perform: (ctrlName: string, actionName: string, data?: any) => any; performHelper: (ctrlName: string, actionName: string, data?: any) => any; } export interface StateEngine { doc: string; name: string; url: string; getActiveEvents: () => any; getActiveStates: () => any; getActiveTransitions: () => any; getEvents: () => any; getStates: () => any; getTransitions: () => any; ignoreScript: () => void; load: (...args: any[]) => any; onload: (scion: any, deferred: any) => void; onraise: () => void; raise: (event: string | {name: string, data?: any}, eventData?: any) => void; start: () => void; } export interface StateManager { raise: (eventName: string, data?: any) => void; _init: (moduleId: string, config: StateManagerConfig, isRegisterEngine?: boolean) => Promise<{manager: StateManager, engine: any}>; _log: Logger; } export interface StateManagerConfig { modelUri: string; mode?: 'simple' | 'extended'; engineId?: string; logLevel?: number | string; } export interface DialogEngine extends StateEngine {} export interface DialogManager extends StateManager {} export interface InputEngine extends StateEngine {} export interface InputManager extends StateManager {} export type GrammarType = 'source' | 'bin'; export interface LanguageManager { determineLanguage: (lang: string) => string; existsDictionary: (lang: string) => boolean; existsGrammar: (lang: string, grammarType?: GrammarType) => boolean; existsSpeechConfig: (lang: string) => boolean; fixLang: (providerName: string, langCode: string) => string; getDefaultLanguage: () => string; getDictionary: () => {[id:string]: string}; getSpeechConfig: () => {[config:string]: any}; getLanguage: () => string; getLanguageConfig: (pluginId: string, feature: string, separator?: string) => any; getLanguages: () => string[]; getText: (textVarName: string) => string; init: (lang: string) => any; setLanguage: (lang: string, doNotLoadResources?: boolean) => string; } export type MediaEventHandler = Function; export type MediaEventType = string; export type ListVoicesFunction = (options?: VoiceListOptions, successCallBack?: (voices: string | VoiceDetails[]) => void, failureCallBack?: Function) => void; export type ListLanguagesFunction = (successCallBack?: (languages: string[]) => void, failureCallBack?: Function) => void; export interface MediaManager { ctx: {[ctxId: string]: any}; plugins: Array<MediaManagerPluginEntry & {disabled?: true | DisabledPluginInfo}> | null, waitReadyImpl: IWaitReadyImpl; init: (successCallback?: Function, failureCallback?: Function, listenerList?: {name: string, listener: Function}[]) => any; loadFile: (filePath: string, successCallback?: Function, failureCallback?: Function, execId?: string, config?: any) => void; addListener: (eventName: MediaEventType, eventHandler: MediaEventHandler) => void; hasListeners: (eventName: MediaEventType) => boolean; getListeners: (eventName: MediaEventType) => MediaEventHandler | void; removeListener: (eventName: MediaEventType, eventHandler: MediaEventHandler) => boolean; off: (eventName: MediaEventType, eventHandler: MediaEventHandler) => boolean; on: (eventName: MediaEventType, eventHandler: MediaEventHandler) => void; createEmptyAudio: () => IAudio; getURLAsAudio: (url: string, onEnd?: TTSOnComplete, failureCallback?: TTSOnError, successCallback?: Function, audioObj?: IAudio, ...args: any[]) => IAudio; getWAVAsAudio: (blob: Blob, onCreate: Function, onEnd?: TTSOnComplete, failureCallback?: TTSOnError, onInit?: Function, emptyAudioObj?: IAudio) => IAudio; getAudio: (urlOrData: string | Blob, callback: any, onEnd?: TTSOnComplete, failureCallback?: TTSOnError, onInit?: Function, emptyAudioObj?: IAudio) => IAudio; playURL: (url: string, onEnd?: TTSOnComplete, failureCallback?: TTSOnError, onReady?: Function) => void; playWAV: (blob: Blob, onEnd?: TTSOnComplete, failureCallback?: TTSOnError, onReady?: Function) => void; play: (urlOrData: string | Blob, onEnd?: TTSOnComplete, failureCallback?: TTSOnError, onReady?: Function) => void; getFunc: (ctx: string, funcName: string) => any; perform: (ctx: string, funcName: string, args?: any[]) => any; setDefaultCtx: (ctxId: string) => void; recognize: (options?: ASROptions, statusCallback?: ASROnStatus, failureCallback?: ASROnError, isIntermediateResults?: boolean) => void; startRecord: (options?: ASROptions, successCallback?: ASROnStatus, failureCallback?: ASROnError, intermediateResults?: boolean) => void; stopRecord: (options?: ASROptions, successCallback?: ASROnStatus, failureCallback?: ASROnError) => void; cancelRecognition: (successCallback?: Function, failureCallback?: Function) => void; getRecognitionLanguages: ListLanguagesFunction; destroyRecognition: (successCallback?: (didDestroy: boolean) => void,failureCallback?: Function) => void; initializeRecognition: (successCallback?: (didInitialize: boolean) => void,failureCallback?: Function) => void; tts: (options: string | string[] | TTSOptions, successCallback?: TTSOnComplete, failureCallback?: TTSOnError, onInit?: TTSOnReady, ...args: any[]) => void; setTextToSpeechVolume: (newValue: number) => void; cancelSpeech: (successCallBack?: Function, failureCallBack?: Function) => void; getSpeechLanguages: ListLanguagesFunction; getVoices: ListVoicesFunction; destroySpeech: (successCallback?: (didDestroy: boolean) => void,failureCallback?: Function) => void; initializeSpeech: (successCallback?: (didInitialize: boolean) => void,failureCallback?: Function) => void; // internal / "half public" functions (for use in plugin implementations) _emitEvent: (eventName: MediaEventType, ...args: any[]) => void; /** @deprecated use [[_emitEvent]] instead */ _fireEvent: (eventName: MediaEventType, args: any[]) => void; _addListenerObserver: (eventName: MediaEventType, observerCallback: (actionType: "added" | "removed", eventHandler: MediaEventHandler) => void) => void; _removeListenerObserver: (eventName: MediaEventType, observerCallback: (actionType: "added" | "removed", eventHandler: MediaEventHandler) => void) => void; _notifyObservers: (eventName: MediaEventType, actionType: "added" | "removed", eventHandler: MediaEventHandler) => void; _preparing: (moduleName: string) => void; _ready: (moduleName: string) => void; } /** MediaManager.loadPlugin: return value / info when loading media plugins in case they are not functional (e.g. for auto-created stub functions that invoke appropriate error-callback) */ export interface DisabledPluginInfo { /** name / ID of the (media) plugin */ mod: string; /** * if list of (disabled/non-functional) function names: * stub functions will be created (which try to invoke an error-callback from the arguments or log an error) * * if dictionary of functions: * function implementations will be used as plugin implementation */ disabled?: string[] | {[field: string]: any}; /** a message to append to the error message for created stub-functions (see `disabled`) */ message?: string; /** * option-name for error-callbacks when supplied via options-argument * (used created stub-functions, see `disabled`) * @default "error" */ errorCallbackName?: string; } export interface Logger { verbose(msg: string, reverseCallStack?: number): void; verbose(className: string, msg: string, reverseCallStack?: number): void; verbose(className: string, funcName: string, msg: string, reverseCallStack?: number): void; v(msg: string, reverseCallStack?: number): void; v(className: string, msg: string, reverseCallStack?: number): void; v(className: string, funcName: string, msg: string, reverseCallStack?: number): void; debug(msg: string, reverseCallStack?: number): void; debug(className: string, msg: string, reverseCallStack?: number): void; debug(className: string, funcName: string, msg: string, reverseCallStack?: number): void; d(msg: string, reverseCallStack?: number): void; d(className: string, msg: string, reverseCallStack?: number): void; d(className: string, funcName: string, msg: string, reverseCallStack?: number): void; log(msg: string, reverseCallStack?: number): void; log(msg: string, reverseCallStack?: number): void; logl(msg: string, error?: any, reverseCallStack?: number): void; log(className: string, msg: string, reverseCallStack?: number): void; log(className: string, msg: string, error?: any, reverseCallStack?: number): void; log(className: string, funcName: string, msg: string, reverseCallStack?: number): void; log(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; l(msg: string, reverseCallStack?: number): void; l(msg: string, error?: any, reverseCallStack?: number): void; l(className: string, msg: string, reverseCallStack?: number): void; l(className: string, msg: string, error?: any, reverseCallStack?: number): void; l(className: string, funcName: string, msg: string, reverseCallStack?: number): void; l(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; info(msg: string, reverseCallStack?: number): void; info(className: string, msg: string, reverseCallStack?: number): void; info(className: string, funcName: string, msg: string, reverseCallStack?: number): void; i(msg: string, reverseCallStack?: number): void; i(className: string, msg: string, reverseCallStack?: number): void; i(className: string, funcName: string, msg: string, reverseCallStack?: number): void; warn(msg: string, reverseCallStack?: number): void; warn(className: string, msg: string, reverseCallStack?: number): void; warn(className: string, funcName: string, msg: string, reverseCallStack?: number): void; w(msg: string, reverseCallStack?: number): void; w(className: string, msg: string, reverseCallStack?: number): void; w(className: string, funcName: string, msg: string, reverseCallStack?: number): void; error(msg: string, reverseCallStack?: number): void; error(msg: string, error?: any, reverseCallStack?: number): void; error(className: string, msg: string, reverseCallStack?: number): void; error(className: string, msg: string, error?: any, reverseCallStack?: number): void; error(className: string, funcName: string, msg: string, reverseCallStack?: number): void; error(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; e(msg: string, reverseCallStack?: number): void; e(msg: string, error?: any, reverseCallStack?: number): void; e(className: string, msg: string, reverseCallStack?: number): void; e(className: string, msg: string, error?: any, reverseCallStack?: number): void; e(className: string, funcName: string, msg: string, reverseCallStack?: number): void; e(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; critical(msg: string, reverseCallStack?: number): void; critical(msg: string, error?: any, reverseCallStack?: number): void; critical(className: string, msg: string, reverseCallStack?: number): void; critical(className: string, msg: string, error?: any, reverseCallStack?: number): void; critical(className: string, funcName: string, msg: string, reverseCallStack?: number): void; critical(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; c(msg: string, reverseCallStack?: number): void; c(msg: string, error?: any, reverseCallStack?: number): void; c(className: string, msg: string, reverseCallStack?: number): void; c(className: string, msg: string, error?: any, reverseCallStack?: number): void; c(className: string, funcName: string, msg: string, reverseCallStack?: number): void; c(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; getLevel(): LogLevelNum; setLevel(loggingLevel: LogLevel | LogLevelNum): void; isCritical(): boolean; isDebug(): boolean; isDisabled(): boolean; isError(): boolean; isInfo(): boolean; isVerbose(): boolean; isWarn(): boolean; isc(): boolean; isd(): boolean; ise(): boolean; isi(): boolean; isv(): boolean; isw(): boolean; } /** * @example * var Logger = mmir.require('mmirf/logger'); * var logger = Logger.create('MyClass'); */ export interface LoggerModule { create(loggerName: string, logLevel?: LogLevel | LogLevelNum): Logger; create(loggerConfig: {id: string, config(): &{logLevel: LogLevel | LogLevelNum}}): Logger; create(loggerName: string | {id: string, config(): &{logLevel: LogLevel | LogLevelNum}}, logLevel?: LogLevel | LogLevelNum): Logger; getDefaultLogLevel(): LogLevelNum; setDefaultLogLevel(loggingLevel: LogLevel | LogLevelNum): void; verbose(msg: string, reverseCallStack?: number): void; verbose(className: string, msg: string, reverseCallStack?: number): void; verbose(className: string, funcName: string, msg: string, reverseCallStack?: number): void; debug(msg: string, reverseCallStack?: number): void; debug(className: string, msg: string, reverseCallStack?: number): void; debug(className: string, funcName: string, msg: string, reverseCallStack?: number): void; log(msg: string, reverseCallStack?: number): void; log(msg: string, reverseCallStack?: number): void; logl(msg: string, error?: any, reverseCallStack?: number): void; log(className: string, msg: string, reverseCallStack?: number): void; log(className: string, msg: string, error?: any, reverseCallStack?: number): void; log(className: string, funcName: string, msg: string, reverseCallStack?: number): void; log(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; info(msg: string, reverseCallStack?: number): void; info(className: string, msg: string, reverseCallStack?: number): void; info(className: string, funcName: string, msg: string, reverseCallStack?: number): void; warn(msg: string, reverseCallStack?: number): void; warn(className: string, msg: string, reverseCallStack?: number): void; warn(className: string, funcName: string, msg: string, reverseCallStack?: number): void; error(msg: string, reverseCallStack?: number): void; error(msg: string, error?: any, reverseCallStack?: number): void; error(className: string, msg: string, reverseCallStack?: number): void; error(className: string, msg: string, error?: any, reverseCallStack?: number): void; error(className: string, funcName: string, msg: string, reverseCallStack?: number): void; error(className: string, funcName: string, msg: string, error?: any, reverseCallStack?: number): void; } /** * Module configuration for the [[LoggerModule]] * * @example * * var loggerModuleConfig = { * level: 'info', * levels: { * warn: ['mmirf/mediaManager', 'mmirf/inputEngine'] * }, * modules: { * 'mmirf/dialogEngine': 'critical' * } * }; * // set to global `mmir` before initialing `mmir`: * mmir.logLevel = loggerModuleConfig; * * // or use as mmir application configuration with mmir-tooling configuration: * var mmirAppConfig = { * config: { * 'mmirf/logger': { * logLevel: loggerModuleConfig * } * } * }; * //... * require('mmir-webpack')(webpack, webpackConfig, mmirAppConfig); * */ export interface LoggerModuleConfig { /** OPTIONAL the default log level as integer or string, DEFAULT: "debug" */ level?: LogLevel | LogLevelNum; /** OPTIONAL list of modules for per log level (unspecified modules will have default log level) */ levels?: { /** * list of modules for the LogLevel * NOTE: the field name must be a valid LogLevel (e.g. "warn"), otherwise it will be ignored */ [logLevel: string]: string[] }, /** OPTIONAL log level per module (unspecified modules will have default log level) */ modules?: { /** * log level for the module * NOTE: the field name needs to correspond to the module ID */ [moduleId: string]: LogLevel | LogLevelNum } } export interface TTSOptions { /** text that should be read aloud */ text: string | string[]; /** the length of the pauses between sentences (i.e. for String Arrays) in milliseconds */ pauseDuration?: number; /** the language for synthesis (if omitted, the current language setting is used) */ language?: string; /** the voice (language specific) for synthesis; NOTE that the specific available voices depend on the TTS engine */ voice?: string; /** the on-playing-completed callback (see arg onPlayedCallback) */ success?: TTSOnComplete; /** the error callback (see arg failureCallback) */ error?: TTSOnError; /** the audio-ready callback (see arg onReadyCallback) */ ready?: TTSOnReady; } export interface ASROptions { /** the status-callback (see arg statusCallback) */ success?: ASROnStatus; /** the error callback (see arg failureCallback) */ error?: ASROnError; /** the language for recognition (if omitted, the current language setting is used) */ language?: string; /** set true for receiving intermediate results (NOTE not all ASR engines may support intermediate results) */ intermediate?: boolean; /** set how many recognition alternatives should be returned at most (NOTE not all ASR engines may support this option) */ results?: number; /** set how many recognition alternatives should be returned at most (NOTE not all ASR engines may support this option) */ mode?: ASRMode; /** length of pause after speech for end-of-speech detection (NOTE not all ASR engines may support this option) */ eosPause?: EOSPause; /** disable improved feedback when using intermediate results (NOTE not all ASR engines may support this option) */ disableImprovedFeedback?: boolean; } export interface VoiceListOptions { /** if set, the returned voice list will be filtered by the specified language (may also include country-code) */ language?: string; /** if TRUE, the returned list will be comprised of VoiceDetails objects instead of strings */ details?: boolean; } export interface VoiceDetails { /** the name of the voice */ name: string; /** the language (code) of the voice */ language: string; /** the gender of the voice */ gender: "female" | "male" | "unknown"; /** if voice is locally available or requires network/internet access * @default false */ local?: boolean; } export type TTSOnComplete = () => void; export type TTSOnError = (error: string | Error) => void; export type TTSOnReady = (isReady?: Boolean, audio?: IAudio) => void; export type ASROnStatus = (text: string | "", confidence: number | undefined, status: ASRStatus, alternatives?: {result: string, score: number}[], unstable?: string, custom?: any) => void; export type ASRStatus = "FINAL" | "INTERIM" | "INTERMEDIATE" | "RECORDING_BEGIN" | "RECORDING_DONE"; export type ASROnError = (error: string | Error) => void; export type ASRMode = "search" | "dictation"; export type EOSPause = "short" | "long"; export interface PlayError { audio: IAudio | HTMLAudioElement; error: DOMException; } export type PluginType = 'custom' | MediaPluginType | string; export type MediaPluginType = 'audio' | 'asr' | 'tts' | 'prep' | string; export type MediaPluginEnvType = 'browser' | 'cordova' | 'android' | 'ios'; export interface MediaManagerPluginEntry { mod?: string; env?: MediaPluginEnvType | string [] | MediaPluginEnvType | string; ctx?: string; config?: string | {mod: string, config: any} | any; type?: MediaPluginType; } export interface SimpleSpeechConfig { /** local with 2-letter language- and country-code, separated with "-", e.g. "de-DE" or "en-US" */ language?: string; /** local with 3-letter language- and country-code, separated with "-", e.g. "deu-DEU" or "eng-USA" */ long?: string; /** voice name or feature (may not be supported by selected TTS plugin) */ voice?: 'male' | 'female' | string; } export interface SpeechConfig extends SimpleSpeechConfig { language: string; /** * voice feature (may not be supported by selected TTS plugin) * * NOTE the root SpeechConfig should not have a specific voice-name, but * only a feature specified (since it is very unlikely that all plugins * support the same voice-name) */ voice?: 'male' | 'female'; /** * specific plugin speech-configurations that override the general * configuration settings */ plugins: {[pluginId: string]: SpeechConfigPluginEntry}; } export interface SpeechConfigPluginEntry extends SimpleSpeechConfig {} export interface IAudio { new: (url: string, onPlayedCallback: TTSOnComplete, failureCallBack: TTSOnError, onLoadedCallBack: TTSOnReady) => IAudio; play: () => void; stop: () => void; enable: () => void; disable: () => void; release: () => void; setVolume: (volume: number) => void; getDuration: () => number; isPaused: () => boolean; isEnabled: () => boolean; } export interface IWaitReadyImpl { preparing: (moduleName: string) => void; ready: (moduleName: string) => void; } export interface MicLevelsAnalysis { active: (active: any) => any; enabled: (enable: any) => any; start: (audioInputData: any) => void; stop: () => void; } export interface ModelManager { get: (modelName: string) => any; getNames: () => string[]; init: () => any; } export interface NotificationManager { alert: (message: string, alertCallback: Function, title: string, buttonName: string) => void; confirm: (message: string, confirmCallback: Function, title: string, buttonLabels: string[]) => void; beep: (times: number) => void; createSound: (name: string, url: string, isKeepOnPause: boolean) => void; getVolume: () => number; init: () => any; initBeep: () => void; initSound: (name: string) => void; isVibrateAvailable: () => boolean; isVibrateEnabled: () => boolean; playSound: (name: string, times: number, onFinished: Function, onError: Function) => void; setVibrateEnabled: (enabled: boolean) => void; setVolume: (vol: number) => void; stopSound: (name: string) => void; vibrate: (milliseconds: number) => void; } export interface PresentationManager { pageIndex: number; addLayout: (layout: Layout) => void; addPartial: (ctrlName: string, partial: Partial) => void; addView: (ctrlName: string, view: View) => void; callRenderEngine: (funcName: string, args: any[]) => any; getLayout: (layoutName: string, doUseDefaultIfMissing: boolean) => any; getPartial: (controllerName: string, partialName: string) => any; getView: (controllerName: string, viewName: string) => any; hideCurrentDialog: (...args: any[]) => void; hideWaitDialog: (...args: any[]) => void; render: (ctrlName: string, viewName: string, data?: any) => void; setRenderEngine: (theRenderEngine: RenderEngine) => void; showDialog: (ctrlName: string, dialogId: string, data?: any, ...args: any[]) => any; showWaitDialog: (text: string, data: any, ...args: any[]) => void; /** NOTE view-dependent events are named: "<event name>_<view name>" */ _fireRenderEvent: (ctrl: Controller, eventName: 'before_page_prepare' | 'before_page_load' | 'on_page_load' | string, eventData: any, pageOptions: any) => any | false; /** NOTE view-dependent event handler can be set via: on_before_page_prepare_<view name> */ on_before_page_prepare?: (ctrlName: string, eventName: 'before_page_prepare', eventData: any, pageOptions: any) => any | false; /** NOTE view-dependent event handler can be set via: on_before_page_load_<view name> */ on_before_page_load?: (ctrlName: string, eventName: 'before_page_load', eventData: any, pageOptions: any) => any | false; /** NOTE view-dependent event handler can be set via: on_page_load_<view name> */ on_page_load?: (ctrlName: string, eventName: 'on_page_load', eventData: any, pageOptions: any) => any | false; } export interface RequireJs extends Function { isBrowser: boolean; defined: (id: any) => any; specified: (id: any) => any; toUrl: (moduleNamePlusExt: any) => any; undef: (id: any) => void; config: (configuration: any) => void; } export interface RequireJsDefine extends Function {} //////////////////////////////////////////////////////////////////////////////////////////////////////////// export interface RenderEngine { hideCurrentDialog(): void; hideWaitDialog(): void; render(ctrlName: string, viewName: string, view: View, ctrl: Controller, data?: any): void; showDialog(ctrlName: string, dialogId?: string, data?: any): void; showWaitDialog(text?: string, theme?: string): void; } export declare class Layout { constructor(name: string, definition: string, remote?: boolean, ignoreMissingBody?: boolean); getBodyContents(): string; getDialogsContents(): string; getHeaderContents(): string; getName(): string; getYields(): YieldDeclaration[]; stringify(disableStrictMode?: boolean): string; //static TagElement(tag: any, content: any, tagType: any): any; //static getTagAttr(str: any, target: any): any; } export declare class YieldDeclaration { constructor(parsingElement: ParsingResult, contentAreaType: any); getName(): string; getNameType(): number; getAreaType(): number; getEnd(): number; getStart(): number; getValue(rawPropertyValue: any, proptertyType: any, data: any): any; stringify(disableStrictMode?: boolean): string; } export declare class View { constructor(ctrl: any, name: string, definition: string); getContentElement(name: string): ContentElement; getController(): Controller; getDefinition(): string; getName(): string; stringify(disableStrictMode?: boolean): string; } export declare class Partial { constructor(ctrl: Controller, name: string, definition: string); getContentElement(): ContentElement; getController(): Controller; getDefinition(): string; getName(): string; stringify(disableStrictMode?: boolean): string; } export declare class ContentElement { constructor(group: ParsingResult|string[]|{name: string, content: string, offset?: number, parent?: ContentElement}, view: View, parser: any, renderer: any, ...args: any[]); getController(): Controller; getDefinition(): string; getEnd(): number; getName(): string; getOffset(): number; getRawText(): string; getStart(): number; getView(): View; hasDynamicContent(): boolean; stringify(disableStrictMode?: boolean): string; toHtml(): string; toStrings(renderingBuffer?: string[], data?: any): any; } export declare class ParsingResult { constructor(thetokens: any); getCallDataEnd(): number; getCallDataStart(): number; getCallDataType(): string; getEnd(): number; getStart(): number; getType(): number; getTypeName(): string; getValue(rawPropertyValue: any, proptertyType: any, data: any): any; hasCallData(): boolean; hasElse(): boolean; hasVarReferences(): boolean; isElse(): boolean; isEscape(): boolean; isEscapeEnter(): boolean; isEscapeExit(): boolean; isFor(): boolean; isHelper(): boolean; isIf(): boolean; isLocalize(): boolean; isRender(): boolean; isScriptBlock(): boolean; isScriptStatement(): boolean; isScriptTag(): boolean; isStyleTag(): boolean; isYield(): boolean; isYieldContent(): boolean; setEndFrom(thetokens: any): void; setStartFrom(thetokens: any): void; stringify(disableStrictMode?: boolean): string; } export type FileInfo = {name: string, path: string, genPath: string}; export declare class Helper { constructor(ctrl: string, name: string, instanceConstr: Function); perform(actionName: string, data?: any, ...args: any[]): any; } export declare class Controller { constructor(name: any, jsonDef: any, instanceConstr: Function); getName(): string; getHelper(): Helper; getLayoutName(): string; getPartialNames(): string[]; getViewNames(): string[]; perform(actionName: string, data: any, ...args: any[]): any; performHelper(actionName: string, data: any, ...args: any[]): any; performIfPresent(actionName: string, data: any, ...args: any[]): any; getPartials(): FileInfo[]; getViews(): FileInfo[]; getLayout(): FileInfo; parsePartials(partialDefs: FileInfo[]): void; parseViews(viewDefs: FileInfo[]): void; loadHelper(name: string, helperPath: string, ctx: any): void; } export interface DialogManager4Compatibility extends DialogManager { getOnPageRenderedHandler: () => Function | undefined; hideCurrentDialog: () => void; hideWaitDialog: () => void; perform: (ctrlName: any, actionName: any, data?: any) => any; performHelper: (ctrlName: any, helper_method_name: any, data?: any) => any; render: (ctrlName: any, viewName: any, data?: any) => void; setOnPageRenderedHandler: (onPageRenderedHook: Function) => void; showDialog: (ctrlName: any, dialogId: any, data?: any) => void; showWaitDialog: (text: any, theme: any) => void; } export type CryptoImpl = {MD5(str: string): string}; export type ChecksumInfo = { size: number; hash: string; info?: string; }; /** * @example * var checksumUtils = require('mmirf/checksumUtils').init(); */ export interface ChecksumUtils { /** * Must be called before using checksum-generation: * sets/initializes the object/function for checksum generation. * * After first call, following calls to this function will have no effect. * * @param {CryptoImpl} [cryptoImpl] OPTIONAL * if omitted, the (global!) variable <code>CryptoJS</code> is used by default. * This argument should be the CryptoJS object containing the MD5 function/algorithm, i.e. CryptoJS.MD5() must be a function! */ init(cryptoImpl?: CryptoImpl): void; /** * Creates the content for a checksum file, containing information about * the size and hash-value for the supplied String argument. * * The result can be "written as is" to a file. * * @param {String} originalText * the "raw" text for which to generate the checksum information * @param {String} [additionalInfo] OPTIONAL * additional information to include in the checksum information (must not contain whitespaces) * * @returns {String} the checksum information as a String (formatted as content of a checksum file) */ createContent(originalText: string, additionalInfo?: string): string; /** * Parses the raw text-content of a checksum file and returns an object * with properties: * * @param {String} rawTextContent * the raw conent of a checksum file * * @returns {ChecksumInfo} an object with the extracted properties from the checksum-data: * <pre>{ size: INTEGER, hash: STRING, info?: STRING }</pre> */ parseContent(rawTextContent: string): ChecksumInfo; /** * Check if the length / checksum for a raw text is the same as the checksum-information. * * NOTE: The actual checksum for the raw text is only generated & checked, if the size is equal. * * @function * @param {String} rawTextContent * the (raw) text/content which should be checked * @param {String|ChecksumInfo} referenceHash * the checksum information to check against: either the * raw content (String) of a checksum file, or the parsed * contents of a checksum file, which is a PlainObject with * properties: * <pre>{ size: INTEGER, hash: STRING, info?: STRING }</pre> * @param {String} [additionalInfo] OPTIONAL * if referenceHash is a PlainObject with info property and * additionalInfo must match the info property, otherwise the * verification return FALSE * * @returns {Boolean} * <code>true</code> if the raw content matches the hash */ isSame(rawTextContent: string, referenceHash: string | ChecksumInfo, additionalInfo?: string): boolean; /** * Returns the file extension for checksum-files. * * @returns {String} the default file extension for checksum files * (including the separating dot, eg. ".checksum.txt") */ getFileExt(): string, /** * The Char used for separating fields within checksum files. * * @returns {String} the separator char (TAB) */ getConentSeparator(): string; }