microcms-js-sdk 2.7.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -32
- package/dist/esm/microcms-js-sdk.js +1 -1
- package/dist/esm/microcms-js-sdk.js.map +1 -1
- package/dist/iife/microcms-js-sdk.js +1 -1
- package/dist/iife/microcms-js-sdk.js.map +1 -1
- package/dist/microcms-js-sdk.d.mts +36 -3
- package/dist/microcms-js-sdk.d.ts +36 -3
- package/dist/microcms-js-sdk.js +1 -1
- package/dist/microcms-js-sdk.js.map +1 -1
- package/dist/umd/microcms-js-sdk.js +1 -1
- package/dist/umd/microcms-js-sdk.js.map +1 -1
- package/package.json +20 -21
package/README.md
CHANGED
|
@@ -10,6 +10,9 @@ It helps you to use microCMS from JavaScript and Node.js applications.
|
|
|
10
10
|
|
|
11
11
|
Install npm package.
|
|
12
12
|
|
|
13
|
+
> [!IMPORTANT]
|
|
14
|
+
> v3.0.0 or later requires Node.js **v18 or higher**.
|
|
15
|
+
|
|
13
16
|
```bash
|
|
14
17
|
$ npm install microcms-js-sdk
|
|
15
18
|
|
|
@@ -22,6 +25,10 @@ CDN support.
|
|
|
22
25
|
|
|
23
26
|
```html
|
|
24
27
|
<script src="https://unpkg.com/microcms-js-sdk@latest/dist/umd/microcms-js-sdk.js"></script>
|
|
28
|
+
|
|
29
|
+
or
|
|
30
|
+
|
|
31
|
+
<script src="https://unpkg.com/microcms-js-sdk@2.7.0/dist/umd/microcms-js-sdk.js"></script>
|
|
25
32
|
```
|
|
26
33
|
|
|
27
34
|
### How to use
|
|
@@ -29,14 +36,14 @@ CDN support.
|
|
|
29
36
|
First, create a client.
|
|
30
37
|
|
|
31
38
|
```javascript
|
|
32
|
-
const { createClient } = require(
|
|
39
|
+
const { createClient } = require('microcms-js-sdk'); // CommonJS
|
|
33
40
|
import { createClient } from 'microcms-js-sdk'; //ES6
|
|
34
41
|
|
|
35
42
|
// Initialize Client SDK.
|
|
36
43
|
const client = createClient({
|
|
37
|
-
serviceDomain:
|
|
38
|
-
apiKey:
|
|
39
|
-
|
|
44
|
+
serviceDomain: 'YOUR_DOMAIN', // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
|
|
45
|
+
apiKey: 'YOUR_API_KEY',
|
|
46
|
+
// retry: true // Retry attempts up to a maximum of two times.
|
|
40
47
|
});
|
|
41
48
|
```
|
|
42
49
|
|
|
@@ -44,15 +51,14 @@ When using with a browser.
|
|
|
44
51
|
|
|
45
52
|
```html
|
|
46
53
|
<script>
|
|
47
|
-
const { createClient } = microcms;
|
|
48
|
-
|
|
49
|
-
// Initialize Client SDK.
|
|
50
|
-
const client = createClient({
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
54
|
+
const { createClient } = microcms;
|
|
55
|
+
|
|
56
|
+
// Initialize Client SDK.
|
|
57
|
+
const client = createClient({
|
|
58
|
+
serviceDomain: 'YOUR_DOMAIN', // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
|
|
59
|
+
apiKey: 'YOUR_API_KEY',
|
|
60
|
+
// retry: true // Retry attempts up to a maximum of two times.
|
|
61
|
+
});
|
|
56
62
|
</script>
|
|
57
63
|
```
|
|
58
64
|
|
|
@@ -109,7 +115,7 @@ client
|
|
|
109
115
|
#### Get all content ids
|
|
110
116
|
|
|
111
117
|
This function can be used to retrieve all content IDs only.
|
|
112
|
-
Since `filters` and `draftKey` can also be specified, it is possible to retrieve only the content IDs for a specific category, or to include content from a specific draft.
|
|
118
|
+
Since `filters` and `draftKey` can also be specified, it is possible to retrieve only the content IDs for a specific category, or to include content from a specific draft. \
|
|
113
119
|
The `alternateField` property can also be used to address cases where the value of a field other than content ID is used in a URL, etc.
|
|
114
120
|
|
|
115
121
|
```javascript
|
|
@@ -147,6 +153,27 @@ client
|
|
|
147
153
|
.then((res) => console.log(res))
|
|
148
154
|
.catch((err) => console.error(err));
|
|
149
155
|
```
|
|
156
|
+
|
|
157
|
+
#### Get all contents
|
|
158
|
+
|
|
159
|
+
This function can be used to retrieve all content data.
|
|
160
|
+
|
|
161
|
+
```javascript
|
|
162
|
+
client
|
|
163
|
+
.getAllContents({
|
|
164
|
+
endpoint: 'endpoint',
|
|
165
|
+
})
|
|
166
|
+
.then((res) => console.log(res))
|
|
167
|
+
.catch((err) => console.error(err));
|
|
168
|
+
|
|
169
|
+
// with queries
|
|
170
|
+
client
|
|
171
|
+
.getAllContents({
|
|
172
|
+
endpoint: 'endpoint',
|
|
173
|
+
queries: { filters: 'createdAt[greater_than]2021', orders: '-createdAt' },
|
|
174
|
+
})
|
|
175
|
+
.then((res) => console.log(res))
|
|
176
|
+
.catch((err) => console.error(err));
|
|
150
177
|
```
|
|
151
178
|
|
|
152
179
|
#### CREATE API
|
|
@@ -249,7 +276,7 @@ client
|
|
|
249
276
|
.catch((err) => console.error(err));
|
|
250
277
|
```
|
|
251
278
|
|
|
252
|
-
### TypeScript
|
|
279
|
+
### TypeScript
|
|
253
280
|
|
|
254
281
|
If you are using TypeScript, use `getList`, `getListDetail`, `getObject`. This internally contains a common type of content.
|
|
255
282
|
|
|
@@ -266,7 +293,7 @@ type Content = {
|
|
|
266
293
|
* totalCount: number;
|
|
267
294
|
* limit: number;
|
|
268
295
|
* offset: number;
|
|
269
|
-
* }
|
|
296
|
+
* }
|
|
270
297
|
*/
|
|
271
298
|
client.getList<Content>({ //other })
|
|
272
299
|
|
|
@@ -279,7 +306,7 @@ client.getList<Content>({ //other })
|
|
|
279
306
|
* publishedAt?: string;
|
|
280
307
|
* revisedAt?: string;
|
|
281
308
|
* text: string; // This is Content type.
|
|
282
|
-
* }
|
|
309
|
+
* }
|
|
283
310
|
*/
|
|
284
311
|
client.getListDetail<Content>({ //other })
|
|
285
312
|
|
|
@@ -291,7 +318,7 @@ client.getListDetail<Content>({ //other })
|
|
|
291
318
|
* publishedAt?: string;
|
|
292
319
|
* revisedAt?: string;
|
|
293
320
|
* text: string; // This is Content type.
|
|
294
|
-
* }
|
|
321
|
+
* }
|
|
295
322
|
*/
|
|
296
323
|
client.getObject<Content>({ //other })
|
|
297
324
|
```
|
|
@@ -310,9 +337,9 @@ Write functions can also be performed type-safely.
|
|
|
310
337
|
|
|
311
338
|
```typescript
|
|
312
339
|
type Content = {
|
|
313
|
-
title: string
|
|
314
|
-
body?: string
|
|
315
|
-
}
|
|
340
|
+
title: string;
|
|
341
|
+
body?: string;
|
|
342
|
+
};
|
|
316
343
|
|
|
317
344
|
client.create<Content>({
|
|
318
345
|
endpoint: 'endpoint',
|
|
@@ -321,7 +348,7 @@ client.create<Content>({
|
|
|
321
348
|
title: 'title',
|
|
322
349
|
body: 'body',
|
|
323
350
|
},
|
|
324
|
-
})
|
|
351
|
+
});
|
|
325
352
|
|
|
326
353
|
client.update<Content>({
|
|
327
354
|
endpoint: 'endpoint',
|
|
@@ -329,7 +356,7 @@ client.update<Content>({
|
|
|
329
356
|
content: {
|
|
330
357
|
body: 'body',
|
|
331
358
|
},
|
|
332
|
-
})
|
|
359
|
+
});
|
|
333
360
|
```
|
|
334
361
|
|
|
335
362
|
## CustomRequestInit
|
|
@@ -348,7 +375,7 @@ const response = await client.getList({
|
|
|
348
375
|
revalidate: 60,
|
|
349
376
|
},
|
|
350
377
|
},
|
|
351
|
-
endpoint:
|
|
378
|
+
endpoint: 'endpoint',
|
|
352
379
|
});
|
|
353
380
|
```
|
|
354
381
|
|
|
@@ -357,17 +384,117 @@ const response = await client.getList({
|
|
|
357
384
|
You can abort fetch requests.
|
|
358
385
|
|
|
359
386
|
```ts
|
|
360
|
-
const controller = new AbortController()
|
|
387
|
+
const controller = new AbortController();
|
|
361
388
|
const response = await client.getObject({
|
|
362
389
|
customRequestInit: {
|
|
363
|
-
signal: controller.signal
|
|
390
|
+
signal: controller.signal,
|
|
364
391
|
},
|
|
365
|
-
endpoint:
|
|
392
|
+
endpoint: 'config',
|
|
366
393
|
});
|
|
367
394
|
|
|
368
395
|
setTimeout(() => {
|
|
369
|
-
controller.abort()
|
|
370
|
-
}, 1000)
|
|
396
|
+
controller.abort();
|
|
397
|
+
}, 1000);
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Management API
|
|
401
|
+
|
|
402
|
+
Clients can be created for the Management API.
|
|
403
|
+
|
|
404
|
+
### How to use
|
|
405
|
+
|
|
406
|
+
First, create a client.
|
|
407
|
+
|
|
408
|
+
```javascript
|
|
409
|
+
import { createManagementClient } from 'microcms-js-sdk'; //ES6
|
|
410
|
+
|
|
411
|
+
// Initialize Client SDK.
|
|
412
|
+
const client = createManagementClient({
|
|
413
|
+
serviceDomain: 'YOUR_DOMAIN', // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
|
|
414
|
+
apiKey: 'YOUR_API_KEY',
|
|
415
|
+
});
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### UploadMedia API
|
|
419
|
+
|
|
420
|
+
Media files can be uploaded using the 'POST /api/v1/media' endpoint of the Management API.
|
|
421
|
+
|
|
422
|
+
#### Node.js
|
|
423
|
+
|
|
424
|
+
```javascript
|
|
425
|
+
// Blob
|
|
426
|
+
import { readFileSync } from 'fs';
|
|
427
|
+
|
|
428
|
+
const file = readFileSync('path/to/file');
|
|
429
|
+
client
|
|
430
|
+
.uploadMedia({
|
|
431
|
+
data: new Blob([file], { type: 'image/png' }),
|
|
432
|
+
name: 'image.png',
|
|
433
|
+
})
|
|
434
|
+
.then((res) => console.log(res))
|
|
435
|
+
.catch((err) => console.error(err));
|
|
436
|
+
|
|
437
|
+
// or ReadableStream
|
|
438
|
+
import { createReadStream } from 'fs';
|
|
439
|
+
import { Stream } from 'stream';
|
|
440
|
+
|
|
441
|
+
const file = createReadStream('path/to/file');
|
|
442
|
+
client
|
|
443
|
+
.uploadMedia({
|
|
444
|
+
data: Stream.Readable.toWeb(file),
|
|
445
|
+
name: 'image.png',
|
|
446
|
+
type: 'image/png',
|
|
447
|
+
})
|
|
448
|
+
.then((res) => console.log(res))
|
|
449
|
+
.catch((err) => console.error(err));
|
|
450
|
+
|
|
451
|
+
// or URL
|
|
452
|
+
client
|
|
453
|
+
.uploadMedia({
|
|
454
|
+
data: 'https://example.com/image.png',
|
|
455
|
+
// name: 'image.png', ← Optional
|
|
456
|
+
})
|
|
457
|
+
.then((res) => console.log(res))
|
|
458
|
+
.catch((err) => console.error(err));
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
#### Browser
|
|
462
|
+
|
|
463
|
+
```javascript
|
|
464
|
+
// File
|
|
465
|
+
const file = document.querySelector('input[type="file"]').files[0];
|
|
466
|
+
client
|
|
467
|
+
.uploadMedia({
|
|
468
|
+
data: file,
|
|
469
|
+
})
|
|
470
|
+
.then((res) => console.log(res))
|
|
471
|
+
.catch((err) => console.error(err));
|
|
472
|
+
|
|
473
|
+
// or URL
|
|
474
|
+
client
|
|
475
|
+
.uploadMedia({
|
|
476
|
+
data: 'https://example.com/image.png',
|
|
477
|
+
// name: 'image.png', ← Optional
|
|
478
|
+
})
|
|
479
|
+
.then((res) => console.log(res))
|
|
480
|
+
.catch((err) => console.error(err));
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Type Definition
|
|
484
|
+
|
|
485
|
+
#### UploadMedia
|
|
486
|
+
|
|
487
|
+
```typescript
|
|
488
|
+
type UploadMediaRequest =
|
|
489
|
+
| { data: File }
|
|
490
|
+
| { data: Blob; name: string }
|
|
491
|
+
| { data: ReadableStream; name: string; type: `image/${string}` }
|
|
492
|
+
| {
|
|
493
|
+
data: URL | string;
|
|
494
|
+
name?: string | null | undefined;
|
|
495
|
+
customRequestHeaders?: HeadersInit;
|
|
496
|
+
};
|
|
497
|
+
function uploadMedia(params: UploadMediaRequest): Promise<{ url: string }>;
|
|
371
498
|
```
|
|
372
499
|
|
|
373
500
|
## Tips
|
|
@@ -378,14 +505,13 @@ setTimeout(() => {
|
|
|
378
505
|
const readClient = createClient({
|
|
379
506
|
serviceDomain: 'serviceDomain',
|
|
380
507
|
apiKey: 'readApiKey',
|
|
381
|
-
})
|
|
508
|
+
});
|
|
382
509
|
const writeClient = createClient({
|
|
383
510
|
serviceDomain: 'serviceDomain',
|
|
384
511
|
apiKey: 'writeApiKey',
|
|
385
|
-
})
|
|
512
|
+
});
|
|
386
513
|
```
|
|
387
514
|
|
|
388
|
-
|
|
389
515
|
# LICENSE
|
|
390
516
|
|
|
391
517
|
Apache-2.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(e,t){if(t==null||t>e.length)t=e.length;for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function t(t){if(Array.isArray(t))return e(t)}function n(e,t,n,r,i,o,u){try{var s=e[o](u);var c=s.value}catch(e){n(e);return}if(s.done){t(c)}else{Promise.resolve(c).then(r,i)}}function r(e){return function(){var t=this,r=arguments;return new Promise(function(i,o){var u=e.apply(t,r);function s(e){n(u,i,o,s,c,"next",e)}function c(e){n(u,i,o,s,c,"throw",e)}s(undefined)})}}function i(e,t,n){if(t in e){Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true})}else{e[t]=n}return e}function o(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function u(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};var r=Object.keys(n);if(typeof Object.getOwnPropertySymbols==="function"){r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))}r.forEach(function(t){i(e,t,n[t])})}return e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);if(t){r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})}n.push.apply(n,r)}return n}function a(e,t){t=t!=null?t:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}else{c(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function f(e){return t(e)||o(e)||d(e)||u()}function l(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function d(t,n){if(!t)return;if(typeof t==="string")return e(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor)r=t.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(t,n)}function p(e,t){var n,r,i,o,u={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]};return(o={next:s(0),"throw":s(1),"return":s(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o);function s(e){return function(t){return c([e,t])}}function c(o){if(n)throw new TypeError("Generator is already executing.");while(u)try{if(n=1,r&&(i=o[0]&2?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;if(r=0,i)o=[o[0]&2,i.value];switch(o[0]){case 0:case 1:i=o;break;case 4:u.label++;return{value:o[1],done:false};case 5:u.label++;r=o[1];o=[0];continue;case 7:o=u.ops.pop();u.trys.pop();continue;default:if(!(i=u.trys,i=i.length>0&&i[i.length-1])&&(o[0]===6||o[0]===2)){u=0;continue}if(o[0]===3&&(!i||o[1]>i[0]&&o[1]<i[3])){u.label=o[1];break}if(o[0]===6&&u.label<i[1]){u.label=i[1];i=o;break}if(i&&u.label<i[2]){u.label=i[2];u.ops.push(o);break}if(i[2])u.ops.pop();u.trys.pop();continue}o=t.call(e,u)}catch(e){o=[6,e];r=0}finally{n=i=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}}import h from"qs";var y=function(e){return e!==null&&typeof e=="object"},v=function(e){return typeof e=="string"};var m=function(e){if(!y(e))throw new Error("queries is not object");return h.stringify(e,{arrayFormat:"comma"})};var b="microcms.io",w="v1";import q,{Headers as g}from"cross-fetch";var I=function(e){var t;return e?t=e:(typeof fetch==="undefined"?"undefined":l(fetch))>"u"?t=q:t=fetch,function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++){n[r]=arguments[r]}return t.apply(void 0,f(n))}},j=function(){return(typeof Headers==="undefined"?"undefined":l(Headers))>"u"?g:Headers},P=function(e,t){var n=I(t),i=j();return function(){var t=r(function(t,r){var o,u;return p(this,function(c){u=new i((o=r)===null||o===void 0?void 0:o.headers);return[2,(u.has("X-MICROCMS-API-KEY")||u.set("X-MICROCMS-API-KEY",e),n(t,a(s({},r),{headers:u})))]})});return function(e,n){return t.apply(this,arguments)}}()};import O from"async-retry";var E=function(e){var t=e.serviceDomain,n=e.apiKey,i=e.customFetch,o=e.retry;if(!t||!n)throw new Error("parameter is required (check serviceDomain and apiKey)");if(!v(t)||!v(n))throw new Error("parameter is not string");var u="https://".concat(t,".").concat(b,"/api/").concat(w),c=function(){var e=r(function(e){var t,c,f,l,d,h,y,v,b;return p(this,function(w){switch(w.label){case 0:t=e.endpoint,c=e.contentId,f=e.queries,l=f===void 0?{}:f,d=e.requestInit;h=P(n,i),y=m(l),v="".concat(u,"/").concat(t).concat(c?"/".concat(c):"").concat(y?"?".concat(y):""),b=function(){var e=r(function(e){var t,n,r;return p(this,function(i){switch(i.label){case 0:i.trys.push([0,2,,3]);return[4,e.json()];case 1:t=i.sent(),n=t.message;return[2,n!==null&&n!==void 0?n:null];case 2:r=i.sent();return[2,null];case 3:return[2]}})});return function t(t){return e.apply(this,arguments)}}();return[4,O(function(){var e=r(function(e){var t,n,r,i,o,u,c,f;return p(this,function(l){switch(l.label){case 0:l.trys.push([0,6,,7]);return[4,h(v,a(s({},d),{method:(r=(t=d)===null||t===void 0?void 0:t.method)!==null&&r!==void 0?r:"GET"}))];case 1:i=l.sent();if(!(i.status!==429&&i.status>=400&&i.status<500))return[3,3];return[4,b(i)];case 2:o=l.sent();return[2,e(new Error("fetch API response status: ".concat(i.status).concat(o?"\n message is `".concat(o,"`"):"")))];case 3:if(!!i.ok)return[3,5];return[4,b(i)];case 4:u=l.sent();return[2,Promise.reject(new Error("fetch API response status: ".concat(i.status).concat(u?"\n message is `".concat(u,"`"):"")))];case 5:return[2,((n=d)===null||n===void 0?void 0:n.method)==="DELETE"?void 0:i.json()];case 6:c=l.sent();if(c.data)throw c.data;if((f=c.response)===null||f===void 0?void 0:f.data)throw c.response.data;return[2,Promise.reject(new Error("Network Error.\n Details: ".concat(c)))];case 7:return[2]}})});return function(t){return e.apply(this,arguments)}}(),{retries:o?2:0,onRetry:function(e,t){console.log(e),console.log("Waiting for retry (".concat(t,"/",2,")"))},minTimeout:5e3})];case 1:return[2,w.sent()]}})});return function t(t){return e.apply(this,arguments)}}();return{get:function(){var e=r(function(e){var t,n,r,i,o,u;return p(this,function(s){switch(s.label){case 0:t=e.endpoint,n=e.contentId,r=e.queries,i=r===void 0?{}:r,o=e.customRequestInit;if(!t)return[3,2];return[4,c({endpoint:t,contentId:n,queries:i,requestInit:o})];case 1:u=s.sent();return[3,3];case 2:u=Promise.reject(new Error("endpoint is required"));s.label=3;case 3:return[2,u]}})});return function(t){return e.apply(this,arguments)}}(),getList:function(){var e=r(function(e){var t,n,r,i,o;return p(this,function(u){switch(u.label){case 0:t=e.endpoint,n=e.queries,r=n===void 0?{}:n,i=e.customRequestInit;if(!t)return[3,2];return[4,c({endpoint:t,queries:r,requestInit:i})];case 1:o=u.sent();return[3,3];case 2:o=Promise.reject(new Error("endpoint is required"));u.label=3;case 3:return[2,o]}})});return function(t){return e.apply(this,arguments)}}(),getListDetail:function(){var e=r(function(e){var t,n,r,i,o,u;return p(this,function(s){switch(s.label){case 0:t=e.endpoint,n=e.contentId,r=e.queries,i=r===void 0?{}:r,o=e.customRequestInit;if(!t)return[3,2];return[4,c({endpoint:t,contentId:n,queries:i,requestInit:o})];case 1:u=s.sent();return[3,3];case 2:u=Promise.reject(new Error("endpoint is required"));s.label=3;case 3:return[2,u]}})});return function(t){return e.apply(this,arguments)}}(),getObject:function(){var e=r(function(e){var t,n,r,i,o;return p(this,function(u){switch(u.label){case 0:t=e.endpoint,n=e.queries,r=n===void 0?{}:n,i=e.customRequestInit;if(!t)return[3,2];return[4,c({endpoint:t,queries:r,requestInit:i})];case 1:o=u.sent();return[3,3];case 2:o=Promise.reject(new Error("endpoint is required"));u.label=3;case 3:return[2,o]}})});return function(t){return e.apply(this,arguments)}}(),getAllContentIds:function(){var e=r(function(e){var t,n,r,i,o,u,l,d,h,y,v,m,b,w,q,g,I;return p(this,function(p){switch(p.label){case 0:t=e.endpoint,n=e.alternateField,r=e.draftKey,i=e.filters,o=e.orders,u=e.customRequestInit;l={draftKey:r,filters:i,orders:o,limit:100,fields:n!==null&&n!==void 0?n:"id",depth:0};return[4,c({endpoint:t,queries:a(s({},l),{limit:0}),requestInit:u})];case 1:d=p.sent(),h=d.totalCount,y=[],v=0,m=function(e){return new Promise(function(t){return setTimeout(t,e)})},b=function(e){return e.every(function(e){return typeof e=="string"})};p.label=2;case 2:if(!(y.length<h))return[3,7];return[4,c({endpoint:t,queries:a(s({},l),{offset:v}),requestInit:u})];case 3:w=p.sent(),q=w.contents,g=q.map(function(e){return e[n!==null&&n!==void 0?n:"id"]});if(!b(g))throw new Error("The value of the field specified by `alternateField` is not a string.");y=f(y).concat(f(g)),v+=100;I=y.length<h;if(!I)return[3,5];return[4,m(1e3)];case 4:I=p.sent();p.label=5;case 5:I;p.label=6;case 6:return[3,2];case 7:return[2,y]}})});return function(t){return e.apply(this,arguments)}}(),getAllContents:function(){var e=r(function(e){var t,n,r,i,o,u,f,l,d,h,y,v;return p(this,function(p){switch(p.label){case 0:t=e.endpoint,n=e.queries,r=n===void 0?{}:n,i=e.customRequestInit;return[4,c({endpoint:t,queries:a(s({},r),{limit:0}),requestInit:i})];case 1:o=p.sent(),u=o.totalCount,f=[],l=0,d=function(e){return new Promise(function(t){return setTimeout(t,e)})};p.label=2;case 2:if(!(f.length<u))return[3,7];return[4,c({endpoint:t,queries:a(s({},r),{limit:100,offset:l}),requestInit:i})];case 3:h=p.sent(),y=h.contents;f=f.concat(y),l+=100;v=f.length<u;if(!v)return[3,5];return[4,d(1e3)];case 4:v=p.sent();p.label=5;case 5:v;p.label=6;case 6:return[3,2];case 7:return[2,f]}})});return function(t){return e.apply(this,arguments)}}(),create:function(){var e=r(function(e){var t,n,r,i,o,u,f,l;return p(this,function(d){t=e.endpoint,n=e.contentId,r=e.content,i=e.isDraft,o=i===void 0?!1:i,u=e.customRequestInit;if(!t)return[2,Promise.reject(new Error("endpoint is required"))];f=o?{status:"draft"}:{},l=a(s({},u),{method:n?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return[2,c({endpoint:t,contentId:n,queries:f,requestInit:l})]})});return function(t){return e.apply(this,arguments)}}(),update:function(){var e=r(function(e){var t,n,r,i,o;return p(this,function(u){t=e.endpoint,n=e.contentId,r=e.content,i=e.customRequestInit;if(!t)return[2,Promise.reject(new Error("endpoint is required"))];o=a(s({},i),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});return[2,c({endpoint:t,contentId:n,requestInit:o})]})});return function(t){return e.apply(this,arguments)}}(),delete:function(){var e=r(function(e){var t,n,r,i;return p(this,function(o){switch(o.label){case 0:t=e.endpoint,n=e.contentId,r=e.customRequestInit;if(!t)return[2,Promise.reject(new Error("endpoint is required"))];if(!n)return[2,Promise.reject(new Error("contentId is required"))];i=a(s({},r),{method:"DELETE",headers:{},body:void 0});return[4,c({endpoint:t,contentId:n,requestInit:i})];case 1:o.sent();return[2]}})});return function(t){return e.apply(this,arguments)}}()}};export{E as createClient};//# sourceMappingURL=microcms-js-sdk.js.map
|
|
1
|
+
function e(e,t){if(t==null||t>e.length)t=e.length;for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function t(e){if(Array.isArray(e))return e}function r(t){if(Array.isArray(t))return e(t)}function n(e,t,r,n,i,o,u){try{var a=e[o](u);var s=a.value}catch(e){r(e);return}if(a.done){t(s)}else{Promise.resolve(s).then(n,i)}}function i(e){return function(){var t=this,r=arguments;return new Promise(function(i,o){var u=e.apply(t,r);function a(e){n(u,i,o,a,s,"next",e)}function s(e){n(u,i,o,a,s,"throw",e)}a(undefined)})}}function o(e,t,r){if(t in e){Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:true})}else{e[t]=r}return e}function u(e,t){if(t!=null&&typeof Symbol!=="undefined"&&t[Symbol.hasInstance]){return!!t[Symbol.hasInstance](e)}else{return e instanceof t}}function a(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function s(e,t){var r=e==null?null:typeof Symbol!=="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(r==null)return;var n=[];var i=true;var o=false;var u,a;try{for(r=r.call(e);!(i=(u=r.next()).done);i=true){n.push(u.value);if(t&&n.length===t)break}}catch(e){o=true;a=e}finally{try{if(!i&&r["return"]!=null)r["return"]()}finally{if(o)throw a}}return n}function c(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};var n=Object.keys(r);if(typeof Object.getOwnPropertySymbols==="function"){n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))}n.forEach(function(t){o(e,t,r[t])})}return e}function d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);if(t){n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})}r.push.apply(r,n)}return r}function p(e,t){t=t!=null?t:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}else{d(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function h(e,r){return t(e)||s(e,r)||y(e,r)||c()}function v(e){return r(e)||a(e)||y(e)||l()}function y(t,r){if(!t)return;if(typeof t==="string")return e(t,r);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor)n=t.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e(t,r)}function m(e,t){var r,n,i,o,u={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),"throw":a(1),"return":a(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(e){return function(t){return s([e,t])}}function s(o){if(r)throw new TypeError("Generator is already executing.");while(u)try{if(r=1,n&&(i=o[0]&2?n["return"]:o[0]?n["throw"]||((i=n["return"])&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;if(n=0,i)o=[o[0]&2,i.value];switch(o[0]){case 0:case 1:i=o;break;case 4:u.label++;return{value:o[1],done:false};case 5:u.label++;n=o[1];o=[0];continue;case 7:o=u.ops.pop();u.trys.pop();continue;default:if(!(i=u.trys,i=i.length>0&&i[i.length-1])&&(o[0]===6||o[0]===2)){u=0;continue}if(o[0]===3&&(!i||o[1]>i[0]&&o[1]<i[3])){u.label=o[1];break}if(o[0]===6&&u.label<i[1]){u.label=i[1];i=o;break}if(i&&u.label<i[2]){u.label=i[2];u.ops.push(o);break}if(i[2])u.ops.pop();u.trys.pop();continue}o=t.call(e,u)}catch(e){o=[6,e];n=0}finally{r=i=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}}import b from"async-retry";var w=function(e){return function(){var t=i(function(t,r){var n;return m(this,function(i){n=new Headers(r===null||r===void 0?void 0:r.headers);return[2,(n.has("X-MICROCMS-API-KEY")||n.set("X-MICROCMS-API-KEY",e),fetch(t,p(f({},r),{headers:n})))]})});return function(e,r){return t.apply(this,arguments)}}()};var g="microcms.io",q="microcms-management.io",I="v1";var j=function(e){return e!==null&&typeof e=="object"},E=function(e){return typeof e=="string"};var P=function(e){if(!j(e))throw new Error("queries is not object");return new URLSearchParams(Object.entries(e).reduce(function(e,t){var r=h(t,2),n=r[0],i=r[1];return e[n]=String(i),e},{})).toString()};var O=function(e){var t=e.serviceDomain,r=e.apiKey,n=e.retry;if(!t||!r)throw new Error("parameter is required (check serviceDomain and apiKey)");if(!E(t)||!E(r))throw new Error("parameter is not string");var o="https://".concat(t,".").concat(g,"/api/").concat(I),u=function(){var e=i(function(e){var t,u,a,s,c,l,d,h,v;return m(this,function(y){switch(y.label){case 0:t=e.endpoint,u=e.contentId,a=e.queries,s=a===void 0?{}:a,c=e.requestInit;l=w(r),d=P(s),h="".concat(o,"/").concat(t).concat(u?"/".concat(u):"").concat(d?"?".concat(d):""),v=function(){var e=i(function(e){var t,r,n;return m(this,function(i){switch(i.label){case 0:i.trys.push([0,2,,3]);return[4,e.json()];case 1:t=i.sent(),r=t.message;return[2,r!==null&&r!==void 0?r:null];case 2:n=i.sent();return[2,null];case 3:return[2]}})});return function t(t){return e.apply(this,arguments)}}();return[4,b(function(){var e=i(function(e){var t,r,n,i,o,u,a;return m(this,function(s){switch(s.label){case 0:s.trys.push([0,6,,7]);return[4,l(h,p(f({},c),{method:(r=c===null||c===void 0?void 0:c.method)!==null&&r!==void 0?r:"GET"}))];case 1:if(!(t=s.sent(),t.status!==429&&t.status>=400&&t.status<500))return[3,3];return[4,v(t)];case 2:n=s.sent();return[2,e(new Error("fetch API response status: ".concat(t.status).concat(n?"\n message is `".concat(n,"`"):"")))];case 3:if(!!t.ok)return[3,5];return[4,v(t)];case 4:i=s.sent();return[2,Promise.reject(new Error("fetch API response status: ".concat(t.status).concat(i?"\n message is `".concat(i,"`"):"")))];case 5:return[2,(c===null||c===void 0?void 0:c.method)==="DELETE"?void 0:t.json()];case 6:o=s.sent();if(o.data)throw o.data;if((u=o.response)===null||u===void 0?void 0:u.data)throw o.response.data;return[2,Promise.reject(new Error("Network Error.\n Details: ".concat((a=o.message)!==null&&a!==void 0?a:"")))];case 7:return[2]}})});return function(t){return e.apply(this,arguments)}}(),{retries:n?2:0,onRetry:function(e,t){console.log(e),console.log("Waiting for retry (".concat(t,"/",2,")"))},minTimeout:5e3})];case 1:return[2,y.sent()]}})});return function t(t){return e.apply(this,arguments)}}();return{get:function(){var e=i(function(e){var t,r,n,i,o,a;return m(this,function(s){switch(s.label){case 0:t=e.endpoint,r=e.contentId,n=e.queries,i=n===void 0?{}:n,o=e.customRequestInit;if(!t)return[3,2];return[4,u({endpoint:t,contentId:r,queries:i,requestInit:o})];case 1:a=s.sent();return[3,3];case 2:a=Promise.reject(new Error("endpoint is required"));s.label=3;case 3:return[2,a]}})});return function(t){return e.apply(this,arguments)}}(),getList:function(){var e=i(function(e){var t,r,n,i,o;return m(this,function(a){switch(a.label){case 0:t=e.endpoint,r=e.queries,n=r===void 0?{}:r,i=e.customRequestInit;if(!t)return[3,2];return[4,u({endpoint:t,queries:n,requestInit:i})];case 1:o=a.sent();return[3,3];case 2:o=Promise.reject(new Error("endpoint is required"));a.label=3;case 3:return[2,o]}})});return function(t){return e.apply(this,arguments)}}(),getListDetail:function(){var e=i(function(e){var t,r,n,i,o,a;return m(this,function(s){switch(s.label){case 0:t=e.endpoint,r=e.contentId,n=e.queries,i=n===void 0?{}:n,o=e.customRequestInit;if(!t)return[3,2];return[4,u({endpoint:t,contentId:r,queries:i,requestInit:o})];case 1:a=s.sent();return[3,3];case 2:a=Promise.reject(new Error("endpoint is required"));s.label=3;case 3:return[2,a]}})});return function(t){return e.apply(this,arguments)}}(),getObject:function(){var e=i(function(e){var t,r,n,i,o;return m(this,function(a){switch(a.label){case 0:t=e.endpoint,r=e.queries,n=r===void 0?{}:r,i=e.customRequestInit;if(!t)return[3,2];return[4,u({endpoint:t,queries:n,requestInit:i})];case 1:o=a.sent();return[3,3];case 2:o=Promise.reject(new Error("endpoint is required"));a.label=3;case 3:return[2,o]}})});return function(t){return e.apply(this,arguments)}}(),getAllContentIds:function(){var e=i(function(e){var t,r,n,i,o,a,s,c,l,d,h,y,b,w,g,q,I;return m(this,function(m){switch(m.label){case 0:t=e.endpoint,r=e.alternateField,n=e.draftKey,i=e.filters,o=e.orders,a=e.customRequestInit;s={draftKey:n,filters:i,orders:o,limit:100,fields:r!==null&&r!==void 0?r:"id",depth:0};return[4,u({endpoint:t,queries:p(f({},s),{limit:0}),requestInit:a})];case 1:c=m.sent(),l=c.totalCount,d=[],h=0,y=function(e){return new Promise(function(t){return setTimeout(t,e)})},b=function(e){return e.every(function(e){return typeof e=="string"})};m.label=2;case 2:if(!(d.length<l))return[3,7];return[4,u({endpoint:t,queries:p(f({},s),{offset:h}),requestInit:a})];case 3:w=m.sent(),g=w.contents,q=g.map(function(e){return e[r!==null&&r!==void 0?r:"id"]});if(!b(q))throw new Error("The value of the field specified by `alternateField` is not a string.");d=v(d).concat(v(q)),h+=100;I=d.length<l;if(!I)return[3,5];return[4,y(1e3)];case 4:I=m.sent();m.label=5;case 5:I;m.label=6;case 6:return[3,2];case 7:return[2,d]}})});return function(t){return e.apply(this,arguments)}}(),getAllContents:function(){var e=i(function(e){var t,r,n,i,o,a,s,c,l,d,h,v;return m(this,function(y){switch(y.label){case 0:t=e.endpoint,r=e.queries,n=r===void 0?{}:r,i=e.customRequestInit;return[4,u({endpoint:t,queries:p(f({},n),{limit:0}),requestInit:i})];case 1:o=y.sent(),a=o.totalCount,s=[],c=0,l=function(e){return new Promise(function(t){return setTimeout(t,e)})};y.label=2;case 2:if(!(s.length<a))return[3,7];return[4,u({endpoint:t,queries:p(f({},n),{limit:100,offset:c}),requestInit:i})];case 3:d=y.sent(),h=d.contents;s=s.concat(h),c+=100;v=s.length<a;if(!v)return[3,5];return[4,l(1e3)];case 4:v=y.sent();y.label=5;case 5:v;y.label=6;case 6:return[3,2];case 7:return[2,s]}})});return function(t){return e.apply(this,arguments)}}(),create:function(){var e=i(function(e){var t,r,n,i,o,a,s,c;return m(this,function(l){t=e.endpoint,r=e.contentId,n=e.content,i=e.isDraft,o=i===void 0?!1:i,a=e.customRequestInit;if(!t)return[2,Promise.reject(new Error("endpoint is required"))];s=o?{status:"draft"}:{},c=p(f({},a),{method:r?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return[2,u({endpoint:t,contentId:r,queries:s,requestInit:c})]})});return function(t){return e.apply(this,arguments)}}(),update:function(){var e=i(function(e){var t,r,n,i,o;return m(this,function(a){t=e.endpoint,r=e.contentId,n=e.content,i=e.customRequestInit;if(!t)return[2,Promise.reject(new Error("endpoint is required"))];o=p(f({},i),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return[2,u({endpoint:t,contentId:r,requestInit:o})]})});return function(t){return e.apply(this,arguments)}}(),delete:function(){var e=i(function(e){var t,r,n,i;return m(this,function(o){switch(o.label){case 0:t=e.endpoint,r=e.contentId,n=e.customRequestInit;if(!t)return[2,Promise.reject(new Error("endpoint is required"))];if(!r)return[2,Promise.reject(new Error("contentId is required"))];i=p(f({},n),{method:"DELETE",headers:{},body:void 0});return[4,u({endpoint:t,contentId:r,requestInit:i})];case 1:o.sent();return[2]}})});return function(t){return e.apply(this,arguments)}}()}};var S=function(e){var t=e.serviceDomain,r=e.apiKey;if(!t||!r)throw new Error("parameter is required (check serviceDomain and apiKey)");if(!E(t)||!E(r))throw new Error("parameter is not string");var n=function(){var e=i(function(e){var n,o,u,a,s,c,l,d,h,v,y,b,g,I,j,E;return m(this,function(O){switch(O.label){case 0:n=e.path,o=e.apiVersion,u=e.queries,a=u===void 0?{}:u,s=e.requestInit;c="https://".concat(t,".").concat(q,"/api/").concat(o),l=w(r),d=P(a),h="".concat(c,"/").concat(n).concat(d?"?".concat(d):""),v=function(){var e=i(function(e){var t,r,n;return m(this,function(i){switch(i.label){case 0:i.trys.push([0,2,,3]);return[4,e.json()];case 1:t=i.sent(),r=t.message;return[2,r!==null&&r!==void 0?r:null];case 2:n=i.sent();return[2,null];case 3:return[2]}})});return function t(t){return e.apply(this,arguments)}}();O.label=1;case 1:O.trys.push([1,3,,4]);return[4,l(h,p(f({},s),{method:(b=s===null||s===void 0?void 0:s.method)!==null&&b!==void 0?b:"GET"}))];case 2:y=O.sent();return[3,4];case 3:g=O.sent();if(g.data)throw g.data;if((I=g.response)===null||I===void 0?void 0:I.data)throw g.response.data;return[2,Promise.reject(new Error("Network Error.\n Details: ".concat((j=g.message)!==null&&j!==void 0?j:"")))];case 4:if(!!y.ok)return[3,6];return[4,v(y)];case 5:E=O.sent();return[2,Promise.reject(new Error("fetch API response status: ".concat(y.status).concat(E?"\n message is `".concat(E,"`"):"")))];case 6:return[2,y.json()]}})});return function t(t){return e.apply(this,arguments)}}();return{uploadMedia:function(){var e=i(function(e){var t,r,i,o,a,s,c,l,f,d,p,h;return m(this,function(v){switch(v.label){case 0:t=e.data,r=e.name,i=e.type,o=e.customRequestHeaders;a=new FormData;if(!u(t,Blob))return[3,1];if(t.name)a.set("file",t,t.name);else{if(!r)throw new Error("name is required when data is a Blob");a.set("file",t,r)}return[3,9];case 1:if(!u(t,ReadableStream))return[3,6];if(!r)throw new Error("name is required when data is a ReadableStream");if(!i)throw new Error("type is required when data is a ReadableStream");s=[],c=t.getReader();v.label=2;case 2:return[4,c.read()];case 3:if(!!(l=v.sent()).done)return[3,5];s.push(l.value);v.label=4;case 4:return[3,2];case 5:a.set("file",new Blob(s,{type:i}),r);return[3,9];case 6:if(!(typeof t=="string"||u(t,URL)))return[3,9];f=u(t,URL)?t:new URL(t);return[4,fetch(f.toString(),o?{headers:o}:void 0)];case 7:d=v.sent();return[4,d.blob()];case 8:p=v.sent(),h=new URL(d.url).pathname.split("/").pop();a.set("file",p,r!==null&&r!==void 0?r:h);v.label=9;case 9:return[2,n({path:"media",apiVersion:I,requestInit:{method:"POST",body:a}})]}})});return function(t){return e.apply(this,arguments)}}()}};export{O as createClient,S as createManagementClient};//# sourceMappingURL=microcms-js-sdk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/parseQuery.ts","../../src/utils/isCheckValue.ts","../../src/utils/constants.ts","../../src/lib/fetch.ts","../../src/createClient.ts"],"names":["qs","isObject","value","isString","parseQuery","queries","BASE_DOMAIN","API_VERSION","crossFetch","CrossFetchHeaders","resolveFetch","customFetch","_fetch","args","resolveHeadersConstructor","generateFetchClient","apiKey","fetch","HeadersConstructor","req","init","headers","retry","createClient","serviceDomain","retryOption","baseUrl","makeRequest","endpoint","contentId","requestInit","fetchClient","queryString","url","getMessageFromResponse","response","message","bail","error","err","num","customRequestInit","alternateField","draftKey","filters","orders","defaultQueries","totalCount","contentIds","offset","sleep","ms","resolve","isStringArray","arr","item","contents","ids","content","_contents","isDraft"],"mappings":"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","sourcesContent":["/**\n * Parse query.\n *\n * @param {object} queries\n * @return {string} queryString\n */\nimport qs from 'qs';\nimport { isObject } from './isCheckValue';\nimport { MicroCMSQueries } from '../types';\n\nexport const parseQuery = (queries: MicroCMSQueries): string => {\n if (!isObject(queries)) {\n throw new Error('queries is not object');\n }\n const queryString = qs.stringify(queries, { arrayFormat: 'comma' });\n\n return queryString;\n};\n","/**\n * Check object\n *\n * @param {unknown} value\n * @returns {boolean}\n */\nexport const isObject = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object';\n};\n\n/**\n * Check string\n *\n * @param {unknown} value\n * @returns {boolean}\n */\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string';\n};\n","export const BASE_DOMAIN = 'microcms.io';\nexport const API_VERSION = 'v1';\nexport const MAX_RETRY_COUNT = 2;\nexport const MIN_TIMEOUT_MS = 5000;\n","import crossFetch, { Headers as CrossFetchHeaders } from 'cross-fetch';\nimport { Fetch } from 'src/types';\n\nexport const resolveFetch = (customFetch?: Fetch): Fetch => {\n let _fetch: Fetch;\n if (customFetch) {\n _fetch = customFetch;\n } else if (typeof fetch === 'undefined') {\n _fetch = (crossFetch as unknown) as Fetch;\n } else {\n _fetch = fetch;\n }\n return (...args) => _fetch(...args);\n};\n\nexport const resolveHeadersConstructor = () => {\n if (typeof Headers === 'undefined') {\n return CrossFetchHeaders;\n }\n\n return Headers;\n};\n\nexport const generateFetchClient = (\n apiKey: string,\n customFetch?: Fetch\n): Fetch => {\n const fetch = resolveFetch(customFetch);\n const HeadersConstructor = resolveHeadersConstructor();\n\n return async (req, init) => {\n const headers = new HeadersConstructor(init?.headers);\n\n if (!headers.has('X-MICROCMS-API-KEY')) {\n headers.set('X-MICROCMS-API-KEY', apiKey);\n }\n\n return fetch(req, { ...init, headers });\n };\n};\n","/**\n * microCMS API SDK\n * https://github.com/microcmsio/microcms-js-sdk\n */\nimport { parseQuery } from './utils/parseQuery';\nimport { isString } from './utils/isCheckValue';\nimport {\n MicroCMSClient,\n MakeRequest,\n GetRequest,\n GetListRequest,\n GetListDetailRequest,\n GetObjectRequest,\n WriteApiRequestResult,\n CreateRequest,\n MicroCMSListResponse,\n MicroCMSListContent,\n MicroCMSObjectContent,\n UpdateRequest,\n DeleteRequest,\n GetAllContentIdsRequest,\n MicroCMSQueries,\n GetAllContentRequest,\n} from './types';\nimport {\n API_VERSION,\n BASE_DOMAIN,\n MAX_RETRY_COUNT,\n MIN_TIMEOUT_MS,\n} from './utils/constants';\nimport { generateFetchClient } from './lib/fetch';\nimport retry from 'async-retry';\n\n/**\n * Initialize SDK Client\n */\nexport const createClient = ({\n serviceDomain,\n apiKey,\n customFetch,\n retry: retryOption,\n}: MicroCMSClient) => {\n if (!serviceDomain || !apiKey) {\n throw new Error('parameter is required (check serviceDomain and apiKey)');\n }\n\n if (!isString(serviceDomain) || !isString(apiKey)) {\n throw new Error('parameter is not string');\n }\n\n /**\n * Defined microCMS base URL\n */\n const baseUrl = `https://${serviceDomain}.${BASE_DOMAIN}/api/${API_VERSION}`;\n\n /**\n * Make request\n */\n const makeRequest = async ({\n endpoint,\n contentId,\n queries = {},\n requestInit,\n }: MakeRequest) => {\n const fetchClient = generateFetchClient(apiKey, customFetch);\n const queryString = parseQuery(queries);\n const url = `${baseUrl}/${endpoint}${contentId ? `/${contentId}` : ''}${\n queryString ? `?${queryString}` : ''\n }`;\n\n const getMessageFromResponse = async (response: Response) => {\n // Enclose `response.json()` in a try since it may throw an error\n // Only return the `message` if there is a `message`\n try {\n const { message } = await response.json();\n return message ?? null;\n } catch (_) {\n return null;\n }\n };\n\n return await retry(\n async (bail) => {\n try {\n const response = await fetchClient(url, {\n ...requestInit,\n method: requestInit?.method ?? 'GET',\n });\n\n // If a status code in the 400 range other than 429 is returned, do not retry.\n if (\n response.status !== 429 &&\n response.status >= 400 &&\n response.status < 500\n ) {\n const message = await getMessageFromResponse(response);\n\n return bail(\n new Error(\n `fetch API response status: ${response.status}${\n message ? `\\n message is \\`${message}\\`` : ''\n }`,\n ),\n );\n }\n\n // If the response fails with any other status code, retry until the set number of attempts is reached.\n if (!response.ok) {\n const message = await getMessageFromResponse(response);\n\n return Promise.reject(\n new Error(\n `fetch API response status: ${response.status}${\n message ? `\\n message is \\`${message}\\`` : ''\n }`,\n ),\n );\n }\n\n if (requestInit?.method === 'DELETE') return;\n\n return response.json();\n } catch (error) {\n if (error.data) {\n throw error.data;\n }\n\n if (error.response?.data) {\n throw error.response.data;\n }\n\n return Promise.reject(\n new Error(`Network Error.\\n Details: ${error}`),\n );\n }\n },\n {\n retries: retryOption ? MAX_RETRY_COUNT : 0,\n onRetry: (err, num) => {\n console.log(err);\n console.log(`Waiting for retry (${num}/${MAX_RETRY_COUNT})`);\n },\n minTimeout: MIN_TIMEOUT_MS,\n },\n );\n };\n\n /**\n * Get list and object API data for microCMS\n */\n const get = async <T = any>({\n endpoint,\n contentId,\n queries = {},\n customRequestInit,\n }: GetRequest): Promise<T> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n contentId,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n /**\n * Get list API data for microCMS\n */\n const getList = async <T = any>({\n endpoint,\n queries = {},\n customRequestInit,\n }: GetListRequest): Promise<MicroCMSListResponse<T>> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n /**\n * Get list API detail data for microCMS\n */\n const getListDetail = async <T = any>({\n endpoint,\n contentId,\n queries = {},\n customRequestInit,\n }: GetListDetailRequest): Promise<T & MicroCMSListContent> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n contentId,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n /**\n * Get object API data for microCMS\n */\n const getObject = async <T = any>({\n endpoint,\n queries = {},\n customRequestInit,\n }: GetObjectRequest): Promise<T & MicroCMSObjectContent> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n const getAllContentIds = async ({\n endpoint,\n alternateField,\n draftKey,\n filters,\n orders,\n customRequestInit,\n }: GetAllContentIdsRequest): Promise<string[]> => {\n const limit = 100;\n const defaultQueries: MicroCMSQueries = {\n draftKey,\n filters,\n orders,\n limit,\n fields: alternateField ?? 'id',\n depth: 0,\n };\n\n const { totalCount } = await makeRequest({\n endpoint,\n queries: { ...defaultQueries, limit: 0 },\n requestInit: customRequestInit,\n });\n\n let contentIds: string[] = [];\n let offset = 0;\n\n const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n const isStringArray = (arr: unknown[]): arr is string[] =>\n arr.every((item) => typeof item === 'string');\n\n while (contentIds.length < totalCount) {\n const { contents } = (await makeRequest({\n endpoint,\n queries: { ...defaultQueries, offset },\n requestInit: customRequestInit,\n })) as MicroCMSListResponse<Record<string, unknown>>;\n\n const ids = contents.map((content) => content[alternateField ?? 'id']);\n\n if (!isStringArray(ids)) {\n throw new Error(\n 'The value of the field specified by `alternateField` is not a string.',\n );\n }\n\n contentIds = [...contentIds, ...ids];\n\n offset += limit;\n if (contentIds.length < totalCount) {\n await sleep(1000); // sleep for 1 second before the next request\n }\n }\n\n return contentIds;\n };\n\n /**\n * Get all content API data for microCMS\n */\n const getAllContents = async <T = any>({\n endpoint,\n queries = {},\n customRequestInit,\n }: GetAllContentRequest): Promise<(T & MicroCMSListContent)[]> => {\n const limit = 100;\n\n const { totalCount } = await makeRequest({\n endpoint,\n queries: { ...queries, limit: 0 },\n requestInit: customRequestInit,\n });\n\n let contents: (T & MicroCMSListContent)[] = [];\n let offset = 0;\n\n const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n while (contents.length < totalCount) {\n const { contents: _contents } = (await makeRequest({\n endpoint,\n queries: { ...queries, limit, offset },\n requestInit: customRequestInit,\n })) as MicroCMSListResponse<T>;\n\n contents = contents.concat(_contents);\n\n offset += limit;\n if (contents.length < totalCount) {\n await sleep(1000); // sleep for 1 second before the next request\n }\n }\n\n return contents;\n };\n\n /**\n * Create new content in the microCMS list API data\n */\n const create = async <T extends Record<string | number, any>>({\n endpoint,\n contentId,\n content,\n isDraft = false,\n customRequestInit,\n }: CreateRequest<T>): Promise<WriteApiRequestResult> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n\n const queries: MakeRequest['queries'] = isDraft ? { status: 'draft' } : {};\n const requestInit: MakeRequest['requestInit'] = {\n ...customRequestInit,\n method: contentId ? 'PUT' : 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(content),\n };\n\n return makeRequest({\n endpoint,\n contentId,\n queries,\n requestInit,\n });\n };\n\n /**\n * Update content in their microCMS list and object API data\n */\n const update = async <T extends Record<string | number, any>>({\n endpoint,\n contentId,\n content,\n customRequestInit,\n }: UpdateRequest<T>): Promise<WriteApiRequestResult> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n\n const requestInit: MakeRequest['requestInit'] = {\n ...customRequestInit,\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(content),\n };\n\n return makeRequest({\n endpoint,\n contentId,\n requestInit,\n });\n };\n\n /**\n * Delete content in their microCMS list and object API data\n */\n const _delete = async ({\n endpoint,\n contentId,\n customRequestInit,\n }: DeleteRequest): Promise<void> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n\n if (!contentId) {\n return Promise.reject(new Error('contentId is required'));\n }\n\n const requestInit: MakeRequest['requestInit'] = {\n ...customRequestInit,\n method: 'DELETE',\n headers: {},\n body: undefined,\n };\n\n await makeRequest({ endpoint, contentId, requestInit });\n };\n\n return {\n get,\n getList,\n getListDetail,\n getObject,\n getAllContentIds,\n getAllContents,\n create,\n update,\n delete: _delete,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/createClient.ts","../../src/lib/fetch.ts","../../src/utils/constants.ts","../../src/utils/isCheckValue.ts","../../src/utils/parseQuery.ts","../../src/createManagementClient.ts"],"names":["retry","generateFetchClient","apiKey","req","init","headers","BASE_DOMAIN","BASE_MANAGEMENT_DOMAIN","API_VERSION_1","isObject","value","isString","parseQuery","queries","acc","key","createClient","serviceDomain","retryOption","baseUrl","makeRequest","endpoint","contentId","requestInit","fetchClient","queryString","url","getMessageFromResponse","response","message","bail","error","err","num","customRequestInit","alternateField","draftKey","filters","orders","defaultQueries","totalCount","contentIds","offset","sleep","ms","resolve","isStringArray","arr","item","contents","ids","content","_contents","isDraft","createManagementClient","path","apiVersion","data","name","type","customRequestHeaders","formData","chunks","reader","chunk","blob","nameFromURL"],"mappings":"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","sourcesContent":["/**\n * microCMS API SDK\n * https://github.com/microcmsio/microcms-js-sdk\n */\nimport retry from 'async-retry';\nimport { generateFetchClient } from './lib/fetch';\nimport {\n CreateRequest,\n DeleteRequest,\n GetAllContentIdsRequest,\n GetAllContentRequest,\n GetListDetailRequest,\n GetListRequest,\n GetObjectRequest,\n GetRequest,\n MakeRequest,\n MicroCMSClient,\n MicroCMSListContent,\n MicroCMSListResponse,\n MicroCMSObjectContent,\n MicroCMSQueries,\n UpdateRequest,\n WriteApiRequestResult,\n} from './types';\nimport {\n API_VERSION_1,\n BASE_DOMAIN,\n MAX_RETRY_COUNT,\n MIN_TIMEOUT_MS,\n} from './utils/constants';\nimport { isString } from './utils/isCheckValue';\nimport { parseQuery } from './utils/parseQuery';\n\n/**\n * Initialize SDK Client\n */\nexport const createClient = ({\n serviceDomain,\n apiKey,\n retry: retryOption,\n}: MicroCMSClient) => {\n if (!serviceDomain || !apiKey) {\n throw new Error('parameter is required (check serviceDomain and apiKey)');\n }\n\n if (!isString(serviceDomain) || !isString(apiKey)) {\n throw new Error('parameter is not string');\n }\n\n /**\n * Defined microCMS base URL\n */\n const baseUrl = `https://${serviceDomain}.${BASE_DOMAIN}/api/${API_VERSION_1}`;\n\n /**\n * Make request\n */\n const makeRequest = async ({\n endpoint,\n contentId,\n queries = {},\n requestInit,\n }: MakeRequest) => {\n const fetchClient = generateFetchClient(apiKey);\n const queryString = parseQuery(queries);\n const url = `${baseUrl}/${endpoint}${contentId ? `/${contentId}` : ''}${\n queryString ? `?${queryString}` : ''\n }`;\n\n const getMessageFromResponse = async (response: Response) => {\n // Enclose `response.json()` in a try since it may throw an error\n // Only return the `message` if there is a `message`\n try {\n const { message } = await response.json();\n return message ?? null;\n } catch (_) {\n return null;\n }\n };\n\n return await retry(\n async (bail) => {\n let response;\n try {\n response = await fetchClient(url, {\n ...requestInit,\n method: requestInit?.method ?? 'GET',\n });\n\n // If a status code in the 400 range other than 429 is returned, do not retry.\n if (\n response.status !== 429 &&\n response.status >= 400 &&\n response.status < 500\n ) {\n const message = await getMessageFromResponse(response);\n\n return bail(\n new Error(\n `fetch API response status: ${response.status}${\n message ? `\\n message is \\`${message}\\`` : ''\n }`,\n ),\n );\n }\n\n // If the response fails with any other status code, retry until the set number of attempts is reached.\n if (!response.ok) {\n const message = await getMessageFromResponse(response);\n\n return Promise.reject(\n new Error(\n `fetch API response status: ${response.status}${\n message ? `\\n message is \\`${message}\\`` : ''\n }`,\n ),\n );\n }\n\n if (requestInit?.method === 'DELETE') return;\n\n return response.json();\n } catch (error) {\n if (error.data) {\n throw error.data;\n }\n\n if (error.response?.data) {\n throw error.response.data;\n }\n\n return Promise.reject(\n new Error(`Network Error.\\n Details: ${error.message ?? ''}`),\n );\n }\n },\n {\n retries: retryOption ? MAX_RETRY_COUNT : 0,\n onRetry: (err, num) => {\n console.log(err);\n console.log(`Waiting for retry (${num}/${MAX_RETRY_COUNT})`);\n },\n minTimeout: MIN_TIMEOUT_MS,\n },\n );\n };\n\n /**\n * Get list and object API data for microCMS\n */\n const get = async <T = any>({\n endpoint,\n contentId,\n queries = {},\n customRequestInit,\n }: GetRequest): Promise<T> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n contentId,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n /**\n * Get list API data for microCMS\n */\n const getList = async <T = any>({\n endpoint,\n queries = {},\n customRequestInit,\n }: GetListRequest): Promise<MicroCMSListResponse<T>> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n /**\n * Get list API detail data for microCMS\n */\n const getListDetail = async <T = any>({\n endpoint,\n contentId,\n queries = {},\n customRequestInit,\n }: GetListDetailRequest): Promise<T & MicroCMSListContent> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n contentId,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n /**\n * Get object API data for microCMS\n */\n const getObject = async <T = any>({\n endpoint,\n queries = {},\n customRequestInit,\n }: GetObjectRequest): Promise<T & MicroCMSObjectContent> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n return await makeRequest({\n endpoint,\n queries,\n requestInit: customRequestInit,\n });\n };\n\n const getAllContentIds = async ({\n endpoint,\n alternateField,\n draftKey,\n filters,\n orders,\n customRequestInit,\n }: GetAllContentIdsRequest): Promise<string[]> => {\n const limit = 100;\n const defaultQueries: MicroCMSQueries = {\n draftKey,\n filters,\n orders,\n limit,\n fields: alternateField ?? 'id',\n depth: 0,\n };\n\n const { totalCount } = await makeRequest({\n endpoint,\n queries: { ...defaultQueries, limit: 0 },\n requestInit: customRequestInit,\n });\n\n let contentIds: string[] = [];\n let offset = 0;\n\n const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n const isStringArray = (arr: unknown[]): arr is string[] =>\n arr.every((item) => typeof item === 'string');\n\n while (contentIds.length < totalCount) {\n const { contents } = (await makeRequest({\n endpoint,\n queries: { ...defaultQueries, offset },\n requestInit: customRequestInit,\n })) as MicroCMSListResponse<Record<string, unknown>>;\n\n const ids = contents.map((content) => content[alternateField ?? 'id']);\n\n if (!isStringArray(ids)) {\n throw new Error(\n 'The value of the field specified by `alternateField` is not a string.',\n );\n }\n\n contentIds = [...contentIds, ...ids];\n\n offset += limit;\n if (contentIds.length < totalCount) {\n await sleep(1000); // sleep for 1 second before the next request\n }\n }\n\n return contentIds;\n };\n\n /**\n * Get all content API data for microCMS\n */\n const getAllContents = async <T = any>({\n endpoint,\n queries = {},\n customRequestInit,\n }: GetAllContentRequest): Promise<(T & MicroCMSListContent)[]> => {\n const limit = 100;\n\n const { totalCount } = await makeRequest({\n endpoint,\n queries: { ...queries, limit: 0 },\n requestInit: customRequestInit,\n });\n\n let contents: (T & MicroCMSListContent)[] = [];\n let offset = 0;\n\n const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n while (contents.length < totalCount) {\n const { contents: _contents } = (await makeRequest({\n endpoint,\n queries: { ...queries, limit, offset },\n requestInit: customRequestInit,\n })) as MicroCMSListResponse<T>;\n\n contents = contents.concat(_contents);\n\n offset += limit;\n if (contents.length < totalCount) {\n await sleep(1000); // sleep for 1 second before the next request\n }\n }\n\n return contents;\n };\n\n /**\n * Create new content in the microCMS list API data\n */\n const create = async <T extends Record<string | number, any>>({\n endpoint,\n contentId,\n content,\n isDraft = false,\n customRequestInit,\n }: CreateRequest<T>): Promise<WriteApiRequestResult> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n\n const queries: MakeRequest['queries'] = isDraft ? { status: 'draft' } : {};\n const requestInit: MakeRequest['requestInit'] = {\n ...customRequestInit,\n method: contentId ? 'PUT' : 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(content),\n };\n\n return makeRequest({\n endpoint,\n contentId,\n queries,\n requestInit,\n });\n };\n\n /**\n * Update content in their microCMS list and object API data\n */\n const update = async <T extends Record<string | number, any>>({\n endpoint,\n contentId,\n content,\n customRequestInit,\n }: UpdateRequest<T>): Promise<WriteApiRequestResult> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n\n const requestInit: MakeRequest['requestInit'] = {\n ...customRequestInit,\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(content),\n };\n\n return makeRequest({\n endpoint,\n contentId,\n requestInit,\n });\n };\n\n /**\n * Delete content in their microCMS list and object API data\n */\n const _delete = async ({\n endpoint,\n contentId,\n customRequestInit,\n }: DeleteRequest): Promise<void> => {\n if (!endpoint) {\n return Promise.reject(new Error('endpoint is required'));\n }\n\n if (!contentId) {\n return Promise.reject(new Error('contentId is required'));\n }\n\n const requestInit: MakeRequest['requestInit'] = {\n ...customRequestInit,\n method: 'DELETE',\n headers: {},\n body: undefined,\n };\n\n await makeRequest({ endpoint, contentId, requestInit });\n };\n\n return {\n get,\n getList,\n getListDetail,\n getObject,\n getAllContentIds,\n getAllContents,\n create,\n update,\n delete: _delete,\n };\n};\n","import { Fetch } from 'src/types';\n\nexport const generateFetchClient = (apiKey: string): Fetch => {\n return async (req, init) => {\n const headers = new Headers(init?.headers);\n\n if (!headers.has('X-MICROCMS-API-KEY')) {\n headers.set('X-MICROCMS-API-KEY', apiKey);\n }\n\n return fetch(req, { ...init, headers });\n };\n};\n","export const BASE_DOMAIN = 'microcms.io';\nexport const BASE_MANAGEMENT_DOMAIN = 'microcms-management.io';\nexport const API_VERSION_1 = 'v1';\nexport const API_VERSION_2 = 'v2';\nexport const MAX_RETRY_COUNT = 2;\nexport const MIN_TIMEOUT_MS = 5000;\n","/**\n * Check object\n *\n * @param {unknown} value\n * @returns {boolean}\n */\nexport const isObject = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object';\n};\n\n/**\n * Check string\n *\n * @param {unknown} value\n * @returns {boolean}\n */\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string';\n};\n","/**\n * Parse query.\n *\n * @param {object} queries\n * @return {string} queryString\n */\nimport { MicroCMSQueries } from '../types';\nimport { isObject } from './isCheckValue';\n\nexport const parseQuery = (queries: MicroCMSQueries): string => {\n if (!isObject(queries)) {\n throw new Error('queries is not object');\n }\n const queryString = new URLSearchParams(\n Object.entries(queries).reduce(\n (acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n },\n {} as Record<string, string>,\n ),\n ).toString();\n\n return queryString;\n};\n","import { generateFetchClient } from './lib/fetch';\nimport { MicroCMSManagementClient, UploadMediaRequest } from './types';\nimport {\n API_VERSION_1,\n API_VERSION_2,\n BASE_MANAGEMENT_DOMAIN,\n} from './utils/constants';\nimport { isString } from './utils/isCheckValue';\nimport { parseQuery } from './utils/parseQuery';\n\ninterface MakeRequest {\n path: string;\n apiVersion: typeof API_VERSION_1 | typeof API_VERSION_2;\n queries?: Record<string, unknown>;\n requestInit?: RequestInit;\n}\n\nexport const createManagementClient = ({\n serviceDomain,\n apiKey,\n}: MicroCMSManagementClient) => {\n if (!serviceDomain || !apiKey) {\n throw new Error('parameter is required (check serviceDomain and apiKey)');\n }\n\n if (!isString(serviceDomain) || !isString(apiKey)) {\n throw new Error('parameter is not string');\n }\n\n /**\n * Make request\n */\n const makeRequest = async ({\n path,\n apiVersion,\n queries = {},\n requestInit,\n }: MakeRequest) => {\n /**\n * Defined microCMS base URL\n */\n const baseUrl = `https://${serviceDomain}.${BASE_MANAGEMENT_DOMAIN}/api/${apiVersion}`;\n\n const fetchClient = generateFetchClient(apiKey);\n const queryString = parseQuery(queries);\n const url = `${baseUrl}/${path}${queryString ? `?${queryString}` : ''}`;\n\n const getMessageFromResponse = async (response: Response) => {\n // Enclose `response.json()` in a try since it may throw an error\n // Only return the `message` if there is a `message`\n try {\n const { message } = await response.json();\n return message ?? null;\n } catch (_) {\n return null;\n }\n };\n\n let response: Response;\n try {\n response = await fetchClient(url, {\n ...requestInit,\n method: requestInit?.method ?? 'GET',\n });\n } catch (error) {\n if (error.data) {\n throw error.data;\n }\n\n if (error.response?.data) {\n throw error.response.data;\n }\n\n return Promise.reject(\n new Error(`Network Error.\\n Details: ${error.message ?? ''}`),\n );\n }\n\n // If the response fails with any other status code, retry until the set number of attempts is reached.\n if (!response.ok) {\n const message = await getMessageFromResponse(response);\n\n return Promise.reject(\n new Error(\n `fetch API response status: ${response.status}${\n message ? `\\n message is \\`${message}\\`` : ''\n }`,\n ),\n );\n }\n\n return response.json();\n };\n\n const uploadMedia = async ({\n data,\n name,\n type,\n customRequestHeaders,\n }: UploadMediaRequest): Promise<{ url: string }> => {\n const formData = new FormData();\n\n if (data instanceof Blob) {\n // Node.jsではFile APIはnode:bufferからのみサポートされているため、instance of Fileでは判定せずにnameプロパティが存在するかで判定する\n if ((data as File).name) {\n formData.set('file', data, (data as File).name);\n } else {\n if (!name) {\n throw new Error('name is required when data is a Blob');\n }\n formData.set('file', data, name);\n }\n } else if (data instanceof ReadableStream) {\n if (!name) {\n throw new Error('name is required when data is a ReadableStream');\n }\n if (!type) {\n throw new Error('type is required when data is a ReadableStream');\n }\n\n const chunks = [];\n const reader = data.getReader();\n\n let chunk;\n while (!(chunk = await reader.read()).done) {\n chunks.push(chunk.value);\n }\n\n formData.set('file', new Blob(chunks, { type }), name);\n } else if (typeof data === 'string' || data instanceof URL) {\n const url = data instanceof URL ? data : new URL(data);\n const response = await fetch(\n url.toString(),\n customRequestHeaders ? { headers: customRequestHeaders } : undefined,\n );\n const blob = await response.blob();\n const nameFromURL = new URL(response.url).pathname.split('/').pop();\n formData.set('file', blob, name ?? nameFromURL);\n }\n\n return makeRequest({\n path: 'media',\n apiVersion: API_VERSION_1,\n requestInit: { method: 'POST', body: formData },\n });\n };\n\n return {\n uploadMedia,\n };\n};\n"]}
|