提交 00a8f9f7 编写于 作者: fxy060608's avatar fxy060608

Merge branch 'dev' of https://github.com/dcloudio/uni-app into nvue-dev

...@@ -40,7 +40,198 @@ const camelize = cached((str) => { ...@@ -40,7 +40,198 @@ const camelize = cached((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}); });
const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const HOOKS = [
'invoke',
'success',
'fail',
'complete',
'returnValue'
];
const globalInterceptors = {};
const scopedInterceptors = {};
function mergeHook (parentVal, childVal) {
const res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal : [childVal]
: parentVal;
return res
? dedupeHooks(res)
: res
}
function dedupeHooks (hooks) {
const res = [];
for (let i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
function removeHook (hooks, hook) {
const index = hooks.indexOf(hook);
if (index !== -1) {
hooks.splice(index, 1);
}
}
function mergeInterceptorHook (interceptor, option) {
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
}
});
}
function removeInterceptorHook (interceptor, option) {
if (!interceptor || !option) {
return
}
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
removeHook(interceptor[hook], option[hook]);
}
});
}
function addInterceptor (method, option) {
if (typeof method === 'string' && isPlainObject(option)) {
mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
} else if (isPlainObject(method)) {
mergeInterceptorHook(globalInterceptors, method);
}
}
function removeInterceptor (method, option) {
if (typeof method === 'string') {
if (isPlainObject(option)) {
removeInterceptorHook(scopedInterceptors[method], option);
} else {
delete scopedInterceptors[method];
}
} else if (isPlainObject(method)) {
removeInterceptorHook(globalInterceptors, method);
}
}
function wrapperHook (hook) {
return function (data) {
return hook(data) || data
}
}
function isPromise (obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
}
function queue (hooks, data) {
let promise = false;
for (let i = 0; i < hooks.length; i++) {
const hook = hooks[i];
if (promise) {
promise = Promise.then(wrapperHook(hook));
} else {
const res = hook(data);
if (isPromise(res)) {
promise = Promise.resolve(res);
}
if (res === false) {
return {
then () {}
}
}
}
}
return promise || {
then (callback) {
return callback(data)
}
}
}
function wrapperOptions (interceptor, options = {}) {
['success', 'fail', 'complete'].forEach(name => {
if (Array.isArray(interceptor[name])) {
const oldCallback = options[name];
options[name] = function callbackInterceptor (res) {
queue(interceptor[name], res).then((res) => {
/* eslint-disable no-mixed-operators */
return isFn(oldCallback) && oldCallback(res) || res
});
};
}
});
return options
}
function wrapperReturnValue (method, returnValue) {
const returnValueHooks = [];
if (Array.isArray(globalInterceptors.returnValue)) {
returnValueHooks.push(...globalInterceptors.returnValue);
}
const interceptor = scopedInterceptors[method];
if (interceptor && Array.isArray(interceptor.returnValue)) {
returnValueHooks.push(...interceptor.returnValue);
}
returnValueHooks.forEach(hook => {
returnValue = hook(returnValue) || returnValue;
});
return returnValue
}
function getApiInterceptorHooks (method) {
const interceptor = Object.create(null);
Object.keys(globalInterceptors).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = globalInterceptors[hook].slice();
}
});
const scopedInterceptor = scopedInterceptors[method];
if (scopedInterceptor) {
Object.keys(scopedInterceptor).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
}
});
}
return interceptor
}
function invokeApi (method, api, options, ...params) {
const interceptor = getApiInterceptorHooks(method);
if (interceptor && Object.keys(interceptor).length) {
if (Array.isArray(interceptor.invoke)) {
const res = queue(interceptor.invoke, options);
return res.then((options) => {
return api(wrapperOptions(interceptor, options), ...params)
})
} else {
return api(wrapperOptions(interceptor, options), ...params)
}
}
return api(options, ...params)
}
const promiseInterceptor = {
returnValue (res) {
if (!isPromise(res)) {
return res
}
return res.then(res => {
return res[1]
}).catch(res => {
return res[0]
})
}
};
const SYNC_API_RE =
/^\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/; const CONTEXT_API_RE = /^create|Manager$/;
...@@ -81,10 +272,10 @@ function promisify (name, api) { ...@@ -81,10 +272,10 @@ function promisify (name, api) {
} }
return function promiseApi (options = {}, ...params) { return function promiseApi (options = {}, ...params) {
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api(options, ...params) return wrapperReturnValue(name, invokeApi(name, api, options, ...params))
} }
return handlePromise(new Promise((resolve, reject) => { return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
api(Object.assign({}, options, { invokeApi(name, api, Object.assign({}, options, {
success: resolve, success: resolve,
fail: reject fail: reject
}), ...params); }), ...params);
...@@ -100,7 +291,7 @@ function promisify (name, api) { ...@@ -100,7 +291,7 @@ function promisify (name, api) {
) )
}; };
} }
})) })))
} }
} }
...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) { ...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) {
return number < 0 ? -result : result return number < 0 ? -result : result
} }
const interceptors = {
promiseInterceptor
};
var baseApi = /*#__PURE__*/Object.freeze({
upx2px: upx2px,
interceptors: interceptors,
addInterceptor: addInterceptor,
removeInterceptor: removeInterceptor
});
const protocols = {}; const protocols = {};
const todos = []; const todos = [];
const canIUses = []; const canIUses = [];
...@@ -1224,8 +1428,8 @@ let uni = {}; ...@@ -1224,8 +1428,8 @@ let uni = {};
if (typeof Proxy !== 'undefined' && "app-plus" !== 'app-plus') { if (typeof Proxy !== 'undefined' && "app-plus" !== 'app-plus') {
uni = new Proxy({}, { uni = new Proxy({}, {
get (target, name) { get (target, name) {
if (name === 'upx2px') { if (baseApi[name]) {
return upx2px return baseApi[name]
} }
if (api[name]) { if (api[name]) {
return promisify(name, api[name]) return promisify(name, api[name])
...@@ -1239,8 +1443,10 @@ if (typeof Proxy !== 'undefined' && "app-plus" !== 'app-plus') { ...@@ -1239,8 +1443,10 @@ if (typeof Proxy !== 'undefined' && "app-plus" !== 'app-plus') {
return promisify(name, wrapper(name, wx[name])) return promisify(name, wrapper(name, wx[name]))
} }
}); });
} else { } else {
uni.upx2px = upx2px; Object.keys(baseApi).forEach(name => {
uni[name] = baseApi[name];
});
Object.keys(eventApi).forEach(name => { Object.keys(eventApi).forEach(name => {
uni[name] = eventApi[name]; uni[name] = eventApi[name];
...@@ -1258,12 +1464,12 @@ if (typeof Proxy !== 'undefined' && "app-plus" !== 'app-plus') { ...@@ -1258,12 +1464,12 @@ if (typeof Proxy !== 'undefined' && "app-plus" !== 'app-plus') {
} }
{ {
if (typeof global !== 'undefined') { if (typeof global !== 'undefined') {
global.uni = uni; global.uni = uni;
global.UniEmitter = eventApi; global.UniEmitter = eventApi;
} }
} }
wx.createApp = createApp; wx.createApp = createApp;
wx.createPage = createPage; wx.createPage = createPage;
wx.createComponent = createComponent; wx.createComponent = createComponent;
......
{ {
"name": "@dcloudio/uni-app-plus", "name": "@dcloudio/uni-app-plus",
"version": "0.0.247", "version": "0.0.248",
"description": "uni-app app-plus", "description": "uni-app app-plus",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
...@@ -40,7 +40,198 @@ const camelize = cached((str) => { ...@@ -40,7 +40,198 @@ const camelize = cached((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}); });
const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const HOOKS = [
'invoke',
'success',
'fail',
'complete',
'returnValue'
];
const globalInterceptors = {};
const scopedInterceptors = {};
function mergeHook (parentVal, childVal) {
const res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal : [childVal]
: parentVal;
return res
? dedupeHooks(res)
: res
}
function dedupeHooks (hooks) {
const res = [];
for (let i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
function removeHook (hooks, hook) {
const index = hooks.indexOf(hook);
if (index !== -1) {
hooks.splice(index, 1);
}
}
function mergeInterceptorHook (interceptor, option) {
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
}
});
}
function removeInterceptorHook (interceptor, option) {
if (!interceptor || !option) {
return
}
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
removeHook(interceptor[hook], option[hook]);
}
});
}
function addInterceptor (method, option) {
if (typeof method === 'string' && isPlainObject(option)) {
mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
} else if (isPlainObject(method)) {
mergeInterceptorHook(globalInterceptors, method);
}
}
function removeInterceptor (method, option) {
if (typeof method === 'string') {
if (isPlainObject(option)) {
removeInterceptorHook(scopedInterceptors[method], option);
} else {
delete scopedInterceptors[method];
}
} else if (isPlainObject(method)) {
removeInterceptorHook(globalInterceptors, method);
}
}
function wrapperHook (hook) {
return function (data) {
return hook(data) || data
}
}
function isPromise (obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
}
function queue (hooks, data) {
let promise = false;
for (let i = 0; i < hooks.length; i++) {
const hook = hooks[i];
if (promise) {
promise = Promise.then(wrapperHook(hook));
} else {
const res = hook(data);
if (isPromise(res)) {
promise = Promise.resolve(res);
}
if (res === false) {
return {
then () {}
}
}
}
}
return promise || {
then (callback) {
return callback(data)
}
}
}
function wrapperOptions (interceptor, options = {}) {
['success', 'fail', 'complete'].forEach(name => {
if (Array.isArray(interceptor[name])) {
const oldCallback = options[name];
options[name] = function callbackInterceptor (res) {
queue(interceptor[name], res).then((res) => {
/* eslint-disable no-mixed-operators */
return isFn(oldCallback) && oldCallback(res) || res
});
};
}
});
return options
}
function wrapperReturnValue (method, returnValue) {
const returnValueHooks = [];
if (Array.isArray(globalInterceptors.returnValue)) {
returnValueHooks.push(...globalInterceptors.returnValue);
}
const interceptor = scopedInterceptors[method];
if (interceptor && Array.isArray(interceptor.returnValue)) {
returnValueHooks.push(...interceptor.returnValue);
}
returnValueHooks.forEach(hook => {
returnValue = hook(returnValue) || returnValue;
});
return returnValue
}
function getApiInterceptorHooks (method) {
const interceptor = Object.create(null);
Object.keys(globalInterceptors).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = globalInterceptors[hook].slice();
}
});
const scopedInterceptor = scopedInterceptors[method];
if (scopedInterceptor) {
Object.keys(scopedInterceptor).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
}
});
}
return interceptor
}
function invokeApi (method, api, options, ...params) {
const interceptor = getApiInterceptorHooks(method);
if (interceptor && Object.keys(interceptor).length) {
if (Array.isArray(interceptor.invoke)) {
const res = queue(interceptor.invoke, options);
return res.then((options) => {
return api(wrapperOptions(interceptor, options), ...params)
})
} else {
return api(wrapperOptions(interceptor, options), ...params)
}
}
return api(options, ...params)
}
const promiseInterceptor = {
returnValue (res) {
if (!isPromise(res)) {
return res
}
return res.then(res => {
return res[1]
}).catch(res => {
return res[0]
})
}
};
const SYNC_API_RE =
/^\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/; const CONTEXT_API_RE = /^create|Manager$/;
...@@ -81,10 +272,10 @@ function promisify (name, api) { ...@@ -81,10 +272,10 @@ function promisify (name, api) {
} }
return function promiseApi (options = {}, ...params) { return function promiseApi (options = {}, ...params) {
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api(options, ...params) return wrapperReturnValue(name, invokeApi(name, api, options, ...params))
} }
return handlePromise(new Promise((resolve, reject) => { return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
api(Object.assign({}, options, { invokeApi(name, api, Object.assign({}, options, {
success: resolve, success: resolve,
fail: reject fail: reject
}), ...params); }), ...params);
...@@ -100,7 +291,7 @@ function promisify (name, api) { ...@@ -100,7 +291,7 @@ function promisify (name, api) {
) )
}; };
} }
})) })))
} }
} }
...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) { ...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) {
return number < 0 ? -result : result return number < 0 ? -result : result
} }
const interceptors = {
promiseInterceptor
};
var baseApi = /*#__PURE__*/Object.freeze({
upx2px: upx2px,
interceptors: interceptors,
addInterceptor: addInterceptor,
removeInterceptor: removeInterceptor
});
// 不支持的 API 列表 // 不支持的 API 列表
const todos = [ const todos = [
'saveImageToPhotosAlbum', 'saveImageToPhotosAlbum',
...@@ -1796,8 +2000,8 @@ let uni = {}; ...@@ -1796,8 +2000,8 @@ let uni = {};
if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') { if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') {
uni = new Proxy({}, { uni = new Proxy({}, {
get (target, name) { get (target, name) {
if (name === 'upx2px') { if (baseApi[name]) {
return upx2px return baseApi[name]
} }
if (api[name]) { if (api[name]) {
return promisify(name, api[name]) return promisify(name, api[name])
...@@ -1819,8 +2023,10 @@ if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') { ...@@ -1819,8 +2023,10 @@ if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') {
return promisify(name, wrapper(name, my[name])) return promisify(name, wrapper(name, my[name]))
} }
}); });
} else { } else {
uni.upx2px = upx2px; Object.keys(baseApi).forEach(name => {
uni[name] = baseApi[name];
});
{ {
Object.keys(todoApis).forEach(name => { Object.keys(todoApis).forEach(name => {
...@@ -1845,7 +2051,7 @@ if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') { ...@@ -1845,7 +2051,7 @@ if (typeof Proxy !== 'undefined' && "mp-alipay" !== 'app-plus') {
} }
}); });
} }
my.createApp = createApp; my.createApp = createApp;
my.createPage = createPage; my.createPage = createPage;
my.createComponent = createComponent; my.createComponent = createComponent;
......
{ {
"name": "@dcloudio/uni-mp-alipay", "name": "@dcloudio/uni-mp-alipay",
"version": "0.0.821", "version": "0.0.822",
"description": "uni-app mp-alipay", "description": "uni-app mp-alipay",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
...@@ -40,7 +40,198 @@ const camelize = cached((str) => { ...@@ -40,7 +40,198 @@ const camelize = cached((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}); });
const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const HOOKS = [
'invoke',
'success',
'fail',
'complete',
'returnValue'
];
const globalInterceptors = {};
const scopedInterceptors = {};
function mergeHook (parentVal, childVal) {
const res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal : [childVal]
: parentVal;
return res
? dedupeHooks(res)
: res
}
function dedupeHooks (hooks) {
const res = [];
for (let i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
function removeHook (hooks, hook) {
const index = hooks.indexOf(hook);
if (index !== -1) {
hooks.splice(index, 1);
}
}
function mergeInterceptorHook (interceptor, option) {
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
}
});
}
function removeInterceptorHook (interceptor, option) {
if (!interceptor || !option) {
return
}
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
removeHook(interceptor[hook], option[hook]);
}
});
}
function addInterceptor (method, option) {
if (typeof method === 'string' && isPlainObject(option)) {
mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
} else if (isPlainObject(method)) {
mergeInterceptorHook(globalInterceptors, method);
}
}
function removeInterceptor (method, option) {
if (typeof method === 'string') {
if (isPlainObject(option)) {
removeInterceptorHook(scopedInterceptors[method], option);
} else {
delete scopedInterceptors[method];
}
} else if (isPlainObject(method)) {
removeInterceptorHook(globalInterceptors, method);
}
}
function wrapperHook (hook) {
return function (data) {
return hook(data) || data
}
}
function isPromise (obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
}
function queue (hooks, data) {
let promise = false;
for (let i = 0; i < hooks.length; i++) {
const hook = hooks[i];
if (promise) {
promise = Promise.then(wrapperHook(hook));
} else {
const res = hook(data);
if (isPromise(res)) {
promise = Promise.resolve(res);
}
if (res === false) {
return {
then () {}
}
}
}
}
return promise || {
then (callback) {
return callback(data)
}
}
}
function wrapperOptions (interceptor, options = {}) {
['success', 'fail', 'complete'].forEach(name => {
if (Array.isArray(interceptor[name])) {
const oldCallback = options[name];
options[name] = function callbackInterceptor (res) {
queue(interceptor[name], res).then((res) => {
/* eslint-disable no-mixed-operators */
return isFn(oldCallback) && oldCallback(res) || res
});
};
}
});
return options
}
function wrapperReturnValue (method, returnValue) {
const returnValueHooks = [];
if (Array.isArray(globalInterceptors.returnValue)) {
returnValueHooks.push(...globalInterceptors.returnValue);
}
const interceptor = scopedInterceptors[method];
if (interceptor && Array.isArray(interceptor.returnValue)) {
returnValueHooks.push(...interceptor.returnValue);
}
returnValueHooks.forEach(hook => {
returnValue = hook(returnValue) || returnValue;
});
return returnValue
}
function getApiInterceptorHooks (method) {
const interceptor = Object.create(null);
Object.keys(globalInterceptors).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = globalInterceptors[hook].slice();
}
});
const scopedInterceptor = scopedInterceptors[method];
if (scopedInterceptor) {
Object.keys(scopedInterceptor).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
}
});
}
return interceptor
}
function invokeApi (method, api, options, ...params) {
const interceptor = getApiInterceptorHooks(method);
if (interceptor && Object.keys(interceptor).length) {
if (Array.isArray(interceptor.invoke)) {
const res = queue(interceptor.invoke, options);
return res.then((options) => {
return api(wrapperOptions(interceptor, options), ...params)
})
} else {
return api(wrapperOptions(interceptor, options), ...params)
}
}
return api(options, ...params)
}
const promiseInterceptor = {
returnValue (res) {
if (!isPromise(res)) {
return res
}
return res.then(res => {
return res[1]
}).catch(res => {
return res[0]
})
}
};
const SYNC_API_RE =
/^\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/; const CONTEXT_API_RE = /^create|Manager$/;
...@@ -81,10 +272,10 @@ function promisify (name, api) { ...@@ -81,10 +272,10 @@ function promisify (name, api) {
} }
return function promiseApi (options = {}, ...params) { return function promiseApi (options = {}, ...params) {
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api(options, ...params) return wrapperReturnValue(name, invokeApi(name, api, options, ...params))
} }
return handlePromise(new Promise((resolve, reject) => { return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
api(Object.assign({}, options, { invokeApi(name, api, Object.assign({}, options, {
success: resolve, success: resolve,
fail: reject fail: reject
}), ...params); }), ...params);
...@@ -100,7 +291,7 @@ function promisify (name, api) { ...@@ -100,7 +291,7 @@ function promisify (name, api) {
) )
}; };
} }
})) })))
} }
} }
...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) { ...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) {
return number < 0 ? -result : result return number < 0 ? -result : result
} }
const interceptors = {
promiseInterceptor
};
var baseApi = /*#__PURE__*/Object.freeze({
upx2px: upx2px,
interceptors: interceptors,
addInterceptor: addInterceptor,
removeInterceptor: removeInterceptor
});
var previewImage = { var previewImage = {
args (fromArgs) { args (fromArgs) {
let currentIndex = parseInt(fromArgs.current); let currentIndex = parseInt(fromArgs.current);
...@@ -229,9 +433,14 @@ const protocols = { ...@@ -229,9 +433,14 @@ const protocols = {
// TODO // TODO
// data 不支持 ArrayBuffer // data 不支持 ArrayBuffer
// method 不支持 TRACE, CONNECT // method 不支持 TRACE, CONNECT
// dataType 可取值为 string/json
return { return {
method: 'method' method: 'method',
dataType (type) {
return {
name: 'dataType',
value: type === 'json' ? type : 'string'
}
}
} }
} }
}, },
...@@ -1377,8 +1586,8 @@ let uni = {}; ...@@ -1377,8 +1586,8 @@ let uni = {};
if (typeof Proxy !== 'undefined' && "mp-baidu" !== 'app-plus') { if (typeof Proxy !== 'undefined' && "mp-baidu" !== 'app-plus') {
uni = new Proxy({}, { uni = new Proxy({}, {
get (target, name) { get (target, name) {
if (name === 'upx2px') { if (baseApi[name]) {
return upx2px return baseApi[name]
} }
if (api[name]) { if (api[name]) {
return promisify(name, api[name]) return promisify(name, api[name])
...@@ -1400,8 +1609,10 @@ if (typeof Proxy !== 'undefined' && "mp-baidu" !== 'app-plus') { ...@@ -1400,8 +1609,10 @@ if (typeof Proxy !== 'undefined' && "mp-baidu" !== 'app-plus') {
return promisify(name, wrapper(name, swan[name])) return promisify(name, wrapper(name, swan[name]))
} }
}); });
} else { } else {
uni.upx2px = upx2px; Object.keys(baseApi).forEach(name => {
uni[name] = baseApi[name];
});
{ {
Object.keys(todoApis).forEach(name => { Object.keys(todoApis).forEach(name => {
...@@ -1426,7 +1637,7 @@ if (typeof Proxy !== 'undefined' && "mp-baidu" !== 'app-plus') { ...@@ -1426,7 +1637,7 @@ if (typeof Proxy !== 'undefined' && "mp-baidu" !== 'app-plus') {
} }
}); });
} }
swan.createApp = createApp; swan.createApp = createApp;
swan.createPage = createPage; swan.createPage = createPage;
swan.createComponent = createComponent; swan.createComponent = createComponent;
......
{ {
"name": "@dcloudio/uni-mp-baidu", "name": "@dcloudio/uni-mp-baidu",
"version": "0.0.850", "version": "0.0.852",
"description": "uni-app mp-baidu", "description": "uni-app mp-baidu",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
...@@ -40,7 +40,198 @@ const camelize = cached((str) => { ...@@ -40,7 +40,198 @@ const camelize = cached((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}); });
const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const HOOKS = [
'invoke',
'success',
'fail',
'complete',
'returnValue'
];
const globalInterceptors = {};
const scopedInterceptors = {};
function mergeHook (parentVal, childVal) {
const res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal : [childVal]
: parentVal;
return res
? dedupeHooks(res)
: res
}
function dedupeHooks (hooks) {
const res = [];
for (let i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
function removeHook (hooks, hook) {
const index = hooks.indexOf(hook);
if (index !== -1) {
hooks.splice(index, 1);
}
}
function mergeInterceptorHook (interceptor, option) {
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
}
});
}
function removeInterceptorHook (interceptor, option) {
if (!interceptor || !option) {
return
}
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
removeHook(interceptor[hook], option[hook]);
}
});
}
function addInterceptor (method, option) {
if (typeof method === 'string' && isPlainObject(option)) {
mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
} else if (isPlainObject(method)) {
mergeInterceptorHook(globalInterceptors, method);
}
}
function removeInterceptor (method, option) {
if (typeof method === 'string') {
if (isPlainObject(option)) {
removeInterceptorHook(scopedInterceptors[method], option);
} else {
delete scopedInterceptors[method];
}
} else if (isPlainObject(method)) {
removeInterceptorHook(globalInterceptors, method);
}
}
function wrapperHook (hook) {
return function (data) {
return hook(data) || data
}
}
function isPromise (obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
}
function queue (hooks, data) {
let promise = false;
for (let i = 0; i < hooks.length; i++) {
const hook = hooks[i];
if (promise) {
promise = Promise.then(wrapperHook(hook));
} else {
const res = hook(data);
if (isPromise(res)) {
promise = Promise.resolve(res);
}
if (res === false) {
return {
then () {}
}
}
}
}
return promise || {
then (callback) {
return callback(data)
}
}
}
function wrapperOptions (interceptor, options = {}) {
['success', 'fail', 'complete'].forEach(name => {
if (Array.isArray(interceptor[name])) {
const oldCallback = options[name];
options[name] = function callbackInterceptor (res) {
queue(interceptor[name], res).then((res) => {
/* eslint-disable no-mixed-operators */
return isFn(oldCallback) && oldCallback(res) || res
});
};
}
});
return options
}
function wrapperReturnValue (method, returnValue) {
const returnValueHooks = [];
if (Array.isArray(globalInterceptors.returnValue)) {
returnValueHooks.push(...globalInterceptors.returnValue);
}
const interceptor = scopedInterceptors[method];
if (interceptor && Array.isArray(interceptor.returnValue)) {
returnValueHooks.push(...interceptor.returnValue);
}
returnValueHooks.forEach(hook => {
returnValue = hook(returnValue) || returnValue;
});
return returnValue
}
function getApiInterceptorHooks (method) {
const interceptor = Object.create(null);
Object.keys(globalInterceptors).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = globalInterceptors[hook].slice();
}
});
const scopedInterceptor = scopedInterceptors[method];
if (scopedInterceptor) {
Object.keys(scopedInterceptor).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
}
});
}
return interceptor
}
function invokeApi (method, api, options, ...params) {
const interceptor = getApiInterceptorHooks(method);
if (interceptor && Object.keys(interceptor).length) {
if (Array.isArray(interceptor.invoke)) {
const res = queue(interceptor.invoke, options);
return res.then((options) => {
return api(wrapperOptions(interceptor, options), ...params)
})
} else {
return api(wrapperOptions(interceptor, options), ...params)
}
}
return api(options, ...params)
}
const promiseInterceptor = {
returnValue (res) {
if (!isPromise(res)) {
return res
}
return res.then(res => {
return res[1]
}).catch(res => {
return res[0]
})
}
};
const SYNC_API_RE =
/^\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/; const CONTEXT_API_RE = /^create|Manager$/;
...@@ -81,10 +272,10 @@ function promisify (name, api) { ...@@ -81,10 +272,10 @@ function promisify (name, api) {
} }
return function promiseApi (options = {}, ...params) { return function promiseApi (options = {}, ...params) {
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api(options, ...params) return wrapperReturnValue(name, invokeApi(name, api, options, ...params))
} }
return handlePromise(new Promise((resolve, reject) => { return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
api(Object.assign({}, options, { invokeApi(name, api, Object.assign({}, options, {
success: resolve, success: resolve,
fail: reject fail: reject
}), ...params); }), ...params);
...@@ -100,7 +291,7 @@ function promisify (name, api) { ...@@ -100,7 +291,7 @@ function promisify (name, api) {
) )
}; };
} }
})) })))
} }
} }
...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) { ...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) {
return number < 0 ? -result : result return number < 0 ? -result : result
} }
const interceptors = {
promiseInterceptor
};
var baseApi = /*#__PURE__*/Object.freeze({
upx2px: upx2px,
interceptors: interceptors,
addInterceptor: addInterceptor,
removeInterceptor: removeInterceptor
});
var previewImage = { var previewImage = {
args (fromArgs) { args (fromArgs) {
let currentIndex = parseInt(fromArgs.current); let currentIndex = parseInt(fromArgs.current);
...@@ -1263,8 +1467,8 @@ let uni = {}; ...@@ -1263,8 +1467,8 @@ let uni = {};
if (typeof Proxy !== 'undefined' && "mp-qq" !== 'app-plus') { if (typeof Proxy !== 'undefined' && "mp-qq" !== 'app-plus') {
uni = new Proxy({}, { uni = new Proxy({}, {
get (target, name) { get (target, name) {
if (name === 'upx2px') { if (baseApi[name]) {
return upx2px return baseApi[name]
} }
if (api[name]) { if (api[name]) {
return promisify(name, api[name]) return promisify(name, api[name])
...@@ -1286,8 +1490,10 @@ if (typeof Proxy !== 'undefined' && "mp-qq" !== 'app-plus') { ...@@ -1286,8 +1490,10 @@ if (typeof Proxy !== 'undefined' && "mp-qq" !== 'app-plus') {
return promisify(name, wrapper(name, wx[name])) return promisify(name, wrapper(name, wx[name]))
} }
}); });
} else { } else {
uni.upx2px = upx2px; Object.keys(baseApi).forEach(name => {
uni[name] = baseApi[name];
});
{ {
Object.keys(todoApis).forEach(name => { Object.keys(todoApis).forEach(name => {
...@@ -1312,7 +1518,7 @@ if (typeof Proxy !== 'undefined' && "mp-qq" !== 'app-plus') { ...@@ -1312,7 +1518,7 @@ if (typeof Proxy !== 'undefined' && "mp-qq" !== 'app-plus') {
} }
}); });
} }
wx.createApp = createApp; wx.createApp = createApp;
wx.createPage = createPage; wx.createPage = createPage;
wx.createComponent = createComponent; wx.createComponent = createComponent;
......
{ {
"name": "@dcloudio/uni-mp-qq", "name": "@dcloudio/uni-mp-qq",
"version": "0.0.105", "version": "0.0.106",
"description": "uni-app mp-qq", "description": "uni-app mp-qq",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
...@@ -40,7 +40,198 @@ const camelize = cached((str) => { ...@@ -40,7 +40,198 @@ const camelize = cached((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}); });
const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const HOOKS = [
'invoke',
'success',
'fail',
'complete',
'returnValue'
];
const globalInterceptors = {};
const scopedInterceptors = {};
function mergeHook (parentVal, childVal) {
const res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal : [childVal]
: parentVal;
return res
? dedupeHooks(res)
: res
}
function dedupeHooks (hooks) {
const res = [];
for (let i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
function removeHook (hooks, hook) {
const index = hooks.indexOf(hook);
if (index !== -1) {
hooks.splice(index, 1);
}
}
function mergeInterceptorHook (interceptor, option) {
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
}
});
}
function removeInterceptorHook (interceptor, option) {
if (!interceptor || !option) {
return
}
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
removeHook(interceptor[hook], option[hook]);
}
});
}
function addInterceptor (method, option) {
if (typeof method === 'string' && isPlainObject(option)) {
mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
} else if (isPlainObject(method)) {
mergeInterceptorHook(globalInterceptors, method);
}
}
function removeInterceptor (method, option) {
if (typeof method === 'string') {
if (isPlainObject(option)) {
removeInterceptorHook(scopedInterceptors[method], option);
} else {
delete scopedInterceptors[method];
}
} else if (isPlainObject(method)) {
removeInterceptorHook(globalInterceptors, method);
}
}
function wrapperHook (hook) {
return function (data) {
return hook(data) || data
}
}
function isPromise (obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
}
function queue (hooks, data) {
let promise = false;
for (let i = 0; i < hooks.length; i++) {
const hook = hooks[i];
if (promise) {
promise = Promise.then(wrapperHook(hook));
} else {
const res = hook(data);
if (isPromise(res)) {
promise = Promise.resolve(res);
}
if (res === false) {
return {
then () {}
}
}
}
}
return promise || {
then (callback) {
return callback(data)
}
}
}
function wrapperOptions (interceptor, options = {}) {
['success', 'fail', 'complete'].forEach(name => {
if (Array.isArray(interceptor[name])) {
const oldCallback = options[name];
options[name] = function callbackInterceptor (res) {
queue(interceptor[name], res).then((res) => {
/* eslint-disable no-mixed-operators */
return isFn(oldCallback) && oldCallback(res) || res
});
};
}
});
return options
}
function wrapperReturnValue (method, returnValue) {
const returnValueHooks = [];
if (Array.isArray(globalInterceptors.returnValue)) {
returnValueHooks.push(...globalInterceptors.returnValue);
}
const interceptor = scopedInterceptors[method];
if (interceptor && Array.isArray(interceptor.returnValue)) {
returnValueHooks.push(...interceptor.returnValue);
}
returnValueHooks.forEach(hook => {
returnValue = hook(returnValue) || returnValue;
});
return returnValue
}
function getApiInterceptorHooks (method) {
const interceptor = Object.create(null);
Object.keys(globalInterceptors).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = globalInterceptors[hook].slice();
}
});
const scopedInterceptor = scopedInterceptors[method];
if (scopedInterceptor) {
Object.keys(scopedInterceptor).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
}
});
}
return interceptor
}
function invokeApi (method, api, options, ...params) {
const interceptor = getApiInterceptorHooks(method);
if (interceptor && Object.keys(interceptor).length) {
if (Array.isArray(interceptor.invoke)) {
const res = queue(interceptor.invoke, options);
return res.then((options) => {
return api(wrapperOptions(interceptor, options), ...params)
})
} else {
return api(wrapperOptions(interceptor, options), ...params)
}
}
return api(options, ...params)
}
const promiseInterceptor = {
returnValue (res) {
if (!isPromise(res)) {
return res
}
return res.then(res => {
return res[1]
}).catch(res => {
return res[0]
})
}
};
const SYNC_API_RE =
/^\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/; const CONTEXT_API_RE = /^create|Manager$/;
...@@ -81,10 +272,10 @@ function promisify (name, api) { ...@@ -81,10 +272,10 @@ function promisify (name, api) {
} }
return function promiseApi (options = {}, ...params) { return function promiseApi (options = {}, ...params) {
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api(options, ...params) return wrapperReturnValue(name, invokeApi(name, api, options, ...params))
} }
return handlePromise(new Promise((resolve, reject) => { return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
api(Object.assign({}, options, { invokeApi(name, api, Object.assign({}, options, {
success: resolve, success: resolve,
fail: reject fail: reject
}), ...params); }), ...params);
...@@ -100,7 +291,7 @@ function promisify (name, api) { ...@@ -100,7 +291,7 @@ function promisify (name, api) {
) )
}; };
} }
})) })))
} }
} }
...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) { ...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) {
return number < 0 ? -result : result return number < 0 ? -result : result
} }
const interceptors = {
promiseInterceptor
};
var baseApi = /*#__PURE__*/Object.freeze({
upx2px: upx2px,
interceptors: interceptors,
addInterceptor: addInterceptor,
removeInterceptor: removeInterceptor
});
var previewImage = { var previewImage = {
args (fromArgs) { args (fromArgs) {
let currentIndex = parseInt(fromArgs.current); let currentIndex = parseInt(fromArgs.current);
...@@ -1442,8 +1646,8 @@ let uni = {}; ...@@ -1442,8 +1646,8 @@ let uni = {};
if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') { if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') {
uni = new Proxy({}, { uni = new Proxy({}, {
get (target, name) { get (target, name) {
if (name === 'upx2px') { if (baseApi[name]) {
return upx2px return baseApi[name]
} }
if (api[name]) { if (api[name]) {
return promisify(name, api[name]) return promisify(name, api[name])
...@@ -1465,8 +1669,10 @@ if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') { ...@@ -1465,8 +1669,10 @@ if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') {
return promisify(name, wrapper(name, tt[name])) return promisify(name, wrapper(name, tt[name]))
} }
}); });
} else { } else {
uni.upx2px = upx2px; Object.keys(baseApi).forEach(name => {
uni[name] = baseApi[name];
});
{ {
Object.keys(todoApis).forEach(name => { Object.keys(todoApis).forEach(name => {
...@@ -1491,7 +1697,7 @@ if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') { ...@@ -1491,7 +1697,7 @@ if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') {
} }
}); });
} }
tt.createApp = createApp; tt.createApp = createApp;
tt.createPage = createPage; tt.createPage = createPage;
tt.createComponent = createComponent; tt.createComponent = createComponent;
......
{ {
"name": "@dcloudio/uni-mp-toutiao", "name": "@dcloudio/uni-mp-toutiao",
"version": "0.0.345", "version": "0.0.346",
"description": "uni-app mp-toutiao", "description": "uni-app mp-toutiao",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
...@@ -40,7 +40,198 @@ const camelize = cached((str) => { ...@@ -40,7 +40,198 @@ const camelize = cached((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}); });
const SYNC_API_RE = /^\$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; const HOOKS = [
'invoke',
'success',
'fail',
'complete',
'returnValue'
];
const globalInterceptors = {};
const scopedInterceptors = {};
function mergeHook (parentVal, childVal) {
const res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal : [childVal]
: parentVal;
return res
? dedupeHooks(res)
: res
}
function dedupeHooks (hooks) {
const res = [];
for (let i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res
}
function removeHook (hooks, hook) {
const index = hooks.indexOf(hook);
if (index !== -1) {
hooks.splice(index, 1);
}
}
function mergeInterceptorHook (interceptor, option) {
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
}
});
}
function removeInterceptorHook (interceptor, option) {
if (!interceptor || !option) {
return
}
Object.keys(option).forEach(hook => {
if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
removeHook(interceptor[hook], option[hook]);
}
});
}
function addInterceptor (method, option) {
if (typeof method === 'string' && isPlainObject(option)) {
mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
} else if (isPlainObject(method)) {
mergeInterceptorHook(globalInterceptors, method);
}
}
function removeInterceptor (method, option) {
if (typeof method === 'string') {
if (isPlainObject(option)) {
removeInterceptorHook(scopedInterceptors[method], option);
} else {
delete scopedInterceptors[method];
}
} else if (isPlainObject(method)) {
removeInterceptorHook(globalInterceptors, method);
}
}
function wrapperHook (hook) {
return function (data) {
return hook(data) || data
}
}
function isPromise (obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
}
function queue (hooks, data) {
let promise = false;
for (let i = 0; i < hooks.length; i++) {
const hook = hooks[i];
if (promise) {
promise = Promise.then(wrapperHook(hook));
} else {
const res = hook(data);
if (isPromise(res)) {
promise = Promise.resolve(res);
}
if (res === false) {
return {
then () {}
}
}
}
}
return promise || {
then (callback) {
return callback(data)
}
}
}
function wrapperOptions (interceptor, options = {}) {
['success', 'fail', 'complete'].forEach(name => {
if (Array.isArray(interceptor[name])) {
const oldCallback = options[name];
options[name] = function callbackInterceptor (res) {
queue(interceptor[name], res).then((res) => {
/* eslint-disable no-mixed-operators */
return isFn(oldCallback) && oldCallback(res) || res
});
};
}
});
return options
}
function wrapperReturnValue (method, returnValue) {
const returnValueHooks = [];
if (Array.isArray(globalInterceptors.returnValue)) {
returnValueHooks.push(...globalInterceptors.returnValue);
}
const interceptor = scopedInterceptors[method];
if (interceptor && Array.isArray(interceptor.returnValue)) {
returnValueHooks.push(...interceptor.returnValue);
}
returnValueHooks.forEach(hook => {
returnValue = hook(returnValue) || returnValue;
});
return returnValue
}
function getApiInterceptorHooks (method) {
const interceptor = Object.create(null);
Object.keys(globalInterceptors).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = globalInterceptors[hook].slice();
}
});
const scopedInterceptor = scopedInterceptors[method];
if (scopedInterceptor) {
Object.keys(scopedInterceptor).forEach(hook => {
if (hook !== 'returnValue') {
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
}
});
}
return interceptor
}
function invokeApi (method, api, options, ...params) {
const interceptor = getApiInterceptorHooks(method);
if (interceptor && Object.keys(interceptor).length) {
if (Array.isArray(interceptor.invoke)) {
const res = queue(interceptor.invoke, options);
return res.then((options) => {
return api(wrapperOptions(interceptor, options), ...params)
})
} else {
return api(wrapperOptions(interceptor, options), ...params)
}
}
return api(options, ...params)
}
const promiseInterceptor = {
returnValue (res) {
if (!isPromise(res)) {
return res
}
return res.then(res => {
return res[1]
}).catch(res => {
return res[0]
})
}
};
const SYNC_API_RE =
/^\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/; const CONTEXT_API_RE = /^create|Manager$/;
...@@ -81,10 +272,10 @@ function promisify (name, api) { ...@@ -81,10 +272,10 @@ function promisify (name, api) {
} }
return function promiseApi (options = {}, ...params) { return function promiseApi (options = {}, ...params) {
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api(options, ...params) return wrapperReturnValue(name, invokeApi(name, api, options, ...params))
} }
return handlePromise(new Promise((resolve, reject) => { return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
api(Object.assign({}, options, { invokeApi(name, api, Object.assign({}, options, {
success: resolve, success: resolve,
fail: reject fail: reject
}), ...params); }), ...params);
...@@ -100,7 +291,7 @@ function promisify (name, api) { ...@@ -100,7 +291,7 @@ function promisify (name, api) {
) )
}; };
} }
})) })))
} }
} }
...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) { ...@@ -146,6 +337,19 @@ function upx2px (number, newDeviceWidth) {
return number < 0 ? -result : result return number < 0 ? -result : result
} }
const interceptors = {
promiseInterceptor
};
var baseApi = /*#__PURE__*/Object.freeze({
upx2px: upx2px,
interceptors: interceptors,
addInterceptor: addInterceptor,
removeInterceptor: removeInterceptor
});
var previewImage = { var previewImage = {
args (fromArgs) { args (fromArgs) {
let currentIndex = parseInt(fromArgs.current); let currentIndex = parseInt(fromArgs.current);
...@@ -1194,8 +1398,8 @@ let uni = {}; ...@@ -1194,8 +1398,8 @@ let uni = {};
if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') { if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') {
uni = new Proxy({}, { uni = new Proxy({}, {
get (target, name) { get (target, name) {
if (name === 'upx2px') { if (baseApi[name]) {
return upx2px return baseApi[name]
} }
if (api[name]) { if (api[name]) {
return promisify(name, api[name]) return promisify(name, api[name])
...@@ -1217,8 +1421,10 @@ if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') { ...@@ -1217,8 +1421,10 @@ if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') {
return promisify(name, wrapper(name, wx[name])) return promisify(name, wrapper(name, wx[name]))
} }
}); });
} else { } else {
uni.upx2px = upx2px; Object.keys(baseApi).forEach(name => {
uni[name] = baseApi[name];
});
{ {
Object.keys(todoApis).forEach(name => { Object.keys(todoApis).forEach(name => {
...@@ -1243,7 +1449,7 @@ if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') { ...@@ -1243,7 +1449,7 @@ if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') {
} }
}); });
} }
wx.createApp = createApp; wx.createApp = createApp;
wx.createPage = createPage; wx.createPage = createPage;
wx.createComponent = createComponent; wx.createComponent = createComponent;
......
{ {
"name": "@dcloudio/uni-mp-weixin", "name": "@dcloudio/uni-mp-weixin",
"version": "0.0.966", "version": "0.0.967",
"description": "uni-app mp-weixin", "description": "uni-app mp-weixin",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册