-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathProject.ts
More file actions
81 lines (61 loc) · 1.99 KB
/
Project.ts
File metadata and controls
81 lines (61 loc) · 1.99 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import {
intlMsg,
AnyProjectManifest,
AnyProjectManifestLanguage,
CacheDirectory,
CacheDirectoryConfig,
} from "../";
import { Logger } from "../logging";
import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js";
import { BindOutput } from "@polywrap/schema-bind";
import { Abi } from "@polywrap/schema-parse";
export interface ProjectConfig {
rootDir: string;
logger: Logger;
}
export abstract class Project<TManifest extends AnyProjectManifest> {
protected _cache: CacheDirectory;
constructor(protected _config: ProjectConfig, _cache: CacheDirectoryConfig) {
this._cache = new CacheDirectory(_cache);
}
/// Validation
public static validateManifestLanguage(
language: string | undefined,
manifestLanguages: Record<string, string>,
isManifestLanguage: (language: string) => boolean
): void {
if (!language) {
throw Error(intlMsg.lib_project_language_not_found());
}
if (!isManifestLanguage(language)) {
throw Error(
intlMsg.lib_project_invalid_manifest_language({
language,
validTypes: Object.keys(manifestLanguages).join(", "),
})
);
}
}
/// Abstract Interface
public abstract reset(): void;
public abstract validate(): Promise<void>;
public abstract getName(): Promise<string>;
public abstract getManifest(): Promise<TManifest>;
public abstract getManifestDir(): string;
public abstract getManifestPath(): string;
public abstract getManifestLanguage(): Promise<AnyProjectManifestLanguage>;
public abstract getSchemaNamedPath(): Promise<string>;
public abstract getImportAbis(): Promise<PolywrapManifest["import_abis"]>;
public abstract getGenerationDirectory(
generationSubPath?: string
): Promise<string>;
public abstract generateSchemaBindings(
abi: Abi,
generationSubPath?: string,
bindgenUri?: string,
bindConfig?: Record<string, unknown>
): Promise<BindOutput>;
public get logger(): Logger {
return this._config.logger;
}
}