UNPKG

minigame-std

Version:

Cross-platform standard library for WeChat minigame and web browsers with unified APIs for crypto, fs, fetch, storage, and more.

113 lines (112 loc) 4.31 kB
import { Err, RESULT_VOID } from "happy-rusty"; //#region src/std/internal/constants.ts /** * @internal * 内部常量。 */ /** * 异步返回 void 的成功结果常量。 */ const ASYNC_RESULT_VOID = /*#__PURE__*/ Promise.resolve(RESULT_VOID); //#endregion //#region src/std/internal/helpers.ts /** * 将小游戏失败回调的结果转换为 `Error` 类型。 * * 如果是异步 API 的 `fail` 回调返回的结果通常是 `WechatMinigame.GeneralCallbackResult` 或者变体类型, * 如果是同步 API throw 的异常通常是一个类似 `Error` 的类型。 * @param error - 小游戏错误对象。 * @returns 转换后的 `Error` 对象。 */ function miniGameFailureToError(error) { return error instanceof Error ? error : new Error(error.errMsg ?? error.message); } /** * 将 BufferSource 转换为 Uint8Array。 * @param data - 需要转换的 BufferSource。 * @returns Uint8Array。 */ function bufferSourceToBytes(data) { if (data instanceof Uint8Array) return data; if (data instanceof ArrayBuffer) return new Uint8Array(data); if (ArrayBuffer.isView(data)) return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); throw new TypeError("Input argument must be an ArrayBuffer or ArrayBufferView"); } /** * 将 BufferSource 转换为 ArrayBuffer。 * @param data - 需要转换的 BufferSource。 * @returns ArrayBuffer。 */ function bufferSourceToAb(data) { if (data instanceof ArrayBuffer) return data; if (ArrayBuffer.isView(data)) return data.byteOffset === 0 ? data.buffer : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); throw new TypeError("Input argument must be an ArrayBuffer or ArrayBufferView"); } /** * 创建一个已失败的 FetchTask 对象。 * @param errResult - 错误结果。 * @returns 返回一个已完成的失败 FetchTask。 */ function createFailedFetchTask(errResult) { return { abort() {}, get aborted() { return false; }, get result() { return Promise.resolve(errResult.asErr()); } }; } //#endregion //#region src/std/internal/validations.ts /** * @internal * 断言相关辅助函数。 */ /** * 验证传入的值是否为正整数。 * @param input - 需要验证的值。 * @param name - 参数名称,用于错误信息。 * @returns 验证结果,如果不是数字则返回包含 TypeError 的 Err,如果不是正整数则返回包含 Error 的 Err。 */ function validatePositiveInteger(input, name) { if (typeof input !== "number") return Err(/* @__PURE__ */ new TypeError(`Param '${name}' must be a number but received ${typeof input}`)); if (input <= 0 || !Number.isInteger(input)) return Err(/* @__PURE__ */ new Error(`Param '${name}' must be a positive integer but received ${input}`)); return RESULT_VOID; } /** * 验证传入的值是否为字符串。 * @param str - 需要验证的值。 * @param name - 参数名称,用于错误信息。 * @returns 验证结果,如果不是字符串则返回包含 TypeError 的 Err。 */ function validateString(str, name) { if (typeof str !== "string") return Err(/* @__PURE__ */ new TypeError(`Param '${name}' must be a string but received ${typeof str}`)); return RESULT_VOID; } /** * 验证传入的 URL 是否为 `https` 协议。 * @param url - 需要验证的 URL 字符串。 * @returns 验证结果,如果不是 https 协议则返回 Err。 */ function validateSafeUrl(url) { return validateString(url, "url").andThen(() => { if (!url.startsWith("https://")) return Err(/* @__PURE__ */ new Error(`Param url must start with https:// but received ${url}`)); return RESULT_VOID; }); } /** * 验证传入的 WebSocket URL 是否为 `wss` 协议。 * @param socketUrl - 需要验证的 WebSocket URL 字符串。 * @returns 验证结果,如果不是 wss 协议则返回 Err。 */ function validateSafeSocketUrl(socketUrl) { return validateString(socketUrl, "socketUrl").andThen(() => { if (!socketUrl.startsWith("wss://")) return Err(/* @__PURE__ */ new Error(`Param socketUrl must start with wss:// but received ${socketUrl}`)); return RESULT_VOID; }); } //#endregion export { ASYNC_RESULT_VOID, bufferSourceToAb, bufferSourceToBytes, createFailedFetchTask, miniGameFailureToError, validatePositiveInteger, validateSafeSocketUrl, validateSafeUrl, validateString }; //# sourceMappingURL=_internal.mjs.map