@lynx-js/web-core-wasm 0.0.3 → 0.0.5

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 (60) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/binary/client/client.d.ts +6 -8
  3. package/binary/client/client.js +21 -28
  4. package/binary/client/client_bg.wasm +0 -0
  5. package/binary/client/client_bg.wasm.d.ts +3 -4
  6. package/binary/client/client_debug.d.ts +32 -34
  7. package/binary/client/client_debug.js +21 -28
  8. package/binary/client/client_debug_bg.wasm +0 -0
  9. package/binary/client/client_debug_bg.wasm.d.ts +29 -30
  10. package/binary/encode/encode_bg.wasm +0 -0
  11. package/binary/encode/encode_debug_bg.wasm +0 -0
  12. package/binary/encode/encode_debug_bg.wasm.d.ts +1 -1
  13. package/binary/server/package.json +4 -0
  14. package/binary/server/server.d.ts +134 -0
  15. package/binary/server/server.js +839 -0
  16. package/binary/server/server_bg.wasm +0 -0
  17. package/binary/server/server_bg.wasm.d.ts +51 -0
  18. package/binary/server/server_debug.d.ts +134 -0
  19. package/binary/server/server_debug.js +839 -0
  20. package/binary/server/server_debug_bg.wasm +0 -0
  21. package/binary/server/server_debug_bg.wasm.d.ts +51 -0
  22. package/dist/client/decodeWorker/decode.worker.js +24 -45
  23. package/dist/client/mainthread/Background.js +1 -2
  24. package/dist/client/mainthread/LynxViewInstance.d.ts +2 -4
  25. package/dist/client/mainthread/LynxViewInstance.js +22 -34
  26. package/dist/client/mainthread/TemplateManager.d.ts +1 -0
  27. package/dist/client/mainthread/TemplateManager.js +14 -3
  28. package/dist/client/mainthread/elementAPIs/createElementAPI.js +2 -9
  29. package/dist/client/mainthread/utils/requestIdleCallback.d.ts +1 -0
  30. package/dist/client/mainthread/utils/requestIdleCallback.js +5 -0
  31. package/dist/client/wasm.d.ts +0 -1
  32. package/dist/client/wasm.js +0 -3
  33. package/dist/client_prod/static/js/async/web-core-main-chunk.js +1 -1
  34. package/dist/client_prod/static/js/async/web-core-template-loader-thread.js +4 -6
  35. package/dist/client_prod/static/js/async/web-elements.js +10 -10
  36. package/dist/client_prod/static/js/client.js +2 -2
  37. package/dist/client_prod/static/wasm/af9fb056.module.wasm +0 -0
  38. package/dist/common/decodeUtils.d.ts +1 -0
  39. package/dist/common/decodeUtils.js +41 -0
  40. package/dist/constants.d.ts +3 -2
  41. package/dist/constants.js +3 -2
  42. package/dist/encode/webEncoder.js +5 -3
  43. package/dist/server/createServerLynx.d.ts +3 -0
  44. package/dist/server/createServerLynx.js +40 -0
  45. package/dist/server/decode.d.ts +7 -0
  46. package/dist/server/decode.js +83 -0
  47. package/dist/server/deploy.d.ts +2 -0
  48. package/dist/server/deploy.js +61 -0
  49. package/dist/server/elementAPIs/createElementAPI.d.ts +13 -0
  50. package/dist/server/elementAPIs/createElementAPI.js +235 -0
  51. package/dist/server/elementAPIs/pureElementAPIs.d.ts +38 -0
  52. package/dist/server/elementAPIs/pureElementAPIs.js +112 -0
  53. package/dist/server/index.d.ts +4 -0
  54. package/dist/server/index.js +10 -0
  55. package/dist/server/wasm.d.ts +1 -0
  56. package/dist/server/wasm.js +7 -0
  57. package/dist/types/DecodedTemplate.d.ts +2 -0
  58. package/package.json +12 -7
  59. package/dist/client_prod/static/css/async/web-elements.css +0 -1
  60. package/dist/client_prod/static/wasm/a156b496.module.wasm +0 -0
