diff --git a/packages/uni-mp-alipay/dist/uni.api.esm.js b/packages/uni-mp-alipay/dist/uni.api.esm.js deleted file mode 100644 index bf7bdb278653e65491d1d7ae799cc0e76bef3dba..0000000000000000000000000000000000000000 --- a/packages/uni-mp-alipay/dist/uni.api.esm.js +++ /dev/null @@ -1,1434 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -const eventChannels = {}; -const eventChannelStack = []; -let id = 0; -function initEventChannel(events, cache = true) { - id++; - const eventChannel = new my.EventChannel(id, events); - if (cache) { - eventChannels[id] = eventChannel; - eventChannelStack.push(eventChannel); - } - return eventChannel; -} -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} -const navigateTo = { - args(fromArgs) { - const id = initEventChannel(fromArgs.events).id; - if (fromArgs.url) { - fromArgs.url = - fromArgs.url + - (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + - '__id__=' + - id; - } - }, - returnValue(fromRes) { - fromRes.eventChannel = getEventChannel(); - }, -}; - -my.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - my.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return my.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`支付宝小程序 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`支付宝小程序 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = my[options.name || methodName].apply(my, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return my.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, my[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -function addSafeAreaInsets(fromRes, toRes) { - if (fromRes.safeArea) { - const safeArea = fromRes.safeArea; - toRes.safeAreaInsets = { - top: safeArea.top, - left: safeArea.left, - right: fromRes.windowWidth - safeArea.right, - bottom: fromRes.windowHeight - safeArea.bottom, - }; - } -} - -const redirectTo = {}; - -const getProvider = initGetProvider({ - oauth: ['alipay'], - share: ['alipay'], - payment: ['alipay'], - push: ['alipay'], -}); -function setStorageSync(key, data) { - return my.setStorageSync({ - key, - data, - }); -} -function getStorageSync(key) { - const result = my.getStorageSync({ - key, - }); - // 支付宝平台会返回一个 success 值,但是目前测试的结果这个始终是 true。当没有存储数据的时候,其它平台会返回空字符串。 - return result.data !== null ? result.data : ''; -} -function removeStorageSync(key) { - return my.removeStorageSync({ - key, - }); -} -function startGyroscope(args) { - if (hasOwn(args, 'interval')) { - console.warn('支付宝小程序 startGyroscope暂不支持interval'); - } - args.success && - args.success({ - errMsg: 'startGyroscope:ok', - }); - args.complete && - args.complete({ - errMsg: 'startGyroscope:ok', - }); -} -function createExecCallback(execCallback) { - return function wrapperExecCallback(res) { - this.actions.forEach((action, index) => { - (action._$callbacks || []).forEach((callback) => { - callback(res[index]); - }); - }); - if (isFunction(execCallback)) { - execCallback(res); - } - }; -} -function addCallback(callback) { - if (isFunction(callback)) { - const action = this.actions[this.actions.length - 1]; - if (action) { - (action._$callbacks || (action._$callbacks = [])).push(callback); - } - } -} -function createSelectorQuery() { - const query = my.createSelectorQuery(); - const oldExec = query.exec; - const oldScrollOffset = query.scrollOffset; - const oldBoundingClientRect = query.boundingClientRect; - query.exec = function exec(callback) { - return oldExec.call(this, createExecCallback(callback).bind(this)); - }; - query.scrollOffset = function scrollOffset(callback) { - const ret = oldScrollOffset.call(this); - addCallback.call(this, callback); - return ret; - }; - query.boundingClientRect = function boundingClientRect(callback) { - const ret = oldBoundingClientRect.call(this); - addCallback.call(this, callback); - return ret; - }; - if (!query.fields) { - query.fields = function ({ rect, size, scrollOffset }, callback) { - if (rect || size) { - this.boundingClientRect(); - } - if (scrollOffset) { - this.scrollOffset(); - } - addCallback.call(this, callback); - return this; - }; - } - if (!query.in) { - query.in = function () { - return this; - }; - } - return query; -} -function createIntersectionObserver(component, options) { - if (options && options.observeAll) { - options.selectAll = options.observeAll; - delete options.observeAll; - } - return my.createIntersectionObserver(options); -} - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider, - setStorageSync: setStorageSync, - getStorageSync: getStorageSync, - removeStorageSync: removeStorageSync, - startGyroscope: startGyroscope, - createSelectorQuery: createSelectorQuery, - createIntersectionObserver: createIntersectionObserver -}); - -function handleNetworkInfo(fromRes, toRes) { - const nextworkType = fromRes.networkType; - switch (nextworkType) { - case 'NOTREACHABLE': - toRes.networkType = 'none'; - break; - case 'WWAN': - // TODO ? - toRes.networkType = '3g'; - break; - default: - toRes.networkType = fromRes.networkType.toLowerCase(); - break; - } -} -function handleSystemInfo(fromRes, toRes) { - addSafeAreaInsets(fromRes, toRes); - let platform = fromRes.platform ? fromRes.platform.toLowerCase() : 'devtools'; - if (!~['android', 'ios'].indexOf(platform)) { - platform = 'devtools'; - } - toRes.platform = platform; -} -function returnValue(methodName, res = {}) { - // 通用 returnValue 解析 - if (res.error || res.errorMessage) { - res.errMsg = `${methodName}:fail ${res.errorMessage || res.error}`; - delete res.error; - delete res.errorMessage; - } - else { - res.errMsg = `${methodName}:ok`; - } - return res; -} -const request = { - name: my.canIUse('request') ? 'request' : 'httpRequest', - args(fromArgs) { - const method = fromArgs.method || 'GET'; - if (!fromArgs.header) { - // 默认增加 header 参数,方便格式化 content-type - fromArgs.header = {}; - } - const headers = { - 'content-type': 'application/json', - }; - Object.keys(fromArgs.header).forEach((key) => { - headers[key.toLocaleLowerCase()] = fromArgs.header[key]; - }); - return { - header() { - return { - name: 'headers', - value: headers, - }; - }, - data(data) { - // 钉钉小程序在content-type为application/json时需上传字符串形式data,使用my.dd在真机运行钉钉小程序时不能正确判断 - if (my.canIUse('saveFileToDingTalk') && - method.toUpperCase() === 'POST' && - headers['content-type'].indexOf('application/json') === 0 && - isPlainObject(data)) { - return { - name: 'data', - value: JSON.stringify(data), - }; - } - return { - name: 'data', - value: data, - }; - }, - method: 'method', - responseType: false, - }; - }, - returnValue: { - status: 'statusCode', - headers: 'header', - }, -}; -const setNavigationBarColor = { - name: 'setNavigationBar', - args: { - frontColor: false, - animation: false, - }, -}; -const setNavigationBarTitle = { - name: 'setNavigationBar', -}; -function showModal({ showCancel = true } = {}) { - if (showCancel) { - return { - name: 'confirm', - args: { - cancelColor: false, - confirmColor: false, - cancelText: 'cancelButtonText', - confirmText: 'confirmButtonText', - }, - returnValue(fromRes, toRes) { - toRes.confirm = fromRes.confirm; - toRes.cancel = !fromRes.confirm; - }, - }; - } - return { - name: 'alert', - args: { - confirmColor: false, - confirmText: 'buttonText', - }, - returnValue(fromRes, toRes) { - toRes.confirm = true; - toRes.cancel = false; - }, - }; -} -function showToast({ icon = 'success' } = {}) { - const args = { - title: 'content', - icon: 'type', - duration: false, - image: false, - mask: false, - }; - if (icon === 'loading') { - return { - name: 'showLoading', - args, - }; - } - return { - name: 'showToast', - args, - }; -} -const showActionSheet = { - name: 'showActionSheet', - args: { - itemList: 'items', - itemColor: false, - }, - returnValue: { - index: 'tapIndex', - }, -}; -const showLoading = { - args: { - title: 'content', - mask: false, - }, -}; -const uploadFile = { - args: { - name: 'fileName', - }, - // 从测试结果看,是有返回对象的,文档上没有说明。 -}; -const downloadFile = { - returnValue: { - apFilePath: 'tempFilePath', - }, -}; -const getFileInfo = { - args: { - filePath: 'apFilePath', - }, -}; -const compressImage = { - args(fromArgs, toArgs) { - toArgs.compressLevel = 4; - if (fromArgs && fromArgs.quality) { - toArgs.compressLevel = Math.floor(fromArgs.quality / 26); - } - if (fromArgs.src) { - toArgs.apFilePaths = [fromArgs.src]; - } - }, - returnValue(fromRes, toRes) { - const apFilePaths = fromRes.apFilePaths; - if (apFilePaths && apFilePaths.length) { - toRes.tempFilePath = apFilePaths[0]; - } - }, -}; -const chooseVideo = { - // 支付宝小程序文档中未找到(仅在getSetting处提及),但实际可用 - returnValue: { - apFilePath: 'tempFilePath', - }, -}; -const connectSocket = { - args: { - method: false, - protocols: false, - }, - // TODO 有没有返回值还需要测试下 -}; -const chooseImage = { - returnValue(result) { - var _a, _b; - const hasTempFilePaths = hasOwn(result, 'tempFilePaths') && result.tempFilePaths; - if (hasOwn(result, 'apFilePaths') && !hasTempFilePaths) { - result.tempFilePaths = []; - (_a = result.apFilePaths) === null || _a === void 0 ? void 0 : _a.forEach((apFilePath) => { var _a; return (_a = result.tempFilePaths) === null || _a === void 0 ? void 0 : _a.push(apFilePath); }); - } - if (!hasOwn(result, 'tempFiles') && hasTempFilePaths) { - result.tempFiles = []; - (_b = result.tempFilePaths) === null || _b === void 0 ? void 0 : _b.forEach((tempFilePath) => { var _a; return (_a = result.tempFiles) === null || _a === void 0 ? void 0 : _a.push({ path: tempFilePath }); }); - } - return {}; - }, -}; -const previewImage = { - args(fromArgs, toArgs) { - // 支付宝小程序的 current 是索引值,而非图片地址。 - const currentIndex = Number(fromArgs.current); - if (isNaN(currentIndex)) { - if (fromArgs.current && isArray(fromArgs.urls)) { - const index = fromArgs.urls.indexOf(fromArgs.current); - toArgs.current = ~index ? index : 0; - } - } - else { - toArgs.current = currentIndex; - } - return { - indicator: false, - loop: false, - }; - }, -}; -const saveFile = { - args: { - tempFilePath: 'apFilePath', - }, - returnValue: { - apFilePath: 'savedFilePath', - }, -}; -const getSavedFileInfo = { - args: { - filePath: 'apFilePath', - }, -}; -const getSavedFileList = { - returnValue(fromRes, toRes) { - toRes.fileList = fromRes.fileList.map((file) => { - return { - filePath: file.apFilePath, - createTime: file.createTime, - size: file.size, - }; - }); - }, -}; -const removeSavedFile = { - args: { - filePath: 'apFilePath', - }, -}; -const getLocation = { - args: { - type: false, - altitude: false, - }, -}; -const openLocation = { - args: { - // TODO address 参数在阿里上是必传的 - }, -}; -const getNetworkType = { - returnValue: handleNetworkInfo, -}; -const onNetworkStatusChange = { - returnValue: handleNetworkInfo, -}; -const stopAccelerometer = { - name: 'offAccelerometerChange', -}; -const stopCompass = { - name: 'offCompassChange', -}; -const scanCode = { - name: 'scan', - args: { - onlyFromCamera: 'hideAlbum', - }, - returnValue: { - code: 'result', - }, -}; -const setClipboardData = { - name: 'setClipboard', - args: { - data: 'text', - }, -}; -const getClipboardData = { - name: 'getClipboard', - returnValue: { - text: 'data', - }, -}; -const pageScrollTo = { - args: { - duration: false, - }, -}; -const login = { - name: 'getAuthCode', - returnValue: { - authCode: 'code', - }, -}; -const getUserInfo = { - name: my.canIUse('getOpenUserInfo') ? 'getOpenUserInfo' : 'getAuthUserInfo', - returnValue(fromRes, toRes) { - if (my.canIUse('getOpenUserInfo')) { - let response; - try { - response = JSON.parse(fromRes.response).response; - } - catch (e) { } - if (response) { - toRes.userInfo = response; - toRes.userInfo.avatarUrl = response.avatar; - delete response.avatar; - } - } - else { - toRes.userInfo = { - openId: '', - nickName: fromRes.nickName, - avatarUrl: fromRes.avatar, - }; - } - }, -}; -const requestPayment = { - name: 'tradePay', - args: { - orderInfo: 'tradeNO', - }, -}; -const getBLEDeviceServices = { - returnValue(fromRes, toRes) { - toRes.services = fromRes.services.map((item) => { - return { - uuid: item.serviceId, - isPrimary: item.isPrimary, - }; - }); - }, -}; -const createBLEConnection = { - name: 'connectBLEDevice', - args: { - timeout: false, - }, -}; -const closeBLEConnection = { - name: 'disconnectBLEDevice', -}; -const onBLEConnectionStateChange = { - name: 'onBLEConnectionStateChanged', -}; -const makePhoneCall = { - args: { - phoneNumber: 'number', - }, -}; -const stopGyroscope = { - name: 'offGyroscopeChange', -}; -const getSystemInfo = { - returnValue: handleSystemInfo, -}; -const getSystemInfoSync = { - returnValue: handleSystemInfo, -}; -// 文档没提到,但是实测可用。 -const canvasToTempFilePath = { - returnValue(fromRes, toRes) { - // 真机的情况下会有 tempFilePath 这个值,因此需要主动修改。 - toRes.tempFilePath = fromRes.apFilePath; - }, -}; -const setScreenBrightness = { - args: { - value: 'brightness', - }, -}; -const getScreenBrightness = { - returnValue: { - brightness: 'value', - }, -}; -const showShareMenu = { - name: 'showSharePanel', -}; -const hideHomeButton = { - name: 'hideBackHome', -}; -const saveImageToPhotosAlbum = { - name: 'saveImage', - args: { - filePath: 'url', - }, -}; -const saveVideoToPhotosAlbum = { - args: { - filePath: 'src', - }, -}; -const chooseAddress = { - name: 'getAddress', - returnValue(fromRes, toRes) { - const info = fromRes.result || {}; - toRes.userName = info.fullname; - toRes.countyName = info.country; - toRes.provinceName = info.prov; - toRes.cityName = info.city; - toRes.detailInfo = info.address; - toRes.telNumber = info.mobilePhone; - toRes.errMsg = toRes.errMsg + ' ' + fromRes.resultStatus; - }, -}; - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - returnValue: returnValue, - request: request, - setNavigationBarColor: setNavigationBarColor, - setNavigationBarTitle: setNavigationBarTitle, - showModal: showModal, - showToast: showToast, - showActionSheet: showActionSheet, - showLoading: showLoading, - uploadFile: uploadFile, - downloadFile: downloadFile, - getFileInfo: getFileInfo, - compressImage: compressImage, - chooseVideo: chooseVideo, - connectSocket: connectSocket, - chooseImage: chooseImage, - previewImage: previewImage, - saveFile: saveFile, - getSavedFileInfo: getSavedFileInfo, - getSavedFileList: getSavedFileList, - removeSavedFile: removeSavedFile, - getLocation: getLocation, - openLocation: openLocation, - getNetworkType: getNetworkType, - onNetworkStatusChange: onNetworkStatusChange, - stopAccelerometer: stopAccelerometer, - stopCompass: stopCompass, - scanCode: scanCode, - setClipboardData: setClipboardData, - getClipboardData: getClipboardData, - pageScrollTo: pageScrollTo, - login: login, - getUserInfo: getUserInfo, - requestPayment: requestPayment, - getBLEDeviceServices: getBLEDeviceServices, - createBLEConnection: createBLEConnection, - closeBLEConnection: closeBLEConnection, - onBLEConnectionStateChange: onBLEConnectionStateChange, - makePhoneCall: makePhoneCall, - stopGyroscope: stopGyroscope, - getSystemInfo: getSystemInfo, - getSystemInfoSync: getSystemInfoSync, - canvasToTempFilePath: canvasToTempFilePath, - setScreenBrightness: setScreenBrightness, - getScreenBrightness: getScreenBrightness, - showShareMenu: showShareMenu, - hideHomeButton: hideHomeButton, - saveImageToPhotosAlbum: saveImageToPhotosAlbum, - saveVideoToPhotosAlbum: saveVideoToPhotosAlbum, - chooseAddress: chooseAddress, - redirectTo: redirectTo, - navigateTo: navigateTo -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-mp-alipay/dist/uni.mp.esm.js b/packages/uni-mp-alipay/dist/uni.mp.esm.js deleted file mode 100644 index 4327c98533e27c6b9e47eab4dc22b3ea3bba3c4a..0000000000000000000000000000000000000000 --- a/packages/uni-mp-alipay/dist/uni.mp.esm.js +++ /dev/null @@ -1,1442 +0,0 @@ -import { isPlainObject, isArray, extend, hyphenate, isObject, hasOwn, toNumber, capitalize, isFunction, NOOP, EMPTY_OBJ, camelize } from '@vue/shared'; -import { onUnmounted, injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_BACK_PRESS = 'onBackPress'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; -const ON_SHARE_APP_MESSAGE = 'onShareAppMessage'; - -class EventChannel { - constructor(id, events) { - this.id = id; - this.listener = {}; - this.emitCache = {}; - if (events) { - Object.keys(events).forEach((name) => { - this.on(name, events[name]); - }); - } - } - emit(eventName, ...args) { - const fns = this.listener[eventName]; - if (!fns) { - return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args); - } - fns.forEach((opt) => { - opt.fn.apply(opt.fn, args); - }); - this.listener[eventName] = fns.filter((opt) => opt.type !== 'once'); - } - on(eventName, fn) { - this._addListener(eventName, 'on', fn); - this._clearCache(eventName); - } - once(eventName, fn) { - this._addListener(eventName, 'once', fn); - this._clearCache(eventName); - } - off(eventName, fn) { - const fns = this.listener[eventName]; - if (!fns) { - return; - } - if (fn) { - for (let i = 0; i < fns.length;) { - if (fns[i].fn === fn) { - fns.splice(i, 1); - i--; - } - i++; - } - } - else { - delete this.listener[eventName]; - } - } - _clearCache(eventName) { - const cacheArgs = this.emitCache[eventName]; - if (cacheArgs) { - for (; cacheArgs.length > 0;) { - this.emit.apply(this, [eventName, ...cacheArgs.shift()]); - } - } - } - _addListener(eventName, type, fn) { - (this.listener[eventName] || (this.listener[eventName] = [])).push({ - fn, - type, - }); - } -} - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function findVmByVueId(instance, vuePid) { - // 标准 vue3 中 没有 $children,定制了内核 - const $children = instance.$children; - // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) - for (let i = $children.length - 1; i >= 0; i--) { - const childVm = $children[i]; - if (childVm.$scope._$vueId === vuePid) { - return childVm; - } - } - // 反向递归查找 - let parentVm; - for (let i = $children.length - 1; i >= 0; i--) { - parentVm = findVmByVueId($children[i], vuePid); - if (parentVm) { - return parentVm; - } - } -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - { - const vnode = this.$.vnode; - const props = vnode && vnode.props; - if (props && props[`on${capitalize(event)}`]) { - return; - } - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - Object.defineProperty(instance, 'slots', { - get() { - return this.$scope && this.$scope.props.$slots; - }, - }); - } - ctx.getOpenerEventChannel = function () { - if (!this.__eventChannel__) { - this.__eventChannel__ = new EventChannel(); - } - return this.__eventChannel__; - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - { - initScopedSlotsParams(instance); - } - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - { - return my[method] && my[method].apply(my, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} -const center = {}; -const parents = {}; -function initScopedSlotsParams(instance) { - const ctx = instance.ctx; - ctx.$hasScopedSlotsParams = function (vueId) { - const has = center[vueId]; - if (!has) { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - return has; - }; - ctx.$getScopedSlotsParams = function (vueId, name, key) { - const data = center[vueId]; - if (data) { - const object = data[name] || {}; - return key ? object[key] : object; - } - else { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - }; - ctx.$setScopedSlotsParams = function (name, value) { - const vueIds = instance.attrs.vueId; - if (vueIds) { - const vueId = vueIds.split(',')[0]; - const object = (center[vueId] = center[vueId] || {}); - object[name] = value; - if (parents[vueId]) { - parents[vueId].$forceUpdate(); - } - } - }; - onUnmounted(function () { - const propsData = instance.attrs; - const vueId = propsData && propsData.vueId; - if (vueId) { - delete center[vueId]; - delete parents[vueId]; - } - }, instance); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook(mpOptions, hook, excludes)); -} - -my.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - my.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -{ - HOOKS.push(ON_SHARE_APP_MESSAGE); -} -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(my.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - { - return prop; - } -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function onAliAuthError(method, $event) { - $event.type = 'getphonenumber'; - $event.detail.errMsg = - 'getPhoneNumber:fail Error: ' + - $event.detail.errorMessage(this)[method]($event); -} -function onAliGetAuthorize(method, $event) { - my.getPhoneNumber({ - success: (res) => { - $event.type = 'getphonenumber'; - const response = JSON.parse(res.response).response; - if (response.code === '10000') { - // success - $event.detail.errMsg = 'getPhoneNumber:ok'; - $event.detail.encryptedData = res.response; - } - else { - $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + res.response; - } - this[method]($event); - }, - fail: () => { - $event.type = 'getphonenumber'; - $event.detail.errMsg = 'getPhoneNumber:fail'; - this[method]($event); - }, - }); -} -function parse(appOptions) { - const oldOnLaunch = appOptions.onLaunch; - appOptions.onLaunch = function onLaunch(options) { - oldOnLaunch.call(this, options); - if (!this.$vm) { - return; - } - const globalProperties = this.$vm.$app.config.globalProperties; - if (!globalProperties.$onAliAuthError) { - globalProperties.$onAliAuthError = onAliAuthError; - globalProperties.$onAliGetAuthorize = onAliGetAuthorize; - } - }; -} - -var parseAppOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - parse: parse -}); - -function handleLink$1(event) { - // detail 是微信,value 是百度(dipatch) - const detail = (event.detail || - event.value); - const vuePid = detail.vuePid; - let parentVm; - if (vuePid) { - parentVm = findVmByVueId(this.$vm, vuePid); - } - if (!parentVm) { - parentVm = this.$vm; - } - detail.parent = parentVm; -} - -function equal(a, b) { - if (a === b) - return true; - if (a && b && typeof a === 'object' && typeof b === 'object') { - const arrA = isArray(a); - const arrB = isArray(b); - let i, length, key; - if (arrA && arrB) { - length = a.length; - if (length !== b.length) - return false; - for (i = length; i-- !== 0;) { - if (!equal(a[i], b[i])) - return false; - } - return true; - } - if (arrA !== arrB) - return false; - const dateA = a instanceof Date; - const dateB = b instanceof Date; - if (dateA !== dateB) - return false; - if (dateA && dateB) - return a.getTime() === b.getTime(); - const regexpA = a instanceof RegExp; - const regexpB = b instanceof RegExp; - if (regexpA !== regexpB) - return false; - if (regexpA && regexpB) - return a.toString() === b.toString(); - const keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) { - return false; - } - for (i = length; i-- !== 0;) { - if (!hasOwn(b, keys[i])) - return false; - } - for (i = length; i-- !== 0;) { - key = keys[i]; - if (!equal(a[key], b[key])) - return false; - } - return true; - } - return false; -} - -const isComponent2 = my.canIUse('component2'); -const mocks = ['$id']; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initBehavior({ properties }) { - const props = {}; - Object.keys(properties).forEach((key) => { - props[key] = properties[key].value; - }); - return { - props, - }; -} -function initRelation(mpInstance, detail) { - mpInstance.props.onVueInit(detail); -} -function initSpecialMethods(mpInstance) { - if (!mpInstance.$vm) { - return; - } - let path = mpInstance.is || mpInstance.route; - if (!path) { - return; - } - if (path.indexOf('/') === 0) { - path = path.substr(1); - } - const specialMethods = my.specialMethods && my.specialMethods[path]; - if (specialMethods) { - specialMethods.forEach((method) => { - if (isFunction(mpInstance.$vm[method])) { - mpInstance[method] = function (event) { - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - // TODO normalizeEvent - mpInstance.$vm[method](event); - }; - } - }); - } -} -function initChildVues(mpInstance) { - // 此时需保证当前 mpInstance 已经存在 $vm - if (!mpInstance.$vm) { - return; - } - const childVues = mpInstance._$childVues; - if (childVues) { - childVues.forEach((relationOptions) => { - // 父子关系 - handleLink$1.call(mpInstance, { - detail: relationOptions, - }); - const { mpInstance: childMPInstance, createComponent } = relationOptions; - childMPInstance.$vm = createComponent(relationOptions.parent); - initSpecialMethods(childMPInstance); - if (relationOptions.parent) { - handleRef.call(relationOptions.parent.$scope, childMPInstance); - } - initChildVues(childMPInstance); - childMPInstance.$vm.$callHook('mounted'); - childMPInstance.$vm.$callHook(ON_READY); - }); - } - delete mpInstance._$childVues; -} -// TODO vue3 -function handleRef(ref) { - if (!ref) { - return; - } - const refName = ref.props['data-ref']; - const refInForName = ref.props['data-ref-in-for']; - if (!refName && !refInForName) { - return; - } - const instance = this.$vm.$; - const refs = instance.refs === EMPTY_OBJ ? (instance.refs = {}) : instance.refs; - if (refName) { - refs[refName] = ref.$vm || ref; - } - else if (refInForName) { - (refs[refInForName] || (refs[refInForName] = [])).push(ref.$vm || ref); - } -} -function triggerEvent(type, detail) { - const handler = this.props[customize('on-' + type)]; - if (!handler) { - return; - } - const eventOpts = this.props['data-event-opts']; - const target = { - dataset: { - eventOpts, - }, - }; - handler({ - type: customize(type), - target, - currentTarget: target, - detail, - }); -} -const IGNORES = ['$slots', '$scopedSlots']; -function createObserver(isDidUpdate = false) { - return function observe(props) { - const prevProps = isDidUpdate ? props : this.props; - const nextProps = isDidUpdate ? this.props : props; - if (equal(prevProps, nextProps)) { - return; - } - Object.keys(prevProps).forEach((name) => { - if (IGNORES.indexOf(name) === -1) { - const prevValue = prevProps[name]; - const nextValue = nextProps[name]; - if (!isFunction(prevValue) && - !isFunction(nextValue) && - !equal(prevValue, nextValue)) { - this.$vm.$.props[name] = nextProps[name]; - } - } - }); - }; -} -const handleLink = (function () { - if (isComponent2) { - return function handleLink(detail) { - return handleLink$1.call(this, { - detail, - }); - }; - } - return function handleLink(detail) { - if (this.$vm && this.$vm.$.isMounted) { - // 父已初始化 - return handleLink$1.call(this, { - detail, - }); - } - (this._$childVues || (this._$childVues = [])).unshift(detail); - }; -})(); -function createVueComponent(mpType, mpInstance, vueOptions, parent) { - return $createComponent({ - type: vueOptions, - props: mpInstance.props, - }, { - mpType, - mpInstance, - parentComponent: parent && parent.$, - onBeforeSetup(instance, options) { - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); -} - -function createPage$1(vueOptions) { - vueOptions = vueOptions.default || vueOptions; - const pageOptions = { - onLoad(query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - // 初始化 vue 实例 - this.$vm = createVueComponent('page', this, vueOptions); - initSpecialMethods(this); - this.$vm.$callHook(ON_LOAD, query); - }, - onReady() { - initChildVues(this); - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - }, - onUnload() { - if (this.$vm) { - this.$vm.$callHook(ON_UNLOAD); - $destroyComponent(this.$vm); - } - }, - events: { - // 支付宝小程序有些页面事件只能放在events下 - onBack() { - this.$vm.$callHook(ON_BACK_PRESS); - }, - }, - __r: handleRef, - __e: handleEvent, - __l: handleLink, - }; - if (__VUE_OPTIONS_API__) { - pageOptions.data = initData(vueOptions); - } - initHooks(pageOptions, PAGE_HOOKS); - initUnknownHooks(pageOptions, vueOptions); - initWxsCallMethods(pageOptions, vueOptions.wxsCallMethods); - return Page(pageOptions); -} - -function initComponentProps(rawProps) { - const propertiesOptions = { - properties: {}, - }; - initProps(propertiesOptions, rawProps, false); - const properties = propertiesOptions.properties; - const props = { - onVueInit: function () { }, - }; - Object.keys(properties).forEach((key) => { - if (key !== 'vueSlots') { - props[key] = properties[key].value; - } - }); - return props; -} -function initVm(mpInstance, createComponent) { - if (mpInstance.$vm) { - return; - } - const properties = mpInstance.props; - initVueIds(properties.vueId, mpInstance); - const relationOptions = { - vuePid: mpInstance._$vuePid, - mpInstance, - createComponent, - }; - if (isComponent2) { - // 处理父子关系 - initRelation(mpInstance, relationOptions); - // 初始化 vue 实例 - mpInstance.$vm = createComponent(relationOptions.parent); - } - else { - // 处理父子关系 - initRelation(mpInstance, relationOptions); - if (relationOptions.parent) { - // 父组件已经初始化,直接初始化子,否则放到父组件的 didMount 中处理 - // 初始化 vue 实例 - mpInstance.$vm = createComponent(relationOptions.parent); - handleRef.call(relationOptions.parent.$scope, mpInstance); - initChildVues(mpInstance); - mpInstance.$vm.$callHook('mounted'); - } - } -} -function createComponent$1(vueOptions) { - vueOptions = vueOptions.default || vueOptions; - const mpComponentOptions = { - props: initComponentProps(vueOptions.props), - didMount() { - const createComponent = (parent) => { - return createVueComponent('component', this, vueOptions, parent); - }; - if (my.dd) { - // 钉钉小程序底层基础库有 bug,组件嵌套使用时,在 didMount 中无法及时调用 props 中的方法 - setTimeout(() => { - initVm(this, createComponent); - }, 4); - } - else { - initVm(this, createComponent); - } - initSpecialMethods(this); - if (isComponent2) { - this.$vm.$callHook('mounted'); - } - }, - didUnmount() { - $destroyComponent(this.$vm); - }, - methods: { - __r: handleRef, - __e: handleEvent, - __l: handleLink, - triggerEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - mpComponentOptions.data = initData(vueOptions); - mpComponentOptions.mixins = initBehaviors(vueOptions, initBehavior); - } - if (isComponent2) { - mpComponentOptions.onInit = function onInit() { - initVm(this, (parent) => { - return createVueComponent('component', this, vueOptions, parent); - }); - }; - mpComponentOptions.deriveDataFromProps = createObserver(); - } - else { - mpComponentOptions.didUpdate = createObserver(true); - } - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - return Component(mpComponentOptions); -} - -const createApp = initCreateApp(parseAppOptions); -my.EventChannel = EventChannel; -my.createApp = createApp; -my.createPage = createPage; -my.createComponent = createComponent; - -export { createApp, createComponent$1 as createComponent, createPage$1 as createPage }; diff --git a/packages/uni-mp-baidu/dist/uni.api.esm.js b/packages/uni-mp-baidu/dist/uni.api.esm.js deleted file mode 100644 index bdd61802108ffc91269c13b4430d7d7e232b562c..0000000000000000000000000000000000000000 --- a/packages/uni-mp-baidu/dist/uni.api.esm.js +++ /dev/null @@ -1,994 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -const eventChannels = {}; -const eventChannelStack = []; -let id = 0; -function initEventChannel(events, cache = true) { - id++; - const eventChannel = new swan.EventChannel(id, events); - if (cache) { - eventChannels[id] = eventChannel; - eventChannelStack.push(eventChannel); - } - return eventChannel; -} -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} -const navigateTo = { - args(fromArgs) { - const id = initEventChannel(fromArgs.events).id; - if (fromArgs.url) { - fromArgs.url = - fromArgs.url + - (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + - '__id__=' + - id; - } - }, - returnValue(fromRes) { - fromRes.eventChannel = getEventChannel(); - }, -}; - -swan.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - swan.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return swan.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`百度小程序 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`百度小程序 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = swan[options.name || methodName].apply(swan, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return swan.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, swan[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -function addSafeAreaInsets(fromRes, toRes) { - if (fromRes.safeArea) { - const safeArea = fromRes.safeArea; - toRes.safeAreaInsets = { - top: safeArea.top, - left: safeArea.left, - right: fromRes.windowWidth - safeArea.right, - bottom: fromRes.windowHeight - safeArea.bottom, - }; - } -} - -const getSystemInfo = { - returnValue: addSafeAreaInsets, -}; - -const getSystemInfoSync = getSystemInfo; - -const redirectTo = {}; - -const previewImage = { - args(fromArgs, toArgs) { - let currentIndex = parseInt(fromArgs.current); - if (isNaN(currentIndex)) { - return; - } - const urls = fromArgs.urls; - if (!isArray(urls)) { - return; - } - const len = urls.length; - if (!len) { - return; - } - if (currentIndex < 0) { - currentIndex = 0; - } - else if (currentIndex >= len) { - currentIndex = len - 1; - } - if (currentIndex > 0) { - toArgs.current = urls[currentIndex]; - toArgs.urls = urls.filter((item, index) => index < currentIndex ? item !== urls[currentIndex] : true); - } - else { - toArgs.current = urls[0]; - } - return { - indicator: false, - loop: false, - }; - }, -}; - -const getProvider = initGetProvider({ - oauth: ['baidu'], - share: ['baidu'], - payment: ['baidu'], - push: ['baidu'], -}); -function requestPayment(params) { - let parseError = false; - if (typeof params.orderInfo === 'string') { - try { - params.orderInfo = JSON.parse(params.orderInfo); - } - catch (e) { - parseError = true; - } - } - if (parseError) { - params.fail && - params.fail({ - errMsg: 'requestPayment:fail: 参数 orderInfo 数据结构不正确,参考:https://uniapp.dcloud.io/api/plugins/payment?id=orderinfo', - }); - } - else { - swan.requestPolymerPayment(params); - } -} - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider, - requestPayment: requestPayment -}); - -function createTodoMethod(contextName, methodName) { - return function unsupported() { - console.error(`百度小程序 ${contextName}暂不支持${methodName}`); - }; -} -const request = { - args() { - // TODO - // data 不支持 ArrayBuffer - // method 不支持 TRACE, CONNECT - return { - method: 'method', - dataType(type) { - return { - name: 'dataType', - value: type === 'json' ? type : 'string', - }; - }, - }; - }, -}; -const connectSocket = { - args: { - method: false, - }, -}; -const getRecorderManager = { - returnValue(fromRes, toRes) { - toRes.onFrameRecorded = createTodoMethod('RecorderManager', 'onFrameRecorded'); - }, -}; -const getBackgroundAudioManager = { - returnValue(fromRes, toRes) { - toRes.onPrev = createTodoMethod('BackgroundAudioManager', 'onPrev'); - toRes.onNext = createTodoMethod('BackgroundAudioManager', 'onNext'); - }, -}; -const scanCode = { - args: { - onlyFromCamera: false, - scanType: false, - }, -}; -const navigateToMiniProgram = { - name: 'navigateToSmartProgram', - args: { - appId: 'appKey', - envVersion: false, - }, -}; -const navigateBackMiniProgram = { - name: 'navigateBackSmartProgram', -}; -const showShareMenu = { - name: 'openShare', -}; -const getAccountInfoSync = { - name: 'getEnvInfoSync', - returnValue(fromRes, toRes) { - toRes.miniProgram = { - appId: fromRes.appKey, - }; - toRes.plugin = { - appId: '', - version: fromRes.sdkVersion, - }; - }, -}; - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - request: request, - connectSocket: connectSocket, - getRecorderManager: getRecorderManager, - getBackgroundAudioManager: getBackgroundAudioManager, - scanCode: scanCode, - navigateToMiniProgram: navigateToMiniProgram, - navigateBackMiniProgram: navigateBackMiniProgram, - showShareMenu: showShareMenu, - getAccountInfoSync: getAccountInfoSync, - redirectTo: redirectTo, - navigateTo: navigateTo, - previewImage: previewImage, - getSystemInfo: getSystemInfo, - getSystemInfoSync: getSystemInfoSync -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-mp-baidu/dist/uni.mp.esm.js b/packages/uni-mp-baidu/dist/uni.mp.esm.js deleted file mode 100644 index 9f4c6ba52c87a7a84b421540e12be5337ee427cf..0000000000000000000000000000000000000000 --- a/packages/uni-mp-baidu/dist/uni.mp.esm.js +++ /dev/null @@ -1,1403 +0,0 @@ -import { isPlainObject, hasOwn, isArray, extend, hyphenate, isObject, toNumber, isFunction, NOOP, camelize } from '@vue/shared'; -import { onUnmounted, injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; - -class EventChannel { - constructor(id, events) { - this.id = id; - this.listener = {}; - this.emitCache = {}; - if (events) { - Object.keys(events).forEach((name) => { - this.on(name, events[name]); - }); - } - } - emit(eventName, ...args) { - const fns = this.listener[eventName]; - if (!fns) { - return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args); - } - fns.forEach((opt) => { - opt.fn.apply(opt.fn, args); - }); - this.listener[eventName] = fns.filter((opt) => opt.type !== 'once'); - } - on(eventName, fn) { - this._addListener(eventName, 'on', fn); - this._clearCache(eventName); - } - once(eventName, fn) { - this._addListener(eventName, 'once', fn); - this._clearCache(eventName); - } - off(eventName, fn) { - const fns = this.listener[eventName]; - if (!fns) { - return; - } - if (fn) { - for (let i = 0; i < fns.length;) { - if (fns[i].fn === fn) { - fns.splice(i, 1); - i--; - } - i++; - } - } - else { - delete this.listener[eventName]; - } - } - _clearCache(eventName) { - const cacheArgs = this.emitCache[eventName]; - if (cacheArgs) { - for (; cacheArgs.length > 0;) { - this.emit.apply(this, [eventName, ...cacheArgs.shift()]); - } - } - } - _addListener(eventName, type, fn) { - (this.listener[eventName] || (this.listener[eventName] = [])).push({ - fn, - type, - }); - } -} - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initBehavior(options) { - return Behavior(options); -} -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -const EXTRAS = ['externalClasses']; -function initExtraOptions(miniProgramComponentOptions, vueOptions) { - EXTRAS.forEach((name) => { - if (hasOwn(vueOptions, name)) { - miniProgramComponentOptions[name] = vueOptions[name]; - } - }); -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function selectAllComponents(mpInstance, selector, $refs) { - const components = mpInstance.selectAllComponents(selector); - components.forEach((component) => { - const ref = component.dataset.ref; - $refs[ref] = component.$vm || component; - }); -} -function initRefs(instance, mpInstance) { - Object.defineProperty(instance, 'refs', { - get() { - const $refs = {}; - selectAllComponents(mpInstance, '.vue-ref', $refs); - const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for'); - forComponents.forEach((component) => { - const ref = component.dataset.ref; - if (!$refs[ref]) { - $refs[ref] = []; - } - $refs[ref].push(component.$vm || component); - }); - return $refs; - }, - }); -} -function findVmByVueId(instance, vuePid) { - // 标准 vue3 中 没有 $children,定制了内核 - const $children = instance.$children; - // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) - for (let i = $children.length - 1; i >= 0; i--) { - const childVm = $children[i]; - if (childVm.$scope._$vueId === vuePid) { - return childVm; - } - } - // 反向递归查找 - let parentVm; - for (let i = $children.length - 1; i >= 0; i--) { - parentVm = findVmByVueId($children[i], vuePid); - if (parentVm) { - return parentVm; - } - } -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - instance.slots = {}; - if (isArray(options.slots) && options.slots.length) { - options.slots.forEach((name) => { - instance.slots[name] = true; - }); - } - } - ctx.getOpenerEventChannel = function () { - if (!this.__eventChannel__) { - this.__eventChannel__ = new EventChannel(); - } - return this.__eventChannel__; - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - { - initScopedSlotsParams(instance); - } - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} -const center = {}; -const parents = {}; -function initScopedSlotsParams(instance) { - const ctx = instance.ctx; - ctx.$hasScopedSlotsParams = function (vueId) { - const has = center[vueId]; - if (!has) { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - return has; - }; - ctx.$getScopedSlotsParams = function (vueId, name, key) { - const data = center[vueId]; - if (data) { - const object = data[name] || {}; - return key ? object[key] : object; - } - else { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - }; - ctx.$setScopedSlotsParams = function (name, value) { - const vueIds = instance.attrs.vueId; - if (vueIds) { - const vueId = vueIds.split(',')[0]; - const object = (center[vueId] = center[vueId] || {}); - object[name] = value; - if (parents[vueId]) { - parents[vueId].$forceUpdate(); - } - } - }; - onUnmounted(function () { - const propsData = instance.attrs; - const vueId = propsData && propsData.vueId; - if (vueId) { - delete center[vueId]; - delete parents[vueId]; - } - }, instance); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook$1(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} - -swan.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - swan.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(swan.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function createObserver(name) { - return function observer(newVal) { - if (this.$vm) { - this.$vm.$.props[name] = newVal; // 为了触发其他非 render watcher - } - }; -} -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - { - if ( - // [String,Boolean]=>Boolean - defaultValue === false && - isArray(type) && - type.length === 2 && - type.indexOf(String) !== -1 && - type.indexOf(Boolean) !== -1) { - return Boolean; - } - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - prop.observer = createObserver(key); - return prop; -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type, value); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts, null); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} -function applyOptions(componentOptions, vueOptions, initBehavior) { - componentOptions.data = initData(vueOptions); - componentOptions.behaviors = initBehaviors(vueOptions, initBehavior); -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - { - // mp-baidu,checked=>value - if (isPlainObject(event.detail) && - hasOwn(event.detail, 'checked') && - !hasOwn(event.detail, 'value')) { - event.detail.value = event.detail.checked; - } - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -function parseComponent(vueOptions, { parse, mocks, isPage, initRelation, handleLink, initLifetimes, }) { - vueOptions = vueOptions.default || vueOptions; - const options = { - multipleSlots: true, - addGlobalClass: true, - }; - if (vueOptions.options) { - extend(options, vueOptions.options); - } - const mpComponentOptions = { - options, - lifetimes: initLifetimes({ mocks, isPage, initRelation, vueOptions }), - pageLifetimes: { - show() { - this.$vm && this.$vm.$callHook('onPageShow'); - }, - hide() { - this.$vm && this.$vm.$callHook('onPageHide'); - }, - resize(size) { - this.$vm && this.$vm.$callHook('onPageResize', size); - }, - }, - methods: { - __l: handleLink, - __e: handleEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - applyOptions(mpComponentOptions, vueOptions, initBehavior); - } - initProps(mpComponentOptions, vueOptions.props, false); - initExtraOptions(mpComponentOptions, vueOptions); - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - if (parse) { - parse(mpComponentOptions, { handleLink }); - } - return mpComponentOptions; -} -function initCreateComponent(parseOptions) { - return function createComponent(vueComponentOptions) { - return Component(parseComponent(vueComponentOptions, parseOptions)); - }; -} -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function parsePage(vueOptions, parseOptions) { - const { parse, mocks, isPage, initRelation, handleLink, initLifetimes } = parseOptions; - const miniProgramPageOptions = parseComponent(vueOptions, { - mocks, - isPage, - initRelation, - handleLink, - initLifetimes, - }); - const methods = miniProgramPageOptions.methods; - methods.onLoad = function (query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - return this.$vm && this.$vm.$callHook(ON_LOAD, query); - }; - initHooks(methods, PAGE_HOOKS); - initUnknownHooks(methods, vueOptions); - parse && parse(miniProgramPageOptions, { handleLink }); - return miniProgramPageOptions; -} -function initCreatePage(parseOptions) { - return function createPage(vuePageOptions) { - return Component(parsePage(vuePageOptions, parseOptions)); - }; -} - -const MPPage = Page; -const MPComponent = Component; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initTriggerEvent(mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]); - }; -} -function initHook(name, options) { - const oldHook = options[name]; - if (!oldHook) { - options[name] = function () { - initTriggerEvent(this); - }; - } - else { - options[name] = function (...args) { - initTriggerEvent(this); - return oldHook.apply(this, args); - }; - } -} -Page = function (options) { - initHook(ON_LOAD, options); - return MPPage(options); -}; -Component = function (options) { - initHook('created', options); - return MPComponent(options); -}; - -function parse$2(appOptions) { - // 百度 onShow 竟然会在 onLaunch 之前 - appOptions.onShow = function onShow(args) { - if (!this.$vm) { - this.onLaunch(args); - } - this.$vm.$callHook(ON_SHOW, args); - }; -} - -var parseAppOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - parse: parse$2 -}); - -/** - * 用于延迟调用 setData - * 在 setData 真实调用的时机需执行 fixSetDataEnd - * @param {*} mpInstance - */ -function fixSetDataStart(mpInstance) { - const setData = mpInstance.setData; - const setDataArgs = []; - mpInstance.setData = function () { - setDataArgs.push(arguments); - }; - mpInstance.__fixInitData = function () { - this.setData = setData; - const fn = () => { - setDataArgs.forEach((args) => { - setData.apply(this, args); - }); - }; - if (setDataArgs.length) { - if (this.groupSetData) { - this.groupSetData(fn); - } - else { - fn(); - } - } - }; -} -/** - * 恢复真实的 setData 方法 - * @param {*} mpInstance - */ -function fixSetDataEnd(mpInstance) { - if (mpInstance.__fixInitData) { - mpInstance.__fixInitData(); - delete mpInstance.__fixInitData; - } -} - -function initLifetimes({ mocks, isPage, initRelation, vueOptions, }) { - return { - attached() { - const properties = this.properties; - initVueIds(properties.vueId, this); - const relationOptions = { - vuePid: this._$vuePid, - }; - // 处理父子关系 - initRelation(this, relationOptions); - // 初始化 vue 实例 - const mpInstance = this; - this.$vm = $createComponent({ - type: vueOptions, - props: properties, - }, { - mpType: isPage(mpInstance) ? 'page' : 'component', - mpInstance, - slots: properties.vueSlots, - parentComponent: relationOptions.parent && relationOptions.parent.$, - onBeforeSetup(instance, options) { - initRefs(instance, mpInstance); - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); - }, - ready() { - // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发 - // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800 - if (this.$vm) { - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - } - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - }, - }; -} - -function handleLink(event) { - // detail 是微信,value 是百度(dipatch) - const detail = (event.detail || - event.value); - const vuePid = detail.vuePid; - let parentVm; - if (vuePid) { - parentVm = findVmByVueId(this.$vm, vuePid); - } - if (!parentVm) { - parentVm = this.$vm; - } - detail.parent = parentVm; -} - -const mocks = ['nodeId', 'componentName', '_componentId', 'uniquePrefix']; -function isPage(mpInstance) { - return !hasOwn(mpInstance, 'ownerId'); -} -function initRelation(mpInstance, detail) { - mpInstance.dispatch('__l', detail); -} -const newLifecycle = /*#__PURE__*/ swan.canIUse('lifecycle-2-0'); -function parse$1(componentOptions) { - const methods = componentOptions.methods; - const lifetimes = componentOptions.lifetimes; - // 关于百度小程序生命周期的说明(组件作为页面时): - // lifetimes:attached --> methods:onShow --> methods:onLoad --> methods:onReady - // 这里在强制将onShow挪到onLoad之后触发,另外一处修改在page-parser.js - const oldAttached = lifetimes.attached; - // 百度小程序基础库 3.260 以上支持页面 onInit 生命周期,提前创建 vm 实例 - lifetimes.onInit = function onInit(query) { - // 百度小程序后续可能移除 pageinstance 属性,为向后兼容进行补充 - if (!this.pageinstance || !this.pageinstance.setData) { - const pages = getCurrentPages(); - this.pageinstance = pages[pages.length - 1]; - } - // 处理百度小程序 onInit 生命周期调用 setData 无效的问题 - fixSetDataStart(this); - oldAttached.call(this); - this.pageinstance.$vm = this.$vm; - this.$vm.__call_hook('onInit', query); - }; - lifetimes.attached = function attached() { - if (!this.$vm) { - oldAttached.call(this); - } - else { - initMocks(this.$vm.$, this, mocks); - fixSetDataEnd(this); - } - if (isPage(this) && this.$vm) { - // 百度 onLoad 在 attached 之前触发(基础库小于 3.70) - // 百度 当组件作为页面时 pageinstance 不是原来组件的 instance - const pageInstance = this.pageinstance; - pageInstance.$vm = this.$vm; - if (hasOwn(pageInstance, '_$args')) { - this.$vm.$callHook(ON_LOAD, pageInstance._$args); - this.$vm.$callHook(ON_SHOW); - delete pageInstance._$args; - } - } - else { - // 百度小程序组件不触发methods内的onReady - if (this.$vm) { - this.$vm.$callHook('mounted'); - } - } - }; - if (newLifecycle) { - methods.onReady = lifetimes.ready; - delete lifetimes.ready; - } - componentOptions.messages = { - __l: methods.__l, - }; - delete methods.__l; -} - -var parseComponentOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - initRelation: initRelation, - parse: parse$1, - handleLink: handleLink, - initLifetimes: initLifetimes -}); - -function parse(pageOptions) { - parse$1(pageOptions); - const methods = pageOptions.methods; - // 纠正百度小程序生命周期methods:onShow在methods:onLoad之前触发的问题 - methods.onShow = function onShow() { - if (this.$vm && this._$loaded) { - this.$vm.$callHook(ON_SHOW); - } - }; - methods.onLoad = function onLoad(args) { - // 百度 onLoad 在 attached 之前触发,先存储 args, 在 attached 里边触发 onLoad - if (this.$vm) { - this._$loaded = true; - this.$vm.$callHook(ON_LOAD, args); - this.$vm.$callHook(ON_SHOW); - } - else { - this.pageinstance._$args = args; - } - }; -} - -var parsePageOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - parse: parse, - handleLink: handleLink, - initLifetimes: initLifetimes, - mocks: mocks, - isPage: isPage, - initRelation: initRelation -}); - -const createApp = initCreateApp(parseAppOptions); -const createPage = initCreatePage(parsePageOptions); -const createComponent = initCreateComponent(parseComponentOptions); -swan.EventChannel = EventChannel; -swan.createApp = createApp; -swan.createPage = createPage; -swan.createComponent = createComponent; - -export { createApp, createComponent, createPage }; diff --git a/packages/uni-mp-kuaishou/dist/uni.api.esm.js b/packages/uni-mp-kuaishou/dist/uni.api.esm.js deleted file mode 100644 index f8df3161a30e6736db67a33475615c908fe7a892..0000000000000000000000000000000000000000 --- a/packages/uni-mp-kuaishou/dist/uni.api.esm.js +++ /dev/null @@ -1,895 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -const eventChannels = {}; -const eventChannelStack = []; -let id = 0; -function initEventChannel(events, cache = true) { - id++; - const eventChannel = new ks.EventChannel(id, events); - if (cache) { - eventChannels[id] = eventChannel; - eventChannelStack.push(eventChannel); - } - return eventChannel; -} -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} -const navigateTo = { - args(fromArgs) { - const id = initEventChannel(fromArgs.events).id; - if (fromArgs.url) { - fromArgs.url = - fromArgs.url + - (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + - '__id__=' + - id; - } - }, - returnValue(fromRes) { - fromRes.eventChannel = getEventChannel(); - }, -}; - -ks.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - ks.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return ks.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`快手小程序 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`快手小程序 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = ks[options.name || methodName].apply(ks, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return ks.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, ks[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -function addSafeAreaInsets(fromRes, toRes) { - if (fromRes.safeArea) { - const safeArea = fromRes.safeArea; - toRes.safeAreaInsets = { - top: safeArea.top, - left: safeArea.left, - right: fromRes.windowWidth - safeArea.right, - bottom: fromRes.windowHeight - safeArea.bottom, - }; - } -} - -const getSystemInfo = { - returnValue: addSafeAreaInsets, -}; - -const getSystemInfoSync = getSystemInfo; - -const redirectTo = {}; - -const previewImage = { - args(fromArgs, toArgs) { - let currentIndex = parseInt(fromArgs.current); - if (isNaN(currentIndex)) { - return; - } - const urls = fromArgs.urls; - if (!isArray(urls)) { - return; - } - const len = urls.length; - if (!len) { - return; - } - if (currentIndex < 0) { - currentIndex = 0; - } - else if (currentIndex >= len) { - currentIndex = len - 1; - } - if (currentIndex > 0) { - toArgs.current = urls[currentIndex]; - toArgs.urls = urls.filter((item, index) => index < currentIndex ? item !== urls[currentIndex] : true); - } - else { - toArgs.current = urls[0]; - } - return { - indicator: false, - loop: false, - }; - }, -}; - -const getProvider = initGetProvider({ - oauth: ['kuaishou'], - share: ['kuaishou'], - payment: ['kuaishoupay'], - push: ['kuaishou'], -}); - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider -}); - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - redirectTo: redirectTo, - navigateTo: navigateTo, - previewImage: previewImage, - getSystemInfo: getSystemInfo, - getSystemInfoSync: getSystemInfoSync -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-mp-kuaishou/dist/uni.mp.esm.js b/packages/uni-mp-kuaishou/dist/uni.mp.esm.js deleted file mode 100644 index 44f21e2fd7d566fd94bf8dfcdfa74292b004cb7b..0000000000000000000000000000000000000000 --- a/packages/uni-mp-kuaishou/dist/uni.mp.esm.js +++ /dev/null @@ -1,1302 +0,0 @@ -import { isPlainObject, hasOwn, isArray, extend, hyphenate, isObject, toNumber, isFunction, NOOP, camelize } from '@vue/shared'; -import { onUnmounted, injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; - -class EventChannel { - constructor(id, events) { - this.id = id; - this.listener = {}; - this.emitCache = {}; - if (events) { - Object.keys(events).forEach((name) => { - this.on(name, events[name]); - }); - } - } - emit(eventName, ...args) { - const fns = this.listener[eventName]; - if (!fns) { - return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args); - } - fns.forEach((opt) => { - opt.fn.apply(opt.fn, args); - }); - this.listener[eventName] = fns.filter((opt) => opt.type !== 'once'); - } - on(eventName, fn) { - this._addListener(eventName, 'on', fn); - this._clearCache(eventName); - } - once(eventName, fn) { - this._addListener(eventName, 'once', fn); - this._clearCache(eventName); - } - off(eventName, fn) { - const fns = this.listener[eventName]; - if (!fns) { - return; - } - if (fn) { - for (let i = 0; i < fns.length;) { - if (fns[i].fn === fn) { - fns.splice(i, 1); - i--; - } - i++; - } - } - else { - delete this.listener[eventName]; - } - } - _clearCache(eventName) { - const cacheArgs = this.emitCache[eventName]; - if (cacheArgs) { - for (; cacheArgs.length > 0;) { - this.emit.apply(this, [eventName, ...cacheArgs.shift()]); - } - } - } - _addListener(eventName, type, fn) { - (this.listener[eventName] || (this.listener[eventName] = [])).push({ - fn, - type, - }); - } -} - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initBehavior(options) { - return Behavior(options); -} -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -const EXTRAS = ['externalClasses']; -function initExtraOptions(miniProgramComponentOptions, vueOptions) { - EXTRAS.forEach((name) => { - if (hasOwn(vueOptions, name)) { - miniProgramComponentOptions[name] = vueOptions[name]; - } - }); -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function selectAllComponents(mpInstance, selector, $refs) { - const components = mpInstance.selectAllComponents(selector); - components.forEach((component) => { - const ref = component.dataset.ref; - $refs[ref] = component.$vm || component; - }); -} -function initRefs(instance, mpInstance) { - Object.defineProperty(instance, 'refs', { - get() { - const $refs = {}; - selectAllComponents(mpInstance, '.vue-ref', $refs); - const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for'); - forComponents.forEach((component) => { - const ref = component.dataset.ref; - if (!$refs[ref]) { - $refs[ref] = []; - } - $refs[ref].push(component.$vm || component); - }); - return $refs; - }, - }); -} -function findVmByVueId(instance, vuePid) { - // 标准 vue3 中 没有 $children,定制了内核 - const $children = instance.$children; - // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) - for (let i = $children.length - 1; i >= 0; i--) { - const childVm = $children[i]; - if (childVm.$scope._$vueId === vuePid) { - return childVm; - } - } - // 反向递归查找 - let parentVm; - for (let i = $children.length - 1; i >= 0; i--) { - parentVm = findVmByVueId($children[i], vuePid); - if (parentVm) { - return parentVm; - } - } -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - instance.slots = {}; - if (isArray(options.slots) && options.slots.length) { - options.slots.forEach((name) => { - instance.slots[name] = true; - }); - } - } - ctx.getOpenerEventChannel = function () { - if (!this.__eventChannel__) { - this.__eventChannel__ = new EventChannel(); - } - return this.__eventChannel__; - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - { - initScopedSlotsParams(instance); - } - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} -const center = {}; -const parents = {}; -function initScopedSlotsParams(instance) { - const ctx = instance.ctx; - ctx.$hasScopedSlotsParams = function (vueId) { - const has = center[vueId]; - if (!has) { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - return has; - }; - ctx.$getScopedSlotsParams = function (vueId, name, key) { - const data = center[vueId]; - if (data) { - const object = data[name] || {}; - return key ? object[key] : object; - } - else { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - }; - ctx.$setScopedSlotsParams = function (name, value) { - const vueIds = instance.attrs.vueId; - if (vueIds) { - const vueId = vueIds.split(',')[0]; - const object = (center[vueId] = center[vueId] || {}); - object[name] = value; - if (parents[vueId]) { - parents[vueId].$forceUpdate(); - } - } - }; - onUnmounted(function () { - const propsData = instance.attrs; - const vueId = propsData && propsData.vueId; - if (vueId) { - delete center[vueId]; - delete parents[vueId]; - } - }, instance); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook$1(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} - -ks.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - ks.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(ks.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function createObserver(name) { - return function observer(newVal) { - if (this.$vm) { - this.$vm.$.props[name] = newVal; // 为了触发其他非 render watcher - } - }; -} -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - prop.observer = createObserver(key); - return prop; -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} -function applyOptions(componentOptions, vueOptions, initBehavior) { - componentOptions.data = initData(vueOptions); - componentOptions.behaviors = initBehaviors(vueOptions, initBehavior); -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -function parseComponent(vueOptions, { parse, mocks, isPage, initRelation, handleLink, initLifetimes, }) { - vueOptions = vueOptions.default || vueOptions; - const options = { - multipleSlots: true, - addGlobalClass: true, - }; - if (vueOptions.options) { - extend(options, vueOptions.options); - } - const mpComponentOptions = { - options, - lifetimes: initLifetimes({ mocks, isPage, initRelation, vueOptions }), - pageLifetimes: { - show() { - this.$vm && this.$vm.$callHook('onPageShow'); - }, - hide() { - this.$vm && this.$vm.$callHook('onPageHide'); - }, - resize(size) { - this.$vm && this.$vm.$callHook('onPageResize', size); - }, - }, - methods: { - __l: handleLink, - __e: handleEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - applyOptions(mpComponentOptions, vueOptions, initBehavior); - } - initProps(mpComponentOptions, vueOptions.props, false); - initExtraOptions(mpComponentOptions, vueOptions); - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - if (parse) { - parse(mpComponentOptions, { handleLink }); - } - return mpComponentOptions; -} -function initCreateComponent(parseOptions) { - return function createComponent(vueComponentOptions) { - return Component(parseComponent(vueComponentOptions, parseOptions)); - }; -} -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function parsePage(vueOptions, parseOptions) { - const { parse, mocks, isPage, initRelation, handleLink, initLifetimes } = parseOptions; - const miniProgramPageOptions = parseComponent(vueOptions, { - mocks, - isPage, - initRelation, - handleLink, - initLifetimes, - }); - const methods = miniProgramPageOptions.methods; - methods.onLoad = function (query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - return this.$vm && this.$vm.$callHook(ON_LOAD, query); - }; - initHooks(methods, PAGE_HOOKS); - initUnknownHooks(methods, vueOptions); - parse && parse(miniProgramPageOptions, { handleLink }); - return miniProgramPageOptions; -} -function initCreatePage(parseOptions) { - return function createPage(vuePageOptions) { - return Component(parsePage(vuePageOptions, parseOptions)); - }; -} - -const MPPage = Page; -const MPComponent = Component; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initTriggerEvent(mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]); - }; -} -function initHook(name, options) { - const oldHook = options[name]; - if (!oldHook) { - options[name] = function () { - initTriggerEvent(this); - }; - } - else { - options[name] = function (...args) { - initTriggerEvent(this); - return oldHook.apply(this, args); - }; - } -} -Page = function (options) { - initHook(ON_LOAD, options); - return MPPage(options); -}; -Component = function (options) { - initHook('created', options); - return MPComponent(options); -}; - -function initLifetimes({ mocks, isPage, initRelation, vueOptions, }) { - return { - attached() { - const properties = this.properties; - initVueIds(properties.vueId, this); - const relationOptions = { - vuePid: this._$vuePid, - }; - // 处理父子关系 - initRelation(this, relationOptions); - // 初始化 vue 实例 - const mpInstance = this; - this.$vm = $createComponent({ - type: vueOptions, - props: properties, - }, { - mpType: isPage(mpInstance) ? 'page' : 'component', - mpInstance, - slots: properties.vueSlots, - parentComponent: relationOptions.parent && relationOptions.parent.$, - onBeforeSetup(instance, options) { - initRefs(instance, mpInstance); - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); - }, - ready() { - // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发 - // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800 - if (this.$vm) { - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - } - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - }, - }; -} - -const mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__']; -function isPage(mpInstance) { - return !!mpInstance.route; -} -function initRelation(mpInstance, detail) { - mpInstance.triggerEvent('__l', detail); -} -function handleLink(event) { - // detail 是微信,value 是百度(dipatch) - const detail = (event.detail || - event.value); - const vuePid = detail.vuePid; - let parentVm; - if (vuePid) { - parentVm = findVmByVueId(this.$vm, vuePid); - } - if (!parentVm) { - parentVm = this.$vm; - } - detail.parent = parentVm; -} - -var baseParseOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - initRelation: initRelation, - handleLink: handleLink, - initLifetimes: initLifetimes -}); - -const createApp = initCreateApp(); -const createPage = initCreatePage(baseParseOptions); -const createComponent$1 = initCreateComponent(baseParseOptions); -wx.createApp = createApp; -wx.createPage = createPage; -wx.createComponent = createComponent$1; - -/** - * 用于延迟调用 setData - * 在 setData 真实调用的时机需执行 fixSetDataEnd - * @param {*} mpInstance - */ -function fixSetDataStart(mpInstance) { - const setData = mpInstance.setData; - const setDataArgs = []; - mpInstance.setData = function () { - setDataArgs.push(arguments); - }; - mpInstance.__fixInitData = function () { - this.setData = setData; - const fn = () => { - setDataArgs.forEach((args) => { - setData.apply(this, args); - }); - }; - if (setDataArgs.length) { - if (this.groupSetData) { - this.groupSetData(fn); - } - else { - fn(); - } - } - }; -} -/** - * 恢复真实的 setData 方法 - * @param {*} mpInstance - */ -function fixSetDataEnd(mpInstance) { - if (mpInstance.__fixInitData) { - mpInstance.__fixInitData(); - delete mpInstance.__fixInitData; - } -} - -function parse(componentOptions) { - const oldAttached = componentOptions.lifetimes.attached; - componentOptions.lifetimes.attached = function attached() { - // 暂不区分版本 - if (isPage(this)) { - // 解决快手小程序页面 attached 生命周期 setData 导致数据同步异常的问题 - fixSetDataStart(this); - setTimeout(() => { - fixSetDataEnd(this); - }, 0); - } - oldAttached.call(this); - }; -} -var parseComponentOptions = extend({}, baseParseOptions, { - parse, -}); - -const createComponent = initCreateComponent(parseComponentOptions); -ks.EventChannel = EventChannel; -ks.createApp = createApp; -ks.createPage = createPage; -ks.createComponent = createComponent; - -export { createApp, createComponent, createPage }; diff --git a/packages/uni-mp-qq/dist/uni.api.esm.js b/packages/uni-mp-qq/dist/uni.api.esm.js deleted file mode 100644 index e1f7dbdd6ab1d6788806d7e91fc941731c90f364..0000000000000000000000000000000000000000 --- a/packages/uni-mp-qq/dist/uni.api.esm.js +++ /dev/null @@ -1,895 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -const eventChannels = {}; -const eventChannelStack = []; -let id = 0; -function initEventChannel(events, cache = true) { - id++; - const eventChannel = new qq.EventChannel(id, events); - if (cache) { - eventChannels[id] = eventChannel; - eventChannelStack.push(eventChannel); - } - return eventChannel; -} -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} -const navigateTo = { - args(fromArgs) { - const id = initEventChannel(fromArgs.events).id; - if (fromArgs.url) { - fromArgs.url = - fromArgs.url + - (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + - '__id__=' + - id; - } - }, - returnValue(fromRes) { - fromRes.eventChannel = getEventChannel(); - }, -}; - -qq.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - qq.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return qq.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`QQ小程序 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`QQ小程序 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = qq[options.name || methodName].apply(qq, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return qq.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, qq[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -function addSafeAreaInsets(fromRes, toRes) { - if (fromRes.safeArea) { - const safeArea = fromRes.safeArea; - toRes.safeAreaInsets = { - top: safeArea.top, - left: safeArea.left, - right: fromRes.windowWidth - safeArea.right, - bottom: fromRes.windowHeight - safeArea.bottom, - }; - } -} - -const getSystemInfo = { - returnValue: addSafeAreaInsets, -}; - -const getSystemInfoSync = getSystemInfo; - -const redirectTo = {}; - -const previewImage = { - args(fromArgs, toArgs) { - let currentIndex = parseInt(fromArgs.current); - if (isNaN(currentIndex)) { - return; - } - const urls = fromArgs.urls; - if (!isArray(urls)) { - return; - } - const len = urls.length; - if (!len) { - return; - } - if (currentIndex < 0) { - currentIndex = 0; - } - else if (currentIndex >= len) { - currentIndex = len - 1; - } - if (currentIndex > 0) { - toArgs.current = urls[currentIndex]; - toArgs.urls = urls.filter((item, index) => index < currentIndex ? item !== urls[currentIndex] : true); - } - else { - toArgs.current = urls[0]; - } - return { - indicator: false, - loop: false, - }; - }, -}; - -const getProvider = initGetProvider({ - oauth: ['qq'], - share: ['qq'], - payment: ['qqpay'], - push: ['qq'], -}); - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider -}); - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - redirectTo: redirectTo, - navigateTo: navigateTo, - previewImage: previewImage, - getSystemInfo: getSystemInfo, - getSystemInfoSync: getSystemInfoSync -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-mp-qq/dist/uni.mp.esm.js b/packages/uni-mp-qq/dist/uni.mp.esm.js deleted file mode 100644 index 789f486d5f508afbd6d5b77aaa870c74b380798d..0000000000000000000000000000000000000000 --- a/packages/uni-mp-qq/dist/uni.mp.esm.js +++ /dev/null @@ -1,1244 +0,0 @@ -import { isPlainObject, hasOwn, isArray, extend, hyphenate, isObject, toNumber, isFunction, NOOP, camelize } from '@vue/shared'; -import { onUnmounted, injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; - -class EventChannel { - constructor(id, events) { - this.id = id; - this.listener = {}; - this.emitCache = {}; - if (events) { - Object.keys(events).forEach((name) => { - this.on(name, events[name]); - }); - } - } - emit(eventName, ...args) { - const fns = this.listener[eventName]; - if (!fns) { - return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args); - } - fns.forEach((opt) => { - opt.fn.apply(opt.fn, args); - }); - this.listener[eventName] = fns.filter((opt) => opt.type !== 'once'); - } - on(eventName, fn) { - this._addListener(eventName, 'on', fn); - this._clearCache(eventName); - } - once(eventName, fn) { - this._addListener(eventName, 'once', fn); - this._clearCache(eventName); - } - off(eventName, fn) { - const fns = this.listener[eventName]; - if (!fns) { - return; - } - if (fn) { - for (let i = 0; i < fns.length;) { - if (fns[i].fn === fn) { - fns.splice(i, 1); - i--; - } - i++; - } - } - else { - delete this.listener[eventName]; - } - } - _clearCache(eventName) { - const cacheArgs = this.emitCache[eventName]; - if (cacheArgs) { - for (; cacheArgs.length > 0;) { - this.emit.apply(this, [eventName, ...cacheArgs.shift()]); - } - } - } - _addListener(eventName, type, fn) { - (this.listener[eventName] || (this.listener[eventName] = [])).push({ - fn, - type, - }); - } -} - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initBehavior(options) { - return Behavior(options); -} -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -const EXTRAS = ['externalClasses']; -function initExtraOptions(miniProgramComponentOptions, vueOptions) { - EXTRAS.forEach((name) => { - if (hasOwn(vueOptions, name)) { - miniProgramComponentOptions[name] = vueOptions[name]; - } - }); -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function selectAllComponents(mpInstance, selector, $refs) { - const components = mpInstance.selectAllComponents(selector); - components.forEach((component) => { - const ref = component.dataset.ref; - $refs[ref] = component.$vm || component; - }); -} -function initRefs(instance, mpInstance) { - Object.defineProperty(instance, 'refs', { - get() { - const $refs = {}; - selectAllComponents(mpInstance, '.vue-ref', $refs); - const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for'); - forComponents.forEach((component) => { - const ref = component.dataset.ref; - if (!$refs[ref]) { - $refs[ref] = []; - } - $refs[ref].push(component.$vm || component); - }); - return $refs; - }, - }); -} -function findVmByVueId(instance, vuePid) { - // 标准 vue3 中 没有 $children,定制了内核 - const $children = instance.$children; - // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) - for (let i = $children.length - 1; i >= 0; i--) { - const childVm = $children[i]; - if (childVm.$scope._$vueId === vuePid) { - return childVm; - } - } - // 反向递归查找 - let parentVm; - for (let i = $children.length - 1; i >= 0; i--) { - parentVm = findVmByVueId($children[i], vuePid); - if (parentVm) { - return parentVm; - } - } -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - instance.slots = {}; - if (isArray(options.slots) && options.slots.length) { - options.slots.forEach((name) => { - instance.slots[name] = true; - }); - } - } - ctx.getOpenerEventChannel = function () { - if (!this.__eventChannel__) { - this.__eventChannel__ = new EventChannel(); - } - return this.__eventChannel__; - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - { - initScopedSlotsParams(instance); - } - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} -const center = {}; -const parents = {}; -function initScopedSlotsParams(instance) { - const ctx = instance.ctx; - ctx.$hasScopedSlotsParams = function (vueId) { - const has = center[vueId]; - if (!has) { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - return has; - }; - ctx.$getScopedSlotsParams = function (vueId, name, key) { - const data = center[vueId]; - if (data) { - const object = data[name] || {}; - return key ? object[key] : object; - } - else { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - }; - ctx.$setScopedSlotsParams = function (name, value) { - const vueIds = instance.attrs.vueId; - if (vueIds) { - const vueId = vueIds.split(',')[0]; - const object = (center[vueId] = center[vueId] || {}); - object[name] = value; - if (parents[vueId]) { - parents[vueId].$forceUpdate(); - } - } - }; - onUnmounted(function () { - const propsData = instance.attrs; - const vueId = propsData && propsData.vueId; - if (vueId) { - delete center[vueId]; - delete parents[vueId]; - } - }, instance); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook$1(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} - -qq.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - qq.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(qq.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function createObserver(name) { - return function observer(newVal) { - if (this.$vm) { - this.$vm.$.props[name] = newVal; // 为了触发其他非 render watcher - } - }; -} -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - prop.observer = createObserver(key); - return prop; -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} -function applyOptions(componentOptions, vueOptions, initBehavior) { - componentOptions.data = initData(vueOptions); - componentOptions.behaviors = initBehaviors(vueOptions, initBehavior); -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -function parseComponent(vueOptions, { parse, mocks, isPage, initRelation, handleLink, initLifetimes, }) { - vueOptions = vueOptions.default || vueOptions; - const options = { - multipleSlots: true, - addGlobalClass: true, - }; - if (vueOptions.options) { - extend(options, vueOptions.options); - } - const mpComponentOptions = { - options, - lifetimes: initLifetimes({ mocks, isPage, initRelation, vueOptions }), - pageLifetimes: { - show() { - this.$vm && this.$vm.$callHook('onPageShow'); - }, - hide() { - this.$vm && this.$vm.$callHook('onPageHide'); - }, - resize(size) { - this.$vm && this.$vm.$callHook('onPageResize', size); - }, - }, - methods: { - __l: handleLink, - __e: handleEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - applyOptions(mpComponentOptions, vueOptions, initBehavior); - } - initProps(mpComponentOptions, vueOptions.props, false); - initExtraOptions(mpComponentOptions, vueOptions); - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - if (parse) { - parse(mpComponentOptions, { handleLink }); - } - return mpComponentOptions; -} -function initCreateComponent(parseOptions) { - return function createComponent(vueComponentOptions) { - return Component(parseComponent(vueComponentOptions, parseOptions)); - }; -} -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function parsePage(vueOptions, parseOptions) { - const { parse, mocks, isPage, initRelation, handleLink, initLifetimes } = parseOptions; - const miniProgramPageOptions = parseComponent(vueOptions, { - mocks, - isPage, - initRelation, - handleLink, - initLifetimes, - }); - const methods = miniProgramPageOptions.methods; - methods.onLoad = function (query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - return this.$vm && this.$vm.$callHook(ON_LOAD, query); - }; - initHooks(methods, PAGE_HOOKS); - initUnknownHooks(methods, vueOptions); - parse && parse(miniProgramPageOptions, { handleLink }); - return miniProgramPageOptions; -} -function initCreatePage(parseOptions) { - return function createPage(vuePageOptions) { - return Component(parsePage(vuePageOptions, parseOptions)); - }; -} - -const MPPage = Page; -const MPComponent = Component; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initTriggerEvent(mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]); - }; -} -function initHook(name, options) { - const oldHook = options[name]; - if (!oldHook) { - options[name] = function () { - initTriggerEvent(this); - }; - } - else { - options[name] = function (...args) { - initTriggerEvent(this); - return oldHook.apply(this, args); - }; - } -} -Page = function (options) { - initHook(ON_LOAD, options); - return MPPage(options); -}; -Component = function (options) { - initHook('created', options); - return MPComponent(options); -}; - -function initLifetimes({ mocks, isPage, initRelation, vueOptions, }) { - return { - attached() { - const properties = this.properties; - initVueIds(properties.vueId, this); - const relationOptions = { - vuePid: this._$vuePid, - }; - // 处理父子关系 - initRelation(this, relationOptions); - // 初始化 vue 实例 - const mpInstance = this; - this.$vm = $createComponent({ - type: vueOptions, - props: properties, - }, { - mpType: isPage(mpInstance) ? 'page' : 'component', - mpInstance, - slots: properties.vueSlots, - parentComponent: relationOptions.parent && relationOptions.parent.$, - onBeforeSetup(instance, options) { - initRefs(instance, mpInstance); - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); - }, - ready() { - // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发 - // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800 - if (this.$vm) { - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - } - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - }, - }; -} - -const mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__']; -function isPage(mpInstance) { - return !!mpInstance.route; -} -function initRelation(mpInstance, detail) { - mpInstance.triggerEvent('__l', detail); -} -function handleLink(event) { - // detail 是微信,value 是百度(dipatch) - const detail = (event.detail || - event.value); - const vuePid = detail.vuePid; - let parentVm; - if (vuePid) { - parentVm = findVmByVueId(this.$vm, vuePid); - } - if (!parentVm) { - parentVm = this.$vm; - } - detail.parent = parentVm; -} - -var parseOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - initRelation: initRelation, - handleLink: handleLink, - initLifetimes: initLifetimes -}); - -const createApp = initCreateApp(); -const createPage = initCreatePage(parseOptions); -const createComponent = initCreateComponent(parseOptions); -wx.createApp = createApp; -wx.createPage = createPage; -wx.createComponent = createComponent; - -qq.EventChannel = EventChannel; -qq.createApp = createApp; -qq.createPage = createPage; -qq.createComponent = createComponent; - -export { createApp, createComponent, createPage }; diff --git a/packages/uni-mp-toutiao/dist/uni.api.esm.js b/packages/uni-mp-toutiao/dist/uni.api.esm.js deleted file mode 100644 index 6b43481a937809f57b28426efb5a43fb5a60a8d8..0000000000000000000000000000000000000000 --- a/packages/uni-mp-toutiao/dist/uni.api.esm.js +++ /dev/null @@ -1,960 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -const eventChannels = {}; -const eventChannelStack = []; -let id = 0; -function initEventChannel(events, cache = true) { - id++; - const eventChannel = new tt.EventChannel(id, events); - if (cache) { - eventChannels[id] = eventChannel; - eventChannelStack.push(eventChannel); - } - return eventChannel; -} -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} -const navigateTo = { - args(fromArgs) { - const id = initEventChannel(fromArgs.events).id; - if (fromArgs.url) { - fromArgs.url = - fromArgs.url + - (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + - '__id__=' + - id; - } - }, - returnValue(fromRes) { - fromRes.eventChannel = getEventChannel(); - }, -}; - -tt.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - tt.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return tt.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`字节跳动小程序 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`字节跳动小程序 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = tt[options.name || methodName].apply(tt, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return tt.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, tt[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -const redirectTo = {}; - -const previewImage = { - args(fromArgs, toArgs) { - let currentIndex = parseInt(fromArgs.current); - if (isNaN(currentIndex)) { - return; - } - const urls = fromArgs.urls; - if (!isArray(urls)) { - return; - } - const len = urls.length; - if (!len) { - return; - } - if (currentIndex < 0) { - currentIndex = 0; - } - else if (currentIndex >= len) { - currentIndex = len - 1; - } - if (currentIndex > 0) { - toArgs.current = urls[currentIndex]; - toArgs.urls = urls.filter((item, index) => index < currentIndex ? item !== urls[currentIndex] : true); - } - else { - toArgs.current = urls[0]; - } - return { - indicator: false, - loop: false, - }; - }, -}; - -const getProvider = initGetProvider({ - oauth: ['toutiao'], - share: ['toutiao'], - payment: ['toutiao'], - push: ['toutiao'], -}); - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider -}); - -const chooseImage = { - args: { - sizeType: false, - }, -}; -const connectSocket = { - args: { - method: false, - }, -}; -const chooseVideo = { - args: { - camera: false, - }, -}; -const scanCode = { - args: { - onlyFromCamera: false, - scanType: false, - }, -}; -const startAccelerometer = { - args: { - interval: false, - }, -}; -const showToast = { - args: { - image: false, - mask: false, - }, -}; -const showLoading = { - args: { - mask: false, - }, -}; -const showModal = { - args: { - cancelColor: false, - confirmColor: false, - }, -}; -const showActionSheet = { - args: { - itemColor: false, - }, -}; -const login = { - args: { - scopes: false, - timeout: false, - }, -}; -const getUserInfo = { - args: { - lang: false, - timeout: false, - }, -}; -const requestPayment = { - name: tt.pay ? 'pay' : 'requestPayment', - args: { - orderInfo: tt.pay ? 'orderInfo' : 'data', - }, -}; -const getFileInfo = { - args: { - digestAlgorithm: false, - }, -}; - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - chooseImage: chooseImage, - connectSocket: connectSocket, - chooseVideo: chooseVideo, - scanCode: scanCode, - startAccelerometer: startAccelerometer, - showToast: showToast, - showLoading: showLoading, - showModal: showModal, - showActionSheet: showActionSheet, - login: login, - getUserInfo: getUserInfo, - requestPayment: requestPayment, - getFileInfo: getFileInfo, - redirectTo: redirectTo, - navigateTo: navigateTo, - previewImage: previewImage -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-mp-toutiao/dist/uni.mp.esm.js b/packages/uni-mp-toutiao/dist/uni.mp.esm.js deleted file mode 100644 index 64b8d1ccb03b0ca1c08067dc2a2ee95e19044627..0000000000000000000000000000000000000000 --- a/packages/uni-mp-toutiao/dist/uni.mp.esm.js +++ /dev/null @@ -1,1399 +0,0 @@ -import { isPlainObject, hasOwn, isArray, extend, hyphenate, isObject, toNumber, isFunction, NOOP, camelize } from '@vue/shared'; -import { onUnmounted, injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; - -class EventChannel { - constructor(id, events) { - this.id = id; - this.listener = {}; - this.emitCache = {}; - if (events) { - Object.keys(events).forEach((name) => { - this.on(name, events[name]); - }); - } - } - emit(eventName, ...args) { - const fns = this.listener[eventName]; - if (!fns) { - return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args); - } - fns.forEach((opt) => { - opt.fn.apply(opt.fn, args); - }); - this.listener[eventName] = fns.filter((opt) => opt.type !== 'once'); - } - on(eventName, fn) { - this._addListener(eventName, 'on', fn); - this._clearCache(eventName); - } - once(eventName, fn) { - this._addListener(eventName, 'once', fn); - this._clearCache(eventName); - } - off(eventName, fn) { - const fns = this.listener[eventName]; - if (!fns) { - return; - } - if (fn) { - for (let i = 0; i < fns.length;) { - if (fns[i].fn === fn) { - fns.splice(i, 1); - i--; - } - i++; - } - } - else { - delete this.listener[eventName]; - } - } - _clearCache(eventName) { - const cacheArgs = this.emitCache[eventName]; - if (cacheArgs) { - for (; cacheArgs.length > 0;) { - this.emit.apply(this, [eventName, ...cacheArgs.shift()]); - } - } - } - _addListener(eventName, type, fn) { - (this.listener[eventName] || (this.listener[eventName] = [])).push({ - fn, - type, - }); - } -} - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initBehavior(options) { - return Behavior(options); -} -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -const EXTRAS = ['externalClasses']; -function initExtraOptions(miniProgramComponentOptions, vueOptions) { - EXTRAS.forEach((name) => { - if (hasOwn(vueOptions, name)) { - miniProgramComponentOptions[name] = vueOptions[name]; - } - }); -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function selectAllComponents(mpInstance, selector, $refs) { - const components = mpInstance.selectAllComponents(selector); - components.forEach((component) => { - const ref = component.dataset.ref; - $refs[ref] = component.$vm || component; - }); -} -function initRefs(instance, mpInstance) { - Object.defineProperty(instance, 'refs', { - get() { - const $refs = {}; - selectAllComponents(mpInstance, '.vue-ref', $refs); - const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for'); - forComponents.forEach((component) => { - const ref = component.dataset.ref; - if (!$refs[ref]) { - $refs[ref] = []; - } - $refs[ref].push(component.$vm || component); - }); - return $refs; - }, - }); -} -function findVmByVueId(instance, vuePid) { - // 标准 vue3 中 没有 $children,定制了内核 - const $children = instance.$children; - // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) - for (let i = $children.length - 1; i >= 0; i--) { - const childVm = $children[i]; - if (childVm.$scope._$vueId === vuePid) { - return childVm; - } - } - // 反向递归查找 - let parentVm; - for (let i = $children.length - 1; i >= 0; i--) { - parentVm = findVmByVueId($children[i], vuePid); - if (parentVm) { - return parentVm; - } - } -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - instance.slots = {}; - if (isArray(options.slots) && options.slots.length) { - options.slots.forEach((name) => { - instance.slots[name] = true; - }); - } - } - ctx.getOpenerEventChannel = function () { - if (!this.__eventChannel__) { - this.__eventChannel__ = new EventChannel(); - } - return this.__eventChannel__; - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - { - initScopedSlotsParams(instance); - } - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} -const center = {}; -const parents = {}; -function initScopedSlotsParams(instance) { - const ctx = instance.ctx; - ctx.$hasScopedSlotsParams = function (vueId) { - const has = center[vueId]; - if (!has) { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - return has; - }; - ctx.$getScopedSlotsParams = function (vueId, name, key) { - const data = center[vueId]; - if (data) { - const object = data[name] || {}; - return key ? object[key] : object; - } - else { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - }; - ctx.$setScopedSlotsParams = function (name, value) { - const vueIds = instance.attrs.vueId; - if (vueIds) { - const vueId = vueIds.split(',')[0]; - const object = (center[vueId] = center[vueId] || {}); - object[name] = value; - if (parents[vueId]) { - parents[vueId].$forceUpdate(); - } - } - }; - onUnmounted(function () { - const propsData = instance.attrs; - const vueId = propsData && propsData.vueId; - if (vueId) { - delete center[vueId]; - delete parents[vueId]; - } - }, instance); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook$1(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - if (hook === 'onError') { - return getApp().$vm.$callHook(hook, args); - } - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} - -tt.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - tt.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(tt.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function createObserver(name) { - return function observer(newVal) { - if (this.$vm) { - this.$vm.$.props[name] = newVal; // 为了触发其他非 render watcher - } - }; -} -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - { - // 用于字节跳动小程序模拟抽象节点 - properties.generic = { - type: Object, - }; - } - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - prop.observer = createObserver(key); - return prop; -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} -function applyOptions(componentOptions, vueOptions, initBehavior) { - componentOptions.data = initData(vueOptions); - componentOptions.behaviors = initBehaviors(vueOptions, initBehavior); -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -function parseComponent(vueOptions, { parse, mocks, isPage, initRelation, handleLink, initLifetimes, }) { - vueOptions = vueOptions.default || vueOptions; - const options = { - multipleSlots: true, - addGlobalClass: true, - }; - if (vueOptions.options) { - extend(options, vueOptions.options); - } - const mpComponentOptions = { - options, - lifetimes: initLifetimes({ mocks, isPage, initRelation, vueOptions }), - pageLifetimes: { - show() { - this.$vm && this.$vm.$callHook('onPageShow'); - }, - hide() { - this.$vm && this.$vm.$callHook('onPageHide'); - }, - resize(size) { - this.$vm && this.$vm.$callHook('onPageResize', size); - }, - }, - methods: { - __l: handleLink, - __e: handleEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - applyOptions(mpComponentOptions, vueOptions, initBehavior); - } - initProps(mpComponentOptions, vueOptions.props, false); - initExtraOptions(mpComponentOptions, vueOptions); - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - if (parse) { - parse(mpComponentOptions, { handleLink }); - } - return mpComponentOptions; -} -function initCreateComponent(parseOptions) { - return function createComponent(vueComponentOptions) { - return Component(parseComponent(vueComponentOptions, parseOptions)); - }; -} -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function parsePage(vueOptions, parseOptions) { - const { parse, mocks, isPage, initRelation, handleLink, initLifetimes } = parseOptions; - const miniProgramPageOptions = parseComponent(vueOptions, { - mocks, - isPage, - initRelation, - handleLink, - initLifetimes, - }); - const methods = miniProgramPageOptions.methods; - methods.onLoad = function (query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - return this.$vm && this.$vm.$callHook(ON_LOAD, query); - }; - initHooks(methods, PAGE_HOOKS); - initUnknownHooks(methods, vueOptions); - parse && parse(miniProgramPageOptions, { handleLink }); - return miniProgramPageOptions; -} -function initCreatePage(parseOptions) { - return function createPage(vuePageOptions) { - return Component(parsePage(vuePageOptions, parseOptions)); - }; -} - -const MPPage = Page; -const MPComponent = Component; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initTriggerEvent(mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]); - }; -} -function initHook(name, options) { - const oldHook = options[name]; - if (!oldHook) { - options[name] = function () { - initTriggerEvent(this); - }; - } - else { - options[name] = function (...args) { - initTriggerEvent(this); - return oldHook.apply(this, args); - }; - } -} -Page = function (options) { - initHook(ON_LOAD, options); - return MPPage(options); -}; -Component = function (options) { - initHook('created', options); - return MPComponent(options); -}; - -function provide(instance, key, value) { - if (!instance) { - if ((process.env.NODE_ENV !== 'production')) { - console.warn(`provide() can only be used inside setup().`); - } - } - else { - let provides = instance.provides; - // by default an instance inherits its parent's provides object - // but when it needs to provide values of its own, it creates its - // own provides object using parent provides object as prototype. - // this way in `inject` we can simply look up injections from direct - // parent and let the prototype chain do the work. - const parentProvides = instance.parent && instance.parent.provides; - if (parentProvides === provides) { - provides = instance.provides = Object.create(parentProvides); - } - // TS doesn't allow symbol as index type - provides[key] = value; - } -} -function initProvide(instance) { - const provideOptions = instance.$options.provide; - if (!provideOptions) { - return; - } - const provides = isFunction(provideOptions) - ? provideOptions.call(instance) - : provideOptions; - const internalInstance = instance.$; - for (const key in provides) { - provide(internalInstance, key, provides[key]); - } -} -function inject(instance, key, defaultValue, treatDefaultAsFactory = false) { - if (instance) { - // #2400 - // to support `app.use` plugins, - // fallback to appContext's `provides` if the intance is at root - const provides = instance.parent == null - ? instance.vnode.appContext && instance.vnode.appContext.provides - : instance.parent.provides; - if (provides && key in provides) { - // TS doesn't allow symbol as index type - return provides[key]; - } - else if (arguments.length > 1) { - return treatDefaultAsFactory && isFunction(defaultValue) - ? defaultValue() - : defaultValue; - } - else if ((process.env.NODE_ENV !== 'production')) { - console.warn(`injection "${String(key)}" not found.`); - } - } - else if ((process.env.NODE_ENV !== 'production')) { - console.warn(`inject() can only be used inside setup() or functional components.`); - } -} -function initInjections(instance) { - const injectOptions = instance.$options.inject; - if (!injectOptions) { - return; - } - const internalInstance = instance.$; - const ctx = internalInstance.ctx; - if (isArray(injectOptions)) { - for (let i = 0; i < injectOptions.length; i++) { - const key = injectOptions[i]; - ctx[key] = inject(internalInstance, key); - } - } - else { - for (const key in injectOptions) { - const opt = injectOptions[key]; - if (isObject(opt)) { - ctx[key] = inject(internalInstance, opt.from || key, opt.default, true /* treat default function as factory */); - } - else { - ctx[key] = inject(internalInstance, opt); - } - } - } -} - -function initLifetimes$1({ mocks, isPage, initRelation, vueOptions, }) { - return { - attached() { - const properties = this.properties; - initVueIds(properties.vueId, this); - const relationOptions = { - vuePid: this._$vuePid, - }; - // 初始化 vue 实例 - const mpInstance = this; - const mpType = isPage(mpInstance) ? 'page' : 'component'; - if (mpType === 'page' && !mpInstance.route && mpInstance.__route__) { - mpInstance.route = mpInstance.__route__; - } - this.$vm = $createComponent({ - type: vueOptions, - props: properties, - }, { - mpType, - mpInstance, - slots: properties.vueSlots, - parentComponent: relationOptions.parent && relationOptions.parent.$, - onBeforeSetup(instance, options) { - initRefs(instance, mpInstance); - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); - // 处理父子关系 - initRelation(this, relationOptions); - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - }, - }; -} - -const mocks = [ - '__route__', - '__webviewId__', - '__nodeId__', - '__nodeid__' /* @Deprecated */, -]; -function isPage(mpInstance) { - return (mpInstance.__nodeId__ === 0 || mpInstance.__nodeid__ === 0); -} -const instances = Object.create(null); -function initRelation(mpInstance, detail) { - // 头条 triggerEvent 后,接收事件时机特别晚,已经到了 ready 之后 - const nodeId = hasOwn(mpInstance, '__nodeId__') - ? mpInstance.__nodeId__ - : mpInstance.__nodeid__; - const webviewId = mpInstance.__webviewId__ + ''; - instances[webviewId + '_' + nodeId] = mpInstance.$vm; - mpInstance.triggerEvent('__l', { - vuePid: detail.vuePid, - nodeId, - webviewId, - }); -} -function handleLink({ detail: { vuePid, nodeId, webviewId }, }) { - const vm = instances[webviewId + '_' + nodeId]; - if (!vm) { - return; - } - let parentVm; - if (vuePid) { - parentVm = findVmByVueId(this.$vm, vuePid); - } - if (!parentVm) { - parentVm = this.$vm; - } - vm.$.parent = parentVm.$; - if (__VUE_OPTIONS_API__) { - parentVm.$children.push(vm); - const parent = parentVm.$; - vm.$.provides = parent - ? parent.provides - : Object.create(parent.appContext.provides); - initInjections(vm); - initProvide(vm); - } - vm.$callCreatedHook(); - vm.$callHook('mounted'); - vm.$callHook(ON_READY); -} -function parse(componentOptions, { handleLink }) { - componentOptions.methods.__l = handleLink; -} - -var parseComponentOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - instances: instances, - initRelation: initRelation, - handleLink: handleLink, - parse: parse, - initLifetimes: initLifetimes$1 -}); - -function initLifetimes(lifetimesOptions) { - return extend(initLifetimes$1(lifetimesOptions), { - ready() { - if (this.$vm && lifetimesOptions.isPage(this)) { - this.$vm.$callCreatedHook(); - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - } - else { - this.is && console.warn(this.is + ' is not ready'); - } - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - // 清理 - const webviewId = this.__webviewId__; - webviewId && - Object.keys(instances).forEach((key) => { - if (key.indexOf(webviewId + '_') === 0) { - delete instances[key]; - } - }); - }, - }); -} - -var parsePageOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - initRelation: initRelation, - handleLink: handleLink, - parse: parse, - initLifetimes: initLifetimes -}); - -const createApp = initCreateApp(); -const createPage = initCreatePage(parsePageOptions); -const createComponent = initCreateComponent(parseComponentOptions); -tt.EventChannel = EventChannel; -tt.createApp = createApp; -tt.createPage = createPage; -tt.createComponent = createComponent; - -export { createApp, createComponent, createPage }; diff --git a/packages/uni-mp-weixin/dist/uni.api.esm.js b/packages/uni-mp-weixin/dist/uni.api.esm.js deleted file mode 100644 index 4e420c5801411a2591231185e0633e5900c94ac0..0000000000000000000000000000000000000000 --- a/packages/uni-mp-weixin/dist/uni.api.esm.js +++ /dev/null @@ -1,858 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -wx.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - wx.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return wx.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`微信小程序 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`微信小程序 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = wx[options.name || methodName].apply(wx, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return wx.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, wx[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -function addSafeAreaInsets(fromRes, toRes) { - if (fromRes.safeArea) { - const safeArea = fromRes.safeArea; - toRes.safeAreaInsets = { - top: safeArea.top, - left: safeArea.left, - right: fromRes.windowWidth - safeArea.right, - bottom: fromRes.windowHeight - safeArea.bottom, - }; - } -} - -const getSystemInfo = { - returnValue: addSafeAreaInsets, -}; - -const getSystemInfoSync = getSystemInfo; - -const redirectTo = {}; - -const previewImage = { - args(fromArgs, toArgs) { - let currentIndex = parseInt(fromArgs.current); - if (isNaN(currentIndex)) { - return; - } - const urls = fromArgs.urls; - if (!isArray(urls)) { - return; - } - const len = urls.length; - if (!len) { - return; - } - if (currentIndex < 0) { - currentIndex = 0; - } - else if (currentIndex >= len) { - currentIndex = len - 1; - } - if (currentIndex > 0) { - toArgs.current = urls[currentIndex]; - toArgs.urls = urls.filter((item, index) => index < currentIndex ? item !== urls[currentIndex] : true); - } - else { - toArgs.current = urls[0]; - } - return { - indicator: false, - loop: false, - }; - }, -}; - -const getProvider = initGetProvider({ - oauth: ['weixin'], - share: ['weixin'], - payment: ['wxpay'], - push: ['weixin'], -}); - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider -}); - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - redirectTo: redirectTo, - previewImage: previewImage, - getSystemInfo: getSystemInfo, - getSystemInfoSync: getSystemInfoSync -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-mp-weixin/dist/uni.mp.esm.js b/packages/uni-mp-weixin/dist/uni.mp.esm.js deleted file mode 100644 index 0f4d3d6e9f4b0beaa95c3a5db95c84a194df5b54..0000000000000000000000000000000000000000 --- a/packages/uni-mp-weixin/dist/uni.mp.esm.js +++ /dev/null @@ -1,1185 +0,0 @@ -import { isPlainObject, hasOwn, isArray, extend, hyphenate, isObject, toNumber, isFunction, NOOP, camelize } from '@vue/shared'; -import { onUnmounted, injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initBehavior(options) { - return Behavior(options); -} -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -const EXTRAS = ['externalClasses']; -function initExtraOptions(miniProgramComponentOptions, vueOptions) { - EXTRAS.forEach((name) => { - if (hasOwn(vueOptions, name)) { - miniProgramComponentOptions[name] = vueOptions[name]; - } - }); -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function selectAllComponents(mpInstance, selector, $refs) { - const components = mpInstance.selectAllComponents(selector); - components.forEach((component) => { - const ref = component.dataset.ref; - $refs[ref] = component.$vm || component; - { - if (component.dataset.vueGeneric === 'scoped') { - component - .selectAllComponents('.scoped-ref') - .forEach((scopedComponent) => { - selectAllComponents(scopedComponent, selector, $refs); - }); - } - } - }); -} -function initRefs(instance, mpInstance) { - Object.defineProperty(instance, 'refs', { - get() { - const $refs = {}; - selectAllComponents(mpInstance, '.vue-ref', $refs); - const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for'); - forComponents.forEach((component) => { - const ref = component.dataset.ref; - if (!$refs[ref]) { - $refs[ref] = []; - } - $refs[ref].push(component.$vm || component); - }); - return $refs; - }, - }); -} -function findVmByVueId(instance, vuePid) { - // 标准 vue3 中 没有 $children,定制了内核 - const $children = instance.$children; - // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) - for (let i = $children.length - 1; i >= 0; i--) { - const childVm = $children[i]; - if (childVm.$scope._$vueId === vuePid) { - return childVm; - } - } - // 反向递归查找 - let parentVm; - for (let i = $children.length - 1; i >= 0; i--) { - parentVm = findVmByVueId($children[i], vuePid); - if (parentVm) { - return parentVm; - } - } -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - instance.slots = {}; - if (isArray(options.slots) && options.slots.length) { - options.slots.forEach((name) => { - instance.slots[name] = true; - }); - } - } - ctx.getOpenerEventChannel = function () { - // 微信小程序使用自身getOpenerEventChannel - { - return options.mpInstance.getOpenerEventChannel(); - } - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - { - initScopedSlotsParams(instance); - } - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} -const center = {}; -const parents = {}; -function initScopedSlotsParams(instance) { - const ctx = instance.ctx; - ctx.$hasScopedSlotsParams = function (vueId) { - const has = center[vueId]; - if (!has) { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - return has; - }; - ctx.$getScopedSlotsParams = function (vueId, name, key) { - const data = center[vueId]; - if (data) { - const object = data[name] || {}; - return key ? object[key] : object; - } - else { - parents[vueId] = this; - onUnmounted(() => { - delete parents[vueId]; - }, instance); - } - }; - ctx.$setScopedSlotsParams = function (name, value) { - const vueIds = instance.attrs.vueId; - if (vueIds) { - const vueId = vueIds.split(',')[0]; - const object = (center[vueId] = center[vueId] || {}); - object[name] = value; - if (parents[vueId]) { - parents[vueId].$forceUpdate(); - } - } - }; - onUnmounted(function () { - const propsData = instance.attrs; - const vueId = propsData && propsData.vueId; - if (vueId) { - delete center[vueId]; - delete parents[vueId]; - } - }, instance); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook$1(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} - -wx.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - wx.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(wx.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function createObserver(name) { - return function observer(newVal) { - if (this.$vm) { - this.$vm.$.props[name] = newVal; // 为了触发其他非 render watcher - } - }; -} -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - prop.observer = createObserver(key); - return prop; -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} -function applyOptions(componentOptions, vueOptions, initBehavior) { - componentOptions.data = initData(vueOptions); - componentOptions.behaviors = initBehaviors(vueOptions, initBehavior); -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -function parseComponent(vueOptions, { parse, mocks, isPage, initRelation, handleLink, initLifetimes, }) { - vueOptions = vueOptions.default || vueOptions; - const options = { - multipleSlots: true, - addGlobalClass: true, - }; - if (vueOptions.options) { - extend(options, vueOptions.options); - } - const mpComponentOptions = { - options, - lifetimes: initLifetimes({ mocks, isPage, initRelation, vueOptions }), - pageLifetimes: { - show() { - this.$vm && this.$vm.$callHook('onPageShow'); - }, - hide() { - this.$vm && this.$vm.$callHook('onPageHide'); - }, - resize(size) { - this.$vm && this.$vm.$callHook('onPageResize', size); - }, - }, - methods: { - __l: handleLink, - __e: handleEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - applyOptions(mpComponentOptions, vueOptions, initBehavior); - } - initProps(mpComponentOptions, vueOptions.props, false); - initExtraOptions(mpComponentOptions, vueOptions); - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - if (parse) { - parse(mpComponentOptions, { handleLink }); - } - return mpComponentOptions; -} -function initCreateComponent(parseOptions) { - return function createComponent(vueComponentOptions) { - return Component(parseComponent(vueComponentOptions, parseOptions)); - }; -} -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function parsePage(vueOptions, parseOptions) { - const { parse, mocks, isPage, initRelation, handleLink, initLifetimes } = parseOptions; - const miniProgramPageOptions = parseComponent(vueOptions, { - mocks, - isPage, - initRelation, - handleLink, - initLifetimes, - }); - const methods = miniProgramPageOptions.methods; - methods.onLoad = function (query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - return this.$vm && this.$vm.$callHook(ON_LOAD, query); - }; - initHooks(methods, PAGE_HOOKS); - initUnknownHooks(methods, vueOptions); - parse && parse(miniProgramPageOptions, { handleLink }); - return miniProgramPageOptions; -} -function initCreatePage(parseOptions) { - return function createPage(vuePageOptions) { - return Component(parsePage(vuePageOptions, parseOptions)); - }; -} - -const MPPage = Page; -const MPComponent = Component; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initTriggerEvent(mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]); - }; -} -function initHook(name, options) { - const oldHook = options[name]; - if (!oldHook) { - options[name] = function () { - initTriggerEvent(this); - }; - } - else { - options[name] = function (...args) { - initTriggerEvent(this); - return oldHook.apply(this, args); - }; - } -} -Page = function (options) { - initHook(ON_LOAD, options); - return MPPage(options); -}; -Component = function (options) { - initHook('created', options); - return MPComponent(options); -}; - -function initLifetimes({ mocks, isPage, initRelation, vueOptions, }) { - return { - attached() { - const properties = this.properties; - initVueIds(properties.vueId, this); - const relationOptions = { - vuePid: this._$vuePid, - }; - // 处理父子关系 - initRelation(this, relationOptions); - // 初始化 vue 实例 - const mpInstance = this; - this.$vm = $createComponent({ - type: vueOptions, - props: properties, - }, { - mpType: isPage(mpInstance) ? 'page' : 'component', - mpInstance, - slots: properties.vueSlots, - parentComponent: relationOptions.parent && relationOptions.parent.$, - onBeforeSetup(instance, options) { - initRefs(instance, mpInstance); - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); - }, - ready() { - // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发 - // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800 - if (this.$vm) { - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - } - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - }, - }; -} - -const mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__']; -function isPage(mpInstance) { - return !!mpInstance.route; -} -function initRelation(mpInstance, detail) { - mpInstance.triggerEvent('__l', detail); -} -function handleLink(event) { - // detail 是微信,value 是百度(dipatch) - const detail = (event.detail || - event.value); - const vuePid = detail.vuePid; - let parentVm; - if (vuePid) { - parentVm = findVmByVueId(this.$vm, vuePid); - } - if (!parentVm) { - parentVm = this.$vm; - } - detail.parent = parentVm; -} - -var parseOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - initRelation: initRelation, - handleLink: handleLink, - initLifetimes: initLifetimes -}); - -const createApp = initCreateApp(); -const createPage = initCreatePage(parseOptions); -const createComponent = initCreateComponent(parseOptions); -wx.createApp = createApp; -wx.createPage = createPage; -wx.createComponent = createComponent; - -export { createApp, createComponent, createPage }; diff --git a/packages/uni-mp-weixin/dist/wx.js b/packages/uni-mp-weixin/dist/wx.js new file mode 100644 index 0000000000000000000000000000000000000000..3d54e1cc73976c0b2455ff3a85764cd8e438c22a --- /dev/null +++ b/packages/uni-mp-weixin/dist/wx.js @@ -0,0 +1,38 @@ +const hasOwnProperty = Object.prototype.hasOwnProperty + +function hasOwn(obj, key) { + return hasOwnProperty.call(obj, key) +} + +function isFn(fn) { + return typeof fn === 'function' +} + +const objectKeys = [ + 'env', + 'error', + 'version', + 'lanDebug', + 'cloud', + 'serviceMarket', + 'router', + 'worklet' +] +const oldWx = globalThis[['w', 'x'].join('')] + +function initWx() { + const WxProxyHandlers = { + get(target, key) { + if (hasOwn(target, key)) { + return target[key] + } + if (objectKeys.indexOf(key) > -1 || isFn(oldWx[key])) { + return oldWx[key] + } + } + } + return new Proxy({}, WxProxyHandlers) +} +const wxProxy = initWx() +globalThis[['w', 'x'].join('')] = wxProxy +export default wxProxy diff --git a/packages/uni-quickapp-webview/dist/uni.api.esm.js b/packages/uni-quickapp-webview/dist/uni.api.esm.js deleted file mode 100644 index d35e435b2d89b974cb55c7c89c740dcaa8a9f915..0000000000000000000000000000000000000000 --- a/packages/uni-quickapp-webview/dist/uni.api.esm.js +++ /dev/null @@ -1,902 +0,0 @@ -import { isArray, hasOwn, isString, isPlainObject, isObject, capitalize, toRawType, makeMap, isPromise, isFunction, extend } from '@vue/shared'; -import { injectHook } from 'vue'; - -//App -const ON_LAUNCH = 'onLaunch'; - -const eventChannels = {}; -const eventChannelStack = []; -let id = 0; -function initEventChannel(events, cache = true) { - id++; - const eventChannel = new qa.EventChannel(id, events); - if (cache) { - eventChannels[id] = eventChannel; - eventChannelStack.push(eventChannel); - } - return eventChannel; -} -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} -const navigateTo = { - args(fromArgs) { - const id = initEventChannel(fromArgs.events).id; - if (fromArgs.url) { - fromArgs.url = - fromArgs.url + - (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + - '__id__=' + - id; - } - }, - returnValue(fromRes) { - fromRes.eventChannel = getEventChannel(); - }, -}; - -qa.appLaunchHooks = []; -function onAppLaunch(hook) { - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return injectHook(ON_LAUNCH, hook, app.$vm.$); - } - qa.appLaunchHooks.push(hook); -} - -function getBaseSystemInfo() { - return qa.getSystemInfoSync() -} - -function validateProtocolFail(name, msg) { - console.warn(`${name}: ${msg}`); -} -function validateProtocol(name, data, protocol, onFail) { - if (!onFail) { - onFail = validateProtocolFail; - } - for (const key in protocol) { - const errMsg = validateProp(key, data[key], protocol[key], !hasOwn(data, key)); - if (isString(errMsg)) { - onFail(name, errMsg); - } - } -} -function validateProtocols(name, args, protocol, onFail) { - if (!protocol) { - return; - } - if (!isArray(protocol)) { - return validateProtocol(name, args[0] || Object.create(null), protocol, onFail); - } - const len = protocol.length; - const argsLen = args.length; - for (let i = 0; i < len; i++) { - const opts = protocol[i]; - const data = Object.create(null); - if (argsLen > i) { - data[opts.name] = args[i]; - } - validateProtocol(name, data, { [opts.name]: opts }, onFail); - } -} -function validateProp(name, value, prop, isAbsent) { - if (!isPlainObject(prop)) { - prop = { type: prop }; - } - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - return 'Missing required args: "' + name + '"'; - } - // missing but optional - if (value == null && !required) { - return; - } - // type check - if (type != null) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - return getInvalidTypeMessage(name, value, expectedTypes); - } - } - // custom validator - if (validator) { - return validator(value); - } -} -const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol'); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - // for primitive wrapper objects - if (!valid && t === 'object') { - valid = value instanceof type; - } - } - else if (expectedType === 'Object') { - valid = isObject(value); - } - else if (expectedType === 'Array') { - valid = isArray(value); - } - else { - { - valid = value instanceof type; - } - } - return { - valid, - expectedType, - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid args: type check failed for args "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if (expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ''; -} -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"`; - } - else if (type === 'Number') { - return `${Number(value)}`; - } - else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean'); -} - -const HOOK_SUCCESS = 'success'; -const HOOK_FAIL = 'fail'; -const HOOK_COMPLETE = 'complete'; -const globalInterceptors = {}; -const scopedInterceptors = {}; -function wrapperHook(hook) { - return function (data) { - return hook(data) || data; - }; -} -function queue(hooks, data) { - let promise = false; - for (let i = 0; i < hooks.length; i++) { - const hook = hooks[i]; - if (promise) { - promise = Promise.resolve(wrapperHook(hook)); - } - else { - const res = hook(data); - if (isPromise(res)) { - promise = Promise.resolve(res); - } - if (res === false) { - return { - then() { }, - catch() { }, - }; - } - } - } - return (promise || { - then(callback) { - return callback(data); - }, - catch() { }, - }); -} -function wrapperOptions(interceptors, options = {}) { - [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => { - const hooks = interceptors[name]; - if (!isArray(hooks)) { - return; - } - const oldCallback = options[name]; - options[name] = function callbackInterceptor(res) { - queue(hooks, res).then((res) => { - return (isFunction(oldCallback) && oldCallback(res)) || res; - }); - }; - }); - return options; -} -function wrapperReturnValue(method, returnValue) { - const returnValueHooks = []; - if (isArray(globalInterceptors.returnValue)) { - returnValueHooks.push(...globalInterceptors.returnValue); - } - const interceptor = scopedInterceptors[method]; - if (interceptor && 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 (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); -} - -function handlePromise(promise) { - if (__UNI_FEATURE_PROMISE__) { - return promise - .then((data) => { - return [null, data]; - }) - .catch((err) => [err]); - } - return promise; -} - -function formatApiArgs(args, options) { - const params = args[0]; - if (!options || - (!isPlainObject(options.formatArgs) && isPlainObject(params))) { - return; - } - const formatArgs = options.formatArgs; - const keys = Object.keys(formatArgs); - for (let i = 0; i < keys.length; i++) { - const name = keys[i]; - const formatterOrDefaultValue = formatArgs[name]; - if (isFunction(formatterOrDefaultValue)) { - const errMsg = formatterOrDefaultValue(args[0][name], params); - if (isString(errMsg)) { - return errMsg; - } - } - else { - // defaultValue - if (!hasOwn(params, name)) { - params[name] = formatterOrDefaultValue; - } - } - } -} -function beforeInvokeApi(name, args, protocol, options) { - if ((process.env.NODE_ENV !== 'production')) { - validateProtocols(name, args, protocol); - } - if (options && options.beforeInvoke) { - const errMsg = options.beforeInvoke(args); - if (isString(errMsg)) { - return errMsg; - } - } - const errMsg = formatApiArgs(args, options); - if (errMsg) { - return errMsg; - } -} -function wrapperSyncApi(name, fn, protocol, options) { - return (...args) => { - const errMsg = beforeInvokeApi(name, args, protocol, options); - if (errMsg) { - throw new Error(errMsg); - } - return fn.apply(null, args); - }; -} -function defineSyncApi(name, fn, protocol, options) { - return wrapperSyncApi(name, fn, (process.env.NODE_ENV !== 'production') ? protocol : undefined, options); -} - -const API_UPX2PX = 'upx2px'; -const Upx2pxProtocol = [ - { - name: 'upx', - type: [Number, String], - required: true, - }, -]; - -const EPS = 1e-4; -const BASE_DEVICE_WIDTH = 750; -let isIOS = false; -let deviceWidth = 0; -let deviceDPR = 0; -function checkDeviceWidth() { - const { platform, pixelRatio, windowWidth } = getBaseSystemInfo(); - deviceWidth = windowWidth; - deviceDPR = pixelRatio; - isIOS = platform === 'ios'; -} -const upx2px = defineSyncApi(API_UPX2PX, (number, newDeviceWidth) => { - if (deviceWidth === 0) { - checkDeviceWidth(); - } - number = Number(number); - if (number === 0) { - return 0; - } - let width = newDeviceWidth || deviceWidth; - let result = (number / BASE_DEVICE_WIDTH) * width; - if (result < 0) { - result = -result; - } - result = Math.floor(result + EPS); - if (result === 0) { - if (deviceDPR === 1 || !isIOS) { - result = 1; - } - else { - result = 0.5; - } - } - return number < 0 ? -result : result; -}, Upx2pxProtocol); - -const API_ADD_INTERCEPTOR = 'addInterceptor'; -const API_REMOVE_INTERCEPTOR = 'removeInterceptor'; -const AddInterceptorProtocol = [ - { - name: 'method', - type: [String, Object], - required: true, - }, -]; -const RemoveInterceptorProtocol = AddInterceptorProtocol; - -function mergeInterceptorHook(interceptors, interceptor) { - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - interceptors[hook] = mergeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function removeInterceptorHook(interceptors, interceptor) { - if (!interceptors || !interceptor) { - return; - } - Object.keys(interceptor).forEach((hook) => { - if (isFunction(interceptor[hook])) { - removeHook(interceptors[hook], interceptor[hook]); - } - }); -} -function mergeHook(parentVal, childVal) { - const res = childVal - ? parentVal - ? parentVal.concat(childVal) - : 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) { - if (!hooks) { - return; - } - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } -} -const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string' && isPlainObject(interceptor)) { - mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), interceptor); - } - else if (isPlainObject(method)) { - mergeInterceptorHook(globalInterceptors, method); - } -}, AddInterceptorProtocol); -const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method, interceptor) => { - if (typeof method === 'string') { - if (isPlainObject(interceptor)) { - removeInterceptorHook(scopedInterceptors[method], interceptor); - } - else { - delete scopedInterceptors[method]; - } - } - else if (isPlainObject(method)) { - removeInterceptorHook(globalInterceptors, method); - } -}, RemoveInterceptorProtocol); -const interceptors = {}; - -const API_ON = '$on'; -const OnProtocol = [ - { - name: 'event', - type: String, - required: true, - }, - { - name: 'callback', - type: Function, - required: true, - }, -]; -const API_ONCE = '$once'; -const OnceProtocol = OnProtocol; -const API_OFF = '$off'; -const OffProtocol = [ - { - name: 'event', - type: [String, Array], - }, - { - name: 'callback', - type: Function, - }, -]; -const API_EMIT = '$emit'; -const EmitProtocol = [ - { - name: 'event', - type: String, - required: true, - }, -]; - -const E = function () { - // Keep this empty so it's easier to inherit from - // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -}; -E.prototype = { - on: function (name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx, - }); - return this; - }, - once: function (name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function (name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function (name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); - } - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? (e[name] = liveEvents) : delete e[name]; - return this; - }, -}; -var Emitter = E; - -const emitter = new Emitter(); -const $on = defineSyncApi(API_ON, (name, callback) => { - emitter.on(name, callback); - return () => emitter.off(name, callback); -}, OnProtocol); -const $once = defineSyncApi(API_ONCE, (name, callback) => { - emitter.once(name, callback); - return () => emitter.off(name, callback); -}, OnceProtocol); -const $off = defineSyncApi(API_OFF, (name, callback) => { - if (!name) { - emitter.e = {}; - return; - } - if (!Array.isArray(name)) - name = [name]; - name.forEach((n) => emitter.off(n, callback)); -}, OffProtocol); -const $emit = defineSyncApi(API_EMIT, (name, ...args) => { - emitter.emit(name, ...args); -}, EmitProtocol); - -const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; -const CONTEXT_API_RE = /^create|Manager$/; -// Context例外情况 -const CONTEXT_API_RE_EXC = ['createBLEConnection']; -// 同步例外情况 -const ASYNC_API = ['createBLEConnection']; -const CALLBACK_API_RE = /^on|^off/; -function isContextApi(name) { - return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1; -} -function isSyncApi(name) { - return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1; -} -function isCallbackApi(name) { - return CALLBACK_API_RE.test(name) && name !== 'onPush'; -} -function shouldPromise(name) { - if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) { - return false; - } - return true; -} -/* eslint-disable no-extend-native */ -if (!Promise.prototype.finally) { - Promise.prototype.finally = function (onfinally) { - const promise = this.constructor; - return this.then((value) => promise.resolve(onfinally && onfinally()).then(() => value), (reason) => promise.resolve(onfinally && onfinally()).then(() => { - throw reason; - })); - }; -} -function promisify(name, api) { - if (!shouldPromise(name)) { - return api; - } - if (!isFunction(api)) { - return api; - } - return function promiseApi(options = {}) { - if (isFunction(options.success) || - isFunction(options.fail) || - isFunction(options.complete)) { - return wrapperReturnValue(name, invokeApi(name, api, options)); - } - return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => { - invokeApi(name, api, extend({}, options, { - success: resolve, - fail: reject, - })); - }))); - }; -} - -const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; -function initWrapper(protocols) { - function processCallback(methodName, method, returnValue) { - return function (res) { - return method(processReturnValue(methodName, res, returnValue)); - }; - } - function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) { - if (isPlainObject(fromArgs)) { - // 一般 api 的参数解析 - const toArgs = (keepFromArgs === true ? fromArgs : {}); // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值 - if (isFunction(argsOption)) { - argsOption = argsOption(fromArgs, toArgs) || {}; - } - for (const key in fromArgs) { - if (hasOwn(argsOption, key)) { - let keyOption = argsOption[key]; - if (isFunction(keyOption)) { - keyOption = keyOption(fromArgs[key], fromArgs, toArgs); - } - if (!keyOption) { - // 不支持的参数 - console.warn(`快应用(Webview)版 ${methodName} 暂不支持 ${key}`); - } - else if (isString(keyOption)) { - // 重写参数 key - toArgs[keyOption] = fromArgs[key]; - } - else if (isPlainObject(keyOption)) { - // {name:newName,value:value}可重新指定参数 key:value - toArgs[keyOption.name ? keyOption.name : key] = keyOption.value; - } - } - else if (CALLBACKS.indexOf(key) !== -1) { - const callback = fromArgs[key]; - if (isFunction(callback)) { - toArgs[key] = processCallback(methodName, callback, returnValue); - } - } - else { - if (!keepFromArgs && !hasOwn(toArgs, key)) { - toArgs[key] = fromArgs[key]; - } - } - } - return toArgs; - } - else if (isFunction(fromArgs)) { - fromArgs = processCallback(methodName, fromArgs, returnValue); - } - return fromArgs; - } - function processReturnValue(methodName, res, returnValue, keepReturnValue = false) { - if (isFunction(protocols.returnValue)) { - // 处理通用 returnValue - res = protocols.returnValue(methodName, res); - } - return processArgs(methodName, res, returnValue, {}, keepReturnValue); - } - return function wrapper(methodName, method) { - if (!hasOwn(protocols, methodName)) { - return method; - } - const protocol = protocols[methodName]; - if (!protocol) { - // 暂不支持的 api - return function () { - console.error(`快应用(Webview)版 暂不支持${methodName}`); - }; - } - return function (arg1, arg2) { - // 目前 api 最多两个参数 - let options = protocol; - if (isFunction(protocol)) { - options = protocol(arg1); - } - arg1 = processArgs(methodName, arg1, options.args, options.returnValue); - const args = [arg1]; - if (typeof arg2 !== 'undefined') { - args.push(arg2); - } - const returnValue = qa[options.name || methodName].apply(qa, args); - if (isSyncApi(methodName)) { - // 同步 api - return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName)); - } - return returnValue; - }; - }; -} - -const getLocale = () => { - // 优先使用 $locale - const app = getApp({ allowDefault: true }); - if (app && app.$vm) { - return app.$vm.$locale; - } - return qa.getSystemInfoSync().language || 'zh-Hans'; -}; -const setLocale = (locale) => { - const app = getApp(); - if (!app) { - return false; - } - const oldLocale = app.$vm.$locale; - if (oldLocale !== locale) { - app.$vm.$locale = locale; - onLocaleChangeCallbacks.forEach((fn) => fn({ locale })); - return true; - } - return false; -}; -const onLocaleChangeCallbacks = []; -const onLocaleChange = (fn) => { - if (onLocaleChangeCallbacks.indexOf(fn) === -1) { - onLocaleChangeCallbacks.push(fn); - } -}; -if (typeof global !== 'undefined') { - global.getLocale = getLocale; -} - -const baseApis = { - $on, - $off, - $once, - $emit, - upx2px, - interceptors, - addInterceptor, - removeInterceptor, - onAppLaunch, - getLocale, - setLocale, - onLocaleChange, -}; -function initUni(api, protocols) { - const wrapper = initWrapper(protocols); - const UniProxyHandlers = { - get(target, key) { - if (hasOwn(target, key)) { - return target[key]; - } - if (hasOwn(api, key)) { - return promisify(key, api[key]); - } - if (hasOwn(baseApis, key)) { - return promisify(key, baseApis[key]); - } - // event-api - // provider-api? - return promisify(key, wrapper(key, qa[key])); - }, - }; - return new Proxy({}, UniProxyHandlers); -} - -function initGetProvider(providers) { - return function getProvider({ service, success, fail, complete, }) { - let res; - if (providers[service]) { - res = { - errMsg: 'getProvider:ok', - service, - provider: providers[service], - }; - isFunction(success) && success(res); - } - else { - res = { - errMsg: 'getProvider:fail:服务[' + service + ']不存在', - }; - isFunction(fail) && fail(res); - } - isFunction(complete) && complete(res); - }; -} - -function addSafeAreaInsets(fromRes, toRes) { - if (fromRes.safeArea) { - const safeArea = fromRes.safeArea; - toRes.safeAreaInsets = { - top: safeArea.top, - left: safeArea.left, - right: fromRes.windowWidth - safeArea.right, - bottom: fromRes.windowHeight - safeArea.bottom, - }; - } -} - -const getSystemInfo = { - returnValue: addSafeAreaInsets, -}; - -const getSystemInfoSync = getSystemInfo; - -const redirectTo = {}; - -const previewImage = { - args(fromArgs, toArgs) { - let currentIndex = parseInt(fromArgs.current); - if (isNaN(currentIndex)) { - return; - } - const urls = fromArgs.urls; - if (!isArray(urls)) { - return; - } - const len = urls.length; - if (!len) { - return; - } - if (currentIndex < 0) { - currentIndex = 0; - } - else if (currentIndex >= len) { - currentIndex = len - 1; - } - if (currentIndex > 0) { - toArgs.current = urls[currentIndex]; - toArgs.urls = urls.filter((item, index) => index < currentIndex ? item !== urls[currentIndex] : true); - } - else { - toArgs.current = urls[0]; - } - return { - indicator: false, - loop: false, - }; - }, -}; - -const providers = { - oauth: [], - share: [], - payment: [], - push: [], -}; -if (qa.canIUse('getAccountProvider')) { - providers.oauth.push(qa.getAccountProvider()); -} -if (qa.canIUse('getVendorPaymentProvider')) { - providers.payment.push(qa.getVendorPaymentProvider()); -} -const getProvider = initGetProvider(providers); - -var shims = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider -}); - -var protocols = /*#__PURE__*/Object.freeze({ - __proto__: null, - redirectTo: redirectTo, - navigateTo: navigateTo, - previewImage: previewImage, - getSystemInfo: getSystemInfo, - getSystemInfoSync: getSystemInfoSync -}); - -var index = initUni(shims, protocols); - -export { index as default }; diff --git a/packages/uni-quickapp-webview/dist/uni.mp.esm.js b/packages/uni-quickapp-webview/dist/uni.mp.esm.js deleted file mode 100644 index 2f854f2a9686370bdd4eadfcf653316d565f3506..0000000000000000000000000000000000000000 --- a/packages/uni-quickapp-webview/dist/uni.mp.esm.js +++ /dev/null @@ -1,1335 +0,0 @@ -import { isPlainObject, hasOwn, isArray, extend, hyphenate, isObject, toNumber, isFunction, NOOP, camelize } from '@vue/shared'; -import { injectHook, ref } from 'vue'; - -const encode = encodeURIComponent; -function stringifyQuery(obj, encodeStr = encode) { - const res = obj - ? Object.keys(obj) - .map((key) => { - let val = obj[key]; - if (typeof val === undefined || val === null) { - val = ''; - } - else if (isPlainObject(val)) { - val = JSON.stringify(val); - } - return encodeStr(key) + '=' + encodeStr(val); - }) - .filter((x) => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : ''; -} - -function cache(fn) { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -const invokeArrayFns = (fns, arg) => { - let ret; - for (let i = 0; i < fns.length; i++) { - ret = fns[i](arg); - } - return ret; -}; -// lifecycle -// App and Page -const ON_SHOW = 'onShow'; -const ON_HIDE = 'onHide'; -//App -const ON_LAUNCH = 'onLaunch'; -const ON_ERROR = 'onError'; -const ON_THEME_CHANGE = 'onThemeChange'; -const ON_PAGE_NOT_FOUND = 'onPageNotFound'; -const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; -//Page -const ON_LOAD = 'onLoad'; -const ON_READY = 'onReady'; -const ON_UNLOAD = 'onUnload'; -const ON_RESIZE = 'onResize'; -const ON_TAB_ITEM_TAP = 'onTabItemTap'; -const ON_REACH_BOTTOM = 'onReachBottom'; -const ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; -const ON_ADD_TO_FAVORITES = 'onAddToFavorites'; - -class EventChannel { - constructor(id, events) { - this.id = id; - this.listener = {}; - this.emitCache = {}; - if (events) { - Object.keys(events).forEach((name) => { - this.on(name, events[name]); - }); - } - } - emit(eventName, ...args) { - const fns = this.listener[eventName]; - if (!fns) { - return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args); - } - fns.forEach((opt) => { - opt.fn.apply(opt.fn, args); - }); - this.listener[eventName] = fns.filter((opt) => opt.type !== 'once'); - } - on(eventName, fn) { - this._addListener(eventName, 'on', fn); - this._clearCache(eventName); - } - once(eventName, fn) { - this._addListener(eventName, 'once', fn); - this._clearCache(eventName); - } - off(eventName, fn) { - const fns = this.listener[eventName]; - if (!fns) { - return; - } - if (fn) { - for (let i = 0; i < fns.length;) { - if (fns[i].fn === fn) { - fns.splice(i, 1); - i--; - } - i++; - } - } - else { - delete this.listener[eventName]; - } - } - _clearCache(eventName) { - const cacheArgs = this.emitCache[eventName]; - if (cacheArgs) { - for (; cacheArgs.length > 0;) { - this.emit.apply(this, [eventName, ...cacheArgs.shift()]); - } - } - } - _addListener(eventName, type, fn) { - (this.listener[eventName] || (this.listener[eventName] = [])).push({ - fn, - type, - }); - } -} - -const eventChannels = {}; -const eventChannelStack = []; -function getEventChannel(id) { - if (id) { - const eventChannel = eventChannels[id]; - delete eventChannels[id]; - return eventChannel; - } - return eventChannelStack.shift(); -} - -function initBehavior(options) { - return Behavior(options); -} -function initVueIds(vueIds, mpInstance) { - if (!vueIds) { - return; - } - const ids = vueIds.split(','); - const len = ids.length; - if (len === 1) { - mpInstance._$vueId = ids[0]; - } - else if (len === 2) { - mpInstance._$vueId = ids[0]; - mpInstance._$vuePid = ids[1]; - } -} -const EXTRAS = ['externalClasses']; -function initExtraOptions(miniProgramComponentOptions, vueOptions) { - EXTRAS.forEach((name) => { - if (hasOwn(vueOptions, name)) { - miniProgramComponentOptions[name] = vueOptions[name]; - } - }); -} -function initWxsCallMethods(methods, wxsCallMethods) { - if (!isArray(wxsCallMethods)) { - return; - } - wxsCallMethods.forEach((callMethod) => { - methods[callMethod] = function (args) { - return this.$vm[callMethod](args); - }; - }); -} -function selectAllComponents(mpInstance, selector, $refs) { - const components = mpInstance.selectAllComponents(selector); - components.forEach((component) => { - const ref = component.dataset.ref; - $refs[ref] = component.$vm || component; - }); -} -function initRefs(instance, mpInstance) { - Object.defineProperty(instance, 'refs', { - get() { - const $refs = {}; - selectAllComponents(mpInstance, '.vue-ref', $refs); - const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for'); - forComponents.forEach((component) => { - const ref = component.dataset.ref; - if (!$refs[ref]) { - $refs[ref] = []; - } - $refs[ref].push(component.$vm || component); - }); - return $refs; - }, - }); -} -function getTarget(obj, path) { - const parts = path.split('.'); - let key = parts[0]; - if (key.indexOf('__$n') === 0) { - //number index - key = parseInt(key.replace('__$n', '')); - } - if (!obj) { - obj = {}; - } - if (parts.length === 1) { - return obj[key]; - } - return getTarget(obj[key], parts.slice(1).join('.')); -} - -function getValue(dataPath, target) { - return getTarget(target || this, dataPath); -} -function getClass(dynamicClass, staticClass) { - return renderClass(staticClass, dynamicClass); -} -function getStyle(dynamicStyle, staticStyle) { - if (!dynamicStyle && !staticStyle) { - return ''; - } - var dynamicStyleObj = normalizeStyleBinding(dynamicStyle); - var styleObj = staticStyle - ? extend(staticStyle, dynamicStyleObj) - : dynamicStyleObj; - return Object.keys(styleObj) - .map(function (name) { - return hyphenate(name) + ':' + styleObj[name]; - }) - .join(';'); -} -function toObject(arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} -function normalizeStyleBinding(bindingStyle) { - if (Array.isArray(bindingStyle)) { - return toObject(bindingStyle); - } - if (typeof bindingStyle === 'string') { - return parseStyleText(bindingStyle); - } - return bindingStyle; -} -var parseStyleText = cache(function parseStyleText(cssText) { - var res = {}; - var listDelimiter = /;(?![^(]*\))/g; - var propertyDelimiter = /:(.+)/; - cssText.split(listDelimiter).forEach(function (item) { - if (item) { - var tmp = item.split(propertyDelimiter); - tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); - } - }); - return res; -}); -function isDef(v) { - return v !== undefined && v !== null; -} -function renderClass(staticClass, dynamicClass) { - if (isDef(staticClass) || isDef(dynamicClass)) { - return concat(staticClass, stringifyClass(dynamicClass)); - } - /* istanbul ignore next */ - return ''; -} -function concat(a, b) { - return a ? (b ? a + ' ' + b : a) : b || ''; -} -function stringifyClass(value) { - if (Array.isArray(value)) { - return stringifyArray(value); - } - if (isObject(value)) { - return stringifyObject(value); - } - if (typeof value === 'string') { - return value; - } - /* istanbul ignore next */ - return ''; -} -function stringifyArray(value) { - var res = ''; - var stringified; - for (var i = 0, l = value.length; i < l; i++) { - if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { - if (res) { - res += ' '; - } - res += stringified; - } - } - return res; -} -function stringifyObject(value) { - var res = ''; - for (var key in value) { - if (value[key]) { - if (res) { - res += ' '; - } - res += key; - } - } - return res; -} - -function setModel(target, key, value, modifiers) { - if (isArray(modifiers)) { - if (modifiers.indexOf('trim') !== -1) { - value = value.trim(); - } - if (modifiers.indexOf('number') !== -1) { - value = toNumber(value); - } - } - if (!target) { - target = this; - } - target[key] = value; -} -function setSync(target, key, value) { - if (!target) { - target = this; - } - target[key] = value; -} -function getOrig(data) { - if (isPlainObject(data)) { - return data.$orig || data; - } - return data; -} -function map(val, iteratee) { - let ret, i, l, keys, key; - if (isArray(val)) { - ret = new Array(val.length); - for (i = 0, l = val.length; i < l; i++) { - ret[i] = iteratee(val[i], i); - } - return ret; - } - else if (isObject(val)) { - keys = Object.keys(val); - ret = Object.create(null); - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - ret[key] = iteratee(val[key], key, i); - } - return ret; - } - return []; -} -const MP_METHODS = [ - 'createSelectorQuery', - 'createIntersectionObserver', - 'selectAllComponents', - 'selectComponent', -]; -function createEmitFn(oldEmit, ctx) { - return function emit(event, ...args) { - if (ctx.$scope && event) { - ctx.$scope.triggerEvent(event, { __args__: args }); - } - return oldEmit.apply(this, [event, ...args]); - }; -} -function initBaseInstance(instance, options) { - const ctx = instance.ctx; - // mp - ctx.mpType = options.mpType; // @deprecated - ctx.$mpType = options.mpType; - ctx.$scope = options.mpInstance; - // TODO @deprecated - ctx.$mp = {}; - if (__VUE_OPTIONS_API__) { - ctx._self = {}; - } - // $vm - ctx.$scope.$vm = instance.proxy; - // slots - { - instance.slots = {}; - if (isArray(options.slots) && options.slots.length) { - options.slots.forEach((name) => { - instance.slots[name] = true; - }); - } - } - ctx.getOpenerEventChannel = function () { - if (!this.__eventChannel__) { - this.__eventChannel__ = new EventChannel(); - } - return this.__eventChannel__; - }; - ctx.$hasHook = hasHook; - ctx.$callHook = callHook; - // $emit - instance.emit = createEmitFn(instance.emit, ctx); -} -function initComponentInstance(instance, options) { - initBaseInstance(instance, options); - const ctx = instance.ctx; - MP_METHODS.forEach((method) => { - ctx[method] = function (...args) { - const mpInstance = ctx.$scope; - if (mpInstance && mpInstance[method]) { - return mpInstance[method].apply(mpInstance, args); - } - }; - }); - // TODO other - ctx.__set_model = setModel; - ctx.__set_sync = setSync; - ctx.__get_orig = getOrig; - // TODO - ctx.__get_value = getValue; - ctx.__get_class = getClass; - ctx.__get_style = getStyle; - ctx.__map = map; -} -function initMocks(instance, mpInstance, mocks) { - const ctx = instance.ctx; - mocks.forEach((mock) => { - if (hasOwn(mpInstance, mock)) { - ctx[mock] = mpInstance[mock]; - } - }); -} -function hasHook(name) { - const hooks = this.$[name]; - if (hooks && hooks.length) { - return true; - } - return false; -} -function callHook(name, args) { - if (name === 'mounted') { - callHook.call(this, 'bm'); // beforeMount - this.$.isMounted = true; - name = 'm'; - } - else if (name === 'onLoad' && args && args.__id__) { - this.__eventChannel__ = getEventChannel(args.__id__); - delete args.__id__; - } - const hooks = this.$[name]; - return hooks && invokeArrayFns(hooks, args); -} - -const PAGE_HOOKS = [ - ON_LOAD, - ON_SHOW, - ON_HIDE, - ON_UNLOAD, - ON_RESIZE, - ON_TAB_ITEM_TAP, - ON_REACH_BOTTOM, - ON_PULL_DOWN_REFRESH, - ON_ADD_TO_FAVORITES, - // 'onReady', // lifetimes.ready - // 'onPageScroll', // 影响性能,开发者手动注册 - // 'onShareTimeline', // 右上角菜单,开发者手动注册 - // 'onShareAppMessage' // 右上角菜单,开发者手动注册 -]; -function findHooks(vueOptions, hooks = new Set()) { - if (vueOptions) { - Object.keys(vueOptions).forEach((name) => { - if (name.indexOf('on') === 0 && isFunction(vueOptions[name])) { - hooks.add(name); - } - }); - if (__VUE_OPTIONS_API__) { - const { extends: extendsOptions, mixins } = vueOptions; - if (mixins) { - mixins.forEach((mixin) => findHooks(mixin, hooks)); - } - if (extendsOptions) { - findHooks(extendsOptions, hooks); - } - } - } - return hooks; -} -function initHook$1(mpOptions, hook, excludes) { - if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.$callHook(hook, args); - }; - } -} -const EXCLUDE_HOOKS = [ON_READY]; -function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) { - hooks.forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} -function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) { - findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes)); -} - -qa.appLaunchHooks = []; -function injectAppLaunchHooks(appInstance) { - qa.appLaunchHooks.forEach((hook) => { - injectHook(ON_LAUNCH, hook, appInstance); - }); -} - -const HOOKS = [ - ON_SHOW, - ON_HIDE, - ON_ERROR, - ON_THEME_CHANGE, - ON_PAGE_NOT_FOUND, - ON_UNHANDLE_REJECTION, -]; -function parseApp(instance, parseAppOptions) { - const internalInstance = instance.$; - const appOptions = { - globalData: (instance.$options && instance.$options.globalData) || {}, - $vm: instance, - onLaunch(options) { - const ctx = internalInstance.ctx; - if (this.$vm && ctx.$scope) { - // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 - return; - } - initBaseInstance(internalInstance, { - mpType: 'app', - mpInstance: this, - slots: [], - }); - injectAppLaunchHooks(internalInstance); - ctx.globalData = this.globalData; - instance.$callHook(ON_LAUNCH, extend({ app: this }, options)); - }, - }; - initLocale(instance); - const vueOptions = instance.$.type; - initHooks(appOptions, HOOKS); - initUnknownHooks(appOptions, vueOptions); - if (__VUE_OPTIONS_API__) { - const methods = vueOptions.methods; - methods && extend(appOptions, methods); - } - if (parseAppOptions) { - parseAppOptions.parse(appOptions); - } - return appOptions; -} -function initCreateApp(parseAppOptions) { - return function createApp(vm) { - return App(parseApp(vm, parseAppOptions)); - }; -} -function initLocale(appVm) { - const locale = ref(qa.getSystemInfoSync().language || 'zh-Hans'); - Object.defineProperty(appVm, '$locale', { - get() { - return locale.value; - }, - set(v) { - locale.value = v; - }, - }); -} - -const PROP_TYPES = [String, Number, Boolean, Object, Array, null]; -function createObserver(name) { - return function observer(newVal) { - if (this.$vm) { - this.$vm.$.props[name] = newVal; // 为了触发其他非 render watcher - } - }; -} -function parsePropType(key, type, defaultValue) { - // [String]=>String - if (isArray(type) && type.length === 1) { - return type[0]; - } - return type; -} -function initDefaultProps(isBehavior = false) { - const properties = {}; - if (!isBehavior) { - properties.vueId = { - type: String, - value: '', - }; - // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots - properties.vueSlots = { - type: null, - value: [], - observer: function (newVal) { - const $slots = Object.create(null); - newVal.forEach((slotName) => { - $slots[slotName] = true; - }); - this.setData({ - $slots, - }); - }, - }; - } - return properties; -} -function createProperty(key, prop) { - prop.observer = createObserver(key); - return prop; -} -function initProps(mpComponentOptions, rawProps, isBehavior = false) { - const properties = initDefaultProps(isBehavior); - if (isArray(rawProps)) { - rawProps.forEach((key) => { - properties[key] = createProperty(key, { - type: null, - }); - }); - } - else if (isPlainObject(rawProps)) { - Object.keys(rawProps).forEach((key) => { - const opts = rawProps[key]; - if (isPlainObject(opts)) { - // title:{type:String,default:''} - let value = opts.default; - if (isFunction(value)) { - value = value(); - } - const type = opts.type; - opts.type = parsePropType(key, type); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - value, - }); - } - else { - // content:String - const type = parsePropType(key, opts); - properties[key] = createProperty(key, { - type: PROP_TYPES.indexOf(type) !== -1 ? type : null, - }); - } - }); - } - mpComponentOptions.properties = properties; -} - -function initData(vueOptions) { - let data = vueOptions.data || {}; - if (typeof data === 'function') { - try { - const appConfig = getApp().$vm.$.appContext.config; - data = data.call(appConfig.globalProperties); - } - catch (e) { - if (process.env.VUE_APP_DEBUG) { - console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data, e); - } - } - } - else { - try { - // 对 data 格式化 - data = JSON.parse(JSON.stringify(data)); - } - catch (e) { } - } - if (!isPlainObject(data)) { - data = {}; - } - return data; -} -function initBehaviors(vueOptions, initBehavior) { - const vueBehaviors = vueOptions.behaviors; - const vueExtends = vueOptions.extends; - const vueMixins = vueOptions.mixins; - let vueProps = vueOptions.props; - if (!vueProps) { - vueOptions.props = vueProps = []; - } - const behaviors = []; - if (isArray(vueBehaviors)) { - vueBehaviors.forEach((behavior) => { - behaviors.push(behavior.replace('uni://', `${__PLATFORM_PREFIX__}://`)); - if (behavior === 'uni://form-field') { - if (isArray(vueProps)) { - vueProps.push('name'); - vueProps.push('value'); - } - else { - vueProps.name = { - type: String, - default: '', - }; - vueProps.value = { - type: [String, Number, Boolean, Array, Object, Date], - default: '', - }; - } - } - }); - } - if (vueExtends && vueExtends.props) { - const behavior = {}; - initProps(behavior, vueExtends.props, true); - behaviors.push(initBehavior(behavior)); - } - if (isArray(vueMixins)) { - vueMixins.forEach((vueMixin) => { - if (vueMixin.props) { - const behavior = {}; - initProps(behavior, vueMixin.props, true); - behaviors.push(initBehavior(behavior)); - } - }); - } - return behaviors; -} -function applyOptions(componentOptions, vueOptions, initBehavior) { - componentOptions.data = initData(vueOptions); - componentOptions.behaviors = initBehaviors(vueOptions, initBehavior); -} - -function getExtraValue(instance, dataPathsArray) { - let context = instance; - dataPathsArray.forEach((dataPathArray) => { - const dataPath = dataPathArray[0]; - const value = dataPathArray[2]; - if (dataPath || typeof value !== 'undefined') { - // ['','',index,'disable'] - const propPath = dataPathArray[1]; - const valuePath = dataPathArray[3]; - let vFor; - if (Number.isInteger(dataPath)) { - vFor = dataPath; - } - else if (!dataPath) { - vFor = context; - } - else if (typeof dataPath === 'string' && dataPath) { - if (dataPath.indexOf('#s#') === 0) { - vFor = dataPath.substr(3); - } - else { - vFor = getTarget(context, dataPath); - } - } - if (Number.isInteger(vFor)) { - context = value; - } - else if (!propPath) { - context = vFor[value]; - } - else { - if (isArray(vFor)) { - context = vFor.find((vForItem) => { - return getTarget(vForItem, propPath) === value; - }); - } - else if (isPlainObject(vFor)) { - context = Object.keys(vFor).find((vForKey) => { - return getTarget(vFor[vForKey], propPath) === value; - }); - } - else { - console.error('v-for 暂不支持循环数据:', vFor); - } - } - if (valuePath) { - context = getTarget(context, valuePath); - } - } - }); - return context; -} -function processEventExtra(instance, extra, event) { - const extraObj = {}; - if (isArray(extra) && extra.length) { - /** - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *[ - * ['data.items', 'data.id', item.data.id], - * ['metas', 'id', meta.id] - *], - *'test' - */ - extra.forEach((dataPath, index) => { - if (typeof dataPath === 'string') { - if (!dataPath) { - // model,prop.sync - extraObj['$' + index] = instance; - } - else { - if (dataPath === '$event') { - // $event - extraObj['$' + index] = event; - } - else if (dataPath === 'arguments') { - if (event.detail && event.detail.__args__) { - extraObj['$' + index] = event.detail.__args__; - } - else { - extraObj['$' + index] = [event]; - } - } - else if (dataPath.indexOf('$event.') === 0) { - // $event.target.value - extraObj['$' + index] = getTarget(event, dataPath.replace('$event.', '')); - } - else { - extraObj['$' + index] = getTarget(instance, dataPath); - } - } - } - else { - extraObj['$' + index] = getExtraValue(instance, dataPath); - } - }); - } - return extraObj; -} -function getObjByArray(arr) { - const obj = {}; - for (let i = 1; i < arr.length; i++) { - const element = arr[i]; - obj[element[0]] = element[1]; - } - return obj; -} -function processEventArgs(instance, event, args = [], extra = [], isCustom, methodName) { - let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象 - if (isCustom) { - // 自定义事件 - isCustomMPEvent = - event.currentTarget && - event.currentTarget.dataset && - event.currentTarget.dataset.comType === 'wx'; - if (!args.length) { - // 无参数,直接传入 event 或 detail 数组 - if (isCustomMPEvent) { - return [event]; - } - return event.detail.__args__ || event.detail; - } - } - const extraObj = processEventExtra(instance, extra, event); - const ret = []; - args.forEach((arg) => { - if (arg === '$event') { - if (methodName === '__set_model' && !isCustom) { - // input v-model value - ret.push(event.target.value); - } - else { - if (isCustom && !isCustomMPEvent) { - ret.push(event.detail.__args__[0]); - } - else { - // wxcomponent 组件或内置组件 - ret.push(event); - } - } - } - else { - if (isArray(arg) && arg[0] === 'o') { - ret.push(getObjByArray(arg)); - } - else if (typeof arg === 'string' && hasOwn(extraObj, arg)) { - ret.push(extraObj[arg]); - } - else { - ret.push(arg); - } - } - }); - return ret; -} -function wrapper(event) { - event.stopPropagation = NOOP; - event.preventDefault = NOOP; - event.target = event.target || {}; - if (!hasOwn(event, 'detail')) { - event.detail = {}; - } - if (hasOwn(event, 'markerId')) { - event.detail = typeof event.detail === 'object' ? event.detail : {}; - event.detail.markerId = event.markerId; - } - if (isPlainObject(event.detail)) { - event.target = extend({}, event.target, event.detail); - } - return event; -} -const ONCE = '~'; -const CUSTOM = '^'; -function matchEventType(eventType, optType) { - return (eventType === optType || - (optType === 'regionchange' && - (eventType === 'begin' || eventType === 'end'))); -} -function handleEvent(event) { - event = wrapper(event); - // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] - const dataset = (event.currentTarget || event.target).dataset; - if (!dataset) { - return console.warn('事件信息不存在'); - } - const eventOpts = (dataset.eventOpts || - dataset['event-opts']); // 支付宝 web-view 组件 dataset 非驼峰 - if (!eventOpts) { - return console.warn('事件信息不存在'); - } - // [['handle',[1,2,a]],['handle1',[1,2,a]]] - const eventType = event.type; - const ret = []; - eventOpts.forEach((eventOpt) => { - let type = eventOpt[0]; - const eventsArray = eventOpt[1]; - const isCustom = type.charAt(0) === CUSTOM; - type = isCustom ? type.slice(1) : type; - const isOnce = type.charAt(0) === ONCE; - type = isOnce ? type.slice(1) : type; - if (eventsArray && matchEventType(eventType, type)) { - eventsArray.forEach((eventArray) => { - const methodName = eventArray[0]; - if (methodName) { - let handlerCtx = this.$vm; - if (handlerCtx.$options.generic && - handlerCtx.$parent && - handlerCtx.$parent.$parent) { - // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots - handlerCtx = handlerCtx.$parent.$parent; - } - if (methodName === '$emit') { - handlerCtx.$emit.apply(handlerCtx, processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); - return; - } - const handler = handlerCtx[methodName]; - if (!isFunction(handler)) { - throw new Error(` _vm.${methodName} is not a function`); - } - if (isOnce) { - if (handler.once) { - return; - } - handler.once = true; - } - let params = processEventArgs(this.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); - params = Array.isArray(params) ? params : []; - // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 - if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) { - // eslint-disable-next-line no-sparse-arrays - params = params.concat([, , , , , , , , , , event]); - } - ret.push(handler.apply(handlerCtx, params)); - } - }); - } - }); - if (eventType === 'input' && - ret.length === 1 && - typeof ret[0] !== 'undefined') { - return ret[0]; - } -} - -function parseComponent(vueOptions, { parse, mocks, isPage, initRelation, handleLink, initLifetimes, }) { - vueOptions = vueOptions.default || vueOptions; - const options = { - multipleSlots: true, - addGlobalClass: true, - }; - if (vueOptions.options) { - extend(options, vueOptions.options); - } - const mpComponentOptions = { - options, - lifetimes: initLifetimes({ mocks, isPage, initRelation, vueOptions }), - pageLifetimes: { - show() { - this.$vm && this.$vm.$callHook('onPageShow'); - }, - hide() { - this.$vm && this.$vm.$callHook('onPageHide'); - }, - resize(size) { - this.$vm && this.$vm.$callHook('onPageResize', size); - }, - }, - methods: { - __l: handleLink, - __e: handleEvent, - }, - }; - if (__VUE_OPTIONS_API__) { - applyOptions(mpComponentOptions, vueOptions, initBehavior); - } - initProps(mpComponentOptions, vueOptions.props, false); - initExtraOptions(mpComponentOptions, vueOptions); - initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods); - if (parse) { - parse(mpComponentOptions, { handleLink }); - } - return mpComponentOptions; -} -function initCreateComponent(parseOptions) { - return function createComponent(vueComponentOptions) { - return Component(parseComponent(vueComponentOptions, parseOptions)); - }; -} -let $createComponentFn; -let $destroyComponentFn; -function $createComponent(initialVNode, options) { - if (!$createComponentFn) { - $createComponentFn = getApp().$vm.$createComponent; - } - return $createComponentFn(initialVNode, options); -} -function $destroyComponent(instance) { - if (!$destroyComponentFn) { - $destroyComponentFn = getApp().$vm.$destroyComponent; - } - return $destroyComponentFn(instance); -} - -function parsePage(vueOptions, parseOptions) { - const { parse, mocks, isPage, initRelation, handleLink, initLifetimes } = parseOptions; - const miniProgramPageOptions = parseComponent(vueOptions, { - mocks, - isPage, - initRelation, - handleLink, - initLifetimes, - }); - const methods = miniProgramPageOptions.methods; - methods.onLoad = function (query) { - this.options = query; - this.$page = { - fullPath: '/' + this.route + stringifyQuery(query), - }; - return this.$vm && this.$vm.$callHook(ON_LOAD, query); - }; - initHooks(methods, PAGE_HOOKS); - initUnknownHooks(methods, vueOptions); - parse && parse(miniProgramPageOptions, { handleLink }); - return miniProgramPageOptions; -} -function initCreatePage(parseOptions) { - return function createPage(vuePageOptions) { - return Component(parsePage(vuePageOptions, parseOptions)); - }; -} - -const MPPage = Page; -const MPComponent = Component; -const customizeRE = /:/g; -function customize(str) { - return camelize(str.replace(customizeRE, '-')); -} -function initTriggerEvent(mpInstance) { - const oldTriggerEvent = mpInstance.triggerEvent; - mpInstance.triggerEvent = function (event, ...args) { - return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]); - }; -} -function initHook(name, options) { - const oldHook = options[name]; - if (!oldHook) { - options[name] = function () { - initTriggerEvent(this); - }; - } - else { - options[name] = function (...args) { - initTriggerEvent(this); - return oldHook.apply(this, args); - }; - } -} -Page = function (options) { - initHook(ON_LOAD, options); - return MPPage(options); -}; -Component = function (options) { - initHook('created', options); - return MPComponent(options); -}; - -function provide(instance, key, value) { - if (!instance) { - if ((process.env.NODE_ENV !== 'production')) { - console.warn(`provide() can only be used inside setup().`); - } - } - else { - let provides = instance.provides; - // by default an instance inherits its parent's provides object - // but when it needs to provide values of its own, it creates its - // own provides object using parent provides object as prototype. - // this way in `inject` we can simply look up injections from direct - // parent and let the prototype chain do the work. - const parentProvides = instance.parent && instance.parent.provides; - if (parentProvides === provides) { - provides = instance.provides = Object.create(parentProvides); - } - // TS doesn't allow symbol as index type - provides[key] = value; - } -} -function initProvide(instance) { - const provideOptions = instance.$options.provide; - if (!provideOptions) { - return; - } - const provides = isFunction(provideOptions) - ? provideOptions.call(instance) - : provideOptions; - const internalInstance = instance.$; - for (const key in provides) { - provide(internalInstance, key, provides[key]); - } -} -function inject(instance, key, defaultValue, treatDefaultAsFactory = false) { - if (instance) { - // #2400 - // to support `app.use` plugins, - // fallback to appContext's `provides` if the intance is at root - const provides = instance.parent == null - ? instance.vnode.appContext && instance.vnode.appContext.provides - : instance.parent.provides; - if (provides && key in provides) { - // TS doesn't allow symbol as index type - return provides[key]; - } - else if (arguments.length > 1) { - return treatDefaultAsFactory && isFunction(defaultValue) - ? defaultValue() - : defaultValue; - } - else if ((process.env.NODE_ENV !== 'production')) { - console.warn(`injection "${String(key)}" not found.`); - } - } - else if ((process.env.NODE_ENV !== 'production')) { - console.warn(`inject() can only be used inside setup() or functional components.`); - } -} -function initInjections(instance) { - const injectOptions = instance.$options.inject; - if (!injectOptions) { - return; - } - const internalInstance = instance.$; - const ctx = internalInstance.ctx; - if (isArray(injectOptions)) { - for (let i = 0; i < injectOptions.length; i++) { - const key = injectOptions[i]; - ctx[key] = inject(internalInstance, key); - } - } - else { - for (const key in injectOptions) { - const opt = injectOptions[key]; - if (isObject(opt)) { - ctx[key] = inject(internalInstance, opt.from || key, opt.default, true /* treat default function as factory */); - } - else { - ctx[key] = inject(internalInstance, opt); - } - } - } -} - -function initLifetimes$1({ mocks, isPage, initRelation, vueOptions, }) { - return { - attached() { - const properties = this.properties; - initVueIds(properties.vueId, this); - const relationOptions = { - vuePid: this._$vuePid, - }; - // 初始化 vue 实例 - const mpInstance = this; - const mpType = isPage(mpInstance) ? 'page' : 'component'; - if (mpType === 'page' && !mpInstance.route && mpInstance.__route__) { - mpInstance.route = mpInstance.__route__; - } - this.$vm = $createComponent({ - type: vueOptions, - props: properties, - }, { - mpType, - mpInstance, - slots: properties.vueSlots, - parentComponent: relationOptions.parent && relationOptions.parent.$, - onBeforeSetup(instance, options) { - initRefs(instance, mpInstance); - initMocks(instance, mpInstance, mocks); - initComponentInstance(instance, options); - }, - }); - // 处理父子关系 - initRelation(this, relationOptions); - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - }, - }; -} - -const instances = Object.create(null); -function parse(componentOptions, { handleLink }) { - componentOptions.methods.__l = handleLink; -} - -function initLifetimes(lifetimesOptions) { - return extend(initLifetimes$1(lifetimesOptions), { - ready() { - if (this.$vm && lifetimesOptions.isPage(this)) { - if (this.pageinstance) { - this.__webviewId__ = this.pageinstance.__pageId__; - } - this.$vm.$callCreatedHook(); - this.$vm.$callHook('mounted'); - this.$vm.$callHook(ON_READY); - } - else { - this.is && console.warn(this.is + ' is not ready'); - } - }, - detached() { - this.$vm && $destroyComponent(this.$vm); - // 清理 - const webviewId = this.__webviewId__; - webviewId && - Object.keys(instances).forEach((key) => { - if (key.indexOf(webviewId + '_') === 0) { - delete instances[key]; - } - }); - }, - }); -} - -const mocks = ['nodeId', 'componentName', '_componentId', 'uniquePrefix']; -function isPage(mpInstance) { - return !hasOwn(mpInstance, 'ownerId'); -} - -function initRelation(mpInstance) { - // triggerEvent 后,接收事件时机特别晚,已经到了 ready 之后 - const nodeId = mpInstance.nodeId + ''; - const webviewId = mpInstance.pageinstance.__pageId__ + ''; - instances[webviewId + '_' + nodeId] = mpInstance.$vm; - mpInstance.triggerEvent('__l', { - nodeId, - webviewId, - }); -} -function handleLink({ detail: { nodeId, webviewId }, }) { - const vm = instances[webviewId + '_' + nodeId]; - if (!vm) { - return; - } - let parentVm = instances[webviewId + '_' + vm.$scope.ownerId]; - if (!parentVm) { - parentVm = this.$vm; - } - vm.$.parent = parentVm.$; - const createdVm = function () { - if (__VUE_OPTIONS_API__) { - parentVm.$children.push(vm); - const parent = parentVm.$; - vm.$.provides = parent - ? parent.provides - : Object.create(parent.appContext.provides); - initInjections(vm); - initProvide(vm); - } - vm.$callCreatedHook(); - }; - const mountedVm = function () { - // 处理当前 vm 子 - if (vm._$childVues) { - vm._$childVues.forEach(([createdVm]) => createdVm()); - vm._$childVues.forEach(([, mountedVm]) => mountedVm()); - delete vm._$childVues; - } - vm.$callHook('mounted'); - vm.$callHook(ON_READY); - }; - // 当 parentVm 已经 mounted 时,直接触发,否则延迟 - if (!parentVm || parentVm.$.isMounted) { - createdVm(); - mountedVm(); - } - else { - (parentVm._$childVues || (parentVm._$childVues = [])).push([ - createdVm, - mountedVm, - ]); - } -} - -var parseComponentOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - initRelation: initRelation, - handleLink: handleLink, - mocks: mocks, - isPage: isPage, - parse: parse, - initLifetimes: initLifetimes$1 -}); - -var parsePageOptions = /*#__PURE__*/Object.freeze({ - __proto__: null, - mocks: mocks, - isPage: isPage, - initRelation: initRelation, - handleLink: handleLink, - parse: parse, - initLifetimes: initLifetimes -}); - -const createApp = initCreateApp(); -const createPage = initCreatePage(parsePageOptions); -const createComponent = initCreateComponent(parseComponentOptions); -qa.EventChannel = EventChannel; -qa.createApp = createApp; -qa.createPage = createPage; -qa.createComponent = createComponent; - -export { createApp, createComponent, createPage }; diff --git a/packages/vue-cli-plugin-uni/lib/mp/index.js b/packages/vue-cli-plugin-uni/lib/mp/index.js index 46e08cdd4f4412a93ccfa69488c1cce255cf7299..f4de86fe99a38194a7c1ea64e1d8efa6704fab5a 100644 --- a/packages/vue-cli-plugin-uni/lib/mp/index.js +++ b/packages/vue-cli-plugin-uni/lib/mp/index.js @@ -76,6 +76,9 @@ function getProvides () { ) { // 非微信小程序,自动注入 wx 对象 provides.wx = provides.uni } + if (process.env.UNI_PLATFORM === 'mp-weixin') { + provides.wx = [path.resolve(uniPath, '../wx.js'), 'default'] + } return provides } @@ -144,7 +147,8 @@ function initSubpackageConfig (webpackConfig, vueOptions) { } vueOptions.outputDir = process.env.UNI_OUTPUT_DIR webpackConfig.output.path(process.env.UNI_OUTPUT_DIR) - webpackConfig.output.set(webpack.version[0] > 4 ? 'chunkLoadingGlobal' : 'jsonpFunction', 'webpackJsonp_' + (process.env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN)) + webpackConfig.output.set(webpack.version[0] > 4 ? 'chunkLoadingGlobal' : 'jsonpFunction', 'webpackJsonp_' + (process + .env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN)) } function addToUniEntry (fileName) { @@ -357,4 +361,4 @@ ${globalEnv}.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;` webpackConfig.plugins.delete('preload') webpackConfig.plugins.delete('prefetch') } -} +}