aboutsummaryrefslogtreecommitdiff
path: root/packages/server/src/git/blob.ts
blob: eebd2d4f5003ecc7f1f6eda35c05a953c26ad52b (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { BlobError, createError } from "./error";
import { Tree } from "./tree";
import { BlobTreeEntry } from "./tree_entry";

/**
 * A representation of a blob
 */
export class Blob {
	private _tree_entry: BlobTreeEntry;

	public path;

	/**
	 * @param entry - A tree entry that's a blob
	 * @param path - A path
	 */
	constructor(entry: BlobTreeEntry, path: string) {
		this._tree_entry = entry;

		this.path = path;
	}

	/**
	 * Returns the blob's content
	 */
	public async content(): Promise<string> {
		return this._tree_entry.content();
	}

	/**
	 * Returns a blob from a path in a tree
	 *
	 * @param tree - The tree to look in
	 * @param path - A path to a blob
	 * @returns An instance of a blob
	 */
	public static async fromPath(tree: Tree, path: string): Promise<Blob> {
		const entry = await tree.find(path);

		if(!(entry instanceof BlobTreeEntry)) {
			throw(createError(BlobError, 500, "Not a blob"));
		}

		return new Blob(entry, path);
	}
}