@@ -0,0 +1,51 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export const memory: WebAssembly.Memory;
4
+ export const __wbg_mainthreadservercontext_free: (a: number, b: number) => void;
5
+ export const mainthreadservercontext_add_class: (a: number, b: number, c: number, d: number) => [number, number];
6
+ export const mainthreadservercontext_add_inline_style_raw_string_key: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
7
+ export const mainthreadservercontext_append_child: (a: number, b: number, c: number) => void;
8
+ export const mainthreadservercontext_create_element: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
9
+ export const mainthreadservercontext_generate_html: (a: number, b: number) => [number, number];
10
+ export const mainthreadservercontext_get_attribute: (a: number, b: number, c: number, d: number) => [number, number];
11
+ export const mainthreadservercontext_get_attributes: (a: number, b: number) => [number, number, number];
12
+ export const mainthreadservercontext_get_inline_styles_in_key_value_vec: (a: number, b: number, c: number, d: number) => void;
13
+ export const mainthreadservercontext_get_page_css: (a: number) => [number, number];
14
+ export const mainthreadservercontext_get_tag: (a: number, b: number) => [number, number];
15
+ export const mainthreadservercontext_new: (a: number, b: number, c: number) => number;
16
+ export const mainthreadservercontext_push_style_sheet: (a: number, b: number, c: number, d: number) => [number, number];
17
+ export const mainthreadservercontext_remove_attribute: (a: number, b: number, c: number, d: number) => void;
18
+ export const mainthreadservercontext_set_attribute: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
19
+ export const mainthreadservercontext_set_css_id: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
20
+ export const mainthreadservercontext_set_inline_styles_in_str: (a: number, b: number, c: number, d: number) => number;
21
+ export const mainthreadservercontext_set_inline_styles_number_key: (a: number, b: number, c: number, d: number, e: number) => void;
22
+ export const mainthreadservercontext_update_css_og_style: (a: number, b: number, c: number, d: number) => [number, number];
23
+ export const __wbg_rawstyleinfo_free: (a: number, b: number) => void;
24
+ export const __wbg_rule_free: (a: number, b: number) => void;
25
+ export const __wbg_ruleprelude_free: (a: number, b: number) => void;
26
+ export const __wbg_selector_free: (a: number, b: number) => void;
27
+ export const rawstyleinfo_append_import: (a: number, b: number, c: number) => void;
28
+ export const rawstyleinfo_new: () => number;
29
+ export const rawstyleinfo_push_rule: (a: number, b: number, c: number) => void;
30
+ export const rule_new: (a: number, b: number) => [number, number, number];
31
+ export const rule_push_declaration: (a: number, b: number, c: number, d: number, e: number) => void;
32
+ export const rule_push_rule_children: (a: number, b: number) => void;
33
+ export const rule_set_prelude: (a: number, b: number) => void;
34
+ export const ruleprelude_new: () => number;
35
+ export const ruleprelude_push_selector: (a: number, b: number) => void;
36
+ export const selector_new: () => number;
37
+ export const selector_push_one_selector_section: (a: number, b: number, c: number, d: number, e: number) => [number, number];
38
+ export const decode_style_info: (a: any, b: number, c: number, d: number) => [number, number, number];
39
+ export const encode_legacy_json_generated_raw_style_info: (a: number, b: number, c: number, d: number) => [number, number, number];
40
+ export const get_font_face_content: (a: any) => [number, number, number, number];
41
+ export const get_style_content: (a: any) => [number, number, number, number];
42
+ export const __wbg_stylesheetresource_free: (a: number, b: number) => void;
43
+ export const stylesheetresource_new: (a: any, b: any) => [number, number, number];
44
+ export const __wbindgen_malloc: (a: number, b: number) => number;
45
+ export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
46
+ export const __wbindgen_exn_store: (a: number) => void;
47
+ export const __externref_table_alloc: () => number;
48
+ export const __wbindgen_externrefs: WebAssembly.Table;
49
+ export const __externref_table_dealloc: (a: number) => void;
50
+ export const __wbindgen_free: (a: number, b: number, c: number) => void;
51
+ export const __wbindgen_start: () => void;
@@ -1,10 +1,11 @@
1
- import { TemplateSectionLabel, MagicHeader } from '../../constants.js';
1
+ import { TemplateSectionLabel, MagicHeader0, MagicHeader1, } from '../../constants.js';
2
2
  import { wasmInstance } from '../wasm.js';
