├── .gitignore ├── LICENSE.md ├── dist ├── laravel-vapor.esm.js ├── laravel-vapor.esm.js.map ├── laravel-vapor.js ├── laravel-vapor.js.map ├── laravel-vapor.modern.js ├── laravel-vapor.modern.js.map ├── laravel-vapor.umd.js └── laravel-vapor.umd.js.map ├── mix.js ├── package-lock.json ├── package.json └── src └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Taylor Otwell 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /dist/laravel-vapor.esm.js: -------------------------------------------------------------------------------- 1 | import e from"axios";function t(){return t=Object.assign||function(e){for(var t=1;t {\n try {\n return process.env.MIX_VAPOR_ASSET_URL\n ? process.env.MIX_VAPOR_ASSET_URL\n : '';\n } catch (e) {\n console.error('Unable to automatically resolve the asset URL. Use Vapor.withBaseAssetUrl() to specify it manually.')\n\n throw e\n }\n}\n\nclass Vapor\n{\n /**\n * Generate the S3 URL to an application asset.\n */\n asset(path) {\n return assetUrlResolver() + '/' + path;\n }\n\n /**\n * Set the base URL for assets.\n */\n withBaseAssetUrl(url) {\n assetUrlResolver = () => url ? url : ''\n }\n\n /**\n * Store a file in S3 and return its UUID, key, and other information.\n */\n async store(file, options = {}) {\n const response = await axios.post(options.signedStorageUrl ? options.signedStorageUrl : '/vapor/signed-storage-url', {\n 'bucket': options.bucket || '',\n 'content_type': options.contentType || file.type,\n 'expires': options.expires || '',\n 'visibility': options.visibility || '',\n ...options.data\n }, {\n baseURL: options.baseURL || null,\n headers: options.headers || {},\n ...options.options\n });\n\n let headers = response.data.headers;\n\n if ('Host' in headers) {\n delete headers.Host;\n }\n\n if (typeof options.progress === 'undefined') {\n options.progress = () => {};\n }\n\n const cancelToken = options.cancelToken || ''\n\n await axios.put(response.data.url, file, {\n cancelToken: cancelToken,\n headers: headers,\n onUploadProgress: (progressEvent) => {\n options.progress(progressEvent.loaded / progressEvent.total);\n }\n })\n\n response.data.extension = file.name.split('.').pop()\n\n return response.data;\n }\n}\n\nexport default new Vapor();\n"],"names":["assetUrlResolver","process","env","MIX_VAPOR_ASSET_URL","e","console","error","Vapor","_proto","prototype","asset","path","withBaseAssetUrl","url","store","file","options","Promise","resolve","axios","post","signedStorageUrl","_extends","bucket","content_type","contentType","type","expires","visibility","data","baseURL","headers","then","response","Host","progress","put","cancelToken","onUploadProgress","progressEvent","loaded","total","extension","name","split","pop","reject"],"mappings":"qOAEA,IAAIA,EAAmB,WACnB,IACI,OAAOC,QAAQC,IAAIC,oBACbF,QAAQC,IAAIC,oBACZ,EAKV,CAJE,MAAOC,GAGL,MAFAC,QAAQC,MAAM,uGAERF,CACV,CACJ,4BAEWG,SAAAC,EAAAD,EAAAE,iBAAAD,EAKPE,MAAA,SAAMC,GACF,OAAOX,IAAqB,IAAMW,CACtC,EAACH,EAKDI,iBAAA,SAAiBC,GACbb,EAAmB,kBAAMa,GAAY,EAAE,CAC3C,EAACL,EAKKM,eAAMC,EAAMC,YAAAA,IAAAA,EAAU,eAAIC,QAAAC,QACLC,EAAMC,KAAKJ,EAAQK,iBAAmBL,EAAQK,iBAAmB,4BAA2BC,GAC/GC,OAAUP,EAAQO,QAAU,GAC5BC,aAAgBR,EAAQS,aAAeV,EAAKW,KAC5CC,QAAWX,EAAQW,SAAW,GAC9BC,WAAcZ,EAAQY,YAAc,IACjCZ,EAAQa,MAAIP,GAEfQ,QAASd,EAAQc,SAAW,KAC5BC,QAASf,EAAQe,SAAW,IACzBf,EAAQA,WACbgB,cAVIC,GAYN,IAAIF,EAAUE,EAASJ,KAAKE,cAExB,SAAUA,UACHA,EAAQG,UAGa,IAArBlB,EAAQmB,WACfnB,EAAQmB,SAAW,cAGsBlB,QAAAC,QAEvCC,EAAMiB,IAAIH,EAASJ,KAAKhB,IAAKE,EAAM,CACrCsB,YAHgBrB,EAAQqB,aAAe,GAIvCN,QAASA,EACTO,iBAAkB,SAACC,GACfvB,EAAQmB,SAASI,EAAcC,OAASD,EAAcE,MAC1D,KACFT,gBAIF,OAFAC,EAASJ,KAAKa,UAAY3B,EAAK4B,KAAKC,MAAM,KAAKC,MAExCZ,EAASJ,IAAK,KACxB,MAAAzB,UAAAa,QAAA6B,OAAA1C,KAAAG,CAAA"} -------------------------------------------------------------------------------- /dist/laravel-vapor.js: -------------------------------------------------------------------------------- 1 | function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=e(require("axios"));function r(){return r=Object.assign||function(e){for(var t=1;t {\n try {\n return process.env.MIX_VAPOR_ASSET_URL\n ? process.env.MIX_VAPOR_ASSET_URL\n : '';\n } catch (e) {\n console.error('Unable to automatically resolve the asset URL. Use Vapor.withBaseAssetUrl() to specify it manually.')\n\n throw e\n }\n}\n\nclass Vapor\n{\n /**\n * Generate the S3 URL to an application asset.\n */\n asset(path) {\n return assetUrlResolver() + '/' + path;\n }\n\n /**\n * Set the base URL for assets.\n */\n withBaseAssetUrl(url) {\n assetUrlResolver = () => url ? url : ''\n }\n\n /**\n * Store a file in S3 and return its UUID, key, and other information.\n */\n async store(file, options = {}) {\n const response = await axios.post(options.signedStorageUrl ? options.signedStorageUrl : '/vapor/signed-storage-url', {\n 'bucket': options.bucket || '',\n 'content_type': options.contentType || file.type,\n 'expires': options.expires || '',\n 'visibility': options.visibility || '',\n ...options.data\n }, {\n baseURL: options.baseURL || null,\n headers: options.headers || {},\n ...options.options\n });\n\n let headers = response.data.headers;\n\n if ('Host' in headers) {\n delete headers.Host;\n }\n\n if (typeof options.progress === 'undefined') {\n options.progress = () => {};\n }\n\n const cancelToken = options.cancelToken || ''\n\n await axios.put(response.data.url, file, {\n cancelToken: cancelToken,\n headers: headers,\n onUploadProgress: (progressEvent) => {\n options.progress(progressEvent.loaded / progressEvent.total);\n }\n })\n\n response.data.extension = file.name.split('.').pop()\n\n return response.data;\n }\n}\n\nexport default new Vapor();\n"],"names":["assetUrlResolver","process","env","MIX_VAPOR_ASSET_URL","e","console","error","Vapor","_proto","prototype","asset","path","withBaseAssetUrl","url","store","file","options","Promise","resolve","axios","post","signedStorageUrl","_extends","bucket","content_type","contentType","type","expires","visibility","data","baseURL","headers","then","response","Host","progress","put","cancelToken","onUploadProgress","progressEvent","loaded","total","extension","name","split","pop","reject"],"mappings":"kTAEA,IAAIA,EAAmB,WACnB,IACI,OAAOC,QAAQC,IAAIC,oBACbF,QAAQC,IAAIC,oBACZ,EAKV,CAJE,MAAOC,GAGL,MAFAC,QAAQC,MAAM,uGAERF,CACV,CACJ,4BAEWG,SAAAC,EAAAD,EAAAE,iBAAAD,EAKPE,MAAA,SAAMC,GACF,OAAOX,IAAqB,IAAMW,CACtC,EAACH,EAKDI,iBAAA,SAAiBC,GACbb,EAAmB,kBAAMa,GAAY,EAAE,CAC3C,EAACL,EAKKM,eAAMC,EAAMC,YAAAA,IAAAA,EAAU,eAAIC,QAAAC,QACLC,UAAMC,KAAKJ,EAAQK,iBAAmBL,EAAQK,iBAAmB,4BAA2BC,GAC/GC,OAAUP,EAAQO,QAAU,GAC5BC,aAAgBR,EAAQS,aAAeV,EAAKW,KAC5CC,QAAWX,EAAQW,SAAW,GAC9BC,WAAcZ,EAAQY,YAAc,IACjCZ,EAAQa,MAAIP,GAEfQ,QAASd,EAAQc,SAAW,KAC5BC,QAASf,EAAQe,SAAW,IACzBf,EAAQA,WACbgB,cAVIC,GAYN,IAAIF,EAAUE,EAASJ,KAAKE,cAExB,SAAUA,UACHA,EAAQG,UAGa,IAArBlB,EAAQmB,WACfnB,EAAQmB,SAAW,cAGsBlB,QAAAC,QAEvCC,UAAMiB,IAAIH,EAASJ,KAAKhB,IAAKE,EAAM,CACrCsB,YAHgBrB,EAAQqB,aAAe,GAIvCN,QAASA,EACTO,iBAAkB,SAACC,GACfvB,EAAQmB,SAASI,EAAcC,OAASD,EAAcE,MAC1D,KACFT,gBAIF,OAFAC,EAASJ,KAAKa,UAAY3B,EAAK4B,KAAKC,MAAM,KAAKC,MAExCZ,EAASJ,IAAK,KACxB,MAAAzB,UAAAa,QAAA6B,OAAA1C,KAAAG,CAAA"} -------------------------------------------------------------------------------- /dist/laravel-vapor.modern.js: -------------------------------------------------------------------------------- 1 | import e from"axios";function t(){return t=Object.assign||function(e){for(var t=1;t{try{return process.env.MIX_VAPOR_ASSET_URL?process.env.MIX_VAPOR_ASSET_URL:""}catch(e){throw console.error("Unable to automatically resolve the asset URL. Use Vapor.withBaseAssetUrl() to specify it manually."),e}};var r=new class{asset(e){return s()+"/"+e}withBaseAssetUrl(e){s=()=>e||""}async store(s,r={}){const a=await e.post(r.signedStorageUrl?r.signedStorageUrl:"/vapor/signed-storage-url",t({bucket:r.bucket||"",content_type:r.contentType||s.type,expires:r.expires||"",visibility:r.visibility||""},r.data),t({baseURL:r.baseURL||null,headers:r.headers||{}},r.options));let o=a.data.headers;"Host"in o&&delete o.Host,void 0===r.progress&&(r.progress=()=>{});const n=r.cancelToken||"";return await e.put(a.data.url,s,{cancelToken:n,headers:o,onUploadProgress:e=>{r.progress(e.loaded/e.total)}}),a.data.extension=s.name.split(".").pop(),a.data}};export default r; 2 | //# sourceMappingURL=laravel-vapor.modern.js.map 3 | -------------------------------------------------------------------------------- /dist/laravel-vapor.modern.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"laravel-vapor.modern.js","sources":["../src/index.js"],"sourcesContent":["import axios from 'axios'\n\nlet assetUrlResolver = () => {\n try {\n return process.env.MIX_VAPOR_ASSET_URL\n ? process.env.MIX_VAPOR_ASSET_URL\n : '';\n } catch (e) {\n console.error('Unable to automatically resolve the asset URL. Use Vapor.withBaseAssetUrl() to specify it manually.')\n\n throw e\n }\n}\n\nclass Vapor\n{\n /**\n * Generate the S3 URL to an application asset.\n */\n asset(path) {\n return assetUrlResolver() + '/' + path;\n }\n\n /**\n * Set the base URL for assets.\n */\n withBaseAssetUrl(url) {\n assetUrlResolver = () => url ? url : ''\n }\n\n /**\n * Store a file in S3 and return its UUID, key, and other information.\n */\n async store(file, options = {}) {\n const response = await axios.post(options.signedStorageUrl ? options.signedStorageUrl : '/vapor/signed-storage-url', {\n 'bucket': options.bucket || '',\n 'content_type': options.contentType || file.type,\n 'expires': options.expires || '',\n 'visibility': options.visibility || '',\n ...options.data\n }, {\n baseURL: options.baseURL || null,\n headers: options.headers || {},\n ...options.options\n });\n\n let headers = response.data.headers;\n\n if ('Host' in headers) {\n delete headers.Host;\n }\n\n if (typeof options.progress === 'undefined') {\n options.progress = () => {};\n }\n\n const cancelToken = options.cancelToken || ''\n\n await axios.put(response.data.url, file, {\n cancelToken: cancelToken,\n headers: headers,\n onUploadProgress: (progressEvent) => {\n options.progress(progressEvent.loaded / progressEvent.total);\n }\n })\n\n response.data.extension = file.name.split('.').pop()\n\n return response.data;\n }\n}\n\nexport default new Vapor();\n"],"names":["assetUrlResolver","process","env","MIX_VAPOR_ASSET_URL","e","console","error","asset","path","withBaseAssetUrl","url","async","file","options","response","axios","post","signedStorageUrl","_extends","bucket","content_type","contentType","type","expires","visibility","data","baseURL","headers","Host","progress","cancelToken","put","onUploadProgress","progressEvent","loaded","total","extension","name","split","pop"],"mappings":"qOAEA,IAAIA,EAAmBA,KACnB,IACI,OAAOC,QAAQC,IAAIC,oBACbF,QAAQC,IAAIC,oBACZ,EAKV,CAJE,MAAOC,GAGL,MAFAC,QAAQC,MAAM,uGAERF,CACV,GA6DJ,UA1DA,MAKIG,MAAMC,GACF,OAAOR,IAAqB,IAAMQ,CACtC,CAKAC,iBAAiBC,GACbV,EAAmBA,IAAMU,GAAY,EACzC,CAKAC,YAAYC,EAAMC,EAAU,IACxB,MAAMC,QAAiBC,EAAMC,KAAKH,EAAQI,iBAAmBJ,EAAQI,iBAAmB,4BAA2BC,GAC/GC,OAAUN,EAAQM,QAAU,GAC5BC,aAAgBP,EAAQQ,aAAeT,EAAKU,KAC5CC,QAAWV,EAAQU,SAAW,GAC9BC,WAAcX,EAAQW,YAAc,IACjCX,EAAQY,MAAIP,GAEfQ,QAASb,EAAQa,SAAW,KAC5BC,QAASd,EAAQc,SAAW,IACzBd,EAAQA,UAGf,IAAIc,EAAUb,EAASW,KAAKE,QAExB,SAAUA,UACHA,EAAQC,UAGa,IAArBf,EAAQgB,WACfhB,EAAQgB,SAAW,QAGvB,MAAMC,EAAcjB,EAAQiB,aAAe,GAY3C,aAVMf,EAAMgB,IAAIjB,EAASW,KAAKf,IAAKE,EAAM,CACrCkB,YAAaA,EACbH,QAASA,EACTK,iBAAmBC,IACfpB,EAAQgB,SAASI,EAAcC,OAASD,EAAcE,UAI9DrB,EAASW,KAAKW,UAAYxB,EAAKyB,KAAKC,MAAM,KAAKC,MAExCzB,EAASW,IACpB"} -------------------------------------------------------------------------------- /dist/laravel-vapor.umd.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("axios")):"function"==typeof define&&define.amd?define(["axios"],t):(e||self).laravelVapor=t(e.axios)}(this,function(e){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e);function r(){return r=Object.assign||function(e){for(var t=1;t {\n try {\n return process.env.MIX_VAPOR_ASSET_URL\n ? process.env.MIX_VAPOR_ASSET_URL\n : '';\n } catch (e) {\n console.error('Unable to automatically resolve the asset URL. Use Vapor.withBaseAssetUrl() to specify it manually.')\n\n throw e\n }\n}\n\nclass Vapor\n{\n /**\n * Generate the S3 URL to an application asset.\n */\n asset(path) {\n return assetUrlResolver() + '/' + path;\n }\n\n /**\n * Set the base URL for assets.\n */\n withBaseAssetUrl(url) {\n assetUrlResolver = () => url ? url : ''\n }\n\n /**\n * Store a file in S3 and return its UUID, key, and other information.\n */\n async store(file, options = {}) {\n const response = await axios.post(options.signedStorageUrl ? options.signedStorageUrl : '/vapor/signed-storage-url', {\n 'bucket': options.bucket || '',\n 'content_type': options.contentType || file.type,\n 'expires': options.expires || '',\n 'visibility': options.visibility || '',\n ...options.data\n }, {\n baseURL: options.baseURL || null,\n headers: options.headers || {},\n ...options.options\n });\n\n let headers = response.data.headers;\n\n if ('Host' in headers) {\n delete headers.Host;\n }\n\n if (typeof options.progress === 'undefined') {\n options.progress = () => {};\n }\n\n const cancelToken = options.cancelToken || ''\n\n await axios.put(response.data.url, file, {\n cancelToken: cancelToken,\n headers: headers,\n onUploadProgress: (progressEvent) => {\n options.progress(progressEvent.loaded / progressEvent.total);\n }\n })\n\n response.data.extension = file.name.split('.').pop()\n\n return response.data;\n }\n}\n\nexport default new Vapor();\n"],"names":["assetUrlResolver","process","env","MIX_VAPOR_ASSET_URL","e","console","error","Vapor","_proto","prototype","asset","path","withBaseAssetUrl","url","store","file","options","Promise","resolve","axios","post","signedStorageUrl","_extends","bucket","content_type","contentType","type","expires","visibility","data","baseURL","headers","then","response","Host","progress","put","cancelToken","onUploadProgress","progressEvent","loaded","total","extension","name","split","pop","reject"],"mappings":"oiBAEA,IAAIA,EAAmB,WACnB,IACI,OAAOC,QAAQC,IAAIC,oBACbF,QAAQC,IAAIC,oBACZ,EAKV,CAJE,MAAOC,GAGL,MAFAC,QAAQC,MAAM,uGAERF,CACV,CACJ,iCAEWG,SAAAC,EAAAD,EAAAE,iBAAAD,EAKPE,MAAA,SAAMC,GACF,OAAOX,IAAqB,IAAMW,CACtC,EAACH,EAKDI,iBAAA,SAAiBC,GACbb,EAAmB,kBAAMa,GAAY,EAAE,CAC3C,EAACL,EAKKM,eAAMC,EAAMC,YAAAA,IAAAA,EAAU,eAAIC,QAAAC,QACLC,UAAMC,KAAKJ,EAAQK,iBAAmBL,EAAQK,iBAAmB,4BAA2BC,GAC/GC,OAAUP,EAAQO,QAAU,GAC5BC,aAAgBR,EAAQS,aAAeV,EAAKW,KAC5CC,QAAWX,EAAQW,SAAW,GAC9BC,WAAcZ,EAAQY,YAAc,IACjCZ,EAAQa,MAAIP,GAEfQ,QAASd,EAAQc,SAAW,KAC5BC,QAASf,EAAQe,SAAW,IACzBf,EAAQA,WACbgB,cAVIC,GAYN,IAAIF,EAAUE,EAASJ,KAAKE,cAExB,SAAUA,UACHA,EAAQG,UAGa,IAArBlB,EAAQmB,WACfnB,EAAQmB,SAAW,cAGsBlB,QAAAC,QAEvCC,UAAMiB,IAAIH,EAASJ,KAAKhB,IAAKE,EAAM,CACrCsB,YAHgBrB,EAAQqB,aAAe,GAIvCN,QAASA,EACTO,iBAAkB,SAACC,GACfvB,EAAQmB,SAASI,EAAcC,OAASD,EAAcE,MAC1D,KACFT,gBAIF,OAFAC,EAASJ,KAAKa,UAAY3B,EAAK4B,KAAKC,MAAM,KAAKC,MAExCZ,EAASJ,IAAK,KACxB,MAAAzB,UAAAa,QAAA6B,OAAA1C,KAAAG,CAAA"} -------------------------------------------------------------------------------- /mix.js: -------------------------------------------------------------------------------- 1 | let mix = require('laravel-mix'); 2 | 3 | class VaporMixPlugin { 4 | boot() { 5 | Config.postCss.push(function (css) { 6 | css.walkDecls(decl => { 7 | decl.value = decl.value.replace(/\{\{\sASSET_URL\s\}\}/g, process.env.ASSET_URL || '') 8 | }) 9 | }); 10 | } 11 | } 12 | 13 | mix.extend('vapor', new VaporMixPlugin()); 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel-vapor", 3 | "version": "0.7.1", 4 | "description": "JavaScript utilities for Laravel Vapor", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/laravel/vapor-js" 8 | }, 9 | "keywords": [ 10 | "laravel", 11 | "vapor" 12 | ], 13 | "author": { 14 | "name": "Taylor Otwell" 15 | }, 16 | "homepage": "https://github.com/laravel/vapor-js", 17 | "main": "dist/laravel-vapor.js", 18 | "scripts": { 19 | "build": "microbundle", 20 | "dev": "microbundle watch" 21 | }, 22 | "dependencies": { 23 | "axios": "^1.6.0" 24 | }, 25 | "devDependencies": { 26 | "microbundle": "^0.13.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | let assetUrlResolver = () => { 4 | try { 5 | return process.env.MIX_VAPOR_ASSET_URL 6 | ? process.env.MIX_VAPOR_ASSET_URL 7 | : ''; 8 | } catch (e) { 9 | console.error('Unable to automatically resolve the asset URL. Use Vapor.withBaseAssetUrl() to specify it manually.') 10 | 11 | throw e 12 | } 13 | } 14 | 15 | class Vapor 16 | { 17 | /** 18 | * Generate the S3 URL to an application asset. 19 | */ 20 | asset(path) { 21 | return assetUrlResolver() + '/' + path; 22 | } 23 | 24 | /** 25 | * Set the base URL for assets. 26 | */ 27 | withBaseAssetUrl(url) { 28 | assetUrlResolver = () => url ? url : '' 29 | } 30 | 31 | /** 32 | * Store a file in S3 and return its UUID, key, and other information. 33 | */ 34 | async store(file, options = {}) { 35 | const httpClient = options.httpClient ? options.httpClient : axios; 36 | 37 | const response = await httpClient.post(options.signedStorageUrl ? options.signedStorageUrl : '/vapor/signed-storage-url', { 38 | 'bucket': options.bucket || '', 39 | 'content_type': options.contentType || file.type, 40 | 'expires': options.expires || '', 41 | 'visibility': options.visibility || '', 42 | ...options.data 43 | }, { 44 | baseURL: options.baseURL || null, 45 | headers: options.headers || {}, 46 | ...options.options 47 | }); 48 | 49 | let headers = response.data.headers; 50 | 51 | if ('Host' in headers) { 52 | delete headers.Host; 53 | } 54 | 55 | if (typeof options.progress === 'undefined') { 56 | options.progress = () => {}; 57 | } 58 | 59 | const cancelToken = options.cancelToken || '' 60 | 61 | await httpClient.put(response.data.url, file, { 62 | cancelToken: cancelToken, 63 | headers: headers, 64 | onUploadProgress: (progressEvent) => { 65 | options.progress(progressEvent.loaded / progressEvent.total); 66 | } 67 | }) 68 | 69 | response.data.extension = file.name.split('.').pop() 70 | 71 | return response.data; 72 | } 73 | } 74 | 75 | export default new Vapor(); 76 | --------------------------------------------------------------------------------