@tarojs/runtime 4.0.0-beta.1 → 4.0.0-beta.100

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 (183) hide show
  1. package/LICENSE +17 -3
  2. package/dist/bom/URL.d.ts +51 -0
  3. package/dist/bom/URL.js +221 -0
  4. package/dist/bom/URL.js.map +1 -0
  5. package/dist/bom/URLSearchParams.d.ts +1 -0
  6. package/dist/bom/URLSearchParams.js +123 -0
  7. package/dist/bom/URLSearchParams.js.map +1 -0
  8. package/dist/bom/document.d.ts +2 -0
  9. package/dist/bom/document.js +39 -0
  10. package/dist/bom/document.js.map +1 -0
  11. package/dist/bom/getComputedStyle.d.ts +4 -0
  12. package/dist/bom/getComputedStyle.js +8 -0
  13. package/dist/bom/getComputedStyle.js.map +1 -0
  14. package/dist/bom/history.d.ts +30 -0
  15. package/dist/bom/history.js +121 -0
  16. package/dist/bom/history.js.map +1 -0
  17. package/dist/bom/location.d.ts +37 -0
  18. package/dist/bom/location.js +240 -0
  19. package/dist/bom/location.js.map +1 -0
  20. package/dist/bom/navigator.d.ts +1 -0
  21. package/dist/bom/navigator.js +24 -0
  22. package/dist/bom/navigator.js.map +1 -0
  23. package/dist/bom/raf.d.ts +5 -0
  24. package/dist/bom/raf.js +33 -0
  25. package/dist/bom/raf.js.map +1 -0
  26. package/dist/bom/window.d.ts +25 -0
  27. package/dist/bom/window.js +92 -0
  28. package/dist/bom/window.js.map +1 -0
  29. package/dist/constants/index.d.ts +59 -0
  30. package/dist/constants/index.js +63 -0
  31. package/dist/constants/index.js.map +1 -0
  32. package/dist/current.d.ts +19 -0
  33. package/dist/current.js +9 -0
  34. package/dist/current.js.map +1 -0
  35. package/dist/dom/anchor-element.d.ts +13 -0
  36. package/dist/dom/anchor-element.js +54 -0
  37. package/dist/dom/anchor-element.js.map +1 -0
  38. package/dist/dom/class-list.d.ts +16 -0
  39. package/dist/dom/class-list.js +92 -0
  40. package/dist/dom/class-list.js.map +1 -0
  41. package/dist/dom/document.d.ts +21 -0
  42. package/dist/dom/document.js +80 -0
  43. package/dist/dom/document.js.map +1 -0
  44. package/dist/dom/element.d.ts +39 -0
  45. package/dist/dom/element.js +315 -0
  46. package/dist/dom/element.js.map +1 -0
  47. package/dist/dom/event-source.d.ts +7 -0
  48. package/dist/dom/event-source.js +17 -0
  49. package/dist/dom/event-source.js.map +1 -0
  50. package/dist/dom/event-target.d.ts +7 -0
  51. package/dist/dom/event-target.js +78 -0
  52. package/dist/dom/event-target.js.map +1 -0
  53. package/dist/dom/event.d.ts +23 -0
  54. package/dist/dom/event.js +151 -0
  55. package/dist/dom/event.js.map +1 -0
  56. package/dist/dom/form.d.ts +9 -0
  57. package/dist/dom/form.js +38 -0
  58. package/dist/dom/form.js.map +1 -0
  59. package/dist/dom/node.d.ts +76 -0
  60. package/dist/dom/node.js +292 -0
  61. package/dist/dom/node.js.map +1 -0
  62. package/dist/dom/node_types.d.ts +10 -0
  63. package/dist/dom/root.d.ts +15 -0
  64. package/dist/dom/root.js +169 -0
  65. package/dist/dom/root.js.map +1 -0
  66. package/dist/dom/style.d.ts +14 -0
  67. package/dist/dom/style.js +168 -0
  68. package/dist/dom/style.js.map +1 -0
  69. package/dist/dom/style_properties.d.ts +3 -0
  70. package/dist/dom/style_properties.js +186 -0
  71. package/dist/dom/style_properties.js.map +1 -0
  72. package/dist/dom/svg.d.ts +3 -0
  73. package/dist/dom/svg.js +8 -0
  74. package/dist/dom/svg.js.map +1 -0
  75. package/dist/dom/text.d.ts +14 -0
  76. package/dist/dom/text.js +41 -0
  77. package/dist/dom/text.js.map +1 -0
  78. package/dist/dom/transfer.d.ts +7 -0
  79. package/dist/dom/transfer.js +15 -0
  80. package/dist/dom/transfer.js.map +1 -0
  81. package/dist/dom/tree.d.ts +4 -0
  82. package/dist/dom/tree.js +38 -0
  83. package/dist/dom/tree.js.map +1 -0
  84. package/dist/dom-external/element.d.ts +3 -0
  85. package/dist/dom-external/element.js +29 -0
  86. package/dist/dom-external/element.js.map +1 -0
  87. package/dist/dom-external/index.d.ts +1 -0
  88. package/dist/dom-external/index.js +40 -0
  89. package/dist/dom-external/index.js.map +1 -0
  90. package/dist/dom-external/inner-html/html.d.ts +2 -0
  91. package/dist/dom-external/inner-html/html.js +28 -0
  92. package/dist/dom-external/inner-html/html.js.map +1 -0
  93. package/dist/dom-external/inner-html/parser.d.ts +25 -0
  94. package/dist/dom-external/inner-html/parser.js +216 -0
  95. package/dist/dom-external/inner-html/parser.js.map +1 -0
  96. package/dist/dom-external/inner-html/scaner.d.ts +30 -0
  97. package/dist/dom-external/inner-html/scaner.js +304 -0
  98. package/dist/dom-external/inner-html/scaner.js.map +1 -0
  99. package/dist/dom-external/inner-html/style.d.ts +27 -0
  100. package/dist/dom-external/inner-html/style.js +235 -0
  101. package/dist/dom-external/inner-html/style.js.map +1 -0
  102. package/dist/dom-external/inner-html/tags.d.ts +8 -0
  103. package/dist/dom-external/inner-html/tags.js +26 -0
  104. package/dist/dom-external/inner-html/tags.js.map +1 -0
  105. package/dist/dom-external/inner-html/utils.d.ts +1 -0
  106. package/dist/dom-external/inner-html/utils.js +12 -0
  107. package/dist/dom-external/inner-html/utils.js.map +1 -0
  108. package/dist/dom-external/mutation-observer/implements.d.ts +52 -0
  109. package/dist/dom-external/mutation-observer/implements.js +108 -0
  110. package/dist/dom-external/mutation-observer/implements.js.map +1 -0
  111. package/dist/dom-external/mutation-observer/index.d.ts +13 -0
  112. package/dist/dom-external/mutation-observer/index.js +35 -0
  113. package/dist/dom-external/mutation-observer/index.js.map +1 -0
  114. package/dist/dom-external/mutation-observer/record.d.ts +24 -0
  115. package/dist/dom-external/node.d.ts +11 -0
  116. package/dist/dom-external/node.js +75 -0
  117. package/dist/dom-external/node.js.map +1 -0
  118. package/dist/dsl/common.d.ts +15 -0
  119. package/dist/dsl/common.js +337 -0
  120. package/dist/dsl/common.js.map +1 -0
  121. package/dist/dsl/instance.d.ts +84 -0
  122. package/dist/emitter/emitter.d.ts +4 -0
  123. package/dist/emitter/emitter.js +7 -0
  124. package/dist/emitter/emitter.js.map +1 -0
  125. package/dist/env.d.ts +7 -0
  126. package/dist/env.js +9 -0
  127. package/dist/env.js.map +1 -0
  128. package/dist/hydrate.d.ts +10 -0
  129. package/dist/hydrate.js +91 -0
  130. package/dist/hydrate.js.map +1 -0
  131. package/dist/{runtime.h5.js → index.cjs.js} +4147 -2348
  132. package/dist/index.cjs.js.map +1 -0
  133. package/dist/index.d.ts +35 -0
  134. package/dist/index.js +35 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/interface/element.d.ts +4 -0
  137. package/dist/interface/event-target.d.ts +11 -0
  138. package/dist/interface/event.d.ts +15 -0
  139. package/dist/interface/hydrate.d.ts +29 -0
  140. package/dist/interface/index.d.ts +7 -0
  141. package/dist/interface/node.d.ts +7 -0
  142. package/dist/interface/options.d.ts +16 -0
  143. package/dist/interface/utils.d.ts +2 -0
  144. package/dist/next-tick.d.ts +2 -0
  145. package/dist/next-tick.js +47 -0
  146. package/dist/next-tick.js.map +1 -0
  147. package/dist/options.d.ts +2 -0
  148. package/dist/options.js +7 -0
  149. package/dist/options.js.map +1 -0
  150. package/dist/perf.d.ts +9 -0
  151. package/dist/perf.js +49 -0
  152. package/dist/perf.js.map +1 -0
  153. package/dist/polyfill/array.d.ts +2 -0
  154. package/dist/polyfill/array.js +56 -0
  155. package/dist/polyfill/array.js.map +1 -0
  156. package/dist/polyfill/index.d.ts +2 -0
  157. package/dist/polyfill/index.js +34 -0
  158. package/dist/polyfill/index.js.map +1 -0
  159. package/dist/polyfill/intersection-observer.d.ts +1 -0
  160. package/dist/polyfill/intersection-observer.js +600 -0
  161. package/dist/polyfill/intersection-observer.js.map +1 -0
  162. package/dist/polyfill/object.d.ts +3 -0
  163. package/dist/polyfill/object.js +102 -0
  164. package/dist/polyfill/object.js.map +1 -0
  165. package/dist/runtime.esm.js +4119 -3320
  166. package/dist/runtime.esm.js.map +1 -1
  167. package/dist/utils/cache.d.ts +12 -0
  168. package/dist/utils/cache.js +27 -0
  169. package/dist/utils/cache.js.map +1 -0
  170. package/dist/utils/index.d.ts +25 -0
  171. package/dist/utils/index.js +99 -0
  172. package/dist/utils/index.js.map +1 -0
  173. package/dist/utils/lodash.d.ts +2 -0
  174. package/dist/utils/lodash.js +32 -0
  175. package/dist/utils/lodash.js.map +1 -0
  176. package/dist/utils/router.d.ts +7 -0
  177. package/dist/utils/router.js +24 -0
  178. package/dist/utils/router.js.map +1 -0
  179. package/package.json +22 -26
  180. package/dist/runtime.cjs.d.ts +0 -800
  181. package/dist/runtime.cjs.js +0 -4628
  182. package/dist/runtime.esm.d.ts +0 -800
  183. package/dist/runtime.h5.d.ts +0 -800
