UNPKG

@cloudcome/utils-uni

Version:
108 lines (107 loc) 4 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const _helpers = require("./_helpers.cjs"); const error = require("./error.cjs"); const object = require("@cloudcome/utils-core/object"); const _try = require("@cloudcome/utils-core/try"); const type = require("@cloudcome/utils-core/type"); const error$1 = require("@cloudcome/utils-core/error"); function parseCloudModuleOutput(output, fallbackErrorMessage = "") { if (output.errCode) { throw error.createCloudObjectError(output.errMsg || fallbackErrorMessage, output.errCode); } return object.objectOmit(output, ["errCode", "errMsg"]); } async function respondCloudMethod(fn, append) { try { const data = await fn(); return { errCode: 0, errMsg: "", data, ...append }; } catch (err) { console.error("respondCloudObject error"); console.error(err); const err2 = error$1.errorNormalize(err); return { errCode: err2.errCode || -1, errMsg: err2.errMsg || err2.message || "", // @ts-ignore data: null, ...append }; } } function buildCloudMethodCreator(options) { const buildOptions = object.objectDefaults(options || {}, { requiredUserErrCode: "uni-id-check-token-failed", requiredUserErrMsg: "需要登录后才能进行此操作", onlyLocalEnvErrMsg: "运行环境不匹配", respondAppend: () => ({}) }); const createCloudMethod = (arg0, arg1, arg2) => { const optionsSource = type.isFunction(arg0) ? arg1 : arg2; const createOptions = object.objectDefaults(optionsSource || {}, { requiredUser: false, onlyLocalEnv: false }); return async function(input) { return await respondCloudMethod(async () => { const runtimeEnv = this.getCloudInfo().runtimeEnv; if (createOptions.onlyLocalEnv && runtimeEnv !== "local") { throw error.createCloudObjectError(buildOptions.onlyLocalEnvErrMsg); } const user = await _parseAppendUser(this, options?.uniIdCommonModule); const append = { options: createOptions, user }; const context = Object.assign(this, append); if (createOptions.requiredUser && !user.id) { throw error.createCloudObjectError(buildOptions.requiredUserErrMsg, buildOptions.requiredUserErrCode); } if (type.isFunction(arg0)) { return await arg0(context); } const parsed = arg0.safeParse(input); if (!parsed.success) { console.log(parsed.error.issues); const issue0 = parsed.error?.issues?.[0]; if (issue0?.code === "custom") throw issue0.message; throw new Error("请求数据不正确"); } return await arg1(context, parsed.data); }, buildOptions.respondAppend(this)); }; }; return createCloudMethod; } async function _parseAppendUser(objectThis, uniIdCommonModule) { const appendUser = { id: "", role: [], permission: [], isAdmin: false }; if (!uniIdCommonModule) return appendUser; const uic = uniIdCommonModule.createInstance({ clientInfo: objectThis.getClientInfo() }); const [err1, user] = await _try.tryFlatten(uic.checkToken(objectThis.getUniIdToken() || "")); if (!user) return appendUser; const [err2, userData] = _try.tryFlatten(() => parseCloudModuleOutput(user)); if (!userData) return appendUser; appendUser.id = userData.uid || ""; appendUser.role = userData.role || []; appendUser.permission = userData.permission || []; appendUser.isAdmin = appendUser.role.includes("admin") && appendUser.permission.length === 0; return appendUser; } exports.parseCloudMethodOutput = _helpers.parseCloudMethodOutput; exports.createCloudObjectError = error.createCloudObjectError; exports.buildCloudMethodCreator = buildCloudMethodCreator; exports.parseCloudModuleOutput = parseCloudModuleOutput; exports.respondCloudMethod = respondCloudMethod; //# sourceMappingURL=cloud.cjs.map