3
3
  let wasmModuleLoadedResolve;
4
4
  const wasmModuleLoadedPromise = new Promise((resolve) => {
5
5
  wasmModuleLoadedResolve = resolve;
6
6
  });
7
7
  import { loadStyleFromJSON } from './cssLoader.js';
8
+ import { decodeBinaryMap } from '../../common/decodeUtils.js';
8
9
  class StreamReader {
9
10
  #reader;
10
11
  #buffer = new Uint8Array(0);
@@ -66,41 +67,6 @@ function decodeJSONMap(buffer) {
66
67
  }
67
68
  return JSON.parse(jsonString);
68
69
  }
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
70
  self.onmessage = async (event) => {
105
71
  const data = event.data;
106
72
  if (data.type === 'init') {
@@ -146,8 +112,9 @@ async function handleStream(url, reader, overrideConfig) {
146
112
  return;
147
113
  }
148
114
  const view = new DataView(headerBytes.buffer, headerBytes.byteOffset, headerBytes.byteLength);
149
- const magic = view.getBigUint64(0, true); // Little Endian
150
- if (magic !== BigInt(MagicHeader)) {
115
+ const magic0 = view.getUint32(0, true);
116
+ const magic1 = view.getUint32(4, true);
117
+ if (magic0 !== MagicHeader0 || magic1 !== MagicHeader1) {
151
118
  throw new Error('Invalid Magic Header');
152
119
  }
153
120
  // 2. Check Version
@@ -205,9 +172,16 @@ async function handleStream(url, reader, overrideConfig) {
205
172
  const isLazy = config['isLazy'] === 'true';
206
173
  const blobMap = {};
207
174
  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], {
175
+ const blob = new Blob([
176
+ '//# allFunctionsCalledOnLoad\n(function(){ "use strict"; const navigator=void 0,postMessage=void 0,window=void 0; ',
177
+ isLazy ? 'module.exports=' : '',
178
+ code,
179
+ ' \n })()\n//# sourceURL=',
180
+ url,
181
+ '/',
182
+ key,
183
+ '\n',
184
+ ], {
211
185
  type: 'text/javascript; charset=utf-8',
212
186
  });
213
187
  blobMap[key] = URL.createObjectURL(blob);
@@ -229,8 +203,13 @@ async function handleStream(url, reader, overrideConfig) {
229
203
  const codeMap = decodeBinaryMap(content);
230
204
  const blobMap = {};
231
205
  for (const [key, code] of Object.entries(codeMap)) {
232
- const suffix = `//# sourceURL=${url}/${key}`;
233
- const blob = new Blob([code, suffix], {
206
+ const blob = new Blob([
207
+ code,
208
+ '//# sourceURL=',
209
+ url,
210
+ '/',
211
+ key,
212
+ ], {
234
213
  type: 'text/javascript; charset=utf-8',
235
214
  });
236
215
  blobMap[key] = URL.createObjectURL(blob);
@@ -281,10 +260,10 @@ async function handleJSON(json, url, overrideConfig) {
281
260
  for (const [key, code] of Object.entries(json.lepusCode)) {
282
261
  if (typeof code !== 'string')
283
262
  continue;
284
- const prefix = `(function(){ "use strict"; const navigator=void 0,postMessage=void 0,window=void 0; ${isLazy ? 'module.exports=' : ''} `;
263
+ const prefix = `//# allFunctionsCalledOnLoad\n(function(){ "use strict"; const navigator=void 0,postMessage=void 0,window=void 0; ${isLazy ? 'module.exports=' : ''} `;
285
264
  const suffix = ` \n })()\n//# sourceURL=${url}/${key}\n`;
286
265
  const blob = new Blob([prefix, code, suffix], {
287
- type: 'text/javascript;',
266
+ type: 'text/javascript; charset=utf-8',
288
267
  });
289
268
  blobMap[key] = URL.createObjectURL(blob);
290
269
  }
@@ -51,8 +51,7 @@ export class BackgroundThread {
51
51
  constructor(lynxGroupId, lynxViewInstance) {
52
52
  this.#lynxGroupId = lynxGroupId;
53
53
  this.#lynxViewInstance = lynxViewInstance;
54
- const btsRpc = new Rpc(undefined, 'main-to-bg');
55
- this.#rpc = btsRpc;
54
+ this.#rpc = new Rpc(undefined, 'main-to-bg');
56
55
  this.jsContext = new LynxCrossThreadContext({
57
56
  rpc: this.#rpc,
58
57
  receiveEventEndpoint: dispatchJSContextOnMainThreadEndpoint,
@@ -34,14 +34,12 @@ export declare class LynxViewInstance implements AsyncDisposable {
34
34
  readonly i18nManager: I18nManager;
35
35
  readonly exposureServices: ExposureServices;
36
36
  readonly webElementsLoadingPromises: Promise<void>[];
37
- readonly styleReadyPromise: Promise<void>;
38
- readonly styleReadyResolve: () => void;
39
37
  lepusCodeUrls: Map<string, Record<string, string>>;
40
38
  constructor(parentDom: LynxViewElement, initData: Cloneable, globalprops: Cloneable, templateUrl: string, rootDom: ShadowRoot, mtsRealm: JSRealm, lynxGroupId: number | undefined, nativeModulesMap?: NativeModulesMap, napiModulesMap?: NapiModulesMap, initI18nResources?: InitI18nResources);
41
39
  onPageConfigReady(config: PageConfig): void;
42
40
  onStyleInfoReady(currentUrl: string): void;
43
- onMTSScriptsLoaded(currentUrl: string, isLazy: boolean): void;
44
- onMTSScriptsExecuted(): Promise<void>;
41
+ onMTSScriptsLoaded(currentUrl: string, isLazy: boolean): Promise<void>;
42
+ onMTSScriptsExecuted(): void;
45
43
  onBTSScriptsLoaded(url: string): Promise<void>;
46
44
  loadUnknownElement(tagName: string): void;
47
45
  queryComponent(url: string): Promise<unknown>;
@@ -7,7 +7,18 @@ import { createElementAPI } from './elementAPIs/createElementAPI.js';
7
7
  import { createMainThreadGlobalAPIs } from './createMainThreadGlobalAPIs.js';
8
8
  import { templateManager } from './TemplateManager.js';
9
9
  import { loadAllWebElements } from '../webElementsDynamicLoader.js';
10
- import { templateManagerWasm } from '../wasm.js';
10
+ // @ts-expect-error
11
+ import IN_SHADOW_CSS_MODERN from '../../../css/in_shadow.css?inline';
12
+ loadAllWebElements().catch((e) => {
13
+ console.error('[lynx-web] Failed to load web elements', e);
14
+ });
15
+ const IN_SHADOW_CSS = URL.createObjectURL(new Blob([IN_SHADOW_CSS_MODERN], { type: 'text/css' }));
16
+ const linkElement = document.createElement('link');
17
+ linkElement.rel = 'stylesheet';
18
+ linkElement.href = IN_SHADOW_CSS;
19
+ linkElement.type = 'text/css';
20
+ linkElement.fetchPriority = 'high';
21
+ linkElement.blocking = 'render';
11
22
  const pixelRatio = window.devicePixelRatio;
12
23
  const screenWidth = window.screen.availWidth * pixelRatio;
13
24
  const screenHeight = window.screen.availHeight * pixelRatio;
@@ -31,9 +42,6 @@ export class LynxViewInstance {
31
42
  i18nManager;
32
43
  exposureServices;
33
44
  webElementsLoadingPromises = [];
34
- styleReadyPromise;
35
- styleReadyResolve;
36
- #renderPageFunction = null;
37
45
  #queryComponentCache = new Map();
38
46
  #pageConfig;
39
47
  #nativeModulesMap;
@@ -46,15 +54,9 @@ export class LynxViewInstance {
46
54
  this.templateUrl = templateUrl;
47
55
  this.rootDom = rootDom;
48
56
  this.mtsRealm = mtsRealm;
57
+ this.rootDom.append(linkElement.cloneNode(false));
49
58
  this.#nativeModulesMap = nativeModulesMap;
50
59
  this.#napiModulesMap = napiModulesMap;
51
- let resolve;
52
- const promise = new Promise((res) => {
53
- resolve = res;
54
- });
55
- this.styleReadyPromise = promise;
56
- this.styleReadyResolve = resolve;
57
- this.parentDom.style.display = 'none';
58
60
  this.mainThreadGlobalThis = mtsRealm.globalWindow;
59
61
  this.backgroundThread = new BackgroundThread(lynxGroupId, this);
60
62
  this.i18nManager = new I18nManager(this.backgroundThread, this.rootDom, initI18nResources);
@@ -72,41 +74,27 @@ export class LynxViewInstance {
72
74
  const defaultDisplayLinear = config['defaultDisplayLinear'] == 'true';
73
75
  const defaultOverflowVisible = config['defaultOverflowVisible'] == 'true';
74
76
  Object.assign(this.mtsRealm.globalWindow, createElementAPI(this.rootDom, this.mtsWasmBinding, enableCSSSelector, defaultDisplayLinear, defaultOverflowVisible), createMainThreadGlobalAPIs(this));
75
- Object.defineProperty(this.mainThreadGlobalThis, 'renderPage', {
76
- get: () => {
77
- return this.#renderPageFunction;
78
- },
79
- set: (v) => {
80
- this.#renderPageFunction = v;
81
- this.onMTSScriptsExecuted();
82
- },
83
- configurable: true,
84
- enumerable: true,
85
- });
86
77
  }
87
78
  onStyleInfoReady(currentUrl) {
88
79
  if (this.mtsWasmBinding.wasmContext) {
89
- this.mtsWasmBinding.wasmContext.push_style_sheet(templateManagerWasm, currentUrl, this.templateUrl === currentUrl);
80
+ const resource = templateManager.getStyleSheet(currentUrl);
81
+ if (resource) {
82
+ this.mtsWasmBinding.wasmContext.push_style_sheet(resource, this.templateUrl === currentUrl ? undefined : currentUrl);
83
+ }
90
84
  }
91
- this.parentDom.style.display = 'flex';
92
- this.styleReadyResolve();
93
85
  }
94
- onMTSScriptsLoaded(currentUrl, isLazy) {
86
+ async onMTSScriptsLoaded(currentUrl, isLazy) {
95
87
  this.backgroundThread.markTiming('lepus_execute_start');
96
88
  const urlMap = templateManager.getTemplate(currentUrl)
97
89
  ?.lepusCode;
98
90
  this.lepusCodeUrls.set(currentUrl, urlMap);
99
91
  if (!isLazy) {
100
- this.mtsRealm.loadScript(urlMap['root']);
92
+ await this.mtsRealm.loadScript(urlMap['root']);
93
+ this.onMTSScriptsExecuted();
101
94
  }
102
95
  }
103
- async onMTSScriptsExecuted() {
96
+ onMTSScriptsExecuted() {
104
97
  this.backgroundThread.markTiming('lepus_execute_end');
105
- this.webElementsLoadingPromises.push(loadAllWebElements());
106
- await Promise.all([
107
- ...this.webElementsLoadingPromises,
108
- this.styleReadyPromise,
109
- ]);
110
98
  this.webElementsLoadingPromises.length = 0;
111
99
  this.backgroundThread.markTiming('data_processor_start');
112
100
  const processedData = this.mainThreadGlobalThis.processData
@@ -114,7 +102,7 @@ export class LynxViewInstance {
114
102
  : this.initData;
115
103
  this.backgroundThread.markTiming('data_processor_end');
116
104
  this.backgroundThread.startWebWorker(processedData, this.globalprops, templateManager.getTemplate(this.templateUrl).config.cardType, templateManager.getTemplate(this.templateUrl)?.customSections, this.#nativeModulesMap, this.#napiModulesMap);
117
- this.#renderPageFunction?.(processedData);
105
+ this.mainThreadGlobalThis.renderPage?.(processedData);
118
106
  this.mainThreadGlobalThis.__FlushElementTree();
119
107
  }
120
108
  async onBTSScriptsLoaded(url) {
@@ -6,5 +6,6 @@ export declare class TemplateManager {
6
6
  fetchBundle(url: string, lynxViewInstancePromise: Promise<LynxViewInstance>, overrideConfig?: Record<string, string>): Promise<void>;
7
7
  createTemplate(url: string): void;
8
8
  getTemplate(url: string): DecodedTemplate | undefined;
9
+ getStyleSheet(url: string): any;
9
10
  }
10
11
  export declare const templateManager: TemplateManager;
@@ -138,9 +138,9 @@ export class TemplateManager {
138
138
  }
139
139
  }
140
140
  async #handleSection(msg, instancePromise) {
141
- const [instance, templateManagerWasm,] = await Promise.all([
141
+ const [instance, StyleSheetResource,] = await Promise.all([
142
142
  instancePromise,
143
- wasm.then((wasm) => (wasm.templateManagerWasm)),
143
+ wasm.then((wasm) => (wasm.wasmInstance.StyleSheetResource)),
144
144
  ]);
145
145
  const { label, data, url, config } = msg;
146
146
  switch (label) {
@@ -151,7 +151,11 @@ export class TemplateManager {
151
151
  break;
152
152
  }
153
153
  case TemplateSectionLabel.StyleInfo: {
154
- templateManagerWasm.add_style_info(url, new Uint8Array(data), document);
154
+ const resource = new StyleSheetResource(new Uint8Array(data), document);
155
+ const template = this.#templates.get(url);
156
+ if (template) {
157
+ template.styleSheet = resource;
158
+ }
155
159
  instance.onStyleInfoReady(url);
156
160
  break;
157
161
  }
@@ -193,12 +197,16 @@ export class TemplateManager {
193
197
  URL.revokeObjectURL(blobUrl);
194
198
  }
195
199
  }
200
+ if (template.styleSheet) {
201
+ template.styleSheet.free();
202
+ }
196
203
  }
197
204
  this.#templates.delete(url);
198
205
  }
199
206
  this.#templates.set(url, {});
200
207
  }
201
208
  #removeTemplate(url) {
209
+ this.createTemplate(url); // This actually clears it in current logic
202
210
  this.#templates.delete(url);
203
211
  }
204
212
  #setConfig(url, config) {
@@ -228,6 +236,9 @@ export class TemplateManager {
228
236
  getTemplate(url) {
229
237
  return this.#templates.get(url);
230
238
  }
239
+ getStyleSheet(url) {
240
+ return this.#templates.get(url)?.styleSheet;
241
+ }
231
242
  }
232
243
  export const templateManager = new TemplateManager();
233
244
  //# sourceMappingURL=TemplateManager.js.map
@@ -1,16 +1,9 @@
1
1
  import { wasmInstance } from '../../wasm.js';
2
2
  import { LYNX_TAG_TO_HTML_TAG_MAP, LYNX_TIMING_FLAG_ATTRIBUTE, lynxDefaultDisplayLinearAttribute, lynxDefaultOverflowVisibleAttribute, lynxDisposedAttribute, lynxEntryNameAttribute, uniqueIdSymbol, } from '../../../constants.js';
3
3
  import { __SwapElement, __AppendElement, __ElementIsEqual, __FirstElement, __GetChildren, __GetParent, __InsertElementBefore, __LastElement, __NextElement, __RemoveElement, __ReplaceElement, __ReplaceElements, __GetAttributes, __GetAttributeByName, __GetID, __SetID, __GetTag, __GetClasses, __SetClasses, __AddClass, __MarkTemplateElement, __MarkPartElement, __GetElementUniqueID, __GetTemplateParts, __UpdateListCallbacks, } from './pureElementPAPIs.js';
4
- // @ts-expect-error
5
- import IN_SHADOW_CSS_MODERN from '../../../../css/in_shadow.css?inline';
6
- const IN_SHADOW_CSS = URL.createObjectURL(new Blob([IN_SHADOW_CSS_MODERN], { type: 'text/css' }));
7
- const linkElement = document.createElement('link');
8
- linkElement.rel = 'stylesheet';
9
- linkElement.href = IN_SHADOW_CSS;
10
- linkElement.type = 'text/css';
4
+ import { requestIdleCallbackImpl } from '../utils/requestIdleCallback.js';
11
5
  const { MainThreadWasmContext, add_inline_style_raw_string_key, set_inline_styles_number_key, set_inline_styles_in_str, get_inline_styles_in_key_value_vec, } = wasmInstance;
12
6
  export function createElementAPI(rootDom, mtsBinding, config_enable_css_selector, config_default_display_linear, config_default_overflow_visible) {
13
- rootDom.append(linkElement.cloneNode(false));
14
7
  const wasmContext = new MainThreadWasmContext(rootDom, mtsBinding, config_enable_css_selector);
15
8
  mtsBinding.wasmContext = wasmContext;
16
9
  let page = undefined;
@@ -303,7 +296,7 @@ export function createElementAPI(rootDom, mtsBinding, config_enable_css_selector
303
296
  backgroundThread.flushTimingInfo();
304
297
  }
305
298
  let timingFlagsAll = timingFlags.concat(wasmContext.take_timing_flags());
306
- requestAnimationFrame(() => {
299
+ requestIdleCallbackImpl(() => {
307
300
  mtsBinding.postTimingFlags(timingFlagsAll, pipelineId);
308
301
  });
309
302
  timingFlags.length = 0;
@@ -0,0 +1 @@
1
+ export declare const requestIdleCallbackImpl: typeof requestIdleCallback | ((callback: () => void) => NodeJS.Timeout);
@@ -0,0 +1,5 @@
1
+ // Safari doesn't support requestIdleCallback
2
+ export const requestIdleCallbackImpl = typeof requestIdleCallback === 'undefined'
3
+ ? (callback) => setTimeout(callback, 16)
4
+ : requestIdleCallback;
5
+ //# sourceMappingURL=requestIdleCallback.js.map
@@ -1,3 +1,2 @@
1
1
  export declare const wasmInstance: typeof import("../../binary/client/client.js"), wasmModule: WebAssembly.Module | undefined;
2
- export declare const templateManagerWasm: import("../../binary/client/client.js").TemplateManager | undefined;
3
2
  export type MainThreadWasmContext = typeof import('../../binary/client/client.js').MainThreadWasmContext;
@@ -32,7 +32,4 @@ export const [wasmInstance, wasmModule] = await wasmLoaded;
32
32
  if (!isWorker) {
33
33
  wasmInstance.initSync({ module: wasmModule });
34
34
  }
35
- export const templateManagerWasm = isWorker
36
- ? undefined
37
- : new wasmInstance.TemplateManager();
38
35
  //# sourceMappingURL=wasm.js.map