@@ -277,7 +277,11 @@ export default function (userOptions: TSGenOptions) {
277277 const reason = `Unknown field type: ${ field . data_type } ` ;
278278 skippedFields . push ( { uid : field . uid , path : field . uid , reason } ) ;
279279 logger ?. warn (
280- ERROR_MESSAGES . SKIPPED_FIELD_UNKNOWN_TYPE ( field . uid , field . data_type , reason )
280+ ERROR_MESSAGES . SKIPPED_FIELD_UNKNOWN_TYPE (
281+ field . uid ,
282+ field . data_type ,
283+ reason
284+ )
281285 ) ;
282286 type = "Record<string, unknown>" ; // Use Record<string, unknown> for balanced type safety
283287 }
@@ -295,7 +299,11 @@ export default function (userOptions: TSGenOptions) {
295299 if ( exclusionCheck . shouldExclude ) {
296300 skippedFields . push ( exclusionCheck . record ! ) ;
297301 logger ?. warn (
298- ERROR_MESSAGES . SKIPPED_GLOBAL_FIELD_REFERENCE ( field . uid , field . reference_to , NUMERIC_IDENTIFIER_EXCLUSION_REASON )
302+ ERROR_MESSAGES . SKIPPED_GLOBAL_FIELD_REFERENCE (
303+ field . uid ,
304+ field . reference_to ,
305+ NUMERIC_IDENTIFIER_EXCLUSION_REASON
306+ )
299307 ) ;
300308 return "string" ; // Use string as fallback for global field references
301309 }
@@ -349,7 +357,11 @@ export default function (userOptions: TSGenOptions) {
349357 if ( exclusionCheck . shouldExclude ) {
350358 skippedFields . push ( exclusionCheck . record ! ) ;
351359 logger ?. warn (
352- ERROR_MESSAGES . SKIPPED_FIELD_AT_PATH ( field . uid , fieldPath , NUMERIC_IDENTIFIER_EXCLUSION_REASON )
360+ ERROR_MESSAGES . SKIPPED_FIELD_AT_PATH (
361+ field . uid ,
362+ fieldPath ,
363+ NUMERIC_IDENTIFIER_EXCLUSION_REASON
364+ )
353365 ) ;
354366 continue ;
355367 }
@@ -412,7 +424,11 @@ export default function (userOptions: TSGenOptions) {
412424 if ( exclusionCheck . shouldExclude ) {
413425 skippedBlocks . push ( exclusionCheck . record ! ) ;
414426 logger ?. warn (
415- ERROR_MESSAGES . SKIPPED_BLOCK_AT_PATH ( block . uid , blockPath , NUMERIC_IDENTIFIER_EXCLUSION_REASON )
427+ ERROR_MESSAGES . SKIPPED_BLOCK_AT_PATH (
428+ block . uid ,
429+ blockPath ,
430+ NUMERIC_IDENTIFIER_EXCLUSION_REASON
431+ )
416432 ) ;
417433 return null ; // Return null to filter out later
418434 }
@@ -433,6 +449,12 @@ export default function (userOptions: TSGenOptions) {
433449
434450 // If all blocks were skipped, return a more specific fallback type
435451 if ( modularBlockDefinitions . length === 0 ) {
452+ if ( options . systemFields ) {
453+ const modularBlocksType = `${ options . naming ?. prefix || "" } ModularBlocksExtension` ;
454+ return field . multiple
455+ ? `${ modularBlocksType } <Record<string, unknown>>[]`
456+ : `${ modularBlocksType } <Record<string, unknown>>` ;
457+ }
436458 return field . multiple
437459 ? "Record<string, unknown>[]"
438460 : "Record<string, unknown>" ;
@@ -445,6 +467,13 @@ export default function (userOptions: TSGenOptions) {
445467 const existingInterfaceName =
446468 blockInterfacesKeyToName [ modularBlockSignature ] ;
447469 if ( existingInterfaceName ) {
470+ // Wrap with ModularBlocks type to add _metadata support only when systemFields is enabled
471+ if ( options . systemFields ) {
472+ const modularBlocksType = `${ options . naming ?. prefix || "" } ModularBlocksExtension` ;
473+ return field . multiple
474+ ? `${ modularBlocksType } <${ existingInterfaceName } >[]`
475+ : `${ modularBlocksType } <${ existingInterfaceName } >` ;
476+ }
448477 return field . multiple
449478 ? `${ existingInterfaceName } []`
450479 : existingInterfaceName ;
@@ -468,6 +497,14 @@ export default function (userOptions: TSGenOptions) {
468497 modularBlockInterfaces . add ( modularBlockInterfaceDefinition ) ;
469498 cachedModularBlocks [ modularBlockInterfaceName ] = modularBlockSignature ;
470499 blockInterfacesKeyToName [ modularBlockSignature ] = modularBlockInterfaceName ;
500+
501+ // Wrap with ModularBlocks type to add _metadata support only when systemFields is enabled
502+ if ( options . systemFields ) {
503+ const modularBlocksType = `${ options . naming ?. prefix || "" } ModularBlocksExtension` ;
504+ return field . multiple
505+ ? `${ modularBlocksType } <${ modularBlockInterfaceName } >[]`
506+ : `${ modularBlocksType } <${ modularBlockInterfaceName } >` ;
507+ }
471508 return field . multiple
472509 ? `${ modularBlockInterfaceName } []`
473510 : modularBlockInterfaceName ;
@@ -514,7 +551,10 @@ export default function (userOptions: TSGenOptions) {
514551 if ( exclusionCheck . shouldExclude ) {
515552 skippedFields . push ( exclusionCheck . record ! ) ;
516553 logger ?. warn (
517- ERROR_MESSAGES . SKIPPED_GLOBAL_FIELD ( field . uid , NUMERIC_IDENTIFIER_EXCLUSION_REASON )
554+ ERROR_MESSAGES . SKIPPED_GLOBAL_FIELD (
555+ field . uid ,
556+ NUMERIC_IDENTIFIER_EXCLUSION_REASON
557+ )
518558 ) ;
519559 return "string" ; // Use string as fallback for global fields
520560 }
@@ -560,7 +600,10 @@ export default function (userOptions: TSGenOptions) {
560600 references . push ( name_type ( v ) ) ;
561601 } else {
562602 logger ?. warn (
563- ERROR_MESSAGES . SKIPPED_REFERENCE ( v , NUMERIC_IDENTIFIER_EXCLUSION_REASON )
603+ ERROR_MESSAGES . SKIPPED_REFERENCE (
604+ v ,
605+ NUMERIC_IDENTIFIER_EXCLUSION_REASON
606+ )
564607 ) ;
565608 }
566609 } ) ;
@@ -570,7 +613,10 @@ export default function (userOptions: TSGenOptions) {
570613 references . push ( name_type ( field . reference_to ) ) ;
571614 } else {
572615 logger ?. warn (
573- ERROR_MESSAGES . SKIPPED_REFERENCE ( field . reference_to , NUMERIC_IDENTIFIER_EXCLUSION_REASON )
616+ ERROR_MESSAGES . SKIPPED_REFERENCE (
617+ field . reference_to ,
618+ NUMERIC_IDENTIFIER_EXCLUSION_REASON
619+ )
574620 ) ;
575621 }
576622 }
@@ -669,7 +715,7 @@ export default function (userOptions: TSGenOptions) {
669715 function type_json_rte ( field : ContentstackTypes . Field ) {
670716 let json_rte ;
671717 if ( field . config && field . field_metadata ?. extension ) {
672- json_rte = `{ value: { key: string; value: string }[] } ` ;
718+ json_rte = `unknown ` ;
673719 } else {
674720 json_rte = `{
675721 type: string;
0 commit comments