@lynx-js/web-core 0.14.2 → 0.15.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.
- package/CHANGELOG.md +43 -0
- package/dist/apis/LynxView.js +2 -1
- package/dist/uiThread/createRenderAllOnUI.d.ts +1 -1
- package/dist/uiThread/createRenderAllOnUI.js +7 -2
- package/dist/uiThread/createRenderMultiThread.d.ts +1 -1
- package/dist/uiThread/createRenderMultiThread.js +7 -4
- package/dist/uiThread/crossThreadHandlers/createExposureMonitor.d.ts +5 -0
- package/dist/uiThread/crossThreadHandlers/createExposureMonitor.js +117 -0
- package/dist/uiThread/crossThreadHandlers/registerReportErrorHandler.d.ts +1 -1
- package/dist/uiThread/crossThreadHandlers/registerReportErrorHandler.js +2 -2
- package/dist/uiThread/startBackground.js +1 -1
- package/dist/uiThread/startUIThread.d.ts +1 -1
- package/dist/utils/convertLengthToPx.d.ts +1 -0
- package/dist/utils/convertLengthToPx.js +25 -0
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# @lynx-js/web-core
|
|
2
2
|
|
|
3
|
+
## 0.15.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies []:
|
|
8
|
+
- @lynx-js/web-mainthread-apis@0.15.1
|
|
9
|
+
- @lynx-js/web-worker-runtime@0.15.1
|
|
10
|
+
- @lynx-js/web-constants@0.15.1
|
|
11
|
+
- @lynx-js/web-worker-rpc@0.15.1
|
|
12
|
+
|
|
13
|
+
## 0.15.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- refactor: move exposure system to web-core ([#1254](https://github.com/lynx-family/lynx-stack/pull/1254))
|
|
18
|
+
|
|
19
|
+
**THIS IS A BREAKING CHANGE**
|
|
20
|
+
|
|
21
|
+
**You'll need to upgrade your @lynx-js/web-elements to >= 0.8.0**
|
|
22
|
+
|
|
23
|
+
For SSR and better performance, we moved the lynx's exposure system from web-element to web-core.
|
|
24
|
+
|
|
25
|
+
Before this commit, we create Intersection observers by creating HTMLElements.
|
|
26
|
+
|
|
27
|
+
After this commit, we will create such Intersection observers after dom stabled.
|
|
28
|
+
|
|
29
|
+
Also, the setInterval for exposure has been removed, now we use an on time lazy timer for such features.
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- refactor: improve `linear-weight-sum` performance ([#1216](https://github.com/lynx-family/lynx-stack/pull/1216))
|
|
34
|
+
|
|
35
|
+
- feat: lynx-view error event adds a new parameter: `e.detail.fileName`, which will be determined by the file location where the error occurred, either `lepus.js` or `app-service.js`. ([#1242](https://github.com/lynx-family/lynx-stack/pull/1242))
|
|
36
|
+
|
|
37
|
+
- perf: use rust implemented style transformer ([#1094](https://github.com/lynx-family/lynx-stack/pull/1094))
|
|
38
|
+
|
|
39
|
+
- Updated dependencies [[`7b75469`](https://github.com/lynx-family/lynx-stack/commit/7b75469d05dd2ec78bf6e1e54b94c8dff938eb40), [`f54a7aa`](https://github.com/lynx-family/lynx-stack/commit/f54a7aa539ad56ccd1e7e1b49d7ee59e742fe493), [`224c653`](https://github.com/lynx-family/lynx-stack/commit/224c653f370d807281fa0a9ffbb4f4dd5c9d308e)]:
|
|
40
|
+
- @lynx-js/offscreen-document@0.1.3
|
|
41
|
+
- @lynx-js/web-worker-runtime@0.15.0
|
|
42
|
+
- @lynx-js/web-mainthread-apis@0.15.0
|
|
43
|
+
- @lynx-js/web-constants@0.15.0
|
|
44
|
+
- @lynx-js/web-worker-rpc@0.15.0
|
|
45
|
+
|
|
3
46
|
## 0.14.2
|
|
4
47
|
|
|
5
48
|
### Patch Changes
|
package/dist/apis/LynxView.js
CHANGED
|
@@ -385,7 +385,7 @@ export class LynxView extends HTMLElement {
|
|
|
385
385
|
napiModulesCall: (...args) => {
|
|
386
386
|
return this.#onNapiModulesCall?.(...args);
|
|
387
387
|
},
|
|
388
|
-
onError: (error, release) => {
|
|
388
|
+
onError: (error, release, fileName) => {
|
|
389
389
|
this.dispatchEvent(new CustomEvent('error', {
|
|
390
390
|
detail: {
|
|
391
391
|
sourceMap: {
|
|
@@ -396,6 +396,7 @@ export class LynxView extends HTMLElement {
|
|
|
396
396
|
},
|
|
397
397
|
error,
|
|
398
398
|
release,
|
|
399
|
+
fileName,
|
|
399
400
|
},
|
|
400
401
|
}));
|
|
401
402
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type StartMainThreadContextConfig, type Cloneable } from '@lynx-js/web-constants';
|
|
2
2
|
import { Rpc } from '@lynx-js/web-worker-rpc';
|
|
3
3
|
export declare function createRenderAllOnUI(mainToBackgroundRpc: Rpc, shadowRoot: ShadowRoot, markTimingInternal: (timingKey: string, pipelineId?: string, timeStamp?: number) => void, flushMarkTimingInternal: () => void, callbacks: {
|
|
4
|
-
onError?: (err: Error, release: string) => void;
|
|
4
|
+
onError?: (err: Error, release: string, fileName: string) => void;
|
|
5
5
|
}): {
|
|
6
6
|
start: (configs: StartMainThreadContextConfig) => Promise<void>;
|
|
7
7
|
updateDataMainThread: (args_0: Cloneable, args_1: Record<string, string>) => Promise<void>;
|
|
@@ -1,6 +1,10 @@
|
|
|
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.
|
|
1
4
|
import { i18nResourceMissedEventName, I18nResources, } from '@lynx-js/web-constants';
|
|
2
5
|
import { Rpc } from '@lynx-js/web-worker-rpc';
|
|
3
6
|
import { dispatchLynxViewEvent } from '../utils/dispatchLynxViewEvent.js';
|
|
7
|
+
import { createExposureMonitor } from './crossThreadHandlers/createExposureMonitor.js';
|
|
4
8
|
const { prepareMainThreadAPIs, } = await import('@lynx-js/web-mainthread-apis');
|
|
5
9
|
export function createRenderAllOnUI(mainToBackgroundRpc, shadowRoot, markTimingInternal, flushMarkTimingInternal, callbacks) {
|
|
6
10
|
if (!globalThis.module) {
|
|
@@ -10,8 +14,9 @@ export function createRenderAllOnUI(mainToBackgroundRpc, shadowRoot, markTimingI
|
|
|
10
14
|
dispatchLynxViewEvent(shadowRoot, i18nResourceMissedEventName, options);
|
|
11
15
|
};
|
|
12
16
|
const i18nResources = new I18nResources();
|
|
13
|
-
const {
|
|
14
|
-
|
|
17
|
+
const { exposureChangedCallback } = createExposureMonitor(shadowRoot);
|
|
18
|
+
const { startMainThread } = prepareMainThreadAPIs(mainToBackgroundRpc, shadowRoot, document.createElement.bind(document), exposureChangedCallback, markTimingInternal, flushMarkTimingInternal, (err, _, release) => {
|
|
19
|
+
callbacks.onError?.(err, release, 'lepus.js');
|
|
15
20
|
}, triggerI18nResourceFallback, (initI18nResources) => {
|
|
16
21
|
i18nResources.setData(initI18nResources);
|
|
17
22
|
return i18nResources;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Rpc } from '@lynx-js/web-worker-rpc';
|
|
2
2
|
export declare function createRenderMultiThread(mainThreadRpc: Rpc, shadowRoot: ShadowRoot, callbacks: {
|
|
3
|
-
onError?: (err: Error, release: string) => void;
|
|
3
|
+
onError?: (err: Error, release: string, fileName: string) => void;
|
|
4
4
|
}): {
|
|
5
5
|
start: (args_0: import("@lynx-js/web-constants").StartMainThreadContextConfig) => void;
|
|
6
6
|
updateDataMainThread: (args_0: import("@lynx-js/web-constants").Cloneable, args_1: Record<string, string>) => Promise<void>;
|
|
@@ -1,13 +1,16 @@
|
|
|
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.
|
|
1
4
|
import { mainThreadStartEndpoint, updateDataEndpoint, updateI18nResourcesEndpoint, } from '@lynx-js/web-constants';
|
|
2
5
|
import { registerReportErrorHandler } from './crossThreadHandlers/registerReportErrorHandler.js';
|
|
3
6
|
import { registerFlushElementTreeHandler } from './crossThreadHandlers/registerFlushElementTreeHandler.js';
|
|
4
7
|
import { registerDispatchLynxViewEventHandler } from './crossThreadHandlers/registerDispatchLynxViewEventHandler.js';
|
|
8
|
+
import { createExposureMonitorForMultiThread } from './crossThreadHandlers/createExposureMonitor.js';
|
|
5
9
|
export function createRenderMultiThread(mainThreadRpc, shadowRoot, callbacks) {
|
|
6
|
-
registerReportErrorHandler(mainThreadRpc, callbacks.onError);
|
|
7
|
-
registerFlushElementTreeHandler(mainThreadRpc, {
|
|
8
|
-
shadowRoot,
|
|
9
|
-
});
|
|
10
|
+
registerReportErrorHandler(mainThreadRpc, 'lepus.js', callbacks.onError);
|
|
11
|
+
registerFlushElementTreeHandler(mainThreadRpc, { shadowRoot });
|
|
10
12
|
registerDispatchLynxViewEventHandler(mainThreadRpc, shadowRoot);
|
|
13
|
+
createExposureMonitorForMultiThread(mainThreadRpc, shadowRoot);
|
|
11
14
|
const start = mainThreadRpc.createCall(mainThreadStartEndpoint);
|
|
12
15
|
const updateDataMainThread = mainThreadRpc.createCall(updateDataEndpoint);
|
|
13
16
|
const updateI18nResourcesMainThread = mainThreadRpc.createCall(updateI18nResourcesEndpoint);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Rpc } from '@lynx-js/web-worker-rpc';
|
|
2
|
+
export declare function createExposureMonitor(rootDom: ShadowRoot): {
|
|
3
|
+
exposureChangedCallback(targets?: Element[]): void;
|
|
4
|
+
};
|
|
5
|
+
export declare function createExposureMonitorForMultiThread(rpc: Rpc, rootDom: ShadowRoot): void;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Copyright 2024 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 { convertLengthToPx } from '../../utils/convertLengthToPx.js';
|
|
5
|
+
import { lynxUniqueIdAttribute, multiThreadExposureChangedEndpoint, } from '@lynx-js/web-constants';
|
|
6
|
+
const scrollContainerDom = Symbol.for('lynx-scroll-container-dom');
|
|
7
|
+
export function createExposureMonitor(rootDom) {
|
|
8
|
+
const intersectionObservers = new WeakMap();
|
|
9
|
+
const exposureIdOldValues = new WeakMap();
|
|
10
|
+
const exposedElements = new WeakSet();
|
|
11
|
+
const sendExposureEvent = (target, isIntersecting, exposureId) => {
|
|
12
|
+
const exposureScene = target.getAttribute('exposure-scene') ?? '';
|
|
13
|
+
const detail = {
|
|
14
|
+
exposureID: exposureId,
|
|
15
|
+
exposureScene,
|
|
16
|
+
'exposure-id': exposureId,
|
|
17
|
+
'exposure-scene': exposureScene,
|
|
18
|
+
};
|
|
19
|
+
const appearEvent = new CustomEvent(isIntersecting ? 'uiappear' : 'uidisappear', {
|
|
20
|
+
bubbles: false,
|
|
21
|
+
composed: false,
|
|
22
|
+
cancelable: true,
|
|
23
|
+
detail,
|
|
24
|
+
});
|
|
25
|
+
const exposureEvent = new CustomEvent(isIntersecting ? 'exposure' : 'disexposure', {
|
|
26
|
+
bubbles: true,
|
|
27
|
+
composed: false,
|
|
28
|
+
cancelable: false,
|
|
29
|
+
detail,
|
|
30
|
+
});
|
|
31
|
+
Object.assign(appearEvent, detail);
|
|
32
|
+
target.dispatchEvent(appearEvent);
|
|
33
|
+
target.dispatchEvent(exposureEvent);
|
|
34
|
+
};
|
|
35
|
+
const intersectionObserverCallback = (entries) => {
|
|
36
|
+
entries.forEach(({ target, isIntersecting }) => {
|
|
37
|
+
if (isIntersecting && !exposedElements.has(target)) {
|
|
38
|
+
sendExposureEvent(target, true, target.getAttribute('exposure-id'));
|
|
39
|
+
exposedElements.add(target);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
sendExposureEvent(target, false, target.getAttribute('exposure-id'));
|
|
43
|
+
exposedElements.delete(target);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const startIntersectionObserver = (target) => {
|
|
48
|
+
const threshold = parseFloat(target.getAttribute('exposure-area') ?? '0')
|
|
49
|
+
/ 100;
|
|
50
|
+
const screenMarginTop = convertLengthToPx(target, target.getAttribute('exposure-screen-margin-top'));
|
|
51
|
+
const screenMarginRight = convertLengthToPx(target, target.getAttribute('exposure-screen-margin-right'));
|
|
52
|
+
const screenMarginBottom = convertLengthToPx(target, target.getAttribute('exposure-screen-margin-bottom'));
|
|
53
|
+
const screenMarginLeft = convertLengthToPx(target, target.getAttribute('exposure-screen-margin-left'));
|
|
54
|
+
const uiMarginTop = convertLengthToPx(target, target.getAttribute('exposure-ui-margin-top'));
|
|
55
|
+
const uiMarginRight = convertLengthToPx(target, target.getAttribute('exposure-ui-margin-right'));
|
|
56
|
+
const uiMarginBottom = convertLengthToPx(target, target.getAttribute('exposure-ui-margin-bottom'));
|
|
57
|
+
const uiMarginLeft = convertLengthToPx(target, target.getAttribute('exposure-ui-margin-left'));
|
|
58
|
+
/**
|
|
59
|
+
* TODO: @haoyang.wang support the switch `enableExposureUIMargin`
|
|
60
|
+
*/
|
|
61
|
+
const calcedRootMarginTop = (uiMarginBottom ? -1 : 1)
|
|
62
|
+
* (screenMarginTop - uiMarginBottom);
|
|
63
|
+
const calcedRootMarginRight = (uiMarginLeft ? -1 : 1)
|
|
64
|
+
* (screenMarginRight - uiMarginLeft);
|
|
65
|
+
const calcedRootMarginBottom = (uiMarginTop ? -1 : 1)
|
|
66
|
+
* (screenMarginBottom - uiMarginTop);
|
|
67
|
+
const calcedRootMarginLeft = (uiMarginRight ? -1 : 1)
|
|
68
|
+
* (screenMarginLeft - uiMarginRight);
|
|
69
|
+
// get the parent scroll container
|
|
70
|
+
let root = target.parentElement;
|
|
71
|
+
while (root) {
|
|
72
|
+
// @ts-expect-error
|
|
73
|
+
if (root[scrollContainerDom]) {
|
|
74
|
+
// @ts-expect-error
|
|
75
|
+
root = root[scrollContainerDom];
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
root = root.parentElement;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const rootContainer = root ?? rootDom.parentElement;
|
|
83
|
+
const intersectionObserver = new IntersectionObserver(intersectionObserverCallback, {
|
|
84
|
+
rootMargin: `${calcedRootMarginTop}px ${calcedRootMarginRight}px ${calcedRootMarginBottom}px ${calcedRootMarginLeft}px`,
|
|
85
|
+
root: rootContainer,
|
|
86
|
+
threshold,
|
|
87
|
+
});
|
|
88
|
+
intersectionObserver.observe(target);
|
|
89
|
+
intersectionObservers.set(target, intersectionObserver);
|
|
90
|
+
};
|
|
91
|
+
const exposureChangedCallback = (targets) => {
|
|
92
|
+
targets.forEach((target) => {
|
|
93
|
+
const exposureIdOldValue = exposureIdOldValues.get(target) ?? null;
|
|
94
|
+
const exposureIdNewValue = target.getAttribute('exposure-id');
|
|
95
|
+
if (exposureIdOldValue !== null) {
|
|
96
|
+
sendExposureEvent(target, false, exposureIdOldValue);
|
|
97
|
+
}
|
|
98
|
+
exposureIdOldValues.set(target, exposureIdNewValue);
|
|
99
|
+
intersectionObservers.get(target)?.disconnect();
|
|
100
|
+
intersectionObservers.delete(target);
|
|
101
|
+
exposedElements.delete(target);
|
|
102
|
+
if (target.getAttribute('exposure-id') !== null) {
|
|
103
|
+
startIntersectionObserver(target);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
exposureChangedCallback,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export function createExposureMonitorForMultiThread(rpc, rootDom) {
|
|
112
|
+
const { exposureChangedCallback } = createExposureMonitor(rootDom);
|
|
113
|
+
rpc.registerHandler(multiThreadExposureChangedEndpoint, (uniqueIds) => {
|
|
114
|
+
exposureChangedCallback(uniqueIds.map(id => rootDom.querySelector(`[${lynxUniqueIdAttribute}="${id}"]`)).filter(el => el !== null));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=createExposureMonitor.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { Rpc } from '@lynx-js/web-worker-rpc';
|
|
2
|
-
export declare function registerReportErrorHandler(rpc: Rpc, onError?: (e: Error, release: string) => void): void;
|
|
2
|
+
export declare function registerReportErrorHandler(rpc: Rpc, fileName: string, onError?: (e: Error, release: string, fileName: string) => void): void;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
3
|
// LICENSE file in the root directory of this source tree.
|
|
4
4
|
import { reportErrorEndpoint } from '@lynx-js/web-constants';
|
|
5
|
-
export function registerReportErrorHandler(rpc, onError) {
|
|
5
|
+
export function registerReportErrorHandler(rpc, fileName, onError) {
|
|
6
6
|
rpc.registerHandler(reportErrorEndpoint, (e, _, release) => {
|
|
7
|
-
onError?.(e, release);
|
|
7
|
+
onError?.(e, release, fileName);
|
|
8
8
|
});
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=registerReportErrorHandler.js.map
|
|
@@ -17,7 +17,7 @@ export function startBackground(backgroundRpc, shadowRoot, callbacks) {
|
|
|
17
17
|
registerNapiModulesCallHandler(backgroundRpc, callbacks.napiModulesCall);
|
|
18
18
|
registerDispatchLynxViewEventHandler(backgroundRpc, shadowRoot);
|
|
19
19
|
registerTriggerElementMethodEndpointHandler(backgroundRpc, shadowRoot);
|
|
20
|
-
registerReportErrorHandler(backgroundRpc, callbacks.onError);
|
|
20
|
+
registerReportErrorHandler(backgroundRpc, 'app-service.js', callbacks.onError);
|
|
21
21
|
const sendGlobalEvent = backgroundRpc.createCall(sendGlobalEventEndpoint);
|
|
22
22
|
const markTiming = backgroundRpc.createCall(markTimingEndpoint);
|
|
23
23
|
const updateDataBackground = backgroundRpc.createCall(updateDataEndpoint);
|
|
@@ -3,7 +3,7 @@ import { type LynxTemplate, type StartMainThreadContextConfig, type NapiModulesC
|
|
|
3
3
|
export type StartUIThreadCallbacks = {
|
|
4
4
|
nativeModulesCall: NativeModulesCall;
|
|
5
5
|
napiModulesCall: NapiModulesCall;
|
|
6
|
-
onError?: (err: Error, release: string) => void;
|
|
6
|
+
onError?: (err: Error, release: string, fileName: string) => void;
|
|
7
7
|
customTemplateLoader?: (url: string) => Promise<LynxTemplate>;
|
|
8
8
|
};
|
|
9
9
|
export declare function startUIThread(templateUrl: string, configs: Omit<StartMainThreadContextConfig, 'template'>, shadowRoot: ShadowRoot, lynxGroupId: number | undefined, threadStrategy: 'all-on-ui' | 'multi-thread', callbacks: StartUIThreadCallbacks): LynxView;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function convertLengthToPx(targetElement: HTMLElement, str: string | null, isWidth?: boolean): number;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright 2024 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
|
+
export function convertLengthToPx(targetElement, str, isWidth) {
|
|
5
|
+
if (str) {
|
|
6
|
+
str = str.trim();
|
|
7
|
+
if (str.endsWith('px')) {
|
|
8
|
+
return Number(str.substring(0, str.length - 2));
|
|
9
|
+
}
|
|
10
|
+
else if (str.endsWith('%')) {
|
|
11
|
+
const pct = Number(str.substring(0, str.length - 1));
|
|
12
|
+
const { width, height } = targetElement.getBoundingClientRect();
|
|
13
|
+
const base = isWidth ? width : height;
|
|
14
|
+
return (base * pct) / 100;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
/**
|
|
18
|
+
* TODO (haoyang.wang): support rpx
|
|
19
|
+
*/
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=convertLengthToPx.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynx-js/web-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "",
|
|
6
6
|
"keywords": [],
|
|
@@ -24,18 +24,18 @@
|
|
|
24
24
|
"**/*.css"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@lynx-js/offscreen-document": "0.1.
|
|
28
|
-
"@lynx-js/web-constants": "0.
|
|
29
|
-
"@lynx-js/web-mainthread-apis": "0.
|
|
30
|
-
"@lynx-js/web-worker-
|
|
31
|
-
"@lynx-js/web-worker-
|
|
27
|
+
"@lynx-js/offscreen-document": "0.1.3",
|
|
28
|
+
"@lynx-js/web-constants": "0.15.1",
|
|
29
|
+
"@lynx-js/web-mainthread-apis": "0.15.1",
|
|
30
|
+
"@lynx-js/web-worker-runtime": "0.15.1",
|
|
31
|
+
"@lynx-js/web-worker-rpc": "0.15.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@lynx-js/lynx-core": "0.1.2",
|
|
35
|
-
"@lynx-js/web-elements": "0.
|
|
35
|
+
"@lynx-js/web-elements": "0.8.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@lynx-js/lynx-core": "0.1.2",
|
|
39
|
-
"@lynx-js/web-elements": "
|
|
39
|
+
"@lynx-js/web-elements": ">0.7.7"
|
|
40
40
|
}
|
|
41
41
|
}
|