UNPKG

14.3 kBSource Map (JSON)View Raw
1{"version":3,"sources":["Assembly.js"],"names":["io","requireSocketIo","Emitter","require","has","parseUrl","NetworkError","fetchWithNetworkError","socketIo","ASSEMBLY_UPLOADING","ASSEMBLY_EXECUTING","ASSEMBLY_COMPLETED","statusOrder","isStatus","status","test","indexOf","TransloaditAssembly","assembly","socket","pollInterval","closed","connect","_connectSocket","_beginPolling","_onFinished","emit","close","parsed","websocket_url","origin","transports","path","pathname","on","id","assembly_id","_onError","disconnect","file","uploads","push","_fetchStatus","diff","stepName","result","results","err","Error","message","setInterval","connected","assembly_ssl_url","then","response","json","updateStatus","catch","update","next","_diffStatus","prev","prevStatus","ok","nextStatus","error","nowExecuting","Object","keys","filter","upload","map","forEach","nextResults","prevResults","n","some","p","clearInterval","module","exports"],"mappings":";;;;AAAA,IAAMA,EAAE,GAAGC,eAAX;;AACA,IAAMC,OAAO,GAAGC,OAAO,CAAC,mBAAD,CAAvB;;AACA,IAAMC,GAAG,GAAGD,OAAO,CAAC,6BAAD,CAAnB;;AACA,IAAME,QAAQ,GAAGF,OAAO,CAAC,YAAD,CAAxB;;AACA,IAAMG,YAAY,GAAGH,OAAO,CAAC,8BAAD,CAA5B;;AACA,IAAMI,qBAAqB,GAAGJ,OAAO,CAAC,uCAAD,CAArC,C,CAEA;AACA;AACA;AACA;AACA;;;AACA,IAAIK,QAAJ;;AACA,SAASP,eAAT,GAA4B;AAC1B,MAAI,CAACO,QAAL,EAAe;AACbA,IAAAA,QAAQ,GAAGL,OAAO,CAAC,kBAAD,CAAlB;AACD;;AACD,SAAOK,QAAP;AACD;;AAED,IAAMC,kBAAkB,GAAG,oBAA3B;AACA,IAAMC,kBAAkB,GAAG,oBAA3B;AACA,IAAMC,kBAAkB,GAAG,oBAA3B;AAEA,IAAMC,WAAW,GAAG,CAClBH,kBADkB,EAElBC,kBAFkB,EAGlBC,kBAHkB,CAApB;AAMA;;;;;;;;;;;AAUA,SAASE,QAAT,CAAmBC,MAAnB,EAA2BC,IAA3B,EAAiC;AAC/B,SAAOH,WAAW,CAACI,OAAZ,CAAoBF,MAApB,KAA+BF,WAAW,CAACI,OAAZ,CAAoBD,IAApB,CAAtC;AACD;;IAEKE,mB;;;AACJ,+BAAaC,QAAb,EAAuB;AAAA;;AACrB,wCADqB,CAGrB;;AACA,UAAKJ,MAAL,GAAcI,QAAd,CAJqB,CAKrB;;AACA,UAAKC,MAAL,GAAc,IAAd,CANqB,CAOrB;;AACA,UAAKC,YAAL,GAAoB,IAApB,CARqB,CASrB;;AACA,UAAKC,MAAL,GAAc,KAAd;AAVqB;AAWtB;;;;SAEDC,O,GAAA,mBAAW;AACT,SAAKC,cAAL;;AACA,SAAKC,aAAL;AACD,G;;SAEDC,W,GAAA,uBAAe;AACb,SAAKC,IAAL,CAAU,UAAV;AACA,SAAKC,KAAL;AACD,G;;SAEDJ,c,GAAA,0BAAkB;AAAA;;AAChB,QAAMK,MAAM,GAAGvB,QAAQ,CAAC,KAAKS,MAAL,CAAYe,aAAb,CAAvB;AACA,QAAMV,MAAM,GAAGnB,EAAE,GAAGsB,OAAL,CAAaM,MAAM,CAACE,MAApB,EAA4B;AACzCC,MAAAA,UAAU,EAAE,CAAC,WAAD,CAD6B;AAEzCC,MAAAA,IAAI,EAAEJ,MAAM,CAACK;AAF4B,KAA5B,CAAf;AAKAd,IAAAA,MAAM,CAACe,EAAP,CAAU,SAAV,EAAqB,YAAM;AACzBf,MAAAA,MAAM,CAACO,IAAP,CAAY,kBAAZ,EAAgC;AAC9BS,QAAAA,EAAE,EAAE,MAAI,CAACrB,MAAL,CAAYsB;AADc,OAAhC;;AAIA,MAAA,MAAI,CAACV,IAAL,CAAU,SAAV;AACD,KAND;AAQAP,IAAAA,MAAM,CAACe,EAAP,CAAU,gBAAV,EAA4B,YAAM;AAChC,MAAA,MAAI,CAACG,QAAL,CAAc,IAAI/B,YAAJ,CAAiB,wCAAjB,CAAd;;AACA,MAAA,MAAI,CAACa,MAAL,GAAc,IAAd;AACD,KAHD;AAKAA,IAAAA,MAAM,CAACe,EAAP,CAAU,OAAV,EAAmB,YAAM;AACvBf,MAAAA,MAAM,CAACmB,UAAP;AACA,MAAA,MAAI,CAACnB,MAAL,GAAc,IAAd;AACD,KAHD;AAKAA,IAAAA,MAAM,CAACe,EAAP,CAAU,mBAAV,EAA+B,YAAM;AACnC,MAAA,MAAI,CAACT,WAAL;AACD,KAFD;AAIAN,IAAAA,MAAM,CAACe,EAAP,CAAU,0BAAV,EAAsC,UAACK,IAAD,EAAU;AAC9C,MAAA,MAAI,CAACb,IAAL,CAAU,QAAV,EAAoBa,IAApB;;AACA,MAAA,MAAI,CAACzB,MAAL,CAAY0B,OAAZ,CAAoBC,IAApB,CAAyBF,IAAzB;AACD,KAHD;AAKApB,IAAAA,MAAM,CAACe,EAAP,CAAU,6BAAV,EAAyC,YAAM;AAC7C,MAAA,MAAI,CAACR,IAAL,CAAU,WAAV;AACD,KAFD;AAIAP,IAAAA,MAAM,CAACe,EAAP,CAAU,qCAAV,EAAiD,YAAM;AACrD,MAAA,MAAI,CAACR,IAAL,CAAU,UAAV;;AACA,MAAA,MAAI,CAACgB,YAAL,CAAkB;AAAEC,QAAAA,IAAI,EAAE;AAAR,OAAlB;AACD,KAHD;AAKAxB,IAAAA,MAAM,CAACe,EAAP,CAAU,0BAAV,EAAsC,UAACU,QAAD,EAAWC,MAAX,EAAsB;AAC1D,MAAA,MAAI,CAACnB,IAAL,CAAU,QAAV,EAAoBkB,QAApB,EAA8BC,MAA9B;;AACA,UAAI,CAAC,MAAI,CAAC/B,MAAL,CAAYgC,OAAZ,CAAoBF,QAApB,CAAL,EAAoC;AAClC,QAAA,MAAI,CAAC9B,MAAL,CAAYgC,OAAZ,CAAoBF,QAApB,IAAgC,EAAhC;AACD;;AACD,MAAA,MAAI,CAAC9B,MAAL,CAAYgC,OAAZ,CAAoBF,QAApB,EAA8BH,IAA9B,CAAmCI,MAAnC;AACD,KAND;AAQA1B,IAAAA,MAAM,CAACe,EAAP,CAAU,gBAAV,EAA4B,UAACa,GAAD,EAAS;AACnC,MAAA,MAAI,CAACV,QAAL,CAAcU,GAAd,EADmC,CAEnC;;;AACA,MAAA,MAAI,CAACL,YAAL,CAAkB;AAAEC,QAAAA,IAAI,EAAE;AAAR,OAAlB;AACD,KAJD;AAMA,SAAKxB,MAAL,GAAcA,MAAd;AACD,G;;SAEDkB,Q,GAAA,kBAAUU,GAAV,EAAe;AACb,SAAKrB,IAAL,CAAU,OAAV,EAAmB,SAAc,IAAIsB,KAAJ,CAAUD,GAAG,CAACE,OAAd,CAAd,EAAsCF,GAAtC,CAAnB;AACD;AAED;;;;;;;;SAMAvB,a,GAAA,yBAAiB;AAAA;;AACf,SAAKJ,YAAL,GAAoB8B,WAAW,CAAC,YAAM;AACpC,UAAI,CAAC,MAAI,CAAC/B,MAAN,IAAgB,CAAC,MAAI,CAACA,MAAL,CAAYgC,SAAjC,EAA4C;AAC1C,QAAA,MAAI,CAACT,YAAL;AACD;AACF,KAJ8B,EAI5B,IAJ4B,CAA/B;AAKD;AAED;;;;;;;;SAMAA,Y,GAAA,6BAAoC;AAAA;;AAAA,kCAAJ,EAAI;AAAA,yBAApBC,IAAoB;AAAA,QAApBA,IAAoB,0BAAb,IAAa;;AAClC,WAAOpC,qBAAqB,CAAC,KAAKO,MAAL,CAAYsC,gBAAb,CAArB,CACJC,IADI,CACC,UAACC,QAAD;AAAA,aAAcA,QAAQ,CAACC,IAAT,EAAd;AAAA,KADD,EAEJF,IAFI,CAEC,UAACvC,MAAD,EAAY;AAChB;AACA,UAAI,MAAI,CAACO,MAAT,EAAiB;;AACjB,MAAA,MAAI,CAACK,IAAL,CAAU,QAAV,EAAoBZ,MAApB;;AAEA,UAAI6B,IAAJ,EAAU;AACR,QAAA,MAAI,CAACa,YAAL,CAAkB1C,MAAlB;AACD,OAFD,MAEO;AACL,QAAA,MAAI,CAACA,MAAL,GAAcA,MAAd;AACD;AACF,KAZI,EAaJ2C,KAbI,CAaE,UAACV,GAAD;AAAA,aAAS,MAAI,CAACV,QAAL,CAAcU,GAAd,CAAT;AAAA,KAbF,CAAP;AAcD,G;;SAEDW,M,GAAA,kBAAU;AACR,WAAO,KAAKhB,YAAL,CAAkB;AAAEC,MAAAA,IAAI,EAAE;AAAR,KAAlB,CAAP;AACD;AAED;;;;;;;;SAMAa,Y,GAAA,sBAAcG,IAAd,EAAoB;AAClB,SAAKC,WAAL,CAAiB,KAAK9C,MAAtB,EAA8B6C,IAA9B;;AACA,SAAK7C,MAAL,GAAc6C,IAAd;AACD;AAED;;;;;;;;;SAOAC,W,GAAA,qBAAaC,IAAb,EAAmBF,IAAnB,EAAyB;AAAA;;AACvB,QAAMG,UAAU,GAAGD,IAAI,CAACE,EAAxB;AACA,QAAMC,UAAU,GAAGL,IAAI,CAACI,EAAxB;;AAEA,QAAIJ,IAAI,CAACM,KAAL,IAAc,CAACJ,IAAI,CAACI,KAAxB,EAA+B;AAC7B,aAAO,KAAK5B,QAAL,CAAcsB,IAAd,CAAP;AACD,KANsB,CAQvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,QAAMO,YAAY,GAChBrD,QAAQ,CAACmD,UAAD,EAAatD,kBAAb,CAAR,IACA,CAACG,QAAQ,CAACiD,UAAD,EAAapD,kBAAb,CAFX;;AAGA,QAAIwD,YAAJ,EAAkB;AAChB;AACA;AACA;AACA;AACA,WAAKxC,IAAL,CAAU,WAAV;AACD,KA1BsB,CA4BvB;;;AACAyC,IAAAA,MAAM,CAACC,IAAP,CAAYT,IAAI,CAACnB,OAAjB,EACG6B,MADH,CACU,UAACC,MAAD;AAAA,aAAY,CAAClE,GAAG,CAACyD,IAAI,CAACrB,OAAN,EAAe8B,MAAf,CAAhB;AAAA,KADV,EAEGC,GAFH,CAEO,UAACD,MAAD;AAAA,aAAYX,IAAI,CAACnB,OAAL,CAAa8B,MAAb,CAAZ;AAAA,KAFP,EAGGE,OAHH,CAGW,UAACF,MAAD,EAAY;AACnB,MAAA,MAAI,CAAC5C,IAAL,CAAU,QAAV,EAAoB4C,MAApB;AACD,KALH;;AAOA,QAAIJ,YAAJ,EAAkB;AAChB,WAAKxC,IAAL,CAAU,UAAV;AACD,KAtCsB,CAwCvB;;;AACAyC,IAAAA,MAAM,CAACC,IAAP,CAAYT,IAAI,CAACb,OAAjB,EAA0B0B,OAA1B,CAAkC,UAAC5B,QAAD,EAAc;AAC9C,UAAM6B,WAAW,GAAGd,IAAI,CAACb,OAAL,CAAaF,QAAb,CAApB;AACA,UAAM8B,WAAW,GAAGb,IAAI,CAACf,OAAL,CAAaF,QAAb,CAApB;AAEA6B,MAAAA,WAAW,CACRJ,MADH,CACU,UAACM,CAAD;AAAA,eAAO,CAACD,WAAD,IAAgB,CAACA,WAAW,CAACE,IAAZ,CAAiB,UAACC,CAAD;AAAA,iBAAOA,CAAC,CAAC1C,EAAF,KAASwC,CAAC,CAACxC,EAAlB;AAAA,SAAjB,CAAxB;AAAA,OADV,EAEGqC,OAFH,CAEW,UAAC3B,MAAD,EAAY;AACnB,QAAA,MAAI,CAACnB,IAAL,CAAU,QAAV,EAAoBkB,QAApB,EAA8BC,MAA9B;AACD,OAJH;AAKD,KATD;;AAWA,QAAIhC,QAAQ,CAACmD,UAAD,EAAarD,kBAAb,CAAR,IACA,CAACE,QAAQ,CAACiD,UAAD,EAAanD,kBAAb,CADb,EAC+C;AAC7C,WAAKe,IAAL,CAAU,UAAV;AACD;AACF;AAED;;;;;SAGAC,K,GAAA,iBAAS;AACP,SAAKN,MAAL,GAAc,IAAd;;AACA,QAAI,KAAKF,MAAT,EAAiB;AACf,WAAKA,MAAL,CAAYmB,UAAZ;AACA,WAAKnB,MAAL,GAAc,IAAd;AACD;;AACD2D,IAAAA,aAAa,CAAC,KAAK1D,YAAN,CAAb;AACD,G;;;EAvN+BlB,O;;AA0NlC6E,MAAM,CAACC,OAAP,GAAiB/D,mBAAjB","sourcesContent":["const io = requireSocketIo\nconst Emitter = require('component-emitter')\nconst has = require('@uppy/utils/lib/hasProperty')\nconst parseUrl = require('./parseUrl')\nconst NetworkError = require('@uppy/utils/lib/NetworkError')\nconst fetchWithNetworkError = require('@uppy/utils/lib/fetchWithNetworkError')\n\n// Lazy load socket.io to avoid a console error\n// in IE 10 when the Transloadit plugin is not used.\n// (The console.error call comes from `buffer`. I\n// think we actually don't use that part of socket.io\n// at all…)\nlet socketIo\nfunction requireSocketIo () {\n if (!socketIo) {\n socketIo = require('socket.io-client')\n }\n return socketIo\n}\n\nconst ASSEMBLY_UPLOADING = 'ASSEMBLY_UPLOADING'\nconst ASSEMBLY_EXECUTING = 'ASSEMBLY_EXECUTING'\nconst ASSEMBLY_COMPLETED = 'ASSEMBLY_COMPLETED'\n\nconst statusOrder = [\n ASSEMBLY_UPLOADING,\n ASSEMBLY_EXECUTING,\n ASSEMBLY_COMPLETED\n]\n\n/**\n * Check that an assembly status is equal to or larger than some desired status.\n * It checks for things that are larger so that a comparison like this works,\n * when the old assembly status is UPLOADING but the new is FINISHED:\n *\n * !isStatus(oldStatus, ASSEMBLY_EXECUTING) && isStatus(newState, ASSEMBLY_EXECUTING)\n *\n * …so that we can emit the 'executing' event even if the execution step was so\n * fast that we missed it.\n */\nfunction isStatus (status, test) {\n return statusOrder.indexOf(status) >= statusOrder.indexOf(test)\n}\n\nclass TransloaditAssembly extends Emitter {\n constructor (assembly) {\n super()\n\n // The current assembly status.\n this.status = assembly\n // The socket.io connection.\n this.socket = null\n // The interval timer for full status updates.\n this.pollInterval = null\n // Whether this assembly has been closed (finished or errored)\n this.closed = false\n }\n\n connect () {\n this._connectSocket()\n this._beginPolling()\n }\n\n _onFinished () {\n this.emit('finished')\n this.close()\n }\n\n _connectSocket () {\n const parsed = parseUrl(this.status.websocket_url)\n const socket = io().connect(parsed.origin, {\n transports: ['websocket'],\n path: parsed.pathname\n })\n\n socket.on('connect', () => {\n socket.emit('assembly_connect', {\n id: this.status.assembly_id\n })\n\n this.emit('connect')\n })\n\n socket.on('connect_failed', () => {\n this._onError(new NetworkError('Transloadit Socket.io connection error'))\n this.socket = null\n })\n\n socket.on('error', () => {\n socket.disconnect()\n this.socket = null\n })\n\n socket.on('assembly_finished', () => {\n this._onFinished()\n })\n\n socket.on('assembly_upload_finished', (file) => {\n this.emit('upload', file)\n this.status.uploads.push(file)\n })\n\n socket.on('assembly_uploading_finished', () => {\n this.emit('executing')\n })\n\n socket.on('assembly_upload_meta_data_extracted', () => {\n this.emit('metadata')\n this._fetchStatus({ diff: false })\n })\n\n socket.on('assembly_result_finished', (stepName, result) => {\n this.emit('result', stepName, result)\n if (!this.status.results[stepName]) {\n this.status.results[stepName] = []\n }\n this.status.results[stepName].push(result)\n })\n\n socket.on('assembly_error', (err) => {\n this._onError(err)\n // Refetch for updated status code\n this._fetchStatus({ diff: false })\n })\n\n this.socket = socket\n }\n\n _onError (err) {\n this.emit('error', Object.assign(new Error(err.message), err))\n }\n\n /**\n * Begin polling for assembly status changes. This sends a request to the\n * assembly status endpoint every so often, if the socket is not connected.\n * If the socket connection fails or takes a long time, we won't miss any\n * events.\n */\n _beginPolling () {\n this.pollInterval = setInterval(() => {\n if (!this.socket || !this.socket.connected) {\n this._fetchStatus()\n }\n }, 2000)\n }\n\n /**\n * Reload assembly status. Useful if the socket doesn't work.\n *\n * Pass `diff: false` to avoid emitting diff events, instead only emitting\n * 'status'.\n */\n _fetchStatus ({ diff = true } = {}) {\n return fetchWithNetworkError(this.status.assembly_ssl_url)\n .then((response) => response.json())\n .then((status) => {\n // Avoid updating if we closed during this request's lifetime.\n if (this.closed) return\n this.emit('status', status)\n\n if (diff) {\n this.updateStatus(status)\n } else {\n this.status = status\n }\n })\n .catch((err) => this._onError(err))\n }\n\n update () {\n return this._fetchStatus({ diff: true })\n }\n\n /**\n * Update this assembly's status with a full new object. Events will be\n * emitted for status changes, new files, and new results.\n *\n * @param {object} next The new assembly status object.\n */\n updateStatus (next) {\n this._diffStatus(this.status, next)\n this.status = next\n }\n\n /**\n * Diff two assembly statuses, and emit the events necessary to go from `prev`\n * to `next`.\n *\n * @param {object} prev The previous assembly status.\n * @param {object} next The new assembly status.\n */\n _diffStatus (prev, next) {\n const prevStatus = prev.ok\n const nextStatus = next.ok\n\n if (next.error && !prev.error) {\n return this._onError(next)\n }\n\n // Desired emit order:\n // - executing\n // - (n × upload)\n // - metadata\n // - (m × result)\n // - finished\n // The below checks run in this order, that way even if we jump from\n // UPLOADING straight to FINISHED all the events are emitted as expected.\n\n const nowExecuting =\n isStatus(nextStatus, ASSEMBLY_EXECUTING) &&\n !isStatus(prevStatus, ASSEMBLY_EXECUTING)\n if (nowExecuting) {\n // Without WebSockets, this is our only way to tell if uploading finished.\n // Hence, we emit this just before the 'upload's and before the 'metadata'\n // event for the most intuitive ordering, corresponding to the _usual_\n // ordering (if not guaranteed) that you'd get on the WebSocket.\n this.emit('executing')\n }\n\n // Find new uploaded files.\n Object.keys(next.uploads)\n .filter((upload) => !has(prev.uploads, upload))\n .map((upload) => next.uploads[upload])\n .forEach((upload) => {\n this.emit('upload', upload)\n })\n\n if (nowExecuting) {\n this.emit('metadata')\n }\n\n // Find new results.\n Object.keys(next.results).forEach((stepName) => {\n const nextResults = next.results[stepName]\n const prevResults = prev.results[stepName]\n\n nextResults\n .filter((n) => !prevResults || !prevResults.some((p) => p.id === n.id))\n .forEach((result) => {\n this.emit('result', stepName, result)\n })\n })\n\n if (isStatus(nextStatus, ASSEMBLY_COMPLETED) &&\n !isStatus(prevStatus, ASSEMBLY_COMPLETED)) {\n this.emit('finished')\n }\n }\n\n /**\n * Stop updating this assembly.\n */\n close () {\n this.closed = true\n if (this.socket) {\n this.socket.disconnect()\n this.socket = null\n }\n clearInterval(this.pollInterval)\n }\n}\n\nmodule.exports = TransloaditAssembly\n"]}
\No newline at end of file