@@ -553,9 +553,14 @@ class GridsetProcessor extends BaseProcessor {
553553
554554 // Debug: log all entry names
555555 console . log ( '[Gridset] Total zip entries:' , entries . length ) ;
556- const gridEntries = entries . filter (
557- ( e ) => e . entryName . startsWith ( 'Grids/' ) && e . entryName . endsWith ( 'grid.xml' )
558- ) ;
556+ const normalizeEntryName = ( entryName : string ) : string =>
557+ entryName . replace ( / \\ / g, '/' ) . toLowerCase ( ) ;
558+ const isGridXmlEntry = ( entryName : string ) : boolean => {
559+ const normalized = normalizeEntryName ( entryName ) ;
560+ if ( ! normalized . endsWith ( 'grid.xml' ) ) return false ;
561+ return normalized . startsWith ( 'grids/' ) || normalized . includes ( '/grids/' ) ;
562+ } ;
563+ const gridEntries = entries . filter ( ( e ) => isGridXmlEntry ( e . entryName ) ) ;
559564 console . log ( '[Gridset] Grid XML entries found:' , gridEntries . length ) ;
560565 if ( gridEntries . length > 0 ) {
561566 console . log (
@@ -569,7 +574,7 @@ class GridsetProcessor extends BaseProcessor {
569574 const gridIdToNameMap = new Map < string , string > ( ) ;
570575
571576 for ( const entry of entries ) {
572- if ( entry . entryName . startsWith ( 'Grids/' ) && entry . entryName . endsWith ( 'grid.xml' ) ) {
577+ if ( isGridXmlEntry ( entry . entryName ) ) {
573578 try {
574579 const xmlContent = decodeText ( await readEntryBuffer ( entry ) ) ;
575580 const data = parser . parse ( xmlContent ) ;
@@ -605,7 +610,7 @@ class GridsetProcessor extends BaseProcessor {
605610 // Second pass: process each grid file in the gridset
606611 for ( const entry of entries ) {
607612 // Only process files named grid.xml under Grids/ (any subdir)
608- if ( entry . entryName . startsWith ( 'Grids/' ) && entry . entryName . endsWith ( 'grid.xml' ) ) {
613+ if ( isGridXmlEntry ( entry . entryName ) ) {
609614 let xmlContent : string ;
610615 try {
611616 const buffer = await readEntryBuffer ( entry ) ;
0 commit comments