/** * Indicates the Json types, incldue `undefind` cause of * Sometimes we allow some typing property is optional. */ export type Json = undefined | null | boolean | number | string | Json[] | { [prop: string]: Json; }; /** * The plain object */ export type PlainObject = Record; /** * 保证第一层Map不存在 `Record` */ export type PlainObjectNoFunction = Record; /** * 支持注册同步方法对象(对象里面包含方法或者属性) * OR * 支持注册异步方法对象(对象里面包含方法或者属性) */ export type RegisterPlainObject = { [propName: string]: Json | K; }; /** * 1. Web注册的函数, 处理Native请求返回调用Native的数据类型 * 2. 或者Web主动调用Native接口参数类型. * Note: 基础类型或者深度Map类型, 但是不包含函数 */ export type CallNtvData = Json; /** * Web注册的函数, 接收Native主动调用的参数类型约束 * Note: 基础类型或者深度Map类型, 但是不包含函数 */ export type FromNtvData = Json; /** * Web调用收到Native回调的数据类型约束 */ export type ReceiveNtvCallbackData = Json; /** * Web用来异步接收Native处理结果, 回调回来的数据处理函数 */ export type ReceiveNtvCallback = (data: FabricCallbackData) => void; /** * 接口返回报文通讯协议范型, 只针对接口返回结果给调用者. 发起的调用参数不需要约束 * 1. 所有的传输报文(发送/接收)都放到一个参数字段下面, 这个字段类型由具体接口实现进行约定. * 2. 所有约定好的bridge传输参数对象(发送/接收)都必须经过JSON.stringify()序列化之后传输. * 3. 接口传输报文可以是 `T extends Primitive` 等任何数据类型.但是都需要经过JSON序列化 如 字符串1 系列化成 `"1"` */ export type FabricCallbackData = { /** * code: 字符串 '0' 的时候为接口处理成功, 否则为接口处理异常 * 具体处理异常可以根据接口具体的场景进行1对1约定. 比如 '1' 在网络请求中表示网络不通. 等 * 如果页面bridgejs报错则code='fabric_catched_error' * `ntv_input_error`->如果Native解析当前插件输入参数失败, 如入参不匹配, 入参jsonParse error等 * `ntv_parse_error`->如果Native处理完插件任务,转换结果出错了, 则统一抛出此`code` * `ntv_method_not_found`-> 如果Native处理未定义此插件, 则统一抛出此`code` * `ntv_permission_reject`->如果Native处理过程中遇到未授权, 则统一抛出此`code`, 注意如果权限需要细分, 则catch住使用业务data.xx契约定义 * `ntv_view_window_cancelled`->如果Native带有VIEW视窗,通常需要提供cancel取消的能力, 则统一抛出此`code`, 如需要细分则使用业务data.xx契约定义 */ code: "fabric_catched_error" | "ntv_method_not_found" | "ntv_input_error" | "ntv_parse_error" | "ntv_permission_reject" | "ntv_view_window_cancelled" | string; /** * 业务报文数据存放, 根据业务场景约定, 比如文件上传, 可能包含complete参数, 表示当前还为完成, * 为了方便, data里面也同时传回complete, 不使用协议层的complete参数. */ data: T; /** * 业务报文数据存放, Native端解析出错, 异常, 或者发生了什么不可预知的错误的时候会放到message里面 */ message?: string; }; /** * 注册同步回调函数的函数类型 * @param data 接收native主动调用的参数对象 * @returns 同步回调给native的数据(`ICallbackToNtvData`) */ export type RegisterSyncCallback = (data: IFromNtvData) => FabricCallbackData; /** * 注册异步回调函数的函数类型 * @param data 接收native主动调用的参数对象 */ export type RegisterAsyncCallback = (data: IFromNtvData, /** * @param data 异步回调给native的数据(`ICallbackToNtvData`) * @param complete default is `true` */ callback: (data: FabricCallbackData, complete?: boolean) => void) => void; /** * call is overload definition, we must make sure that the priority of `signature` as below */ export interface WebviewJavascriptBridgeApi { /** * Call Native API In javascript `synchronous call` with `void` return * @param method */ call(method: TMethod): void; /** * Call Native API In javascript `synchronous call` * @example * ```ts * const result = call('http'); * console.log(result.code); * ``` */ call(method: TMethod): FabricCallbackData; /** * Call Native API In javascript `synchronous call` with options with `void` return * @param method * @param options */ call(method: TMethod, options: TOptions): void; /** * Call Native API In javascript `synchronous call` * @example * ```ts * const result1 = call('http', { name: 'name' }); * console.log(result1.code); * ``` */ call(method: TMethod, options: TOptions): FabricCallbackData; /** * Call Native API In javascript `asynchronous call` * @example * ```ts * call('http', function (data) { * console.log(data.code); * }); * ``` */ call(method: TMethod, callback: ReceiveNtvCallback): void; /** * Call Native API In javascript `asynchronous call` * @example * ```ts * call('http', { name: 'ddd' }, function (data) { * console.log(data.code); * }); * ``` */ call(method: TMethod, options: TOptions, callback?: string | ReceiveNtvCallback): void; /** * 注册一个同步方法 * @param method 方法名, 字符串, 可以带命名空间e.g. `addValue`、`http.addValue` * @param fun 注册内容体, 函数, 或者对象(里面包含多个函数) */ registerSync(name: string, fun: RegisterSyncCallback | RegisterPlainObject): void; /** * 注册一个异步方法 * @param method 方法名, 字符串, 可以带命名空间e.g. `addValue`、`http.addValue` * @param fun 注册内容体, 函数, 或者对象(里面包含多个函数) */ registerAsync(name: string, fun: RegisterAsyncCallback | RegisterPlainObject): void; /** * Native内置接口, 判断指定调用的接口是否存在. * @param name 接口名称 * @param type android 只支持`all`, 此参数用处不大. */ ntvHasMethod: (name: string, type?: "all") => boolean; /** * 当存在 Native主动call->web提供的注册接口的情况(registerSync,registerAsync). * 我们需要考虑等待Web端接口注册完毕, 才处理存储的native提前发过来的消息(android)或者告知native可以调用web注册的接口了(ios) */ webIsReady(): void; /** * 函数check window 一个变量是否存在,给一个最大的等待时间,如果超过这个时间还是没有这个变量,则认为是不存在的。 * @param methodName Android的插件方法名, 支持 path 检测。 * @param maxWaitTime 最大等待时间, 默认500毫秒 * @returns true 插件准备就绪,false 插件未准备就绪 */ awaitNtvPluginReady(methodName: string, maxWaitTime?: number): Promise; } export declare const core: WebviewJavascriptBridgeApi; export {};