-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathserializer.ts
39 lines (34 loc) · 1.08 KB
/
serializer.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
32
33
34
35
36
37
38
39
import {
type ClassLoadHandler,
deserialize,
type DeserializeOptions,
} from "./deserialize.ts";
import { serialize, type SerializeOptions } from "./serialize.ts";
import type { ConstructType } from "./types.ts";
export interface SerializerOptions {
classes?: { [className: string]: ConstructType<unknown> };
loadClass?: ClassLoadHandler;
}
export class Serializer {
#classNames?: Map<ConstructType<unknown>, string>;
constructor(public options?: SerializerOptions) {
}
serialize(value: unknown, options: SerializeOptions = {}): string {
return serialize(value, {
prettify: options.prettify,
classNames: options.classNames ?? (
this.#classNames ??= new Map(
Object.entries(this.options?.classes ?? {}).map((
[key, value],
) => [value, key]),
)
),
});
}
deserialize<T = unknown>(code: string, options: DeserializeOptions = {}): T {
return deserialize<T>(code, {
classes: options?.classes ?? this.options?.classes,
loadClass: options?.loadClass ?? this.options?.loadClass,
});
}
}