{"version":3,"file":"_internal.cjs","names":[],"sources":["../src/std/internal/constants.ts","../src/std/internal/helpers.ts","../src/std/internal/validations.ts"],"sourcesContent":["/**\n * @internal\n * 内部常量。\n */\n\nimport { RESULT_VOID, type AsyncVoidResult } from 'happy-rusty';\n\n/**\n * 异步返回 void 的成功结果常量。\n */\nexport const ASYNC_RESULT_VOID: AsyncVoidResult<never> = /*#__PURE__*/ Promise.resolve(RESULT_VOID);","/**\n * @internal\n * 内部辅助函数。\n */\n\nimport type { FetchTask } from '@happy-ts/fetch-t';\nimport { type IOResult } from 'happy-rusty';\n\n/**\n * 将小游戏失败回调的结果转换为 `Error` 类型。\n *\n * 如果是异步 API 的 `fail` 回调返回的结果通常是 `WechatMinigame.GeneralCallbackResult` 或者变体类型，\n * 如果是同步 API throw 的异常通常是一个类似 `Error` 的类型。\n * @param error - 小游戏错误对象。\n * @returns 转换后的 `Error` 对象。\n */\nexport function miniGameFailureToError(error: WechatMinigame.GeneralCallbackResult | Error): Error {\n    return error instanceof Error\n        ? error\n        // NOTE: 有可能 error 是一个长得像 Error 但不是 Error 实例的对象, 例如: \"statSync:fail no such file or directory\"\n        : new Error(error.errMsg ?? (error as unknown as { message: string; }).message);\n}\n\n/**\n * 将 BufferSource 转换为 Uint8Array。\n * @param data - 需要转换的 BufferSource。\n * @returns Uint8Array。\n */\nexport function bufferSourceToBytes(data: BufferSource): Uint8Array<ArrayBuffer> {\n    if (data instanceof Uint8Array) {\n        return data as Uint8Array<ArrayBuffer>;\n    }\n\n    if (data instanceof ArrayBuffer) {\n        return new Uint8Array(data);\n    }\n\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n    }\n\n    throw new TypeError('Input argument must be an ArrayBuffer or ArrayBufferView');\n}\n\n/**\n * 将 BufferSource 转换为 ArrayBuffer。\n * @param data - 需要转换的 BufferSource。\n * @returns ArrayBuffer。\n */\nexport function bufferSourceToAb(data: BufferSource): ArrayBuffer {\n    if (data instanceof ArrayBuffer) {\n        return data;\n    }\n\n    if (ArrayBuffer.isView(data)) {\n        // 可能存在偏移\n        return data.byteOffset === 0\n            ? data.buffer\n            : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n    }\n\n    throw new TypeError('Input argument must be an ArrayBuffer or ArrayBufferView');\n}\n\n/**\n * 创建一个已失败的 FetchTask 对象。\n * @param errResult - 错误结果。\n * @returns 返回一个已完成的失败 FetchTask。\n */\nexport function createFailedFetchTask<T>(errResult: IOResult<unknown>): FetchTask<T> {\n    return {\n        abort(): void { /* noop */ },\n        get aborted(): boolean { return false; },\n        get result() { return Promise.resolve(errResult.asErr<T>()); },\n    };\n}","/**\n * @internal\n * 断言相关辅助函数。\n */\n\nimport { Err, RESULT_VOID, type VoidIOResult } from 'happy-rusty';\n\n/**\n * 验证传入的值是否为正整数。\n * @param input - 需要验证的值。\n * @param name - 参数名称，用于错误信息。\n * @returns 验证结果，如果不是数字则返回包含 TypeError 的 Err，如果不是正整数则返回包含 Error 的 Err。\n */\nexport function validatePositiveInteger(input: number, name: string): VoidIOResult {\n    if (typeof input !== 'number') {\n        return Err(new TypeError(`Param '${name}' must be a number but received ${typeof input}`));\n    }\n    if (input <= 0 || !Number.isInteger(input)) {\n        return Err(new Error(`Param '${name}' must be a positive integer but received ${input}`));\n    }\n    return RESULT_VOID;\n}\n\n/**\n * 验证传入的值是否为字符串。\n * @param str - 需要验证的值。\n * @param name - 参数名称，用于错误信息。\n * @returns 验证结果，如果不是字符串则返回包含 TypeError 的 Err。\n */\nexport function validateString(str: string, name: string): VoidIOResult {\n    if (typeof str !== 'string') {\n        return Err(new TypeError(`Param '${name}' must be a string but received ${typeof str}`));\n    }\n    return RESULT_VOID;\n}\n\n/**\n * 验证传入的 URL 是否为 `https` 协议。\n * @param url - 需要验证的 URL 字符串。\n * @returns 验证结果，如果不是 https 协议则返回 Err。\n */\nexport function validateSafeUrl(url: string): VoidIOResult {\n    return validateString(url, 'url')\n        .andThen(() => {\n            if (!url.startsWith('https://')) {\n                return Err(new Error(`Param url must start with https:// but received ${url}`));\n            }\n            return RESULT_VOID;\n        });\n}\n\n/**\n * 验证传入的 WebSocket URL 是否为 `wss` 协议。\n * @param socketUrl - 需要验证的 WebSocket URL 字符串。\n * @returns 验证结果，如果不是 wss 协议则返回 Err。\n */\nexport function validateSafeSocketUrl(socketUrl: string): VoidIOResult {\n    return validateString(socketUrl, 'socketUrl')\n        .andThen(() => {\n            if (!socketUrl.startsWith('wss://')) {\n                return Err(new Error(`Param socketUrl must start with wss:// but received ${socketUrl}`));\n            }\n            return RESULT_VOID;\n        });\n}"],"mappings":";;;;;;;;;;AAUA,MAAa,oBAA0D,sBAAQ,QAAQ,YAAA,WAAW;;;;;;;;;;;ACMlG,SAAgB,uBAAuB,OAA4D;CAC/F,OAAO,iBAAiB,QAClB,QAEA,IAAI,MAAM,MAAM,UAAW,MAA0C,OAAO;AACtF;;;;;;AAOA,SAAgB,oBAAoB,MAA6C;CAC7E,IAAI,gBAAgB,YAChB,OAAO;CAGX,IAAI,gBAAgB,aAChB,OAAO,IAAI,WAAW,IAAI;CAG9B,IAAI,YAAY,OAAO,IAAI,GACvB,OAAO,IAAI,WAAW,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;CAGvE,MAAM,IAAI,UAAU,0DAA0D;AAClF;;;;;;AAOA,SAAgB,iBAAiB,MAAiC;CAC9D,IAAI,gBAAgB,aAChB,OAAO;CAGX,IAAI,YAAY,OAAO,IAAI,GAEvB,OAAO,KAAK,eAAe,IACrB,KAAK,SACL,KAAK,OAAO,MAAM,KAAK,YAAY,KAAK,aAAa,KAAK,UAAU;CAG9E,MAAM,IAAI,UAAU,0DAA0D;AAClF;;;;;;AAOA,SAAgB,sBAAyB,WAA4C;CACjF,OAAO;EACH,QAAc,CAAa;EAC3B,IAAI,UAAmB;GAAE,OAAO;EAAO;EACvC,IAAI,SAAS;GAAE,OAAO,QAAQ,QAAQ,UAAU,MAAS,CAAC;EAAG;CACjE;AACJ;;;;;;;;;;;;;AC9DA,SAAgB,wBAAwB,OAAe,MAA4B;CAC/E,IAAI,OAAO,UAAU,UACjB,QAAA,GAAA,YAAA,IAAA,iBAAW,IAAI,UAAU,UAAU,KAAK,kCAAkC,OAAO,OAAO,CAAC;CAE7F,IAAI,SAAS,KAAK,CAAC,OAAO,UAAU,KAAK,GACrC,QAAA,GAAA,YAAA,IAAA,iBAAW,IAAI,MAAM,UAAU,KAAK,4CAA4C,OAAO,CAAC;CAE5F,OAAO,YAAA;AACX;;;;;;;AAQA,SAAgB,eAAe,KAAa,MAA4B;CACpE,IAAI,OAAO,QAAQ,UACf,QAAA,GAAA,YAAA,IAAA,iBAAW,IAAI,UAAU,UAAU,KAAK,kCAAkC,OAAO,KAAK,CAAC;CAE3F,OAAO,YAAA;AACX;;;;;;AAOA,SAAgB,gBAAgB,KAA2B;CACvD,OAAO,eAAe,KAAK,KAAK,CAAC,CAC5B,cAAc;EACX,IAAI,CAAC,IAAI,WAAW,UAAU,GAC1B,QAAA,GAAA,YAAA,IAAA,iBAAW,IAAI,MAAM,mDAAmD,KAAK,CAAC;EAElF,OAAO,YAAA;CACX,CAAC;AACT;;;;;;AAOA,SAAgB,sBAAsB,WAAiC;CACnE,OAAO,eAAe,WAAW,WAAW,CAAC,CACxC,cAAc;EACX,IAAI,CAAC,UAAU,WAAW,QAAQ,GAC9B,QAAA,GAAA,YAAA,IAAA,iBAAW,IAAI,MAAM,uDAAuD,WAAW,CAAC;EAE5F,OAAO,YAAA;CACX,CAAC;AACT"}