From 0c493b2460b84088c9075909e9f041ba5be8b5b2 Mon Sep 17 00:00:00 2001 From: Korey Kassir Date: Mon, 27 Jan 2025 12:50:52 -0800 Subject: [PATCH] Null check (#1669) * null check fix * changeset * Update .changeset/itchy-chairs-collect.md Co-authored-by: Sami Jaber --------- Co-authored-by: Sami Jaber --- .changeset/itchy-chairs-collect.md | 5 ++++ .../__snapshots__/builder.test.ts.snap | 23 ++++++++++++++ packages/core/src/__tests__/builder.test.ts | 30 ++++++++++++++++++- packages/core/src/parsers/builder/builder.ts | 7 ++++- 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 .changeset/itchy-chairs-collect.md diff --git a/.changeset/itchy-chairs-collect.md b/.changeset/itchy-chairs-collect.md new file mode 100644 index 0000000000..7783eaf5b5 --- /dev/null +++ b/.changeset/itchy-chairs-collect.md @@ -0,0 +1,5 @@ +--- +'@builder.io/mitosis': patch +--- + +[Builder] Fix null check issue with localized values diff --git a/packages/core/src/__tests__/__snapshots__/builder.test.ts.snap b/packages/core/src/__tests__/__snapshots__/builder.test.ts.snap index 463e0b15cf..d94422bead 100644 --- a/packages/core/src/__tests__/__snapshots__/builder.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/builder.test.ts.snap @@ -4509,6 +4509,29 @@ exports[`Builder > nodes as props 4`] = ` } `; +exports[`Builder > null values 1`] = ` +{ + "@type": "@builder.io/mitosis/node", + "bindings": { + "text2": { + "bindingType": "expression", + "code": "null", + "type": "single", + }, + }, + "children": [], + "meta": {}, + "name": "CustomText", + "properties": { + "$tagName": undefined, + "href": null, + "text": "hello", + }, + "scope": {}, + "slots": {}, +} +`; + exports[`Builder > preserve cssCode when converting 1`] = ` ".foo { background: green; diff --git a/packages/core/src/__tests__/builder.test.ts b/packages/core/src/__tests__/builder.test.ts index eef91c8ac9..0507bce97a 100644 --- a/packages/core/src/__tests__/builder.test.ts +++ b/packages/core/src/__tests__/builder.test.ts @@ -4,7 +4,11 @@ import { componentToMitosis } from '@/generators/mitosis'; import { ToMitosisOptions } from '@/generators/mitosis/types'; import { componentToReact } from '@/generators/react'; import { dedent } from '@/helpers/dedent'; -import { builderContentToMitosisComponent, extractStateHook } from '@/parsers/builder'; +import { + builderContentToMitosisComponent, + builderElementToMitosisNode, + extractStateHook, +} from '@/parsers/builder'; import { parseJsx } from '@/parsers/jsx'; import { compileAwayBuilderComponents } from '@/plugins/compile-away-builder-components'; import { BuilderContent } from '@builder.io/sdk'; @@ -485,6 +489,30 @@ describe('Builder', () => { expect(backToBuilder).toMatchSnapshot(); }); + test('null values', () => { + const component = builderElementToMitosisNode( + { + '@type': '@builder.io/sdk:Element', + '@version': 2, + id: 'builder-170e19cac58e4c28998d443a9dce80b8', + linkUrl: null, + component: { + name: 'CustomText', + options: { + text: 'hello', + text2: null, + }, + }, + properties: { + href: null, + }, + } as any, + {}, + ); + + expect(component).toMatchSnapshot(); + }); + test('preserve cssCode when converting', () => { const builderJson: BuilderContent = { data: { diff --git a/packages/core/src/parsers/builder/builder.ts b/packages/core/src/parsers/builder/builder.ts index 5b5250863d..5e2ac93ab3 100644 --- a/packages/core/src/parsers/builder/builder.ts +++ b/packages/core/src/parsers/builder/builder.ts @@ -776,7 +776,11 @@ export const builderElementToMitosisNode = ( const linkUrl = (block as any).linkUrl; if (linkUrl) { - if (typeof linkUrl === 'object' && linkUrl['@type'] === '@builder.io/core:LocalizedValue') { + if ( + typeof linkUrl === 'object' && + linkUrl !== null && + linkUrl['@type'] === '@builder.io/core:LocalizedValue' + ) { properties.href = linkUrl.Default; localizedValues['linkUrl'] = linkUrl; } else { @@ -804,6 +808,7 @@ export const builderElementToMitosisNode = ( properties[key] = value; } else if ( typeof value === 'object' && + value !== null && value['@type'] === '@builder.io/core:LocalizedValue' ) { properties[key] = value.Default;