@spcsn/taro-runtime 0.1.2 → 1.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.
Files changed (85) hide show
  1. package/LICENSE +1 -153
  2. package/README.md +16 -39
  3. package/dist/bom/{URL.js → URL2.js} +3 -4
  4. package/dist/bom/URL2.js.map +1 -0
  5. package/dist/bom/document.d.ts +0 -1
  6. package/dist/bom/document.js +1 -55
  7. package/dist/bom/document.js.map +1 -1
  8. package/dist/bom/get-computed-style.js +8 -0
  9. package/dist/bom/get-computed-style.js.map +1 -0
  10. package/dist/bom/history.js +1 -2
  11. package/dist/bom/history.js.map +1 -1
  12. package/dist/bom/location.js +2 -3
  13. package/dist/bom/location.js.map +1 -1
  14. package/dist/bom/navigator.js +1 -2
  15. package/dist/bom/navigator.js.map +1 -1
  16. package/dist/bom/raf.d.ts +2 -2
  17. package/dist/bom/raf.js +2 -2
  18. package/dist/bom/raf.js.map +1 -1
  19. package/dist/bom/url-search-params.d.ts +14 -0
  20. package/dist/bom/{URLSearchParams.js → url-search-params.js} +12 -15
  21. package/dist/bom/url-search-params.js.map +1 -0
  22. package/dist/bom/{URL.d.ts → url.d.ts} +1 -0
  23. package/dist/bom/url.js +196 -0
  24. package/dist/bom/url.js.map +1 -0
  25. package/dist/bom/window.d.ts +3 -3
  26. package/dist/bom/window.js +2 -2
  27. package/dist/bom/window.js.map +1 -1
  28. package/dist/current.d.ts +3 -0
  29. package/dist/current.js +10 -1
  30. package/dist/current.js.map +1 -1
  31. package/dist/dom/anchor-element.js +1 -1
  32. package/dist/dom/class-list.js +2 -1
  33. package/dist/dom/class-list.js.map +1 -1
  34. package/dist/dom/document.js.map +1 -1
  35. package/dist/dom/element.js +7 -7
  36. package/dist/dom/element.js.map +1 -1
  37. package/dist/dom/event.d.ts +1 -1
  38. package/dist/dom/event.js +3 -13
  39. package/dist/dom/event.js.map +1 -1
  40. package/dist/dom/form.js +1 -1
  41. package/dist/dom/form.js.map +1 -1
  42. package/dist/dom/node.d.ts +4 -3
  43. package/dist/dom/node.js +14 -7
  44. package/dist/dom/node.js.map +1 -1
  45. package/dist/dom/root.js +2 -2
  46. package/dist/dom/root.js.map +1 -1
  47. package/dist/dom/{style_properties.js → style-properties.js} +2 -2
  48. package/dist/dom/{style_properties.js.map → style-properties.js.map} +1 -1
  49. package/dist/dom/style.js +1 -1
  50. package/dist/dom/style.js.map +1 -1
  51. package/dist/dom/text.d.ts +1 -1
  52. package/dist/dom/text.js.map +1 -1
  53. package/dist/dom/tree.js.map +1 -1
  54. package/dist/dsl/common.js +26 -47
  55. package/dist/dsl/common.js.map +1 -1
  56. package/dist/env.js +2 -2
  57. package/dist/env.js.map +1 -1
  58. package/dist/hydrate.js +1 -1
  59. package/dist/hydrate.js.map +1 -1
  60. package/dist/index.cjs.d.ts +4 -4
  61. package/dist/index.cjs.js +331 -708
  62. package/dist/index.cjs.js.map +1 -1
  63. package/dist/index.d.ts +4 -4
  64. package/dist/index.js +6 -6
  65. package/dist/next-tick.js +1 -6
  66. package/dist/next-tick.js.map +1 -1
  67. package/dist/perf.js +1 -1
  68. package/dist/perf.js.map +1 -1
  69. package/dist/polyfill/index.js +1 -6
  70. package/dist/polyfill/index.js.map +1 -1
  71. package/dist/runtime.esm.d.ts +4 -4
  72. package/dist/runtime.esm.js +330 -708
  73. package/dist/runtime.esm.js.map +1 -1
  74. package/dist/utils/index.js.map +1 -1
  75. package/package.json +16 -10
  76. package/dist/bom/URL.js.map +0 -1
  77. package/dist/bom/URLSearchParams.d.ts +0 -1
  78. package/dist/bom/URLSearchParams.js.map +0 -1
  79. package/dist/bom/getComputedStyle.js +0 -9
  80. package/dist/bom/getComputedStyle.js.map +0 -1
  81. package/dist/polyfill/intersection-observer.js +0 -494
  82. package/dist/polyfill/intersection-observer.js.map +0 -1
  83. /package/dist/bom/{getComputedStyle.d.ts → get-computed-style.d.ts} +0 -0
  84. /package/dist/dom/{node_types.d.ts → node-types.d.ts} +0 -0
  85. /package/dist/dom/{style_properties.d.ts → style-properties.d.ts} +0 -0
@@ -2,14 +2,14 @@ import { BEHAVIORS, CUSTOM_WRAPPER, EXTERNAL_CLASSES, ON_HIDE, ON_LOAD, ON_READY
2
2
  import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/objectSpread2.js";
3
3
  import { eventCenter } from "../emitter/emitter.js";
4
4
  import env from "../env.js";
5
- import { Current } from "../current.js";
5
+ import { Current, whenAppReady } from "../current.js";
6
6
  import { _raf } from "../bom/raf.js";
7
7
  import { taroWindowProvider } from "../bom/window.js";
8
8
  import { addLeadingSlash } from "../utils/router.js";
9
9
  import { customWrapperCache, incrementId } from "../utils/index.js";
10
10
  import { eventHandler } from "../dom/event.js";
11
11
  import { perf } from "../perf.js";
12
- import { EMPTY_OBJ, EventChannel, Shortcuts, ensure, getComponentsAlias, hooks, internalComponents, isArray, isEnableTTDom, isFunction, isString, isUndefined } from "@spcsn/taro-shared";
12
+ import { EMPTY_OBJ, Shortcuts, ensure, getComponentsAlias, hooks, internalComponents, isArray, isFunction, isString, isUndefined } from "@spcsn/taro-shared";
13
13
  //#region src/dsl/common.ts
14
14
  const instances = /* @__PURE__ */ new Map();
15
15
  const pageId = incrementId();
@@ -40,8 +40,7 @@ function stringify(obj) {
40
40
  }
41
41
  function getPath(id, options) {
42
42
  const idx = id.indexOf("?");
43
- if (process.env.TARO_PLATFORM === "web") return `${idx > -1 ? id.substring(0, idx) : id}${stringify((options === null || options === void 0 ? void 0 : options.stamp) ? { stamp: options.stamp } : {})}`;
44
- else return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options)}`;
43
+ return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options)}`;
45
44
  }
