message: added zip data type that returns object of Uint8Arrays
diff: @@ -28,13 +28,14 @@ export enum DataCompressionMethod {
  Zip,
  }
  -type DataType = 'json' | 'xml' | 'string' | 'binary'
  +type DataType = 'json' | 'xml' | 'string' | 'binary' | 'zip'
  type DataValue = 'string' | any | XMLDocument | Uint8Array
  type DataResponse<T extends DataType> =
  T extends 'json' ? any :
  T extends 'xml' ? XMLDocument :
  T extends 'string' ? string :
  - T extends 'binary' ? Uint8Array : never
  + T extends 'binary' ? Uint8Array :
  + T extends 'zip' ? { [k: string]: Uint8Array } : never
  export interface AjaxGetParams<T extends DataType = 'string'> {
  url: string,
  @@ -158,6 +159,8 @@ async function processFile<T extends DataType>(ctx: RuntimeContext, reader: File
  if (type === 'binary' && data instanceof Uint8Array) {
  return data as DataResponse<T>;
  + } else if (type === 'zip' && data instanceof Uint8Array) {
  + return await unzip(ctx, data.buffer) as DataResponse<T>;
  } else if (type === 'string' && typeof data === 'string') {
  return data as DataResponse<T>;
  } else if (type === 'xml' && typeof data === 'string') {
  @@ -174,9 +177,10 @@ function readFromFileInternal<T extends DataType>(file: File, type: T): Task<Dat
  return Task.create('Read File', async ctx => {
  try {
  reader = new FileReader();
  - const compression = getCompression(file.name);
  + // unzipping for type 'zip' handled explicitly in `processFile`
  + const compression = type === 'zip' ? DataCompressionMethod.None : getCompression(file.name);
  - if (type === 'binary' || compression !== DataCompressionMethod.None) {
  + if (type === 'binary' || type === 'zip' || compression !== DataCompressionMethod.None) {
  reader.readAsArrayBuffer(file);
  } else {
  reader.readAsText(file);
  @@ -224,7 +228,7 @@ function processAjax<T extends DataType>(req: XMLHttpRequest, type: T): DataResp
  const { response } = req;
  RequestPool.deposit(req);
  - if (type === 'binary' && response instanceof ArrayBuffer) {
  + if ((type === 'binary' || type === 'zip') && response instanceof ArrayBuffer) {
  return new Uint8Array(response) as DataResponse<T>;
  } else if (type === 'string' && typeof response === 'string') {
  return response as DataResponse<T>;
  @@ -247,6 +251,7 @@ function getRequestResponseType(type: DataType): XMLHttpRequestResponseType {
  case 'xml': return 'document';
  case 'string': return 'text';
  case 'binary': return 'arraybuffer';
  + case 'zip': return 'arraybuffer';
  }
  }
  