From 6bb77716fb3e5fbbc514bc1ab320e0d89eb16979 Mon Sep 17 00:00:00 2001 From: ClarkXia Date: Mon, 27 Mar 2023 12:09:43 +0800 Subject: [PATCH 1/3] fix: ignore base64 when convert style --- .changeset/two-buses-heal.md | 5 +++++ packages/jsx-runtime/package.json | 2 +- packages/jsx-runtime/src/index.ts | 9 +++++++-- packages/jsx-runtime/tsconfig.json | 24 +++++++----------------- 4 files changed, 20 insertions(+), 20 deletions(-) create mode 100644 .changeset/two-buses-heal.md diff --git a/.changeset/two-buses-heal.md b/.changeset/two-buses-heal.md new file mode 100644 index 0000000000..7805243626 --- /dev/null +++ b/.changeset/two-buses-heal.md @@ -0,0 +1,5 @@ +--- +'@ice/jsx-runtime': patch +--- + +fix: ignore base64 when convert style diff --git a/packages/jsx-runtime/package.json b/packages/jsx-runtime/package.json index b2e264daf2..0ffafcc062 100644 --- a/packages/jsx-runtime/package.json +++ b/packages/jsx-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@ice/jsx-runtime", - "version": "0.2.0", + "version": "0.2.1-alpha.0", "description": "JSX runtime for ice.", "files": [ "esm", diff --git a/packages/jsx-runtime/src/index.ts b/packages/jsx-runtime/src/index.ts index eee3cec494..12a8aaa240 100644 --- a/packages/jsx-runtime/src/index.ts +++ b/packages/jsx-runtime/src/index.ts @@ -27,6 +27,10 @@ function isObject(obj: any): obj is object { return typeof obj === 'object'; } +const REG_BASE64 = /data:image\/(png|jpg|jpeg|gif|svg|webp|bmp|dpg);base64,/; +function isBase64(str: any) { + return typeof str === 'string' && REG_BASE64.test(str); +} // Support rpx unit. export function hijackElementProps(props: { style?: object } | object): object { if (props && STYLE in props) { @@ -35,8 +39,9 @@ export function hijackElementProps(props: { style?: object } | object): object { const result = Object.assign({}, props); const convertedStyle = {}; for (const prop in style) { - // @ts-ignore - convertedStyle[prop] = convertUnit(style[prop]); + if (!isBase64(style[prop])) { + convertedStyle[prop] = convertUnit(style[prop]); + } } result['style'] = convertedStyle; return result; diff --git a/packages/jsx-runtime/tsconfig.json b/packages/jsx-runtime/tsconfig.json index e624667b31..79cf8a2f2d 100644 --- a/packages/jsx-runtime/tsconfig.json +++ b/packages/jsx-runtime/tsconfig.json @@ -1,21 +1,11 @@ { - "compileOnSave": false, - "buildOnSave": false, + "extends": "../../tsconfig.base.json", "compilerOptions": { - "outDir": "build", - "module": "esnext", - "target": "esnext", - "jsx": "react", - "moduleResolution": "node", - "lib": ["es6", "dom"], - "sourceMap": true, - "allowJs": true, - "noUnusedLocals": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": true, - "skipLibCheck": true + "baseUrl": "./", + "rootDir": "src", + "outDir": "esm", + "module": "ES2020", + "moduleResolution": "NodeNext", }, - "include": ["src/*.ts", "src/*.tsx"], - "exclude": ["node_modules", "build", "public"] + "include": ["src"] } From 216e56b508d2f3996d963ca9dce7fbd3a769ec28 Mon Sep 17 00:00:00 2001 From: ClarkXia Date: Mon, 27 Mar 2023 12:18:46 +0800 Subject: [PATCH 2/3] fix: version --- packages/jsx-runtime/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jsx-runtime/package.json b/packages/jsx-runtime/package.json index 0ffafcc062..b2e264daf2 100644 --- a/packages/jsx-runtime/package.json +++ b/packages/jsx-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@ice/jsx-runtime", - "version": "0.2.1-alpha.0", + "version": "0.2.0", "description": "JSX runtime for ice.", "files": [ "esm", From c5a302d81f81799cb8a5f941dee8db8a9aff265e Mon Sep 17 00:00:00 2001 From: ClarkXia Date: Mon, 27 Mar 2023 12:27:31 +0800 Subject: [PATCH 3/3] fix: add test case --- packages/jsx-runtime/src/index.ts | 4 +--- packages/jsx-runtime/tests/hijackElememt.test.ts | 11 ++++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/jsx-runtime/src/index.ts b/packages/jsx-runtime/src/index.ts index 12a8aaa240..8f1202bed9 100644 --- a/packages/jsx-runtime/src/index.ts +++ b/packages/jsx-runtime/src/index.ts @@ -39,9 +39,7 @@ export function hijackElementProps(props: { style?: object } | object): object { const result = Object.assign({}, props); const convertedStyle = {}; for (const prop in style) { - if (!isBase64(style[prop])) { - convertedStyle[prop] = convertUnit(style[prop]); - } + convertedStyle[prop] = isBase64(style[prop]) ? style[prop] : convertUnit(style[prop]); } result['style'] = convertedStyle; return result; diff --git a/packages/jsx-runtime/tests/hijackElememt.test.ts b/packages/jsx-runtime/tests/hijackElememt.test.ts index 7fdeff8e43..f850580e30 100644 --- a/packages/jsx-runtime/tests/hijackElememt.test.ts +++ b/packages/jsx-runtime/tests/hijackElememt.test.ts @@ -19,4 +19,13 @@ describe('hijack element', () => { }, }); }); -}); \ No newline at end of file + + it('hijackElementProps base64', () => { + const props = hijackElementProps({ style: { backgroundImage: 'url(\'data:image/png;base64,iVBORwrpx...)' } }); + expect(props).toStrictEqual({ + style: { + backgroundImage: 'url(\'data:image/png;base64,iVBORwrpx...)', + }, + }); + }); +});