@@ -6,7 +6,8 @@ import _ from "lodash";
66import axios from "axios" ;
77import jsonpath from "jsonpath" ;
88import pLimit from 'p-limit' ;
9- import { jsonToHtml , jsonToMarkdown } from '@contentstack/json-rte-serializer' ;
9+ import { JSDOM } from "jsdom" ;
10+ import { jsonToHtml , jsonToMarkdown , htmlToJson } from '@contentstack/json-rte-serializer' ;
1011
1112
1213import { CHUNK_SIZE , MIGRATION_DATA_CONFIG } from "../constants/index.js" ;
@@ -200,14 +201,17 @@ const processField = (
200201 case 'text' : {
201202 return lang_value ;
202203 }
204+
203205 case 'json' : {
204206 return processRTEOrNestedObject ( lang_value , lang , destination_stack_id ) ;
205207 }
208+
206209 case 'dropdown' :
207210 case 'radio' : {
208211 const isPresent = fieldData ?. advanced ?. options ?. find ( ( option : any ) => lang_value === option ?. value ) ;
209212 return isPresent ?. value ?? fieldData ?. advanced ?. default_value ;
210213 }
214+
211215 case 'file' : {
212216 if ( fieldData ?. advanced ?. multiple ) {
213217 const assetsData : any = [ ] ;
@@ -225,17 +229,31 @@ const processField = (
225229 return null ;
226230 }
227231 }
232+
228233 case 'reference' : {
234+ if ( Array ?. isArray ?.( lang_value ) && fieldData ?. advanced ?. multiple ) {
235+ const refs = [ ] ;
236+ for ( const entry of lang_value ) {
237+ const id = entry ?. sys ?. id ;
238+ if ( id in entryId ) {
239+ refs ?. push ( entryId ?. [ id ] ) ;
240+ }
241+ }
242+ return refs ;
243+ }
229244 const id = lang_value ?. sys ?. id ;
230- if ( lang_value ?. sys ?. linkType === "Entry" && id in entryId ) return [ entryId ?. [ id ] ] ;
231- return [ ] ;
245+ if ( id in entryId ) return [ [ entryId ?. [ id ] ] ] ;
246+ return null ;
232247 }
248+
233249 case 'app' : {
234250 return damApp ( fieldData ?. otherCmsType , lang_value )
235251 }
252+
236253 case 'boolean' : {
237254 return lang_value ;
238255 }
256+
239257 case 'number' : {
240258 if ( typeof lang_value === 'string' ) {
241259 return parseInt ?.( lang_value )
@@ -275,21 +293,33 @@ const processField = (
275293 return jsonToMarkdown ( jsonValue ) ;
276294 }
277295
296+ case 'extension' : {
297+ if ( [ 'listInput' , 'tagEditor' ] ?. includes ( fieldData ?. otherCmsType ) ) {
298+ if ( Array . isArray ( lang_value ) && lang_value ?. length ) {
299+ return { value : lang_value ?. map ( ( element : any ) => ( { key : element , value : element } ) ) }
300+ }
301+ return { value : [ ] } ;
302+ }
303+ break ;
304+ }
305+
306+ case 'group' : {
307+ if ( lang_value . lat ) return lang_value ;
308+ break ;
309+ }
310+
278311 default : {
279312 if ( Array . isArray ( lang_value ) ) {
280313 return processArrayFields ( lang_value , entryId , assetId ) ;
281314 }
282- console . info ( "🚀 ~ fieldData?.otherCmsType:" , fieldData ?. contentstackFieldType )
315+ if ( typeof lang_value !== "object" ) {
316+ return typeof lang_value === "number" ? lang_value
317+ : cleanBrackets ( lang_value ) ;
318+ }
319+ console . info ( "Missing ===>" , fieldData ?. contentstackFieldType )
283320 break ;
284321 }
285322 }
286- // If lang_value is not an object
287- if ( typeof lang_value !== "object" ) {
288- return typeof lang_value === "number" ? lang_value
289- : cleanBrackets ( lang_value ) ;
290- }
291- // Check if it's a location (lat/lon)
292- if ( lang_value . lat ) return lang_value ;
293323} ;
294324
295325// Helper function to clean up brackets in non-numeric lang_value
@@ -324,10 +354,12 @@ const processArrayFields = (array: any, entryId: any, assetId: any) => {
324354
325355// Helper function to process Rich Text Editor (RTE) or nested object
326356const processRTEOrNestedObject = ( lang_value : any , lang : any , destination_stack_id : string ) => {
327- if ( lang_value . data ) {
357+ if ( lang_value ? .data ) {
328358 return jsonRTE ( lang_value , lang . toLowerCase ( ) , destination_stack_id ) ;
329359 } else {
330- return lang_value ;
360+ const dom = new JSDOM ( lang_value ) ;
361+ const htmlDoc = dom . window . document . querySelector ( "body" ) ;
362+ return htmlToJson ( htmlDoc ) ;
331363 }
332364} ;
333365
0 commit comments