@lynx-js/web-core-wasm-canary 0.0.0 → 0.0.1-canary-20260116-ce265e8f

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 (204) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/{LICENSE → LICENSE.txt} +1 -1
  3. package/Notice.txt +1 -0
  4. package/README.md +1 -0
  5. package/binary/client/client.d.ts +263 -0
  6. package/binary/client/client.js +1339 -0
  7. package/binary/client/client_bg.wasm +0 -0
  8. package/binary/client/client_bg.wasm.d.ts +70 -0
  9. package/binary/client/client_debug.d.ts +263 -0
  10. package/binary/client/client_debug.js +1339 -0
  11. package/binary/client/client_debug_bg.wasm +0 -0
  12. package/binary/client/client_debug_bg.wasm.d.ts +70 -0
  13. package/binary/encode/encode.d.ts +157 -0
  14. package/binary/encode/encode.js +17 -0
  15. package/binary/encode/encode_bg.js +749 -0
  16. package/binary/encode/encode_bg.wasm +0 -0
  17. package/binary/encode/encode_bg.wasm.d.ts +50 -0
  18. package/binary/encode/encode_debug.d.ts +157 -0
  19. package/binary/encode/encode_debug.js +17 -0
  20. package/binary/encode/encode_debug_bg.js +822 -0
  21. package/binary/encode/encode_debug_bg.wasm +0 -0
  22. package/binary/encode/encode_debug_bg.wasm.d.ts +50 -0
  23. package/binary/encode/package.json +4 -0
  24. package/css/in_shadow.css +10 -0
  25. package/css/index.css +119 -0
  26. package/dist/client/LynxCrossThreadContext.d.ts +22 -0
  27. package/dist/client/LynxCrossThreadContext.js +44 -0
  28. package/dist/client/background/background-apis/createBackgroundLynx.d.ts +24 -0
  29. package/dist/client/background/background-apis/createBackgroundLynx.js +38 -0
  30. package/dist/client/background/background-apis/createChunkLoading.d.ts +7 -0
  31. package/dist/client/background/background-apis/createChunkLoading.js +66 -0
  32. package/dist/client/background/background-apis/createElement.d.ts +5 -0
  33. package/dist/client/background/background-apis/createElement.js +18 -0
  34. package/dist/client/background/background-apis/createNapiLoader.d.ts +5 -0
  35. package/dist/client/background/background-apis/createNapiLoader.js +23 -0
  36. package/dist/client/background/background-apis/createNativeApp.d.ts +4 -0
  37. package/dist/client/background/background-apis/createNativeApp.js +98 -0
  38. package/dist/client/background/background-apis/createNativeModules.d.ts +3 -0
  39. package/dist/client/background/background-apis/createNativeModules.js +33 -0
  40. package/dist/client/background/background-apis/createPerformanceApis.d.ts +3 -0
  41. package/dist/client/background/background-apis/createPerformanceApis.js +47 -0
  42. package/dist/client/background/background-apis/createTimingSystem.d.ts +8 -0
  43. package/dist/client/background/background-apis/createTimingSystem.js +86 -0
  44. package/dist/client/background/background-apis/crossThreadHandlers/createGetCustomSection.d.ts +3 -0
  45. package/dist/client/background/background-apis/crossThreadHandlers/createGetCustomSection.js +14 -0
  46. package/dist/client/background/background-apis/crossThreadHandlers/createGetPathInfo.d.ts +3 -0
  47. package/dist/client/background/background-apis/crossThreadHandlers/createGetPathInfo.js +23 -0
  48. package/dist/client/background/background-apis/crossThreadHandlers/createInvokeUIMethod.d.ts +3 -0
  49. package/dist/client/background/background-apis/crossThreadHandlers/createInvokeUIMethod.js +24 -0
  50. package/dist/client/background/background-apis/crossThreadHandlers/createJSObjectDestructionObserver.d.ts +2 -0
  51. package/dist/client/background/background-apis/crossThreadHandlers/createJSObjectDestructionObserver.js +12 -0
  52. package/dist/client/background/background-apis/crossThreadHandlers/registerDisposeHandler.d.ts +3 -0
  53. package/dist/client/background/background-apis/crossThreadHandlers/registerDisposeHandler.js +9 -0
  54. package/dist/client/background/background-apis/crossThreadHandlers/registerPublicComponentEventHandler.d.ts +3 -0
  55. package/dist/client/background/background-apis/crossThreadHandlers/registerPublicComponentEventHandler.js +8 -0
  56. package/dist/client/background/background-apis/crossThreadHandlers/registerPublishEventHandler.d.ts +3 -0
  57. package/dist/client/background/background-apis/crossThreadHandlers/registerPublishEventHandler.js +8 -0
  58. package/dist/client/background/background-apis/crossThreadHandlers/registerSendGlobalEvent.d.ts +3 -0
  59. package/dist/client/background/background-apis/crossThreadHandlers/registerSendGlobalEvent.js +10 -0
  60. package/dist/client/background/background-apis/crossThreadHandlers/registerUpdateDataHandler.d.ts +3 -0
  61. package/dist/client/background/background-apis/crossThreadHandlers/registerUpdateDataHandler.js +5 -0
  62. package/dist/client/background/background-apis/crossThreadHandlers/registerUpdateGlobalPropsHandler.d.ts +3 -0
  63. package/dist/client/background/background-apis/crossThreadHandlers/registerUpdateGlobalPropsHandler.js +5 -0
  64. package/dist/client/background/background-apis/crossThreadHandlers/registerUpdateI18nResource.d.ts +3 -0
  65. package/dist/client/background/background-apis/crossThreadHandlers/registerUpdateI18nResource.js +9 -0
  66. package/dist/client/background/background-apis/startBackgroundThread.d.ts +2 -0
  67. package/dist/client/background/background-apis/startBackgroundThread.js +42 -0
  68. package/dist/client/background/index.d.ts +1 -0
  69. package/dist/client/background/index.js +15 -0
  70. package/dist/client/decodeWorker/cssLoader.d.ts +12 -0
  71. package/dist/client/decodeWorker/cssLoader.js +96 -0
  72. package/dist/client/decodeWorker/decode.worker.d.ts +1 -0
  73. package/dist/client/decodeWorker/decode.worker.js +338 -0
  74. package/dist/client/decodeWorker/types.d.ts +32 -0
  75. package/dist/client/decodeWorker/types.js +2 -0
  76. package/dist/client/endpoints.d.ts +53 -0
  77. package/dist/client/endpoints.js +37 -0
  78. package/dist/client/index.d.ts +3 -0
  79. package/dist/client/index.js +3 -0
  80. package/dist/client/mainthread/Background.d.ts +30 -0
  81. package/dist/client/mainthread/Background.js +207 -0
  82. package/dist/client/mainthread/ExposureServices.d.ts +11 -0
  83. package/dist/client/mainthread/ExposureServices.js +211 -0
  84. package/dist/client/mainthread/I18n.d.ts +9 -0
  85. package/dist/client/mainthread/I18n.js +44 -0
  86. package/dist/client/mainthread/LynxView.d.ts +170 -0
  87. package/dist/client/mainthread/LynxView.js +367 -0
  88. package/dist/client/mainthread/LynxViewInstance.d.ts +56 -0
  89. package/dist/client/mainthread/LynxViewInstance.js +196 -0
  90. package/dist/client/mainthread/StyleManager.d.ts +15 -0
  91. package/dist/client/mainthread/StyleManager.js +72 -0
  92. package/dist/client/mainthread/TemplateManager.d.ts +11 -0
  93. package/dist/client/mainthread/TemplateManager.js +257 -0
  94. package/dist/client/mainthread/createIFrameRealm.d.ts +6 -0
  95. package/dist/client/mainthread/createIFrameRealm.js +68 -0
  96. package/dist/client/mainthread/createMainThreadGlobalAPIs.d.ts +3 -0
  97. package/dist/client/mainthread/createMainThreadGlobalAPIs.js +82 -0
  98. package/dist/client/mainthread/crossThreadHandlers/queryNodes.d.ts +3 -0
  99. package/dist/client/mainthread/crossThreadHandlers/queryNodes.js +74 -0
  100. package/dist/client/mainthread/crossThreadHandlers/registerGetPathInfoHandler.d.ts +3 -0
  101. package/dist/client/mainthread/crossThreadHandlers/registerGetPathInfoHandler.js +51 -0
  102. package/dist/client/mainthread/crossThreadHandlers/registerInvokeUIMethodHandler.d.ts +3 -0
  103. package/dist/client/mainthread/crossThreadHandlers/registerInvokeUIMethodHandler.js +49 -0
  104. package/dist/client/mainthread/crossThreadHandlers/registerNapiModulesCallHandler.d.ts +3 -0
  105. package/dist/client/mainthread/crossThreadHandlers/registerNapiModulesCallHandler.js +8 -0
  106. package/dist/client/mainthread/crossThreadHandlers/registerNativeModulesCallHandler.d.ts +3 -0
  107. package/dist/client/mainthread/crossThreadHandlers/registerNativeModulesCallHandler.js +7 -0
  108. package/dist/client/mainthread/crossThreadHandlers/registerSelectComponentHandler.d.ts +3 -0
  109. package/dist/client/mainthread/crossThreadHandlers/registerSelectComponentHandler.js +20 -0
  110. package/dist/client/mainthread/crossThreadHandlers/registerSetNativePropsHandler.d.ts +3 -0
  111. package/dist/client/mainthread/crossThreadHandlers/registerSetNativePropsHandler.js +28 -0
  112. package/dist/client/mainthread/crossThreadHandlers/registerTriggerComponentEventHandler.d.ts +3 -0
  113. package/dist/client/mainthread/crossThreadHandlers/registerTriggerComponentEventHandler.js +12 -0
  114. package/dist/client/mainthread/crossThreadHandlers/registerTriggerElementMethodEndpointHandler.d.ts +3 -0
  115. package/dist/client/mainthread/crossThreadHandlers/registerTriggerElementMethodEndpointHandler.js +29 -0
  116. package/dist/client/mainthread/elementAPIs/WASMJSBinding.d.ts +38 -0
  117. package/dist/client/mainthread/elementAPIs/WASMJSBinding.js +122 -0
  118. package/dist/client/mainthread/elementAPIs/createCrossThreadEvent.d.ts +2 -0
  119. package/dist/client/mainthread/elementAPIs/createCrossThreadEvent.js +77 -0
  120. package/dist/client/mainthread/elementAPIs/createElementAPI.d.ts +3 -0
  121. package/dist/client/mainthread/elementAPIs/createElementAPI.js +346 -0
  122. package/dist/client/mainthread/elementAPIs/index.d.ts +2 -0
  123. package/dist/client/mainthread/elementAPIs/index.js +3 -0
  124. package/dist/client/mainthread/elementAPIs/pureElementPAPIs.d.ts +26 -0
  125. package/dist/client/mainthread/elementAPIs/pureElementPAPIs.js +85 -0
  126. package/dist/client/mainthread/utils/convertLengthToPx.d.ts +1 -0
  127. package/dist/client/mainthread/utils/convertLengthToPx.js +25 -0
  128. package/dist/client/wasm.d.ts +11 -0
  129. package/dist/client/wasm.js +52 -0
  130. package/dist/client/webElementsDynamicLoader.d.ts +8 -0
  131. package/dist/client/webElementsDynamicLoader.js +80 -0
  132. package/dist/client_prod/static/css/async/web-core-main-chunk.css +1 -0
  133. package/dist/client_prod/static/css/client.css +1 -0
  134. package/dist/client_prod/static/js/async/lynx-core-chunk.js +3 -0
  135. package/dist/client_prod/static/js/async/web-core-main-chunk.js +303 -0
  136. package/dist/client_prod/static/js/async/web-core-template-loader-thread.js +8 -0
  137. package/dist/client_prod/static/js/async/web-core-worker-chunk.js +1 -0
  138. package/dist/client_prod/static/js/async/web-elements-audio.js +1 -0
  139. package/dist/client_prod/static/js/async/web-elements-foldview.js +1 -0
  140. package/dist/client_prod/static/js/async/web-elements-input.js +1 -0
  141. package/dist/client_prod/static/js/async/web-elements-list.js +1 -0
  142. package/dist/client_prod/static/js/async/web-elements-overlay.js +1 -0
  143. package/dist/client_prod/static/js/async/web-elements-refrshview.js +1 -0
  144. package/dist/client_prod/static/js/async/web-elements-swiper.js +1 -0
  145. package/dist/client_prod/static/js/async/web-elements-textarea.js +1 -0
  146. package/dist/client_prod/static/js/async/web-elements-viewpager.js +1 -0
  147. package/dist/client_prod/static/js/client.js +2 -0
  148. package/dist/client_prod/static/wasm/7ff75609.module.wasm +0 -0
  149. package/dist/constants.d.ts +58 -0
  150. package/dist/constants.js +114 -0
  151. package/dist/encode/encodeCSS.d.ts +3 -0
  152. package/dist/encode/encodeCSS.js +99 -0
  153. package/dist/encode/encodeElementTemplate.d.ts +2 -0
  154. package/dist/encode/encodeElementTemplate.js +52 -0
  155. package/dist/encode/index.d.ts +1 -0
  156. package/dist/encode/index.js +7 -0
  157. package/dist/encode/webEncoder.d.ts +21 -0
  158. package/dist/encode/webEncoder.js +125 -0
  159. package/dist/types/BTSChunk.d.ts +3 -0
  160. package/dist/types/BTSChunk.js +5 -0
  161. package/dist/types/Cloneable.d.ts +2 -0
  162. package/dist/types/Cloneable.js +2 -0
  163. package/dist/types/DecodedTemplate.d.ts +10 -0
  164. package/dist/types/DecodedTemplate.js +7 -0
  165. package/dist/types/Element.d.ts +35 -0
  166. package/dist/types/Element.js +5 -0
  167. package/dist/types/ElementTemplateData.d.ts +15 -0
  168. package/dist/types/ElementTemplateData.js +7 -0
  169. package/dist/types/EventType.d.ts +56 -0
  170. package/dist/types/EventType.js +5 -0
  171. package/dist/types/I18nTypes.d.ts +21 -0
  172. package/dist/types/I18nTypes.js +2 -0
  173. package/dist/types/IElementPAPI.d.ts +184 -0
  174. package/dist/types/IElementPAPI.js +2 -0
  175. package/dist/types/IMtsBinding.d.ts +11 -0
  176. package/dist/types/IMtsBinding.js +7 -0
  177. package/dist/types/JSRealm.d.ts +5 -0
  178. package/dist/types/JSRealm.js +7 -0
  179. package/dist/types/LynxContextEventTarget.d.ts +12 -0
  180. package/dist/types/LynxContextEventTarget.js +5 -0
  181. package/dist/types/MainThreadLynx.d.ts +15 -0
  182. package/dist/types/MainThreadLynx.js +2 -0
  183. package/dist/types/NapiModules.d.ts +9 -0
  184. package/dist/types/NapiModules.js +5 -0
  185. package/dist/types/NativeApp.d.ts +120 -0
  186. package/dist/types/NativeApp.js +5 -0
  187. package/dist/types/NativeModules.d.ts +2 -0
  188. package/dist/types/NativeModules.js +5 -0
  189. package/dist/types/PageConfig.d.ts +9 -0
  190. package/dist/types/PageConfig.js +2 -0
  191. package/dist/types/ProcessDataCallback.d.ts +1 -0
  192. package/dist/types/ProcessDataCallback.js +2 -0
  193. package/dist/types/TimingAPIs.d.ts +32 -0
  194. package/dist/types/TimingAPIs.js +5 -0
  195. package/dist/types/UpdateDataOptions.d.ts +8 -0
  196. package/dist/types/UpdateDataOptions.js +6 -0
  197. package/dist/types/WorkerStartMessage.d.ts +14 -0
  198. package/dist/types/WorkerStartMessage.js +5 -0
  199. package/dist/types/index.d.ts +20 -0
  200. package/dist/types/index.js +7 -0
  201. package/eslint.config.js +34 -0
  202. package/package.json +87 -4
  203. package/index.js +0 -1
  204. package/selfIdentity.plist +0 -0
