UNPKG

3.13 kBTypeScriptView Raw
1import type { Application } from "../application";
2import { ProjectReflection, type ReflectionVariant, type TypeKindMap } from "../models/index";
3import type { Logger } from "../utils/loggers";
4import type { JSONOutput } from "./index";
5import type { FileRegistry } from "../models/FileRegistry";
6export interface DeserializerComponent {
7 priority: number;
8 supports(model: unknown, obj: unknown): boolean;
9 fromObject(model: unknown, obj: unknown): void;
10}
11export interface Deserializable<T> {
12 fromObject(d: Deserializer, o: T): void;
13}
14export declare class Deserializer {
15 readonly application: Application;
16 private deferred;
17 private deserializers;
18 private activeReflection;
19 constructor(application: Application);
20 get logger(): Logger;
21 reflectionBuilders: {
22 [K in keyof ReflectionVariant]: (parent: NonNullable<ReflectionVariant[K]["parent"]>, obj: JSONOutput.ModelToObject<ReflectionVariant[K]>) => ReflectionVariant[K];
23 };
24 typeBuilders: {
25 [K in keyof TypeKindMap]: (obj: JSONOutput.ModelToObject<TypeKindMap[K]>, de: Deserializer) => TypeKindMap[K];
26 };
27 /**
28 * Only set when deserializing.
29 */
30 projectRoot: string;
31 oldIdToNewId: Record<number, number | undefined>;
32 oldFileIdToNewFileId: Record<number, number | undefined>;
33 project: ProjectReflection | undefined;
34 addDeserializer(de: DeserializerComponent): void;
35 /**
36 * Revive a single project into the structure it was originally created with.
37 * This is generally not appropriate for merging multiple projects since projects may
38 * contain reflections in their root, not inside a module.
39 */
40 reviveProject(projectObj: JSONOutput.ProjectReflection, name: string, projectRoot: string, registry: FileRegistry): ProjectReflection;
41 reviveProjects(name: string, projects: readonly JSONOutput.ProjectReflection[], projectRoot: string, registry: FileRegistry): ProjectReflection;
42 revive<T, U extends Deserializable<T>>(source: NonNullable<T>, creator: (obj: T) => U): U;
43 revive<T, U extends Deserializable<T>>(source: T | undefined, creator: (obj: T) => U): U | undefined;
44 reviveMany<T, U extends Deserializable<T>>(sourceArray: T[], creator: (obj: T) => U): U[];
45 reviveMany<T, U extends Deserializable<T>>(sourceArray: T[] | undefined, creator: (obj: T) => U): U[] | undefined;
46 reviveType<T extends JSONOutput.SomeType>(obj: T): TypeKindMap[T["type"]];
47 reviveType<T extends JSONOutput.SomeType>(obj: T | undefined): TypeKindMap[T["type"]] | undefined;
48 constructReflection<T extends JSONOutput.SomeReflection>(obj: T): ReflectionVariant[T["variant"]];
49 constructType<T extends JSONOutput.SomeType>(obj: T): TypeKindMap[T["type"]];
50 fromObject<T>(receiver: {
51 fromObject(d: Deserializer, o: T): void;
52 }, obj: T): void;
53 /**
54 * Defers work until the initial pass of serialization has been completed.
55 * This can be used to set up references which cannot be immediately restored.
56 *
57 * May only be called when deserializing.
58 */
59 defer(cb: (project: ProjectReflection) => void): void;
60}
61
\No newline at end of file