@tarojs/shared 4.0.1-alpha.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"native-apis.js","sources":["../src/native-apis.ts"],"sourcesContent":["import { isFunction, isString } from './is'\nimport { nonsupport, setUniqueKeyToRoute } from './utils'\n\ndeclare const getCurrentPages: () => any\ndeclare const getApp: () => any\ndeclare const requirePlugin: () => void\n\ntype IObject = Record<string, any>\n\ninterface IProcessApisIOptions {\n noPromiseApis?: Set<string>\n needPromiseApis?: Set<string>\n handleSyncApis?: (key: string, global: IObject, args: any[]) => any\n transformMeta?: (key: string, options: IObject) => { key: string, options: IObject }\n modifyApis?: (apis: Set<string>) => void\n modifyAsyncResult?: (key: string, res) => void\n isOnlyPromisify?: boolean\n [propName: string]: any\n}\n\nexport interface IApiDiff {\n [key: string]: {\n /** API重命名 */\n alias?: string\n options?: {\n /** API参数键名修改 */\n change?: {\n old: string\n new: string\n }[]\n /** API参数值修改 */\n set?: {\n key: string\n value: ((options: Record<string, any>) => unknown) | unknown\n }[]\n }\n }\n}\n\nconst needPromiseApis = new Set<string>([\n 'addPhoneContact',\n 'authorize',\n 'canvasGetImageData',\n 'canvasPutImageData',\n 'canvasToTempFilePath',\n 'checkSession',\n 'chooseAddress',\n 'chooseImage',\n 'chooseInvoiceTitle',\n 'chooseLocation',\n 'chooseVideo',\n 'clearStorage',\n 'closeBLEConnection',\n 'closeBluetoothAdapter',\n 'closeSocket',\n 'compressImage',\n 'connectSocket',\n 'createBLEConnection',\n 'downloadFile',\n 'exitMiniProgram',\n 'getAvailableAudioSources',\n 'getBLEDeviceCharacteristics',\n 'getBLEDeviceServices',\n 'getBatteryInfo',\n 'getBeacons',\n 'getBluetoothAdapterState',\n 'getBluetoothDevices',\n 'getClipboardData',\n 'getConnectedBluetoothDevices',\n 'getConnectedWifi',\n 'getExtConfig',\n 'getFileInfo',\n 'getImageInfo',\n 'getLocation',\n 'getNetworkType',\n 'getSavedFileInfo',\n 'getSavedFileList',\n 'getScreenBrightness',\n 'getSetting',\n 'getStorage',\n 'getStorageInfo',\n 'getSystemInfo',\n 'getUserInfo',\n 'getWifiList',\n 'hideHomeButton',\n 'hideShareMenu',\n 'hideTabBar',\n 'hideTabBarRedDot',\n 'loadFontFace',\n 'login',\n 'makePhoneCall',\n 'navigateBack',\n 'navigateBackMiniProgram',\n 'navigateTo',\n 'navigateToBookshelf',\n 'navigateToMiniProgram',\n 'notifyBLECharacteristicValueChange',\n 'hideKeyboard',\n 'hideLoading',\n 'hideNavigationBarLoading',\n 'hideToast',\n 'openBluetoothAdapter',\n 'openDocument',\n 'openLocation',\n 'openSetting',\n 'pageScrollTo',\n 'previewImage',\n 'queryBookshelf',\n 'reLaunch',\n 'readBLECharacteristicValue',\n 'redirectTo',\n 'removeSavedFile',\n 'removeStorage',\n 'removeTabBarBadge',\n 'requestSubscribeMessage',\n 'saveFile',\n 'saveImageToPhotosAlbum',\n 'saveVideoToPhotosAlbum',\n 'scanCode',\n 'sendSocketMessage',\n 'setBackgroundColor',\n 'setBackgroundTextStyle',\n 'setClipboardData',\n 'setEnableDebug',\n 'setInnerAudioOption',\n 'setKeepScreenOn',\n 'setNavigationBarColor',\n 'setNavigationBarTitle',\n 'setScreenBrightness',\n 'setStorage',\n 'setTabBarBadge',\n 'setTabBarItem',\n 'setTabBarStyle',\n 'showActionSheet',\n 'showFavoriteGuide',\n 'showLoading',\n 'showModal',\n 'showShareMenu',\n 'showTabBar',\n 'showTabBarRedDot',\n 'showToast',\n 'startBeaconDiscovery',\n 'startBluetoothDevicesDiscovery',\n 'startDeviceMotionListening',\n 'startPullDownRefresh',\n 'stopBeaconDiscovery',\n 'stopBluetoothDevicesDiscovery',\n 'stopCompass',\n 'startCompass',\n 'startAccelerometer',\n 'stopAccelerometer',\n 'showNavigationBarLoading',\n 'stopDeviceMotionListening',\n 'stopPullDownRefresh',\n 'switchTab',\n 'uploadFile',\n 'vibrateLong',\n 'vibrateShort',\n 'writeBLECharacteristicValue'\n])\n\nfunction getCanIUseWebp (taro) {\n return function () {\n const res = taro.getSystemInfoSync?.()\n\n if (!res) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('不支持 API canIUseWebp')\n }\n return false\n }\n\n const { platform } = res\n\n const platformLower = platform.toLowerCase()\n if (platformLower === 'android' || platformLower === 'devtools') {\n return true\n }\n return false\n }\n}\n\nfunction getNormalRequest (global) {\n return function request (options) {\n options = options\n ? (\n isString(options)\n ? { url: options }\n : options\n )\n : {}\n\n const originSuccess = options.success\n const originFail = options.fail\n const originComplete = options.complete\n let requestTask\n const p: any = new Promise((resolve, reject) => {\n options.success = res => {\n originSuccess && originSuccess(res)\n resolve(res)\n }\n options.fail = res => {\n originFail && originFail(res)\n reject(res)\n }\n\n options.complete = res => {\n originComplete && originComplete(res)\n }\n\n requestTask = global.request(options)\n })\n\n equipTaskMethodsIntoPromise(requestTask, p)\n\n p.abort = (cb) => {\n cb && cb()\n if (requestTask) {\n requestTask.abort()\n }\n return p\n }\n return p\n }\n}\n\nfunction processApis (taro, global, config: IProcessApisIOptions = {}) {\n const patchNeedPromiseApis = config.needPromiseApis || []\n const _needPromiseApis = new Set<string>([...patchNeedPromiseApis, ...needPromiseApis])\n const preserved = [\n 'getEnv',\n 'interceptors',\n 'Current',\n 'getCurrentInstance',\n 'options',\n 'nextTick',\n 'eventCenter',\n 'Events',\n 'preload',\n 'webpackJsonp'\n ]\n\n const apis = new Set(\n !config.isOnlyPromisify\n ? Object.keys(global).filter(api => preserved.indexOf(api) === -1)\n : patchNeedPromiseApis\n )\n\n if (config.modifyApis) {\n config.modifyApis(apis)\n }\n\n apis.forEach(key => {\n if (_needPromiseApis.has(key)) {\n const originKey = key\n taro[originKey] = (options: Record<string, any> | string = {}, ...args) => {\n let key = originKey\n\n // 第一个参数 options 为字符串,单独处理\n if (typeof options === 'string') {\n if (args.length) {\n return global[key](options, ...args)\n }\n return global[key](options)\n }\n\n // 改变 key 或 option 字段,如需要把支付宝标准的字段对齐微信标准的字段\n if (config.transformMeta) {\n const transformResult = config.transformMeta(key, options)\n key = transformResult.key\n ; (options as Record<string, any>) = transformResult.options\n // 新 key 可能不存在\n if (!global.hasOwnProperty(key)) {\n return nonsupport(key)()\n }\n }\n\n let task: any = null\n const obj: Record<string, any> = Object.assign({}, options)\n\n // 为页面跳转相关的 API 设置一个随机数作为路由参数。为了给 runtime 区分页面。\n setUniqueKeyToRoute(key, options)\n\n // Promise 化\n const p: any = new Promise((resolve, reject) => {\n obj.success = res => {\n config.modifyAsyncResult?.(key, res)\n options.success?.(res)\n if (key === 'connectSocket') {\n resolve(\n Promise.resolve().then(() => task ? Object.assign(task, res) : res)\n )\n } else {\n resolve(res)\n }\n }\n obj.fail = res => {\n options.fail?.(res)\n reject(res)\n }\n obj.complete = res => {\n options.complete?.(res)\n }\n if (args.length) {\n task = global[key](obj, ...args)\n } else {\n task = global[key](obj)\n }\n })\n\n // 给 promise 对象挂载属性\n if (['uploadFile', 'downloadFile'].includes(key)) {\n equipTaskMethodsIntoPromise(task, p)\n p.progress = cb => {\n task?.onProgressUpdate(cb)\n return p\n }\n p.abort = cb => {\n cb?.()\n task?.abort()\n return p\n }\n }\n return p\n }\n } else {\n let platformKey = key\n\n // 改变 key 或 option 字段,如需要把支付宝标准的字段对齐微信标准的字段\n if (config.transformMeta) {\n platformKey = config.transformMeta(key, {}).key\n }\n\n // API 不存在\n if (!global.hasOwnProperty(platformKey)) {\n taro[key] = nonsupport(key)\n return\n }\n if (isFunction(global[key])) {\n taro[key] = (...args) => {\n if (config.handleSyncApis) {\n return config.handleSyncApis(key, global, args)\n } else {\n return global[platformKey].apply(global, args)\n }\n }\n } else {\n taro[key] = global[platformKey]\n }\n }\n })\n\n !config.isOnlyPromisify && equipCommonApis(taro, global, config)\n}\n\n/**\n * 挂载常用 API\n * @param taro Taro 对象\n * @param global 小程序全局对象,如微信的 wx,支付宝的 my\n */\nfunction equipCommonApis (taro, global, apis: Record<string, any> = {}) {\n taro.canIUseWebp = getCanIUseWebp(taro)\n taro.getCurrentPages = getCurrentPages || nonsupport('getCurrentPages')\n taro.getApp = getApp || nonsupport('getApp')\n taro.env = global.env || {}\n\n try {\n taro.requirePlugin = requirePlugin || nonsupport('requirePlugin')\n } catch (error) {\n taro.requirePlugin = nonsupport('requirePlugin')\n }\n\n // request & interceptors\n const request = apis.request || getNormalRequest(global)\n function taroInterceptor (chain) {\n return request(chain.requestParams)\n }\n const link = new taro.Link(taroInterceptor)\n taro.request = link.request.bind(link)\n taro.addInterceptor = link.addInterceptor.bind(link)\n taro.cleanInterceptors = link.cleanInterceptors.bind(link)\n taro.miniGlobal = taro.options.miniGlobal = global\n taro.getAppInfo = function () {\n return {\n platform: process.env.TARO_PLATFORM || 'MiniProgram',\n taroVersion: process.env.TARO_VERSION || 'unknown',\n designWidth: taro.config.designWidth\n }\n }\n taro.createSelectorQuery = delayRef(taro, global, 'createSelectorQuery', 'exec')\n taro.createIntersectionObserver = delayRef(taro, global, 'createIntersectionObserver', 'observe')\n}\n\n/**\n * 将Task对象中的方法挂载到promise对象中,适配小程序api原生返回结果\n * @param task Task对象 {RequestTask | DownloadTask | UploadTask}\n * @param promise Promise\n */\nfunction equipTaskMethodsIntoPromise (task, promise) {\n if (!task || !promise) return\n const taskMethods = ['abort', 'onHeadersReceived', 'offHeadersReceived', 'onProgressUpdate', 'offProgressUpdate', 'onChunkReceived', 'offChunkReceived']\n task && taskMethods.forEach(method => {\n if (method in task) {\n promise[method] = task[method].bind(task)\n }\n })\n}\n\nfunction delayRef (taro, global, name: string, method: string) {\n return function (...args) {\n const res = global[name](...args)\n const raw = res[method].bind(res)\n res[method] = function (...methodArgs) {\n taro.nextTick(() => raw(...methodArgs))\n }\n return res\n }\n}\n\nexport {\n processApis\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native-apis.js","sources":["../src/native-apis.ts"],"sourcesContent":["import { isFunction, isString } from './is'\nimport { nonsupport, setUniqueKeyToRoute } from './utils'\n\ndeclare const getCurrentPages: () => any\ndeclare const getApp: () => any\ndeclare const requirePlugin: () => void\n\ntype IObject = Record<string, any>\n\ninterface IProcessApisIOptions {\n noPromiseApis?: Set<string>\n needPromiseApis?: Set<string>\n handleSyncApis?: (key: string, global: IObject, args: any[]) => any\n transformMeta?: (key: string, options: IObject) => { key: string, options: IObject }\n modifyApis?: (apis: Set<string>) => void\n modifyAsyncResult?: (key: string, res) => void\n isOnlyPromisify?: boolean\n [propName: string]: any\n}\n\nexport interface IApiDiff {\n [key: string]: {\n /** API重命名 */\n alias?: string\n options?: {\n /** API参数键名修改 */\n change?: {\n old: string\n new: string\n }[]\n /** API参数值修改 */\n set?: {\n key: string\n value: ((options: Record<string, any>) => unknown) | unknown\n }[]\n }\n }\n}\n\nconst needPromiseApis = new Set<string>([\n 'addPhoneContact',\n 'authorize',\n 'canvasGetImageData',\n 'canvasPutImageData',\n 'canvasToTempFilePath',\n 'checkSession',\n 'chooseAddress',\n 'chooseImage',\n 'chooseInvoiceTitle',\n 'chooseLocation',\n 'chooseVideo',\n 'clearStorage',\n 'closeBLEConnection',\n 'closeBluetoothAdapter',\n 'closeSocket',\n 'compressImage',\n 'connectSocket',\n 'createBLEConnection',\n 'downloadFile',\n 'exitMiniProgram',\n 'getAvailableAudioSources',\n 'getBLEDeviceCharacteristics',\n 'getBLEDeviceServices',\n 'getBatteryInfo',\n 'getBeacons',\n 'getBluetoothAdapterState',\n 'getBluetoothDevices',\n 'getClipboardData',\n 'getConnectedBluetoothDevices',\n 'getConnectedWifi',\n 'getExtConfig',\n 'getFileInfo',\n 'getImageInfo',\n 'getLocation',\n 'getNetworkType',\n 'getSavedFileInfo',\n 'getSavedFileList',\n 'getScreenBrightness',\n 'getSetting',\n 'getStorage',\n 'getStorageInfo',\n 'getSystemInfo',\n 'getUserInfo',\n 'getWifiList',\n 'hideHomeButton',\n 'hideShareMenu',\n 'hideTabBar',\n 'hideTabBarRedDot',\n 'loadFontFace',\n 'login',\n 'makePhoneCall',\n 'navigateBack',\n 'navigateBackMiniProgram',\n 'navigateTo',\n 'navigateToBookshelf',\n 'navigateToMiniProgram',\n 'notifyBLECharacteristicValueChange',\n 'hideKeyboard',\n 'hideLoading',\n 'hideNavigationBarLoading',\n 'hideToast',\n 'openBluetoothAdapter',\n 'openDocument',\n 'openLocation',\n 'openSetting',\n 'pageScrollTo',\n 'previewImage',\n 'queryBookshelf',\n 'reLaunch',\n 'readBLECharacteristicValue',\n 'redirectTo',\n 'removeSavedFile',\n 'removeStorage',\n 'removeTabBarBadge',\n 'requestSubscribeMessage',\n 'saveFile',\n 'saveImageToPhotosAlbum',\n 'saveVideoToPhotosAlbum',\n 'scanCode',\n 'sendSocketMessage',\n 'setBackgroundColor',\n 'setBackgroundTextStyle',\n 'setClipboardData',\n 'setEnableDebug',\n 'setInnerAudioOption',\n 'setKeepScreenOn',\n 'setNavigationBarColor',\n 'setNavigationBarTitle',\n 'setScreenBrightness',\n 'setStorage',\n 'setTabBarBadge',\n 'setTabBarItem',\n 'setTabBarStyle',\n 'showActionSheet',\n 'showFavoriteGuide',\n 'showLoading',\n 'showModal',\n 'showShareMenu',\n 'showTabBar',\n 'showTabBarRedDot',\n 'showToast',\n 'startBeaconDiscovery',\n 'startBluetoothDevicesDiscovery',\n 'startDeviceMotionListening',\n 'startPullDownRefresh',\n 'stopBeaconDiscovery',\n 'stopBluetoothDevicesDiscovery',\n 'stopCompass',\n 'startCompass',\n 'startAccelerometer',\n 'stopAccelerometer',\n 'showNavigationBarLoading',\n 'stopDeviceMotionListening',\n 'stopPullDownRefresh',\n 'switchTab',\n 'uploadFile',\n 'vibrateLong',\n 'vibrateShort',\n 'writeBLECharacteristicValue'\n])\n\nfunction getCanIUseWebp (taro) {\n return function () {\n const res = taro.getSystemInfoSync?.()\n\n if (!res) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('不支持 API canIUseWebp')\n }\n return false\n }\n\n const { platform } = res\n\n const platformLower = platform.toLowerCase()\n if (platformLower === 'android' || platformLower === 'devtools') {\n return true\n }\n return false\n }\n}\n\nfunction getNormalRequest (global) {\n return function request (options) {\n options = options\n ? (\n isString(options)\n ? { url: options }\n : options\n )\n : {}\n\n const originSuccess = options.success\n const originFail = options.fail\n const originComplete = options.complete\n let requestTask\n const p: any = new Promise((resolve, reject) => {\n options.success = res => {\n originSuccess && originSuccess(res)\n resolve(res)\n }\n options.fail = res => {\n originFail && originFail(res)\n reject(res)\n }\n\n options.complete = res => {\n originComplete && originComplete(res)\n }\n\n requestTask = global.request(options)\n })\n\n equipTaskMethodsIntoPromise(requestTask, p)\n\n p.abort = (cb) => {\n cb && cb()\n if (requestTask) {\n requestTask.abort()\n }\n return p\n }\n return p\n }\n}\n\nfunction processApis (taro, global, config: IProcessApisIOptions = {}) {\n const patchNeedPromiseApis = config.needPromiseApis || []\n const _needPromiseApis = new Set<string>([...patchNeedPromiseApis, ...needPromiseApis])\n const preserved = [\n 'getEnv',\n 'interceptors',\n 'Current',\n 'getCurrentInstance',\n 'options',\n 'nextTick',\n 'eventCenter',\n 'Events',\n 'preload',\n 'webpackJsonp'\n ]\n\n const apis = new Set(\n !config.isOnlyPromisify\n ? Object.keys(global).filter(api => preserved.indexOf(api) === -1)\n : patchNeedPromiseApis\n )\n\n if (config.modifyApis) {\n config.modifyApis(apis)\n }\n\n apis.forEach(key => {\n if (_needPromiseApis.has(key)) {\n const originKey = key\n taro[originKey] = (options: Record<string, any> | string = {}, ...args) => {\n let key = originKey\n\n // 第一个参数 options 为字符串,单独处理\n if (typeof options === 'string') {\n if (args.length) {\n return global[key](options, ...args)\n }\n return global[key](options)\n }\n\n // 改变 key 或 option 字段,如需要把支付宝标准的字段对齐微信标准的字段\n if (config.transformMeta) {\n const transformResult = config.transformMeta(key, options)\n key = transformResult.key\n ; (options as Record<string, any>) = transformResult.options\n // 新 key 可能不存在\n if (!global.hasOwnProperty(key)) {\n return nonsupport(key)()\n }\n }\n\n let task: any = null\n const obj: Record<string, any> = Object.assign({}, options)\n\n // 为页面跳转相关的 API 设置一个随机数作为路由参数。为了给 runtime 区分页面。\n setUniqueKeyToRoute(key, options)\n\n // Promise 化\n const p: any = new Promise((resolve, reject) => {\n obj.success = res => {\n config.modifyAsyncResult?.(key, res)\n options.success?.(res)\n if (key === 'connectSocket') {\n resolve(\n Promise.resolve().then(() => task ? Object.assign(task, res) : res)\n )\n } else {\n resolve(res)\n }\n }\n obj.fail = res => {\n options.fail?.(res)\n reject(res)\n }\n obj.complete = res => {\n options.complete?.(res)\n }\n if (args.length) {\n task = global[key](obj, ...args)\n } else {\n task = global[key](obj)\n }\n })\n\n // 给 promise 对象挂载属性\n if (['uploadFile', 'downloadFile'].includes(key)) {\n equipTaskMethodsIntoPromise(task, p)\n p.progress = cb => {\n task?.onProgressUpdate(cb)\n return p\n }\n p.abort = cb => {\n cb?.()\n task?.abort()\n return p\n }\n }\n return p\n }\n } else {\n let platformKey = key\n\n // 改变 key 或 option 字段,如需要把支付宝标准的字段对齐微信标准的字段\n if (config.transformMeta) {\n platformKey = config.transformMeta(key, {}).key\n }\n\n // API 不存在\n if (!global.hasOwnProperty(platformKey)) {\n taro[key] = nonsupport(key)\n return\n }\n if (isFunction(global[key])) {\n taro[key] = (...args) => {\n if (config.handleSyncApis) {\n return config.handleSyncApis(key, global, args)\n } else {\n return global[platformKey].apply(global, args)\n }\n }\n } else {\n taro[key] = global[platformKey]\n }\n }\n })\n\n !config.isOnlyPromisify && equipCommonApis(taro, global, config)\n}\n\n/**\n * 挂载常用 API\n * @param taro Taro 对象\n * @param global 小程序全局对象,如微信的 wx,支付宝的 my\n */\nfunction equipCommonApis (taro, global, apis: Record<string, any> = {}) {\n taro.canIUseWebp = getCanIUseWebp(taro)\n taro.getCurrentPages = getCurrentPages || nonsupport('getCurrentPages')\n taro.getApp = getApp || nonsupport('getApp')\n taro.env = global.env || {}\n\n try {\n taro.requirePlugin = requirePlugin || nonsupport('requirePlugin')\n } catch (error) {\n taro.requirePlugin = nonsupport('requirePlugin')\n }\n\n // request & interceptors\n const request = apis.request || getNormalRequest(global)\n function taroInterceptor (chain) {\n return request(chain.requestParams)\n }\n const link = new taro.Link(taroInterceptor)\n taro.request = link.request.bind(link)\n taro.addInterceptor = link.addInterceptor.bind(link)\n taro.cleanInterceptors = link.cleanInterceptors.bind(link)\n taro.miniGlobal = taro.options.miniGlobal = global\n taro.getAppInfo = function () {\n return {\n platform: process.env.TARO_PLATFORM || 'MiniProgram',\n taroVersion: process.env.TARO_VERSION || 'unknown',\n designWidth: taro.config.designWidth\n }\n }\n taro.createSelectorQuery = delayRef(taro, global, 'createSelectorQuery', 'exec')\n taro.createIntersectionObserver = delayRef(taro, global, 'createIntersectionObserver', 'observe')\n}\n\n/**\n * 将Task对象中的方法挂载到promise对象中,适配小程序api原生返回结果\n * @param task Task对象 {RequestTask | DownloadTask | UploadTask}\n * @param promise Promise\n */\nfunction equipTaskMethodsIntoPromise (task, promise) {\n if (!task || !promise) return\n const taskMethods = ['abort', 'onHeadersReceived', 'offHeadersReceived', 'onProgressUpdate', 'offProgressUpdate', 'onChunkReceived', 'offChunkReceived']\n task && taskMethods.forEach(method => {\n if (method in task) {\n promise[method] = task[method].bind(task)\n }\n })\n}\n\nfunction delayRef (taro, global, name: string, method: string) {\n return function (...args) {\n const res = global[name](...args)\n const raw = res[method].bind(res)\n res[method] = function (...methodArgs) {\n taro.nextTick(() => raw(...methodArgs))\n }\n return res\n }\n}\n\nexport {\n processApis\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,125 @@
1
- import { Events } from './event-emitter';
2
- import type { Shortcuts } from './template';
1
+ /**
2
+ * 这里我们需要关心的小程序种类有两类:
3
+ * 1. 模板递归:
4
+ * - 支持:tmpl0 套 tmpl0
5
+ * - 不支持:这就使得我们必须生成多级的模板,tmpl0 套 tmpl1,tmpl1 套 tmpl2……
6
+ * 直到超过阈值 N (N = config.miniapp.baseLevel) tmplN 会套组件 comp,组件 comp 重新再套 tmpl0。
7
+ * 2. 小程序脚本语言(wxs, sjs, etc...):
8
+ * - 支持:可以在模板使用函数缩减模板大小或提高性能(存疑),例如判断一个值是不是假值(falsy value)。
9
+ * 将来或许会把数据序列化^1 的操作也放到小程序脚本语言里。
10
+ * - 不支持:使用纯 *xml 语法
11
+ *
12
+ * ^1: packages/taro-runtime/src/hydrate.ts
13
+ */
14
+ import { internalComponents } from "./components.js";
15
+ import { Shortcuts } from "./shortcuts.js";
16
+ import { capitalize, toCamelCase } from "./utils.js";
17
+ import { Events } from "./event-emitter.js";
18
+ interface Component {
19
+ nodeName: string;
20
+ nodeAlias: string;
21
+ attributes: Attributes;
22
+ }
23
+ interface Components {
24
+ [key: string]: Record<string, string>;
25
+ }
26
+ interface ComponentConfig {
27
+ includes: Set<string>;
28
+ exclude: Set<string>;
29
+ thirdPartyComponents: Map<string, Set<string>>;
30
+ includeAll: boolean;
31
+ }
32
+ interface IAdapter {
33
+ if: string;
34
+ else: string;
35
+ elseif: string;
36
+ for: string;
37
+ forItem: string;
38
+ forIndex: string;
39
+ key: string;
40
+ xs?: string;
41
+ type: string;
42
+ }
43
+ type Attributes = Record<string, string>;
44
+ declare const styles: {
45
+ style: string;
46
+ class: string;
47
+ };
48
+ declare const events: {
49
+ bindtap: string;
50
+ };
51
+ declare class BaseTemplate {
52
+ protected _baseLevel: number;
53
+ protected exportExpr: string;
54
+ protected isSupportRecursive: boolean;
55
+ protected miniComponents: Components;
56
+ protected thirdPartyPatcher: Record<string, Record<string, string>>;
57
+ protected modifyCompProps?: (compName: string, target: Record<string, string>) => Record<string, string>;
58
+ protected modifyLoopBody?: (child: string, nodeName: string) => string;
59
+ protected modifyLoopContainer?: (children: string, nodeName: string) => string;
60
+ protected modifyTemplateResult?: (res: string, nodeName: string, level: number, children: string) => string;
61
+ protected modifyThirdPartyLoopBody?: (child: string, nodeName: string) => string;
62
+ supportXS: boolean;
63
+ isXMLSupportRecursiveReference: boolean;
64
+ Adapter: IAdapter;
65
+ /** 组件列表 */
66
+ internalComponents: Record<string, Record<string, string>>;
67
+ /** 可以 focus 聚焦的组件 */
68
+ focusComponents: Set<string>;
69
+ /** 不需要渲染子节点的元素 */
70
+ voidElements: Set<string>;
71
+ /** 可以递归调用自身的组件 */
72
+ nestElements: Map<string, number>;
73
+ componentsAlias: any;
74
+ set baseLevel(lv: number);
75
+ get baseLevel(): number;
76
+ private buildAttribute;
77
+ protected replacePropName(name: string, value: string, _componentName?: string, _componentAlias?: any): string;
78
+ createMiniComponents(components: Components): Components;
79
+ protected buildBaseTemplate(): string;
80
+ protected buildThirdPartyAttr(attrs: Set<string>, patcher?: Record<string, string>): string;
81
+ protected buildComponentTemplate(comp: Component, level: number): string;
82
+ private getChildrenTemplate;
83
+ private getChildren;
84
+ protected buildFocusComponentTemplate(comp: Component, level: number): string;
85
+ protected buildStandardComponentTemplate(comp: Component, level: number): string;
86
+ protected buildPlainTextTemplate(level: number): string;
87
+ protected buildThirdPartyTemplate(level: number, componentConfig: ComponentConfig): string;
88
+ // 最后一层的 comp 需要引用 container 进行重新的模版循环,其他情况不需要 container
89
+ protected buildContainerTemplate(level: number): string;
90
+ protected dataKeymap(keymap: string): string;
91
+ protected getEvents(): any;
92
+ protected getAttrValue(value: string, _key: string, _nodeName: string): string;
93
+ buildXsTemplate(_filePath?: string): string;
94
+ buildPageTemplate: (baseTempPath: string, _page: {
95
+ content: Record<string, any>;
96
+ path: string;
97
+ }) => string;
98
+ buildBaseComponentTemplate: (ext: string) => string;
99
+ buildCustomComponentTemplate: (ext: string) => string;
100
+ buildXScript: () => string;
101
+ mergeComponents(ctx: any, patch: Record<string, Record<string, string>>): void;
102
+ mergeThirdPartyComponents(patch: Record<string, Record<string, string>>): void;
103
+ protected buildXSTmplName(): string;
104
+ protected buildXSTepFocus(nn: string): string;
105
+ protected buildXSTmpExtra(): string;
106
+ }
107
+ declare class RecursiveTemplate extends BaseTemplate {
108
+ isSupportRecursive: boolean;
109
+ buildTemplate: (componentConfig: ComponentConfig) => string;
110
+ }
111
+ declare class UnRecursiveTemplate extends BaseTemplate {
112
+ isSupportRecursive: boolean;
113
+ protected _baseLevel: number;
114
+ private componentConfig;
115
+ buildTemplate: (componentConfig: ComponentConfig) => string;
116
+ protected buildFloor(level: number, components: string[], restart?: boolean): string;
117
+ protected buildOptimizeFloor(level: number, components: string[], restart?: boolean): string;
118
+ protected buildXSTmplName(): string;
119
+ protected buildXSTmpExtra(): string;
120
+ }
3
121
  type TFunc = (...args: any[]) => any;
4
- export declare enum HOOK_TYPE {
122
+ declare enum HOOK_TYPE {
5
123
  SINGLE = 0,
6
124
  MULTI = 1,
7
125
  WATERFALL = 2
@@ -12,21 +130,21 @@ interface Hook {
12
130
  }
13
131
  interface MiniLifecycle {
14
132
  app: [
15
- string, /** onLaunch */
16
- string, /** onShow */
133
+ string,
134
+ string,
17
135
  string /** onHide */
18
136
  ];
19
137
  page: [
20
- string, /** onLoad */
21
- string, /** onUnload */
22
- string, /** onReady */
23
- string, /** onShow */
24
- string, /** onHide */
25
- string[], /** others */
138
+ string,
139
+ string,
140
+ string,
141
+ string,
142
+ string,
143
+ string[],
26
144
  string[] /** side-effects */
27
145
  ];
28
146
  component: [
29
- string, /** attached */
147
+ string,
30
148
  string
31
149
  ];
32
150
  }
@@ -58,8 +176,8 @@ interface MpEvent {
58
176
  target: Target;
59
177
  currentTarget: Target;
60
178
  }
61
- export declare function TaroHook(type: HOOK_TYPE, initial?: TFunc): Hook;
62
- export declare class TaroHooks<T extends Record<string, TFunc> = any> extends Events {
179
+ declare function TaroHook(type: HOOK_TYPE, initial?: TFunc): Hook;
180
+ declare class TaroHooks<T extends Record<string, TFunc> = any> extends Events {
63
181
  hooks: Record<keyof T, Hook>;
64
182
  constructor(hooks: Record<keyof T, Hook>, opts?: any);
65
183
  private tapOneOrMany;
@@ -81,6 +199,7 @@ type ITaroHooks = {
81
199
  getEventCenter: (EventsClass: typeof Events) => Events;
82
200
  isBubbleEvents: (eventName: string) => boolean;
83
201
  getSpecialNodes: () => string[];
202
+ /** 解决 Vue2 布尔值属性值的设置问题 */
84
203
  onRemoveAttribute: (element: any, qualifiedName: string) => boolean;
85
204
  /** 用于把 React 同一事件回调中的所有 setState 合并到同一个更新处理中 */
86
205
  batchedEventUpdates: (cb: TFunc) => void;
@@ -134,10 +253,6 @@ type ITaroHooks = {
134
253
  modifyAddEventListener: (element: any, sideEffect: boolean, getComponentsAlias: () => Record<string, any>) => void;
135
254
  /** 元素删除事件监听钩子 */
136
255
  modifyRemoveEventListener: (element: any, sideEffect: boolean, getComponentsAlias: () => Record<string, any>) => void;
137
- /** 鸿蒙用于监听 memory 等级的钩子 */
138
- getMemoryLevel: (level: {
139
- level: number;
140
- }) => void;
141
256
  };
142
- export declare const hooks: TaroHooks<ITaroHooks>;
143
- export {};
257
+ declare const hooks: TaroHooks<ITaroHooks>;
258
+ export { IAdapter, Attributes, styles, events, BaseTemplate, RecursiveTemplate, UnRecursiveTemplate, capitalize, internalComponents, Shortcuts, toCamelCase, HOOK_TYPE, TaroHook, TaroHooks, hooks };
@@ -24,7 +24,7 @@ const defaultMiniLifecycle = {
24
24
  'onReachBottom',
25
25
  'onPageScroll',
26
26
  'onResize',
27
- 'defer:onTabItemTap', // defer: 需要等页面组件挂载后再调用
27
+ 'defer:onTabItemTap',
28
28
  'onTitleClick',
29
29
  'onOptionMenuClick',
30
30
  'onPopMenuClick',
@@ -172,7 +172,6 @@ const hooks = new TaroHooks({
172
172
  patchElement: TaroHook(HOOK_TYPE.MULTI),
173
173
  modifyAddEventListener: TaroHook(HOOK_TYPE.SINGLE),
174
174
  modifyRemoveEventListener: TaroHook(HOOK_TYPE.SINGLE),
175
- getMemoryLevel: TaroHook(HOOK_TYPE.SINGLE),
176
175
  });
177
176
 
178
177
  export { HOOK_TYPE, TaroHook, TaroHooks, hooks };
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-hooks.js","sources":["../src/runtime-hooks.ts"],"sourcesContent":["import { Events } from './event-emitter'\nimport { isFunction } from './is'\n\nimport type { Shortcuts } from './template'\n\n// Note: @tarojs/runtime 不依赖 @tarojs/taro, 所以不能改为从 @tarojs/taro 引入 (可能导致循环依赖)\ntype TFunc = (...args: any[]) => any\n\nexport enum HOOK_TYPE {\n SINGLE,\n MULTI,\n WATERFALL\n}\n\ninterface Hook {\n type: HOOK_TYPE\n initial?: TFunc | null\n}\n\ninterface Node {\n next: Node\n context?: any\n callback?: TFunc\n}\n\ninterface MiniLifecycle {\n app: [\n string, /** onLaunch */\n string, /** onShow */\n string /** onHide */\n ]\n page: [\n string, /** onLoad */\n string, /** onUnload */\n string, /** onReady */\n string, /** onShow */\n string, /** onHide */\n string[], /** others */\n string[] /** side-effects */\n ]\n component: [\n string, /** attached */\n string, /** detached */\n ]\n}\n\ninterface MiniElementData {\n [Shortcuts.Childnodes]?: MiniData[]\n [Shortcuts.NodeName]: string\n [Shortcuts.Class]?: string\n [Shortcuts.Style]?: string\n uid?: string\n sid: string\n [key: string]: unknown\n}\n\ninterface MiniTextData {\n [Shortcuts.Text]: string\n [Shortcuts.NodeName]: string\n}\n\ntype MiniData = MiniElementData | MiniTextData\n\ninterface UpdatePayload {\n path: string\n value: string | boolean | (() => MiniData | MiniData[])\n}\n\ntype Target = Record<string, unknown> & { dataset: Record<string, unknown>, id: string }\n\ninterface MpEvent {\n type: string\n detail: Record<string, unknown>\n target: Target\n currentTarget: Target\n}\n\nconst defaultMiniLifecycle: MiniLifecycle = {\n app: [\n 'onLaunch',\n 'onShow',\n 'onHide'\n ],\n page: [\n 'onLoad',\n 'onUnload',\n 'onReady',\n 'onShow',\n 'onHide',\n [\n 'onPullDownRefresh',\n 'onReachBottom',\n 'onPageScroll',\n 'onResize',\n 'defer:onTabItemTap', // defer: 需要等页面组件挂载后再调用\n 'onTitleClick',\n 'onOptionMenuClick',\n 'onPopMenuClick',\n 'onPullIntercept',\n 'onAddToFavorites'\n ],\n [\n 'onShareAppMessage',\n 'onShareTimeline'\n ]\n ],\n component: [\n 'attached',\n 'detached'\n ]\n}\n\nexport function TaroHook (type: HOOK_TYPE, initial?: TFunc): Hook {\n return {\n type,\n initial: initial || null\n }\n}\n\nexport class TaroHooks<T extends Record<string, TFunc> = any> extends Events {\n hooks: Record<keyof T, Hook>\n\n constructor (hooks: Record<keyof T, Hook>, opts?) {\n super(opts)\n this.hooks = hooks\n for (const hookName in hooks) {\n const { initial } = hooks[hookName]\n if (isFunction(initial)) {\n this.on(hookName, initial)\n }\n }\n }\n\n private tapOneOrMany<K extends Extract<keyof T, string>> (hookName: K, callback: T[K] | T[K][]) {\n const list = isFunction(callback) ? [callback] : callback\n list.forEach(cb => this.on(hookName, cb))\n }\n\n tap<K extends Extract<keyof T, string>> (hookName: K, callback: T[K] | T[K][]) {\n const hooks = this.hooks\n const { type, initial } = hooks[hookName]\n if (type === HOOK_TYPE.SINGLE) {\n this.off(hookName)\n this.on(hookName, isFunction(callback) ? callback : callback[callback.length - 1])\n } else {\n initial && this.off(hookName, initial)\n this.tapOneOrMany(hookName, callback)\n }\n }\n\n call<K extends Extract<keyof T, string>> (hookName: K, ...rest: Parameters<T[K]>): ReturnType<T[K]> | undefined {\n const hook = this.hooks[hookName]\n if (!hook) return\n\n const { type } = hook\n\n const calls = this.callbacks\n if (!calls) return\n\n const list = calls[hookName] as { tail: Node, next: Node }\n\n if (list) {\n const tail = list.tail\n let node: Node = list.next\n let args = rest\n let res\n\n while (node !== tail) {\n res = node.callback?.apply(node.context || this, args)\n if (type === HOOK_TYPE.WATERFALL) {\n const params: any = [res]\n args = params\n }\n node = node.next\n }\n return res\n }\n }\n\n isExist (hookName: string) {\n return Boolean(this.callbacks?.[hookName])\n }\n}\n\ntype ITaroHooks = {\n /** 小程序端 App、Page 构造对象的生命周期方法名称 */\n getMiniLifecycle: (defaultConfig: MiniLifecycle) => MiniLifecycle\n getMiniLifecycleImpl: () => MiniLifecycle\n /** 解决 React 生命周期名称的兼容问题 */\n getLifecycle: (instance, lifecyle) => TFunc | Array<TFunc> | undefined\n /** 提供Hook,为不同平台提供修改生命周期配置 */\n modifyRecursiveComponentConfig: (defaultConfig:MiniLifecycle, options:any) => any\n /** 解决百度小程序的模版语法问题 */\n getPathIndex: (indexOfNode: number) => string\n /** 解决支付宝小程序分包时全局作用域不一致的问题 */\n getEventCenter: (EventsClass: typeof Events) => Events\n isBubbleEvents: (eventName: string) => boolean\n getSpecialNodes: () => string[]\n onRemoveAttribute: (element, qualifiedName: string) => boolean\n /** 用于把 React 同一事件回调中的所有 setState 合并到同一个更新处理中 */\n batchedEventUpdates: (cb: TFunc) => void\n /** 用于处理 React 中的小程序生命周期 hooks */\n mergePageInstance: (prev, next) => void\n /** 用于修改传递给小程序 Page 构造器的对象 */\n modifyPageObject: (config: Record<any, any>) => void\n /** H5 下拉刷新 wrapper */\n createPullDownComponent: (el, path: string, framework, customWrapper?: any, stampId?: string) => void\n /** H5 获取原生 DOM 对象 */\n getDOMNode: (instance) => any\n /**\n * @todo: multi\n * 修改 Taro DOM 序列化数据\n **/\n modifyHydrateData:(data: Record<string, any>, node) => void\n /**\n * 自定义处理 Taro DOM 序列化数据,如使其脱离 data 树\n */\n transferHydrateData: (data: Record<string, any>, element, componentsAlias: Record<string, any>) => void\n /**\n * @todo: multi\n * 修改 Taro DOM 序列化数据\n **/\n modifySetAttrPayload: (element, key: string, payload: UpdatePayload, componentsAlias: Record<string, any>) => void\n /**\n * @todo: multi\n * 修改 Taro DOM 序列化数据\n **/\n modifyRmAttrPayload: (element, key: string, payload: UpdatePayload, componentsAlias: Record<string, any>) => void\n /**\n * @todo: multi\n * 调用 addEventListener 时触发\n **/\n onAddEvent: (type: string, handler, options: any, node) => void\n /** 用于修改小程序原生事件对象 */\n modifyMpEvent: (event: MpEvent) => void\n modifyMpEventImpl: (event: MpEvent) => void\n /** 用于修改 Taro DOM 事件对象 */\n modifyTaroEvent: (event, element) => void\n\n dispatchTaroEvent: (event, element) => void\n dispatchTaroEventFinish: (event, element) => void\n modifyTaroEventReturn: (node, event, returnVal) => any\n\n modifyDispatchEvent: (event, element) => void\n injectNewStyleProperties: (styleProperties: string[]) => void\n initNativeApi: (taro: Record<string, any>) => void\n patchElement: (node) => void\n\n /** 解 Proxy */\n proxyToRaw: (proxyObj) => Record<any, any>\n /** 元素增加事件监听钩子 */\n modifyAddEventListener: (element, sideEffect: boolean, getComponentsAlias: () => Record<string, any>) => void\n /** 元素删除事件监听钩子 */\n modifyRemoveEventListener: (element, sideEffect: boolean, getComponentsAlias: () => Record<string, any>) => void\n /** 鸿蒙用于监听 memory 等级的钩子 */\n getMemoryLevel: (level: { level: number }) => void\n}\n\nexport const hooks = new TaroHooks<ITaroHooks>({\n getMiniLifecycle: TaroHook(HOOK_TYPE.SINGLE, defaultConfig => defaultConfig),\n\n getMiniLifecycleImpl: TaroHook(HOOK_TYPE.SINGLE, function (this: TaroHooks<ITaroHooks>) {\n return this.call('getMiniLifecycle', defaultMiniLifecycle)\n }),\n\n getLifecycle: TaroHook(HOOK_TYPE.SINGLE, (instance, lifecycle) => instance[lifecycle]),\n\n modifyRecursiveComponentConfig: TaroHook(HOOK_TYPE.SINGLE, (defaultConfig) => defaultConfig),\n\n getPathIndex: TaroHook(HOOK_TYPE.SINGLE, indexOfNode => `[${indexOfNode}]`),\n\n getEventCenter: TaroHook(HOOK_TYPE.SINGLE, Events => new Events()),\n\n isBubbleEvents: TaroHook(HOOK_TYPE.SINGLE, eventName => {\n /**\n * 支持冒泡的事件, 除 支付宝小程序外,其余的可冒泡事件都和微信保持一致\n * 详见 见 https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html\n */\n const BUBBLE_EVENTS = new Set([\n 'touchstart',\n 'touchmove',\n 'touchcancel',\n 'touchend',\n 'touchforcechange',\n 'tap',\n 'longpress',\n 'longtap',\n 'transitionend',\n 'animationstart',\n 'animationiteration',\n 'animationend'\n ])\n\n return BUBBLE_EVENTS.has(eventName)\n }),\n\n getSpecialNodes: TaroHook(HOOK_TYPE.SINGLE, () => ['view', 'text', 'image']),\n\n onRemoveAttribute: TaroHook(HOOK_TYPE.SINGLE),\n\n batchedEventUpdates: TaroHook(HOOK_TYPE.SINGLE),\n\n mergePageInstance: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyPageObject: TaroHook(HOOK_TYPE.SINGLE),\n\n createPullDownComponent: TaroHook(HOOK_TYPE.SINGLE),\n\n getDOMNode: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyHydrateData: TaroHook(HOOK_TYPE.SINGLE),\n\n transferHydrateData: TaroHook(HOOK_TYPE.SINGLE),\n\n modifySetAttrPayload: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyRmAttrPayload: TaroHook(HOOK_TYPE.SINGLE),\n\n onAddEvent: TaroHook(HOOK_TYPE.SINGLE),\n\n proxyToRaw: TaroHook(HOOK_TYPE.SINGLE, function (proxyObj) {\n return proxyObj\n }),\n\n modifyMpEvent: TaroHook(HOOK_TYPE.MULTI),\n\n modifyMpEventImpl: TaroHook(HOOK_TYPE.SINGLE, function (this: TaroHooks<ITaroHooks>, e: MpEvent) {\n try {\n // 有些小程序的事件对象的某些属性只读\n this.call('modifyMpEvent', e)\n } catch (error) {\n console.warn('[Taro modifyMpEvent hook Error]: ' + error?.message)\n }\n }),\n\n injectNewStyleProperties: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyTaroEvent: TaroHook(HOOK_TYPE.MULTI),\n\n dispatchTaroEvent: TaroHook(HOOK_TYPE.SINGLE, (e, node) => {\n node.dispatchEvent(e)\n }),\n\n dispatchTaroEventFinish: TaroHook(HOOK_TYPE.MULTI),\n\n modifyTaroEventReturn: TaroHook(HOOK_TYPE.SINGLE, () => undefined),\n\n modifyDispatchEvent: TaroHook(HOOK_TYPE.MULTI),\n\n initNativeApi: TaroHook(HOOK_TYPE.MULTI),\n\n patchElement: TaroHook(HOOK_TYPE.MULTI),\n\n modifyAddEventListener: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyRemoveEventListener: TaroHook(HOOK_TYPE.SINGLE),\n\n getMemoryLevel: TaroHook(HOOK_TYPE.SINGLE),\n})\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-hooks.js","sources":["../src/runtime-hooks.ts"],"sourcesContent":["import { Events } from './event-emitter'\nimport { isFunction } from './is'\n\nimport type { Shortcuts } from './template'\n\n// Note: @tarojs/runtime 不依赖 @tarojs/taro, 所以不能改为从 @tarojs/taro 引入 (可能导致循环依赖)\ntype TFunc = (...args: any[]) => any\n\nexport enum HOOK_TYPE {\n SINGLE,\n MULTI,\n WATERFALL\n}\n\ninterface Hook {\n type: HOOK_TYPE\n initial?: TFunc | null\n}\n\ninterface Node {\n next: Node\n context?: any\n callback?: TFunc\n}\n\ninterface MiniLifecycle {\n app: [\n string, /** onLaunch */\n string, /** onShow */\n string /** onHide */\n ]\n page: [\n string, /** onLoad */\n string, /** onUnload */\n string, /** onReady */\n string, /** onShow */\n string, /** onHide */\n string[], /** others */\n string[] /** side-effects */\n ]\n component: [\n string, /** attached */\n string, /** detached */\n ]\n}\n\ninterface MiniElementData {\n [Shortcuts.Childnodes]?: MiniData[]\n [Shortcuts.NodeName]: string\n [Shortcuts.Class]?: string\n [Shortcuts.Style]?: string\n uid?: string\n sid: string\n [key: string]: unknown\n}\n\ninterface MiniTextData {\n [Shortcuts.Text]: string\n [Shortcuts.NodeName]: string\n}\n\ntype MiniData = MiniElementData | MiniTextData\n\ninterface UpdatePayload {\n path: string\n value: string | boolean | (() => MiniData | MiniData[])\n}\n\ntype Target = Record<string, unknown> & { dataset: Record<string, unknown>, id: string }\n\ninterface MpEvent {\n type: string\n detail: Record<string, unknown>\n target: Target\n currentTarget: Target\n}\n\nconst defaultMiniLifecycle: MiniLifecycle = {\n app: [\n 'onLaunch',\n 'onShow',\n 'onHide'\n ],\n page: [\n 'onLoad',\n 'onUnload',\n 'onReady',\n 'onShow',\n 'onHide',\n [\n 'onPullDownRefresh',\n 'onReachBottom',\n 'onPageScroll',\n 'onResize',\n 'defer:onTabItemTap', // defer: 需要等页面组件挂载后再调用\n 'onTitleClick',\n 'onOptionMenuClick',\n 'onPopMenuClick',\n 'onPullIntercept',\n 'onAddToFavorites'\n ],\n [\n 'onShareAppMessage',\n 'onShareTimeline'\n ]\n ],\n component: [\n 'attached',\n 'detached'\n ]\n}\n\nexport function TaroHook (type: HOOK_TYPE, initial?: TFunc): Hook {\n return {\n type,\n initial: initial || null\n }\n}\n\nexport class TaroHooks<T extends Record<string, TFunc> = any> extends Events {\n hooks: Record<keyof T, Hook>\n\n constructor (hooks: Record<keyof T, Hook>, opts?) {\n super(opts)\n this.hooks = hooks\n for (const hookName in hooks) {\n const { initial } = hooks[hookName]\n if (isFunction(initial)) {\n this.on(hookName, initial)\n }\n }\n }\n\n private tapOneOrMany<K extends Extract<keyof T, string>> (hookName: K, callback: T[K] | T[K][]) {\n const list = isFunction(callback) ? [callback] : callback\n list.forEach(cb => this.on(hookName, cb))\n }\n\n tap<K extends Extract<keyof T, string>> (hookName: K, callback: T[K] | T[K][]) {\n const hooks = this.hooks\n const { type, initial } = hooks[hookName]\n if (type === HOOK_TYPE.SINGLE) {\n this.off(hookName)\n this.on(hookName, isFunction(callback) ? callback : callback[callback.length - 1])\n } else {\n initial && this.off(hookName, initial)\n this.tapOneOrMany(hookName, callback)\n }\n }\n\n call<K extends Extract<keyof T, string>> (hookName: K, ...rest: Parameters<T[K]>): ReturnType<T[K]> | undefined {\n const hook = this.hooks[hookName]\n if (!hook) return\n\n const { type } = hook\n\n const calls = this.callbacks\n if (!calls) return\n\n const list = calls[hookName] as { tail: Node, next: Node }\n\n if (list) {\n const tail = list.tail\n let node: Node = list.next\n let args = rest\n let res\n\n while (node !== tail) {\n res = node.callback?.apply(node.context || this, args)\n if (type === HOOK_TYPE.WATERFALL) {\n const params: any = [res]\n args = params\n }\n node = node.next\n }\n return res\n }\n }\n\n isExist (hookName: string) {\n return Boolean(this.callbacks?.[hookName])\n }\n}\n\ntype ITaroHooks = {\n /** 小程序端 App、Page 构造对象的生命周期方法名称 */\n getMiniLifecycle: (defaultConfig: MiniLifecycle) => MiniLifecycle\n getMiniLifecycleImpl: () => MiniLifecycle\n /** 解决 React 生命周期名称的兼容问题 */\n getLifecycle: (instance, lifecyle) => TFunc | Array<TFunc> | undefined\n /** 提供Hook,为不同平台提供修改生命周期配置 */\n modifyRecursiveComponentConfig: (defaultConfig:MiniLifecycle, options:any) => any\n /** 解决百度小程序的模版语法问题 */\n getPathIndex: (indexOfNode: number) => string\n /** 解决支付宝小程序分包时全局作用域不一致的问题 */\n getEventCenter: (EventsClass: typeof Events) => Events\n isBubbleEvents: (eventName: string) => boolean\n getSpecialNodes: () => string[]\n /** 解决 Vue2 布尔值属性值的设置问题 */\n onRemoveAttribute: (element, qualifiedName: string) => boolean\n /** 用于把 React 同一事件回调中的所有 setState 合并到同一个更新处理中 */\n batchedEventUpdates: (cb: TFunc) => void\n /** 用于处理 React 中的小程序生命周期 hooks */\n mergePageInstance: (prev, next) => void\n /** 用于修改传递给小程序 Page 构造器的对象 */\n modifyPageObject: (config: Record<any, any>) => void\n /** H5 下拉刷新 wrapper */\n createPullDownComponent: (el, path: string, framework, customWrapper?: any, stampId?: string) => void\n /** H5 获取原生 DOM 对象 */\n getDOMNode: (instance) => any\n /**\n * @todo: multi\n * 修改 Taro DOM 序列化数据\n **/\n modifyHydrateData:(data: Record<string, any>, node) => void\n /**\n * 自定义处理 Taro DOM 序列化数据,如使其脱离 data 树\n */\n transferHydrateData: (data: Record<string, any>, element, componentsAlias: Record<string, any>) => void\n /**\n * @todo: multi\n * 修改 Taro DOM 序列化数据\n **/\n modifySetAttrPayload: (element, key: string, payload: UpdatePayload, componentsAlias: Record<string, any>) => void\n /**\n * @todo: multi\n * 修改 Taro DOM 序列化数据\n **/\n modifyRmAttrPayload: (element, key: string, payload: UpdatePayload, componentsAlias: Record<string, any>) => void\n /**\n * @todo: multi\n * 调用 addEventListener 时触发\n **/\n onAddEvent: (type: string, handler, options: any, node) => void\n /** 用于修改小程序原生事件对象 */\n modifyMpEvent: (event: MpEvent) => void\n modifyMpEventImpl: (event: MpEvent) => void\n /** 用于修改 Taro DOM 事件对象 */\n modifyTaroEvent: (event, element) => void\n\n dispatchTaroEvent: (event, element) => void\n dispatchTaroEventFinish: (event, element) => void\n modifyTaroEventReturn: (node, event, returnVal) => any\n\n modifyDispatchEvent: (event, element) => void\n injectNewStyleProperties: (styleProperties: string[]) => void\n initNativeApi: (taro: Record<string, any>) => void\n patchElement: (node) => void\n\n /** 解 Proxy */\n proxyToRaw: (proxyObj) => Record<any, any>\n /** 元素增加事件监听钩子 */\n modifyAddEventListener: (element, sideEffect: boolean, getComponentsAlias: () => Record<string, any>) => void\n /** 元素删除事件监听钩子 */\n modifyRemoveEventListener: (element, sideEffect: boolean, getComponentsAlias: () => Record<string, any>) => void\n}\n\nexport const hooks = new TaroHooks<ITaroHooks>({\n getMiniLifecycle: TaroHook(HOOK_TYPE.SINGLE, defaultConfig => defaultConfig),\n\n getMiniLifecycleImpl: TaroHook(HOOK_TYPE.SINGLE, function (this: TaroHooks<ITaroHooks>) {\n return this.call('getMiniLifecycle', defaultMiniLifecycle)\n }),\n\n getLifecycle: TaroHook(HOOK_TYPE.SINGLE, (instance, lifecycle) => instance[lifecycle]),\n\n modifyRecursiveComponentConfig: TaroHook(HOOK_TYPE.SINGLE, (defaultConfig) => defaultConfig),\n\n getPathIndex: TaroHook(HOOK_TYPE.SINGLE, indexOfNode => `[${indexOfNode}]`),\n\n getEventCenter: TaroHook(HOOK_TYPE.SINGLE, Events => new Events()),\n\n isBubbleEvents: TaroHook(HOOK_TYPE.SINGLE, eventName => {\n /**\n * 支持冒泡的事件, 除 支付宝小程序外,其余的可冒泡事件都和微信保持一致\n * 详见 见 https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html\n */\n const BUBBLE_EVENTS = new Set([\n 'touchstart',\n 'touchmove',\n 'touchcancel',\n 'touchend',\n 'touchforcechange',\n 'tap',\n 'longpress',\n 'longtap',\n 'transitionend',\n 'animationstart',\n 'animationiteration',\n 'animationend'\n ])\n\n return BUBBLE_EVENTS.has(eventName)\n }),\n\n getSpecialNodes: TaroHook(HOOK_TYPE.SINGLE, () => ['view', 'text', 'image']),\n\n onRemoveAttribute: TaroHook(HOOK_TYPE.SINGLE),\n\n batchedEventUpdates: TaroHook(HOOK_TYPE.SINGLE),\n\n mergePageInstance: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyPageObject: TaroHook(HOOK_TYPE.SINGLE),\n\n createPullDownComponent: TaroHook(HOOK_TYPE.SINGLE),\n\n getDOMNode: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyHydrateData: TaroHook(HOOK_TYPE.SINGLE),\n\n transferHydrateData: TaroHook(HOOK_TYPE.SINGLE),\n\n modifySetAttrPayload: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyRmAttrPayload: TaroHook(HOOK_TYPE.SINGLE),\n\n onAddEvent: TaroHook(HOOK_TYPE.SINGLE),\n\n proxyToRaw: TaroHook(HOOK_TYPE.SINGLE, function (proxyObj) {\n return proxyObj\n }),\n\n modifyMpEvent: TaroHook(HOOK_TYPE.MULTI),\n\n modifyMpEventImpl: TaroHook(HOOK_TYPE.SINGLE, function (this: TaroHooks<ITaroHooks>, e: MpEvent) {\n try {\n // 有些小程序的事件对象的某些属性只读\n this.call('modifyMpEvent', e)\n } catch (error) {\n console.warn('[Taro modifyMpEvent hook Error]: ' + error?.message)\n }\n }),\n\n injectNewStyleProperties: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyTaroEvent: TaroHook(HOOK_TYPE.MULTI),\n\n dispatchTaroEvent: TaroHook(HOOK_TYPE.SINGLE, (e, node) => {\n node.dispatchEvent(e)\n }),\n\n dispatchTaroEventFinish: TaroHook(HOOK_TYPE.MULTI),\n\n modifyTaroEventReturn: TaroHook(HOOK_TYPE.SINGLE, () => undefined),\n\n modifyDispatchEvent: TaroHook(HOOK_TYPE.MULTI),\n\n initNativeApi: TaroHook(HOOK_TYPE.MULTI),\n\n patchElement: TaroHook(HOOK_TYPE.MULTI),\n\n modifyAddEventListener: TaroHook(HOOK_TYPE.SINGLE),\n\n modifyRemoveEventListener: TaroHook(HOOK_TYPE.SINGLE),\n})\n"],"names":[],"mappings":"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"}