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
JavaScript
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