-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathhyperfile.ts
31 lines (26 loc) · 1.05 KB
/
hyperfile.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { RepoFrontend, HyperfileUrl } from 'hypermerge'
import { Readable } from 'stream'
import { Header } from 'hypermerge/dist/FileStore'
import { FILE_SERVER_PATH } from './constants'
import { toNodeReadable } from '../NodeReadable'
const repo = new RepoFrontend()
repo.files.setServerPath(FILE_SERVER_PATH)
export function isHyperfileUrl(str: string): str is HyperfileUrl {
return str.startsWith('hyperfile:/')
}
export function write(stream: ReadableStream, mimeType: string): Promise<Header> {
return repo.files.write(toNodeReadable(stream), mimeType)
}
export async function fetch(hyperfileUrl: HyperfileUrl): Promise<[Header, Readable]> {
return repo.files.read(hyperfileUrl)
}
// for our bad protocol implementation and our bad pdf implementation
export function streamToBuffer(stream: Readable): Promise<Buffer> {
return new Promise((res, rej) => {
const buffers: Buffer[] = []
stream
.on('data', (data: Buffer) => buffers.push(data))
.on('error', (err: any) => rej(err))
.on('end', () => res(Buffer.concat(buffers)))
})
}