@@ -0,0 +1,3 @@
1
+ import { TaroElement } from './element';
2
+ export declare class SVGElement extends TaroElement {
3
+ }
@@ -0,0 +1,8 @@
1
+ import { TaroElement } from './element.js';
2
+
3
+ // for Vue3
4
+ class SVGElement extends TaroElement {
5
+ }
6
+
7
+ export { SVGElement };
8
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sources":["../../src/dom/svg.ts"],"sourcesContent":["import { TaroElement } from './element'\n\n// for Vue3\nexport class SVGElement extends TaroElement {}\n"],"names":[],"mappings":";;AAEA;AACM,MAAO,UAAW,SAAQ,WAAW,CAAA;AAAG;;;;"}
@@ -0,0 +1,14 @@
1
+ import { TaroNode } from './node';
2
+ import { NodeType } from './node_types';
3
+ export declare class TaroText extends TaroNode {
4
+ _value: string;
5
+ nodeType: NodeType;
6
+ nodeName: string;
7
+ constructor(value: any);
8
+ set textContent(text: string);
9
+ get textContent(): string;
10
+ set nodeValue(text: string);
11
+ get nodeValue(): string;
12
+ set data(text: string);
13
+ get data(): string;
14
+ }
@@ -0,0 +1,41 @@
1
+ import { MutationObserver } from '../dom-external/mutation-observer/index.js';
2
+ import { TaroNode } from './node.js';
3
+
4
+ class TaroText extends TaroNode {
5
+ constructor(value) {
6
+ super();
7
+ this.nodeType = 3 /* NodeType.TEXT_NODE */;
8
+ this.nodeName = '#text';
9
+ this._value = value;
10
+ }
11
+ set textContent(text) {
12
+ MutationObserver.record({
13
+ target: this,
14
+ type: "characterData" /* MutationRecordType.CHARACTER_DATA */,
15
+ oldValue: this._value
16
+ });
17
+ this._value = text;
18
+ this.enqueueUpdate({
19
+ path: `${this._path}.${"v" /* Shortcuts.Text */}`,
20
+ value: text
21
+ });
22
+ }
23
+ get textContent() {
24
+ return this._value;
25
+ }
26
+ set nodeValue(text) {
27
+ this.textContent = text;
28
+ }
29
+ get nodeValue() {
30
+ return this._value;
31
+ }
32
+ set data(text) {
33
+ this.textContent = text;
34
+ }
35
+ get data() {
36
+ return this._value;
37
+ }
38
+ }
39
+
40
+ export { TaroText };
41
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sources":["../../src/dom/text.ts"],"sourcesContent":["import { Shortcuts } from '@tarojs/shared'\n\nimport { MutationObserver, MutationRecordType } from '../dom-external/mutation-observer'\nimport { TaroNode } from './node'\nimport { NodeType } from './node_types'\n\nexport class TaroText extends TaroNode {\n public _value: string\n public nodeType = NodeType.TEXT_NODE\n public nodeName = '#text'\n\n constructor (value) {\n super()\n this._value = value\n }\n\n public set textContent (text: string) {\n MutationObserver.record({\n target: this,\n type: MutationRecordType.CHARACTER_DATA,\n oldValue: this._value\n })\n this._value = text\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.Text}`,\n value: text\n })\n }\n\n public get textContent (): string {\n return this._value\n }\n\n public set nodeValue (text: string) {\n this.textContent = text\n }\n\n public get nodeValue (): string {\n return this._value\n }\n\n public set data (text: string) {\n this.textContent = text\n }\n\n public get data (): string {\n return this._value\n }\n}\n"],"names":[],"mappings":";;;AAMM,MAAO,QAAS,SAAQ,QAAQ,CAAA;AAKpC,IAAA,WAAA,CAAa,KAAK,EAAA;AAChB,QAAA,KAAK,EAAE,CAAA;AAJF,QAAA,IAAA,CAAA,QAAQ,GAAqB,CAAA,0BAAA;QAC7B,IAAQ,CAAA,QAAA,GAAG,OAAO,CAAA;AAIvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;KACpB;IAED,IAAW,WAAW,CAAE,IAAY,EAAA;QAClC,gBAAgB,CAAC,MAAM,CAAC;AACtB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,IAAI,EAAmC,eAAA;YACvC,QAAQ,EAAE,IAAI,CAAC,MAAM;AACtB,SAAA,CAAC,CAAA;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,aAAa,CAAC;AACjB,YAAA,IAAI,EAAE,CAAG,EAAA,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,yBAAgB,CAAA;AACvC,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC,CAAA;KACH;AAED,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;IAED,IAAW,SAAS,CAAE,IAAY,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;KACxB;AAED,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;IAED,IAAW,IAAI,CAAE,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;KACxB;AAED,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;AACF;;;;"}
@@ -0,0 +1,7 @@
1
+ import { TaroElement } from './element';
2
+ export declare class TransferElement extends TaroElement {
3
+ dataName: string;
4
+ isTransferElement: boolean;
5
+ constructor(dataName: string);
6
+ get _path(): string;
7
+ }
@@ -0,0 +1,15 @@
1
+ import { TaroElement } from './element.js';
2
+
3
+ class TransferElement extends TaroElement {
4
+ constructor(dataName) {
5
+ super();
6
+ this.dataName = dataName;
7
+ this.isTransferElement = true;
8
+ }
9
+ get _path() {
10
+ return this.dataName;
11
+ }
12
+ }
13
+
14
+ export { TransferElement };
15
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sources":["../../src/dom/transfer.ts"],"sourcesContent":["import { TaroElement } from './element'\n\nexport class TransferElement extends TaroElement {\n public isTransferElement = true\n\n constructor (public dataName: string) {\n super()\n }\n\n public get _path () {\n return this.dataName\n }\n}\n"],"names":[],"mappings":";;AAEM,MAAO,eAAgB,SAAQ,WAAW,CAAA;AAG9C,IAAA,WAAA,CAAoB,QAAgB,EAAA;AAClC,QAAA,KAAK,EAAE,CAAA;QADW,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAF7B,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAA;KAI9B;AAED,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ,CAAA;KACrB;AACF;;;;"}
@@ -0,0 +1,4 @@
1
+ import type { TaroElement } from './element';
2
+ type Filter = (element: TaroElement) => boolean;
3
+ export declare function treeToArray(root: TaroElement, predict?: Filter): TaroElement[];
4
+ export {};
@@ -0,0 +1,38 @@
1
+ function returnTrue() {
2
+ return true;
3
+ }
4
+ function treeToArray(root, predict) {
5
+ const array = [];
6
+ const filter = predict !== null && predict !== void 0 ? predict : returnTrue;
7
+ let object = root;
8
+ while (object) {
9
+ if (object.nodeType === 1 /* NodeType.ELEMENT_NODE */ && filter(object)) {
10
+ array.push(object);
11
+ }
12
+ object = following(object, root);
13
+ }
14
+ return array;
15
+ }
16
+ function following(el, root) {
17
+ const firstChild = el.firstChild;
18
+ const isElmentTypeValid = el.nodeType === 1 /* NodeType.ELEMENT_NODE */ || el.nodeType === 9 /* NodeType.DOCUMENT_NODE */;
19
+ // 如果当前 el 不是 element 或 document 元素,则可以直接不递归他的子元素了
20
+ if (firstChild && isElmentTypeValid) {
21
+ return firstChild;
22
+ }
23
+ let current = el;
24
+ do {
25
+ if (current === root) {
26
+ return null;
27
+ }
28
+ const nextSibling = current.nextSibling;
29
+ if (nextSibling) {
30
+ return nextSibling;
31
+ }
32
+ current = current.parentElement;
33
+ } while (current);
34
+ return null;
35
+ }
36
+
37
+ export { treeToArray };
38
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","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"],"names":[],"mappings":"AAMA,SAAS,UAAU,GAAA;AACjB,IAAA,OAAO,IAAI,CAAA;AACb,CAAC;AAEe,SAAA,WAAW,CAAE,IAAiB,EAAE,OAAgB,EAAA;IAC9D,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,UAAU,CAAA;IAEpC,IAAI,MAAM,GAAuB,IAAI,CAAA;IAErC,OAAO,MAAM,EAAE;QACb,IAAI,MAAM,CAAC,QAAQ,KAA0B,CAAA,gCAAI,MAAM,CAAC,MAAM,CAAC,EAAE;AAC/D,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACnB;AAED,QAAA,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;KACjC;AAED,IAAA,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,SAAS,CAAE,EAAe,EAAE,IAAiB,EAAA;AACpD,IAAA,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAA;IAChC,MAAM,iBAAiB,GAAG,EAAE,CAAC,QAAQ,KAA0B,CAAA,gCAAI,EAAE,CAAC,QAAQ,KAAA,CAAA,8BAA2B;;AAGzG,IAAA,IAAI,UAAU,IAAI,iBAAiB,EAAE;AACnC,QAAA,OAAO,UAAyB,CAAA;KACjC;IAED,IAAI,OAAO,GAAuB,EAAE,CAAA;AAEpC,IAAA,GAAG;AACD,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,OAAO,IAAI,CAAA;SACZ;AAED,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAEvC,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,WAA0B,CAAA;SAClC;AACD,QAAA,OAAO,GAAG,OAAO,CAAC,aAAa,CAAA;KAChC,QAAQ,OAAO,EAAC;AAEjB,IAAA,OAAO,IAAI,CAAA;AACb;;;;"}
@@ -0,0 +1,3 @@
1
+ import type { TaroElement } from '../dom/element';
2
+ export declare function getBoundingClientRectImpl(this: TaroElement): Promise<null>;
3
+ export declare function getTemplateContent(ctx: TaroElement): TaroElement | undefined;
@@ -0,0 +1,29 @@
1
+ import { DOCUMENT_FRAGMENT } from '../constants/index.js';
2
+ import { options } from '../options.js';
3
+
4
+ function getBoundingClientRectImpl() {
5
+ if (!options.miniGlobal)
6
+ return Promise.resolve(null);
7
+ return new Promise(resolve => {
8
+ const query = options.miniGlobal.createSelectorQuery();
9
+ query.select(`#${this.uid}`).boundingClientRect(res => {
10
+ resolve(res);
11
+ }).exec();
12
+ });
13
+ }
14
+ function getTemplateContent(ctx) {
15
+ if (ctx.nodeName === 'template') {
16
+ const document = ctx.ownerDocument;
17
+ const content = document.createElement(DOCUMENT_FRAGMENT);
18
+ content.childNodes = ctx.childNodes;
19
+ ctx.childNodes = [content];
20
+ content.parentNode = ctx;
21
+ content.childNodes.forEach(nodes => {
22
+ nodes.parentNode = content;
23
+ });
24
+ return content;
25
+ }
26
+ }
27
+
28
+ export { getBoundingClientRectImpl, getTemplateContent };
29
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sources":["../../src/dom-external/element.ts"],"sourcesContent":["import { DOCUMENT_FRAGMENT } from '../constants'\nimport { options } from '../options'\n\nimport type { TaroElement } from '../dom/element'\n\nexport function getBoundingClientRectImpl (this: TaroElement): Promise<null> {\n if (!options.miniGlobal) return Promise.resolve(null)\n return new Promise(resolve => {\n const query = options.miniGlobal.createSelectorQuery()\n query.select(`#${this.uid}`).boundingClientRect(res => {\n resolve(res)\n }).exec()\n })\n}\n\nexport function getTemplateContent (ctx: TaroElement): TaroElement | undefined {\n if (ctx.nodeName === 'template') {\n const document = ctx.ownerDocument\n const content: TaroElement = document.createElement(DOCUMENT_FRAGMENT)\n content.childNodes = ctx.childNodes\n ctx.childNodes = [content]\n content.parentNode = ctx\n content.childNodes.forEach(nodes => {\n nodes.parentNode = content\n })\n return content\n }\n}\n"],"names":[],"mappings":";;;SAKgB,yBAAyB,GAAA;IACvC,IAAI,CAAC,OAAO,CAAC,UAAU;AAAE,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACrD,IAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAA;AACtD,QAAA,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAE,CAAA,CAAC,CAAC,kBAAkB,CAAC,GAAG,IAAG;YACpD,OAAO,CAAC,GAAG,CAAC,CAAA;AACd,SAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACX,KAAC,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,kBAAkB,CAAE,GAAgB,EAAA;AAClD,IAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC/B,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAA;QAClC,MAAM,OAAO,GAAgB,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;AACtE,QAAA,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAA;AACnC,QAAA,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1B,QAAA,OAAO,CAAC,UAAU,GAAG,GAAG,CAAA;AACxB,QAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAG;AACjC,YAAA,KAAK,CAAC,UAAU,GAAG,OAAO,CAAA;AAC5B,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,OAAO,CAAA;KACf;AACH;;;;"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ import { TaroElement } from '../dom/element.js';
2
+ import { TaroNode } from '../dom/node.js';
3
+ import { setInnerHTML } from './inner-html/html.js';
4
+ import { getBoundingClientRectImpl, getTemplateContent } from './element.js';
5
+ import { insertAdjacentHTML, cloneNode, contains } from './node.js';
6
+
7
+ const isWeb = process.env.TARO_PLATFORM === 'web';
8
+ const isHarmony = process.env.TARO_PLATFORM === 'harmony' || process.env.TARO_ENV === 'harmony';
9
+ if (!isWeb && !isHarmony) {
10
+ if (ENABLE_INNER_HTML) {
11
+ TaroNode.extend('innerHTML', {
12
+ set(html) {
13
+ setInnerHTML.call(this, this, html);
14
+ },
15
+ get() {
16
+ return '';
17
+ }
18
+ });
19
+ if (ENABLE_ADJACENT_HTML) {
20
+ TaroNode.extend('insertAdjacentHTML', insertAdjacentHTML);
21
+ }
22
+ }
23
+ if (ENABLE_CLONE_NODE) {
24
+ TaroNode.extend('cloneNode', cloneNode);
25
+ }
26
+ if (ENABLE_CONTAINS) {
27
+ TaroNode.extend('contains', contains);
28
+ }
29
+ if (ENABLE_SIZE_APIS) {
30
+ TaroElement.extend('getBoundingClientRect', getBoundingClientRectImpl);
31
+ }
32
+ if (ENABLE_TEMPLATE_CONTENT) {
33
+ TaroElement.extend('content', {
34
+ get() {
35
+ return getTemplateContent(this);
36
+ }
37
+ });
38
+ }
39
+ }
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/dom-external/index.ts"],"sourcesContent":["import { TaroElement } from '../dom/element'\nimport { TaroNode } from '../dom/node'\nimport { setInnerHTML } from '../dom-external/inner-html/html'\nimport { getBoundingClientRectImpl, getTemplateContent } from './element'\nimport { cloneNode, contains, insertAdjacentHTML } from './node'\n\ndeclare const ENABLE_INNER_HTML: boolean\ndeclare const ENABLE_ADJACENT_HTML: boolean\ndeclare const ENABLE_CLONE_NODE: boolean\ndeclare const ENABLE_CONTAINS: boolean\n\ndeclare const ENABLE_SIZE_APIS: boolean\ndeclare const ENABLE_TEMPLATE_CONTENT: boolean\n\nconst isWeb = process.env.TARO_PLATFORM === 'web'\nconst isHarmony = process.env.TARO_PLATFORM === 'harmony' || process.env.TARO_ENV === 'harmony'\nif (!isWeb && !isHarmony) {\n if (ENABLE_INNER_HTML) {\n TaroNode.extend('innerHTML', {\n set (html: string) {\n setInnerHTML.call(this, this, html)\n },\n get (): string {\n return ''\n }\n })\n\n if (ENABLE_ADJACENT_HTML) {\n TaroNode.extend('insertAdjacentHTML', insertAdjacentHTML)\n }\n }\n\n if (ENABLE_CLONE_NODE) {\n TaroNode.extend('cloneNode', cloneNode)\n }\n\n if (ENABLE_CONTAINS) {\n TaroNode.extend('contains', contains)\n }\n\n if (ENABLE_SIZE_APIS) {\n TaroElement.extend('getBoundingClientRect', getBoundingClientRectImpl)\n }\n\n if (ENABLE_TEMPLATE_CONTENT) {\n TaroElement.extend('content', {\n get () {\n return getTemplateContent(this)\n }\n })\n }\n}\n"],"names":[],"mappings":";;;;;;AAcA,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,KAAK,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAA;AAC/F,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;IACxB,IAAI,iBAAiB,EAAE;AACrB,QAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,YAAA,GAAG,CAAE,IAAY,EAAA;gBACf,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;aACpC;YACD,GAAG,GAAA;AACD,gBAAA,OAAO,EAAE,CAAA;aACV;AACF,SAAA,CAAC,CAAA;QAEF,IAAI,oBAAoB,EAAE;AACxB,YAAA,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAA;SAC1D;KACF;IAED,IAAI,iBAAiB,EAAE;AACrB,QAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;KACxC;IAED,IAAI,eAAe,EAAE;AACnB,QAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;KACtC;IAED,IAAI,gBAAgB,EAAE;AACpB,QAAA,WAAW,CAAC,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,CAAC,CAAA;KACvE;IAED,IAAI,uBAAuB,EAAE;AAC3B,QAAA,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE;YAC5B,GAAG,GAAA;AACD,gBAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;aAChC;AACF,SAAA,CAAC,CAAA;KACH;AACH"}
@@ -0,0 +1,2 @@
1
+ import type { TaroNode } from '../../dom/node';
2
+ export declare function setInnerHTML(element: TaroNode, html: string): void;
@@ -0,0 +1,28 @@
1
+ import { options } from '../../options.js';
2
+ import { parser } from './parser.js';
3
+
4
+ options.html = {
5
+ skipElements: new Set(['style', 'script']),
6
+ voidElements: new Set([
7
+ '!doctype', 'area', 'base', 'br', 'col', 'command',
8
+ 'embed', 'hr', 'img', 'input', 'keygen', 'link',
9
+ 'meta', 'param', 'source', 'track', 'wbr'
10
+ ]),
11
+ closingElements: new Set([
12
+ 'html', 'head', 'body', 'p', 'dt', 'dd', 'li', 'option',
13
+ 'thead', 'th', 'tbody', 'tr', 'td', 'tfoot', 'colgroup'
14
+ ]),
15
+ renderHTMLTag: false
16
+ };
17
+ function setInnerHTML(element, html) {
18
+ while (element.firstChild) {
19
+ element.removeChild(element.firstChild);
20
+ }
21
+ const children = parser(html, element.ownerDocument);
22
+ for (let i = 0; i < children.length; i++) {
23
+ element.appendChild(children[i]);
24
+ }
25
+ }
26
+
27
+ export { setInnerHTML };
28
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sources":["../../../src/dom-external/inner-html/html.ts"],"sourcesContent":["import { options } from '../../options'\nimport { parser } from './parser'\n\nimport type { TaroNode } from '../../dom/node'\n\noptions.html = {\n skipElements: new Set(['style', 'script']),\n voidElements: new Set([\n '!doctype', 'area', 'base', 'br', 'col', 'command',\n 'embed', 'hr', 'img', 'input', 'keygen', 'link',\n 'meta', 'param', 'source', 'track', 'wbr'\n ]),\n closingElements: new Set([\n 'html', 'head', 'body', 'p', 'dt', 'dd', 'li', 'option',\n 'thead', 'th', 'tbody', 'tr', 'td', 'tfoot', 'colgroup'\n ]),\n renderHTMLTag: false\n}\n\nexport function setInnerHTML (element: TaroNode, html: string) {\n while (element.firstChild) {\n element.removeChild(element.firstChild)\n }\n const children = parser(html, element.ownerDocument)\n\n for (let i = 0; i < children.length; i++) {\n element.appendChild(children[i])\n }\n}\n"],"names":[],"mappings":";;;AAKA,OAAO,CAAC,IAAI,GAAG;IACb,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1C,YAAY,EAAE,IAAI,GAAG,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS;QAClD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;AAC/C,QAAA,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK;KAC1C,CAAC;IACF,eAAe,EAAE,IAAI,GAAG,CAAC;AACvB,QAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;QACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU;KACxD,CAAC;AACF,IAAA,aAAa,EAAE,KAAK;CACrB,CAAA;AAEe,SAAA,YAAY,CAAE,OAAiB,EAAE,IAAY,EAAA;AAC3D,IAAA,OAAO,OAAO,CAAC,UAAU,EAAE;AACzB,QAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;KACxC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;AAEpD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;KACjC;AACH;;;;"}
@@ -0,0 +1,25 @@
1
+ import type { TaroDocument } from '../../dom/document';
2
+ import type { TaroElement } from '../../dom/element';
3
+ interface Node {
4
+ type: string;
5
+ }
6
+ interface Comment extends Node {
7
+ type: 'comment';
8
+ content: string;
9
+ }
10
+ export interface Text extends Node {
11
+ type: 'text';
12
+ content: string;
13
+ }
14
+ export interface Element extends Node {
15
+ type: 'element';
16
+ tagName: string;
17
+ children: ChildNode[];
18
+ attributes: string[];
19
+ }
20
+ export interface ParsedTaroElement extends TaroElement {
21
+ h5tagName?: string;
22
+ }
23
+ type ChildNode = Comment | Text | Element;
24
+ export declare function parser(html: string, document: TaroDocument): (import("../..").TaroText | TaroElement)[];
25
+ export {};
@@ -0,0 +1,216 @@
1
+ import { isFunction } from '@tarojs/shared';
2
+ import { options } from '../../options.js';
3
+ import { Scaner } from './scaner.js';
4
+ import StyleTagParser from './style.js';
5
+ import { specialMiniElements, isMiniElements, isBlockElements, isInlineElements } from './tags.js';
6
+ import { unquote } from './utils.js';
7
+
8
+ const closingTagAncestorBreakers = {
9
+ li: ['ul', 'ol', 'menu'],
10
+ dt: ['dl'],
11
+ dd: ['dl'],
12
+ tbody: ['table'],
13
+ thead: ['table'],
14
+ tfoot: ['table'],
15
+ tr: ['table'],
16
+ td: ['table']
17
+ };
18
+ function hasTerminalParent(tagName, stack) {
19
+ const tagParents = closingTagAncestorBreakers[tagName];
20
+ if (tagParents) {
21
+ let currentIndex = stack.length - 1;
22
+ while (currentIndex >= 0) {
23
+ const parentTagName = stack[currentIndex].tagName;
24
+ if (parentTagName === tagName) {
25
+ break;
26
+ }
27
+ if (tagParents && tagParents.includes(parentTagName)) {
28
+ return true;
29
+ }
30
+ currentIndex--;
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+ function getTagName(tag) {
36
+ if (options.html.renderHTMLTag) {
37
+ return tag;
38
+ }
39
+ if (specialMiniElements[tag]) {
40
+ return specialMiniElements[tag];
41
+ }
42
+ else if (isMiniElements(tag)) {
43
+ return tag;
44
+ }
45
+ else if (isBlockElements(tag)) {
46
+ return 'view';
47
+ }
48
+ else if (isInlineElements(tag)) {
49
+ return 'text';
50
+ }
51
+ return 'view';
52
+ }
53
+ function splitEqual(str) {
54
+ const sep = '=';
55
+ const idx = str.indexOf(sep);
56
+ if (idx === -1)
57
+ return [str];
58
+ const key = str.slice(0, idx).trim();
59
+ const value = str.slice(idx + sep.length).trim();
60
+ return [key, value];
61
+ }
62
+ function format(children, document, styleOptions, parent) {
63
+ return children
64
+ .filter(child => {
65
+ // 过滤注释和空文本节点
66
+ if (child.type === 'comment') {
67
+ return false;
68
+ }
69
+ else if (child.type === 'text') {
70
+ return child.content !== '';
71
+ }
72
+ return true;
73
+ })
74
+ .map((child) => {
75
+ // 文本节点
76
+ if (child.type === 'text') {
77
+ let text = document.createTextNode(child.content);
78
+ if (isFunction(options.html.transformText)) {
79
+ text = options.html.transformText(text, child);
80
+ }
81
+ parent === null || parent === void 0 ? void 0 : parent.appendChild(text);
82
+ return text;
83
+ }
84
+ const el = document.createElement(getTagName(child.tagName));
85
+ el.h5tagName = child.tagName;
86
+ parent === null || parent === void 0 ? void 0 : parent.appendChild(el);
87
+ if (!options.html.renderHTMLTag) {
88
+ el.className = `h5-${child.tagName}`;
89
+ }
90
+ for (let i = 0; i < child.attributes.length; i++) {
91
+ const attr = child.attributes[i];
92
+ const [key, value] = splitEqual(attr);
93
+ if (key === 'class') {
94
+ el.className += ' ' + unquote(value);
95
+ }
96
+ else if (key[0] === 'o' && key[1] === 'n') {
97
+ continue;
98
+ }
99
+ else {
100
+ el.setAttribute(key, value == null ? true : unquote(value));
101
+ }
102
+ }
103
+ const { styleTagParser, descendantList } = styleOptions;
104
+ const list = descendantList.slice();
105
+ const style = styleTagParser.matchStyle(child.tagName, el, list);
106
+ el.setAttribute('style', style + el.style.cssText);
107
+ // console.log('style, ', style)
108
+ format(child.children, document, {
109
+ styleTagParser,
110
+ descendantList: list
111
+ }, el);
112
+ if (isFunction(options.html.transformElement)) {
113
+ return options.html.transformElement(el, child);
114
+ }
115
+ return el;
116
+ });
117
+ }
118
+ function parser(html, document) {
119
+ const styleTagParser = new StyleTagParser();
120
+ html = styleTagParser.extractStyle(html);
121
+ const tokens = new Scaner(html).scan();
122
+ const root = { tagName: '', children: [], type: 'element', attributes: [] };
123
+ const state = { tokens, options, cursor: 0, stack: [root] };
124
+ parse(state);
125
+ return format(root.children, document, {
126
+ styleTagParser,
127
+ descendantList: Array(styleTagParser.styles.length).fill(0)
128
+ });
129
+ }
130
+ function parse(state) {
131
+ const { tokens, stack } = state;
132
+ let { cursor } = state;
133
+ const len = tokens.length;
134
+ let nodes = stack[stack.length - 1].children;
135
+ while (cursor < len) {
136
+ const token = tokens[cursor];
137
+ if (token.type !== 'tag-start') {
138
+ // comment or text
139
+ nodes.push(token);
140
+ cursor++;
141
+ continue;
142
+ }
143
+ const tagToken = tokens[++cursor];
144
+ cursor++;
145
+ const tagName = tagToken.content.toLowerCase();
146
+ if (token.close) {
147
+ let index = stack.length;
148
+ let shouldRewind = false;
149
+ while (--index > -1) {
150
+ if (stack[index].tagName === tagName) {
151
+ shouldRewind = true;
152
+ break;
153
+ }
154
+ }
155
+ while (cursor < len) {
156
+ const endToken = tokens[cursor];
157
+ if (endToken.type !== 'tag-end')
158
+ break;
159
+ cursor++;
160
+ }
161
+ if (shouldRewind) {
162
+ stack.splice(index);
163
+ break;
164
+ }
165
+ else {
166
+ continue;
167
+ }
168
+ }
169
+ const isClosingTag = options.html.closingElements.has(tagName);
170
+ let shouldRewindToAutoClose = isClosingTag;
171
+ if (shouldRewindToAutoClose) {
172
+ shouldRewindToAutoClose = !hasTerminalParent(tagName, stack);
173
+ }
174
+ if (shouldRewindToAutoClose) {
175
+ let currentIndex = stack.length - 1;
176
+ while (currentIndex > 0) {
177
+ if (tagName === stack[currentIndex].tagName) {
178
+ stack.splice(currentIndex);
179
+ const previousIndex = currentIndex - 1;
180
+ nodes = stack[previousIndex].children;
181
+ break;
182
+ }
183
+ currentIndex = currentIndex - 1;
184
+ }
185
+ }
186
+ const attributes = [];
187
+ let attrToken;
188
+ while (cursor < len) {
189
+ attrToken = tokens[cursor];
190
+ if (attrToken.type === 'tag-end')
191
+ break;
192
+ attributes.push(attrToken.content);
193
+ cursor++;
194
+ }
195
+ cursor++;
196
+ const children = [];
197
+ const element = {
198
+ type: 'element',
199
+ tagName: tagToken.content,
200
+ attributes,
201
+ children
202
+ };
203
+ nodes.push(element);
204
+ const hasChildren = !(attrToken.close || options.html.voidElements.has(tagName));
205
+ if (hasChildren) {
206
+ stack.push({ tagName, children });
207
+ const innerState = { tokens, cursor, stack };
208
+ parse(innerState);
209
+ cursor = innerState.cursor;
210
+ }
211
+ }
212
+ state.cursor = cursor;
213
+ }
214
+
215
+ export { parser };
216
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sources":["../../../src/dom-external/inner-html/parser.ts"],"sourcesContent":["import { isFunction } from '@tarojs/shared'\n\nimport { options } from '../../options'\nimport { Scaner, Token } from './scaner'\nimport StyleTagParser from './style'\nimport { isBlockElements, isInlineElements, isMiniElements, specialMiniElements } from './tags'\nimport { unquote } from './utils'\n\nimport type { TaroDocument } from '../../dom/document'\nimport type { TaroElement } from '../../dom/element'\n\ninterface State {\n tokens: Token[]\n cursor: number\n stack: Element[]\n}\n\nconst closingTagAncestorBreakers = {\n li: ['ul', 'ol', 'menu'],\n dt: ['dl'],\n dd: ['dl'],\n tbody: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table'],\n td: ['table']\n}\n\ninterface Node {\n type: string\n}\n\ninterface Comment extends Node {\n type: 'comment'\n content: string\n}\n\nexport interface Text extends Node {\n type: 'text'\n content: string\n}\n\nexport interface Element extends Node {\n type: 'element'\n tagName: string\n children: ChildNode[]\n attributes: string[]\n}\n\nexport interface ParsedTaroElement extends TaroElement{\n h5tagName?: string\n}\n\ntype ChildNode = Comment | Text | Element\n\nfunction hasTerminalParent (tagName: string, stack: Element[]) {\n const tagParents: undefined | string[] = closingTagAncestorBreakers[tagName]\n if (tagParents) {\n let currentIndex = stack.length - 1\n while (currentIndex >= 0) {\n const parentTagName = stack[currentIndex].tagName\n if (parentTagName === tagName) {\n break\n }\n if (tagParents && tagParents.includes(parentTagName!)) {\n return true\n }\n currentIndex--\n }\n }\n return false\n}\n\nfunction getTagName (tag: string) {\n if (options.html!.renderHTMLTag) {\n return tag\n }\n\n if (specialMiniElements[tag]) {\n return specialMiniElements[tag]\n } else if (isMiniElements(tag)) {\n return tag\n } else if (isBlockElements(tag)) {\n return 'view'\n } else if (isInlineElements(tag)) {\n return 'text'\n }\n\n return 'view'\n}\n\nfunction splitEqual (str: string) {\n const sep = '='\n const idx = str.indexOf(sep)\n if (idx === -1) return [str]\n const key = str.slice(0, idx).trim()\n const value = str.slice(idx + sep.length).trim()\n return [key, value]\n}\n\nfunction format (\n children: ChildNode[],\n document: TaroDocument,\n styleOptions: {\n styleTagParser: StyleTagParser\n descendantList: number[]\n },\n parent?: TaroElement\n) {\n return children\n .filter(child => {\n // 过滤注释和空文本节点\n if (child.type === 'comment') {\n return false\n } else if (child.type === 'text') {\n return child.content !== ''\n }\n return true\n })\n .map((child: Text | Element) => {\n // 文本节点\n if (child.type === 'text') {\n let text = document.createTextNode(child.content)\n if (isFunction(options.html!.transformText)) {\n text = options.html!.transformText(text, child)\n }\n parent?.appendChild(text)\n return text\n }\n\n const el: ParsedTaroElement = document.createElement(getTagName(child.tagName))\n el.h5tagName = child.tagName\n\n parent?.appendChild(el)\n\n if (!options.html!.renderHTMLTag) {\n el.className = `h5-${child.tagName}`\n }\n\n for (let i = 0; i < child.attributes.length; i++) {\n const attr = child.attributes[i]\n const [key, value] = splitEqual(attr)\n if (key === 'class') {\n el.className += ' ' + unquote(value)\n } else if (key[0] === 'o' && key[1] === 'n') {\n continue\n } else {\n el.setAttribute(key, value == null ? true : unquote(value))\n }\n }\n\n const { styleTagParser, descendantList } = styleOptions\n const list = descendantList.slice()\n const style = styleTagParser.matchStyle(child.tagName, el, list)\n\n el.setAttribute('style', style + el.style.cssText)\n // console.log('style, ', style)\n\n format(child.children, document, {\n styleTagParser,\n descendantList: list\n }, el)\n\n if (isFunction(options.html!.transformElement)) {\n return options.html!.transformElement(el, child)\n }\n\n return el\n })\n}\n\nexport function parser (html: string, document: TaroDocument) {\n const styleTagParser = new StyleTagParser()\n html = styleTagParser.extractStyle(html)\n\n const tokens = new Scaner(html).scan()\n\n const root: Element = { tagName: '', children: [], type: 'element', attributes: [] }\n\n const state = { tokens, options, cursor: 0, stack: [root] }\n parse(state)\n\n return format(root.children, document, {\n styleTagParser,\n descendantList: Array(styleTagParser.styles.length).fill(0)\n })\n}\n\nfunction parse (state: State) {\n const { tokens, stack } = state\n let { cursor } = state\n\n const len = tokens.length\n\n let nodes = stack[stack.length - 1].children\n\n while (cursor < len) {\n const token = tokens[cursor]\n if (token.type !== 'tag-start') {\n // comment or text\n nodes.push(token as ChildNode)\n cursor++\n continue\n }\n\n const tagToken = tokens[++cursor]\n cursor++\n const tagName = tagToken.content!.toLowerCase()\n if (token.close) {\n let index = stack.length\n let shouldRewind = false\n while (--index > -1) {\n if (stack[index].tagName === tagName) {\n shouldRewind = true\n break\n }\n }\n while (cursor < len) {\n const endToken = tokens[cursor]\n if (endToken.type !== 'tag-end') break\n cursor++\n }\n if (shouldRewind) {\n stack.splice(index)\n break\n } else {\n continue\n }\n }\n\n const isClosingTag = options.html!.closingElements.has(tagName)\n let shouldRewindToAutoClose = isClosingTag\n if (shouldRewindToAutoClose) {\n shouldRewindToAutoClose = !hasTerminalParent(tagName, stack)\n }\n\n if (shouldRewindToAutoClose) {\n let currentIndex = stack.length - 1\n while (currentIndex > 0) {\n if (tagName === stack[currentIndex].tagName) {\n stack.splice(currentIndex)\n const previousIndex = currentIndex - 1\n nodes = stack[previousIndex].children\n break\n }\n currentIndex = currentIndex - 1\n }\n }\n\n const attributes: string[] = []\n let attrToken: Token\n while (cursor < len) {\n attrToken = tokens[cursor]\n if (attrToken.type === 'tag-end') break\n attributes.push(attrToken.content!)\n cursor++\n }\n\n cursor++\n const children: Element[] = []\n const element: Element = {\n type: 'element',\n tagName: tagToken.content!,\n attributes,\n children\n }\n nodes.push(element)\n\n const hasChildren = !(attrToken!.close || options.html!.voidElements.has(tagName))\n if (hasChildren) {\n stack.push({ tagName, children } as any)\n const innerState: State = { tokens, cursor, stack }\n parse(innerState)\n cursor = innerState.cursor\n }\n }\n\n state.cursor = cursor\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ interface Position {
2
+ index: number;
3
+ column: number;
4
+ line: number;
5
+ }
6
+ export interface Token {
7
+ type: string;
8
+ content?: string;
9
+ position?: {
10
+ start?: Position;
11
+ end?: Position;
12
+ };
13
+ close?: boolean;
14
+ }
15
+ export declare class Scaner {
16
+ private tokens;
17
+ private position;
18
+ private html;
19
+ constructor(html: string);
20
+ scan(): Token[];
21
+ private scanText;
22
+ private scanComment;
23
+ private scanTag;
24
+ private scanTagStart;
25
+ private scanTagEnd;
26
+ private scanTagName;
27
+ private scanAttrs;
28
+ private scanSkipTag;
29
+ }
30
+ export {};