| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import got from 'got';
- const stringify = (obj) => JSON.stringify(obj, null, 2);
- const parse = (str) => JSON.parse(str, (_, v) => {
- if (
- v !== null &&
- typeof v === 'object' &&
- 'type' in v &&
- v.type === 'Buffer' &&
- 'data' in v &&
- Array.isArray(v.data)) {
- return Buffer.from(v.data);
- }
- return v;
- });
- class CloudDBAdapter {
- constructor(url, {
- serialize = stringify,
- deserialize = parse,
- fetchOptions = {},
- } = {}) {
- this.url = url;
- this.serialize = serialize;
- this.deserialize = deserialize;
- this.fetchOptions = fetchOptions;
- }
- async read() {
- try {
- const res = await got(this.url, {
- method: 'GET',
- headers: {
- 'Accept': 'application/json;q=0.9,text/plain',
- },
- ...this.fetchOptions,
- });
- if (res.statusCode !== 200) throw res.statusMessage;
- return this.deserialize(res.body);
- } catch (e) {
- return null;
- }
- }
- async write(obj) {
- const res = await got(this.url, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- ...this.fetchOptions,
- body: this.serialize(obj),
- });
- if (res.statusCode !== 200) throw res.statusMessage;
- return res.body;
- }
- }
- export default CloudDBAdapter;
|