@spcsn/taro-runtime 0.1.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/LICENSE +1 -153
  2. package/README.md +16 -39
  3. package/dist/bom/{URL.js → URL2.js} +3 -4
  4. package/dist/bom/URL2.js.map +1 -0
  5. package/dist/bom/document.d.ts +0 -1
  6. package/dist/bom/document.js +1 -55
  7. package/dist/bom/document.js.map +1 -1
  8. package/dist/bom/get-computed-style.js +8 -0
  9. package/dist/bom/get-computed-style.js.map +1 -0
  10. package/dist/bom/history.js +1 -2
  11. package/dist/bom/history.js.map +1 -1
  12. package/dist/bom/location.js +2 -3
  13. package/dist/bom/location.js.map +1 -1
  14. package/dist/bom/navigator.js +1 -2
  15. package/dist/bom/navigator.js.map +1 -1
  16. package/dist/bom/raf.d.ts +2 -2
  17. package/dist/bom/raf.js +2 -2
  18. package/dist/bom/raf.js.map +1 -1
  19. package/dist/bom/url-search-params.d.ts +14 -0
  20. package/dist/bom/{URLSearchParams.js → url-search-params.js} +12 -15
  21. package/dist/bom/url-search-params.js.map +1 -0
  22. package/dist/bom/{URL.d.ts → url.d.ts} +1 -0
  23. package/dist/bom/url.js +196 -0
  24. package/dist/bom/url.js.map +1 -0
  25. package/dist/bom/window.d.ts +3 -3
  26. package/dist/bom/window.js +2 -2
  27. package/dist/bom/window.js.map +1 -1
  28. package/dist/current.d.ts +3 -0
  29. package/dist/current.js +10 -1
  30. package/dist/current.js.map +1 -1
  31. package/dist/dom/anchor-element.js +1 -1
  32. package/dist/dom/class-list.js +2 -1
  33. package/dist/dom/class-list.js.map +1 -1
  34. package/dist/dom/document.js.map +1 -1
  35. package/dist/dom/element.js +7 -7
  36. package/dist/dom/element.js.map +1 -1
  37. package/dist/dom/event.d.ts +1 -1
  38. package/dist/dom/event.js +3 -13
  39. package/dist/dom/event.js.map +1 -1
  40. package/dist/dom/form.js +1 -1
  41. package/dist/dom/form.js.map +1 -1
  42. package/dist/dom/node.d.ts +4 -3
  43. package/dist/dom/node.js +14 -7
  44. package/dist/dom/node.js.map +1 -1
  45. package/dist/dom/root.js +2 -2
  46. package/dist/dom/root.js.map +1 -1
  47. package/dist/dom/{style_properties.js → style-properties.js} +2 -2
  48. package/dist/dom/{style_properties.js.map → style-properties.js.map} +1 -1
  49. package/dist/dom/style.js +1 -1
  50. package/dist/dom/style.js.map +1 -1
  51. package/dist/dom/text.d.ts +1 -1
  52. package/dist/dom/text.js.map +1 -1
  53. package/dist/dom/tree.js.map +1 -1
  54. package/dist/dsl/common.js +26 -47
  55. package/dist/dsl/common.js.map +1 -1
  56. package/dist/env.js +2 -2
  57. package/dist/env.js.map +1 -1
  58. package/dist/hydrate.js +1 -1
  59. package/dist/hydrate.js.map +1 -1
  60. package/dist/index.cjs.d.ts +4 -4
  61. package/dist/index.cjs.js +331 -708
  62. package/dist/index.cjs.js.map +1 -1
  63. package/dist/index.d.ts +4 -4
  64. package/dist/index.js +6 -6
  65. package/dist/next-tick.js +1 -6
  66. package/dist/next-tick.js.map +1 -1
  67. package/dist/perf.js +1 -1
  68. package/dist/perf.js.map +1 -1
  69. package/dist/polyfill/index.js +1 -6
  70. package/dist/polyfill/index.js.map +1 -1
  71. package/dist/runtime.esm.d.ts +4 -4
  72. package/dist/runtime.esm.js +330 -708
  73. package/dist/runtime.esm.js.map +1 -1
  74. package/dist/utils/index.js.map +1 -1
  75. package/package.json +16 -10
  76. package/dist/bom/URL.js.map +0 -1
  77. package/dist/bom/URLSearchParams.d.ts +0 -1
  78. package/dist/bom/URLSearchParams.js.map +0 -1
  79. package/dist/bom/getComputedStyle.js +0 -9
  80. package/dist/bom/getComputedStyle.js.map +0 -1
  81. package/dist/polyfill/intersection-observer.js +0 -494
  82. package/dist/polyfill/intersection-observer.js.map +0 -1
  83. /package/dist/bom/{getComputedStyle.d.ts → get-computed-style.d.ts} +0 -0
  84. /package/dist/dom/{node_types.d.ts → node-types.d.ts} +0 -0
  85. /package/dist/dom/{style_properties.d.ts → style-properties.d.ts} +0 -0
@@ -1,9 +1,7 @@
1
- import env from "../env.js";
2
1
  import { _classPrivateFieldInitSpec } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldInitSpec.js";
3
2
  import { _classPrivateFieldGet2 } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldGet2.js";
4
3
  import { isArray } from "@spcsn/taro-shared";
5
- //#region src/bom/URLSearchParams.ts
6
- var _dict;
4
+ //#region src/bom/url-search-params.ts
7
5
  const findReg = /[!'()~]|%20|%00/g;
8
6
  const plusReg = /\+/g;
9
7
  const replaceCharMap = {
@@ -23,16 +21,14 @@ function appendTo(dict, name, value) {
23
21
  if (name in dict) dict[name].push(res);
24
22
  else dict[name] = [res];
25
23
  }
26
- function addEach(value, key) {
27
- appendTo(this, key, value);
28
- }
29
24
  function decode(str) {
30
25
  return decodeURIComponent(str.replace(plusReg, " "));
31
26
  }
32
27
  function encode(str) {
33
28
  return encodeURIComponent(str).replace(findReg, replacer);
34
29
  }
35
- const URLSearchParams = process.env.TARO_PLATFORM === "web" ? env.window.URLSearchParams : (_dict = /* @__PURE__ */ new WeakMap(), class {
30
+ var _dict = /* @__PURE__ */ new WeakMap();
31
+ var URLSearchParams = class {
36
32
  constructor(query) {
37
33
  var _query;
38
34
  _classPrivateFieldInitSpec(this, _dict, Object.create(null));
@@ -54,7 +50,7 @@ const URLSearchParams = process.env.TARO_PLATFORM === "web" ? env.window.URLSear
54
50
  const value = query[i];
55
51
  appendTo(dict, value[0], value[1]);
56
52
  }
57
- else if (query.forEach) query.forEach(addEach, dict);
53
+ else if (query.forEach) query.forEach((value, key) => appendTo(dict, key, value));
58
54
  else for (const key in query) appendTo(dict, key, query[key]);
59
55
  }
60
56
  append(name, value) {
@@ -82,11 +78,12 @@ const URLSearchParams = process.env.TARO_PLATFORM === "web" ? env.window.URLSear
82
78
  }
83
79
  forEach(callback, thisArg) {
84
80
  const dict = _classPrivateFieldGet2(_dict, this);
85
- Object.getOwnPropertyNames(dict).forEach(function(name) {
86
- dict[name].forEach(function(value) {
87
- callback.call(thisArg, value, name, this);
88
- }, this);
89
- }, this);
81
+ const searchParams = this;
82
+ Object.getOwnPropertyNames(dict).forEach((name) => {
83
+ dict[name].forEach((value) => {
84
+ callback.call(thisArg, value, name, searchParams);
85
+ });
86
+ });
90
87
  }
91
88
  toJSON() {
92
89
  return {};
@@ -100,8 +97,8 @@ const URLSearchParams = process.env.TARO_PLATFORM === "web" ? env.window.URLSear
100
97
  }
101
98
  return query.join("&");
102
99
  }
103
- });
100
+ };
104
101
  //#endregion
105
102
  export { URLSearchParams };
106
103
 
