fix: update how maps are packed and add missing serialization for media, directory, and files

This commit is contained in:
Derrick Hammer 2023-11-18 05:59:59 -05:00
parent 3cfb4b0464
commit 3fa96aa05a
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
3 changed files with 28 additions and 9 deletions

View File

@ -141,7 +141,7 @@ class DirectoryMetadataDetails {
}
}
class DirectoryReference {
export class DirectoryReference {
created: number;
name: string;
encryptedWriteKey: Uint8Array;
@ -214,7 +214,7 @@ class DirectoryReference {
return map;
}
}
class FileReference {
export class FileReference {
created: number;
file: FileVersion;
history: Map<number, FileVersion> | null;
@ -315,7 +315,7 @@ class FileReference {
}
}
class FileVersion {
export class FileVersion {
ts: number;
encryptedCID?: EncryptedCID;
plaintextCID?: CID;
@ -382,7 +382,7 @@ class FileVersion {
};
}
}
class FileVersionThumbnail {
export class FileVersionThumbnail {
imageType: string | null;
aspectRatio: number;
cid: EncryptedCID;

View File

@ -153,7 +153,7 @@ class MediaMetadataDetails {
}
}
class MediaFormat {
export class MediaFormat {
subtype: string;
role: string | null;
ext: string | null;

View File

@ -1,4 +1,13 @@
import NodeId from "../nodeId.js";
import CID from "#cid.js";
import { MediaFormat } from "#serialization/metadata/media.js";
import {
DirectoryReference,
FileReference,
FileVersion,
FileVersionThumbnail,
} from "#serialization/metadata/directory.js";
import { Buffer } from "buffer";
export default class Packer {
private _bufSize: number;
@ -236,7 +245,7 @@ export default class Packer {
return Buffer.concat(this._builder);
}
public pack(v: any) {
public pack(v: any): this {
if (v === null) {
this.packNull();
} else if (typeof v === "number") {
@ -258,14 +267,24 @@ export default class Packer {
}
} else if (v instanceof Map) {
this.packMapLength(v.size);
for (const [key, value] of v.entries()) {
v.forEach((value, key) => {
this.pack(key);
this.pack(value);
}
});
} else if (
v instanceof MediaFormat ||
v instanceof DirectoryReference ||
v instanceof FileReference ||
v instanceof FileVersion ||
v instanceof FileVersionThumbnail
) {
this.pack(v.encode());
} else if (v instanceof CID) {
this.pack(v.toBytes());
} else if (v instanceof NodeId) {
this.pack(v.bytes);
} else {
throw new Error(`Could not pack ${v.constructor.name}`);
throw new Error(`Could not pack type: ${typeof v}`);
}
return this;