@lynx-js/web-core-wasm 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/binary/client/client.d.ts +6 -8
- package/binary/client/client.js +21 -28
- package/binary/client/client_bg.wasm +0 -0
- package/binary/client/client_bg.wasm.d.ts +3 -4
- package/binary/client/client_debug.d.ts +32 -34
- package/binary/client/client_debug.js +21 -28
- package/binary/client/client_debug_bg.wasm +0 -0
- package/binary/client/client_debug_bg.wasm.d.ts +29 -30
- package/binary/encode/encode_bg.wasm +0 -0
- package/binary/encode/encode_debug_bg.wasm +0 -0
- package/binary/encode/encode_debug_bg.wasm.d.ts +1 -1
- package/binary/server/package.json +4 -0
- package/binary/server/server.d.ts +134 -0
- package/binary/server/server.js +839 -0
- package/binary/server/server_bg.wasm +0 -0
- package/binary/server/server_bg.wasm.d.ts +51 -0
- package/binary/server/server_debug.d.ts +134 -0
- package/binary/server/server_debug.js +839 -0
- package/binary/server/server_debug_bg.wasm +0 -0
- package/binary/server/server_debug_bg.wasm.d.ts +51 -0
- package/dist/client/decodeWorker/decode.worker.js +24 -45
- package/dist/client/mainthread/Background.js +1 -2
- package/dist/client/mainthread/LynxViewInstance.d.ts +2 -4
- package/dist/client/mainthread/LynxViewInstance.js +12 -34
- package/dist/client/mainthread/TemplateManager.d.ts +1 -0
- package/dist/client/mainthread/TemplateManager.js +14 -3
- package/dist/client/mainthread/elementAPIs/createElementAPI.js +2 -1
- package/dist/client/mainthread/utils/requestIdleCallback.d.ts +1 -0
- package/dist/client/mainthread/utils/requestIdleCallback.js +5 -0
- package/dist/client/wasm.d.ts +0 -1
- package/dist/client/wasm.js +0 -3
- package/dist/client_prod/static/js/async/web-core-main-chunk.js +1 -1
- package/dist/client_prod/static/js/async/web-core-template-loader-thread.js +4 -6
- package/dist/client_prod/static/js/async/web-elements.js +10 -10
- package/dist/client_prod/static/js/client.js +2 -2
- package/dist/client_prod/static/wasm/af9fb056.module.wasm +0 -0
- package/dist/common/decodeUtils.d.ts +1 -0
- package/dist/common/decodeUtils.js +41 -0
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +3 -2
- package/dist/encode/webEncoder.js +5 -3
- package/dist/server/createServerLynx.d.ts +3 -0
- package/dist/server/createServerLynx.js +40 -0
- package/dist/server/decode.d.ts +7 -0
- package/dist/server/decode.js +83 -0
- package/dist/server/deploy.d.ts +2 -0
- package/dist/server/deploy.js +61 -0
- package/dist/server/elementAPIs/createElementAPI.d.ts +13 -0
- package/dist/server/elementAPIs/createElementAPI.js +235 -0
- package/dist/server/elementAPIs/pureElementAPIs.d.ts +38 -0
- package/dist/server/elementAPIs/pureElementAPIs.js +112 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.js +10 -0
- package/dist/server/wasm.d.ts +1 -0
- package/dist/server/wasm.js +7 -0
- package/dist/types/DecodedTemplate.d.ts +2 -0
- package/package.json +17 -12
- package/dist/client_prod/static/css/async/web-elements.css +0 -1
- package/dist/client_prod/static/wasm/a156b496.module.wasm +0 -0
|
Binary file
|
|
@@ -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,
|
|
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
|
|
150
|
-
|
|
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
|
|
209
|
-
|
|
210
|
-
|
|
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
|
|
233
|
-
|
|
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 =
|
|
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
|
-
|
|
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():
|
|
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,9 @@ 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
|
-
|
|
10
|
+
loadAllWebElements().catch((e) => {
|
|
11
|
+
console.error('[lynx-web] Failed to load web elements', e);
|
|
12
|
+
});
|
|
11
13
|
const pixelRatio = window.devicePixelRatio;
|
|
12
14
|
const screenWidth = window.screen.availWidth * pixelRatio;
|
|
13
15
|
const screenHeight = window.screen.availHeight * pixelRatio;
|
|
@@ -31,9 +33,6 @@ export class LynxViewInstance {
|
|
|
31
33
|
i18nManager;
|
|
32
34
|
exposureServices;
|
|
33
35
|
webElementsLoadingPromises = [];
|
|
34
|
-
styleReadyPromise;
|
|
35
|
-
styleReadyResolve;
|
|
36
|
-
#renderPageFunction = null;
|
|
37
36
|
#queryComponentCache = new Map();
|
|
38
37
|
#pageConfig;
|
|
39
38
|
#nativeModulesMap;
|
|
@@ -48,13 +47,6 @@ export class LynxViewInstance {
|
|
|
48
47
|
this.mtsRealm = mtsRealm;
|
|
49
48
|
this.#nativeModulesMap = nativeModulesMap;
|
|
50
49
|
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
50
|
this.mainThreadGlobalThis = mtsRealm.globalWindow;
|
|
59
51
|
this.backgroundThread = new BackgroundThread(lynxGroupId, this);
|
|
60
52
|
this.i18nManager = new I18nManager(this.backgroundThread, this.rootDom, initI18nResources);
|
|
@@ -72,41 +64,27 @@ export class LynxViewInstance {
|
|
|
72
64
|
const defaultDisplayLinear = config['defaultDisplayLinear'] == 'true';
|
|
73
65
|
const defaultOverflowVisible = config['defaultOverflowVisible'] == 'true';
|
|
74
66
|
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
67
|
}
|
|
87
68
|
onStyleInfoReady(currentUrl) {
|
|
88
69
|
if (this.mtsWasmBinding.wasmContext) {
|
|
89
|
-
|
|
70
|
+
const resource = templateManager.getStyleSheet(currentUrl);
|
|
71
|
+
if (resource) {
|
|
72
|
+
this.mtsWasmBinding.wasmContext.push_style_sheet(resource, this.templateUrl === currentUrl ? undefined : currentUrl);
|
|
73
|
+
}
|
|
90
74
|
}
|
|
91
|
-
this.parentDom.style.display = 'flex';
|
|
92
|
-
this.styleReadyResolve();
|
|
93
75
|
}
|
|
94
|
-
onMTSScriptsLoaded(currentUrl, isLazy) {
|
|
76
|
+
async onMTSScriptsLoaded(currentUrl, isLazy) {
|
|
95
77
|
this.backgroundThread.markTiming('lepus_execute_start');
|
|
96
78
|
const urlMap = templateManager.getTemplate(currentUrl)
|
|
97
79
|
?.lepusCode;
|
|
98
80
|
this.lepusCodeUrls.set(currentUrl, urlMap);
|
|
99
81
|
if (!isLazy) {
|
|
100
|
-
this.mtsRealm.loadScript(urlMap['root']);
|
|
82
|
+
await this.mtsRealm.loadScript(urlMap['root']);
|
|
83
|
+
this.onMTSScriptsExecuted();
|
|
101
84
|
}
|
|
102
85
|
}
|
|
103
|
-
|
|
86
|
+
onMTSScriptsExecuted() {
|
|
104
87
|
this.backgroundThread.markTiming('lepus_execute_end');
|
|
105
|
-
this.webElementsLoadingPromises.push(loadAllWebElements());
|
|
106
|
-
await Promise.all([
|
|
107
|
-
...this.webElementsLoadingPromises,
|
|
108
|
-
this.styleReadyPromise,
|
|
109
|
-
]);
|
|
110
88
|
this.webElementsLoadingPromises.length = 0;
|
|
111
89
|
this.backgroundThread.markTiming('data_processor_start');
|
|
112
90
|
const processedData = this.mainThreadGlobalThis.processData
|
|
@@ -114,7 +92,7 @@ export class LynxViewInstance {
|
|
|
114
92
|
: this.initData;
|
|
115
93
|
this.backgroundThread.markTiming('data_processor_end');
|
|
116
94
|
this.backgroundThread.startWebWorker(processedData, this.globalprops, templateManager.getTemplate(this.templateUrl).config.cardType, templateManager.getTemplate(this.templateUrl)?.customSections, this.#nativeModulesMap, this.#napiModulesMap);
|
|
117
|
-
this
|
|
95
|
+
this.mainThreadGlobalThis.renderPage?.(processedData);
|
|
118
96
|
this.mainThreadGlobalThis.__FlushElementTree();
|
|
119
97
|
}
|
|
120
98
|
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,
|
|
141
|
+
const [instance, StyleSheetResource,] = await Promise.all([
|
|
142
142
|
instancePromise,
|
|
143
|
-
wasm.then((wasm) => (wasm.
|
|
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
|
-
|
|
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
|
|
@@ -3,6 +3,7 @@ import { LYNX_TAG_TO_HTML_TAG_MAP, LYNX_TIMING_FLAG_ATTRIBUTE, lynxDefaultDispla
|
|
|
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
4
|
// @ts-expect-error
|
|
5
5
|
import IN_SHADOW_CSS_MODERN from '../../../../css/in_shadow.css?inline';
|
|
6
|
+
import { requestIdleCallbackImpl } from '../utils/requestIdleCallback.js';
|
|
6
7
|
const IN_SHADOW_CSS = URL.createObjectURL(new Blob([IN_SHADOW_CSS_MODERN], { type: 'text/css' }));
|
|
7
8
|
const linkElement = document.createElement('link');
|
|
8
9
|
linkElement.rel = 'stylesheet';
|
|
@@ -303,7 +304,7 @@ export function createElementAPI(rootDom, mtsBinding, config_enable_css_selector
|
|
|
303
304
|
backgroundThread.flushTimingInfo();
|
|
304
305
|
}
|
|
305
306
|
let timingFlagsAll = timingFlags.concat(wasmContext.take_timing_flags());
|
|
306
|
-
|
|
307
|
+
requestIdleCallbackImpl(() => {
|
|
307
308
|
mtsBinding.postTimingFlags(timingFlagsAll, pipelineId);
|
|
308
309
|
});
|
|
309
310
|
timingFlags.length = 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const requestIdleCallbackImpl: typeof requestIdleCallback | ((callback: () => void) => NodeJS.Timeout);
|
package/dist/client/wasm.d.ts
CHANGED
|
@@ -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;
|
package/dist/client/wasm.js
CHANGED
|
@@ -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
|