-
Notifications
You must be signed in to change notification settings - Fork 176
/
Copy pathworkflow_settings.ts
53 lines (46 loc) · 1.6 KB
/
workflow_settings.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { verifyObjectMatchesProto } from "df/common/protos";
import { dataform } from "df/protos/ts";
export function readWorkflowSettings(): dataform.ProjectConfig {
const workflowSettingsYaml = maybeRequire("workflow_settings.yaml");
// `dataform.json` is deprecated; new versions of Dataform Core prefer `workflow_settings.yaml`.
const dataformJson = maybeRequire("dataform.json");
if (workflowSettingsYaml && dataformJson) {
throw Error(
"dataform.json has been deprecated and cannot be defined alongside workflow_settings.yaml"
);
}
if (workflowSettingsYaml) {
const workflowSettingsAsJson = workflowSettingsYaml.asJson();
if (!workflowSettingsAsJson) {
throw Error("workflow_settings.yaml is invalid");
}
verifyWorkflowSettingsAsJson(workflowSettingsAsJson);
return dataform.ProjectConfig.fromObject(workflowSettingsAsJson);
}
if (dataformJson) {
verifyWorkflowSettingsAsJson(dataformJson);
return dataform.ProjectConfig.fromObject(dataformJson);
}
throw Error("Failed to resolve workflow_settings.yaml");
}
function verifyWorkflowSettingsAsJson(workflowSettingsAsJson: object) {
try {
verifyObjectMatchesProto(dataform.ProjectConfig, workflowSettingsAsJson);
} catch (e) {
if (e instanceof ReferenceError) {
throw ReferenceError(`Workflow settings error: ${e.message}`);
}
throw e;
}
}
function maybeRequire(file: string): any {
try {
// tslint:disable-next-line: tsr-detect-non-literal-require
return require(file);
} catch (e) {
if (e instanceof SyntaxError) {
throw e;
}
return undefined;
}
}