@@ -173,8 +173,12 @@ export async function scanResources(importEntries: ImportEntry[]): Promise<ScanR
173173 let v5Error = null ;
174174
175175 try {
176- const { data : insomnia5Import , error } = tryImportV5Data ( contentStr ) ;
177- v5Error = error ;
176+ let insomnia5Import : ExportedModel [ ] = [ ] ;
177+ if ( contentStr . startsWith ( 'type: ' ) ) {
178+ const { data, error } = tryImportV5Data ( contentStr ) ;
179+ insomnia5Import = data as ExportedModel [ ] ;
180+ v5Error = error ;
181+ }
178182 if ( insomnia5Import . length > 0 ) {
179183 result = {
180184 type : {
@@ -183,7 +187,6 @@ export async function scanResources(importEntries: ImportEntry[]): Promise<ScanR
183187 description : 'Insomnia v5' ,
184188 } ,
185189 data : {
186- // @ts -expect-error -- TSCONVERSION
187190 resources : insomnia5Import ,
188191 } ,
189192 } ;
@@ -234,6 +237,7 @@ export async function scanResources(importEntries: ImportEntry[]): Promise<ScanR
234237 } ) ;
235238
236239 const requests = resources . filter ( isRequest ) ;
240+ const requestGroups = resources . filter ( isRequestGroup ) ;
237241 const websocketRequests = resources . filter ( isWebSocketRequest ) ;
238242 const grpcRequests = resources . filter ( isGrpcRequest ) ;
239243 const socketIoRequests = resources . filter ( isSocketIORequest ) ;
@@ -251,6 +255,7 @@ export async function scanResources(importEntries: ImportEntry[]): Promise<ScanR
251255 unitTests,
252256 unitTestSuites,
253257 requests : [ ...requests , ...websocketRequests , ...grpcRequests , ...socketIoRequests ] ,
258+ requestGroups,
254259 workspaces,
255260 environments,
256261 apiSpecs,
@@ -598,21 +603,14 @@ export const importResourcesToNewWorkspace = async ({
598603 const resources = resourceCacheItem . resources ;
599604 const ResourceIdMap = new Map ( ) ;
600605 let newWorkspace : Workspace ;
601- // in order to support import from api spec yaml
602- if ( resourceCacheItem ?. importer ?. id && isApiSpecImport ( resourceCacheItem . importer ) ) {
606+ // support import from both insomnia export and api spec yaml
607+ if ( resources . find ( isApiSpec ) || isApiSpecImport ( resourceCacheItem . importer ) ) {
603608 newWorkspace = await models . workspace . create ( {
604609 name : workspaceToImport ?. name ,
605610 scope : 'design' ,
606611 parentId : projectId ,
607612 } ) ;
608613
609- if ( isGitProject ( project ) ) {
610- const workspaceMeta = await models . workspaceMeta . getOrCreateByParentId ( newWorkspace . _id ) ;
611- await models . workspaceMeta . update ( workspaceMeta , {
612- gitFilePath : `${ newWorkspace . name } -${ newWorkspace . _id } .yaml` ,
613- } ) ;
614- }
615-
616614 await models . apiSpec . updateOrCreateForParentId ( newWorkspace . _id , {
617615 contents : resourceCacheItem . content as string | undefined ,
618616 contentType : 'yaml' ,
@@ -624,95 +622,81 @@ export const importResourcesToNewWorkspace = async ({
624622 scope : workspaceToImport ?. scope || 'collection' ,
625623 parentId : projectId ,
626624 } ) ;
625+ }
627626
628- if ( isGitProject ( project ) ) {
629- const workspaceMeta = await models . workspaceMeta . getOrCreateByParentId ( newWorkspace . _id ) ;
630- await models . workspaceMeta . update ( workspaceMeta , {
631- gitFilePath : `${ newWorkspace . name } -${ newWorkspace . _id } .yaml` ,
632- } ) ;
633- }
634-
635- const apiSpec = resources . find ( r => r . type === 'ApiSpec' && r . parentId === workspaceToImport ?. _id ) as ApiSpec ;
636- const hasApiSpec = newWorkspace . scope === 'design' && isApiSpec ( apiSpec ) ;
637- // if workspace is not in the resources, there will be no apiSpec, if resource type is set to api spec this could cause a bug
638- if ( hasApiSpec ) {
639- // TODO: will overwrite existing api spec, not needed after migrate hack is removed
640- await models . apiSpec . updateOrCreateForParentId ( newWorkspace . _id , {
641- contents : apiSpec . contents ,
642- contentType : apiSpec . contentType ,
643- fileName : workspaceToImport ?. name ,
644- } ) ;
645- }
646-
647- // If we're importing into a new workspace
648- // Map new IDs
649- ResourceIdMap . set ( '__WORKSPACE_ID__' , newWorkspace . _id ) ;
650- workspaceToImport && ResourceIdMap . set ( workspaceToImport . _id , newWorkspace . _id ) ;
627+ // If we're importing into a new workspace
628+ // Map new IDs
629+ ResourceIdMap . set ( '__WORKSPACE_ID__' , newWorkspace . _id ) ;
630+ workspaceToImport && ResourceIdMap . set ( workspaceToImport . _id , newWorkspace . _id ) ;
651631
652- const resourcesWithoutWorkspaceAndApiSpec = resources . filter (
653- resource => ! isWorkspace ( resource ) && ! isApiSpec ( resource ) ,
654- ) ;
632+ const resourcesWithoutWorkspaceAndApiSpec = resources . filter (
633+ resource => ! isWorkspace ( resource ) && ! isApiSpec ( resource ) ,
634+ ) ;
655635
656- for ( const resource of resourcesWithoutWorkspaceAndApiSpec ) {
657- const model = getModel ( resource . type ) ;
658- model && ResourceIdMap . set ( resource . _id , generateId ( model . prefix ) ) ;
659- }
636+ for ( const resource of resourcesWithoutWorkspaceAndApiSpec ) {
637+ const model = getModel ( resource . type ) ;
638+ model && ResourceIdMap . set ( resource . _id , generateId ( model . prefix ) ) ;
639+ }
660640
661- for ( const resource of resourcesWithoutWorkspaceAndApiSpec ) {
662- const model = getModel ( resource . type ) ;
641+ for ( const resource of resourcesWithoutWorkspaceAndApiSpec ) {
642+ const model = getModel ( resource . type ) ;
663643
664- if ( model ) {
665- const newParentId = ResourceIdMap . get ( resource . parentId ) ;
666- if ( ! newParentId ) {
667- console . warn ( `Could not find new parent id for ${ resource . name } ${ resource . _id } ` ) ;
668- continue ;
669- }
670- if ( isGrpcRequest ( resource ) ) {
671- await models . grpcRequest . create ( {
672- ...resource ,
673- _id : ResourceIdMap . get ( resource . _id ) ,
674- protoFileId : ResourceIdMap . get ( resource . protoFileId ) ,
675- parentId : newParentId ,
676- } ) ;
677- } else if ( isUnitTest ( resource ) ) {
678- await models . unitTest . create ( {
679- ...resource ,
680- _id : ResourceIdMap . get ( resource . _id ) ,
681- requestId : ResourceIdMap . get ( resource . requestId ) ,
682- parentId : newParentId ,
683- } ) ;
684- } else if ( isRequest ( resource ) ) {
685- await models . request . create ( importRequestWithNewIds ( resource , ResourceIdMap ) ) ;
686- } else {
687- await db . docCreate ( model . type , {
688- ...resource ,
689- _id : ResourceIdMap . get ( resource . _id ) ,
690- parentId : newParentId ,
691- } ) ;
692- }
644+ if ( model ) {
645+ const newParentId = ResourceIdMap . get ( resource . parentId ) ;
646+ if ( ! newParentId ) {
647+ console . warn ( `Could not find new parent id for ${ resource . name } ${ resource . _id } ` ) ;
648+ continue ;
649+ }
650+ if ( isGrpcRequest ( resource ) ) {
651+ await models . grpcRequest . create ( {
652+ ...resource ,
653+ _id : ResourceIdMap . get ( resource . _id ) ,
654+ protoFileId : ResourceIdMap . get ( resource . protoFileId ) ,
655+ parentId : newParentId ,
656+ } ) ;
657+ } else if ( isUnitTest ( resource ) ) {
658+ await models . unitTest . create ( {
659+ ...resource ,
660+ _id : ResourceIdMap . get ( resource . _id ) ,
661+ requestId : ResourceIdMap . get ( resource . requestId ) ,
662+ parentId : newParentId ,
663+ } ) ;
664+ } else if ( isRequest ( resource ) ) {
665+ await models . request . create ( importRequestWithNewIds ( resource , ResourceIdMap ) ) ;
666+ } else {
667+ await db . docCreate ( model . type , {
668+ ...resource ,
669+ _id : ResourceIdMap . get ( resource . _id ) ,
670+ parentId : newParentId ,
671+ } ) ;
693672 }
694673 }
674+ }
695675
696- // Use the first sub environment as the active one
697- const subEnvironments = resources . filter ( isEnvironment ) . filter ( isSubEnvironmentResource ) || [ ] ;
676+ // Use the first sub environment as the active one
677+ const subEnvironments = resources . filter ( isEnvironment ) . filter ( isSubEnvironmentResource ) || [ ] ;
698678
699- if ( subEnvironments . length > 0 ) {
700- const firstSubEnvironment = subEnvironments [ 0 ] ;
679+ if ( subEnvironments . length > 0 ) {
680+ const firstSubEnvironment = subEnvironments [ 0 ] ;
701681
702- if ( firstSubEnvironment ) {
703- const workspaceMeta = await models . workspaceMeta . getOrCreateByParentId ( newWorkspace . _id ) ;
682+ if ( firstSubEnvironment ) {
683+ const workspaceMeta = await models . workspaceMeta . getOrCreateByParentId ( newWorkspace . _id ) ;
704684
705- await models . workspaceMeta . update ( workspaceMeta , {
706- activeEnvironmentId : ResourceIdMap . get ( firstSubEnvironment . _id ) ,
707- } ) ;
708- }
685+ await models . workspaceMeta . update ( workspaceMeta , {
686+ activeEnvironmentId : ResourceIdMap . get ( firstSubEnvironment . _id ) ,
687+ } ) ;
709688 }
710689 }
711690
712691 // Make sure the new workspace has required resources like base environment, cookie jar and workspaceMeta
713692 await models . environment . getOrCreateForParentId ( newWorkspace . _id ) ;
714- await models . workspaceMeta . getOrCreateByParentId ( newWorkspace . _id ) ;
693+ const workspaceMeta = await models . workspaceMeta . getOrCreateByParentId ( newWorkspace . _id ) ;
715694
695+ if ( isGitProject ( project ) ) {
696+ await models . workspaceMeta . update ( workspaceMeta , {
697+ gitFilePath : `${ newWorkspace . name } -${ newWorkspace . _id } .yaml` ,
698+ } ) ;
699+ }
716700 // we sync the new workspace to the cloud in workspaceLoader when user enters the workspace
717701 // since we won't navigate to the workspace automatically after import
718702 // here we push to the cloud programmatically
0 commit comments