@morjs/runtime-web
Version:
mor runtime for web
126 lines • 4.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isFunction = exports.isObject = exports.wait = exports.convertBlobToBase64 = exports.appendQueryToUrl = exports.getPageAsKey = exports.pageOnReadyCallApi = exports.createCallbackManager = exports.shouldBeObject = exports.getParameterError = void 0;
function upperCaseFirstLetter(str) {
if (typeof str !== 'string')
return str;
str = str.replace(/^./, (match) => match.toUpperCase());
return str;
}
function getParameterError({ name = '', para, correct, wrong }) {
const parameter = para ? `parameter.${para}` : 'parameter';
const errorType = upperCaseFirstLetter(wrong == null ? 'Null' : typeof wrong);
return `${name}:fail parameter error: ${parameter} should be ${correct} instead of ${errorType}`;
}
exports.getParameterError = getParameterError;
function shouldBeObject(target) {
if (target && typeof target === 'object')
return { res: true };
return {
res: false,
msg: getParameterError({
correct: 'Object',
wrong: target
})
};
}
exports.shouldBeObject = shouldBeObject;
const createCallbackManager = () => {
const callbacks = [];
const add = (opt) => {
callbacks.push(opt);
};
const remove = (opt) => {
const index = callbacks.indexOf(opt);
if (index < 0)
return;
callbacks.splice(index, 1);
};
const trigger = (...args) => {
callbacks.forEach((opt) => {
if (typeof opt === 'function') {
opt(...args);
}
else {
const { callback, ctx } = opt;
callback.call(ctx, ...args);
}
});
};
return {
add,
trigger,
remove
};
};
exports.createCallbackManager = createCallbackManager;
const pageOnReadyCallApi = (my) => {
// 有些 api 是 后续 components 中挂载的,为了能正确代理,做异步处理
setTimeout(() => {
// 维护需要做pageOnReady处理的列表
const apiList = ['setNavigationBar'];
apiList.forEach((api) => {
const func = my[api];
my[api] = (...params) => {
my.$pageOnReadyCall(() => {
func.apply(my, params);
});
return func.apply(my, params);
};
});
});
};
exports.pageOnReadyCallApi = pageOnReadyCallApi;
const getPageAsKey = () => {
if (typeof getCurrentPages !== 'function')
return '';
const pages = getCurrentPages();
const { length } = pages;
if (length <= 0)
return '';
return pages[length - 1].route;
};
exports.getPageAsKey = getPageAsKey;
const appendQueryToUrl = (url = '', query = {}) => {
const hadQuery = url.indexOf('?') > -1;
const keys = Object.keys(query);
const { length: keysLength } = keys;
let queryString = '';
if (keysLength > 0) {
keys.map((key, index) => {
queryString += `${key}=${query[key]}`;
if (index !== keysLength - 1)
queryString += '&';
});
}
if (!hadQuery)
return `${url}?${queryString}`;
const hadParams = url.indexOf('=') > -1;
if (!hadParams)
return url + queryString;
const endWithSeparator = url[url.length - 1] === '&';
if (endWithSeparator)
return url + queryString;
return `${url}&${queryString}`;
};
exports.appendQueryToUrl = appendQueryToUrl;
const convertBlobToBase64 = (blob) => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onerror = reject;
reader.onload = () => {
resolve(reader.result);
};
reader.readAsDataURL(blob);
});
exports.convertBlobToBase64 = convertBlobToBase64;
const wait = (millisecond = 67) => {
return new Promise((resolve) => {
setTimeout(resolve, millisecond);
});
};
exports.wait = wait;
const isObject = (param) => param && typeof param === 'object';
exports.isObject = isObject;
const isFunction = (param) => typeof param === 'function';
exports.isFunction = isFunction;
//# sourceMappingURL=index.js.map