@cloudcome/utils-uni
Version:
cloudcome utils for uni-app
108 lines (107 loc) • 4 kB
JavaScript
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
;