Sparkling Method SDK - TypeScript

sparkling-method 包提供了 JS 与原生之间方法调用的 JS 端管道。 它是所有 Sparkling 方法包(router、storage、media 等)的基础。

安装

npm install sparkling-method

快速开始

import pipe from 'sparkling-method';

// 回调风格
pipe.call('router.open', { scheme: 'hybrid://lynxview_page?bundle=main.lynx.bundle' }, (res) => {
  console.log(res.code, res.msg);
});

// 异步风格
const data = await pipe.callAsync('storage.getItem', { key: 'token' });
console.log(data);

API

pipe.call(methodMap, params, callback, options?)

通过回调调用原生方法。

参数类型描述
methodMapstring | MethodMap方法名(如 'router.open')或 { module, method } 对象
paramsTParams传递给原生端的请求参数
callback(response: unknown) => void接收原生响应的回调函数
optionsRecord<string, unknown>预留参数

示例:

import pipe from 'sparkling-method';

pipe.call('storage.setItem', { key: 'lang', data: 'en' }, (res) => {
  console.log(res);
});

pipe.callAsync(methodMap, params, options?, timeout?)

调用原生方法并返回 Promise

参数类型默认值描述
methodMapstring | MethodMap-方法名或 { module, method } 对象
paramsTParams-请求参数
optionsRecord<string, unknown>undefined预留参数
timeoutnumber30000超时时间(毫秒)

返回 Promise<TResponse> —— 当 code === 0 时 resolve response.data,否则 reject。

示例:

import pipe from 'sparkling-method';

try {
  const data = await pipe.callAsync('storage.getItem', { key: 'lang' });
  console.log(data); // { data: 'en' }
} catch (err) {
  console.error(err); // { code: number, msg: string }
}

pipe.callWithTimeout(methodMap, params, timeout, options?)

callAsync 的便捷封装,可指定自定义超时时间。

参数类型描述
methodMapstring | MethodMap方法名或 { module, method } 对象
paramsTParams请求参数
timeoutnumber超时时间(毫秒)
optionsRecord<string, unknown>预留参数

返回 Promise<TResponse>

pipe.on(eventName, callback)

订阅原生事件。

参数类型描述
eventNamestring要监听的事件名
callbackEventCallback(event: unknown) => void

返回 EventCallback,可用于 off() 取消订阅。

pipe.off(eventName, callback)

取消订阅原生事件。

参数类型描述
eventNamestring事件名
callbackEventCallback之前传给 on() 的回调函数

类型定义

interface PipeResponse<T = unknown> {
  code: number;
  msg: string;
  data?: T;
}

interface PipeErrorResponse {
  code: number;
  msg: string;
  data?: undefined;
}

interface PipeCallOptions {
  timeout?: number;
  priority?: 'high' | 'normal' | 'low';
  retryCount?: number;
  retryDelay?: number;
}

type MethodMap = string | {
  module: string;
  method: string;
};

type EventCallback = (event: unknown) => void;

响应码

状态码含义
0成功
非零值错误 —— 请查看 msg 获取详细信息

与方法包的关系

Sparkling 方法包(sparkling-navigationsparkling-storagesparkling-media 等)是 sparkling-method 的轻量封装。它们底层调用 pipe.call(),使用预定义的方法名, 如 router.openstorage.setItemmedia.chooseMedia 等。

你可以直接使用 sparkling-method 来:

  • 调用你自己实现的自定义原生方法
  • 监听原生事件
  • 构建你自己的方法包