107
- //# sourceMappingURL=URLSearchParams.js.map
104
+ //# sourceMappingURL=url-search-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-search-params.js","names":[],"sources":["../../src/bom/url-search-params.ts"],"sourcesContent":["import { isArray } from '@spcsn/taro-shared';\n\nconst findReg = /[!'()~]|%20|%00/g;\nconst plusReg = /\\+/g;\nconst replaceCharMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00',\n};\n\nfunction replacer(match: string) {\n return replaceCharMap[match];\n}\n\nfunction appendTo(dict: Record<string, string[]>, name: string, value: string) {\n const res = isArray(value) ? value.join(',') : value;\n if (name in dict) dict[name].push(res);\n else dict[name] = [res];\n}\n\nfunction decode(str: string) {\n return decodeURIComponent(str.replace(plusReg, ' '));\n}\n\nfunction encode(str: string) {\n return encodeURIComponent(str).replace(findReg, replacer);\n}\n\nexport class URLSearchParams {\n #dict = Object.create(null);\n\n constructor(query) {\n query ??= '';\n\n const dict = this.#dict;\n\n if (typeof query === 'string') {\n if (query.charAt(0) === '?') {\n query = query.slice(1);\n }\n for (let pairs = query.split('&'), i = 0, length = pairs.length; i < length; i++) {\n const value = pairs[i];\n const index = value.indexOf('=');\n\n // 针对不规范的 url 参数做容错处理,如:word=你%好\n try {\n if (index > -1) {\n appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));\n } else if (value.length) {\n appendTo(dict, decode(value), '');\n }\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[Taro warn] URL 参数 ${value} decode 异常`);\n }\n }\n }\n } else {\n if (isArray(query)) {\n for (let i = 0, length = query.length; i < length; i++) {\n const value = query[i];\n appendTo(dict, value[0], value[1]);\n }\n } else if (query.forEach) {\n query.forEach((value: string, key: string) => appendTo(dict, key, value));\n } else {\n for (const key in query) {\n appendTo(dict, key, query[key]);\n }\n }\n }\n }\n\n append(name: string, value: string) {\n appendTo(this.#dict, name, value);\n }\n\n delete(name: string) {\n delete this.#dict[name];\n }\n\n get(name: string) {\n const dict = this.#dict;\n return name in dict ? dict[name][0] : null;\n }\n\n getAll(name: string) {\n const dict = this.#dict;\n return name in dict ? dict[name].slice(0) : [];\n }\n\n has(name: string) {\n return name in this.#dict;\n }\n\n keys() {\n return Object.keys(this.#dict);\n }\n\n set(name: string, value: string) {\n this.#dict[name] = ['' + value];\n }\n\n forEach(callback, thisArg) {\n const dict = this.#dict;\n const searchParams = this;\n Object.getOwnPropertyNames(dict).forEach((name) => {\n dict[name].forEach((value: string) => {\n callback.call(thisArg, value, name, searchParams);\n });\n });\n }\n\n toJSON() {\n return {};\n }\n\n toString() {\n const dict = this.#dict;\n const query: any[] = [];\n for (const key in dict) {\n const name = encode(key);\n for (let i = 0, value = dict[key]; i < value.length; i++) {\n query.push(name + '=' + encode(value[i]));\n }\n }\n return query.join('&');\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { URLSearchParams } from './url-search-params';
1
2
  declare class TaroURL {
2
3
  #private;
3
4
  static createObjectURL(): void;
@@ -0,0 +1,196 @@
1
+ import { _classPrivateFieldInitSpec } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldInitSpec.js";
2
+ import { _classPrivateFieldSet2 } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldSet2.js";
3
+ import { _classPrivateFieldGet2 } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/classPrivateFieldGet2.js";
4
+ import { URLSearchParams } from "./url-search-params.js";
5
+ import { isString, isUndefined } from "@spcsn/taro-shared";
6
+ //#region src/bom/url.ts
7
+ var _hash = /* @__PURE__ */ new WeakMap();
8
+ var _hostname = /* @__PURE__ */ new WeakMap();
9
+ var _pathname = /* @__PURE__ */ new WeakMap();
10
+ var _port = /* @__PURE__ */ new WeakMap();
11
+ var _protocol = /* @__PURE__ */ new WeakMap();
12
+ var _search = /* @__PURE__ */ new WeakMap();
13
+ var TaroURL = class {
14
+ static createObjectURL() {
15
+ throw new Error("Oops, not support URL.createObjectURL() in miniprogram.");
16
+ }
17
+ static revokeObjectURL() {
18
+ throw new Error("Oops, not support URL.revokeObjectURL() in miniprogram.");
19
+ }
20
+ constructor(url, base) {
21
+ _classPrivateFieldInitSpec(this, _hash, "");
22
+ _classPrivateFieldInitSpec(this, _hostname, "");
23
+ _classPrivateFieldInitSpec(this, _pathname, "");
24
+ _classPrivateFieldInitSpec(this, _port, "");
25
+ _classPrivateFieldInitSpec(this, _protocol, "");
26
+ _classPrivateFieldInitSpec(this, _search, void 0);
27
+ if (!isString(url)) url = String(url);
28
+ const { hash, hostname, pathname, port, protocol, search } = parseUrlBase(url, base);
29
+ _classPrivateFieldSet2(_hash, this, hash);
30
+ _classPrivateFieldSet2(_hostname, this, hostname);
31
+ _classPrivateFieldSet2(_pathname, this, pathname || "/");
32
+ _classPrivateFieldSet2(_port, this, port);
33
+ _classPrivateFieldSet2(_protocol, this, protocol);
34
+ _classPrivateFieldSet2(_search, this, new URLSearchParams(search));
35
+ }
36
+ get protocol() {
37
+ return _classPrivateFieldGet2(_protocol, this);
38
+ }
39
+ set protocol(val) {
40
+ isString(val) && _classPrivateFieldSet2(_protocol, this, val.trim());
41
+ }
42
+ get host() {
43
+ return this.hostname + (this.port ? ":" + this.port : "");
44
+ }
45
+ set host(val) {
46
+ if (val && isString(val)) {
47
+ val = val.trim();
48
+ const { hostname, port } = parseUrl(`//${val}`);
49
+ this.hostname = hostname;
50
+ this.port = port;
51
+ }
52
+ }
53
+ get hostname() {
54
+ return _classPrivateFieldGet2(_hostname, this);
55
+ }
56
+ set hostname(val) {
57
+ val && isString(val) && _classPrivateFieldSet2(_hostname, this, val.trim());
58
+ }
59
+ get port() {
60
+ return _classPrivateFieldGet2(_port, this);
61
+ }
62
+ set port(val) {
63
+ isString(val) && _classPrivateFieldSet2(_port, this, val.trim());
64
+ }
65
+ get pathname() {
66
+ return _classPrivateFieldGet2(_pathname, this);
67
+ }
68
+ set pathname(val) {
69
+ if (isString(val)) {
70
+ val = val.trim();
71
+ const HEAD_REG = /^(\/|\.\/|\.\.\/)/;
72
+ let temp = val;
73
+ while (HEAD_REG.test(temp)) temp = temp.replace(HEAD_REG, "");
74
+ if (temp) _classPrivateFieldSet2(_pathname, this, "/" + temp);
75
+ else _classPrivateFieldSet2(_pathname, this, "/");
76
+ }
77
+ }
78
+ get search() {
79
+ const val = _classPrivateFieldGet2(_search, this).toString();
80
+ return val.length === 0 || val.startsWith("?") ? val : `?${val}`;
81
+ }
82
+ set search(val) {
83
+ if (isString(val)) {
84
+ val = val.trim();
85
+ _classPrivateFieldSet2(_search, this, new URLSearchParams(val));
86
+ }
87
+ }
88
+ get hash() {
89
+ return _classPrivateFieldGet2(_hash, this);
90
+ }
91
+ set hash(val) {
92
+ if (isString(val)) {
93
+ val = val.trim();
94
+ if (val) _classPrivateFieldSet2(_hash, this, val.startsWith("#") ? val : `#${val}`);
95
+ else _classPrivateFieldSet2(_hash, this, "");
96
+ }
97
+ }
98
+ get href() {
99
+ return `${this.protocol}//${this.host}${this.pathname}${this.search}${this.hash}`;
100
+ }
101
+ set href(val) {
102
+ if (val && isString(val)) {
103
+ val = val.trim();
104
+ const { protocol, hostname, port, hash, search, pathname } = parseUrl(val);
105
+ this.protocol = protocol;
106
+ this.hostname = hostname;
107
+ this.pathname = pathname;
108
+ this.port = port;
109
+ this.hash = hash;
110
+ this.search = search;
111
+ }
112
+ }
113
+ get origin() {
114
+ return `${this.protocol}//${this.host}`;
115
+ }
116
+ set origin(val) {
117
+ if (val && isString(val)) {
118
+ val = val.trim();
119
+ const { protocol, hostname, port } = parseUrl(val);
120
+ this.protocol = protocol;
121
+ this.hostname = hostname;
122
+ this.port = port;
123
+ }
124
+ }
125
+ get searchParams() {
126
+ return _classPrivateFieldGet2(_search, this);
127
+ }
128
+ toString() {
129
+ return this.href;
130
+ }
131
+ toJSON() {
132
+ return this.toString();
133
+ }
134
+ _toRaw() {
135
+ return {
136
+ protocol: this.protocol,
137
+ port: this.port,
138
+ host: this.host,
139
+ hostname: this.hostname,
140
+ pathname: this.pathname,
141
+ hash: this.hash,
142
+ search: this.search,
143
+ origin: this.origin,
144
+ href: this.href
145
+ };
146
+ }
147
+ };
148
+ const TaroURLProvider = TaroURL;
149
+ function parseUrl(url = "") {
150
+ const result = {
151
+ href: "",
152
+ origin: "",
153
+ protocol: "",
154
+ hostname: "",
155
+ host: "",
156
+ port: "",
157
+ pathname: "",
158
+ search: "",
159
+ hash: ""
160
+ };
161
+ if (!url || !isString(url)) return result;
162
+ url = url.trim();
163
+ const matches = url.match(/^(([^:/?#]+):)?\/\/(([^/?#]+):(.+)@)?([^/?#:]*)(:(\d+))?([^?#]*)(\?([^#]*))?(#(.*))?/);
164
+ if (!matches) return result;
165
+ result.protocol = matches[1] || "https:";
166
+ result.hostname = matches[6] || "taro.com";
167
+ result.port = matches[8] || "";
168
+ result.pathname = matches[9] || "/";
169
+ result.search = matches[10] || "";
170
+ result.hash = matches[12] || "";
171
+ result.href = url;
172
+ result.origin = result.protocol + "//" + result.hostname + (result.port ? `:${result.port}` : "");
173
+ result.host = result.hostname + (result.port ? `:${result.port}` : "");
174
+ return result;
175
+ }
176
+ function parseUrlBase(url, base) {
177
+ const VALID_URL = /^(https?:)\/\//i;
178
+ let fullUrl = "";
179
+ let parsedBase = null;
180
+ if (!isUndefined(base)) {
181
+ base = String(base).trim();
182
+ if (!VALID_URL.test(base)) throw new TypeError(`Failed to construct 'URL': Invalid base URL`);
183
+ parsedBase = parseUrl(base);
184
+ }
185
+ url = String(url).trim();
186
+ if (VALID_URL.test(url)) fullUrl = url;
187
+ else if (parsedBase) if (url) if (url.startsWith("//")) fullUrl = parsedBase.protocol + url;
188
+ else fullUrl = parsedBase.origin + (url.startsWith("/") ? url : `/${url}`);
189
+ else fullUrl = parsedBase.href;
190
+ else throw new TypeError(`Failed to construct 'URL': Invalid URL`);
191
+ return parseUrl(fullUrl);
192
+ }
193
+ //#endregion
194
+ export { TaroURLProvider };
195
+
196
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","names":[],"sources":["../../src/bom/url.ts"],"sourcesContent":["import { isString, isUndefined } from '@spcsn/taro-shared';\n\nimport { URLSearchParams } from './url-search-params';\n\nclass TaroURL {\n static createObjectURL() {\n throw new Error('Oops, not support URL.createObjectURL() in miniprogram.');\n }\n\n static revokeObjectURL() {\n throw new Error('Oops, not support URL.revokeObjectURL() in miniprogram.');\n }\n\n /* private property */\n #hash = '';\n #hostname = '';\n #pathname = '';\n #port = '';\n #protocol = '';\n #search: URLSearchParams;\n\n constructor(url: string, base?: string) {\n if (!isString(url)) url = String(url);\n\n const parseResult = parseUrlBase(url, base);\n const { hash, hostname, pathname, port, protocol, search } = parseResult;\n\n this.#hash = hash;\n this.#hostname = hostname;\n this.#pathname = pathname || '/';\n this.#port = port;\n this.#protocol = protocol;\n this.#search = new URLSearchParams(search);\n }\n\n /* public property */\n get protocol() {\n return this.#protocol;\n }\n\n set protocol(val: string) {\n isString(val) && (this.#protocol = val.trim());\n }\n\n get host() {\n return this.hostname + (this.port ? ':' + this.port : '');\n }\n\n set host(val: string) {\n if (val && isString(val)) {\n val = val.trim();\n const { hostname, port } = parseUrl(`//${val}`);\n this.hostname = hostname;\n this.port = port;\n }\n }\n\n get hostname() {\n return this.#hostname;\n }\n\n set hostname(val: string) {\n val && isString(val) && (this.#hostname = val.trim());\n }\n\n get port() {\n return this.#port;\n }\n\n set port(val: string) {\n isString(val) && (this.#port = val.trim());\n }\n\n get pathname() {\n return this.#pathname;\n }\n\n set pathname(val: string) {\n if (isString(val)) {\n val = val.trim();\n const HEAD_REG = /^(\\/|\\.\\/|\\.\\.\\/)/;\n let temp = val;\n while (HEAD_REG.test(temp)) {\n temp = temp.replace(HEAD_REG, '');\n }\n if (temp) this.#pathname = '/' + temp;\n else this.#pathname = '/';\n }\n }\n\n get search() {\n const val = this.#search.toString();\n return val.length === 0 || val.startsWith('?') ? val : `?${val}`;\n }\n\n set search(val: string) {\n if (isString(val)) {\n val = val.trim();\n this.#search = new URLSearchParams(val);\n }\n }\n\n get hash() {\n return this.#hash;\n }\n\n set hash(val: string) {\n if (isString(val)) {\n val = val.trim();\n if (val) this.#hash = val.startsWith('#') ? val : `#${val}`;\n else this.#hash = '';\n }\n }\n\n get href() {\n return `${this.protocol}//${this.host}${this.pathname}${this.search}${this.hash}`;\n }\n\n set href(val: string) {\n if (val && isString(val)) {\n val = val.trim();\n const { protocol, hostname, port, hash, search, pathname } = parseUrl(val);\n this.protocol = protocol;\n this.hostname = hostname;\n this.pathname = pathname;\n this.port = port;\n this.hash = hash;\n this.search = search;\n }\n }\n\n get origin() {\n return `${this.protocol}//${this.host}`;\n }\n\n set origin(val: string) {\n if (val && isString(val)) {\n val = val.trim();\n const { protocol, hostname, port } = parseUrl(val);\n this.protocol = protocol;\n this.hostname = hostname;\n this.port = port;\n }\n }\n\n get searchParams() {\n return this.#search;\n }\n\n // public method\n toString() {\n return this.href;\n }\n\n toJSON() {\n return this.toString();\n }\n\n // convenient for deconstructor\n _toRaw() {\n return {\n protocol: this.protocol,\n port: this.port,\n host: this.host,\n hostname: this.hostname,\n pathname: this.pathname,\n hash: this.hash,\n search: this.search,\n origin: this.origin,\n href: this.href,\n };\n }\n}\n\nexport type { TaroURL };\n\n// Note: 小程序端 vite 打包成 commonjs,const URL = xxx 会报错,所以把 URL 改为 TaroURLProvider\nexport const TaroURLProvider: typeof TaroURL = TaroURL;\n\nexport function parseUrl(url = '') {\n const result = {\n href: '',\n origin: '',\n protocol: '',\n hostname: '',\n host: '',\n port: '',\n pathname: '',\n search: '',\n hash: '',\n };\n if (!url || !isString(url)) return result;\n\n url = url.trim();\n const PATTERN = /^(([^:/?#]+):)?\\/\\/(([^/?#]+):(.+)@)?([^/?#:]*)(:(\\d+))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n const matches = url.match(PATTERN);\n\n if (!matches) return result;\n\n // TODO: username & password ?\n result.protocol = matches[1] || 'https:';\n result.hostname = matches[6] || 'taro.com';\n result.port = matches[8] || '';\n result.pathname = matches[9] || '/';\n result.search = matches[10] || '';\n result.hash = matches[12] || '';\n result.href = url;\n result.origin = result.protocol + '//' + result.hostname + (result.port ? `:${result.port}` : '');\n result.host = result.hostname + (result.port ? `:${result.port}` : '');\n\n return result;\n}\n\nfunction parseUrlBase(url: string, base?: string) {\n const VALID_URL = /^(https?:)\\/\\//i;\n\n let fullUrl = '';\n let parsedBase: ReturnType<typeof parseUrl> | null = null;\n\n if (!isUndefined(base)) {\n base = String(base).trim();\n if (!VALID_URL.test(base)) throw new TypeError(`Failed to construct 'URL': Invalid base URL`);\n parsedBase = parseUrl(base);\n }\n\n url = String(url).trim();\n\n if (VALID_URL.test(url)) {\n fullUrl = url;\n } else if (parsedBase) {\n if (url) {\n if (url.startsWith('//')) {\n fullUrl = parsedBase.protocol + url;\n } else {\n fullUrl = parsedBase.origin + (url.startsWith('/') ? url : `/${url}`);\n }\n } else {\n fullUrl = parsedBase.href;\n }\n } else {\n throw new TypeError(`Failed to construct 'URL': Invalid URL`);\n }\n\n return parseUrl(fullUrl);\n}\n"],"mappings":"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"}
@@ -3,9 +3,9 @@ import type { TaroHistory } from './history';
3
3
  import type { TaroLocation } from './location';
4
4
  export declare class TaroWindow extends Events {
5
5
  navigator: Navigator;
6
- requestAnimationFrame: typeof requestAnimationFrame | ((callback: any) => NodeJS.Timeout);
7
- cancelAnimationFrame: typeof cancelAnimationFrame;
8
- getComputedStyle: import("./getComputedStyle").TGetComputedStyle;
6
+ requestAnimationFrame: (callback: any) => NodeJS.Timeout;
7
+ cancelAnimationFrame: (seed: any) => void;
8
+ getComputedStyle: import("./get-computed-style").TGetComputedStyle;
9
9
  Date: DateConstructor;
10
10
  location: TaroLocation;
11
11
  history: TaroHistory;
@@ -1,7 +1,7 @@
1
1
  import "../constants/index.js";
2
2
  import { Events } from "../emitter/emitter.js";
3
3
  import env from "../env.js";
4
- import { taroGetComputedStyleProvider } from "./getComputedStyle.js";
4
+ import { taroGetComputedStyleProvider } from "./get-computed-style.js";
5
5
  import { History } from "./history.js";
6
6
  import { Location } from "./location.js";
7
7
  import { nav } from "./navigator.js";
@@ -65,7 +65,7 @@ var TaroWindow = class extends Events {
65
65
  return clearTimeout(...args);
66
66
  }
67
67
  };
68
- const taroWindowProvider = process.env.TARO_PLATFORM === "web" ? env.window : env.window = new TaroWindow();
68
+ const taroWindowProvider = env.window = new TaroWindow();
69
69
  const taroLocationProvider = taroWindowProvider.location;
70
70
  const taroHistoryProvider = taroWindowProvider.history;
71
71
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"window.js","names":["navigator","raf","caf"],"sources":["../../src/bom/window.ts"],"sourcesContent":["import { isString } from '@spcsn/taro-shared';\n\nimport { CONTEXT_ACTIONS } from '../constants';\nimport { Events } from '../emitter/emitter';\nimport env from '../env';\nimport { taroGetComputedStyleProvider } from './getComputedStyle';\nimport { History } from './history';\nimport { Location } from './location';\nimport { nav as navigator } from './navigator';\nimport { caf, raf } from './raf';\n\nimport type { TaroHistory } from './history';\nimport type { TaroLocation } from './location';\n\nexport class TaroWindow extends Events {\n navigator = navigator;\n requestAnimationFrame = raf;\n cancelAnimationFrame = caf;\n getComputedStyle = taroGetComputedStyleProvider;\n Date: DateConstructor;\n\n location: TaroLocation;\n history: TaroHistory;\n XMLHttpRequest?: Partial<XMLHttpRequest>;\n\n constructor() {\n super();\n\n const globalProperties = [\n ...Object.getOwnPropertyNames(global || {}),\n ...Object.getOwnPropertySymbols(global || {}),\n ];\n\n globalProperties.forEach((property) => {\n if (property === 'atob' || property === 'document') return;\n if (!Object.prototype.hasOwnProperty.call(this, property)) {\n // 防止小程序环境下,window 上的某些 get 属性在赋值时报错\n try {\n this[property] = global[property];\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[Taro warn] window.${String(property)} 在赋值到 window 时报错`);\n }\n }\n }\n });\n\n this.Date ||= Date;\n\n // 应用启动时,提供给需要读取历史信息的库使用\n this.location = new Location({ window: this }) as any;\n // @ts-ignore\n this.history = new History(this.location, { window: this });\n\n this.initEvent();\n }\n\n initEvent() {\n const _location = this.location;\n const _history = this.history;\n\n this.on(\n CONTEXT_ACTIONS.INIT,\n (pageId: string) => {\n // 页面 onload,为该页面建立新的上下文信息\n _location.trigger(CONTEXT_ACTIONS.INIT, pageId);\n },\n null,\n );\n\n this.on(\n CONTEXT_ACTIONS.RECOVER,\n (pageId: string) => {\n // 页面 onshow,恢复当前页面的上下文信息\n _location.trigger(CONTEXT_ACTIONS.RECOVER, pageId);\n _history.trigger(CONTEXT_ACTIONS.RECOVER, pageId);\n },\n null,\n );\n\n this.on(\n CONTEXT_ACTIONS.RESTORE,\n (pageId: string) => {\n // 页面 onhide,缓存当前页面的上下文信息\n _location.trigger(CONTEXT_ACTIONS.RESTORE, pageId);\n _history.trigger(CONTEXT_ACTIONS.RESTORE, pageId);\n },\n null,\n );\n\n this.on(\n CONTEXT_ACTIONS.DESTROY,\n (pageId: string) => {\n // 页面 onunload,清除当前页面的上下文信息\n _location.trigger(CONTEXT_ACTIONS.DESTROY, pageId);\n _history.trigger(CONTEXT_ACTIONS.DESTROY, pageId);\n },\n null,\n );\n }\n\n get document() {\n return env.document;\n }\n\n addEventListener(event: string, callback: (arg: any) => void) {\n if (!isString(event)) return;\n this.on(event, callback, null);\n }\n\n removeEventListener(event: string, callback: (arg: any) => void) {\n if (!isString(event)) return;\n this.off(event, callback, null);\n }\n\n setTimeout(...args: Parameters<typeof setTimeout>) {\n return setTimeout(...args);\n }\n\n clearTimeout(...args: Parameters<typeof clearTimeout>) {\n return clearTimeout(...args);\n }\n}\n\n// Note: 小程序端 vite 打包成 commonjs,const window = xxx 会报错,所以把 window 改为 taroWindowProvider,location 和 history 同理\nexport const taroWindowProvider: TaroWindow =\n process.env.TARO_PLATFORM === 'web' ? env.window : (env.window = new TaroWindow());\nexport const taroLocationProvider = taroWindowProvider.location;\nexport const taroHistoryProvider = taroWindowProvider.history;\n"],"mappings":";;;;;;;;;;AAcA,IAAa,aAAb,cAAgC,OAAO;CAWrC,cAAc;EACZ,MAAM;EAXR,KAAA,YAAYA;EACZ,KAAA,wBAAwBC;EACxB,KAAA,uBAAuBC;EACvB,KAAA,mBAAmB;EAejB,CAJE,GAAG,OAAO,oBAAoB,UAAU,CAAC,CAAC,GAC1C,GAAG,OAAO,sBAAsB,UAAU,CAAC,CAAC,CAG/B,EAAE,SAAS,aAAa;GACrC,IAAI,aAAa,UAAU,aAAa,YAAY;GACpD,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,QAAQ,GAEtD,IAAI;IACF,KAAK,YAAY,OAAO;GAC1B,SAAS,GAAG;IAER,QAAQ,KAAK,sBAAsB,OAAO,QAAQ,EAAE,iBAAiB;GAEzE;EAEJ,CAAC;EAED,KAAK,SAAA,KAAA,OAAS;EAGd,KAAK,WAAW,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;EAE7C,KAAK,UAAU,IAAI,QAAQ,KAAK,UAAU,EAAE,QAAQ,KAAK,CAAC;EAE1D,KAAK,UAAU;CACjB;CAEA,YAAY;EACV,MAAM,YAAY,KAAK;EACvB,MAAM,WAAW,KAAK;EAEtB,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAA8B,MAAM;EAChD,GACA,IACF;EAEA,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAAiC,MAAM;GACjD,SAAS,QAAA,KAAiC,MAAM;EAClD,GACA,IACF;EAEA,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAAiC,MAAM;GACjD,SAAS,QAAA,KAAiC,MAAM;EAClD,GACA,IACF;EAEA,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAAiC,MAAM;GACjD,SAAS,QAAA,KAAiC,MAAM;EAClD,GACA,IACF;CACF;CAEA,IAAI,WAAW;EACb,OAAO,IAAI;CACb;CAEA,iBAAiB,OAAe,UAA8B;EAC5D,IAAI,CAAC,SAAS,KAAK,GAAG;EACtB,KAAK,GAAG,OAAO,UAAU,IAAI;CAC/B;CAEA,oBAAoB,OAAe,UAA8B;EAC/D,IAAI,CAAC,SAAS,KAAK,GAAG;EACtB,KAAK,IAAI,OAAO,UAAU,IAAI;CAChC;CAEA,WAAW,GAAG,MAAqC;EACjD,OAAO,WAAW,GAAG,IAAI;CAC3B;CAEA,aAAa,GAAG,MAAuC;EACrD,OAAO,aAAa,GAAG,IAAI;CAC7B;AACF;AAGA,MAAa,qBACX,QAAQ,IAAI,kBAAkB,QAAQ,IAAI,SAAU,IAAI,SAAS,IAAI,WAAW;AAClF,MAAa,uBAAuB,mBAAmB;AACvD,MAAa,sBAAsB,mBAAmB"}
1
+ {"version":3,"file":"window.js","names":["navigator","raf","caf"],"sources":["../../src/bom/window.ts"],"sourcesContent":["import { isString } from '@spcsn/taro-shared';\n\nimport { CONTEXT_ACTIONS } from '../constants';\nimport { Events } from '../emitter/emitter';\nimport env from '../env';\nimport { taroGetComputedStyleProvider } from './get-computed-style';\nimport { History } from './history';\nimport { Location } from './location';\nimport { nav as navigator } from './navigator';\nimport { caf, raf } from './raf';\n\nimport type { TaroHistory } from './history';\nimport type { TaroLocation } from './location';\n\nexport class TaroWindow extends Events {\n navigator = navigator;\n requestAnimationFrame = raf;\n cancelAnimationFrame = caf;\n getComputedStyle = taroGetComputedStyleProvider;\n Date: DateConstructor;\n\n location: TaroLocation;\n history: TaroHistory;\n XMLHttpRequest?: Partial<XMLHttpRequest>;\n\n constructor() {\n super();\n\n const globalProperties = [\n ...Object.getOwnPropertyNames(global || {}),\n ...Object.getOwnPropertySymbols(global || {}),\n ];\n\n globalProperties.forEach((property) => {\n if (property === 'atob' || property === 'document') return;\n if (!Object.prototype.hasOwnProperty.call(this, property)) {\n // 防止小程序环境下,window 上的某些 get 属性在赋值时报错\n try {\n this[property] = global[property];\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[Taro warn] window.${String(property)} 在赋值到 window 时报错`);\n }\n }\n }\n });\n\n this.Date ||= Date;\n\n // 应用启动时,提供给需要读取历史信息的库使用\n this.location = new Location({ window: this });\n this.history = new History(this.location, { window: this });\n\n this.initEvent();\n }\n\n initEvent() {\n const _location = this.location;\n const _history = this.history;\n\n this.on(\n CONTEXT_ACTIONS.INIT,\n (pageId: string) => {\n // 页面 onload,为该页面建立新的上下文信息\n _location.trigger(CONTEXT_ACTIONS.INIT, pageId);\n },\n null,\n );\n\n this.on(\n CONTEXT_ACTIONS.RECOVER,\n (pageId: string) => {\n // 页面 onshow,恢复当前页面的上下文信息\n _location.trigger(CONTEXT_ACTIONS.RECOVER, pageId);\n _history.trigger(CONTEXT_ACTIONS.RECOVER, pageId);\n },\n null,\n );\n\n this.on(\n CONTEXT_ACTIONS.RESTORE,\n (pageId: string) => {\n // 页面 onhide,缓存当前页面的上下文信息\n _location.trigger(CONTEXT_ACTIONS.RESTORE, pageId);\n _history.trigger(CONTEXT_ACTIONS.RESTORE, pageId);\n },\n null,\n );\n\n this.on(\n CONTEXT_ACTIONS.DESTROY,\n (pageId: string) => {\n // 页面 onunload,清除当前页面的上下文信息\n _location.trigger(CONTEXT_ACTIONS.DESTROY, pageId);\n _history.trigger(CONTEXT_ACTIONS.DESTROY, pageId);\n },\n null,\n );\n }\n\n get document() {\n return env.document;\n }\n\n addEventListener(event: string, callback: (arg: any) => void) {\n if (!isString(event)) return;\n this.on(event, callback, null);\n }\n\n removeEventListener(event: string, callback: (arg: any) => void) {\n if (!isString(event)) return;\n this.off(event, callback, null);\n }\n\n setTimeout(...args: Parameters<typeof setTimeout>) {\n return setTimeout(...args);\n }\n\n clearTimeout(...args: Parameters<typeof clearTimeout>) {\n return clearTimeout(...args);\n }\n}\n\n// Note: 小程序端 vite 打包成 commonjs,const window = xxx 会报错,所以把 window 改为 taroWindowProvider,location 和 history 同理\nexport const taroWindowProvider: TaroWindow = (env.window = new TaroWindow());\nexport const taroLocationProvider = taroWindowProvider.location;\nexport const taroHistoryProvider = taroWindowProvider.history;\n"],"mappings":";;;;;;;;;;AAcA,IAAa,aAAb,cAAgC,OAAO;CAWrC,cAAc;EACZ,MAAM;EAXR,KAAA,YAAYA;EACZ,KAAA,wBAAwBC;EACxB,KAAA,uBAAuBC;EACvB,KAAA,mBAAmB;EAejB,CAJE,GAAG,OAAO,oBAAoB,UAAU,CAAC,CAAC,GAC1C,GAAG,OAAO,sBAAsB,UAAU,CAAC,CAAC,CAG/B,EAAE,SAAS,aAAa;GACrC,IAAI,aAAa,UAAU,aAAa,YAAY;GACpD,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,QAAQ,GAEtD,IAAI;IACF,KAAK,YAAY,OAAO;GAC1B,SAAS,GAAG;IAER,QAAQ,KAAK,sBAAsB,OAAO,QAAQ,EAAE,iBAAiB;GAEzE;EAEJ,CAAC;EAED,KAAK,SAAA,KAAA,OAAS;EAGd,KAAK,WAAW,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;EAC7C,KAAK,UAAU,IAAI,QAAQ,KAAK,UAAU,EAAE,QAAQ,KAAK,CAAC;EAE1D,KAAK,UAAU;CACjB;CAEA,YAAY;EACV,MAAM,YAAY,KAAK;EACvB,MAAM,WAAW,KAAK;EAEtB,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAA8B,MAAM;EAChD,GACA,IACF;EAEA,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAAiC,MAAM;GACjD,SAAS,QAAA,KAAiC,MAAM;EAClD,GACA,IACF;EAEA,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAAiC,MAAM;GACjD,SAAS,QAAA,KAAiC,MAAM;EAClD,GACA,IACF;EAEA,KAAK,GAAA,MAEF,WAAmB;GAElB,UAAU,QAAA,KAAiC,MAAM;GACjD,SAAS,QAAA,KAAiC,MAAM;EAClD,GACA,IACF;CACF;CAEA,IAAI,WAAW;EACb,OAAO,IAAI;CACb;CAEA,iBAAiB,OAAe,UAA8B;EAC5D,IAAI,CAAC,SAAS,KAAK,GAAG;EACtB,KAAK,GAAG,OAAO,UAAU,IAAI;CAC/B;CAEA,oBAAoB,OAAe,UAA8B;EAC/D,IAAI,CAAC,SAAS,KAAK,GAAG;EACtB,KAAK,IAAI,OAAO,UAAU,IAAI;CAChC;CAEA,WAAW,GAAG,MAAqC;EACjD,OAAO,WAAW,GAAG,IAAI;CAC3B;CAEA,aAAa,GAAG,MAAuC;EACrD,OAAO,aAAa,GAAG,IAAI;CAC7B;AACF;AAGA,MAAa,qBAAkC,IAAI,SAAS,IAAI,WAAW;AAC3E,MAAa,uBAAuB,mBAAmB;AACvD,MAAa,sBAAsB,mBAAmB"}
package/dist/current.d.ts CHANGED
@@ -15,5 +15,8 @@ interface Current {
15
15
  preloadData?: any;
16
16
  }
17
17
  export declare const Current: Current;
18
+ type AppReadyCallback = (app: AppInstance) => void;
19
+ export declare function setCurrentApp(app: AppInstance): void;
20
+ export declare function whenAppReady(callback: AppReadyCallback): void;
18
21
  export declare const getCurrentInstance: () => Current;
19
22
  export {};
package/dist/current.js CHANGED
@@ -4,8 +4,17 @@ const Current = {
4
4
  router: null,
5
5
  page: null
6
6
  };
7
+ const appReadyCallbacks = [];
8
+ function setCurrentApp(app) {
9
+ Current.app = app;
10
+ while (appReadyCallbacks.length) appReadyCallbacks.shift()(app);
11
+ }
12
+ function whenAppReady(callback) {
13
+ if (Current.app) callback(Current.app);
14
+ else appReadyCallbacks.push(callback);
15
+ }
7
16
  const getCurrentInstance = () => Current;
8
17
  //#endregion
9
- export { Current, getCurrentInstance };
18
+ export { Current, getCurrentInstance, setCurrentApp, whenAppReady };
10
19
 
11
20
  //# sourceMappingURL=current.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"current.js","names":[],"sources":["../src/current.ts"],"sourcesContent":["import { AppInstance, PageInstance } from './dsl/instance';\n\nexport interface Router {\n params: Record<string, unknown>;\n path: string;\n $taroPath: string;\n onReady: string;\n onHide: string;\n onShow: string;\n exitState?: any;\n}\n\ninterface Current {\n app: AppInstance | null;\n router: Router | null;\n page: PageInstance | null;\n preloadData?: any;\n}\n\nexport const Current: Current = {\n app: null,\n router: null,\n page: null,\n};\n\nexport const getCurrentInstance = () => Current;\n"],"mappings":";AAmBA,MAAa,UAAmB;CAC9B,KAAK;CACL,QAAQ;CACR,MAAM;AACR;AAEA,MAAa,2BAA2B"}
1
+ {"version":3,"file":"current.js","names":[],"sources":["../src/current.ts"],"sourcesContent":["import { AppInstance, PageInstance } from './dsl/instance';\n\nexport interface Router {\n params: Record<string, unknown>;\n path: string;\n $taroPath: string;\n onReady: string;\n onHide: string;\n onShow: string;\n exitState?: any;\n}\n\ninterface Current {\n app: AppInstance | null;\n router: Router | null;\n page: PageInstance | null;\n preloadData?: any;\n}\n\nexport const Current: Current = {\n app: null,\n router: null,\n page: null,\n};\n\ntype AppReadyCallback = (app: AppInstance) => void;\n\nconst appReadyCallbacks: AppReadyCallback[] = [];\n\nexport function setCurrentApp(app: AppInstance) {\n Current.app = app;\n\n while (appReadyCallbacks.length) {\n appReadyCallbacks.shift()!(app);\n }\n}\n\nexport function whenAppReady(callback: AppReadyCallback) {\n if (Current.app) {\n callback(Current.app);\n } else {\n appReadyCallbacks.push(callback);\n }\n}\n\nexport const getCurrentInstance = () => Current;\n"],"mappings":";AAmBA,MAAa,UAAmB;CAC9B,KAAK;CACL,QAAQ;CACR,MAAM;AACR;AAIA,MAAM,oBAAwC,CAAC;AAE/C,SAAgB,cAAc,KAAkB;CAC9C,QAAQ,MAAM;CAEd,OAAO,kBAAkB,QACvB,kBAAkB,MAAM,EAAG,GAAG;AAElC;AAEA,SAAgB,aAAa,UAA4B;CACvD,IAAI,QAAQ,KACV,SAAS,QAAQ,GAAG;MAEpB,kBAAkB,KAAK,QAAQ;AAEnC;AAEA,MAAa,2BAA2B"}
@@ -1,5 +1,5 @@
1
- import { parseUrl } from "../bom/URL.js";
2
1
  import { TaroElement } from "./element.js";
2
+ import { parseUrl } from "../bom/URL2.js";
3
3
  //#region src/dom/anchor-element.ts
4
4
  var AnchorElement = class extends TaroElement {
5
5
  get href() {
@@ -50,7 +50,8 @@ var ClassList = class {
50
50
  toggle(token, force) {
51
51
  const result = this.contains(token);
52
52
  const method = result ? force !== true && "remove" : force !== false && "add";
53
- if (method) this[method](token);
53
+ if (method === "add") this.add(token);
54
+ if (method === "remove") this.remove(token);
54
55
  if (force === true || force === false) return force;
55
56
  else return !result;
56
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"class-list.js","names":[],"sources":["../../src/dom/class-list.ts"],"sourcesContent":["import type { TaroElement } from './element';\n\nexport class ClassList {\n private el: TaroElement;\n\n private tokenList: string[] = [];\n\n constructor(className: string, el: TaroElement) {\n this.el = el;\n className\n .trim()\n .split(/\\s+/)\n .forEach((token) => this.tokenList.push(token));\n }\n\n public get value() {\n return this.toString();\n }\n\n public get length() {\n return this.tokenList.length;\n }\n\n add() {\n let index = 0;\n let updated = false;\n\n const tokens = arguments;\n const length = tokens.length;\n const tokenList = this.tokenList;\n\n do {\n const token: string = tokens[index];\n\n if (this.checkTokenIsValid(token) && !~tokenList.indexOf(token)) {\n tokenList.push(token);\n\n updated = true;\n }\n } while (++index < length);\n\n if (updated) {\n this._update();\n }\n }\n\n remove() {\n let i = 0;\n let updated = false;\n\n const tokens = arguments;\n const length = tokens.length;\n const tokenList = this.tokenList;\n\n do {\n const token = tokens[i] + '';\n\n if (!this.checkTokenIsValid(token)) continue;\n\n const index = tokenList.indexOf(token);\n\n if (~tokenList.indexOf(token)) {\n tokenList.splice(index, 1);\n\n updated = true;\n }\n } while (++i < length);\n\n if (updated) {\n this._update();\n }\n }\n\n contains(token: string) {\n if (!this.checkTokenIsValid(token)) return false;\n\n return !!~this.tokenList.indexOf(token);\n }\n\n toggle(token: string, force: boolean) {\n const result = this.contains(token);\n const method = result ? force !== true && 'remove' : force !== false && 'add';\n\n if (method) {\n // @ts-ignore\n this[method](token);\n }\n\n if (force === true || force === false) {\n return force;\n } else {\n return !result;\n }\n }\n\n replace(token: string, replacement_token: string) {\n if (!this.checkTokenIsValid(token) || !this.checkTokenIsValid(replacement_token)) return;\n\n const index = this.tokenList.indexOf(token);\n\n if (~index) {\n this.tokenList.splice(index, 1, replacement_token);\n this._update();\n }\n }\n\n toString() {\n return this.tokenList.filter((v) => v !== '').join(' ');\n }\n\n private checkTokenIsValid(token: string) {\n if (token === '' || /\\s/.test(token)) return false;\n\n return true;\n }\n\n private _update() {\n this.el.className = this.value;\n }\n}\n"],"mappings":";AAEA,IAAa,YAAb,MAAuB;CAKrB,YAAY,WAAmB,IAAiB;EAFhD,KAAQ,YAAsB,CAAC;EAG7B,KAAK,KAAK;EACV,UACG,KAAK,EACL,MAAM,KAAK,EACX,SAAS,UAAU,KAAK,UAAU,KAAK,KAAK,CAAC;CAClD;CAEA,IAAW,QAAQ;EACjB,OAAO,KAAK,SAAS;CACvB;CAEA,IAAW,SAAS;EAClB,OAAO,KAAK,UAAU;CACxB;CAEA,MAAM;EACJ,IAAI,QAAQ;EACZ,IAAI,UAAU;EAEd,MAAM,SAAS;EACf,MAAM,SAAS,OAAO;EACtB,MAAM,YAAY,KAAK;EAEvB,GAAG;GACD,MAAM,QAAgB,OAAO;GAE7B,IAAI,KAAK,kBAAkB,KAAK,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,GAAG;IAC/D,UAAU,KAAK,KAAK;IAEpB,UAAU;GACZ;EACF,SAAS,EAAE,QAAQ;EAEnB,IAAI,SACF,KAAK,QAAQ;CAEjB;CAEA,SAAS;EACP,IAAI,IAAI;EACR,IAAI,UAAU;EAEd,MAAM,SAAS;EACf,MAAM,SAAS,OAAO;EACtB,MAAM,YAAY,KAAK;EAEvB,GAAG;GACD,MAAM,QAAQ,OAAO,KAAK;GAE1B,IAAI,CAAC,KAAK,kBAAkB,KAAK,GAAG;GAEpC,MAAM,QAAQ,UAAU,QAAQ,KAAK;GAErC,IAAI,CAAC,UAAU,QAAQ,KAAK,GAAG;IAC7B,UAAU,OAAO,OAAO,CAAC;IAEzB,UAAU;GACZ;EACF,SAAS,EAAE,IAAI;EAEf,IAAI,SACF,KAAK,QAAQ;CAEjB;CAEA,SAAS,OAAe;EACtB,IAAI,CAAC,KAAK,kBAAkB,KAAK,GAAG,OAAO;EAE3C,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,QAAQ,KAAK;CACxC;CAEA,OAAO,OAAe,OAAgB;EACpC,MAAM,SAAS,KAAK,SAAS,KAAK;EAClC,MAAM,SAAS,SAAS,UAAU,QAAQ,WAAW,UAAU,SAAS;EAExE,IAAI,QAEF,KAAK,QAAQ,KAAK;EAGpB,IAAI,UAAU,QAAQ,UAAU,OAC9B,OAAO;OAEP,OAAO,CAAC;CAEZ;CAEA,QAAQ,OAAe,mBAA2B;EAChD,IAAI,CAAC,KAAK,kBAAkB,KAAK,KAAK,CAAC,KAAK,kBAAkB,iBAAiB,GAAG;EAElF,MAAM,QAAQ,KAAK,UAAU,QAAQ,KAAK;EAE1C,IAAI,CAAC,OAAO;GACV,KAAK,UAAU,OAAO,OAAO,GAAG,iBAAiB;GACjD,KAAK,QAAQ;EACf;CACF;CAEA,WAAW;EACT,OAAO,KAAK,UAAU,QAAQ,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG;CACxD;CAEA,kBAA0B,OAAe;EACvC,IAAI,UAAU,MAAM,KAAK,KAAK,KAAK,GAAG,OAAO;EAE7C,OAAO;CACT;CAEA,UAAkB;EAChB,KAAK,GAAG,YAAY,KAAK;CAC3B;AACF"}
1
+ {"version":3,"file":"class-list.js","names":[],"sources":["../../src/dom/class-list.ts"],"sourcesContent":["import type { TaroElement } from './element';\n\nexport class ClassList {\n private el: TaroElement;\n\n private tokenList: string[] = [];\n\n constructor(className: string, el: TaroElement) {\n this.el = el;\n className\n .trim()\n .split(/\\s+/)\n .forEach((token) => this.tokenList.push(token));\n }\n\n public get value() {\n return this.toString();\n }\n\n public get length() {\n return this.tokenList.length;\n }\n\n add() {\n let index = 0;\n let updated = false;\n\n const tokens = arguments;\n const length = tokens.length;\n const tokenList = this.tokenList;\n\n do {\n const token: string = tokens[index];\n\n if (this.checkTokenIsValid(token) && !~tokenList.indexOf(token)) {\n tokenList.push(token);\n\n updated = true;\n }\n } while (++index < length);\n\n if (updated) {\n this._update();\n }\n }\n\n remove() {\n let i = 0;\n let updated = false;\n\n const tokens = arguments;\n const length = tokens.length;\n const tokenList = this.tokenList;\n\n do {\n const token = tokens[i] + '';\n\n if (!this.checkTokenIsValid(token)) continue;\n\n const index = tokenList.indexOf(token);\n\n if (~tokenList.indexOf(token)) {\n tokenList.splice(index, 1);\n\n updated = true;\n }\n } while (++i < length);\n\n if (updated) {\n this._update();\n }\n }\n\n contains(token: string) {\n if (!this.checkTokenIsValid(token)) return false;\n\n return !!~this.tokenList.indexOf(token);\n }\n\n toggle(token: string, force: boolean) {\n const result = this.contains(token);\n const method = result ? force !== true && 'remove' : force !== false && 'add';\n\n if (method === 'add') {\n this.add(token);\n }\n\n if (method === 'remove') {\n this.remove(token);\n }\n\n if (force === true || force === false) {\n return force;\n } else {\n return !result;\n }\n }\n\n replace(token: string, replacement_token: string) {\n if (!this.checkTokenIsValid(token) || !this.checkTokenIsValid(replacement_token)) return;\n\n const index = this.tokenList.indexOf(token);\n\n if (~index) {\n this.tokenList.splice(index, 1, replacement_token);\n this._update();\n }\n }\n\n toString() {\n return this.tokenList.filter((v) => v !== '').join(' ');\n }\n\n private checkTokenIsValid(token: string) {\n if (token === '' || /\\s/.test(token)) return false;\n\n return true;\n }\n\n private _update() {\n this.el.className = this.value;\n }\n}\n"],"mappings":";AAEA,IAAa,YAAb,MAAuB;CAKrB,YAAY,WAAmB,IAAiB;EAFhD,KAAQ,YAAsB,CAAC;EAG7B,KAAK,KAAK;EACV,UACG,KAAK,EACL,MAAM,KAAK,EACX,SAAS,UAAU,KAAK,UAAU,KAAK,KAAK,CAAC;CAClD;CAEA,IAAW,QAAQ;EACjB,OAAO,KAAK,SAAS;CACvB;CAEA,IAAW,SAAS;EAClB,OAAO,KAAK,UAAU;CACxB;CAEA,MAAM;EACJ,IAAI,QAAQ;EACZ,IAAI,UAAU;EAEd,MAAM,SAAS;EACf,MAAM,SAAS,OAAO;EACtB,MAAM,YAAY,KAAK;EAEvB,GAAG;GACD,MAAM,QAAgB,OAAO;GAE7B,IAAI,KAAK,kBAAkB,KAAK,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,GAAG;IAC/D,UAAU,KAAK,KAAK;IAEpB,UAAU;GACZ;EACF,SAAS,EAAE,QAAQ;EAEnB,IAAI,SACF,KAAK,QAAQ;CAEjB;CAEA,SAAS;EACP,IAAI,IAAI;EACR,IAAI,UAAU;EAEd,MAAM,SAAS;EACf,MAAM,SAAS,OAAO;EACtB,MAAM,YAAY,KAAK;EAEvB,GAAG;GACD,MAAM,QAAQ,OAAO,KAAK;GAE1B,IAAI,CAAC,KAAK,kBAAkB,KAAK,GAAG;GAEpC,MAAM,QAAQ,UAAU,QAAQ,KAAK;GAErC,IAAI,CAAC,UAAU,QAAQ,KAAK,GAAG;IAC7B,UAAU,OAAO,OAAO,CAAC;IAEzB,UAAU;GACZ;EACF,SAAS,EAAE,IAAI;EAEf,IAAI,SACF,KAAK,QAAQ;CAEjB;CAEA,SAAS,OAAe;EACtB,IAAI,CAAC,KAAK,kBAAkB,KAAK,GAAG,OAAO;EAE3C,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,QAAQ,KAAK;CACxC;CAEA,OAAO,OAAe,OAAgB;EACpC,MAAM,SAAS,KAAK,SAAS,KAAK;EAClC,MAAM,SAAS,SAAS,UAAU,QAAQ,WAAW,UAAU,SAAS;EAExE,IAAI,WAAW,OACb,KAAK,IAAI,KAAK;EAGhB,IAAI,WAAW,UACb,KAAK,OAAO,KAAK;EAGnB,IAAI,UAAU,QAAQ,UAAU,OAC9B,OAAO;OAEP,OAAO,CAAC;CAEZ;CAEA,QAAQ,OAAe,mBAA2B;EAChD,IAAI,CAAC,KAAK,kBAAkB,KAAK,KAAK,CAAC,KAAK,kBAAkB,iBAAiB,GAAG;EAElF,MAAM,QAAQ,KAAK,UAAU,QAAQ,KAAK;EAE1C,IAAI,CAAC,OAAO;GACV,KAAK,UAAU,OAAO,OAAO,GAAG,iBAAiB;GACjD,KAAK,QAAQ;EACf;CACF;CAEA,WAAW;EACT,OAAO,KAAK,UAAU,QAAQ,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG;CACxD;CAEA,kBAA0B,OAAe;EACvC,IAAI,UAAU,MAAM,KAAK,KAAK,KAAK,GAAG,OAAO;EAE7C,OAAO;CACT;CAEA,UAAkB;EAChB,KAAK,GAAG,YAAY,KAAK;CAC3B;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","names":[],"sources":["../../src/dom/document.ts"],"sourcesContent":["import { controlledComponent, isUndefined, toCamelCase } from '@spcsn/taro-shared';\n\nimport { A, COMMENT, DOCUMENT_ELEMENT_NAME, ROOT_STR } from '../constants';\nimport { TaroElement } from '../dom/element';\nimport { createEvent } from '../dom/event';\nimport { eventSource } from '../dom/event-source';\nimport { FormElement } from '../dom/form';\nimport { NodeType } from '../dom/node_types';\nimport { TaroRootElement } from '../dom/root';\nimport { TaroText } from '../dom/text';\nimport env from '../env';\nimport { AnchorElement } from './anchor-element';\nimport { TransferElement } from './transfer';\n\nexport class TaroDocument extends TaroElement {\n public documentElement: TaroElement;\n public head: TaroElement;\n public body: TaroElement;\n public createEvent = createEvent;\n cookie?: string;\n\n public constructor() {\n super();\n this.nodeType = NodeType.DOCUMENT_NODE;\n this.nodeName = DOCUMENT_ELEMENT_NAME;\n }\n\n public createElement(type: string): TaroElement | TaroRootElement | FormElement {\n const nodeName = type.toLowerCase();\n\n let element: TaroElement;\n switch (true) {\n case nodeName === ROOT_STR:\n element = new TaroRootElement();\n return element;\n case controlledComponent.has(nodeName):\n element = new FormElement();\n break;\n case nodeName === A:\n element = new AnchorElement();\n break;\n case nodeName === 'page-meta':\n case nodeName === 'navigation-bar':\n element = new TransferElement(toCamelCase(nodeName));\n break;\n default:\n element = new TaroElement();\n break;\n }\n\n element.nodeName = nodeName;\n element.tagName = type.toUpperCase();\n\n return element;\n }\n\n // Minimal createElementNS shim — kept as no-op for renderers that\n // attempt to mount into an SVG container before falling back.\n public createElementNS(_svgNS: string, type: string): TaroElement | TaroRootElement | FormElement {\n return this.createElement(type);\n }\n\n public createTextNode(text: string): TaroText {\n return new TaroText(text);\n }\n\n public getElementById<T extends TaroElement>(id: string | undefined | null): T | null {\n const el = eventSource.get(id);\n return isUndefined(el) ? null : (el as T);\n }\n\n public querySelector<T extends TaroElement>(query: string): T | null {\n // Minimal id-selector shim — only `#id` is supported.\n if (/^#/.test(query)) {\n return this.getElementById<T>(query.slice(1));\n }\n return null;\n }\n\n public querySelectorAll() {\n // fake hack\n return [];\n }\n\n // @TODO: @PERF: 在 hydrate 移除掉空的 node\n public createComment(): TaroText {\n const textnode = new TaroText('');\n textnode.nodeName = COMMENT;\n return textnode;\n }\n\n get defaultView() {\n return env.window;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAcA,IAAa,eAAb,cAAkC,YAAY;CAO5C,cAAqB;EACnB,MAAM;EAJR,KAAO,cAAc;EAKnB,KAAK,WAAA;EACL,KAAK,WAAW;CAClB;CAEA,cAAqB,MAA2D;EAC9E,MAAM,WAAW,KAAK,YAAY;EAElC,IAAI;EACJ,QAAQ,MAAR;GACE,KAAK,aAAa;IAChB,UAAU,IAAI,gBAAgB;IAC9B,OAAO;GACT,KAAK,oBAAoB,IAAI,QAAQ;IACnC,UAAU,IAAI,YAAY;IAC1B;GACF,KAAK,aAAA;IACH,UAAU,IAAI,cAAc;IAC5B;GACF,KAAK,aAAa;GAClB,KAAK,aAAa;IAChB,UAAU,IAAI,gBAAgB,YAAY,QAAQ,CAAC;IACnD;GACF;IACE,UAAU,IAAI,YAAY;IAC1B;EACJ;EAEA,QAAQ,WAAW;EACnB,QAAQ,UAAU,KAAK,YAAY;EAEnC,OAAO;CACT;CAIA,gBAAuB,QAAgB,MAA2D;EAChG,OAAO,KAAK,cAAc,IAAI;CAChC;CAEA,eAAsB,MAAwB;EAC5C,OAAO,IAAI,SAAS,IAAI;CAC1B;CAEA,eAA6C,IAAyC;EACpF,MAAM,KAAK,YAAY,IAAI,EAAE;EAC7B,OAAO,YAAY,EAAE,IAAI,OAAQ;CACnC;CAEA,cAA4C,OAAyB;EAEnE,IAAI,KAAK,KAAK,KAAK,GACjB,OAAO,KAAK,eAAkB,MAAM,MAAM,CAAC,CAAC;EAE9C,OAAO;CACT;CAEA,mBAA0B;EAExB,OAAO,CAAC;CACV;CAGA,gBAAiC;EAC/B,MAAM,WAAW,IAAI,SAAS,EAAE;EAChC,SAAS,WAAW;EACpB,OAAO;CACT;CAEA,IAAI,cAAc;EAChB,OAAO,IAAI;CACb;AACF"}
1
+ {"version":3,"file":"document.js","names":[],"sources":["../../src/dom/document.ts"],"sourcesContent":["import { controlledComponent, isUndefined, toCamelCase } from '@spcsn/taro-shared';\n\nimport { A, COMMENT, DOCUMENT_ELEMENT_NAME, ROOT_STR } from '../constants';\nimport { TaroElement } from '../dom/element';\nimport { createEvent } from '../dom/event';\nimport { eventSource } from '../dom/event-source';\nimport { FormElement } from '../dom/form';\nimport { NodeType } from '../dom/node-types';\nimport { TaroRootElement } from '../dom/root';\nimport { TaroText } from '../dom/text';\nimport env from '../env';\nimport { AnchorElement } from './anchor-element';\nimport { TransferElement } from './transfer';\n\nexport class TaroDocument extends TaroElement {\n public documentElement: TaroElement;\n public head: TaroElement;\n public body: TaroElement;\n public createEvent = createEvent;\n cookie?: string;\n\n public constructor() {\n super();\n this.nodeType = NodeType.DOCUMENT_NODE;\n this.nodeName = DOCUMENT_ELEMENT_NAME;\n }\n\n public createElement(type: string): TaroElement | TaroRootElement | FormElement {\n const nodeName = type.toLowerCase();\n\n let element: TaroElement;\n switch (true) {\n case nodeName === ROOT_STR:\n element = new TaroRootElement();\n return element;\n case controlledComponent.has(nodeName):\n element = new FormElement();\n break;\n case nodeName === A:\n element = new AnchorElement();\n break;\n case nodeName === 'page-meta':\n case nodeName === 'navigation-bar':\n element = new TransferElement(toCamelCase(nodeName));\n break;\n default:\n element = new TaroElement();\n break;\n }\n\n element.nodeName = nodeName;\n element.tagName = type.toUpperCase();\n\n return element;\n }\n\n // Minimal createElementNS shim — kept as no-op for renderers that\n // attempt to mount into an SVG container before falling back.\n public createElementNS(_svgNS: string, type: string): TaroElement | TaroRootElement | FormElement {\n return this.createElement(type);\n }\n\n public createTextNode(text: string): TaroText {\n return new TaroText(text);\n }\n\n public getElementById<T extends TaroElement>(id: string | undefined | null): T | null {\n const el = eventSource.get(id);\n return isUndefined(el) ? null : (el as T);\n }\n\n public querySelector<T extends TaroElement>(query: string): T | null {\n // Minimal id-selector shim — only `#id` is supported.\n if (/^#/.test(query)) {\n return this.getElementById<T>(query.slice(1));\n }\n return null;\n }\n\n public querySelectorAll() {\n // fake hack\n return [];\n }\n\n // @TODO: @PERF: 在 hydrate 移除掉空的 node\n public createComment(): TaroText {\n const textnode = new TaroText('');\n textnode.nodeName = COMMENT;\n return textnode;\n }\n\n get defaultView() {\n return env.window;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAcA,IAAa,eAAb,cAAkC,YAAY;CAO5C,cAAqB;EACnB,MAAM;EAJR,KAAO,cAAc;EAKnB,KAAK,WAAA;EACL,KAAK,WAAW;CAClB;CAEA,cAAqB,MAA2D;EAC9E,MAAM,WAAW,KAAK,YAAY;EAElC,IAAI;EACJ,QAAQ,MAAR;GACE,KAAK,aAAa;IAChB,UAAU,IAAI,gBAAgB;IAC9B,OAAO;GACT,KAAK,oBAAoB,IAAI,QAAQ;IACnC,UAAU,IAAI,YAAY;IAC1B;GACF,KAAK,aAAA;IACH,UAAU,IAAI,cAAc;IAC5B;GACF,KAAK,aAAa;GAClB,KAAK,aAAa;IAChB,UAAU,IAAI,gBAAgB,YAAY,QAAQ,CAAC;IACnD;GACF;IACE,UAAU,IAAI,YAAY;IAC1B;EACJ;EAEA,QAAQ,WAAW;EACnB,QAAQ,UAAU,KAAK,YAAY;EAEnC,OAAO;CACT;CAIA,gBAAuB,QAAgB,MAA2D;EAChG,OAAO,KAAK,cAAc,IAAI;CAChC;CAEA,eAAsB,MAAwB;EAC5C,OAAO,IAAI,SAAS,IAAI;CAC1B;CAEA,eAA6C,IAAyC;EACpF,MAAM,KAAK,YAAY,IAAI,EAAE;EAC7B,OAAO,YAAY,EAAE,IAAI,OAAQ;CACnC;CAEA,cAA4C,OAAyB;EAEnE,IAAI,KAAK,KAAK,KAAK,GACjB,OAAO,KAAK,eAAkB,MAAM,MAAM,CAAC,CAAC;EAE9C,OAAO;CACT;CAEA,mBAA0B;EAExB,OAAO,CAAC;CACV;CAGA,gBAAiC;EAC/B,MAAM,WAAW,IAAI,SAAS,EAAE;EAChC,SAAS,WAAW;EACpB,OAAO;CACT;CAEA,IAAI,cAAc;EAChB,OAAO,IAAI;CACb;AACF"}
@@ -18,14 +18,14 @@ var TaroElement = class TaroElement extends TaroNode {
18
18
  hooks.call("patchElement", this);
19
19
  }
20
20
  _stopPropagation(event) {
21
- let target = this;
22
- while (target = target.parentNode) {
23
- const listeners = target.__handlers[event.type];
24
- if (!isArray(listeners)) continue;
25
- for (let i = listeners.length; i--;) {
26
- const l = listeners[i];
27
- l._stop = true;
21
+ let parentNode = this.parentNode;
22
+ while (parentNode) {
23
+ const listeners = parentNode.__handlers[event.type];
24
+ if (isArray(listeners)) for (let i = listeners.length; i--;) {
25
+ const listener = listeners[i];
26
+ listener._stop = true;
28
27
  }
28
+ parentNode = parentNode.parentNode;
29
29
  }
30
30
  }
31
31
  get id() {
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["getComponentsAlias"],"sources":["../../src/dom/element.ts"],"sourcesContent":["import {\n EMPTY_OBJ,\n hooks,\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n Shortcuts,\n toCamelCase,\n warn,\n} from '@spcsn/taro-shared';\n\nimport {\n CATCH_VIEW,\n CATCHMOVE,\n CLASS,\n CLICK_VIEW,\n EVENT_CALLBACK_RESULT,\n FOCUS,\n ID,\n PROPERTY_THRESHOLD,\n PURE_VIEW,\n STATIC_VIEW,\n STYLE,\n VIEW,\n} from '../constants';\nimport { MutationObserver, MutationRecordType } from '../dom-external/mutation-observer';\nimport { extend, getComponentsAlias, isElement, isHasExtractProp, shortcutAttr } from '../utils';\nimport { ClassList } from './class-list';\nimport { eventSource } from './event-source';\nimport { TaroNode } from './node';\nimport { NodeType } from './node_types';\nimport { Style } from './style';\nimport { treeToArray } from './tree';\n\nimport type { Attributes, TFunc } from '../interface';\nimport type { TaroEvent } from './event';\n\nexport class TaroElement extends TaroNode {\n public ctx?;\n public tagName: string;\n public props: Record<string, any> = {};\n public style: Style;\n public dataset: Record<string, unknown> = EMPTY_OBJ;\n public innerHTML: string;\n\n public constructor() {\n super();\n this.nodeType = NodeType.ELEMENT_NODE;\n this.style = new Style(this);\n hooks.call('patchElement', this);\n }\n\n private _stopPropagation(event: TaroEvent) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let target = this;\n // eslint-disable-next-line no-cond-assign\n while ((target = target.parentNode as this)) {\n const listeners = target.__handlers[event.type];\n\n if (!isArray(listeners)) {\n continue;\n }\n\n for (let i = listeners.length; i--; ) {\n const l = listeners[i];\n l._stop = true;\n }\n }\n }\n\n public get id(): string {\n return this.getAttribute(ID)!;\n }\n\n public set id(val: string) {\n this.setAttribute(ID, val);\n }\n\n public get className(): string {\n return this.getAttribute(CLASS) || '';\n }\n\n public set className(val: string) {\n this.setAttribute(CLASS, val);\n }\n\n public get cssText(): string {\n return this.getAttribute(STYLE) || '';\n }\n\n public get classList(): ClassList {\n return new ClassList(this.className, this);\n }\n\n public get children(): TaroElement[] {\n return this.childNodes.filter(isElement);\n }\n\n public get attributes(): Attributes[] {\n const props = this.props;\n const propKeys = Object.keys(props);\n const style = this.style.cssText;\n const attrs = propKeys.map((key) => ({ name: key, value: props[key] }));\n return attrs.concat(style ? { name: STYLE, value: style } : []);\n }\n\n public get textContent(): string {\n let text = '';\n const childNodes = this.childNodes;\n\n for (let i = 0; i < childNodes.length; i++) {\n text += childNodes[i].textContent;\n }\n\n return text;\n }\n\n public set textContent(text: string) {\n super.textContent = text;\n }\n\n public hasAttribute(qualifiedName: string): boolean {\n return !isUndefined(this.props[qualifiedName]);\n }\n\n public hasAttributes(): boolean {\n return this.attributes.length > 0;\n }\n\n public get focus() {\n return function () {\n this.setAttribute(FOCUS, true);\n };\n }\n\n // 兼容 Vue3,详情请见:https://github.com/NervJS/taro/issues/10579\n public set focus(value) {\n this.setAttribute(FOCUS, value);\n }\n\n public blur() {\n this.setAttribute(FOCUS, false);\n }\n\n public setAttribute(qualifiedName: string, value: any): void {\n process.env.NODE_ENV !== 'production' &&\n warn(\n isString(value) && value.length > PROPERTY_THRESHOLD,\n `元素 ${this.nodeName} 的 ${qualifiedName} 属性值数据量过大,可能会影响渲染性能。考虑降低图片转为 base64 的阈值或在 CSS 中使用 base64。`,\n );\n\n const isPureView = this.nodeName === VIEW && !isHasExtractProp(this) && !this.isAnyEventBinded();\n\n if (qualifiedName !== STYLE) {\n MutationObserver.record({\n target: this,\n type: MutationRecordType.ATTRIBUTES,\n attributeName: qualifiedName,\n oldValue: this.getAttribute(qualifiedName),\n });\n }\n\n switch (qualifiedName) {\n case STYLE:\n this.style.cssText = value as string;\n break;\n case ID:\n if (this.uid !== this.sid) {\n // eventSource[sid] 永远保留,直到组件卸载\n // eventSource[uid] 可变\n eventSource.delete(this.uid);\n }\n value = String(value);\n this.props[qualifiedName] = this.uid = value;\n eventSource.set(value, this);\n break;\n default:\n this.props[qualifiedName] = value as string;\n\n if (qualifiedName.startsWith('data-')) {\n if (this.dataset === EMPTY_OBJ) {\n this.dataset = Object.create(null);\n }\n this.dataset[toCamelCase(qualifiedName.replace(/^data-/, ''))] = value;\n }\n break;\n }\n\n // Serialization\n if (!this._root) return;\n\n const componentsAlias = getComponentsAlias();\n const _alias = componentsAlias[this.nodeName];\n const viewAlias = componentsAlias[VIEW]._num;\n const clickViewAlias = componentsAlias[CLICK_VIEW]._num;\n const staticViewAlias = componentsAlias[STATIC_VIEW]._num;\n const catchViewAlias = componentsAlias[CATCH_VIEW]._num;\n const _path = this._path;\n\n qualifiedName = shortcutAttr(qualifiedName);\n\n const qualifiedNameInCamelCase = toCamelCase(qualifiedName);\n const payload = {\n path: `${_path}.${qualifiedNameInCamelCase}`,\n value: isFunction(value) ? () => value : value,\n };\n\n hooks.call('modifySetAttrPayload', this, qualifiedName, payload, componentsAlias);\n\n if (_alias) {\n const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName;\n payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`;\n }\n\n this.enqueueUpdate(payload);\n\n if (this.nodeName === VIEW) {\n if (qualifiedNameInCamelCase === CATCHMOVE) {\n // catchMove = true: catch-view\n // catchMove = false: view or click-view or static-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: value\n ? catchViewAlias\n : this.isOnlyClickBinded() && !isHasExtractProp(this)\n ? clickViewAlias\n : this.isAnyEventBinded()\n ? viewAlias\n : staticViewAlias,\n });\n } else if (isPureView && isHasExtractProp(this)) {\n // pure-view => static-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: staticViewAlias,\n });\n }\n }\n }\n\n public removeAttribute(qualifiedName: string) {\n const isStaticView = this.nodeName === VIEW && isHasExtractProp(this) && !this.isAnyEventBinded();\n\n MutationObserver.record({\n target: this,\n type: MutationRecordType.ATTRIBUTES,\n attributeName: qualifiedName,\n oldValue: this.getAttribute(qualifiedName),\n });\n\n if (qualifiedName === STYLE) {\n this.style.cssText = '';\n } else {\n const isInterrupt = hooks.call('onRemoveAttribute', this, qualifiedName);\n if (isInterrupt) {\n return;\n }\n\n if (!this.props.hasOwnProperty(qualifiedName)) {\n return;\n }\n delete this.props[qualifiedName];\n }\n\n // Serialization\n if (!this._root) return;\n\n const componentsAlias = getComponentsAlias();\n const _alias = componentsAlias[this.nodeName];\n const viewAlias = componentsAlias[VIEW]._num;\n const staticViewAlias = componentsAlias[STATIC_VIEW]._num;\n const pureViewAlias = componentsAlias[PURE_VIEW]._num;\n const clickViewAlias = componentsAlias[CLICK_VIEW]._num;\n const _path = this._path;\n\n qualifiedName = shortcutAttr(qualifiedName);\n\n const qualifiedNameInCamelCase = toCamelCase(qualifiedName);\n const payload = {\n path: `${_path}.${qualifiedNameInCamelCase}`,\n value: '',\n };\n\n hooks.call('modifyRmAttrPayload', this, qualifiedName, payload, componentsAlias);\n\n if (_alias) {\n const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName;\n payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`;\n }\n\n this.enqueueUpdate(payload);\n\n if (this.nodeName === VIEW) {\n if (qualifiedNameInCamelCase === CATCHMOVE) {\n // catch-view => view or click-view or static-view or pure-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value:\n this.isOnlyClickBinded() && !isHasExtractProp(this)\n ? clickViewAlias\n : this.isAnyEventBinded()\n ? viewAlias\n : isHasExtractProp(this)\n ? staticViewAlias\n : pureViewAlias,\n });\n } else if (isStaticView && !isHasExtractProp(this)) {\n // static-view => pure-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: pureViewAlias,\n });\n }\n }\n }\n\n public getAttribute(qualifiedName: string): string {\n const attr = qualifiedName === STYLE ? this.style.cssText : this.props[qualifiedName];\n return attr ?? '';\n }\n\n public getElementsByTagName(tagName: string): TaroElement[] {\n return treeToArray(this, (el) => {\n return el.nodeName === tagName || (tagName === '*' && this !== el);\n });\n }\n\n public getElementsByClassName(className: string): TaroElement[] {\n const classNames = className.trim().split(/\\s+/);\n\n return treeToArray(this, (el) => {\n const classList = el.classList;\n return classNames.every((c) => classList.contains(c));\n });\n }\n\n public dispatchEvent(event: TaroEvent): boolean {\n const cancelable = event.cancelable;\n\n const listeners = this.__handlers[event.type];\n\n if (!isArray(listeners)) {\n return false;\n }\n\n for (let i = listeners.length; i--; ) {\n const listener = listeners[i];\n let result: unknown;\n if (listener._stop) {\n listener._stop = false;\n } else {\n hooks.call('modifyDispatchEvent', event, this);\n result = listener.call(this, event);\n }\n if ((result === false || event._end) && cancelable) {\n event.defaultPrevented = true;\n }\n\n if (!isUndefined(result) && event.mpEvent) {\n const res = hooks.call('modifyTaroEventReturn', this, event, result);\n if (res) {\n event.mpEvent[EVENT_CALLBACK_RESULT] = result;\n }\n }\n\n if (event._end && event._stop) {\n break;\n }\n }\n\n if (event._stop) {\n this._stopPropagation(event);\n }\n\n return listeners != null;\n }\n\n public addEventListener(type, handler, options) {\n const name = this.nodeName;\n const SPECIAL_NODES = hooks.call('getSpecialNodes')!;\n\n let sideEffect = true;\n if (isObject<Record<string, any>>(options) && options.sideEffect === false) {\n sideEffect = false;\n delete options.sideEffect;\n }\n\n hooks.call('modifyAddEventListener', this, sideEffect, getComponentsAlias);\n\n if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {\n const componentsAlias = getComponentsAlias();\n const alias = componentsAlias[name]._num;\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.NodeName}`,\n value: alias,\n });\n }\n\n super.addEventListener(type, handler, options);\n }\n\n public removeEventListener(type, handler, sideEffect = true) {\n super.removeEventListener(type, handler);\n\n const name = this.nodeName;\n const SPECIAL_NODES = hooks.call('getSpecialNodes')!;\n\n hooks.call('modifyRemoveEventListener', this, sideEffect, getComponentsAlias);\n\n if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {\n const componentsAlias = getComponentsAlias();\n const value = isHasExtractProp(this) ? `static-${name}` : `pure-${name}`;\n const valueAlias = componentsAlias[value]._num;\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.NodeName}`,\n value: valueAlias,\n });\n }\n }\n\n static extend(methodName: string, options: TFunc | Record<string, any>) {\n extend(TaroElement, methodName, options);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":["getComponentsAlias"],"sources":["../../src/dom/element.ts"],"sourcesContent":["import {\n EMPTY_OBJ,\n hooks,\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n Shortcuts,\n toCamelCase,\n warn,\n} from '@spcsn/taro-shared';\n\nimport {\n CATCH_VIEW,\n CATCHMOVE,\n CLASS,\n CLICK_VIEW,\n EVENT_CALLBACK_RESULT,\n FOCUS,\n ID,\n PROPERTY_THRESHOLD,\n PURE_VIEW,\n STATIC_VIEW,\n STYLE,\n VIEW,\n} from '../constants';\nimport { MutationObserver, MutationRecordType } from '../dom-external/mutation-observer';\nimport { extend, getComponentsAlias, isElement, isHasExtractProp, shortcutAttr } from '../utils';\nimport { ClassList } from './class-list';\nimport { eventSource } from './event-source';\nimport { TaroNode } from './node';\nimport { NodeType } from './node-types';\nimport { Style } from './style';\nimport { treeToArray } from './tree';\n\nimport type { Attributes, TFunc } from '../interface';\nimport type { TaroEvent } from './event';\n\nexport class TaroElement extends TaroNode {\n public ctx?;\n public tagName: string;\n public props: Record<string, any> = {};\n public style: Style;\n public dataset: Record<string, unknown> = EMPTY_OBJ;\n public innerHTML: string;\n\n public constructor() {\n super();\n this.nodeType = NodeType.ELEMENT_NODE;\n this.style = new Style(this);\n hooks.call('patchElement', this);\n }\n\n private _stopPropagation(event: TaroEvent) {\n let parentNode = this.parentNode as TaroElement | null;\n\n while (parentNode) {\n const listeners = parentNode.__handlers[event.type];\n\n if (isArray(listeners)) {\n for (let i = listeners.length; i--; ) {\n const listener = listeners[i];\n listener._stop = true;\n }\n }\n\n parentNode = parentNode.parentNode as TaroElement | null;\n }\n }\n\n public get id(): string {\n return this.getAttribute(ID)!;\n }\n\n public set id(val: string) {\n this.setAttribute(ID, val);\n }\n\n public get className(): string {\n return this.getAttribute(CLASS) || '';\n }\n\n public set className(val: string) {\n this.setAttribute(CLASS, val);\n }\n\n public get cssText(): string {\n return this.getAttribute(STYLE) || '';\n }\n\n public get classList(): ClassList {\n return new ClassList(this.className, this);\n }\n\n public get children(): TaroElement[] {\n return this.childNodes.filter(isElement);\n }\n\n public get attributes(): Attributes[] {\n const props = this.props;\n const propKeys = Object.keys(props);\n const style = this.style.cssText;\n const attrs = propKeys.map((key) => ({ name: key, value: props[key] }));\n return attrs.concat(style ? { name: STYLE, value: style } : []);\n }\n\n public get textContent(): string {\n let text = '';\n const childNodes = this.childNodes;\n\n for (let i = 0; i < childNodes.length; i++) {\n text += childNodes[i].textContent;\n }\n\n return text;\n }\n\n public set textContent(text: string) {\n super.textContent = text;\n }\n\n public hasAttribute(qualifiedName: string): boolean {\n return !isUndefined(this.props[qualifiedName]);\n }\n\n public hasAttributes(): boolean {\n return this.attributes.length > 0;\n }\n\n public get focus() {\n return function () {\n this.setAttribute(FOCUS, true);\n };\n }\n\n // 兼容 Vue3,详情请见:https://github.com/NervJS/taro/issues/10579\n public set focus(value) {\n this.setAttribute(FOCUS, value);\n }\n\n public blur() {\n this.setAttribute(FOCUS, false);\n }\n\n public setAttribute(qualifiedName: string, value: any): void {\n process.env.NODE_ENV !== 'production' &&\n warn(\n isString(value) && value.length > PROPERTY_THRESHOLD,\n `元素 ${this.nodeName} 的 ${qualifiedName} 属性值数据量过大,可能会影响渲染性能。考虑降低图片转为 base64 的阈值或在 CSS 中使用 base64。`,\n );\n\n const isPureView = this.nodeName === VIEW && !isHasExtractProp(this) && !this.isAnyEventBinded();\n\n if (qualifiedName !== STYLE) {\n MutationObserver.record({\n target: this,\n type: MutationRecordType.ATTRIBUTES,\n attributeName: qualifiedName,\n oldValue: this.getAttribute(qualifiedName),\n });\n }\n\n switch (qualifiedName) {\n case STYLE:\n this.style.cssText = value as string;\n break;\n case ID:\n if (this.uid !== this.sid) {\n // eventSource[sid] 永远保留,直到组件卸载\n // eventSource[uid] 可变\n eventSource.delete(this.uid);\n }\n value = String(value);\n this.props[qualifiedName] = this.uid = value;\n eventSource.set(value, this);\n break;\n default:\n this.props[qualifiedName] = value as string;\n\n if (qualifiedName.startsWith('data-')) {\n if (this.dataset === EMPTY_OBJ) {\n this.dataset = Object.create(null);\n }\n this.dataset[toCamelCase(qualifiedName.replace(/^data-/, ''))] = value;\n }\n break;\n }\n\n // Serialization\n if (!this._root) return;\n\n const componentsAlias = getComponentsAlias();\n const _alias = componentsAlias[this.nodeName];\n const viewAlias = componentsAlias[VIEW]._num;\n const clickViewAlias = componentsAlias[CLICK_VIEW]._num;\n const staticViewAlias = componentsAlias[STATIC_VIEW]._num;\n const catchViewAlias = componentsAlias[CATCH_VIEW]._num;\n const _path = this._path;\n\n qualifiedName = shortcutAttr(qualifiedName);\n\n const qualifiedNameInCamelCase = toCamelCase(qualifiedName);\n const payload = {\n path: `${_path}.${qualifiedNameInCamelCase}`,\n value: isFunction(value) ? () => value : value,\n };\n\n hooks.call('modifySetAttrPayload', this, qualifiedName, payload, componentsAlias);\n\n if (_alias) {\n const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName;\n payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`;\n }\n\n this.enqueueUpdate(payload);\n\n if (this.nodeName === VIEW) {\n if (qualifiedNameInCamelCase === CATCHMOVE) {\n // catchMove = true: catch-view\n // catchMove = false: view or click-view or static-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: value\n ? catchViewAlias\n : this.isOnlyClickBinded() && !isHasExtractProp(this)\n ? clickViewAlias\n : this.isAnyEventBinded()\n ? viewAlias\n : staticViewAlias,\n });\n } else if (isPureView && isHasExtractProp(this)) {\n // pure-view => static-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: staticViewAlias,\n });\n }\n }\n }\n\n public removeAttribute(qualifiedName: string) {\n const isStaticView = this.nodeName === VIEW && isHasExtractProp(this) && !this.isAnyEventBinded();\n\n MutationObserver.record({\n target: this,\n type: MutationRecordType.ATTRIBUTES,\n attributeName: qualifiedName,\n oldValue: this.getAttribute(qualifiedName),\n });\n\n if (qualifiedName === STYLE) {\n this.style.cssText = '';\n } else {\n const isInterrupt = hooks.call('onRemoveAttribute', this, qualifiedName);\n if (isInterrupt) {\n return;\n }\n\n if (!this.props.hasOwnProperty(qualifiedName)) {\n return;\n }\n delete this.props[qualifiedName];\n }\n\n // Serialization\n if (!this._root) return;\n\n const componentsAlias = getComponentsAlias();\n const _alias = componentsAlias[this.nodeName];\n const viewAlias = componentsAlias[VIEW]._num;\n const staticViewAlias = componentsAlias[STATIC_VIEW]._num;\n const pureViewAlias = componentsAlias[PURE_VIEW]._num;\n const clickViewAlias = componentsAlias[CLICK_VIEW]._num;\n const _path = this._path;\n\n qualifiedName = shortcutAttr(qualifiedName);\n\n const qualifiedNameInCamelCase = toCamelCase(qualifiedName);\n const payload = {\n path: `${_path}.${qualifiedNameInCamelCase}`,\n value: '',\n };\n\n hooks.call('modifyRmAttrPayload', this, qualifiedName, payload, componentsAlias);\n\n if (_alias) {\n const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName;\n payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`;\n }\n\n this.enqueueUpdate(payload);\n\n if (this.nodeName === VIEW) {\n if (qualifiedNameInCamelCase === CATCHMOVE) {\n // catch-view => view or click-view or static-view or pure-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value:\n this.isOnlyClickBinded() && !isHasExtractProp(this)\n ? clickViewAlias\n : this.isAnyEventBinded()\n ? viewAlias\n : isHasExtractProp(this)\n ? staticViewAlias\n : pureViewAlias,\n });\n } else if (isStaticView && !isHasExtractProp(this)) {\n // static-view => pure-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: pureViewAlias,\n });\n }\n }\n }\n\n public getAttribute(qualifiedName: string): string {\n const attr = qualifiedName === STYLE ? this.style.cssText : this.props[qualifiedName];\n return attr ?? '';\n }\n\n public getElementsByTagName(tagName: string): TaroElement[] {\n return treeToArray(this, (el) => {\n return el.nodeName === tagName || (tagName === '*' && this !== el);\n });\n }\n\n public getElementsByClassName(className: string): TaroElement[] {\n const classNames = className.trim().split(/\\s+/);\n\n return treeToArray(this, (el) => {\n const classList = el.classList;\n return classNames.every((c) => classList.contains(c));\n });\n }\n\n public dispatchEvent(event: TaroEvent): boolean {\n const cancelable = event.cancelable;\n\n const listeners = this.__handlers[event.type];\n\n if (!isArray(listeners)) {\n return false;\n }\n\n for (let i = listeners.length; i--; ) {\n const listener = listeners[i];\n let result: unknown;\n if (listener._stop) {\n listener._stop = false;\n } else {\n hooks.call('modifyDispatchEvent', event, this);\n result = listener.call(this, event);\n }\n if ((result === false || event._end) && cancelable) {\n event.defaultPrevented = true;\n }\n\n if (!isUndefined(result) && event.mpEvent) {\n const res = hooks.call('modifyTaroEventReturn', this, event, result);\n if (res) {\n event.mpEvent[EVENT_CALLBACK_RESULT] = result;\n }\n }\n\n if (event._end && event._stop) {\n break;\n }\n }\n\n if (event._stop) {\n this._stopPropagation(event);\n }\n\n return listeners != null;\n }\n\n public addEventListener(type, handler, options) {\n const name = this.nodeName;\n const SPECIAL_NODES = hooks.call('getSpecialNodes')!;\n\n let sideEffect = true;\n if (isObject<Record<string, any>>(options) && options.sideEffect === false) {\n sideEffect = false;\n delete options.sideEffect;\n }\n\n hooks.call('modifyAddEventListener', this, sideEffect, getComponentsAlias);\n\n if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {\n const componentsAlias = getComponentsAlias();\n const alias = componentsAlias[name]._num;\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.NodeName}`,\n value: alias,\n });\n }\n\n super.addEventListener(type, handler, options);\n }\n\n public removeEventListener(type, handler, sideEffect = true) {\n super.removeEventListener(type, handler);\n\n const name = this.nodeName;\n const SPECIAL_NODES = hooks.call('getSpecialNodes')!;\n\n hooks.call('modifyRemoveEventListener', this, sideEffect, getComponentsAlias);\n\n if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {\n const componentsAlias = getComponentsAlias();\n const value = isHasExtractProp(this) ? `static-${name}` : `pure-${name}`;\n const valueAlias = componentsAlias[value]._num;\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.NodeName}`,\n value: valueAlias,\n });\n }\n }\n\n static extend(methodName: string, options: TFunc | Record<string, any>) {\n extend(TaroElement, methodName, options);\n }\n}\n"],"mappings":";;;;;;;;;;AAuCA,IAAa,cAAb,MAAa,oBAAoB,SAAS;CAQxC,cAAqB;EACnB,MAAM;EANR,KAAO,QAA6B,CAAC;EAErC,KAAO,UAAmC;EAKxC,KAAK,WAAA;EACL,KAAK,QAAQ,IAAI,MAAM,IAAI;EAC3B,MAAM,KAAK,gBAAgB,IAAI;CACjC;CAEA,iBAAyB,OAAkB;EACzC,IAAI,aAAa,KAAK;EAEtB,OAAO,YAAY;GACjB,MAAM,YAAY,WAAW,WAAW,MAAM;GAE9C,IAAI,QAAQ,SAAS,GACnB,KAAK,IAAI,IAAI,UAAU,QAAQ,MAAO;IACpC,MAAM,WAAW,UAAU;IAC3B,SAAS,QAAQ;GACnB;GAGF,aAAa,WAAW;EAC1B;CACF;CAEA,IAAW,KAAa;EACtB,OAAO,KAAK,aAAA,IAAe;CAC7B;CAEA,IAAW,GAAG,KAAa;EACzB,KAAK,aAAA,MAAiB,GAAG;CAC3B;CAEA,IAAW,YAAoB;EAC7B,OAAO,KAAK,aAAA,OAAkB,KAAK;CACrC;CAEA,IAAW,UAAU,KAAa;EAChC,KAAK,aAAa,OAAO,GAAG;CAC9B;CAEA,IAAW,UAAkB;EAC3B,OAAO,KAAK,aAAA,OAAkB,KAAK;CACrC;CAEA,IAAW,YAAuB;EAChC,OAAO,IAAI,UAAU,KAAK,WAAW,IAAI;CAC3C;CAEA,IAAW,WAA0B;EACnC,OAAO,KAAK,WAAW,OAAO,SAAS;CACzC;CAEA,IAAW,aAA2B;EACpC,MAAM,QAAQ,KAAK;EACnB,MAAM,WAAW,OAAO,KAAK,KAAK;EAClC,MAAM,QAAQ,KAAK,MAAM;EAEzB,OADc,SAAS,KAAK,SAAS;GAAE,MAAM;GAAK,OAAO,MAAM;EAAK,EACzD,EAAE,OAAO,QAAQ;GAAE,MAAM;GAAO,OAAO;EAAM,IAAI,CAAC,CAAC;CAChE;CAEA,IAAW,cAAsB;EAC/B,IAAI,OAAO;EACX,MAAM,aAAa,KAAK;EAExB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,QAAQ,WAAW,GAAG;EAGxB,OAAO;CACT;CAEA,IAAW,YAAY,MAAc;EACnC,MAAM,cAAc;CACtB;CAEA,aAAoB,eAAgC;EAClD,OAAO,CAAC,YAAY,KAAK,MAAM,cAAc;CAC/C;CAEA,gBAAgC;EAC9B,OAAO,KAAK,WAAW,SAAS;CAClC;CAEA,IAAW,QAAQ;EACjB,OAAO,WAAY;GACjB,KAAK,aAAa,OAAO,IAAI;EAC/B;CACF;CAGA,IAAW,MAAM,OAAO;EACtB,KAAK,aAAa,OAAO,KAAK;CAChC;CAEA,OAAc;EACZ,KAAK,aAAa,OAAO,KAAK;CAChC;CAEA,aAAoB,eAAuB,OAAkB;EAC3D,KAEI,SAAS,KAAK,KAAK,MAAM,SAAA,MACzB,MAAM,KAAK,SAAS,KAAK,cAAc,0DACzC;EAEF,MAAM,aAAa,KAAK,aAAA,UAAqB,CAAC,iBAAiB,IAAI,KAAK,CAAC,KAAK,iBAAiB;EAE/F,IAAI,kBAAA,SACF,iBAAiB,OAAO;GACtB,QAAQ;GACR,MAAA;GACA,eAAe;GACf,UAAU,KAAK,aAAa,aAAa;EAC3C,CAAC;EAGH,QAAQ,eAAR;GACE,KAAK;IACH,KAAK,MAAM,UAAU;IACrB;GACF,KAAA;IACE,IAAI,KAAK,QAAQ,KAAK,KAGpB,YAAY,OAAO,KAAK,GAAG;IAE7B,QAAQ,OAAO,KAAK;IACpB,KAAK,MAAM,iBAAiB,KAAK,MAAM;IACvC,YAAY,IAAI,OAAO,IAAI;IAC3B;GACF;IACE,KAAK,MAAM,iBAAiB;IAE5B,IAAI,cAAc,WAAW,OAAO,GAAG;KACrC,IAAI,KAAK,YAAY,WACnB,KAAK,UAAU,OAAO,OAAO,IAAI;KAEnC,KAAK,QAAQ,YAAY,cAAc,QAAQ,UAAU,EAAE,CAAC,KAAK;IACnE;IACA;EACJ;EAGA,IAAI,CAAC,KAAK,OAAO;EAEjB,MAAM,kBAAkBA,qBAAmB;EAC3C,MAAM,SAAS,gBAAgB,KAAK;EACpC,MAAM,YAAY,gBAAgB,MAAM;EACxC,MAAM,iBAAiB,gBAAgB,YAAY;EACnD,MAAM,kBAAkB,gBAAgB,aAAa;EACrD,MAAM,iBAAiB,gBAAgB,YAAY;EACnD,MAAM,QAAQ,KAAK;EAEnB,gBAAgB,aAAa,aAAa;EAE1C,MAAM,2BAA2B,YAAY,aAAa;EAC1D,MAAM,UAAU;GACd,MAAM,GAAG,MAAM,GAAG;GAClB,OAAO,WAAW,KAAK,UAAU,QAAQ;EAC3C;EAEA,MAAM,KAAK,wBAAwB,MAAM,eAAe,SAAS,eAAe;EAEhF,IAAI,QAEF,QAAQ,OAAO,GAAG,MAAM,GAAG,YADA,OAAO,6BAA6B,aACN;EAG3D,KAAK,cAAc,OAAO;EAE1B,IAAI,KAAK,aAAA;OACH,6BAAA,aAGF,KAAK,cAAc;IACjB,MAAM,GAAG,MAAM,GAAG,UAAU;IAC5B,OAAO,QACH,iBACA,KAAK,kBAAkB,KAAK,CAAC,iBAAiB,IAAI,IAChD,iBACA,KAAK,iBAAiB,IACpB,YACA;GACV,CAAC;QACI,IAAI,cAAc,iBAAiB,IAAI,GAE5C,KAAK,cAAc;IACjB,MAAM,GAAG,MAAM,GAAG,UAAU;IAC5B,OAAO;GACT,CAAC;EAAA;CAGP;CAEA,gBAAuB,eAAuB;EAC5C,MAAM,eAAe,KAAK,aAAA,UAAqB,iBAAiB,IAAI,KAAK,CAAC,KAAK,iBAAiB;EAEhG,iBAAiB,OAAO;GACtB,QAAQ;GACR,MAAA;GACA,eAAe;GACf,UAAU,KAAK,aAAa,aAAa;EAC3C,CAAC;EAED,IAAI,kBAAA,SACF,KAAK,MAAM,UAAU;OAChB;GAEL,IADoB,MAAM,KAAK,qBAAqB,MAAM,aAC5C,GACZ;GAGF,IAAI,CAAC,KAAK,MAAM,eAAe,aAAa,GAC1C;GAEF,OAAO,KAAK,MAAM;EACpB;EAGA,IAAI,CAAC,KAAK,OAAO;EAEjB,MAAM,kBAAkBA,qBAAmB;EAC3C,MAAM,SAAS,gBAAgB,KAAK;EACpC,MAAM,YAAY,gBAAgB,MAAM;EACxC,MAAM,kBAAkB,gBAAgB,aAAa;EACrD,MAAM,gBAAgB,gBAAgB,WAAW;EACjD,MAAM,iBAAiB,gBAAgB,YAAY;EACnD,MAAM,QAAQ,KAAK;EAEnB,gBAAgB,aAAa,aAAa;EAE1C,MAAM,2BAA2B,YAAY,aAAa;EAC1D,MAAM,UAAU;GACd,MAAM,GAAG,MAAM,GAAG;GAClB,OAAO;EACT;EAEA,MAAM,KAAK,uBAAuB,MAAM,eAAe,SAAS,eAAe;EAE/E,IAAI,QAEF,QAAQ,OAAO,GAAG,MAAM,GAAG,YADA,OAAO,6BAA6B,aACN;EAG3D,KAAK,cAAc,OAAO;EAE1B,IAAI,KAAK,aAAA;OACH,6BAAA,aAEF,KAAK,cAAc;IACjB,MAAM,GAAG,MAAM,GAAG,UAAU;IAC5B,OACE,KAAK,kBAAkB,KAAK,CAAC,iBAAiB,IAAI,IAC9C,iBACA,KAAK,iBAAiB,IACpB,YACA,iBAAiB,IAAI,IACnB,kBACA;GACZ,CAAC;QACI,IAAI,gBAAgB,CAAC,iBAAiB,IAAI,GAE/C,KAAK,cAAc;IACjB,MAAM,GAAG,MAAM,GAAG,UAAU;IAC5B,OAAO;GACT,CAAC;EAAA;CAGP;CAEA,aAAoB,eAA+B;EACjD,MAAM,OAAO,kBAAA,UAA0B,KAAK,MAAM,UAAU,KAAK,MAAM;EACvE,OAAO,SAAA,QAAA,SAAA,KAAA,IAAA,OAAQ;CACjB;CAEA,qBAA4B,SAAgC;EAC1D,OAAO,YAAY,OAAO,OAAO;GAC/B,OAAO,GAAG,aAAa,WAAY,YAAY,OAAO,SAAS;EACjE,CAAC;CACH;CAEA,uBAA8B,WAAkC;EAC9D,MAAM,aAAa,UAAU,KAAK,EAAE,MAAM,KAAK;EAE/C,OAAO,YAAY,OAAO,OAAO;GAC/B,MAAM,YAAY,GAAG;GACrB,OAAO,WAAW,OAAO,MAAM,UAAU,SAAS,CAAC,CAAC;EACtD,CAAC;CACH;CAEA,cAAqB,OAA2B;EAC9C,MAAM,aAAa,MAAM;EAEzB,MAAM,YAAY,KAAK,WAAW,MAAM;EAExC,IAAI,CAAC,QAAQ,SAAS,GACpB,OAAO;EAGT,KAAK,IAAI,IAAI,UAAU,QAAQ,MAAO;GACpC,MAAM,WAAW,UAAU;GAC3B,IAAI;GACJ,IAAI,SAAS,OACX,SAAS,QAAQ;QACZ;IACL,MAAM,KAAK,uBAAuB,OAAO,IAAI;IAC7C,SAAS,SAAS,KAAK,MAAM,KAAK;GACpC;GACA,KAAK,WAAW,SAAS,MAAM,SAAS,YACtC,MAAM,mBAAmB;GAG3B,IAAI,CAAC,YAAY,MAAM,KAAK,MAAM;QACpB,MAAM,KAAK,yBAAyB,MAAM,OAAO,MACvD,GACJ,MAAM,QAAQ,yBAAyB;GAAA;GAI3C,IAAI,MAAM,QAAQ,MAAM,OACtB;EAEJ;EAEA,IAAI,MAAM,OACR,KAAK,iBAAiB,KAAK;EAG7B,OAAO,aAAa;CACtB;CAEA,iBAAwB,MAAM,SAAS,SAAS;EAC9C,MAAM,OAAO,KAAK;EAClB,MAAM,gBAAgB,MAAM,KAAK,iBAAiB;EAElD,IAAI,aAAa;EACjB,IAAI,SAA8B,OAAO,KAAK,QAAQ,eAAe,OAAO;GAC1E,aAAa;GACb,OAAO,QAAQ;EACjB;EAEA,MAAM,KAAK,0BAA0B,MAAM,YAAYA,oBAAkB;EAEzE,IAAI,eAAe,SAAS,CAAC,KAAK,iBAAiB,KAAK,cAAc,QAAQ,IAAI,IAAI,IAAI;GAExF,MAAM,QADkBA,qBACI,EAAE,MAAM;GACpC,KAAK,cAAc;IACjB,MAAM,GAAG,KAAK,MAAM,GAAG,UAAU;IACjC,OAAO;GACT,CAAC;EACH;EAEA,MAAM,iBAAiB,MAAM,SAAS,OAAO;CAC/C;CAEA,oBAA2B,MAAM,SAAS,aAAa,MAAM;EAC3D,MAAM,oBAAoB,MAAM,OAAO;EAEvC,MAAM,OAAO,KAAK;EAClB,MAAM,gBAAgB,MAAM,KAAK,iBAAiB;EAElD,MAAM,KAAK,6BAA6B,MAAM,YAAYA,oBAAkB;EAE5E,IAAI,eAAe,SAAS,CAAC,KAAK,iBAAiB,KAAK,cAAc,QAAQ,IAAI,IAAI,IAAI;GAGxF,MAAM,aAFkBA,qBAES,EADnB,iBAAiB,IAAI,IAAI,UAAU,SAAS,QAAQ,QACxB;GAC1C,KAAK,cAAc;IACjB,MAAM,GAAG,KAAK,MAAM,GAAG,UAAU;IACjC,OAAO;GACT,CAAC;EACH;CACF;CAEA,OAAO,OAAO,YAAoB,SAAsC;EACtE,OAAO,aAAa,YAAY,OAAO;CACzC;AACF"}
@@ -10,6 +10,7 @@ export declare class TaroEvent {
10
10
  _end: boolean;
11
11
  defaultPrevented: boolean;
12
12
  button: number;
13
+ keyCode?: number;
13
14
  timeStamp: number;
14
15
  mpEvent: MpEvent | undefined;
15
16
  constructor(type: string, opts: EventOptions, event?: MpEvent);
@@ -21,4 +22,3 @@ export declare class TaroEvent {
21
22
  }
22
23
  export declare function createEvent(event: MpEvent | string, node?: TaroElement): TaroEvent;
23
24
  export declare function eventHandler(event: MpEvent): any;
24
- export declare function eventHandlerTTDom(ele: any, listener: (event: MpEvent, element: any) => void, event: MpEvent): void;