diff --git a/.changeset/pink-pots-fold.md b/.changeset/pink-pots-fold.md new file mode 100644 index 0000000000..5e36d35f24 --- /dev/null +++ b/.changeset/pink-pots-fold.md @@ -0,0 +1,15 @@ +--- +"@lynx-js/web-mainthread-apis": patch +"@lynx-js/web-core": patch +--- + +refactor: isolate the globalThis in mts + +After this commit, developers' mts code won't be able to access the globalThis + +The following usage will NOT work + +``` +globalThis.foo = () =>{}; +foo();//crash +``` diff --git a/packages/web-platform/web-core/src/utils/loadTemplate.ts b/packages/web-platform/web-core/src/utils/loadTemplate.ts index f10fdce8e7..45cb657886 100644 --- a/packages/web-platform/web-core/src/utils/loadTemplate.ts +++ b/packages/web-platform/web-core/src/utils/loadTemplate.ts @@ -37,6 +37,57 @@ return module.exports;}`, const mainThreadInjectVars = [ 'lynx', 'globalThis', + '__AddConfig', + '__AddDataset', + '__GetAttributes', + '__GetComponentID', + '__GetDataByKey', + '__GetDataset', + '__GetElementConfig', + '__GetElementUniqueID', + '__GetID', + '__GetTag', + '__SetAttribute', + '__SetConfig', + '__SetDataset', + '__SetID', + '__UpdateComponentID', + '__GetConfig', + '__UpdateListCallbacks', + '__AppendElement', + '__ElementIsEqual', + '__FirstElement', + '__GetChildren', + '__GetParent', + '__InsertElementBefore', + '__LastElement', + '__NextElement', + '__RemoveElement', + '__ReplaceElement', + '__ReplaceElements', + '__SwapElement', + '__CreateComponent', + '__CreateElement', + '__CreatePage', + '__CreateView', + '__CreateText', + '__CreateRawText', + '__CreateImage', + '__CreateScrollView', + '__CreateWrapperElement', + '__CreateList', + '__AddEvent', + '__GetEvent', + '__GetEvents', + '__SetEvents', + '__AddClass', + '__SetClasses', + '__GetClasses', + '__AddInlineStyle', + '__SetInlineStyles', + '__SetCSSId', + '__OnLifecycleEvent', + '__FlushElementTree', ]; const backgroundInjectVars = [ diff --git a/packages/web-platform/web-mainthread-apis/src/MainThreadRuntime.ts b/packages/web-platform/web-mainthread-apis/src/MainThreadRuntime.ts index 51b9c45f68..59f8fe8432 100644 --- a/packages/web-platform/web-mainthread-apis/src/MainThreadRuntime.ts +++ b/packages/web-platform/web-mainthread-apis/src/MainThreadRuntime.ts @@ -104,13 +104,7 @@ export class MainThreadRuntime { } get globalThis() { - const global = Object.assign(globalThis, this); - Object.defineProperty( - global, - 'renderPage', - Object.getOwnPropertyDescriptor(this, 'renderPage')!, - ); - return global; + return this; } lynx: MainThreadLynx; diff --git a/packages/web-platform/web-tests/resources/web-core.main-thread.json b/packages/web-platform/web-tests/resources/web-core.main-thread.json index ceb6b0d2a9..5eac4dd7e9 100644 --- a/packages/web-platform/web-tests/resources/web-core.main-thread.json +++ b/packages/web-platform/web-tests/resources/web-core.main-thread.json @@ -1,7 +1,7 @@ { "styleInfo": {}, "lepusCode": { - "root": "globalThis.runtime = lynx_runtime;globalThis.__lynx_worker_type = 'main'", + "root": "self.runtime = lynx_runtime;self.__lynx_worker_type = 'main'", "/manifest-chunk.js": "module.exports = 'hello';", "/manifest-chunk2.js": "module.exports = 'world';" }, diff --git a/packages/web-platform/web-tests/tests/react.spec.ts b/packages/web-platform/web-tests/tests/react.spec.ts index 7ab02f14f1..249520d078 100644 --- a/packages/web-platform/web-tests/tests/react.spec.ts +++ b/packages/web-platform/web-tests/tests/react.spec.ts @@ -1229,6 +1229,7 @@ test.describe('reactlynx3 tests', () => { 'basic-element-text-set-native-props-with-setData', async ({ page }, { title }) => { await goto(page, title); + await wait(200); // --initialtextinitial let count = await page.getByText('--').count(); expect(count).toBe(1); diff --git a/packages/web-platform/web-tests/tests/web-core.test.ts b/packages/web-platform/web-tests/tests/web-core.test.ts index bf058a3b86..011164aed5 100644 --- a/packages/web-platform/web-tests/tests/web-core.test.ts +++ b/packages/web-platform/web-tests/tests/web-core.test.ts @@ -54,11 +54,11 @@ test.describe('web core tests', () => { await goto(page); const mainWorker = await getMainThreadWorker(page); await mainWorker.evaluate(() => { - globalThis.renderPage = () => { - const root = __CreatePage('0', '0', {}); - const element = __CreateElement('view', '0', {}); - __AppendElement(root, element); - const component = __CreateComponent( + globalThis.runtime.renderPage = () => { + const root = globalThis.runtime.__CreatePage('0', '0', {}); + const element = globalThis.runtime.__CreateElement('view', '0', {}); + globalThis.runtime.__AppendElement(root, element); + const component = globalThis.runtime.__CreateComponent( '1', '0-13826000', '0', @@ -68,8 +68,8 @@ test.describe('web core tests', () => { {}, {}, ); - __AddClass(component, 'wrapper'); - __AppendElement(element, component); + globalThis.runtime.__AddClass(component, 'wrapper'); + globalThis.runtime.__AppendElement(element, component); }; }); const backWorker = await getBackgroundThreadWorker(page);