platform.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. var _a;
  2. import { ETargetPlatform, EElementType } from './types.js';
  3. import { mergeObjectKeys } from './utils.js';
  4. var ifInAlipay = function () {
  5. //@ts-expect-error
  6. return typeof my !== 'undefined';
  7. };
  8. var ifInWeChat = function () {
  9. //@ts-expect-error
  10. return typeof wx !== 'undefined';
  11. };
  12. export var checkIfPlatformIsLoadCorrectly = function (config, target) {
  13. if (config.name !== target) {
  14. var errMsg = "\u671F\u671B\u7684\u8FD0\u884C\u5E73\u53F0\u4E3A ".concat(target, "\uFF0C\u4F46\u662F\u5F53\u524D\u5E73\u53F0\u914D\u7F6E\u4E3A ").concat(config.name, "\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u52A0\u8F7D\u4E86\u6B63\u786E\u7684\u5E73\u53F0\u914D\u7F6E");
  15. throw new Error(errMsg);
  16. // 这里的判断方法可能不准,有反馈了再改
  17. }
  18. else if (!config.tellIfInThisPlatform()) {
  19. var errMsg = "\u671F\u671B\u7684\u8FD0\u884C\u5E73\u53F0\u4E3A ".concat(target, "\uFF0C\u4F46\u662F\u5F53\u524D\u8FD0\u884C\u65F6\u73AF\u5883\u4E0D\u662F ").concat(target, "\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u52A0\u8F7D\u4E86\u6B63\u786E\u7684\u5E73\u53F0\u914D\u7F6E");
  20. throw new Error(errMsg);
  21. }
  22. return true;
  23. };
  24. // 方便 ts 类型推导
  25. export var commonPageEvents = {
  26. onLoad: 'onLoad',
  27. onShow: 'onShow',
  28. onReady: 'onReady',
  29. onHide: 'onHide',
  30. onPullDownRefresh: 'onPullDownRefresh',
  31. onReachBottom: 'onReachBottom',
  32. onShareAppMessage: 'onShareAppMessage',
  33. onPageScroll: 'onPageScroll',
  34. onTabItemTap: 'onTabItemTap',
  35. onResize: 'onResize',
  36. onUnload: 'onUnload',
  37. };
  38. export var alipayPageEvents = {
  39. onTitleClick: 'onTitleClick',
  40. onOptionMenuClick: 'onOptionMenuClick',
  41. beforeTabItemTap: 'beforeTabItemTap',
  42. onKeyboardHeight: 'onKeyboardHeight',
  43. onBack: 'onBack',
  44. onSelectedTabItemTap: 'onSelectedTabItemTap',
  45. beforeReload: 'beforeReload',
  46. };
  47. export var commonComponentPageEvents = {
  48. 'page:show': 'page:show',
  49. 'page:hide': 'page:hide',
  50. };
  51. /**
  52. * @see https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html
  53. */
  54. export var wechatComponentPageEvents = {
  55. 'page:hide': 'hide',
  56. 'page:show': 'show',
  57. };
  58. /**
  59. * @see https://opendocs.alipay.com/mini/framework/page-detail#events
  60. */
  61. export var alipayComponentPageEvents = {
  62. 'page:hide': 'onHide',
  63. 'page:show': 'onShow',
  64. };
  65. export var commonComponentEvents = {
  66. created: 'created',
  67. attached: 'attached',
  68. ready: 'ready',
  69. moved: 'moved',
  70. detached: 'detached',
  71. };
  72. export var alipayComponentEvents = {
  73. onInit: 'onInit',
  74. didMount: 'didMount',
  75. didUpdate: 'didUpdate',
  76. deriveDataFromProps: 'deriveDataFromProps',
  77. didUnmount: 'didUnmount',
  78. };
  79. export var wechatComponentEvents = {
  80. error: 'error',
  81. };
  82. // 保留字,不允许开发者注册使用
  83. export var blockedProperty = ['mixins', 'methods', 'observers', 'pageEvents'];
  84. export var platformConfig = (_a = {},
  85. _a[ETargetPlatform.alipay] = {
  86. name: ETargetPlatform.alipay,
  87. supportHandleEventResult: true,
  88. tellIfInThisPlatform: ifInAlipay,
  89. pageEvents: mergeObjectKeys(commonPageEvents, alipayPageEvents),
  90. pageLifeCycleToMount: commonPageEvents.onLoad,
  91. pageLifeCycleToUnmount: commonPageEvents.onUnload,
  92. componentEvents: mergeObjectKeys(commonComponentEvents, alipayComponentEvents),
  93. componentPageEvents: Object.keys(commonComponentPageEvents),
  94. componentLifeCycleToMount: alipayComponentEvents.onInit,
  95. componentLifeCycleToUnmount: alipayComponentEvents.didUnmount,
  96. blockedProperty: blockedProperty,
  97. getPropsFromInstance: function (instance) {
  98. return instance.props;
  99. },
  100. buildOptions: function (elementType, props, data, lifeCycleHandlers, userEventHandlers, options, _observers, componentPageLifeCycleHandlers) {
  101. if (options === void 0) { options = null; }
  102. if (elementType === EElementType.page) {
  103. return Object.assign({
  104. data: data,
  105. options: options,
  106. }, lifeCycleHandlers, userEventHandlers);
  107. }
  108. else {
  109. /**
  110. * 参考这里
  111. * https://opendocs.alipay.com/mini/framework/component-lifecycle
  112. */
  113. var alipayLifeCycle_1 = {};
  114. var commonLifetime_1 = {};
  115. Object.keys(lifeCycleHandlers).forEach(function (key) {
  116. if (commonComponentEvents[key]) {
  117. commonLifetime_1[key] = lifeCycleHandlers[key];
  118. }
  119. else {
  120. alipayLifeCycle_1[key] = lifeCycleHandlers[key];
  121. }
  122. });
  123. var rootEvents_1 = {};
  124. Object.keys(componentPageLifeCycleHandlers).map(function (p) {
  125. rootEvents_1[alipayComponentPageEvents[p]] =
  126. componentPageLifeCycleHandlers[p];
  127. });
  128. return Object.assign({
  129. rootEvents: rootEvents_1,
  130. props: props,
  131. data: data,
  132. options: Object.assign({
  133. lifetimes: true,
  134. }, options || {}),
  135. lifetimes: commonLifetime_1,
  136. }, alipayLifeCycle_1, { methods: userEventHandlers });
  137. }
  138. },
  139. },
  140. _a[ETargetPlatform.wechat] = {
  141. name: ETargetPlatform.wechat,
  142. componentPageEvents: Object.keys(commonComponentPageEvents),
  143. tellIfInThisPlatform: ifInWeChat,
  144. supportHandleEventResult: false,
  145. pageEvents: Object.keys(commonPageEvents),
  146. pageLifeCycleToMount: commonPageEvents.onLoad,
  147. pageLifeCycleToUnmount: commonPageEvents.onUnload,
  148. componentEvents: mergeObjectKeys(commonComponentEvents, wechatComponentEvents),
  149. componentLifeCycleToMount: commonComponentEvents.attached,
  150. componentLifeCycleToUnmount: commonComponentEvents.detached,
  151. blockedProperty: blockedProperty,
  152. getPropsFromInstance: function (instance, propNames) {
  153. var newProps = {};
  154. for (var _i = 0, propNames_1 = propNames; _i < propNames_1.length; _i++) {
  155. var propName = propNames_1[_i];
  156. //@ts-expect-error
  157. newProps[propName] = instance.data[propName];
  158. }
  159. return newProps;
  160. },
  161. buildOptions: function (elementType, props, data, lifeCycleHandlers, userEventHandlers, options, observers, componentPageLifeCycleHandlers) {
  162. if (options === void 0) { options = {}; }
  163. if (elementType === EElementType.page) {
  164. return Object.assign({
  165. data: data,
  166. options: options,
  167. }, lifeCycleHandlers, userEventHandlers);
  168. }
  169. else {
  170. var defaultProps = props || {};
  171. var properties = {};
  172. for (var key in defaultProps) {
  173. if (!Object.prototype.hasOwnProperty.call(defaultProps, key))
  174. continue;
  175. var value = defaultProps[key];
  176. var targetType = void 0;
  177. if (typeof value === 'string') {
  178. targetType = String;
  179. }
  180. else if (typeof value === 'number') {
  181. targetType = Number;
  182. }
  183. else if (typeof value === 'boolean') {
  184. targetType = Boolean;
  185. }
  186. else if (Array.isArray(value)) {
  187. targetType = Array;
  188. }
  189. else if (typeof value === 'object') {
  190. if (value === null) {
  191. targetType = null;
  192. }
  193. else {
  194. targetType = Object;
  195. }
  196. }
  197. else {
  198. throw new Error("\u4E0D\u652F\u6301\u7684 properties \u7C7B\u578B: ".concat(key, " - ").concat(typeof value));
  199. }
  200. properties[key] = {
  201. type: targetType,
  202. value: value,
  203. };
  204. }
  205. var pageLifetimes_1 = {};
  206. Object.keys(componentPageLifeCycleHandlers).map(function (p) {
  207. pageLifetimes_1[wechatComponentPageEvents[p]] =
  208. componentPageLifeCycleHandlers[p];
  209. });
  210. return {
  211. pageLifetimes: pageLifetimes_1,
  212. properties: properties,
  213. data: data,
  214. options: options,
  215. observers: observers,
  216. lifetimes: lifeCycleHandlers || {},
  217. methods: userEventHandlers || {},
  218. };
  219. }
  220. },
  221. },
  222. _a);