UNPKG

@girin/framework

Version:

Core modules for Girin: GraphQL server framework

79 lines 2.94 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const stream_1 = require("stream"); const ObjectStorage_1 = require("../core/ObjectStorage"); class TestObjectStorage extends ObjectStorage_1.ObjectStorage { constructor() { super(...arguments); this.buckets = new Map(); this.nextId = 1; } save(bucket, filename, content) { return new Promise((resolve, reject) => { const buffers = []; if (!content.readable) { throw new Error('Content is not readable'); } content.on('data', (data) => { buffers.push(data); }); content.on('end', () => { const id = String(this.nextId); this.nextId += 1; this.getOrCreateBucket(bucket).set(id, { buffer: Buffer.concat(buffers), filename, }); resolve(this.get(bucket, id)); }); content.on('error', (err) => { reject(err); }); }); } getOrCreateBucket(bucket) { let bucketMap = this.buckets.get(bucket); if (!bucketMap) { bucketMap = new Map(); this.buckets.set(bucket, bucketMap); } return bucketMap; } getEntryOrFail(bucket, id) { const entry = this.getOrCreateBucket(bucket).get(id); if (!entry) { throw new ObjectStorage_1.StorageObjectNotFoundError(id); } return entry; } delete(bucket, id) { return __awaiter(this, void 0, void 0, function* () { this.getEntryOrFail(bucket, id); this.getOrCreateBucket(bucket).delete(id); }); } get(bucket, id) { return __awaiter(this, void 0, void 0, function* () { const { buffer, filename } = this.getEntryOrFail(bucket, id); const dupl = new stream_1.Duplex(); dupl.push(buffer); dupl.push(null); return { id, filename, contentLength: buffer.byteLength, open() { return dupl; } }; }); } } exports.TestObjectStorage = TestObjectStorage; //# sourceMappingURL=TestObjectStorage.js.map