element-plus
Version:
A Component Library for Vue 3
1 lines • 4.88 kB
Source Map (JSON)
{"version":3,"file":"ajax.mjs","names":[],"sources":["../../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { isNil } from 'lodash-unified'\nimport { isArray, isString, throwError } from '@element-plus/utils'\n\nimport type {\n UploadProgressEvent,\n UploadRequestHandler,\n UploadRequestOptions,\n} from './upload'\n\nconst SCOPE = 'ElUpload'\n\nexport class UploadAjaxError extends Error {\n name = 'UploadAjaxError'\n status: number\n method: string\n url: string\n\n constructor(message: string, status: number, method: string, url: string) {\n super(message)\n this.status = status\n this.method = method\n this.url = url\n }\n}\n\nfunction getError(\n action: string,\n option: UploadRequestOptions,\n xhr: XMLHttpRequest\n) {\n let msg: string\n if (xhr.response) {\n msg = `${xhr.response.error || xhr.response}`\n } else if (xhr.responseText) {\n msg = `${xhr.responseText}`\n } else {\n msg = `fail to ${option.method} ${action} ${xhr.status}`\n }\n\n return new UploadAjaxError(msg, xhr.status, option.method, action)\n}\n\nfunction getBody(xhr: XMLHttpRequest): XMLHttpRequestResponseType {\n const text = xhr.responseText || xhr.response\n if (!text) {\n return text\n }\n\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nexport const ajaxUpload: UploadRequestHandler = (option) => {\n if (typeof XMLHttpRequest === 'undefined')\n throwError(SCOPE, 'XMLHttpRequest is undefined')\n\n const xhr = new XMLHttpRequest()\n const action = option.action\n\n if (xhr.upload) {\n xhr.upload.addEventListener('progress', (evt) => {\n const progressEvt = evt as UploadProgressEvent\n progressEvt.percent = evt.total > 0 ? (evt.loaded / evt.total) * 100 : 0\n option.onProgress(progressEvt)\n })\n }\n\n const formData = new FormData()\n if (option.data) {\n for (const [key, value] of Object.entries(option.data)) {\n if (isArray(value)) {\n if (\n value.length === 2 &&\n value[0] instanceof Blob &&\n isString(value[1])\n ) {\n formData.append(key, value[0], value[1])\n } else {\n value.forEach((item) => {\n formData.append(key, item)\n })\n }\n } else formData.append(key, value)\n }\n }\n formData.append(option.filename, option.file, option.file.name)\n\n xhr.addEventListener('error', () => {\n option.onError(getError(action, option, xhr))\n })\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr))\n }\n option.onSuccess(getBody(xhr))\n })\n\n xhr.open(option.method, action, true)\n\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true\n }\n\n const headers = option.headers || {}\n if (headers instanceof Headers) {\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n } else {\n for (const [key, value] of Object.entries(headers)) {\n if (isNil(value)) continue\n xhr.setRequestHeader(key, String(value))\n }\n }\n\n xhr.send(formData)\n return xhr\n}\n"],"mappings":";;;;;AASA,MAAM,QAAQ;AAEd,IAAa,kBAAb,cAAqC,MAAM;CAMzC,YAAY,SAAiB,QAAgB,QAAgB,KAAa;AACxE,QAAM,QAAQ;cANT;AAOL,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,MAAM;;;AAIf,SAAS,SACP,QACA,QACA,KACA;CACA,IAAI;AACJ,KAAI,IAAI,SACN,OAAM,GAAG,IAAI,SAAS,SAAS,IAAI;UAC1B,IAAI,aACb,OAAM,GAAG,IAAI;KAEb,OAAM,WAAW,OAAO,OAAO,GAAG,OAAO,GAAG,IAAI;AAGlD,QAAO,IAAI,gBAAgB,KAAK,IAAI,QAAQ,OAAO,QAAQ,OAAO;;AAGpE,SAAS,QAAQ,KAAiD;CAChE,MAAM,OAAO,IAAI,gBAAgB,IAAI;AACrC,KAAI,CAAC,KACH,QAAO;AAGT,KAAI;AACF,SAAO,KAAK,MAAM,KAAK;SACjB;AACN,SAAO;;;AAIX,MAAa,cAAoC,WAAW;AAC1D,KAAI,OAAO,mBAAmB,YAC5B,YAAW,OAAO,8BAA8B;CAElD,MAAM,MAAM,IAAI,gBAAgB;CAChC,MAAM,SAAS,OAAO;AAEtB,KAAI,IAAI,OACN,KAAI,OAAO,iBAAiB,aAAa,QAAQ;EAC/C,MAAM,cAAc;AACpB,cAAY,UAAU,IAAI,QAAQ,IAAK,IAAI,SAAS,IAAI,QAAS,MAAM;AACvE,SAAO,WAAW,YAAY;GAC9B;CAGJ,MAAM,WAAW,IAAI,UAAU;AAC/B,KAAI,OAAO,KACT,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,KAAK,CACpD,KAAI,QAAQ,MAAM,CAChB,KACE,MAAM,WAAW,KACjB,MAAM,cAAc,QACpB,SAAS,MAAM,GAAG,CAElB,UAAS,OAAO,KAAK,MAAM,IAAI,MAAM,GAAG;KAExC,OAAM,SAAS,SAAS;AACtB,WAAS,OAAO,KAAK,KAAK;GAC1B;KAEC,UAAS,OAAO,KAAK,MAAM;AAGtC,UAAS,OAAO,OAAO,UAAU,OAAO,MAAM,OAAO,KAAK,KAAK;AAE/D,KAAI,iBAAiB,eAAe;AAClC,SAAO,QAAQ,SAAS,QAAQ,QAAQ,IAAI,CAAC;GAC7C;AAEF,KAAI,iBAAiB,cAAc;AACjC,MAAI,IAAI,SAAS,OAAO,IAAI,UAAU,IACpC,QAAO,OAAO,QAAQ,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAEtD,SAAO,UAAU,QAAQ,IAAI,CAAC;GAC9B;AAEF,KAAI,KAAK,OAAO,QAAQ,QAAQ,KAAK;AAErC,KAAI,OAAO,mBAAmB,qBAAqB,IACjD,KAAI,kBAAkB;CAGxB,MAAM,UAAU,OAAO,WAAW,EAAE;AACpC,KAAI,mBAAmB,QACrB,SAAQ,SAAS,OAAO,QAAQ,IAAI,iBAAiB,KAAK,MAAM,CAAC;KAEjE,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE;AAClD,MAAI,MAAM,MAAM,CAAE;AAClB,MAAI,iBAAiB,KAAK,OAAO,MAAM,CAAC;;AAI5C,KAAI,KAAK,SAAS;AAClB,QAAO"}