@@ -12,7 +12,7 @@ export interface FieldMapping {
1212
1313// Hierarchical array length map that mirrors document structure
1414export type ArrayLengthMap = {
15- [ fieldName : string ] : number | ArrayLengthMap ;
15+ [ fieldName : string ] : number [ ] | ArrayLengthMap ;
1616} ;
1717
1818export interface ScriptOptions {
@@ -351,24 +351,24 @@ function generateDocumentCode(
351351 }
352352 } else if ( 'type' in value && value . type === 'array' ) {
353353 // It's an array
354- const nestedArrayLengthMap =
355- typeof arrayLengthMap [ fieldName ] === 'object'
356- ? arrayLengthMap [ fieldName ]
357- : { } ;
358354 const arrayCode = generateArrayCode (
359355 value as ArrayStructure ,
360356 indent + INDENT_SIZE ,
361357 fieldName ,
362358 arrayLengthMap ,
363- nestedArrayLengthMap
359+ 0 // Start at dimension 0
364360 ) ;
365361 rootLevelFields . push ( `${ fieldIndent } ${ fieldName } : ${ arrayCode } ` ) ;
366362 } else {
367363 // It's a nested object: recursive call
364+
365+ // Type Validation/ Fallback for misconfigured array length map
366+ const arrayDimensions = arrayLengthMap [ fieldName ] ;
368367 const nestedArrayLengthMap =
369- typeof arrayLengthMap [ fieldName ] === 'object'
370- ? arrayLengthMap [ fieldName ]
371- : arrayLengthMap ;
368+ typeof arrayDimensions === 'object' && ! Array . isArray ( arrayDimensions )
369+ ? arrayDimensions
370+ : { } ;
371+
372372 const nestedCode = generateDocumentCode (
373373 value as DocumentStructure ,
374374 indent + INDENT_SIZE ,
@@ -393,33 +393,37 @@ function generateArrayCode(
393393 arrayStructure : ArrayStructure ,
394394 indent : number = INDENT_SIZE ,
395395 fieldName : string = '' ,
396- parentArrayLengthMap : ArrayLengthMap = { } ,
397- nestedArrayLengthMap : ArrayLengthMap = { }
396+ arrayLengthMap : ArrayLengthMap = { } ,
397+ dimensionIndex : number = 0
398398) : string {
399399 const elementType = arrayStructure . elementType ;
400400
401- // Get array length from map or use default
402- const arrayLength =
403- typeof parentArrayLengthMap [ fieldName ] === 'number'
404- ? parentArrayLengthMap [ fieldName ]
405- : DEFAULT_ARRAY_LENGTH ;
401+ // Get array length for this dimension
402+ const arrayDimensions = arrayLengthMap [ fieldName ] ;
403+ const arrayLength = Array . isArray ( arrayDimensions )
404+ ? arrayDimensions [ dimensionIndex ] ?? DEFAULT_ARRAY_LENGTH
405+ : DEFAULT_ARRAY_LENGTH ; // Fallback for misconfigured array length map
406406
407407 if ( 'mongoType' in elementType ) {
408408 // Array of primitives
409409 const fakerCall = generateFakerCall ( elementType as FieldMapping ) ;
410410 return `Array.from({length: ${ arrayLength } }, () => ${ fakerCall } )` ;
411411 } else if ( 'type' in elementType && elementType . type === 'array' ) {
412- // Nested array (e.g., matrix[][])
412+ // Nested array (e.g., matrix[][]) - keep same fieldName, increment dimension
413413 const nestedArrayCode = generateArrayCode (
414414 elementType as ArrayStructure ,
415415 indent ,
416- '' , // No specific field name for nested arrays
417- nestedArrayLengthMap ,
418- { }
416+ fieldName ,
417+ arrayLengthMap ,
418+ dimensionIndex + 1 // Next dimension
419419 ) ;
420420 return `Array.from({length: ${ arrayLength } }, () => ${ nestedArrayCode } )` ;
421421 } else {
422422 // Array of objects
423+ const nestedArrayLengthMap =
424+ typeof arrayDimensions === 'object' && ! Array . isArray ( arrayDimensions )
425+ ? arrayDimensions
426+ : { } ; // Fallback for misconfigured array length map
423427 const objectCode = generateDocumentCode (
424428 elementType as DocumentStructure ,
425429 indent ,
0 commit comments