46
45
  function getOnReadyEventKey(path) {
47
46
  return path + "." + ON_READY;
@@ -59,7 +58,7 @@ function createPageConfig(component, pageName, data, pageConfig) {
59
58
  let unmounting = false;
60
59
  let prepareMountList = [];
61
60
  function setCurrentRouter(page) {
62
- const router = process.env.TARO_PLATFORM === "web" ? page.$taroPath : page.route || page.__route__ || page.$taroPath;
61
+ const router = page.route || page.__route__ || page.$taroPath;
63
62
  Current.router = {
64
63
  params: page.$taroParams,
65
64
  path: addLeadingSlash(router),
@@ -82,33 +81,28 @@ function createPageConfig(component, pageName, data, pageConfig) {
82
81
  this.config = pageConfig || {};
83
82
  const uniqueOptions = Object.assign({}, options, { $taroTimestamp: Date.now() });
84
83
  const $taroPath = this.$taroPath = getPath(id, uniqueOptions);
85
- if (process.env.TARO_PLATFORM === "web") config.path = $taroPath;
86
84
  if (this.$taroParams == null) this.$taroParams = uniqueOptions;
87
85
  setCurrentRouter(this);
88
- if (process.env.TARO_PLATFORM !== "web") taroWindowProvider.trigger("0", $taroPath);
86
+ taroWindowProvider.trigger("0", $taroPath);
89
87
  const mount = () => {
90
- Current.app.mount(component, $taroPath, () => {
91
- if (process.env.TARO_ENV === "tt" && isEnableTTDom()) pageElement = env.document.getPageDocumentById(this.__webviewId__);
92
- else pageElement = env.document.getElementById($taroPath);
88
+ whenAppReady((app) => app.mount(component, $taroPath, () => {
89
+ pageElement = env.document.getElementById($taroPath);
93
90
  ensure(pageElement !== null, "没有找到页面实例。");
94
91
  safeExecute($taroPath, ON_LOAD, this.$taroParams);
95
92
  loadResolver();
96
- if (process.env.TARO_PLATFORM !== "web") {
97
- pageElement.ctx = this;
98
- if (process.env.TARO_ENV === "tt" && isEnableTTDom()) pageElement.sync();
99
- else pageElement.performUpdate(true, cb);
100
- } else isFunction(cb) && cb();
101
- });
93
+ pageElement.ctx = this;
94
+ pageElement.performUpdate(true, cb);
95
+ }));
102
96
  };
103
97
  if (unmounting) prepareMountList.push(mount);
104
98
  else mount();
105
99
  },
106
100
  [ONUNLOAD]() {
107
101
  const $taroPath = this.$taroPath;
108
- if (process.env.TARO_PLATFORM !== "web") taroWindowProvider.trigger("3", $taroPath);
102
+ taroWindowProvider.trigger("3", $taroPath);
109
103
  safeExecute($taroPath, ONUNLOAD);
110
104
  unmounting = true;
111
- Current.app.unmount($taroPath, () => {
105
+ whenAppReady((app) => app.unmount($taroPath, () => {
112
106
  unmounting = false;
113
107
  instances.delete($taroPath);
114
108
  if (pageElement) {
@@ -119,26 +113,26 @@ function createPageConfig(component, pageName, data, pageConfig) {
119
113
  prepareMountList.forEach((fn) => fn());
120
114
  prepareMountList = [];
121
115
  }
122
- });
116
+ }));
123
117
  },
124
118
  [ONREADY]() {
125
119
  hasLoaded.then(() => {
126
120
  safeExecute(this.$taroPath, ON_READY);
127
121
  _raf(() => eventCenter.trigger(getOnReadyEventKey(id)));
128
- this.onReady.called = true;
122
+ this[ONREADY].called = true;
129
123
  });
130
124
  },
131
125
  [ONSHOW](options = {}) {
132
126
  hasLoaded.then(() => {
133
127
  Current.page = this;
134
128
  setCurrentRouter(this);
135
- if (process.env.TARO_PLATFORM !== "web") taroWindowProvider.trigger("2", this.$taroPath);
129
+ taroWindowProvider.trigger("2", this.$taroPath);
136
130
  safeExecute(this.$taroPath, ON_SHOW, options);
137
131
  _raf(() => eventCenter.trigger(getOnShowEventKey(id)));
138
132
  });
139
133
  },
140
134
  [ONHIDE]() {
141
- if (process.env.TARO_PLATFORM !== "web") taroWindowProvider.trigger("1", this.$taroPath);
135
+ taroWindowProvider.trigger("1", this.$taroPath);
142
136
  if (Current.page === this) {
143
137
  Current.page = null;
144
138
  Current.router = null;
@@ -147,10 +141,6 @@ function createPageConfig(component, pageName, data, pageConfig) {
147
141
  eventCenter.trigger(getOnHideEventKey(id));
148
142
  }
149
143
  };
150
- if (process.env.TARO_PLATFORM === "web") config.getOpenerEventChannel = () => {
151
- return EventChannel.pageChannel;
152
- };
153
- const isSWAN = process.env.TARO_ENV === "swan";
154
144
  LIFECYCLES.forEach((lifecycle) => {
155
145
  let isDefer = false;
156
146
  let isEvent = false;
@@ -162,14 +152,9 @@ function createPageConfig(component, pageName, data, pageConfig) {
162
152
  isEvent = true;
163
153
  return "";
164
154
  });
165
- if (isEvent && process.env.TARO_ENV === "alipay") {
166
- if (!config.events) config.events = {};
167
- config.events[lifecycle] = function() {
168
- return safeExecute(this.$taroPath, lifecycle, ...arguments);
169
- };
170
- } else config[lifecycle] = function() {
171
- const exec = () => safeExecute(this.$taroPath, lifecycle, ...arguments);
172
- if (isSWAN) return exec();
155
+ if (isEvent) return;
156
+ config[lifecycle] = function(...args) {
157
+ const exec = () => safeExecute(this.$taroPath, lifecycle, ...args);
173
158
  if (isDefer) hasLoaded.then(exec);
174
159
  else return exec();
175
160
  };
@@ -202,23 +187,21 @@ function createComponentConfig(component, componentName, data) {
202
187
  perf.start(PAGE_INIT);
203
188
  this.pageIdCache = ((_this$getPageId = this.getPageId) === null || _this$getPageId === void 0 ? void 0 : _this$getPageId.call(this)) || pageId();
204
189
  const path = getPath(id, { id: this.pageIdCache });
205
- Current.app.mount(component, path, () => {
190
+ whenAppReady((app) => app.mount(component, path, () => {
206
191
  componentElement = env.document.getElementById(path);
207
192
  ensure(componentElement !== null, "没有找到组件实例。");
208
193
  this.$taroInstances = instances.get(path);
209
194
  safeExecute(path, ON_LOAD);
210
- if (process.env.TARO_PLATFORM !== "web") {
211
- componentElement.ctx = this;
212
- if (process.env.TARO_ENV !== "tt" || !isEnableTTDom()) componentElement.performUpdate(true);
213
- }
214
- });
195
+ componentElement.ctx = this;
196
+ componentElement.performUpdate(true);
197
+ }));
215
198
  },
216
199
  [DETACHED]() {
217
200
  const path = getPath(id, { id: this.pageIdCache });
218
- Current.app.unmount(path, () => {
201
+ whenAppReady((app) => app.unmount(path, () => {
219
202
  instances.delete(path);
220
203
  if (componentElement) componentElement.ctx = null;
221
- });
204
+ }));
222
205
  },
223
206
  methods: { eh: eventHandler }
224
207
  };
@@ -239,7 +222,6 @@ function createRecursiveComponentConfig(componentName) {
239
222
  const lifeCycles = isCustomWrapper ? {
240
223
  [ATTACHED]() {
241
224
  var _this$data$i, _this$props$i;
242
- if (process.env.TARO_ENV === "tt" && isEnableTTDom()) return;
243
225
  const componentId = ((_this$data$i = this.data.i) === null || _this$data$i === void 0 ? void 0 : _this$data$i.sid) || ((_this$props$i = this.props.i) === null || _this$props$i === void 0 ? void 0 : _this$props$i.sid);
244
226
  if (isString(componentId)) {
245
227
  customWrapperCache.set(componentId, this);
@@ -249,7 +231,6 @@ function createRecursiveComponentConfig(componentName) {
249
231
  },
250
232
  [DETACHED]() {
251
233
  var _this$data$i2, _this$props$i2;
252
- if (process.env.TARO_ENV === "tt" && isEnableTTDom()) return;
253
234
  const componentId = ((_this$data$i2 = this.data.i) === null || _this$data$i2 === void 0 ? void 0 : _this$data$i2.sid) || ((_this$props$i2 = this.props.i) === null || _this$props$i2 === void 0 ? void 0 : _this$props$i2.sid);
254
235
  if (isString(componentId)) {
255
236
  customWrapperCache.delete(componentId);
@@ -258,8 +239,6 @@ function createRecursiveComponentConfig(componentName) {
258
239
  }
259
240
  }
260
241
  } : EMPTY_OBJ;
261
- const extraOptions = {};
262
- if (process.env.TARO_ENV === "jd") extraOptions.addGlobalClass = true;
263
242
  return hooks.call("modifyRecursiveComponentConfig", _objectSpread2({
264
243
  properties: {
265
244
  i: {
@@ -271,7 +250,7 @@ function createRecursiveComponentConfig(componentName) {
271
250
  value: ""
272
251
  }
273
252
  },
274
- options: _objectSpread2(_objectSpread2({}, extraOptions), {}, { virtualHost: !isCustomWrapper }),
253
+ options: { virtualHost: !isCustomWrapper },
275
254
  methods: { eh: eventHandler }
276
255
  }, lifeCycles), { isCustomWrapper });
277
256
  }
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":[],"sources":["../../src/dsl/common.ts"],"sourcesContent":["/* eslint-disable dot-notation */\nimport {\n EMPTY_OBJ,\n ensure,\n EventChannel,\n getComponentsAlias,\n hooks,\n internalComponents,\n isArray,\n isEnableTTDom,\n isFunction,\n isString,\n isUndefined,\n Shortcuts,\n} from '@spcsn/taro-shared';\n\nimport { raf } from '../bom/raf';\nimport { taroWindowProvider } from '../bom/window';\nimport {\n BEHAVIORS,\n CONTEXT_ACTIONS,\n CUSTOM_WRAPPER,\n EXTERNAL_CLASSES,\n ON_HIDE,\n ON_LOAD,\n ON_READY,\n ON_SHOW,\n OPTIONS,\n PAGE_INIT,\n VIEW,\n} from '../constants';\nimport { Current } from '../current';\nimport { eventHandler } from '../dom/event';\nimport { eventCenter } from '../emitter/emitter';\nimport env from '../env';\nimport { perf } from '../perf';\nimport { customWrapperCache, incrementId } from '../utils';\nimport { addLeadingSlash } from '../utils/router';\n\nimport type { TaroRootElement } from '../dom/root';\nimport type { MpInstance, PageConfig, TFunc } from '../interface';\nimport type { Instance, PageInstance, PageProps } from './instance';\n\nconst instances = new Map<string, Instance>();\nconst pageId = incrementId();\n\nexport function injectPageInstance(inst: Instance<PageProps>, id: string) {\n hooks.call('mergePageInstance', instances.get(id), inst);\n instances.set(id, inst);\n}\n\nexport function getPageInstance(id: string): Instance | undefined {\n return instances.get(id);\n}\n\nexport function removePageInstance(id: string) {\n instances.delete(id);\n}\n\nexport function safeExecute(path: string, lifecycle: string, ...args: unknown[]) {\n const instance = instances.get(path);\n\n if (instance == null) {\n return;\n }\n\n const func = hooks.call('getLifecycle', instance, lifecycle as keyof PageInstance);\n\n if (isArray(func)) {\n const res = func.map((fn) => fn.apply(instance, args));\n return res[0];\n }\n\n if (!isFunction(func)) {\n return;\n }\n\n return func.apply(instance, args);\n}\n\nexport function stringify(obj?: Record<string, unknown>) {\n if (obj == null) {\n return '';\n }\n const path = Object.keys(obj)\n .map((key) => {\n return key + '=' + obj[key];\n })\n .join('&');\n return path === '' ? path : '?' + path;\n}\n\nexport function getPath(id: string, options?: Record<string, unknown>): string {\n const idx = id.indexOf('?');\n if (process.env.TARO_PLATFORM === 'web') {\n return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options?.stamp ? { stamp: options.stamp } : {})}`;\n } else {\n return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options)}`;\n }\n}\n\nexport function getOnReadyEventKey(path: string) {\n return path + '.' + ON_READY;\n}\n\nexport function getOnShowEventKey(path: string) {\n return path + '.' + ON_SHOW;\n}\n\nexport function getOnHideEventKey(path: string) {\n return path + '.' + ON_HIDE;\n}\n\nexport function createPageConfig(\n component: any,\n pageName?: string,\n data?: Record<string, unknown>,\n pageConfig?: PageConfig,\n) {\n // 小程序 Page 构造器是一个傲娇小公主,不能把复杂的对象挂载到参数上\n const id = pageName ?? `taro_page_${pageId()}`;\n const [ONLOAD, ONUNLOAD, ONREADY, ONSHOW, ONHIDE, LIFECYCLES, SIDE_EFFECT_LIFECYCLES] =\n hooks.call('getMiniLifecycleImpl')!.page;\n let pageElement: TaroRootElement | null = null;\n let unmounting = false;\n let prepareMountList: (() => void)[] = [];\n\n function setCurrentRouter(page: MpInstance) {\n const router =\n process.env.TARO_PLATFORM === 'web' ? page.$taroPath : page.route || page.__route__ || page.$taroPath;\n Current.router = {\n params: page.$taroParams!,\n path: addLeadingSlash(router),\n $taroPath: page.$taroPath,\n onReady: getOnReadyEventKey(id),\n onShow: getOnShowEventKey(id),\n onHide: getOnHideEventKey(id),\n };\n if (!isUndefined(page.exitState)) {\n Current.router.exitState = page.exitState;\n }\n }\n let loadResolver: (...args: unknown[]) => void;\n let hasLoaded: Promise<void>;\n const config: PageInstance = {\n [ONLOAD](this: MpInstance, options: Readonly<Record<string, unknown>> = {}, cb?: TFunc) {\n hasLoaded = new Promise((resolve) => {\n loadResolver = resolve;\n });\n\n perf.start(PAGE_INIT);\n\n Current.page = this as any;\n this.config = pageConfig || {};\n\n // this.$taroPath 是页面唯一标识\n const uniqueOptions = Object.assign({}, options, { $taroTimestamp: Date.now() });\n const $taroPath = (this.$taroPath = getPath(id, uniqueOptions));\n if (process.env.TARO_PLATFORM === 'web') {\n config.path = $taroPath;\n }\n // this.$taroParams 作为暴露给开发者的页面参数对象,可以被随意修改\n if (this.$taroParams == null) {\n this.$taroParams = uniqueOptions;\n }\n\n setCurrentRouter(this);\n\n // 初始化当前页面的上下文信息\n if (process.env.TARO_PLATFORM !== 'web') {\n taroWindowProvider.trigger(CONTEXT_ACTIONS.INIT, $taroPath);\n }\n\n const mount = () => {\n Current.app!.mount!(component, $taroPath, () => {\n if (process.env.TARO_ENV === 'tt' && isEnableTTDom()) {\n pageElement = (env.document as any).getPageDocumentById(this.__webviewId__);\n } else {\n pageElement = env.document.getElementById<TaroRootElement>($taroPath);\n }\n\n ensure(pageElement !== null, '没有找到页面实例。');\n safeExecute($taroPath, ON_LOAD, this.$taroParams);\n loadResolver();\n if (process.env.TARO_PLATFORM !== 'web') {\n pageElement.ctx = this;\n if (process.env.TARO_ENV === 'tt' && isEnableTTDom()) {\n (pageElement as any).sync();\n } else {\n pageElement.performUpdate(true, cb);\n }\n } else {\n isFunction(cb) && cb();\n }\n });\n };\n if (unmounting) {\n prepareMountList.push(mount);\n } else {\n mount();\n }\n },\n [ONUNLOAD]() {\n const $taroPath = this.$taroPath;\n // 销毁当前页面的上下文信息\n if (process.env.TARO_PLATFORM !== 'web') {\n taroWindowProvider.trigger(CONTEXT_ACTIONS.DESTROY, $taroPath);\n }\n // 触发onUnload生命周期\n safeExecute($taroPath, ONUNLOAD);\n unmounting = true;\n Current.app!.unmount!($taroPath, () => {\n unmounting = false;\n instances.delete($taroPath);\n if (pageElement) {\n pageElement.ctx = null;\n pageElement = null;\n }\n if (prepareMountList.length) {\n prepareMountList.forEach((fn) => fn());\n prepareMountList = [];\n }\n });\n },\n [ONREADY]() {\n hasLoaded.then(() => {\n // 触发生命周期\n safeExecute(this.$taroPath, ON_READY);\n // 通过事件触发子组件的生命周期\n raf(() => eventCenter.trigger(getOnReadyEventKey(id)));\n this.onReady.called = true;\n });\n },\n [ONSHOW](options = {}) {\n hasLoaded.then(() => {\n // 设置 Current 的 page 和 router\n Current.page = this as any;\n setCurrentRouter(this);\n // 恢复上下文信息\n if (process.env.TARO_PLATFORM !== 'web') {\n taroWindowProvider.trigger(CONTEXT_ACTIONS.RECOVER, this.$taroPath);\n }\n // 触发生命周期\n safeExecute(this.$taroPath, ON_SHOW, options);\n // 通过事件触发子组件的生命周期\n raf(() => eventCenter.trigger(getOnShowEventKey(id)));\n });\n },\n [ONHIDE]() {\n // 缓存当前页面上下文信息\n if (process.env.TARO_PLATFORM !== 'web') {\n taroWindowProvider.trigger(CONTEXT_ACTIONS.RESTORE, this.$taroPath);\n }\n // 设置 Current 的 page 和 router\n if (Current.page === this) {\n Current.page = null;\n Current.router = null;\n }\n // 触发生命周期\n safeExecute(this.$taroPath, ON_HIDE);\n // 通过事件触发子组件的生命周期\n eventCenter.trigger(getOnHideEventKey(id));\n },\n };\n\n if (process.env.TARO_PLATFORM === 'web') {\n config.getOpenerEventChannel = () => {\n return EventChannel.pageChannel;\n };\n }\n\n const isSWAN = process.env.TARO_ENV === 'swan'; // 百度小程序\n LIFECYCLES.forEach((lifecycle) => {\n let isDefer = false;\n let isEvent = false;\n lifecycle = lifecycle.replace(/^defer:/, () => {\n isDefer = true;\n return '';\n });\n lifecycle = lifecycle.replace(/^events:/, () => {\n isEvent = true;\n return '';\n });\n\n if (isEvent && process.env.TARO_ENV === 'alipay') {\n // 初始化 config.events 对象\n if (!config.events) config.events = {};\n config.events[lifecycle] = function () {\n return safeExecute(this.$taroPath, lifecycle, ...arguments);\n };\n } else {\n config[lifecycle] = function () {\n const exec = () => safeExecute(this.$taroPath, lifecycle, ...arguments);\n if (isSWAN) {\n return exec();\n }\n\n if (isDefer) {\n hasLoaded.then(exec);\n } else {\n return exec();\n }\n };\n }\n });\n\n // onShareAppMessage 和 onShareTimeline 一样,会影响小程序右上方按钮的选项,因此不能默认注册。\n SIDE_EFFECT_LIFECYCLES.forEach((lifecycle) => {\n if (\n component[lifecycle] ||\n component.prototype?.[lifecycle] ||\n component[lifecycle.replace(/^on/, 'enable')] ||\n pageConfig?.[lifecycle.replace(/^on/, 'enable')]\n ) {\n config[lifecycle] = function (...args) {\n const target = args[0]?.target;\n if (target?.id) {\n const id = target.id;\n const element = env.document.getElementById(id);\n if (element) {\n target.dataset = element.dataset;\n }\n }\n return safeExecute(this.$taroPath, lifecycle, ...args);\n };\n }\n });\n\n config.eh = eventHandler;\n\n if (!isUndefined(data)) {\n config.data = data;\n }\n\n hooks.call('modifyPageObject', config);\n\n return config;\n}\n\nexport function createComponentConfig(\n component: React.ComponentClass,\n componentName?: string,\n data?: Record<string, unknown>,\n) {\n const id = componentName ?? `taro_component_${pageId()}`;\n let componentElement: TaroRootElement | null = null;\n const [ATTACHED, DETACHED] = hooks.call('getMiniLifecycleImpl')!.component;\n\n const config: any = {\n [ATTACHED]() {\n perf.start(PAGE_INIT);\n this.pageIdCache = this.getPageId?.() || pageId();\n\n const path = getPath(id, { id: this.pageIdCache });\n\n Current.app!.mount!(component, path, () => {\n componentElement = env.document.getElementById<TaroRootElement>(path);\n ensure(componentElement !== null, '没有找到组件实例。');\n this.$taroInstances = instances.get(path);\n safeExecute(path, ON_LOAD);\n if (process.env.TARO_PLATFORM !== 'web') {\n componentElement.ctx = this;\n if (process.env.TARO_ENV !== 'tt' || !isEnableTTDom()) {\n componentElement.performUpdate(true);\n }\n }\n });\n },\n [DETACHED]() {\n const path = getPath(id, { id: this.pageIdCache });\n\n Current.app!.unmount!(path, () => {\n instances.delete(path);\n if (componentElement) {\n componentElement.ctx = null;\n }\n });\n },\n methods: {\n eh: eventHandler,\n },\n };\n\n if (!isUndefined(data)) {\n config.data = data;\n }\n\n [OPTIONS, EXTERNAL_CLASSES, BEHAVIORS].forEach((key) => {\n config[key] = component[key] ?? EMPTY_OBJ;\n });\n\n return config;\n}\n\nexport function createRecursiveComponentConfig(componentName?: string) {\n const isCustomWrapper = componentName === CUSTOM_WRAPPER;\n const [ATTACHED, DETACHED] = hooks.call('getMiniLifecycleImpl')!.component;\n\n const lifeCycles = isCustomWrapper\n ? {\n [ATTACHED]() {\n if (process.env.TARO_ENV === 'tt' && isEnableTTDom()) {\n return;\n }\n\n const componentId = this.data.i?.sid || this.props.i?.sid;\n if (isString(componentId)) {\n customWrapperCache.set(componentId, this);\n const el = env.document.getElementById(componentId);\n if (el) {\n el.ctx = this;\n }\n }\n },\n [DETACHED]() {\n if (process.env.TARO_ENV === 'tt' && isEnableTTDom()) {\n return;\n }\n\n const componentId = this.data.i?.sid || this.props.i?.sid;\n if (isString(componentId)) {\n customWrapperCache.delete(componentId);\n const el = env.document.getElementById(componentId);\n if (el) {\n el.ctx = null;\n }\n }\n },\n }\n : EMPTY_OBJ;\n\n // 不同平台的个性化配置\n const extraOptions: { [key: string]: any } = {};\n if (process.env.TARO_ENV === 'jd') {\n extraOptions.addGlobalClass = true;\n }\n\n return hooks.call(\n 'modifyRecursiveComponentConfig',\n {\n properties: {\n i: {\n type: Object,\n value: {\n [Shortcuts.NodeName]: getComponentsAlias(internalComponents)[VIEW]._num,\n },\n },\n l: {\n type: String,\n value: '',\n },\n },\n options: {\n ...extraOptions,\n virtualHost: !isCustomWrapper,\n },\n methods: {\n eh: eventHandler,\n },\n ...lifeCycles,\n },\n { isCustomWrapper },\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"common.js","names":[],"sources":["../../src/dsl/common.ts"],"sourcesContent":["import {\n EMPTY_OBJ,\n ensure,\n getComponentsAlias,\n hooks,\n internalComponents,\n isArray,\n isFunction,\n isString,\n isUndefined,\n Shortcuts,\n} from '@spcsn/taro-shared';\n\nimport { raf } from '../bom/raf';\nimport { taroWindowProvider } from '../bom/window';\nimport {\n BEHAVIORS,\n CONTEXT_ACTIONS,\n CUSTOM_WRAPPER,\n EXTERNAL_CLASSES,\n ON_HIDE,\n ON_LOAD,\n ON_READY,\n ON_SHOW,\n OPTIONS,\n PAGE_INIT,\n VIEW,\n} from '../constants';\nimport { Current, whenAppReady } from '../current';\nimport { eventHandler } from '../dom/event';\nimport { eventCenter } from '../emitter/emitter';\nimport env from '../env';\nimport { perf } from '../perf';\nimport { customWrapperCache, incrementId } from '../utils';\nimport { addLeadingSlash } from '../utils/router';\n\nimport type { TaroRootElement } from '../dom/root';\nimport type { MpInstance, PageConfig, TFunc } from '../interface';\nimport type { Instance, PageInstance, PageProps } from './instance';\n\nconst instances = new Map<string, Instance>();\nconst pageId = incrementId();\n\nexport function injectPageInstance(inst: Instance<PageProps>, id: string) {\n hooks.call('mergePageInstance', instances.get(id), inst);\n instances.set(id, inst);\n}\n\nexport function getPageInstance(id: string): Instance | undefined {\n return instances.get(id);\n}\n\nexport function removePageInstance(id: string) {\n instances.delete(id);\n}\n\nexport function safeExecute(path: string, lifecycle: string, ...args: unknown[]) {\n const instance = instances.get(path);\n\n if (instance == null) {\n return;\n }\n\n const func = hooks.call('getLifecycle', instance, lifecycle as keyof PageInstance);\n\n if (isArray(func)) {\n const res = func.map((fn) => fn.apply(instance, args));\n return res[0];\n }\n\n if (!isFunction(func)) {\n return;\n }\n\n return func.apply(instance, args);\n}\n\nexport function stringify(obj?: Record<string, unknown>) {\n if (obj == null) {\n return '';\n }\n const path = Object.keys(obj)\n .map((key) => {\n return key + '=' + obj[key];\n })\n .join('&');\n return path === '' ? path : '?' + path;\n}\n\nexport function getPath(id: string, options?: Record<string, unknown>): string {\n const idx = id.indexOf('?');\n return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options)}`;\n}\n\nexport function getOnReadyEventKey(path: string) {\n return path + '.' + ON_READY;\n}\n\nexport function getOnShowEventKey(path: string) {\n return path + '.' + ON_SHOW;\n}\n\nexport function getOnHideEventKey(path: string) {\n return path + '.' + ON_HIDE;\n}\n\nexport function createPageConfig(\n component: any,\n pageName?: string,\n data?: Record<string, unknown>,\n pageConfig?: PageConfig,\n) {\n // 小程序 Page 构造器是一个傲娇小公主,不能把复杂的对象挂载到参数上\n const id = pageName ?? `taro_page_${pageId()}`;\n const [ONLOAD, ONUNLOAD, ONREADY, ONSHOW, ONHIDE, LIFECYCLES, SIDE_EFFECT_LIFECYCLES] =\n hooks.call('getMiniLifecycleImpl')!.page;\n let pageElement: TaroRootElement | null = null;\n let unmounting = false;\n let prepareMountList: (() => void)[] = [];\n\n function setCurrentRouter(page: MpInstance) {\n const router = page.route || page.__route__ || page.$taroPath;\n Current.router = {\n params: page.$taroParams!,\n path: addLeadingSlash(router),\n $taroPath: page.$taroPath,\n onReady: getOnReadyEventKey(id),\n onShow: getOnShowEventKey(id),\n onHide: getOnHideEventKey(id),\n };\n if (!isUndefined(page.exitState)) {\n Current.router.exitState = page.exitState;\n }\n }\n let loadResolver: () => void;\n let hasLoaded: Promise<void>;\n const config: PageInstance = {\n [ONLOAD](this: MpInstance, options: Readonly<Record<string, unknown>> = {}, cb?: TFunc) {\n hasLoaded = new Promise((resolve) => {\n loadResolver = resolve;\n });\n\n perf.start(PAGE_INIT);\n\n Current.page = this as any;\n this.config = pageConfig || {};\n\n // this.$taroPath 是页面唯一标识\n const uniqueOptions = Object.assign({}, options, { $taroTimestamp: Date.now() });\n const $taroPath = (this.$taroPath = getPath(id, uniqueOptions));\n // this.$taroParams 作为暴露给开发者的页面参数对象,可以被随意修改\n if (this.$taroParams == null) {\n this.$taroParams = uniqueOptions;\n }\n\n setCurrentRouter(this);\n\n // 初始化当前页面的上下文信息\n taroWindowProvider.trigger(CONTEXT_ACTIONS.INIT, $taroPath);\n\n const mount = () => {\n whenAppReady((app) =>\n app.mount!(component, $taroPath, () => {\n pageElement = env.document.getElementById<TaroRootElement>($taroPath);\n\n ensure(pageElement !== null, '没有找到页面实例。');\n safeExecute($taroPath, ON_LOAD, this.$taroParams);\n loadResolver();\n pageElement.ctx = this;\n pageElement.performUpdate(true, cb);\n }),\n );\n };\n if (unmounting) {\n prepareMountList.push(mount);\n } else {\n mount();\n }\n },\n [ONUNLOAD](this: MpInstance) {\n const $taroPath = this.$taroPath;\n // 销毁当前页面的上下文信息\n taroWindowProvider.trigger(CONTEXT_ACTIONS.DESTROY, $taroPath);\n // 触发onUnload生命周期\n safeExecute($taroPath, ONUNLOAD);\n unmounting = true;\n whenAppReady((app) =>\n app.unmount!($taroPath, () => {\n unmounting = false;\n instances.delete($taroPath);\n if (pageElement) {\n pageElement.ctx = null;\n pageElement = null;\n }\n if (prepareMountList.length) {\n prepareMountList.forEach((fn) => fn());\n prepareMountList = [];\n }\n }),\n );\n },\n [ONREADY](this: MpInstance) {\n hasLoaded.then(() => {\n // 触发生命周期\n safeExecute(this.$taroPath, ON_READY);\n // 通过事件触发子组件的生命周期\n raf(() => eventCenter.trigger(getOnReadyEventKey(id)));\n (this[ONREADY] as TFunc & { called?: boolean }).called = true;\n });\n },\n [ONSHOW](this: MpInstance, options = {}) {\n hasLoaded.then(() => {\n // 设置 Current 的 page 和 router\n Current.page = this as any;\n setCurrentRouter(this);\n // 恢复上下文信息\n taroWindowProvider.trigger(CONTEXT_ACTIONS.RECOVER, this.$taroPath);\n // 触发生命周期\n safeExecute(this.$taroPath, ON_SHOW, options);\n // 通过事件触发子组件的生命周期\n raf(() => eventCenter.trigger(getOnShowEventKey(id)));\n });\n },\n [ONHIDE](this: MpInstance) {\n // 缓存当前页面上下文信息\n taroWindowProvider.trigger(CONTEXT_ACTIONS.RESTORE, this.$taroPath);\n // 设置 Current 的 page 和 router\n if (Current.page === this) {\n Current.page = null;\n Current.router = null;\n }\n // 触发生命周期\n safeExecute(this.$taroPath, ON_HIDE);\n // 通过事件触发子组件的生命周期\n eventCenter.trigger(getOnHideEventKey(id));\n },\n };\n LIFECYCLES.forEach((lifecycle) => {\n let isDefer = false;\n let isEvent = false;\n lifecycle = lifecycle.replace(/^defer:/, () => {\n isDefer = true;\n return '';\n });\n lifecycle = lifecycle.replace(/^events:/, () => {\n isEvent = true;\n return '';\n });\n\n if (isEvent) {\n return;\n }\n\n config[lifecycle] = function (this: MpInstance, ...args) {\n const exec = () => safeExecute(this.$taroPath, lifecycle, ...args);\n if (isDefer) {\n hasLoaded.then(exec);\n } else {\n return exec();\n }\n };\n });\n\n // onShareAppMessage 和 onShareTimeline 一样,会影响小程序右上方按钮的选项,因此不能默认注册。\n SIDE_EFFECT_LIFECYCLES.forEach((lifecycle) => {\n if (\n component[lifecycle] ||\n component.prototype?.[lifecycle] ||\n component[lifecycle.replace(/^on/, 'enable')] ||\n pageConfig?.[lifecycle.replace(/^on/, 'enable')]\n ) {\n config[lifecycle] = function (this: MpInstance, ...args) {\n const target = args[0]?.target;\n if (target?.id) {\n const id = target.id;\n const element = env.document.getElementById(id);\n if (element) {\n target.dataset = element.dataset;\n }\n }\n return safeExecute(this.$taroPath, lifecycle, ...args);\n };\n }\n });\n\n config.eh = eventHandler;\n\n if (!isUndefined(data)) {\n config.data = data;\n }\n\n hooks.call('modifyPageObject', config);\n\n return config;\n}\n\nexport function createComponentConfig(\n component: React.ComponentClass,\n componentName?: string,\n data?: Record<string, unknown>,\n) {\n const id = componentName ?? `taro_component_${pageId()}`;\n let componentElement: TaroRootElement | null = null;\n const [ATTACHED, DETACHED] = hooks.call('getMiniLifecycleImpl')!.component;\n\n const config: any = {\n [ATTACHED]() {\n perf.start(PAGE_INIT);\n this.pageIdCache = this.getPageId?.() || pageId();\n\n const path = getPath(id, { id: this.pageIdCache });\n\n whenAppReady((app) =>\n app.mount!(component, path, () => {\n componentElement = env.document.getElementById<TaroRootElement>(path);\n ensure(componentElement !== null, '没有找到组件实例。');\n this.$taroInstances = instances.get(path);\n safeExecute(path, ON_LOAD);\n componentElement.ctx = this;\n componentElement.performUpdate(true);\n }),\n );\n },\n [DETACHED]() {\n const path = getPath(id, { id: this.pageIdCache });\n\n whenAppReady((app) =>\n app.unmount!(path, () => {\n instances.delete(path);\n if (componentElement) {\n componentElement.ctx = null;\n }\n }),\n );\n },\n methods: {\n eh: eventHandler,\n },\n };\n\n if (!isUndefined(data)) {\n config.data = data;\n }\n\n [OPTIONS, EXTERNAL_CLASSES, BEHAVIORS].forEach((key) => {\n config[key] = component[key] ?? EMPTY_OBJ;\n });\n\n return config;\n}\n\nexport function createRecursiveComponentConfig(componentName?: string) {\n const isCustomWrapper = componentName === CUSTOM_WRAPPER;\n const [ATTACHED, DETACHED] = hooks.call('getMiniLifecycleImpl')!.component;\n\n const lifeCycles = isCustomWrapper\n ? {\n [ATTACHED](this: any) {\n const componentId = this.data.i?.sid || this.props.i?.sid;\n if (isString(componentId)) {\n customWrapperCache.set(componentId, this);\n const el = env.document.getElementById(componentId);\n if (el) {\n el.ctx = this;\n }\n }\n },\n [DETACHED](this: any) {\n const componentId = this.data.i?.sid || this.props.i?.sid;\n if (isString(componentId)) {\n customWrapperCache.delete(componentId);\n const el = env.document.getElementById(componentId);\n if (el) {\n el.ctx = null;\n }\n }\n },\n }\n : EMPTY_OBJ;\n\n return hooks.call(\n 'modifyRecursiveComponentConfig',\n {\n properties: {\n i: {\n type: Object,\n value: {\n [Shortcuts.NodeName]: getComponentsAlias(internalComponents)[VIEW]._num,\n },\n },\n l: {\n type: String,\n value: '',\n },\n },\n options: {\n virtualHost: !isCustomWrapper,\n },\n methods: {\n eh: eventHandler,\n },\n ...lifeCycles,\n },\n { isCustomWrapper },\n );\n}\n"],"mappings":"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"}
package/dist/env.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { EMPTY_OBJ } from "@spcsn/taro-shared";
2
2
  //#region src/env.ts
3
3
  const env = {
4
- window: process.env.TARO_PLATFORM === "web" ? window : EMPTY_OBJ,
5
- document: process.env.TARO_PLATFORM === "web" ? document : EMPTY_OBJ
4
+ window: EMPTY_OBJ,
5
+ document: EMPTY_OBJ
6
6
  };
7
7
  //#endregion
8
8
  export { env as default };
package/dist/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","names":[],"sources":["../src/env.ts"],"sourcesContent":["import { EMPTY_OBJ } from '@spcsn/taro-shared';\n\nimport type { TaroDocument } from './dom/document';\n\ninterface Env {\n window;\n document: TaroDocument;\n}\n\nconst env: Env = {\n window: process.env.TARO_PLATFORM === 'web' ? window : EMPTY_OBJ,\n document: process.env.TARO_PLATFORM === 'web' ? document : EMPTY_OBJ,\n};\n\nexport default env;\n"],"mappings":";;AASA,MAAM,MAAW;CACf,QAAQ,QAAQ,IAAI,kBAAkB,QAAQ,SAAS;CACvD,UAAU,QAAQ,IAAI,kBAAkB,QAAQ,WAAW;AAC7D"}
1
+ {"version":3,"file":"env.js","names":[],"sources":["../src/env.ts"],"sourcesContent":["import { EMPTY_OBJ } from '@spcsn/taro-shared';\n\nimport type { TaroDocument } from './dom/document';\n\ninterface Env {\n window;\n document: TaroDocument;\n}\n\nconst env: Env = {\n window: EMPTY_OBJ,\n document: EMPTY_OBJ,\n};\n\nexport default env;\n"],"mappings":";;AASA,MAAM,MAAW;CACf,QAAQ;CACR,UAAU;AACZ"}
package/dist/hydrate.js CHANGED
@@ -39,7 +39,7 @@ function hydrate(node) {
39
39
  for (const prop in props) {
40
40
  const propInCamelCase = toCamelCase(prop);
41
41
  if (!prop.startsWith("data-") && prop !== "class" && prop !== "style" && prop !== "id" && propInCamelCase !== "catchMove" && propInCamelCase !== "compileMode") data[propInCamelCase] = props[prop];
42
- if (process.env.TARO_ENV !== "swan" && nodeName === "view" && propInCamelCase === "catchMove" && props[prop] !== false) data[Shortcuts.NodeName] = CATCH_VIEW;
42
+ if (nodeName === "view" && propInCamelCase === "catchMove" && props[prop] !== false) data[Shortcuts.NodeName] = CATCH_VIEW;
43
43
  if (propInCamelCase === "compileMode") compileModeName = props[prop];
44
44
  }
45
45
  data[Shortcuts.Childnodes] = node.childNodes.filter((node) => !isComment(node)).map(hydrate);
@@ -1 +1 @@
1
- {"version":3,"file":"hydrate.js","names":["getComponentsAlias"],"sources":["../src/hydrate.ts"],"sourcesContent":["import { hooks, Shortcuts, toCamelCase } from '@spcsn/taro-shared';\n\nimport { CATCH_VIEW, CATCHMOVE, CLASS, CLICK_VIEW, COMPILE_MODE, ID, PURE_VIEW, STYLE, VIEW } from './constants';\nimport { getComponentsAlias, isComment, isHasExtractProp, isText } from './utils';\n\nimport type { TaroElement } from './dom/element';\nimport type { TaroText } from './dom/text';\nimport type { MiniData, MiniElementData } from './interface';\n\nlet SPECIAL_NODES;\nlet componentsAlias;\n\n/**\n * React also has a fancy function's name for this: `hydrate()`.\n * You may have been heard `hydrate` as a SSR-related function,\n * actually, `hydrate` basicly do the `render()` thing, but ignore some properties,\n * it's a vnode traverser and modifier: that's exactly what Taro's doing in here.\n */\nexport function hydrate(node: TaroElement | TaroText): MiniData {\n // 初始化 componentsAlias\n componentsAlias ||= getComponentsAlias();\n\n // 初始化 SPECIAL_NODES\n SPECIAL_NODES ||= hooks.call('getSpecialNodes')!;\n\n const nodeName = node.nodeName;\n let compileModeName = null;\n\n if (isText(node)) {\n return {\n sid: node.sid,\n [Shortcuts.Text]: node.nodeValue,\n [Shortcuts.NodeName]: componentsAlias[nodeName]?._num || '8',\n };\n }\n\n const data: MiniElementData = {\n [Shortcuts.NodeName]: nodeName,\n sid: node.sid,\n };\n\n if (node.uid !== node.sid) {\n data.uid = node.uid;\n }\n\n if (SPECIAL_NODES.indexOf(nodeName) > -1) {\n if (!node.isAnyEventBinded()) {\n data[Shortcuts.NodeName] = `static-${nodeName}`;\n if (nodeName === VIEW && !isHasExtractProp(node)) {\n data[Shortcuts.NodeName] = PURE_VIEW;\n }\n }\n\n if (nodeName === VIEW && node.isOnlyClickBinded() && !isHasExtractProp(node)) {\n data[Shortcuts.NodeName] = CLICK_VIEW;\n }\n }\n\n const { props } = node;\n for (const prop in props) {\n const propInCamelCase = toCamelCase(prop);\n if (\n !prop.startsWith('data-') && // 在 node.dataset 的数据\n prop !== CLASS &&\n prop !== STYLE &&\n prop !== ID &&\n propInCamelCase !== CATCHMOVE &&\n propInCamelCase !== COMPILE_MODE\n ) {\n data[propInCamelCase] = props[prop];\n }\n if (\n process.env.TARO_ENV !== 'swan' &&\n nodeName === VIEW &&\n propInCamelCase === CATCHMOVE &&\n props[prop] !== false\n ) {\n data[Shortcuts.NodeName] = CATCH_VIEW;\n }\n if (propInCamelCase === COMPILE_MODE) {\n compileModeName = props[prop];\n }\n }\n\n // Children\n data[Shortcuts.Childnodes] = node.childNodes.filter((node) => !isComment(node)).map(hydrate);\n\n if (node.className !== '') {\n data[Shortcuts.Class] = node.className;\n }\n\n const cssText = node.cssText;\n if (cssText !== '' && nodeName !== 'swiper-item') {\n data[Shortcuts.Style] = cssText;\n }\n\n hooks.call('modifyHydrateData', data, node);\n\n const nn = data[Shortcuts.NodeName];\n const componentAlias = componentsAlias[nn];\n if (componentAlias) {\n data[Shortcuts.NodeName] = componentAlias._num;\n for (const prop in data) {\n if (prop in componentAlias) {\n data[componentAlias[prop]] = data[prop];\n delete data[prop];\n }\n }\n }\n\n if (compileModeName !== null) {\n data[Shortcuts.NodeName] = compileModeName;\n }\n\n const resData = hooks.call('transferHydrateData', data, node, componentAlias);\n\n return resData || data;\n}\n"],"mappings":";;;;AASA,IAAI;AACJ,IAAI;;;;;;;AAQJ,SAAgB,QAAQ,MAAwC;CAE9D,oBAAA,kBAAoBA,qBAAmB;CAGvC,kBAAA,gBAAkB,MAAM,KAAK,iBAAiB;CAE9C,MAAM,WAAW,KAAK;CACtB,IAAI,kBAAkB;CAEtB,IAAI,OAAO,IAAI,GAAG;;EAChB,OAAO;GACL,KAAK,KAAK;IACT,UAAU,OAAO,KAAK;IACtB,UAAU,aAAA,wBAAW,gBAAgB,eAAA,QAAA,0BAAA,KAAA,IAAA,KAAA,IAAA,sBAAW,SAAQ;EAC3D;CACF;CAEA,MAAM,OAAwB;GAC3B,UAAU,WAAW;EACtB,KAAK,KAAK;CACZ;CAEA,IAAI,KAAK,QAAQ,KAAK,KACpB,KAAK,MAAM,KAAK;CAGlB,IAAI,cAAc,QAAQ,QAAQ,IAAI,IAAI;EACxC,IAAI,CAAC,KAAK,iBAAiB,GAAG;GAC5B,KAAK,UAAU,YAAY,UAAU;GACrC,IAAI,aAAA,UAAqB,CAAC,iBAAiB,IAAI,GAC7C,KAAK,UAAU,YAAY;EAE/B;EAEA,IAAI,aAAA,UAAqB,KAAK,kBAAkB,KAAK,CAAC,iBAAiB,IAAI,GACzE,KAAK,UAAU,YAAY;CAE/B;CAEA,MAAM,EAAE,UAAU;CAClB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,kBAAkB,YAAY,IAAI;EACxC,IACE,CAAC,KAAK,WAAW,OAAO,KACxB,SAAA,WACA,SAAA,WACA,SAAA,QACA,oBAAA,eACA,oBAAA,eAEA,KAAK,mBAAmB,MAAM;EAEhC,IACE,QAAQ,IAAI,aAAa,UACzB,aAAA,UACA,oBAAA,eACA,MAAM,UAAU,OAEhB,KAAK,UAAU,YAAY;EAE7B,IAAI,oBAAA,eACF,kBAAkB,MAAM;CAE5B;CAGA,KAAK,UAAU,cAAc,KAAK,WAAW,QAAQ,SAAS,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,OAAO;CAE3F,IAAI,KAAK,cAAc,IACrB,KAAK,UAAU,SAAS,KAAK;CAG/B,MAAM,UAAU,KAAK;CACrB,IAAI,YAAY,MAAM,aAAa,eACjC,KAAK,UAAU,SAAS;CAG1B,MAAM,KAAK,qBAAqB,MAAM,IAAI;CAE1C,MAAM,KAAK,KAAK,UAAU;CAC1B,MAAM,iBAAiB,gBAAgB;CACvC,IAAI,gBAAgB;EAClB,KAAK,UAAU,YAAY,eAAe;EAC1C,KAAK,MAAM,QAAQ,MACjB,IAAI,QAAQ,gBAAgB;GAC1B,KAAK,eAAe,SAAS,KAAK;GAClC,OAAO,KAAK;EACd;CAEJ;CAEA,IAAI,oBAAoB,MACtB,KAAK,UAAU,YAAY;CAK7B,OAFgB,MAAM,KAAK,uBAAuB,MAAM,MAAM,cAEjD,KAAK;AACpB"}
1
+ {"version":3,"file":"hydrate.js","names":["getComponentsAlias"],"sources":["../src/hydrate.ts"],"sourcesContent":["import { hooks, Shortcuts, toCamelCase } from '@spcsn/taro-shared';\n\nimport { CATCH_VIEW, CATCHMOVE, CLASS, CLICK_VIEW, COMPILE_MODE, ID, PURE_VIEW, STYLE, VIEW } from './constants';\nimport { getComponentsAlias, isComment, isHasExtractProp, isText } from './utils';\n\nimport type { TaroElement } from './dom/element';\nimport type { TaroText } from './dom/text';\nimport type { MiniData, MiniElementData } from './interface';\n\nlet SPECIAL_NODES;\nlet componentsAlias;\n\n/**\n * React also has a fancy function's name for this: `hydrate()`.\n * You may have been heard `hydrate` as a SSR-related function,\n * actually, `hydrate` basicly do the `render()` thing, but ignore some properties,\n * it's a vnode traverser and modifier: that's exactly what Taro's doing in here.\n */\nexport function hydrate(node: TaroElement | TaroText): MiniData {\n // 初始化 componentsAlias\n componentsAlias ||= getComponentsAlias();\n\n // 初始化 SPECIAL_NODES\n SPECIAL_NODES ||= hooks.call('getSpecialNodes')!;\n\n const nodeName = node.nodeName;\n let compileModeName = null;\n\n if (isText(node)) {\n return {\n sid: node.sid,\n [Shortcuts.Text]: node.nodeValue,\n [Shortcuts.NodeName]: componentsAlias[nodeName]?._num || '8',\n };\n }\n\n const data: MiniElementData = {\n [Shortcuts.NodeName]: nodeName,\n sid: node.sid,\n };\n\n if (node.uid !== node.sid) {\n data.uid = node.uid;\n }\n\n if (SPECIAL_NODES.indexOf(nodeName) > -1) {\n if (!node.isAnyEventBinded()) {\n data[Shortcuts.NodeName] = `static-${nodeName}`;\n if (nodeName === VIEW && !isHasExtractProp(node)) {\n data[Shortcuts.NodeName] = PURE_VIEW;\n }\n }\n\n if (nodeName === VIEW && node.isOnlyClickBinded() && !isHasExtractProp(node)) {\n data[Shortcuts.NodeName] = CLICK_VIEW;\n }\n }\n\n const { props } = node;\n for (const prop in props) {\n const propInCamelCase = toCamelCase(prop);\n if (\n !prop.startsWith('data-') && // 在 node.dataset 的数据\n prop !== CLASS &&\n prop !== STYLE &&\n prop !== ID &&\n propInCamelCase !== CATCHMOVE &&\n propInCamelCase !== COMPILE_MODE\n ) {\n data[propInCamelCase] = props[prop];\n }\n if (nodeName === VIEW && propInCamelCase === CATCHMOVE && props[prop] !== false) {\n data[Shortcuts.NodeName] = CATCH_VIEW;\n }\n if (propInCamelCase === COMPILE_MODE) {\n compileModeName = props[prop];\n }\n }\n\n // Children\n data[Shortcuts.Childnodes] = node.childNodes.filter((node) => !isComment(node)).map(hydrate);\n\n if (node.className !== '') {\n data[Shortcuts.Class] = node.className;\n }\n\n const cssText = node.cssText;\n if (cssText !== '' && nodeName !== 'swiper-item') {\n data[Shortcuts.Style] = cssText;\n }\n\n hooks.call('modifyHydrateData', data, node);\n\n const nn = data[Shortcuts.NodeName];\n const componentAlias = componentsAlias[nn];\n if (componentAlias) {\n data[Shortcuts.NodeName] = componentAlias._num;\n for (const prop in data) {\n if (prop in componentAlias) {\n data[componentAlias[prop]] = data[prop];\n delete data[prop];\n }\n }\n }\n\n if (compileModeName !== null) {\n data[Shortcuts.NodeName] = compileModeName;\n }\n\n const resData = hooks.call('transferHydrateData', data, node, componentAlias);\n\n return resData || data;\n}\n"],"mappings":";;;;AASA,IAAI;AACJ,IAAI;;;;;;;AAQJ,SAAgB,QAAQ,MAAwC;CAE9D,oBAAA,kBAAoBA,qBAAmB;CAGvC,kBAAA,gBAAkB,MAAM,KAAK,iBAAiB;CAE9C,MAAM,WAAW,KAAK;CACtB,IAAI,kBAAkB;CAEtB,IAAI,OAAO,IAAI,GAAG;;EAChB,OAAO;GACL,KAAK,KAAK;IACT,UAAU,OAAO,KAAK;IACtB,UAAU,aAAA,wBAAW,gBAAgB,eAAA,QAAA,0BAAA,KAAA,IAAA,KAAA,IAAA,sBAAW,SAAQ;EAC3D;CACF;CAEA,MAAM,OAAwB;GAC3B,UAAU,WAAW;EACtB,KAAK,KAAK;CACZ;CAEA,IAAI,KAAK,QAAQ,KAAK,KACpB,KAAK,MAAM,KAAK;CAGlB,IAAI,cAAc,QAAQ,QAAQ,IAAI,IAAI;EACxC,IAAI,CAAC,KAAK,iBAAiB,GAAG;GAC5B,KAAK,UAAU,YAAY,UAAU;GACrC,IAAI,aAAA,UAAqB,CAAC,iBAAiB,IAAI,GAC7C,KAAK,UAAU,YAAY;EAE/B;EAEA,IAAI,aAAA,UAAqB,KAAK,kBAAkB,KAAK,CAAC,iBAAiB,IAAI,GACzE,KAAK,UAAU,YAAY;CAE/B;CAEA,MAAM,EAAE,UAAU;CAClB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,kBAAkB,YAAY,IAAI;EACxC,IACE,CAAC,KAAK,WAAW,OAAO,KACxB,SAAA,WACA,SAAA,WACA,SAAA,QACA,oBAAA,eACA,oBAAA,eAEA,KAAK,mBAAmB,MAAM;EAEhC,IAAI,aAAA,UAAqB,oBAAA,eAAiC,MAAM,UAAU,OACxE,KAAK,UAAU,YAAY;EAE7B,IAAI,oBAAA,eACF,kBAAkB,MAAM;CAE5B;CAGA,KAAK,UAAU,cAAc,KAAK,WAAW,QAAQ,SAAS,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,OAAO;CAE3F,IAAI,KAAK,cAAc,IACrB,KAAK,UAAU,SAAS,KAAK;CAG/B,MAAM,UAAU,KAAK;CACrB,IAAI,YAAY,MAAM,aAAa,eACjC,KAAK,UAAU,SAAS;CAG1B,MAAM,KAAK,qBAAqB,MAAM,IAAI;CAE1C,MAAM,KAAK,KAAK,UAAU;CAC1B,MAAM,iBAAiB,gBAAgB;CACvC,IAAI,gBAAgB;EAClB,KAAK,UAAU,YAAY,eAAe;EAC1C,KAAK,MAAM,QAAQ,MACjB,IAAI,QAAQ,gBAAgB;GAC1B,KAAK,eAAe,SAAS,KAAK;GAClC,OAAO,KAAK;EACd;CAEJ;CAEA,IAAI,oBAAoB,MACtB,KAAK,UAAU,YAAY;CAK7B,OAFgB,MAAM,KAAK,uBAAuB,MAAM,MAAM,cAEjD,KAAK;AACpB"}
@@ -2,16 +2,16 @@ import './dom-external';
2
2
  import env from './env';
3
3
  export { hooks } from '@spcsn/taro-shared';
4
4
  export { taroDocumentProvider as document } from './bom/document';
5
- export { taroGetComputedStyleProvider as getComputedStyle } from './bom/getComputedStyle';
5
+ export { taroGetComputedStyleProvider as getComputedStyle } from './bom/get-computed-style';
6
6
  export { History } from './bom/history';
7
7
  export { Location } from './bom/location';
8
8
  export { nav as navigator } from './bom/navigator';
9
9
  export { caf as cancelAnimationFrame, now, raf as requestAnimationFrame } from './bom/raf';
10
10
  export { parseUrl, TaroURLProvider as URL } from './bom/URL';
11
- export { URLSearchParams } from './bom/URLSearchParams';
11
+ export { URLSearchParams } from './bom/url-search-params';
12
12
  export { taroHistoryProvider as history, taroLocationProvider as location, taroWindowProvider as window, } from './bom/window';
13
13
  export { TaroElement } from './dom/element';
14
- export { createEvent, eventHandler, eventHandlerTTDom, TaroEvent } from './dom/event';
14
+ export { createEvent, eventHandler, TaroEvent } from './dom/event';
15
15
  export { FormElement } from './dom/form';
16
16
  export { TaroNode } from './dom/node';
17
17
  export { TaroRootElement } from './dom/root';
@@ -21,7 +21,7 @@ export { TaroText } from './dom/text';
21
21
  export { MutationObserver } from './dom-external/mutation-observer';
22
22
  export { env };
23
23
  export * from './constants';
24
- export { Current, getCurrentInstance } from './current';
24
+ export { Current, getCurrentInstance, setCurrentApp, whenAppReady } from './current';
25
25
  export { eventSource } from './dom/event-source';
26
26
  export { createComponentConfig, createPageConfig, createRecursiveComponentConfig, getOnHideEventKey, getOnReadyEventKey, getOnShowEventKey, getPageInstance, getPath, injectPageInstance, removePageInstance, safeExecute, stringify, } from './dsl/common';
27
27
  export * from './emitter/emitter';