@@ -171,7 +171,7 @@ async function renameOrCopyProject(
171171
172172 for ( const modulePath in pathToModuleContent ) {
173173 const className = storageNames . getClassName ( modulePath ) ;
174- const moduleType = pathToModuleContent [ modulePath ] . getModuleType ( )
174+ const moduleType = storageNames . getModuleType ( modulePath ) ;
175175 const newModulePath = storageNames . makeModulePath ( newProjectName , className , moduleType ) ;
176176 const moduleContentText = pathToModuleContent [ modulePath ] . getModuleContentText ( ) ;
177177 await storage . saveModule ( newModulePath , moduleContentText ) ;
@@ -424,18 +424,17 @@ export async function downloadProject(
424424 const pathToModuleContent = await storage . listModules (
425425 storageNames . makeModulePathRegexPattern ( project . projectName ) ) ;
426426
427- const classNameToModuleContentText : { [ className : string ] : string } = { } ; // value is module content text
427+ const fileNameToModuleContentText : { [ fileName : string ] : string } = { } ; // value is module content text
428428 for ( const modulePath in pathToModuleContent ) {
429- const className = storageNames . getClassName ( modulePath ) ;
429+ const fileName = storageNames . getFileName ( modulePath ) ;
430430 const moduleContentText = pathToModuleContent [ modulePath ] . getModuleContentText ( ) ;
431- classNameToModuleContentText [ className ] = moduleContentText ;
431+ fileNameToModuleContentText [ fileName ] = moduleContentText ;
432432 }
433433
434434 const zip = new JSZip ( ) ;
435- for ( const className in classNameToModuleContentText ) {
436- const moduleContentText = classNameToModuleContentText [ className ] ;
437- const filename = className + storageNames . JSON_FILE_EXTENSION ;
438- zip . file ( filename , moduleContentText ) ;
435+ for ( const fileName in fileNameToModuleContentText ) {
436+ const moduleContentText = fileNameToModuleContentText [ fileName ] ;
437+ zip . file ( fileName , moduleContentText ) ;
439438 }
440439 const content = await zip . generateAsync ( { type : "blob" } ) ;
441440 return URL . createObjectURL ( content ) ;
@@ -453,15 +452,14 @@ export function makeUploadProjectName(
453452
454453export async function uploadProject (
455454 storage : commonStorage . Storage , projectName : string , blobUrl : string ) : Promise < void > {
456- // Process the uploaded blob to get the module types and contents.
457- const classNameToModuleContentText : { [ className : string ] : string } = { } ; // value is module content text.
458- const classNameToModuleType : { [ className : string ] : storageModule . ModuleType } = { } ;
459- await processUploadedBlob ( blobUrl , classNameToModuleContentText , classNameToModuleType ) ;
455+ // Process the uploaded blob to get the file names and contents.
456+ const fileNameToModuleContentText = await processUploadedBlob ( blobUrl ) ;
460457
461458 // Save each module.
462- for ( const className in classNameToModuleContentText ) {
463- const moduleContentText = classNameToModuleContentText [ className ] ;
464- const moduleType = classNameToModuleType [ className ] ;
459+ for ( const fileName in fileNameToModuleContentText ) {
460+ const moduleContentText = fileNameToModuleContentText [ fileName ] ;
461+ const className = storageNames . getClassName ( fileName ) ;
462+ const moduleType = storageNames . getModuleType ( fileName ) ;
465463 const modulePath = storageNames . makeModulePath ( projectName , className , moduleType ) ;
466464 await storage . saveModule ( modulePath , moduleContentText ) ;
467465 }
@@ -470,10 +468,7 @@ export async function uploadProject(
470468/**
471469 * Process the uploaded blob to get the module class names and contents.
472470 */
473- async function processUploadedBlob (
474- blobUrl : string ,
475- classNameToModuleContentText : { [ className : string ] : string } , // value is module content text.
476- classNameToModuleType : { [ className : string ] : storageModule . ModuleType } ) : Promise < void > {
471+ async function processUploadedBlob ( blobUrl : string ) : Promise < { [ className : string ] : string } > {
477472
478473 const prefix = 'data:application/octet-stream;base64,' ;
479474 if ( ! blobUrl . startsWith ( prefix ) ) {
@@ -483,35 +478,34 @@ async function processUploadedBlob(
483478
484479 const zip = await JSZip . loadAsync ( data , { base64 : true } ) ;
485480 const promises : { [ key : string ] : Promise < string > } = { } ;
486- zip . forEach ( ( filename , zipEntry ) => {
487- const className = filename . endsWith ( storageNames . JSON_FILE_EXTENSION )
488- ? filename . substring ( 0 , filename . length - storageNames . JSON_FILE_EXTENSION . length )
489- : filename ;
490- promises [ className ] = zipEntry . async ( 'text' ) ;
481+ zip . forEach ( ( fileName , zipEntry ) => {
482+ promises [ fileName ] = zipEntry . async ( 'text' ) ;
491483 } ) ;
492484
493485 // Wait for all promises to resolve.
494486 const files : { [ fileName : string ] : string } = { } ; // value is file content
495487 await Promise . all (
496- Object . entries ( promises ) . map ( async ( [ filename , promise ] ) => {
497- files [ filename ] = await promise ;
488+ Object . entries ( promises ) . map ( async ( [ fileName , promise ] ) => {
489+ files [ fileName ] = await promise ;
498490 } )
499491 ) ;
500492
501493 // Process each module's content.
502494 let foundRobot = false ;
503- for ( const filename in files ) {
504- const className = filename ;
505- if ( className === storageNames . CLASS_NAME_ROBOT ) {
495+ const fileNameToModuleContentText : { [ fileName : string ] : string } = { } ; // value is module content text
496+ for ( const fileName in files ) {
497+ const moduleType = storageNames . getModuleType ( fileName ) ;
498+ if ( moduleType === storageModule . ModuleType . ROBOT ) {
506499 foundRobot = true ;
507500 }
508501 // Make sure we can parse the content.
509- const moduleContent = storageModuleContent . parseModuleContentText ( files [ filename ] ) ;
510- classNameToModuleContentText [ className ] = moduleContent . getModuleContentText ( ) ;
511- classNameToModuleType [ className ] = moduleContent . getModuleType ( ) ;
502+ const moduleContent = storageModuleContent . parseModuleContentText ( files [ fileName ] ) ;
503+ fileNameToModuleContentText [ fileName ] = moduleContent . getModuleContentText ( ) ;
512504 }
513505
514506 if ( ! foundRobot ) {
515507 throw new Error ( 'Uploaded file did not contain a Robot.' ) ;
516508 }
509+
510+ return fileNameToModuleContentText ;
517511}
0 commit comments