@@ -0,0 +1,338 @@
1
+ import { TemplateSectionLabel, MagicHeader } from '../../constants.js';
2
+ import { DecodedStyle, wasmInstance } from '../wasm.js';
3
+ let wasmModuleLoadedResolve;
4
+ const wasmModuleLoadedPromise = new Promise((resolve) => {
5
+ wasmModuleLoadedResolve = resolve;
6
+ });
7
+ import { loadStyleFromJSON } from './cssLoader.js';
8
+ class StreamReader {
9
+ #reader;
10
+ #buffer = new Uint8Array(0);
11
+ constructor(reader) {
12
+ this.#reader = reader;
13
+ }
14
+ async read(size) {
15
+ if (this.#buffer.length >= size) {
16
+ const result = this.#buffer.slice(0, size);
17
+ this.#buffer = this.#buffer.slice(size);
18
+ return result;
19
+ }
20
+ while (this.#buffer.length < size) {
21
+ const { done, value } = await this.#reader.read();
22
+ if (value) {
23
+ const newBuffer = new Uint8Array(this.#buffer.length + value.length);
24
+ newBuffer.set(this.#buffer);
25
+ newBuffer.set(value, this.#buffer.length);
26
+ this.#buffer = newBuffer;
27
+ }
28
+ if (done) {
29
+ break;
30
+ }
31
+ }
32
+ if (this.#buffer.length < size) {
33
+ if (this.#buffer.length === 0) {
34
+ return null;
35
+ }
36
+ throw new Error(`Unexpected end of stream. Expected ${size} bytes, got ${this.#buffer.length}`);
37
+ }
38
+ const result = this.#buffer.slice(0, size);
39
+ this.#buffer = this.#buffer.slice(size);
40
+ return result;
41
+ }
42
+ async readRest() {
43
+ while (true) {
44
+ const { done, value } = await this.#reader.read();
45
+ if (value) {
46
+ const newBuffer = new Uint8Array(this.#buffer.length + value.length);
47
+ newBuffer.set(this.#buffer);
48
+ newBuffer.set(value, this.#buffer.length);
49
+ this.#buffer = newBuffer;
50
+ }
51
+ if (done) {
52
+ break;
53
+ }
54
+ }
55
+ const result = this.#buffer;
56
+ this.#buffer = new Uint8Array(0);
57
+ return result;
58
+ }
59
+ }
60
+ function decodeJSONMap(buffer) {
61
+ const utf16Array = new Uint16Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 2);
62
+ let jsonString = '';
63
+ const CHUNK_SIZE = 8192;
64
+ for (let i = 0; i < utf16Array.length; i += CHUNK_SIZE) {
65
+ jsonString += String.fromCharCode.apply(null, utf16Array.subarray(i, i + CHUNK_SIZE));
66
+ }
67
+ return JSON.parse(jsonString);
68
+ }
69
+ function decodeBinaryMap(buffer) {
70
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
71
+ let offset = 0;
72
+ if (buffer.byteLength < 4) {
73
+ throw new Error('Buffer too short for count');
74
+ }
75
+ const count = view.getUint32(offset, true);
76
+ offset += 4;
77
+ const result = {};
78
+ const decoder = new TextDecoder();
79
+ for (let i = 0; i < count; i++) {
80
+ if (buffer.byteLength < offset + 4) {
81
+ throw new Error('Buffer too short for key length');
82
+ }
83
+ const keyLen = view.getUint32(offset, true);
84
+ offset += 4;
85
+ if (buffer.byteLength < offset + keyLen) {
86
+ throw new Error('Buffer too short for key');
87
+ }
88
+ const key = decoder.decode(buffer.subarray(offset, offset + keyLen));
89
+ offset += keyLen;
90
+ if (buffer.byteLength < offset + 4) {
91
+ throw new Error('Buffer too short for value length');
92
+ }
93
+ const valLen = view.getUint32(offset, true);
94
+ offset += 4;
95
+ if (buffer.byteLength < offset + valLen) {
96
+ throw new Error('Buffer too short for value');
97
+ }
98
+ const val = buffer.subarray(offset, offset + valLen);
99
+ offset += valLen;
100
+ result[key] = val;
101
+ }
102
+ return result;
103
+ }
104
+ self.onmessage = async (event) => {
105
+ const data = event.data;
106
+ if (data.type === 'init') {
107
+ const { wasmModule } = data;
108
+ wasmInstance.initSync({ module: wasmModule });
109
+ wasmModuleLoadedResolve();
110
+ }
111
+ else if (data.type === 'load') {
112
+ const { url, fetchUrl, overrideConfig } = data;
113
+ try {
114
+ const response = await fetch(fetchUrl, {
115
+ headers: {
116
+ 'Content-Type': 'octet-stream',
117
+ },
118
+ });
119
+ if (!response.body || response.status !== 200) {
120
+ throw new Error(`Failed to fetch template: ${response.statusText}`);
121
+ }
122
+ const reader = response.body.getReader();
123
+ await handleStream(url, reader, overrideConfig);
124
+ postMessage({ type: 'done', url });
125
+ }
126
+ catch (error) {
127
+ postMessage({ type: 'error', url, error: error.message });
128
+ }
129
+ }
130
+ };
131
+ async function handleStream(url, reader, overrideConfig) {
132
+ const streamReader = new StreamReader(reader);
133
+ let config = {};
134
+ // 1. Check MagicHeader
135
+ const headerBytes = await streamReader.read(8);
136
+ if (!headerBytes) {
137
+ throw new Error('Empty stream');
138
+ }
139
+ // Check if JSON (starts with {)
140
+ if (headerBytes[0] === 123) {
141
+ const rest = await streamReader.readRest();
142
+ const decoder = new TextDecoder();
143
+ const jsonStr = decoder.decode(headerBytes) + decoder.decode(rest);
144
+ const json = JSON.parse(jsonStr);
145
+ await handleJSON(json, url, overrideConfig);
146
+ return;
147
+ }
148
+ const view = new DataView(headerBytes.buffer, headerBytes.byteOffset, headerBytes.byteLength);
149
+ const magic = view.getBigUint64(0, true); // Little Endian
150
+ if (magic !== BigInt(MagicHeader)) {
151
+ throw new Error('Invalid Magic Header');
152
+ }
153
+ // 2. Check Version
154
+ const versionBytes = await streamReader.read(4);
155
+ if (!versionBytes) {
156
+ throw new Error('Unexpected EOF reading version');
157
+ }
158
+ const versionView = new DataView(versionBytes.buffer, versionBytes.byteOffset, versionBytes.byteLength);
159
+ const version = versionView.getUint32(0, true);
160
+ if (version > 1) {
161
+ throw new Error(`Unsupported version: ${version}`);
162
+ }
163
+ // 3. Read Sections
164
+ while (true) {
165
+ const labelBytes = await streamReader.read(4);
166
+ if (!labelBytes) {
167
+ break; // EOF
168
+ }
169
+ const labelView = new DataView(labelBytes.buffer, labelBytes.byteOffset, labelBytes.byteLength);
170
+ const label = labelView.getUint32(0, true);
171
+ const lengthBytes = await streamReader.read(4);
172
+ if (!lengthBytes) {
173
+ throw new Error('Unexpected EOF reading section length');
174
+ }
175
+ const lengthView = new DataView(lengthBytes.buffer, lengthBytes.byteOffset, lengthBytes.byteLength);
176
+ const length = lengthView.getUint32(0, true);
177
+ const content = await streamReader.read(length);
178
+ if (!content) {
179
+ throw new Error(`Unexpected EOF reading section content. Expected ${length} bytes.`);
180
+ }
181
+ switch (label) {
182
+ case TemplateSectionLabel.Configurations: {
183
+ config = overrideConfig
184
+ ? { ...decodeJSONMap(content), ...overrideConfig }
185
+ : decodeJSONMap(content);
186
+ postMessage({ type: 'section', label, url, data: config });
187
+ break;
188
+ }
189
+ case TemplateSectionLabel.StyleInfo: {
190
+ await wasmModuleLoadedPromise;
191
+ const buffer = DecodedStyle.webWorkerDecode(content, config['enableCSSSelector'] === 'true', config['isLazy'] === 'true' ? url : undefined);
192
+ postMessage({
193
+ type: 'section',
194
+ label,
195
+ url,
196
+ data: buffer.buffer,
197
+ config,
198
+ }, {
199
+ transfer: [buffer.buffer],
200
+ });
201
+ break;
202
+ }
203
+ case TemplateSectionLabel.LepusCode: {
204
+ const codeMap = decodeBinaryMap(content);
205
+ const isLazy = config['isLazy'] === 'true';
206
+ const blobMap = {};
207
+ for (const [key, code] of Object.entries(codeMap)) {
208
+ const prefix = `(function(){ "use strict"; const navigator=void 0,postMessage=void 0,window=void 0; ${isLazy ? 'module.exports=' : ''} `;
209
+ const suffix = ` \n })()\n//# sourceURL=${url}\n`;
210
+ const blob = new Blob([prefix, code, suffix], {
211
+ type: 'text/javascript; charset=utf-8',
212
+ });
213
+ blobMap[key] = URL.createObjectURL(blob);
214
+ }
215
+ postMessage({ type: 'section', label, url, data: blobMap, config });
216
+ break;
217
+ }
218
+ case TemplateSectionLabel.ElementTemplates: {
219
+ postMessage({ type: 'section', label, url, data: content }, [content.buffer]);
220
+ break;
221
+ }
222
+ case TemplateSectionLabel.CustomSections: {
223
+ postMessage({ type: 'section', label, url, data: content.buffer }, {
224
+ transfer: [content.buffer],
225
+ });
226
+ break;
227
+ }
228
+ case TemplateSectionLabel.Manifest: {
229
+ const codeMap = decodeBinaryMap(content);
230
+ const blobMap = {};
231
+ for (const [key, code] of Object.entries(codeMap)) {
232
+ const suffix = `//# sourceURL=${url}/${key}`;
233
+ const blob = new Blob([code, suffix], {
234
+ type: 'text/javascript; charset=utf-8',
235
+ });
236
+ blobMap[key] = URL.createObjectURL(blob);
237
+ }
238
+ postMessage({ type: 'section', label, url, data: blobMap });
239
+ break;
240
+ }
241
+ default:
242
+ throw new Error(`Unknown section label: ${label}`);
243
+ }
244
+ }
245
+ }
246
+ async function handleJSON(json, url, overrideConfig) {
247
+ // Configurations
248
+ let config = {};
249
+ if (json.pageConfig) {
250
+ config = { ...json.pageConfig };
251
+ }
252
+ if (overrideConfig) {
253
+ config = { ...config, ...overrideConfig };
254
+ }
255
+ postMessage({
256
+ type: 'section',
257
+ label: TemplateSectionLabel.Configurations,
258
+ url,
259
+ data: config,
260
+ });
261
+ // StyleInfo
262
+ if (json.styleInfo) {
263
+ await wasmModuleLoadedPromise;
264
+ const buffer = loadStyleFromJSON(json.styleInfo, config['enableCSSSelector'] === 'true', config['isLazy'] === 'true' ? url : undefined);
265
+ postMessage({
266
+ type: 'section',
267
+ label: TemplateSectionLabel.StyleInfo,
268
+ url,
269
+ data: buffer.buffer,
270
+ config,
271
+ }, {
272
+ transfer: [buffer.buffer],
273
+ });
274
+ }
275
+ // LepusCode
276
+ if (json.lepusCode) {
277
+ // Flattened structure in json: { root: "...", chunk1: "..." }
278
+ const isLazy = config['isLazy'] === 'true';
279
+ const blobMap = {};
280
+ for (const [key, code] of Object.entries(json.lepusCode)) {
281
+ if (typeof code !== 'string')
282
+ continue;
283
+ const prefix = `(function(){ "use strict"; const navigator=void 0,postMessage=void 0,window=void 0; ${isLazy ? 'module.exports=' : ''} `;
284
+ const suffix = ` \n })()\n//# sourceURL=${url}/${key}\n`;
285
+ const blob = new Blob([prefix, code, suffix], {
286
+ type: 'text/javascript;',
287
+ });
288
+ blobMap[key] = URL.createObjectURL(blob);
289
+ }
290
+ postMessage({
291
+ type: 'section',
292
+ label: TemplateSectionLabel.LepusCode,
293
+ url,
294
+ data: blobMap,
295
+ config,
296
+ });
297
+ }
298
+ // Manifest
299
+ if (json.manifest) {
300
+ const blobMap = {};
301
+ for (const [key, code] of Object.entries(json.manifest)) {
302
+ if (typeof code !== 'string')
303
+ continue;
304
+ const blob = new Blob([code], {
305
+ type: 'text/javascript;',
306
+ });
307
+ blobMap[key] = URL.createObjectURL(blob);
308
+ }
309
+ postMessage({
310
+ type: 'section',
311
+ label: TemplateSectionLabel.Manifest,
312
+ url,
313
+ data: blobMap,
314
+ });
315
+ }
316
+ // CustomSections
317
+ if (json.customSections) {
318
+ // Currently we don't have a way to encode custom sections here.
319
+ // If main thread accepts generic object, we send it.
320
+ // But TemplateManager expects buffer?
321
+ // TemplateManager: case CustomSections: #setCustomSection(url, data). data: any.
322
+ // So passing object is fine!
323
+ postMessage({
324
+ type: 'section',
325
+ label: TemplateSectionLabel.CustomSections,
326
+ url,
327
+ data: json.customSections,
328
+ });
329
+ }
330
+ // ElementTemplates
331
+ if (json.elementTemplates) {
332
+ // TemplateManager expects Uint8Array for ElementTemplates.
333
+ // We can't support this easily for JSON.
334
+ throw new Error('ElementTemplates in JSON artifacts are not supported yet.');
335
+ }
336
+ }
337
+ postMessage({ type: 'ready' });
338
+ //# sourceMappingURL=decode.worker.js.map
@@ -0,0 +1,32 @@
1
+ import type { PageConfig } from '../../types/PageConfig.js';
2
+ export interface DecodeWorkerMessage {
3
+ type: string;
4
+ url: string;
5
+ }
6
+ export interface InitMessage extends DecodeWorkerMessage {
7
+ type: 'init';
8
+ wasmModule: WebAssembly.Module;
9
+ }
10
+ export interface LoadTemplateMessage extends DecodeWorkerMessage {
11
+ type: 'load';
12
+ fetchUrl: string;
13
+ overrideConfig?: Record<string, string>;
14
+ }
15
+ export interface SectionMessage extends DecodeWorkerMessage {
16
+ type: 'section';
17
+ label: number;
18
+ data: any;
19
+ config?: PageConfig;
20
+ }
21
+ export interface ErrorMessage extends DecodeWorkerMessage {
22
+ type: 'error';
23
+ error: string;
24
+ }
25
+ export interface DoneMessage extends DecodeWorkerMessage {
26
+ type: 'done';
27
+ }
28
+ export interface ReadyMessage {
29
+ type: 'ready';
30
+ }
31
+ export type WorkerMessage = LoadTemplateMessage;
32
+ export type MainMessage = SectionMessage | ErrorMessage | DoneMessage | ReadyMessage;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,53 @@
1
+ import type { Cloneable, CloneableObject, LynxCrossThreadEvent, InvokeCallbackRes, ElementAnimationOptions, UpdateDataOptions, TimingEntry } from '../types/index.js';
2
+ import type { IdentifierType } from '../constants.js';
3
+ export declare const publicComponentEventEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[componentId: string, hname: string, LynxCrossThreadEvent<{
4
+ [key: string]: string | number | null | undefined;
5
+ }>]>;
6
+ export declare const publishEventEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[string, LynxCrossThreadEvent<{
7
+ [key: string]: string | number | null | undefined;
8
+ }>]>;
9
+ export declare const switchExposureServiceEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[boolean, boolean]>;
10
+ export declare const updateDataEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[Cloneable, UpdateDataOptions | undefined], void>;
11
+ export declare const sendGlobalEventEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[string, Cloneable[] | undefined]>;
12
+ export declare const disposeEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[], void>;
13
+ export declare const BackgroundThreadStartEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[], void>;
14
+ /**
15
+ * Error message, info
16
+ */
17
+ export declare const reportErrorEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[Error, unknown, string]>;
18
+ export declare const callLepusMethodEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[name: string, data: unknown], void>;
19
+ export declare const invokeUIMethodEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[type: IdentifierType, identifier: string, component_id: string, method: string, params: object, root_unique_id: number | undefined], InvokeCallbackRes>;
20
+ export declare const setNativePropsEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[type: IdentifierType, identifier: string, component_id: string, first_only: boolean, native_props: object, root_unique_id: number | undefined], void>;
21
+ export declare const getPathInfoEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[type: IdentifierType, identifier: string, component_id: string, first_only: boolean, root_unique_id?: number | undefined], InvokeCallbackRes>;
22
+ export declare const nativeModulesCallEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[name: string, data: Cloneable, moduleName: string], any>;
23
+ export declare const napiModulesCallEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncWithTransfer<[name: string, data: Cloneable, moduleName: string], any>;
24
+ export declare const getCustomSectionsEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[string], Cloneable>;
25
+ export declare const markTimingEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[TimingEntry[]]>;
26
+ export declare const postTimingFlagsEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[timingFlags: string[], pipelineId: string | undefined]>;
27
+ export declare const triggerComponentEventEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[id: string, params: {
28
+ eventDetail: CloneableObject;
29
+ eventOption: CloneableObject;
30
+ componentId: string;
31
+ }]>;
32
+ export declare const selectComponentEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[componentId: string, idSelector: string, single: boolean], void>;
33
+ export declare const dispatchLynxViewEventEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[eventType: string, detail: CloneableObject]>;
34
+ export declare const dispatchNapiModuleEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[data: Cloneable]>;
35
+ export declare const dispatchCoreContextOnBackgroundEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[{
36
+ type: string;
37
+ data: Cloneable;
38
+ }]>;
39
+ export declare const dispatchJSContextOnMainThreadEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[{
40
+ type: string;
41
+ data: Cloneable;
42
+ }]>;
43
+ export declare const triggerElementMethodEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[method: string, id: string, options: ElementAnimationOptions]>;
44
+ export declare const updateGlobalPropsEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[Cloneable]>;
45
+ export declare const updateI18nResourcesEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[Cloneable]>;
46
+ export declare const dispatchI18nResourceEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsyncVoid<[Cloneable]>;
47
+ export declare const queryComponentEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[string], {
48
+ code: number;
49
+ detail: {
50
+ schema: string;
51
+ };
52
+ }>;
53
+ export declare const updateBTSChunkEndpoint: import("@lynx-js/web-worker-rpc").RpcEndpointAsync<[string, Record<string, string>], void>;
@@ -0,0 +1,37 @@
1
+ // Copyright 2023 The Lynx Authors. All rights reserved.
2
+ // Licensed under the Apache License Version 2.0 that can be found in the
3
+ // LICENSE file in the root directory of this source tree.
4
+ import { createRpcEndpoint } from '@lynx-js/web-worker-rpc';
5
+ export const publicComponentEventEndpoint = createRpcEndpoint('publicComponentEvent', false, false);
6
+ export const publishEventEndpoint = createRpcEndpoint('publishEvent', false, false);
7
+ export const switchExposureServiceEndpoint = createRpcEndpoint('switchExposureServiceEndpoint', false, false);
8
+ export const updateDataEndpoint = createRpcEndpoint('updateData', false, true);
9
+ export const sendGlobalEventEndpoint = createRpcEndpoint('sendGlobalEventEndpoint', false, false);
10
+ export const disposeEndpoint = createRpcEndpoint('dispose', false, true);
11
+ export const BackgroundThreadStartEndpoint = createRpcEndpoint('start', false, true);
12
+ /**
13
+ * Error message, info
14
+ */
15
+ export const reportErrorEndpoint = createRpcEndpoint('reportError', false, false);
16
+ export const callLepusMethodEndpoint = createRpcEndpoint('callLepusMethod', false, true);
17
+ export const invokeUIMethodEndpoint = createRpcEndpoint('__invokeUIMethod', false, true);
18
+ export const setNativePropsEndpoint = createRpcEndpoint('__setNativeProps', false, true);
19
+ export const getPathInfoEndpoint = createRpcEndpoint('__getPathInfo', false, true);
20
+ export const nativeModulesCallEndpoint = createRpcEndpoint('nativeModulesCall', false, true);
21
+ export const napiModulesCallEndpoint = createRpcEndpoint('napiModulesCall', false, true, true);
22
+ export const getCustomSectionsEndpoint = createRpcEndpoint('getCustomSections', false, true);
23
+ export const markTimingEndpoint = createRpcEndpoint('markTiming', false, false);
24
+ export const postTimingFlagsEndpoint = createRpcEndpoint('postTimingFlags', false, false);
25
+ export const triggerComponentEventEndpoint = createRpcEndpoint('__triggerComponentEvent', false, false);
26
+ export const selectComponentEndpoint = createRpcEndpoint('__selectComponent', false, true);
27
+ export const dispatchLynxViewEventEndpoint = createRpcEndpoint('dispatchLynxViewEvent', false, false);
28
+ export const dispatchNapiModuleEndpoint = createRpcEndpoint('dispatchNapiModule', false, false);
29
+ export const dispatchCoreContextOnBackgroundEndpoint = createRpcEndpoint('dispatchCoreContextOnBackground', false, false);
30
+ export const dispatchJSContextOnMainThreadEndpoint = createRpcEndpoint('dispatchJSContextOnMainThread', false, false);
31
+ export const triggerElementMethodEndpoint = createRpcEndpoint('__triggerElementMethod', false, false);
32
+ export const updateGlobalPropsEndpoint = createRpcEndpoint('updateGlobalProps', false, false);
33
+ export const updateI18nResourcesEndpoint = createRpcEndpoint('updateI18nResources', false, false);
34
+ export const dispatchI18nResourceEndpoint = createRpcEndpoint('dispatchI18nResource', false, false);
35
+ export const queryComponentEndpoint = createRpcEndpoint('queryComponent', false, true);
36
+ export const updateBTSChunkEndpoint = createRpcEndpoint('updateBTSChunkEndpoint', false, true);
37
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1,3 @@
1
+ import './mainthread/LynxView.js';
2
+ import '../../css/index.css';
3
+ export type { LynxViewElement } from './mainthread/LynxView.js';
@@ -0,0 +1,3 @@
1
+ import './mainthread/LynxView.js';
2
+ import '../../css/index.css';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,30 @@
1
+ import { type RpcCallType } from '@lynx-js/web-worker-rpc';
2
+ import { postTimingFlagsEndpoint, publicComponentEventEndpoint, publishEventEndpoint, sendGlobalEventEndpoint, dispatchI18nResourceEndpoint, updateDataEndpoint, updateGlobalPropsEndpoint, updateBTSChunkEndpoint } from '../endpoints.js';
3
+ import type { Cloneable, NapiModulesMap, NativeModulesMap } from '../../types/index.js';
4
+ import { LynxCrossThreadContext } from '../LynxCrossThreadContext.js';
5
+ import { type LynxViewInstance } from './LynxViewInstance.js';
6
+ export declare class BackgroundThread implements AsyncDisposable {
7
+ #private;
8
+ static contextIdToBackgroundWorker: ({
9
+ worker: Worker;
10
+ runningCards: number;
11
+ } | undefined)[];
12
+ readonly jsContext: LynxCrossThreadContext;
13
+ readonly postTimingFlags: RpcCallType<typeof postTimingFlagsEndpoint>;
14
+ readonly sendGlobalEvent: RpcCallType<typeof sendGlobalEventEndpoint>;
15
+ readonly publicComponentEvent: RpcCallType<typeof publicComponentEventEndpoint>;
16
+ readonly publishEvent: RpcCallType<typeof publishEventEndpoint>;
17
+ readonly dispatchI18nResource: RpcCallType<typeof dispatchI18nResourceEndpoint>;
18
+ readonly updateData: RpcCallType<typeof updateDataEndpoint>;
19
+ readonly updateGlobalProps: RpcCallType<typeof updateGlobalPropsEndpoint>;
20
+ readonly updateBTSChunk: RpcCallType<typeof updateBTSChunkEndpoint>;
21
+ constructor(lynxGroupId: number | undefined, lynxViewInstance: LynxViewInstance);
22
+ startWebWorker(initData: Cloneable, globalProps: Cloneable, cardType: string, customSections: Record<string, Cloneable>, nativeModulesMap: NativeModulesMap, napiModulesMap: NapiModulesMap): void;
23
+ startBTS(): void;
24
+ markTiming(timingKey: string, pipelineId?: string, timeStamp?: number): void;
25
+ /**
26
+ * Flush the timing info immediately.
27
+ */
28
+ flushTimingInfo(): void;
29
+ [Symbol.asyncDispose](): Promise<void>;
30
+ }