213 lines
3.8 KiB
TypeScript
213 lines
3.8 KiB
TypeScript
import { HTTPMethodType, HTTPMethodTypes } from "./HTTPMethodType";
|
|
|
|
export class Loader
|
|
{
|
|
static async request<O,T>( url:string, input:T ):Promise<O>
|
|
{
|
|
let promise = new Promise<O>
|
|
(
|
|
( resolve, reject ) =>
|
|
{
|
|
let xhr = new XMLHttpRequest();
|
|
|
|
console.log( "loading", url );
|
|
xhr.open( "POST", url, true );
|
|
xhr.responseType = "text";
|
|
xhr.onload=
|
|
() =>
|
|
{
|
|
console.log( xhr.responseURL, xhr.responseText );
|
|
|
|
if ( xhr.status !== 200 || xhr.responseText.startsWith( "ERROR:" ) )
|
|
{
|
|
reject( xhr.responseText )
|
|
}
|
|
else
|
|
{
|
|
resolve( JSON.parse( xhr.responseText ) as O );
|
|
}
|
|
|
|
};
|
|
|
|
xhr.onerror=(e)=>
|
|
{
|
|
reject( e );
|
|
}
|
|
|
|
xhr.send( JSON.stringify( input ) );
|
|
}
|
|
);
|
|
|
|
return promise;
|
|
}
|
|
|
|
static async readDataURL( blob:Blob ):Promise<FileReader>
|
|
{
|
|
let promise = new Promise<FileReader>
|
|
(
|
|
( resolve, reject ) =>
|
|
{
|
|
let fileReader = new FileReader();
|
|
|
|
fileReader.onload = ()=>
|
|
{
|
|
resolve( fileReader );
|
|
}
|
|
|
|
fileReader.onerror = ()=>
|
|
{
|
|
reject();
|
|
}
|
|
|
|
fileReader.onabort = ()=>
|
|
{
|
|
reject();
|
|
}
|
|
|
|
fileReader.readAsDataURL( blob );
|
|
|
|
}
|
|
);
|
|
|
|
return promise;
|
|
}
|
|
|
|
static async loadJSON<T>( url:string, method:HTTPMethodType = HTTPMethodTypes.GET):Promise<T>
|
|
{
|
|
let promise = new Promise<T>
|
|
(
|
|
( resolve, reject )=>
|
|
{
|
|
let xhr = new XMLHttpRequest();
|
|
|
|
xhr.open( method, url, true );
|
|
xhr.responseType = "json";
|
|
|
|
// console.log( "xhr", url, method );
|
|
|
|
xhr.onload=()=>
|
|
{
|
|
console.log( "onload" );
|
|
let value = null;
|
|
|
|
try
|
|
{
|
|
value = xhr.response;
|
|
}
|
|
catch ( e )
|
|
{
|
|
reject( e );
|
|
}
|
|
|
|
resolve( value as T );
|
|
};
|
|
|
|
xhr.onerror = ( e ) =>
|
|
{
|
|
console.log( "onerror", e );
|
|
reject( e );
|
|
}
|
|
|
|
xhr.send();
|
|
}
|
|
);
|
|
|
|
return promise;
|
|
}
|
|
|
|
|
|
static loadText( url:string, method:"GET"|"POST" = "GET" ):Promise<string>
|
|
{
|
|
let promise = new Promise<string>
|
|
(
|
|
( resolve, reject ) =>
|
|
{
|
|
let xhr = new XMLHttpRequest();
|
|
xhr.open( method, url, true );
|
|
|
|
xhr.responseType = "text";
|
|
|
|
xhr.onload = () =>
|
|
{
|
|
// console.log( "load", url, xhr );
|
|
|
|
if ( xhr.status !== 200 )
|
|
{
|
|
reject( xhr.response )
|
|
}
|
|
else
|
|
{
|
|
resolve( xhr.responseText );
|
|
}
|
|
|
|
};
|
|
|
|
xhr.onerror = ( e )=>
|
|
{
|
|
console.log( "error", url, xhr );
|
|
|
|
reject( e );
|
|
}
|
|
|
|
xhr.send();
|
|
}
|
|
);
|
|
|
|
return promise;
|
|
}
|
|
|
|
static loadXML( url:string ):Promise<Document>
|
|
{
|
|
let promise = new Promise<Document>
|
|
(
|
|
(resolve,reject)=>
|
|
{
|
|
let xhr = new XMLHttpRequest();
|
|
xhr.open("GET",url,true);
|
|
xhr.responseType = "document";
|
|
xhr.onload=()=>
|
|
{
|
|
resolve(xhr.responseXML);
|
|
};
|
|
|
|
xhr.onerror=(e)=>
|
|
{
|
|
reject(e);
|
|
}
|
|
|
|
xhr.send();
|
|
}
|
|
);
|
|
|
|
return promise;
|
|
}
|
|
|
|
|
|
static loadImage( url:string ):Promise<HTMLImageElement>
|
|
{
|
|
let promise = new Promise<HTMLImageElement>
|
|
(
|
|
(resolve,reject)=>
|
|
{
|
|
let img = new Image();
|
|
|
|
img.onload = () =>
|
|
{
|
|
resolve( img );
|
|
};
|
|
|
|
img.onerror = ( e ) =>
|
|
{
|
|
reject( e );
|
|
}
|
|
|
|
img.src = url;
|
|
}
|
|
);
|
|
|
|
return promise;
|
|
}
|
|
|
|
|
|
|
|
} |