@wordpress/api-fetch
Advanced tools
| /** | ||
| * Internal dependencies | ||
| */ | ||
| import mediaUploadMiddleware from '../media-upload'; | ||
| describe( 'Media Upload Middleware', () => { | ||
| it( 'should defer to the next middleware with the same options', () => { | ||
| expect.hasAssertions(); | ||
| const originalOptions = { path: '/wp/v2/media' }; | ||
| const next = ( options ) => { | ||
| expect( options ).toBe( originalOptions ); | ||
| }; | ||
| mediaUploadMiddleware( originalOptions, next ); | ||
| } ); | ||
| it( 'should change options not to parse', () => { | ||
| expect.hasAssertions(); | ||
| const requestOptions = { method: 'POST', path: '/wp/v2/media' }; | ||
| const next = ( options ) => { | ||
| expect( options.parse ).toBe( false ); | ||
| return Promise.resolve( { | ||
| status: 200, | ||
| json() { | ||
| return Promise.resolve( [ 'item' ] ); | ||
| }, | ||
| } ); | ||
| }; | ||
| mediaUploadMiddleware( requestOptions, next ); | ||
| } ); | ||
| } ); |
@@ -11,2 +11,12 @@ /** | ||
| /** | ||
| * @param {import('../types').APIFetchOptions} options | ||
| * @return {boolean} True if the request is for media upload. | ||
| */ | ||
| function isMediaUploadRequest(options) { | ||
| const isCreateMethod = !!options.method && options.method === 'POST'; | ||
| const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1; | ||
| return isMediaEndpoint && isCreateMethod; | ||
| } | ||
| /** | ||
| * Middleware handling media upload failures and retries. | ||
@@ -17,6 +27,5 @@ * | ||
| const mediaUploadMiddleware = (options, next) => { | ||
| const isMediaUploadRequest = options.path && options.path.indexOf('/wp/v2/media') !== -1 || options.url && options.url.indexOf('/wp/v2/media') !== -1; | ||
| if (!isMediaUploadRequest) { | ||
| if (!isMediaUploadRequest(options)) { | ||
| return next(options); | ||
@@ -23,0 +32,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["__","parseAndThrowError","parseResponseAndNormalizeError","mediaUploadMiddleware","options","next","isMediaUploadRequest","path","indexOf","url","retries","maxRetries","postProcess","attachmentId","method","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;;AACA,SACCC,kBADD,EAECC,8BAFD,QAGO,mBAHP;AAKA;AACA;AACA;AACA;AACA;;AACA,MAAMC,qBAAqB,GAAG,CAAEC,OAAF,EAAWC,IAAX,KAAqB;AAClD,QAAMC,oBAAoB,GACvBF,OAAO,CAACG,IAAR,IAAgBH,OAAO,CAACG,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAA9D,IACEJ,OAAO,CAACK,GAAR,IAAeL,OAAO,CAACK,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAF7D;;AAIA,MAAK,CAAEF,oBAAP,EAA8B;AAC7B,WAAOD,IAAI,CAAED,OAAF,CAAX;AACA;;AACD,MAAIM,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOL,IAAI,CAAE;AACZE,MAAAA,IAAI,EAAG,gBAAgBM,YAAc,eADzB;AAEZC,MAAAA,MAAM,EAAE,MAFI;AAGZC,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKR,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDR,MAAAA,IAAI,CAAE;AACLE,QAAAA,IAAI,EAAG,gBAAgBM,YAAc,aADhC;AAELC,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOK,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOf,IAAI,CAAE,EAAE,GAAGD,OAAL;AAAca,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMR,YAAY,GAAGQ,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAX,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BK,KAA5B,CAAmC,MAAM;AAC/C,YAAKd,OAAO,CAACa,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE1B,EAAE,CACV,+FADU;AAFW,WAAhB,CAAP;AAMA;;AAED,eAAOmB,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAOpB,kBAAkB,CAAEoB,QAAF,EAAYjB,OAAO,CAACa,KAApB,CAAzB;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACNnB,8BAA8B,CAAEmB,QAAF,EAAYjB,OAAO,CAACa,KAApB,CA1BzB,CAAP;AA4BA,CA/DD;;AAiEA,eAAed,qBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tconst isMediaUploadRequest =\n\t\t( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\tif ( ! isMediaUploadRequest ) {\n\t\treturn next( options );\n\t}\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]} | ||
| {"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["__","parseAndThrowError","parseResponseAndNormalizeError","isMediaUploadRequest","options","isCreateMethod","method","isMediaEndpoint","path","indexOf","url","mediaUploadMiddleware","next","retries","maxRetries","postProcess","attachmentId","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;;AACA,SACCC,kBADD,EAECC,8BAFD,QAGO,mBAHP;AAKA;AACA;AACA;AACA;;AACA,SAASC,oBAAT,CAA+BC,OAA/B,EAAyC;AACxC,QAAMC,cAAc,GAAG,CAAC,CAAED,OAAO,CAACE,MAAX,IAAqBF,OAAO,CAACE,MAAR,KAAmB,MAA/D;AACA,QAAMC,eAAe,GAClB,CAAC,CAAEH,OAAO,CAACI,IAAX,IAAmBJ,OAAO,CAACI,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAAjE,IACE,CAAC,CAAEL,OAAO,CAACM,GAAX,IAAkBN,OAAO,CAACM,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAFhE;AAIA,SAAOF,eAAe,IAAIF,cAA1B;AACA;AAED;AACA;AACA;AACA;AACA;;;AACA,MAAMM,qBAAqB,GAAG,CAAEP,OAAF,EAAWQ,IAAX,KAAqB;AAClD,MAAK,CAAET,oBAAoB,CAAEC,OAAF,CAA3B,EAAyC;AACxC,WAAOQ,IAAI,CAAER,OAAF,CAAX;AACA;;AAED,MAAIS,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOD,IAAI,CAAE;AACZJ,MAAAA,IAAI,EAAG,gBAAgBQ,YAAc,eADzB;AAEZV,MAAAA,MAAM,EAAE,MAFI;AAGZW,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKP,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDJ,MAAAA,IAAI,CAAE;AACLJ,QAAAA,IAAI,EAAG,gBAAgBQ,YAAc,aADhC;AAELV,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOe,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOV,IAAI,CAAE,EAAE,GAAGR,OAAL;AAAce,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMP,YAAY,GAAGO,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAV,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BI,KAA5B,CAAmC,MAAM;AAC/C,YAAKhB,OAAO,CAACe,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE5B,EAAE,CACV,+FADU;AAFW,WAAhB,CAAP;AAMA;;AAED,eAAOqB,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAOtB,kBAAkB,CAAEsB,QAAF,EAAYnB,OAAO,CAACe,KAApB,CAAzB;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACNrB,8BAA8B,CAAEqB,QAAF,EAAYnB,OAAO,CAACe,KAApB,CA1BzB,CAAP;AA4BA,CA5DD;;AA8DA,eAAeR,qBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * @param {import('../types').APIFetchOptions} options\n * @return {boolean} True if the request is for media upload.\n */\nfunction isMediaUploadRequest( options ) {\n\tconst isCreateMethod = !! options.method && options.method === 'POST';\n\tconst isMediaEndpoint =\n\t\t( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\treturn isMediaEndpoint && isCreateMethod;\n}\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tif ( ! isMediaUploadRequest( options ) ) {\n\t\treturn next( options );\n\t}\n\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"media-upload.d.ts","sourceRoot":"","sources":["../../src/middlewares/media-upload.js"],"names":[],"mappings":";AAaA;;;;GAIG;AACH,qCAFU,OAAO,UAAU,EAAE,kBAAkB,CAiE7C"} | ||
| {"version":3,"file":"media-upload.d.ts","sourceRoot":"","sources":["../../src/middlewares/media-upload.js"],"names":[],"mappings":";AA0BA;;;;GAIG;AACH,qCAFU,OAAO,UAAU,EAAE,kBAAkB,CA8D7C"} |
@@ -21,2 +21,11 @@ "use strict"; | ||
| /** | ||
| * @param {import('../types').APIFetchOptions} options | ||
| * @return {boolean} True if the request is for media upload. | ||
| */ | ||
| function isMediaUploadRequest(options) { | ||
| const isCreateMethod = !!options.method && options.method === 'POST'; | ||
| const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1; | ||
| return isMediaEndpoint && isCreateMethod; | ||
| } | ||
| /** | ||
| * Middleware handling media upload failures and retries. | ||
@@ -26,6 +35,6 @@ * | ||
| */ | ||
| const mediaUploadMiddleware = (options, next) => { | ||
| const isMediaUploadRequest = options.path && options.path.indexOf('/wp/v2/media') !== -1 || options.url && options.url.indexOf('/wp/v2/media') !== -1; | ||
| if (!isMediaUploadRequest) { | ||
| if (!isMediaUploadRequest(options)) { | ||
| return next(options); | ||
@@ -32,0 +41,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["mediaUploadMiddleware","options","next","isMediaUploadRequest","path","indexOf","url","retries","maxRetries","postProcess","attachmentId","method","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":";;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA,MAAMA,qBAAqB,GAAG,CAAEC,OAAF,EAAWC,IAAX,KAAqB;AAClD,QAAMC,oBAAoB,GACvBF,OAAO,CAACG,IAAR,IAAgBH,OAAO,CAACG,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAA9D,IACEJ,OAAO,CAACK,GAAR,IAAeL,OAAO,CAACK,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAF7D;;AAIA,MAAK,CAAEF,oBAAP,EAA8B;AAC7B,WAAOD,IAAI,CAAED,OAAF,CAAX;AACA;;AACD,MAAIM,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOL,IAAI,CAAE;AACZE,MAAAA,IAAI,EAAG,gBAAgBM,YAAc,eADzB;AAEZC,MAAAA,MAAM,EAAE,MAFI;AAGZC,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKR,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDR,MAAAA,IAAI,CAAE;AACLE,QAAAA,IAAI,EAAG,gBAAgBM,YAAc,aADhC;AAELC,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOK,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOf,IAAI,CAAE,EAAE,GAAGD,OAAL;AAAca,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMR,YAAY,GAAGQ,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAX,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BK,KAA5B,CAAmC,MAAM;AAC/C,YAAKd,OAAO,CAACa,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE,cACR,+FADQ;AAFa,WAAhB,CAAP;AAMA;;AAED,eAAOP,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAO,kCAAoBA,QAApB,EAA8BjB,OAAO,CAACa,KAAtC,CAAP;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACN,8CAAgCA,QAAhC,EAA0CjB,OAAO,CAACa,KAAlD,CA1BK,CAAP;AA4BA,CA/DD;;eAiEed,qB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tconst isMediaUploadRequest =\n\t\t( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\tif ( ! isMediaUploadRequest ) {\n\t\treturn next( options );\n\t}\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]} | ||
| {"version":3,"sources":["@wordpress/api-fetch/src/middlewares/media-upload.js"],"names":["isMediaUploadRequest","options","isCreateMethod","method","isMediaEndpoint","path","indexOf","url","mediaUploadMiddleware","next","retries","maxRetries","postProcess","attachmentId","data","action","parse","catch","Promise","reject","response","headers","get","status","code","message","then"],"mappings":";;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA,SAASA,oBAAT,CAA+BC,OAA/B,EAAyC;AACxC,QAAMC,cAAc,GAAG,CAAC,CAAED,OAAO,CAACE,MAAX,IAAqBF,OAAO,CAACE,MAAR,KAAmB,MAA/D;AACA,QAAMC,eAAe,GAClB,CAAC,CAAEH,OAAO,CAACI,IAAX,IAAmBJ,OAAO,CAACI,IAAR,CAAaC,OAAb,CAAsB,cAAtB,MAA2C,CAAC,CAAjE,IACE,CAAC,CAAEL,OAAO,CAACM,GAAX,IAAkBN,OAAO,CAACM,GAAR,CAAYD,OAAZ,CAAqB,cAArB,MAA0C,CAAC,CAFhE;AAIA,SAAOF,eAAe,IAAIF,cAA1B;AACA;AAED;AACA;AACA;AACA;AACA;;;AACA,MAAMM,qBAAqB,GAAG,CAAEP,OAAF,EAAWQ,IAAX,KAAqB;AAClD,MAAK,CAAET,oBAAoB,CAAEC,OAAF,CAA3B,EAAyC;AACxC,WAAOQ,IAAI,CAAER,OAAF,CAAX;AACA;;AAED,MAAIS,OAAO,GAAG,CAAd;AACA,QAAMC,UAAU,GAAG,CAAnB;AAEA;AACD;AACA;AACA;;AACC,QAAMC,WAAW,GAAKC,YAAF,IAAoB;AACvCH,IAAAA,OAAO;AACP,WAAOD,IAAI,CAAE;AACZJ,MAAAA,IAAI,EAAG,gBAAgBQ,YAAc,eADzB;AAEZV,MAAAA,MAAM,EAAE,MAFI;AAGZW,MAAAA,IAAI,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHM;AAIZC,MAAAA,KAAK,EAAE;AAJK,KAAF,CAAJ,CAKHC,KALG,CAKI,MAAM;AAChB,UAAKP,OAAO,GAAGC,UAAf,EAA4B;AAC3B,eAAOC,WAAW,CAAEC,YAAF,CAAlB;AACA;;AACDJ,MAAAA,IAAI,CAAE;AACLJ,QAAAA,IAAI,EAAG,gBAAgBQ,YAAc,aADhC;AAELV,QAAAA,MAAM,EAAE;AAFH,OAAF,CAAJ;AAKA,aAAOe,OAAO,CAACC,MAAR,EAAP;AACA,KAfM,CAAP;AAgBA,GAlBD;;AAoBA,SAAOV,IAAI,CAAE,EAAE,GAAGR,OAAL;AAAce,IAAAA,KAAK,EAAE;AAArB,GAAF,CAAJ,CACLC,KADK,CACIG,QAAF,IAAgB;AACvB,UAAMP,YAAY,GAAGO,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CACpB,2BADoB,CAArB;;AAGA,QACCF,QAAQ,CAACG,MAAT,IAAmB,GAAnB,IACAH,QAAQ,CAACG,MAAT,GAAkB,GADlB,IAEAV,YAHD,EAIE;AACD,aAAOD,WAAW,CAAEC,YAAF,CAAX,CAA4BI,KAA5B,CAAmC,MAAM;AAC/C,YAAKhB,OAAO,CAACe,KAAR,KAAkB,KAAvB,EAA+B;AAC9B,iBAAOE,OAAO,CAACC,MAAR,CAAgB;AACtBK,YAAAA,IAAI,EAAE,cADgB;AAEtBC,YAAAA,OAAO,EAAE,cACR,+FADQ;AAFa,WAAhB,CAAP;AAMA;;AAED,eAAOP,OAAO,CAACC,MAAR,CAAgBC,QAAhB,CAAP;AACA,OAXM,CAAP;AAYA;;AACD,WAAO,kCAAoBA,QAApB,EAA8BnB,OAAO,CAACe,KAAtC,CAAP;AACA,GAxBK,EAyBLU,IAzBK,CAyBGN,QAAF,IACN,8CAAgCA,QAAhC,EAA0CnB,OAAO,CAACe,KAAlD,CA1BK,CAAP;AA4BA,CA5DD;;eA8DeR,qB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tparseAndThrowError,\n\tparseResponseAndNormalizeError,\n} from '../utils/response';\n\n/**\n * @param {import('../types').APIFetchOptions} options\n * @return {boolean} True if the request is for media upload.\n */\nfunction isMediaUploadRequest( options ) {\n\tconst isCreateMethod = !! options.method && options.method === 'POST';\n\tconst isMediaEndpoint =\n\t\t( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) ||\n\t\t( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 );\n\n\treturn isMediaEndpoint && isCreateMethod;\n}\n\n/**\n * Middleware handling media upload failures and retries.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst mediaUploadMiddleware = ( options, next ) => {\n\tif ( ! isMediaUploadRequest( options ) ) {\n\t\treturn next( options );\n\t}\n\n\tlet retries = 0;\n\tconst maxRetries = 5;\n\n\t/**\n\t * @param {string} attachmentId\n\t * @return {Promise<any>} Processed post response.\n\t */\n\tconst postProcess = ( attachmentId ) => {\n\t\tretries++;\n\t\treturn next( {\n\t\t\tpath: `/wp/v2/media/${ attachmentId }/post-process`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { action: 'create-image-subsizes' },\n\t\t\tparse: false,\n\t\t} ).catch( () => {\n\t\t\tif ( retries < maxRetries ) {\n\t\t\t\treturn postProcess( attachmentId );\n\t\t\t}\n\t\t\tnext( {\n\t\t\t\tpath: `/wp/v2/media/${ attachmentId }?force=true`,\n\t\t\t\tmethod: 'DELETE',\n\t\t\t} );\n\n\t\t\treturn Promise.reject();\n\t\t} );\n\t};\n\n\treturn next( { ...options, parse: false } )\n\t\t.catch( ( response ) => {\n\t\t\tconst attachmentId = response.headers.get(\n\t\t\t\t'x-wp-upload-attachment-id'\n\t\t\t);\n\t\t\tif (\n\t\t\t\tresponse.status >= 500 &&\n\t\t\t\tresponse.status < 600 &&\n\t\t\t\tattachmentId\n\t\t\t) {\n\t\t\t\treturn postProcess( attachmentId ).catch( () => {\n\t\t\t\t\tif ( options.parse !== false ) {\n\t\t\t\t\t\treturn Promise.reject( {\n\t\t\t\t\t\t\tcode: 'post_process',\n\t\t\t\t\t\t\tmessage: __(\n\t\t\t\t\t\t\t\t'Media upload failed. If this is a photo or a large image, please scale it down and try again.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject( response );\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn parseAndThrowError( response, options.parse );\n\t\t} )\n\t\t.then( ( response ) =>\n\t\t\tparseResponseAndNormalizeError( response, options.parse )\n\t\t);\n};\n\nexport default mediaUploadMiddleware;\n"]} |
+4
-4
| { | ||
| "name": "@wordpress/api-fetch", | ||
| "version": "5.2.2", | ||
| "version": "5.2.3", | ||
| "description": "Utility to make WordPress REST API requests.", | ||
@@ -31,4 +31,4 @@ "author": "The WordPress Contributors", | ||
| "@babel/runtime": "^7.13.10", | ||
| "@wordpress/i18n": "^4.2.2", | ||
| "@wordpress/url": "^3.2.2" | ||
| "@wordpress/i18n": "^4.2.3", | ||
| "@wordpress/url": "^3.2.3" | ||
| }, | ||
@@ -38,3 +38,3 @@ "publishConfig": { | ||
| }, | ||
| "gitHead": "98c42a7187f788fe3e023f04df7f5dcbdae4e4e7" | ||
| "gitHead": "8f7f052bc04e3f4eb50f479ced14be1489b9fa79" | ||
| } |
+10
-10
@@ -13,3 +13,3 @@ # API Fetch | ||
| _This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._ | ||
| _This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._ | ||
@@ -60,8 +60,8 @@ ## Usage | ||
| Aborting a request can be achieved through the use of [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) in the same way as you would when using the native `fetch` API. | ||
| Aborting a request can be achieved through the use of [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) in the same way as you would when using the native `fetch` API. | ||
| For legacy browsers that don't support `AbortController`, you can either: | ||
| * Provide your own polyfill of `AbortController` if you still want it to be abortable. | ||
| * Ignore it as shown in the example below. | ||
| - Provide your own polyfill of `AbortController` if you still want it to be abortable. | ||
| - Ignore it as shown in the example below. | ||
@@ -71,8 +71,7 @@ **Example** | ||
| ```js | ||
| const controller = typeof AbortController === 'undefined' | ||
| ? undefined | ||
| : new AbortController(); | ||
| const controller = | ||
| typeof AbortController === 'undefined' ? undefined : new AbortController(); | ||
| apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } ) | ||
| .catch( ( error ) => { | ||
| apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } ).catch( | ||
| ( error ) => { | ||
| // If the browser doesn't support AbortController then the code below will never log. | ||
@@ -83,3 +82,4 @@ // However, in most cases this should be fine as it can be considered to be a progressive enhancement. | ||
| } | ||
| } ); | ||
| } | ||
| ); | ||
@@ -86,0 +86,0 @@ controller?.abort(); |
@@ -15,2 +15,15 @@ /** | ||
| /** | ||
| * @param {import('../types').APIFetchOptions} options | ||
| * @return {boolean} True if the request is for media upload. | ||
| */ | ||
| function isMediaUploadRequest( options ) { | ||
| const isCreateMethod = !! options.method && options.method === 'POST'; | ||
| const isMediaEndpoint = | ||
| ( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) || | ||
| ( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 ); | ||
| return isMediaEndpoint && isCreateMethod; | ||
| } | ||
| /** | ||
| * Middleware handling media upload failures and retries. | ||
@@ -21,9 +34,6 @@ * | ||
| const mediaUploadMiddleware = ( options, next ) => { | ||
| const isMediaUploadRequest = | ||
| ( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) || | ||
| ( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 ); | ||
| if ( ! isMediaUploadRequest ) { | ||
| if ( ! isMediaUploadRequest( options ) ) { | ||
| return next( options ); | ||
| } | ||
| let retries = 0; | ||
@@ -30,0 +40,0 @@ const maxRetries = 5; |
Sorry, the diff of this file is not supported yet
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
227785
1.3%92
1.1%2822
1.88%Updated
Updated