@@ -4,18 +4,27 @@ import { show } from '@ebay/nice-modal-react';
44
55import { RedirectedModal } from '../components/Modals' ;
66
7- import { appState } from '../state' ;
7+ import { appState , filesState } from '../state' ;
88
99export class ApplicationService extends AbstractService {
10- public override onInit ( ) : void {
10+ override async onInit ( ) {
1111 // subscribe to state to hide preloader
1212 this . hidePreloader ( ) ;
1313
1414 const { readOnly, url, base64, redirectedFrom } = this . svcs . navigationSvc . getUrlParameters ( ) ;
1515
1616 // readOnly state should be only set to true when someone pass also url or base64 parameter
1717 const isStrictReadonly = Boolean ( readOnly && ( url || base64 ) ) ;
18- if ( isStrictReadonly ) {
18+
19+ let error : any ;
20+ try {
21+ await this . fetchResource ( url , base64 ) ;
22+ } catch ( err ) {
23+ error = err ;
24+ console . error ( err ) ;
25+ }
26+
27+ if ( isStrictReadonly && ! error ) {
1928 appState . setState ( {
2029 readOnly,
2130 initialized : true ,
@@ -28,6 +37,30 @@ export class ApplicationService extends AbstractService {
2837 }
2938 }
3039
40+ private async fetchResource ( url : string | null , base64 : string | null ) {
41+ if ( ! url && ! base64 ) {
42+ return ;
43+ }
44+
45+ const { updateFile } = filesState . getState ( ) ;
46+ let content = '' ;
47+ if ( url ) {
48+ content = await fetch ( url ) . then ( res => res . text ( ) ) ;
49+ } else if ( base64 ) {
50+ content = this . svcs . formatSvc . decodeBase64 ( base64 ) ;
51+ }
52+
53+ const language = this . svcs . formatSvc . retrieveLangauge ( content ) ;
54+ const source = url || undefined ;
55+ updateFile ( 'asyncapi' , {
56+ content,
57+ language,
58+ source,
59+ from : url ? 'url' : 'base64' ,
60+ } ) ;
61+ await this . svcs . parserSvc . parse ( 'asyncapi' , content , { source } ) ;
62+ }
63+
3164 private hidePreloader ( ) {
3265 const unsunscribe = appState . subscribe ( ( state , prevState ) => {
3366 if ( ! prevState . initialized && state . initialized ) {
0 commit comments