@spcsn/taro-runtime 0.1.0 → 0.1.2
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.
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/assertClassBrand.js +7 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/checkPrivateRedeclaration.js +6 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldGet2.js +7 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldInitSpec.js +7 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldSet2.js +7 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateMethodInitSpec.js +7 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/defineProperty.js +12 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/objectSpread2.js +25 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/toPrimitive.js +14 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/toPropertyKey.js +9 -0
- package/dist/_virtual/_@oxc-project_runtime@0.130.0/helpers/typeof.js +11 -0
- package/dist/bom/URL.js +36 -27
- package/dist/bom/URL.js.map +1 -1
- package/dist/bom/URLSearchParams.js +18 -14
- package/dist/bom/URLSearchParams.js.map +1 -1
- package/dist/bom/document.js +3 -2
- package/dist/bom/document.js.map +1 -1
- package/dist/bom/history.js +52 -40
- package/dist/bom/history.js.map +1 -1
- package/dist/bom/location.js +101 -91
- package/dist/bom/location.js.map +1 -1
- package/dist/bom/window.js +1 -1
- package/dist/bom/window.js.map +1 -1
- package/dist/dom/anchor-element.js +16 -8
- package/dist/dom/anchor-element.js.map +1 -1
- package/dist/dom/class-list.js.map +1 -1
- package/dist/dom/document.js.map +1 -1
- package/dist/dom/element.js +2 -1
- package/dist/dom/element.js.map +1 -1
- package/dist/dom/event-target.js +2 -4
- package/dist/dom/event-target.js.map +1 -1
- package/dist/dom/event.js +18 -17
- package/dist/dom/event.js.map +1 -1
- package/dist/dom/form.js +2 -1
- package/dist/dom/form.js.map +1 -1
- package/dist/dom/node.js +9 -6
- package/dist/dom/node.js.map +1 -1
- package/dist/dom/root.js +2 -4
- package/dist/dom/root.js.map +1 -1
- package/dist/dom/text.js.map +1 -1
- package/dist/dom/transfer.js.map +1 -1
- package/dist/dom/tree.js +1 -1
- package/dist/dom/tree.js.map +1 -1
- package/dist/dom-external/mutation-observer/implements.js +1 -1
- package/dist/dom-external/mutation-observer/implements.js.map +1 -1
- package/dist/dsl/common.js +21 -18
- package/dist/dsl/common.js.map +1 -1
- package/dist/hydrate.js +10 -7
- package/dist/hydrate.js.map +1 -1
- package/dist/index.cjs.js +392 -260
- package/dist/index.cjs.js.map +1 -1
- package/dist/next-tick.js +6 -4
- package/dist/next-tick.js.map +1 -1
- package/dist/perf.js +10 -6
- package/dist/perf.js.map +1 -1
- package/dist/runtime.esm.js +392 -260
- package/dist/runtime.esm.js.map +1 -1
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/index.js +9 -6
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/router.js +2 -1
- package/dist/utils/router.js.map +1 -1
- package/package.json +2 -2
package/dist/dom/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":[],"sources":["../../src/dom/tree.ts"],"sourcesContent":["import { NodeType } from './node_types';\n\nimport type { TaroElement } from './element';\n\ntype Filter = (element: TaroElement) => boolean;\n\nfunction returnTrue() {\n return true;\n}\n\nexport function treeToArray(root: TaroElement, predict?: Filter): TaroElement[] {\n const array: TaroElement[] = [];\n const filter = predict ?? returnTrue;\n\n let object: TaroElement | null = root;\n\n while (object) {\n if (object.nodeType === NodeType.ELEMENT_NODE && filter(object)) {\n array.push(object);\n }\n\n object = following(object, root);\n }\n\n return array;\n}\n\nfunction following(el: TaroElement, root: TaroElement): TaroElement | null {\n const firstChild = el.firstChild;\n const isElmentTypeValid = el.nodeType === NodeType.ELEMENT_NODE || el.nodeType === NodeType.DOCUMENT_NODE;\n\n // 如果当前 el 不是 element 或 document 元素,则可以直接不递归他的子元素了\n if (firstChild && isElmentTypeValid) {\n return firstChild as TaroElement;\n }\n\n let current: TaroElement | null = el;\n\n do {\n if (current === root) {\n return null;\n }\n\n const nextSibling = current.nextSibling;\n\n if (nextSibling) {\n return nextSibling as TaroElement;\n }\n current = current.parentElement;\n } while (current);\n\n return null;\n}\n"],"mappings":";AAMA,SAAS,aAAa;CACpB,OAAO;AACT;AAEA,SAAgB,YAAY,MAAmB,SAAiC;CAC9E,MAAM,QAAuB,CAAC;CAC9B,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"tree.js","names":[],"sources":["../../src/dom/tree.ts"],"sourcesContent":["import { NodeType } from './node_types';\n\nimport type { TaroElement } from './element';\n\ntype Filter = (element: TaroElement) => boolean;\n\nfunction returnTrue() {\n return true;\n}\n\nexport function treeToArray(root: TaroElement, predict?: Filter): TaroElement[] {\n const array: TaroElement[] = [];\n const filter = predict ?? returnTrue;\n\n let object: TaroElement | null = root;\n\n while (object) {\n if (object.nodeType === NodeType.ELEMENT_NODE && filter(object)) {\n array.push(object);\n }\n\n object = following(object, root);\n }\n\n return array;\n}\n\nfunction following(el: TaroElement, root: TaroElement): TaroElement | null {\n const firstChild = el.firstChild;\n const isElmentTypeValid = el.nodeType === NodeType.ELEMENT_NODE || el.nodeType === NodeType.DOCUMENT_NODE;\n\n // 如果当前 el 不是 element 或 document 元素,则可以直接不递归他的子元素了\n if (firstChild && isElmentTypeValid) {\n return firstChild as TaroElement;\n }\n\n let current: TaroElement | null = el;\n\n do {\n if (current === root) {\n return null;\n }\n\n const nextSibling = current.nextSibling;\n\n if (nextSibling) {\n return nextSibling as TaroElement;\n }\n current = current.parentElement;\n } while (current);\n\n return null;\n}\n"],"mappings":";AAMA,SAAS,aAAa;CACpB,OAAO;AACT;AAEA,SAAgB,YAAY,MAAmB,SAAiC;CAC9E,MAAM,QAAuB,CAAC;CAC9B,MAAM,SAAS,YAAA,QAAA,YAAA,KAAA,IAAA,UAAW;CAE1B,IAAI,SAA6B;CAEjC,OAAO,QAAQ;EACb,IAAI,OAAO,aAAA,KAAsC,OAAO,MAAM,GAC5D,MAAM,KAAK,MAAM;EAGnB,SAAS,UAAU,QAAQ,IAAI;CACjC;CAEA,OAAO;AACT;AAEA,SAAS,UAAU,IAAiB,MAAuC;CACzE,MAAM,aAAa,GAAG;CACtB,MAAM,oBAAoB,GAAG,aAAA,KAAsC,GAAG,aAAA;CAGtE,IAAI,cAAc,mBAChB,OAAO;CAGT,IAAI,UAA8B;CAElC,GAAG;EACD,IAAI,YAAY,MACd,OAAO;EAGT,MAAM,cAAc,QAAQ;EAE5B,IAAI,aACF,OAAO;EAET,UAAU,QAAQ;CACpB,SAAS;CAET,OAAO;AACT"}
|
|
@@ -48,7 +48,7 @@ var MutationObserverImpl = class {
|
|
|
48
48
|
};
|
|
49
49
|
/** Match two TaroNodes by sid. */
|
|
50
50
|
const sidMatches = (observerTarget, target) => {
|
|
51
|
-
return !!observerTarget && observerTarget.sid === target
|
|
51
|
+
return !!observerTarget && observerTarget.sid === (target === null || target === void 0 ? void 0 : target.sid);
|
|
52
52
|
};
|
|
53
53
|
const isConcerned = (record, options) => {
|
|
54
54
|
const { characterData, characterDataOldValue, attributes, attributeOldValue, childList } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implements.js","names":[],"sources":["../../../src/dom-external/mutation-observer/implements.ts"],"sourcesContent":["import { MutationRecordType } from './record';\n\nimport type { TaroNode } from '../../dom/node';\nimport type { MutationRecord } from './record';\n\nexport type MutationCallback = (mutations: MutationRecord[]) => any;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-mutationobserverinit\n */\nexport interface MutationObserverInit {\n attributeFilter?: string[];\n attributeOldValue?: boolean;\n attributes?: boolean;\n characterData?: boolean;\n characterDataOldValue?: boolean;\n childList?: boolean;\n subtree?: boolean;\n}\n\nconst observers: MutationObserverImpl[] = [];\n\n/**\n * The MutationObserver provides the ability\n * to watch for changes being made to the DOM tree.\n * It will invoke a specified callback function\n * when DOM changes occur.\n * @see https://dom.spec.whatwg.org/#mutationobserver\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n */\nexport class MutationObserverImpl {\n public callback: MutationCallback;\n public target: TaroNode | null;\n public options: MutationObserverInit;\n public records: MutationRecord[] = [];\n\n constructor(callback: MutationCallback) {\n this.callback = callback;\n }\n\n /**\n * Configures the MutationObserver\n * to begin receiving notifications\n * through its callback function\n * when DOM changes matching the given options occur.\n *\n * Options matching is to be implemented.\n */\n observe(target: TaroNode, options?: MutationObserverInit): void {\n this.disconnect();\n this.target = target;\n this.options = options || {};\n\n observers.push(this);\n }\n\n /**\n * Stop the MutationObserver instance\n * from receiving further notifications\n * until and unless observe() is called again.\n */\n disconnect(): void {\n this.target = null;\n\n const index = observers.indexOf(this);\n if (index >= 0) {\n observers.splice(index, 1);\n }\n }\n\n /**\n * Removes all pending notifications\n * from the MutationObserver's notification queue\n * and returns them in a new Array of MutationRecord objects.\n */\n takeRecords(): MutationRecord[] {\n return this.records.splice(0, this.records.length);\n }\n}\n\n/** Match two TaroNodes by sid. */\nconst sidMatches = (observerTarget: TaroNode | null, target: TaroNode | null): boolean => {\n return !!observerTarget && observerTarget.sid === target?.sid;\n};\n\nconst isConcerned = (record: MutationRecord, options: MutationObserverInit) => {\n const { characterData, characterDataOldValue, attributes, attributeOldValue, childList } = options;\n switch (record.type) {\n case MutationRecordType.CHARACTER_DATA:\n if (characterData) {\n if (!characterDataOldValue) record.oldValue = null;\n return true;\n }\n return false;\n case MutationRecordType.ATTRIBUTES:\n if (attributes) {\n if (!attributeOldValue) record.oldValue = null;\n return true;\n }\n return false;\n case MutationRecordType.CHILD_LIST:\n if (childList) {\n return true;\n }\n return false;\n }\n};\n\nlet pendingMuatations = false;\n\nfunction logMutation(observer: MutationObserverImpl, record: MutationRecord) {\n observer.records.push(record);\n if (!pendingMuatations) {\n pendingMuatations = true;\n Promise.resolve().then(() => {\n pendingMuatations = false;\n observers.forEach((observer) => {\n return observer.callback(observer.takeRecords());\n });\n });\n }\n}\n\nexport function recordMutation(record: MutationRecord) {\n observers.forEach((observer) => {\n const { options } = observer;\n for (let t: TaroNode | null = record.target; t; t = t.parentNode) {\n if (sidMatches(observer.target, t) && isConcerned(record, options)) {\n logMutation(observer, record);\n break;\n }\n if (!options.subtree) break;\n }\n });\n}\n"],"mappings":";AAoBA,MAAM,YAAoC,CAAC;;;;;;;;;AAU3C,IAAa,uBAAb,MAAkC;CAMhC,YAAY,UAA4B;
|
|
1
|
+
{"version":3,"file":"implements.js","names":[],"sources":["../../../src/dom-external/mutation-observer/implements.ts"],"sourcesContent":["import { MutationRecordType } from './record';\n\nimport type { TaroNode } from '../../dom/node';\nimport type { MutationRecord } from './record';\n\nexport type MutationCallback = (mutations: MutationRecord[]) => any;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-mutationobserverinit\n */\nexport interface MutationObserverInit {\n attributeFilter?: string[];\n attributeOldValue?: boolean;\n attributes?: boolean;\n characterData?: boolean;\n characterDataOldValue?: boolean;\n childList?: boolean;\n subtree?: boolean;\n}\n\nconst observers: MutationObserverImpl[] = [];\n\n/**\n * The MutationObserver provides the ability\n * to watch for changes being made to the DOM tree.\n * It will invoke a specified callback function\n * when DOM changes occur.\n * @see https://dom.spec.whatwg.org/#mutationobserver\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n */\nexport class MutationObserverImpl {\n public callback: MutationCallback;\n public target: TaroNode | null;\n public options: MutationObserverInit;\n public records: MutationRecord[] = [];\n\n constructor(callback: MutationCallback) {\n this.callback = callback;\n }\n\n /**\n * Configures the MutationObserver\n * to begin receiving notifications\n * through its callback function\n * when DOM changes matching the given options occur.\n *\n * Options matching is to be implemented.\n */\n observe(target: TaroNode, options?: MutationObserverInit): void {\n this.disconnect();\n this.target = target;\n this.options = options || {};\n\n observers.push(this);\n }\n\n /**\n * Stop the MutationObserver instance\n * from receiving further notifications\n * until and unless observe() is called again.\n */\n disconnect(): void {\n this.target = null;\n\n const index = observers.indexOf(this);\n if (index >= 0) {\n observers.splice(index, 1);\n }\n }\n\n /**\n * Removes all pending notifications\n * from the MutationObserver's notification queue\n * and returns them in a new Array of MutationRecord objects.\n */\n takeRecords(): MutationRecord[] {\n return this.records.splice(0, this.records.length);\n }\n}\n\n/** Match two TaroNodes by sid. */\nconst sidMatches = (observerTarget: TaroNode | null, target: TaroNode | null): boolean => {\n return !!observerTarget && observerTarget.sid === target?.sid;\n};\n\nconst isConcerned = (record: MutationRecord, options: MutationObserverInit) => {\n const { characterData, characterDataOldValue, attributes, attributeOldValue, childList } = options;\n switch (record.type) {\n case MutationRecordType.CHARACTER_DATA:\n if (characterData) {\n if (!characterDataOldValue) record.oldValue = null;\n return true;\n }\n return false;\n case MutationRecordType.ATTRIBUTES:\n if (attributes) {\n if (!attributeOldValue) record.oldValue = null;\n return true;\n }\n return false;\n case MutationRecordType.CHILD_LIST:\n if (childList) {\n return true;\n }\n return false;\n }\n};\n\nlet pendingMuatations = false;\n\nfunction logMutation(observer: MutationObserverImpl, record: MutationRecord) {\n observer.records.push(record);\n if (!pendingMuatations) {\n pendingMuatations = true;\n Promise.resolve().then(() => {\n pendingMuatations = false;\n observers.forEach((observer) => {\n return observer.callback(observer.takeRecords());\n });\n });\n }\n}\n\nexport function recordMutation(record: MutationRecord) {\n observers.forEach((observer) => {\n const { options } = observer;\n for (let t: TaroNode | null = record.target; t; t = t.parentNode) {\n if (sidMatches(observer.target, t) && isConcerned(record, options)) {\n logMutation(observer, record);\n break;\n }\n if (!options.subtree) break;\n }\n });\n}\n"],"mappings":";AAoBA,MAAM,YAAoC,CAAC;;;;;;;;;AAU3C,IAAa,uBAAb,MAAkC;CAMhC,YAAY,UAA4B;EAFxC,KAAO,UAA4B,CAAC;EAGlC,KAAK,WAAW;CAClB;;;;;;;;;CAUA,QAAQ,QAAkB,SAAsC;EAC9D,KAAK,WAAW;EAChB,KAAK,SAAS;EACd,KAAK,UAAU,WAAW,CAAC;EAE3B,UAAU,KAAK,IAAI;CACrB;;;;;;CAOA,aAAmB;EACjB,KAAK,SAAS;EAEd,MAAM,QAAQ,UAAU,QAAQ,IAAI;EACpC,IAAI,SAAS,GACX,UAAU,OAAO,OAAO,CAAC;CAE7B;;;;;;CAOA,cAAgC;EAC9B,OAAO,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,MAAM;CACnD;AACF;;AAGA,MAAM,cAAc,gBAAiC,WAAqC;CACxF,OAAO,CAAC,CAAC,kBAAkB,eAAe,SAAA,WAAA,QAAA,WAAA,KAAA,IAAA,KAAA,IAAQ,OAAQ;AAC5D;AAEA,MAAM,eAAe,QAAwB,YAAkC;CAC7E,MAAM,EAAE,eAAe,uBAAuB,YAAY,mBAAmB,cAAc;CAC3F,QAAQ,OAAO,MAAf;EACE,KAAA;GACE,IAAI,eAAe;IACjB,IAAI,CAAC,uBAAuB,OAAO,WAAW;IAC9C,OAAO;GACT;GACA,OAAO;EACT,KAAA;GACE,IAAI,YAAY;IACd,IAAI,CAAC,mBAAmB,OAAO,WAAW;IAC1C,OAAO;GACT;GACA,OAAO;EACT,KAAA;GACE,IAAI,WACF,OAAO;GAET,OAAO;CACX;AACF;AAEA,IAAI,oBAAoB;AAExB,SAAS,YAAY,UAAgC,QAAwB;CAC3E,SAAS,QAAQ,KAAK,MAAM;CAC5B,IAAI,CAAC,mBAAmB;EACtB,oBAAoB;EACpB,QAAQ,QAAQ,EAAE,WAAW;GAC3B,oBAAoB;GACpB,UAAU,SAAS,aAAa;IAC9B,OAAO,SAAS,SAAS,SAAS,YAAY,CAAC;GACjD,CAAC;EACH,CAAC;CACH;AACF;AAEA,SAAgB,eAAe,QAAwB;CACrD,UAAU,SAAS,aAAa;EAC9B,MAAM,EAAE,YAAY;EACpB,KAAK,IAAI,IAAqB,OAAO,QAAQ,GAAG,IAAI,EAAE,YAAY;GAChE,IAAI,WAAW,SAAS,QAAQ,CAAC,KAAK,YAAY,QAAQ,OAAO,GAAG;IAClE,YAAY,UAAU,MAAM;IAC5B;GACF;GACA,IAAI,CAAC,QAAQ,SAAS;EACxB;CACF,CAAC;AACH"}
|
package/dist/dsl/common.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BEHAVIORS, CUSTOM_WRAPPER, EXTERNAL_CLASSES, ON_HIDE, ON_LOAD, ON_READY, ON_SHOW, OPTIONS, PAGE_INIT, VIEW } from "../constants/index.js";
|
|
2
|
+
import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/objectSpread2.js";
|
|
2
3
|
import { eventCenter } from "../emitter/emitter.js";
|
|
3
4
|
import env from "../env.js";
|
|
4
5
|
import { Current } from "../current.js";
|
|
@@ -39,7 +40,7 @@ function stringify(obj) {
|
|
|
39
40
|
}
|
|
40
41
|
function getPath(id, options) {
|
|
41
42
|
const idx = id.indexOf("?");
|
|
42
|
-
if (process.env.TARO_PLATFORM === "web") return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options
|
|
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 } : {})}`;
|
|
43
44
|
else return `${idx > -1 ? id.substring(0, idx) : id}${stringify(options)}`;
|
|
44
45
|
}
|
|
45
46
|
function getOnReadyEventKey(path) {
|
|
@@ -52,7 +53,7 @@ function getOnHideEventKey(path) {
|
|
|
52
53
|
return path + "." + ON_HIDE;
|
|
53
54
|
}
|
|
54
55
|
function createPageConfig(component, pageName, data, pageConfig) {
|
|
55
|
-
const id = pageName
|
|
56
|
+
const id = pageName !== null && pageName !== void 0 ? pageName : `taro_page_${pageId()}`;
|
|
56
57
|
const [ONLOAD, ONUNLOAD, ONREADY, ONSHOW, ONHIDE, LIFECYCLES, SIDE_EFFECT_LIFECYCLES] = hooks.call("getMiniLifecycleImpl").page;
|
|
57
58
|
let pageElement = null;
|
|
58
59
|
let unmounting = false;
|
|
@@ -174,9 +175,11 @@ function createPageConfig(component, pageName, data, pageConfig) {
|
|
|
174
175
|
};
|
|
175
176
|
});
|
|
176
177
|
SIDE_EFFECT_LIFECYCLES.forEach((lifecycle) => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
var _component$prototype;
|
|
179
|
+
if (component[lifecycle] || ((_component$prototype = component.prototype) === null || _component$prototype === void 0 ? void 0 : _component$prototype[lifecycle]) || component[lifecycle.replace(/^on/, "enable")] || (pageConfig === null || pageConfig === void 0 ? void 0 : pageConfig[lifecycle.replace(/^on/, "enable")])) config[lifecycle] = function(...args) {
|
|
180
|
+
var _args$;
|
|
181
|
+
const target = (_args$ = args[0]) === null || _args$ === void 0 ? void 0 : _args$.target;
|
|
182
|
+
if (target === null || target === void 0 ? void 0 : target.id) {
|
|
180
183
|
const id = target.id;
|
|
181
184
|
const element = env.document.getElementById(id);
|
|
182
185
|
if (element) target.dataset = element.dataset;
|
|
@@ -190,13 +193,14 @@ function createPageConfig(component, pageName, data, pageConfig) {
|
|
|
190
193
|
return config;
|
|
191
194
|
}
|
|
192
195
|
function createComponentConfig(component, componentName, data) {
|
|
193
|
-
const id = componentName
|
|
196
|
+
const id = componentName !== null && componentName !== void 0 ? componentName : `taro_component_${pageId()}`;
|
|
194
197
|
let componentElement = null;
|
|
195
198
|
const [ATTACHED, DETACHED] = hooks.call("getMiniLifecycleImpl").component;
|
|
196
199
|
const config = {
|
|
197
200
|
[ATTACHED]() {
|
|
201
|
+
var _this$getPageId;
|
|
198
202
|
perf.start(PAGE_INIT);
|
|
199
|
-
this.pageIdCache = this.getPageId
|
|
203
|
+
this.pageIdCache = ((_this$getPageId = this.getPageId) === null || _this$getPageId === void 0 ? void 0 : _this$getPageId.call(this)) || pageId();
|
|
200
204
|
const path = getPath(id, { id: this.pageIdCache });
|
|
201
205
|
Current.app.mount(component, path, () => {
|
|
202
206
|
componentElement = env.document.getElementById(path);
|
|
@@ -224,7 +228,8 @@ function createComponentConfig(component, componentName, data) {
|
|
|
224
228
|
EXTERNAL_CLASSES,
|
|
225
229
|
BEHAVIORS
|
|
226
230
|
].forEach((key) => {
|
|
227
|
-
|
|
231
|
+
var _component$key;
|
|
232
|
+
config[key] = (_component$key = component[key]) !== null && _component$key !== void 0 ? _component$key : EMPTY_OBJ;
|
|
228
233
|
});
|
|
229
234
|
return config;
|
|
230
235
|
}
|
|
@@ -233,8 +238,9 @@ function createRecursiveComponentConfig(componentName) {
|
|
|
233
238
|
const [ATTACHED, DETACHED] = hooks.call("getMiniLifecycleImpl").component;
|
|
234
239
|
const lifeCycles = isCustomWrapper ? {
|
|
235
240
|
[ATTACHED]() {
|
|
241
|
+
var _this$data$i, _this$props$i;
|
|
236
242
|
if (process.env.TARO_ENV === "tt" && isEnableTTDom()) return;
|
|
237
|
-
const componentId = this.data.i
|
|
243
|
+
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);
|
|
238
244
|
if (isString(componentId)) {
|
|
239
245
|
customWrapperCache.set(componentId, this);
|
|
240
246
|
const el = env.document.getElementById(componentId);
|
|
@@ -242,8 +248,9 @@ function createRecursiveComponentConfig(componentName) {
|
|
|
242
248
|
}
|
|
243
249
|
},
|
|
244
250
|
[DETACHED]() {
|
|
251
|
+
var _this$data$i2, _this$props$i2;
|
|
245
252
|
if (process.env.TARO_ENV === "tt" && isEnableTTDom()) return;
|
|
246
|
-
const componentId = this.data.i
|
|
253
|
+
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);
|
|
247
254
|
if (isString(componentId)) {
|
|
248
255
|
customWrapperCache.delete(componentId);
|
|
249
256
|
const el = env.document.getElementById(componentId);
|
|
@@ -253,7 +260,7 @@ function createRecursiveComponentConfig(componentName) {
|
|
|
253
260
|
} : EMPTY_OBJ;
|
|
254
261
|
const extraOptions = {};
|
|
255
262
|
if (process.env.TARO_ENV === "jd") extraOptions.addGlobalClass = true;
|
|
256
|
-
return hooks.call("modifyRecursiveComponentConfig", {
|
|
263
|
+
return hooks.call("modifyRecursiveComponentConfig", _objectSpread2({
|
|
257
264
|
properties: {
|
|
258
265
|
i: {
|
|
259
266
|
type: Object,
|
|
@@ -264,13 +271,9 @@ function createRecursiveComponentConfig(componentName) {
|
|
|
264
271
|
value: ""
|
|
265
272
|
}
|
|
266
273
|
},
|
|
267
|
-
options: {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
},
|
|
271
|
-
methods: { eh: eventHandler },
|
|
272
|
-
...lifeCycles
|
|
273
|
-
}, { isCustomWrapper });
|
|
274
|
+
options: _objectSpread2(_objectSpread2({}, extraOptions), {}, { virtualHost: !isCustomWrapper }),
|
|
275
|
+
methods: { eh: eventHandler }
|
|
276
|
+
}, lifeCycles), { isCustomWrapper });
|
|
274
277
|
}
|
|
275
278
|
//#endregion
|
|
276
279
|
export { createComponentConfig, createPageConfig, createRecursiveComponentConfig, getOnHideEventKey, getOnReadyEventKey, getOnShowEventKey, getPageInstance, getPath, injectPageInstance, removePageInstance, safeExecute, stringify };
|
package/dist/dsl/common.js.map
CHANGED
|
@@ -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":["/* 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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"}
|
package/dist/hydrate.js
CHANGED
|
@@ -11,15 +11,18 @@ let componentsAlias;
|
|
|
11
11
|
* it's a vnode traverser and modifier: that's exactly what Taro's doing in here.
|
|
12
12
|
*/
|
|
13
13
|
function hydrate(node) {
|
|
14
|
-
componentsAlias
|
|
15
|
-
SPECIAL_NODES
|
|
14
|
+
componentsAlias || (componentsAlias = getComponentsAlias$1());
|
|
15
|
+
SPECIAL_NODES || (SPECIAL_NODES = hooks.call("getSpecialNodes"));
|
|
16
16
|
const nodeName = node.nodeName;
|
|
17
17
|
let compileModeName = null;
|
|
18
|
-
if (isText(node))
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
if (isText(node)) {
|
|
19
|
+
var _componentsAlias$node;
|
|
20
|
+
return {
|
|
21
|
+
sid: node.sid,
|
|
22
|
+
[Shortcuts.Text]: node.nodeValue,
|
|
23
|
+
[Shortcuts.NodeName]: ((_componentsAlias$node = componentsAlias[nodeName]) === null || _componentsAlias$node === void 0 ? void 0 : _componentsAlias$node._num) || "8"
|
|
24
|
+
};
|
|
25
|
+
}
|
|
23
26
|
const data = {
|
|
24
27
|
[Shortcuts.NodeName]: nodeName,
|
|
25
28
|
sid: node.sid
|
package/dist/hydrate.js.map
CHANGED
|
@@ -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,
|
|
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"}
|