@expo/steps 1.0.263 → 1.0.271
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{dist_commonjs → dist}/AbstractConfigParser.d.ts +5 -5
- package/{dist_commonjs/AbstractConfigParser.cjs → dist/AbstractConfigParser.js} +13 -13
- package/dist/AbstractConfigParser.js.map +1 -0
- package/{dist_commonjs → dist}/BuildConfig.d.ts +4 -3
- package/{dist_commonjs/BuildConfig.cjs → dist/BuildConfig.js} +24 -22
- package/dist/BuildConfig.js.map +1 -0
- package/{dist_esm → dist}/BuildConfigParser.d.ts +5 -5
- package/{dist_commonjs/BuildConfigParser.cjs → dist/BuildConfigParser.js} +33 -32
- package/dist/BuildConfigParser.js.map +1 -0
- package/{dist_esm → dist}/BuildFunction.d.ts +9 -7
- package/{dist_commonjs/BuildFunction.cjs → dist/BuildFunction.js} +9 -7
- package/dist/BuildFunction.js.map +1 -0
- package/{dist_commonjs → dist}/BuildFunctionGroup.d.ts +4 -4
- package/{dist_commonjs/BuildFunctionGroup.cjs → dist/BuildFunctionGroup.js} +4 -4
- package/dist/BuildFunctionGroup.js.map +1 -0
- package/{dist_esm → dist}/BuildStep.d.ts +8 -6
- package/{dist_commonjs/BuildStep.cjs → dist/BuildStep.js} +31 -30
- package/dist/BuildStep.js.map +1 -0
- package/{dist_commonjs → dist}/BuildStepContext.d.ts +7 -3
- package/{dist_commonjs/BuildStepContext.cjs → dist/BuildStepContext.js} +17 -10
- package/dist/BuildStepContext.js.map +1 -0
- package/{dist_esm → dist}/BuildStepInput.d.ts +1 -1
- package/{dist_commonjs/BuildStepInput.cjs → dist/BuildStepInput.js} +12 -12
- package/dist/BuildStepInput.js.map +1 -0
- package/{dist_commonjs → dist}/BuildStepOutput.d.ts +1 -1
- package/{dist_commonjs/BuildStepOutput.cjs → dist/BuildStepOutput.js} +3 -3
- package/dist/BuildStepOutput.js.map +1 -0
- package/{dist_commonjs → dist}/BuildTemporaryFiles.d.ts +1 -1
- package/{dist_commonjs → dist}/BuildTemporaryFiles.js.map +1 -1
- package/{dist_commonjs → dist}/BuildWorkflow.d.ts +4 -3
- package/{dist_commonjs/BuildWorkflow.cjs → dist/BuildWorkflow.js} +17 -0
- package/dist/BuildWorkflow.js.map +1 -0
- package/{dist_commonjs → dist}/BuildWorkflowValidator.d.ts +1 -1
- package/{dist_commonjs/BuildWorkflowValidator.cjs → dist/BuildWorkflowValidator.js} +19 -19
- package/dist/BuildWorkflowValidator.js.map +1 -0
- package/dist/StepMetrics.d.ts +10 -0
- package/dist/StepMetrics.js +3 -0
- package/dist/StepMetrics.js.map +1 -0
- package/{dist_commonjs → dist}/StepsConfigParser.d.ts +5 -5
- package/{dist_commonjs/StepsConfigParser.cjs → dist/StepsConfigParser.js} +14 -13
- package/dist/StepsConfigParser.js.map +1 -0
- package/{dist_esm → dist}/cli/cli.d.ts +3 -3
- package/{dist_commonjs/cli/cli.cjs → dist/cli/cli.js} +6 -6
- package/dist/cli/cli.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/{dist_commonjs/index.cjs → dist/index.js} +30 -30
- package/dist/index.js.map +1 -0
- package/{dist_commonjs/interpolation.cjs → dist/interpolation.js} +3 -3
- package/dist/interpolation.js.map +1 -0
- package/{dist_commonjs/scripts/runCustomFunction.cjs → dist/scripts/runCustomFunction.js} +9 -9
- package/dist/scripts/runCustomFunction.js.map +1 -0
- package/{dist_commonjs → dist}/utils/customFunction.d.ts +4 -4
- package/{dist_commonjs/utils/customFunction.cjs → dist/utils/customFunction.js} +4 -6
- package/dist/utils/customFunction.js.map +1 -0
- package/{dist_commonjs/utils/shell/bin.cjs → dist/utils/shell/bin.js} +1 -3
- package/dist/utils/shell/bin.js.map +1 -0
- package/{dist_commonjs/utils/template.cjs → dist/utils/template.js} +7 -7
- package/dist/utils/template.js.map +1 -0
- package/package.json +12 -24
- package/dist_commonjs/AbstractConfigParser.js.map +0 -1
- package/dist_commonjs/BuildConfig.js.map +0 -1
- package/dist_commonjs/BuildConfigParser.d.ts +0 -33
- package/dist_commonjs/BuildConfigParser.js.map +0 -1
- package/dist_commonjs/BuildFunction.d.ts +0 -43
- package/dist_commonjs/BuildFunction.js.map +0 -1
- package/dist_commonjs/BuildFunctionGroup.js.map +0 -1
- package/dist_commonjs/BuildStep.d.ts +0 -98
- package/dist_commonjs/BuildStep.js.map +0 -1
- package/dist_commonjs/BuildStepContext.js.map +0 -1
- package/dist_commonjs/BuildStepInput.d.ts +0 -47
- package/dist_commonjs/BuildStepInput.js.map +0 -1
- package/dist_commonjs/BuildStepOutput.js.map +0 -1
- package/dist_commonjs/BuildWorkflow.js.map +0 -1
- package/dist_commonjs/BuildWorkflowValidator.js.map +0 -1
- package/dist_commonjs/StepsConfigParser.js.map +0 -1
- package/dist_commonjs/cli/cli.d.ts +0 -18
- package/dist_commonjs/cli/cli.js.map +0 -1
- package/dist_commonjs/index.d.ts +0 -18
- package/dist_commonjs/index.js.map +0 -1
- package/dist_commonjs/interpolation.js.map +0 -1
- package/dist_commonjs/scripts/runCustomFunction.js.map +0 -1
- package/dist_commonjs/utils/customFunction.js.map +0 -1
- package/dist_commonjs/utils/shell/bin.js.map +0 -1
- package/dist_commonjs/utils/template.js.map +0 -1
- package/dist_esm/AbstractConfigParser.d.ts +0 -23
- package/dist_esm/AbstractConfigParser.js +0 -61
- package/dist_esm/AbstractConfigParser.js.map +0 -1
- package/dist_esm/BuildConfig.d.ts +0 -79
- package/dist_esm/BuildConfig.js +0 -279
- package/dist_esm/BuildConfig.js.map +0 -1
- package/dist_esm/BuildConfigParser.js +0 -232
- package/dist_esm/BuildConfigParser.js.map +0 -1
- package/dist_esm/BuildFunction.js +0 -60
- package/dist_esm/BuildFunction.js.map +0 -1
- package/dist_esm/BuildFunctionGroup.d.ts +0 -23
- package/dist_esm/BuildFunctionGroup.js +0 -36
- package/dist_esm/BuildFunctionGroup.js.map +0 -1
- package/dist_esm/BuildRuntimePlatform.d.ts +0 -4
- package/dist_esm/BuildRuntimePlatform.js +0 -6
- package/dist_esm/BuildRuntimePlatform.js.map +0 -1
- package/dist_esm/BuildStep.js +0 -353
- package/dist_esm/BuildStep.js.map +0 -1
- package/dist_esm/BuildStepContext.d.ts +0 -82
- package/dist_esm/BuildStepContext.js +0 -200
- package/dist_esm/BuildStepContext.js.map +0 -1
- package/dist_esm/BuildStepEnv.d.ts +0 -1
- package/dist_esm/BuildStepEnv.js +0 -2
- package/dist_esm/BuildStepEnv.js.map +0 -1
- package/dist_esm/BuildStepInput.js +0 -150
- package/dist_esm/BuildStepInput.js.map +0 -1
- package/dist_esm/BuildStepOutput.d.ts +0 -33
- package/dist_esm/BuildStepOutput.js +0 -57
- package/dist_esm/BuildStepOutput.js.map +0 -1
- package/dist_esm/BuildTemporaryFiles.d.ts +0 -5
- package/dist_esm/BuildTemporaryFiles.js +0 -31
- package/dist_esm/BuildTemporaryFiles.js.map +0 -1
- package/dist_esm/BuildWorkflow.d.ts +0 -13
- package/dist_esm/BuildWorkflow.js +0 -38
- package/dist_esm/BuildWorkflow.js.map +0 -1
- package/dist_esm/BuildWorkflowValidator.d.ts +0 -10
- package/dist_esm/BuildWorkflowValidator.js +0 -121
- package/dist_esm/BuildWorkflowValidator.js.map +0 -1
- package/dist_esm/StepsConfigParser.d.ts +0 -24
- package/dist_esm/StepsConfigParser.js +0 -132
- package/dist_esm/StepsConfigParser.js.map +0 -1
- package/dist_esm/cli/cli.js +0 -61
- package/dist_esm/cli/cli.js.map +0 -1
- package/dist_esm/errors.d.ts +0 -24
- package/dist_esm/errors.js +0 -24
- package/dist_esm/errors.js.map +0 -1
- package/dist_esm/index.d.ts +0 -18
- package/dist_esm/index.js +0 -18
- package/dist_esm/index.js.map +0 -1
- package/dist_esm/interpolation.d.ts +0 -5
- package/dist_esm/interpolation.js +0 -26
- package/dist_esm/interpolation.js.map +0 -1
- package/dist_esm/scripts/runCustomFunction.d.ts +0 -1
- package/dist_esm/scripts/runCustomFunction.js +0 -100
- package/dist_esm/scripts/runCustomFunction.js.map +0 -1
- package/dist_esm/utils/customFunction.d.ts +0 -18
- package/dist_esm/utils/customFunction.js +0 -49
- package/dist_esm/utils/customFunction.js.map +0 -1
- package/dist_esm/utils/expodash/duplicates.d.ts +0 -1
- package/dist_esm/utils/expodash/duplicates.js +0 -14
- package/dist_esm/utils/expodash/duplicates.js.map +0 -1
- package/dist_esm/utils/expodash/uniq.d.ts +0 -1
- package/dist_esm/utils/expodash/uniq.js +0 -5
- package/dist_esm/utils/expodash/uniq.js.map +0 -1
- package/dist_esm/utils/hashFiles.d.ts +0 -6
- package/dist_esm/utils/hashFiles.js +0 -31
- package/dist_esm/utils/hashFiles.js.map +0 -1
- package/dist_esm/utils/jsepEval.d.ts +0 -1
- package/dist_esm/utils/jsepEval.js +0 -169
- package/dist_esm/utils/jsepEval.js.map +0 -1
- package/dist_esm/utils/nullthrows.d.ts +0 -1
- package/dist_esm/utils/nullthrows.js +0 -7
- package/dist_esm/utils/nullthrows.js.map +0 -1
- package/dist_esm/utils/shell/bin.d.ts +0 -1
- package/dist_esm/utils/shell/bin.js +0 -5
- package/dist_esm/utils/shell/bin.js.map +0 -1
- package/dist_esm/utils/shell/command.d.ts +0 -4
- package/dist_esm/utils/shell/command.js +0 -13
- package/dist_esm/utils/shell/command.js.map +0 -1
- package/dist_esm/utils/shell/spawn.d.ts +0 -15
- package/dist_esm/utils/shell/spawn.js +0 -16
- package/dist_esm/utils/shell/spawn.js.map +0 -1
- package/dist_esm/utils/template.d.ts +0 -19
- package/dist_esm/utils/template.js +0 -106
- package/dist_esm/utils/template.js.map +0 -1
- /package/{dist_commonjs → dist}/BuildRuntimePlatform.d.ts +0 -0
- /package/{dist_commonjs/BuildRuntimePlatform.cjs → dist/BuildRuntimePlatform.js} +0 -0
- /package/{dist_commonjs → dist}/BuildRuntimePlatform.js.map +0 -0
- /package/{dist_commonjs → dist}/BuildStepEnv.d.ts +0 -0
- /package/{dist_commonjs/BuildStepEnv.cjs → dist/BuildStepEnv.js} +0 -0
- /package/{dist_commonjs → dist}/BuildStepEnv.js.map +0 -0
- /package/{dist_commonjs/BuildTemporaryFiles.cjs → dist/BuildTemporaryFiles.js} +0 -0
- /package/{dist_commonjs → dist}/errors.d.ts +0 -0
- /package/{dist_commonjs/errors.cjs → dist/errors.js} +0 -0
- /package/{dist_commonjs → dist}/errors.js.map +0 -0
- /package/{dist_commonjs → dist}/interpolation.d.ts +0 -0
- /package/{dist_commonjs → dist}/scripts/runCustomFunction.d.ts +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/duplicates.d.ts +0 -0
- /package/{dist_commonjs/utils/expodash/duplicates.cjs → dist/utils/expodash/duplicates.js} +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/duplicates.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/uniq.d.ts +0 -0
- /package/{dist_commonjs/utils/expodash/uniq.cjs → dist/utils/expodash/uniq.js} +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/uniq.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/hashFiles.d.ts +0 -0
- /package/{dist_commonjs/utils/hashFiles.cjs → dist/utils/hashFiles.js} +0 -0
- /package/{dist_commonjs → dist}/utils/hashFiles.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/jsepEval.d.ts +0 -0
- /package/{dist_commonjs/utils/jsepEval.cjs → dist/utils/jsepEval.js} +0 -0
- /package/{dist_commonjs → dist}/utils/jsepEval.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/nullthrows.d.ts +0 -0
- /package/{dist_commonjs/utils/nullthrows.cjs → dist/utils/nullthrows.js} +0 -0
- /package/{dist_commonjs → dist}/utils/nullthrows.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/shell/bin.d.ts +0 -0
- /package/{dist_commonjs → dist}/utils/shell/command.d.ts +0 -0
- /package/{dist_commonjs/utils/shell/command.cjs → dist/utils/shell/command.js} +0 -0
- /package/{dist_commonjs → dist}/utils/shell/command.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/shell/spawn.d.ts +0 -0
- /package/{dist_commonjs/utils/shell/spawn.cjs → dist/utils/shell/spawn.js} +0 -0
- /package/{dist_commonjs → dist}/utils/shell/spawn.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/template.d.ts +0 -0
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { BuildFunction, BuildFunctionById } from './BuildFunction.js';
|
|
2
|
-
import { BuildFunctionGroup } from './BuildFunctionGroup.js';
|
|
3
|
-
import { BuildStep } from './BuildStep.js';
|
|
4
|
-
import { BuildStepGlobalContext } from './BuildStepContext.js';
|
|
5
|
-
import { BuildWorkflow } from './BuildWorkflow.js';
|
|
6
|
-
export declare abstract class AbstractConfigParser {
|
|
7
|
-
protected readonly ctx: BuildStepGlobalContext;
|
|
8
|
-
protected readonly externalFunctions?: BuildFunction[];
|
|
9
|
-
protected readonly externalFunctionGroups?: BuildFunctionGroup[];
|
|
10
|
-
constructor(ctx: BuildStepGlobalContext, { externalFunctions, externalFunctionGroups, }: {
|
|
11
|
-
externalFunctions?: BuildFunction[];
|
|
12
|
-
externalFunctionGroups?: BuildFunctionGroup[];
|
|
13
|
-
});
|
|
14
|
-
parseAsync(): Promise<BuildWorkflow>;
|
|
15
|
-
protected abstract parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync(): Promise<{
|
|
16
|
-
buildSteps: BuildStep[];
|
|
17
|
-
buildFunctionById: BuildFunctionById;
|
|
18
|
-
}>;
|
|
19
|
-
private validateExternalFunctions;
|
|
20
|
-
private validateExternalFunctionGroups;
|
|
21
|
-
protected getExternalFunctionFullIds(): string[];
|
|
22
|
-
protected getExternalFunctionGroupFullIds(): string[];
|
|
23
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { BuildWorkflow } from './BuildWorkflow.js';
|
|
2
|
-
import { BuildWorkflowValidator } from './BuildWorkflowValidator.js';
|
|
3
|
-
import { BuildConfigError } from './errors.js';
|
|
4
|
-
import { duplicates } from './utils/expodash/duplicates.js';
|
|
5
|
-
import { uniq } from './utils/expodash/uniq.js';
|
|
6
|
-
export class AbstractConfigParser {
|
|
7
|
-
constructor(ctx, { externalFunctions, externalFunctionGroups, }) {
|
|
8
|
-
this.ctx = ctx;
|
|
9
|
-
this.validateExternalFunctions(externalFunctions);
|
|
10
|
-
this.validateExternalFunctionGroups(externalFunctionGroups);
|
|
11
|
-
this.externalFunctions = externalFunctions;
|
|
12
|
-
this.externalFunctionGroups = externalFunctionGroups;
|
|
13
|
-
}
|
|
14
|
-
async parseAsync() {
|
|
15
|
-
const { buildSteps, buildFunctionById } = await this.parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync();
|
|
16
|
-
const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions: buildFunctionById });
|
|
17
|
-
await new BuildWorkflowValidator(workflow).validateAsync();
|
|
18
|
-
return workflow;
|
|
19
|
-
}
|
|
20
|
-
validateExternalFunctions(externalFunctions) {
|
|
21
|
-
if (externalFunctions === undefined) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const externalFunctionIds = externalFunctions.map((f) => f.getFullId());
|
|
25
|
-
const duplicatedExternalFunctionIds = duplicates(externalFunctionIds);
|
|
26
|
-
if (duplicatedExternalFunctionIds.length === 0) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
throw new BuildConfigError(`Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds
|
|
30
|
-
.map((id) => `"${id}"`)
|
|
31
|
-
.join(', ')}`);
|
|
32
|
-
}
|
|
33
|
-
validateExternalFunctionGroups(externalFunctionGroups) {
|
|
34
|
-
if (externalFunctionGroups === undefined) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const externalFunctionGroupIds = externalFunctionGroups.map((f) => f.getFullId());
|
|
38
|
-
const duplicatedExternalFunctionGroupIds = duplicates(externalFunctionGroupIds);
|
|
39
|
-
if (duplicatedExternalFunctionGroupIds.length === 0) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
throw new BuildConfigError(`Provided external function groups with duplicated IDs: ${duplicatedExternalFunctionGroupIds
|
|
43
|
-
.map((id) => `"${id}"`)
|
|
44
|
-
.join(', ')}`);
|
|
45
|
-
}
|
|
46
|
-
getExternalFunctionFullIds() {
|
|
47
|
-
if (this.externalFunctions === undefined) {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
const ids = this.externalFunctions.map((f) => f.getFullId());
|
|
51
|
-
return uniq(ids);
|
|
52
|
-
}
|
|
53
|
-
getExternalFunctionGroupFullIds() {
|
|
54
|
-
if (this.externalFunctionGroups === undefined) {
|
|
55
|
-
return [];
|
|
56
|
-
}
|
|
57
|
-
const ids = this.externalFunctionGroups.map((f) => f.getFullId());
|
|
58
|
-
return uniq(ids);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=AbstractConfigParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractConfigParser.js","sourceRoot":"","sources":["../src/AbstractConfigParser.ts"],"names":[],"mappings":"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","sourcesContent":["import { BuildFunction, BuildFunctionById } from './BuildFunction.js';\nimport { BuildFunctionGroup } from './BuildFunctionGroup.js';\nimport { BuildStep } from './BuildStep.js';\nimport { BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildWorkflowValidator } from './BuildWorkflowValidator.js';\nimport { BuildConfigError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { uniq } from './utils/expodash/uniq.js';\n\nexport abstract class AbstractConfigParser {\n protected readonly externalFunctions?: BuildFunction[];\n protected readonly externalFunctionGroups?: BuildFunctionGroup[];\n\n constructor(\n protected readonly ctx: BuildStepGlobalContext,\n {\n externalFunctions,\n externalFunctionGroups,\n }: {\n externalFunctions?: BuildFunction[];\n externalFunctionGroups?: BuildFunctionGroup[];\n }\n ) {\n this.validateExternalFunctions(externalFunctions);\n this.validateExternalFunctionGroups(externalFunctionGroups);\n\n this.externalFunctions = externalFunctions;\n this.externalFunctionGroups = externalFunctionGroups;\n }\n\n public async parseAsync(): Promise<BuildWorkflow> {\n const { buildSteps, buildFunctionById } =\n await this.parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync();\n const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions: buildFunctionById });\n await new BuildWorkflowValidator(workflow).validateAsync();\n return workflow;\n }\n\n protected abstract parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync(): Promise<{\n buildSteps: BuildStep[];\n buildFunctionById: BuildFunctionById;\n }>;\n\n private validateExternalFunctions(externalFunctions?: BuildFunction[]): void {\n if (externalFunctions === undefined) {\n return;\n }\n const externalFunctionIds = externalFunctions.map((f) => f.getFullId());\n const duplicatedExternalFunctionIds = duplicates(externalFunctionIds);\n if (duplicatedExternalFunctionIds.length === 0) {\n return;\n }\n throw new BuildConfigError(\n `Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n private validateExternalFunctionGroups(externalFunctionGroups?: BuildFunctionGroup[]): void {\n if (externalFunctionGroups === undefined) {\n return;\n }\n const externalFunctionGroupIds = externalFunctionGroups.map((f) => f.getFullId());\n const duplicatedExternalFunctionGroupIds = duplicates(externalFunctionGroupIds);\n if (duplicatedExternalFunctionGroupIds.length === 0) {\n return;\n }\n throw new BuildConfigError(\n `Provided external function groups with duplicated IDs: ${duplicatedExternalFunctionGroupIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n protected getExternalFunctionFullIds(): string[] {\n if (this.externalFunctions === undefined) {\n return [];\n }\n const ids = this.externalFunctions.map((f) => f.getFullId());\n return uniq(ids);\n }\n\n protected getExternalFunctionGroupFullIds(): string[] {\n if (this.externalFunctionGroups === undefined) {\n return [];\n }\n const ids = this.externalFunctionGroups.map((f) => f.getFullId());\n return uniq(ids);\n }\n}\n"]}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import Joi from 'joi';
|
|
2
|
-
import { BuildRuntimePlatform } from './BuildRuntimePlatform.js';
|
|
3
|
-
import { BuildStepInputValueTypeName, BuildStepInputValueType } from './BuildStepInput.js';
|
|
4
|
-
import { BuildStepEnv } from './BuildStepEnv.js';
|
|
5
|
-
export type BuildFunctions = Record<string, BuildFunctionConfig>;
|
|
6
|
-
interface BuildFunctionsConfigFile {
|
|
7
|
-
configFilesToImport?: string[];
|
|
8
|
-
functions?: BuildFunctions;
|
|
9
|
-
}
|
|
10
|
-
export interface BuildConfig extends BuildFunctionsConfigFile {
|
|
11
|
-
build: {
|
|
12
|
-
name?: string;
|
|
13
|
-
steps: BuildStepConfig[];
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export type BuildStepConfig = BuildStepCommandRun | BuildStepBareCommandRun | BuildStepFunctionCall | BuildStepBareFunctionOrFunctionGroupCall;
|
|
17
|
-
export type BuildStepCommandRun = {
|
|
18
|
-
run: BuildFunctionCallConfig & {
|
|
19
|
-
outputs?: BuildStepOutputs;
|
|
20
|
-
command: string;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
export type BuildStepBareCommandRun = {
|
|
24
|
-
run: string;
|
|
25
|
-
};
|
|
26
|
-
export type BuildStepFunctionCall = {
|
|
27
|
-
[functionId: string]: BuildFunctionCallConfig;
|
|
28
|
-
};
|
|
29
|
-
export type BuildStepBareFunctionOrFunctionGroupCall = string;
|
|
30
|
-
export type BuildFunctionCallConfig = {
|
|
31
|
-
id?: string;
|
|
32
|
-
inputs?: BuildStepInputs;
|
|
33
|
-
name?: string;
|
|
34
|
-
workingDirectory?: string;
|
|
35
|
-
shell?: string;
|
|
36
|
-
env?: BuildStepEnv;
|
|
37
|
-
if?: string;
|
|
38
|
-
timeout_minutes?: number;
|
|
39
|
-
};
|
|
40
|
-
export type BuildStepInputs = Record<string, unknown>;
|
|
41
|
-
export type BuildStepOutputs = (string | {
|
|
42
|
-
name: string;
|
|
43
|
-
required?: boolean;
|
|
44
|
-
})[];
|
|
45
|
-
export interface BuildFunctionConfig {
|
|
46
|
-
inputs?: BuildFunctionInputs;
|
|
47
|
-
outputs?: BuildFunctionOutputs;
|
|
48
|
-
name?: string;
|
|
49
|
-
supportedRuntimePlatforms?: BuildRuntimePlatform[];
|
|
50
|
-
shell?: string;
|
|
51
|
-
command?: string;
|
|
52
|
-
path?: string;
|
|
53
|
-
}
|
|
54
|
-
export type BuildFunctionInputs = (string | {
|
|
55
|
-
name: string;
|
|
56
|
-
defaultValue?: BuildStepInputValueType;
|
|
57
|
-
allowedValues?: BuildStepInputValueType[];
|
|
58
|
-
required?: boolean;
|
|
59
|
-
allowedValueType: BuildStepInputValueTypeName;
|
|
60
|
-
})[];
|
|
61
|
-
export type BuildFunctionOutputs = BuildStepOutputs;
|
|
62
|
-
export declare const BuildFunctionsConfigFileSchema: Joi.ObjectSchema<BuildFunctionsConfigFile>;
|
|
63
|
-
export declare const BuildConfigSchema: Joi.ObjectSchema<BuildConfig>;
|
|
64
|
-
interface BuildConfigValidationParams {
|
|
65
|
-
externalFunctionIds?: string[];
|
|
66
|
-
externalFunctionGroupsIds?: string[];
|
|
67
|
-
skipNamespacedFunctionsOrFunctionGroupsCheck?: boolean;
|
|
68
|
-
}
|
|
69
|
-
export declare function readAndValidateBuildConfigFromPathAsync(configPath: string, params?: BuildConfigValidationParams): Promise<BuildConfig>;
|
|
70
|
-
export declare function readAndValidateBuildFunctionsConfigFileAsync(configPath: string): Promise<BuildFunctionsConfigFile>;
|
|
71
|
-
export declare function readRawBuildConfigAsync(configPath: string): Promise<any>;
|
|
72
|
-
export declare function validateConfig<T>(schema: Joi.ObjectSchema<T>, config: object, configFilePath?: string): T;
|
|
73
|
-
export declare function mergeConfigWithImportedFunctions(config: BuildConfig, importedFunctions: BuildFunctions): void;
|
|
74
|
-
export declare function isBuildStepCommandRun(step: BuildStepConfig): step is BuildStepCommandRun;
|
|
75
|
-
export declare function isBuildStepBareCommandRun(step: BuildStepConfig): step is BuildStepBareCommandRun;
|
|
76
|
-
export declare function isBuildStepFunctionCall(step: BuildStepConfig): step is BuildStepFunctionCall;
|
|
77
|
-
export declare function isBuildStepBareFunctionOrFunctionGroupCall(step: BuildStepConfig): step is BuildStepBareFunctionOrFunctionGroupCall;
|
|
78
|
-
export declare function validateAllFunctionsExist(config: BuildConfig, { externalFunctionIds, externalFunctionGroupsIds, skipNamespacedFunctionsOrFunctionGroupsCheck, }: BuildConfigValidationParams): void;
|
|
79
|
-
export {};
|
package/dist_esm/BuildConfig.js
DELETED
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import assert from 'assert';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import Joi from 'joi';
|
|
5
|
-
import YAML from 'yaml';
|
|
6
|
-
import { BuildConfigError, BuildWorkflowError } from './errors.js';
|
|
7
|
-
import { BuildRuntimePlatform } from './BuildRuntimePlatform.js';
|
|
8
|
-
import { BuildStepInputValueTypeName } from './BuildStepInput.js';
|
|
9
|
-
import { BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX } from './utils/template.js';
|
|
10
|
-
const BuildFunctionInputsSchema = Joi.array().items(Joi.alternatives().conditional(Joi.ref('.'), {
|
|
11
|
-
is: Joi.string(),
|
|
12
|
-
then: Joi.string().required(),
|
|
13
|
-
otherwise: Joi.object({
|
|
14
|
-
name: Joi.string().required(),
|
|
15
|
-
defaultValue: Joi.when('allowedValues', {
|
|
16
|
-
is: Joi.exist(),
|
|
17
|
-
then: Joi.valid(Joi.in('allowedValues')).messages({
|
|
18
|
-
'any.only': '{{#label}} must be one of allowed values',
|
|
19
|
-
}),
|
|
20
|
-
})
|
|
21
|
-
.when('allowedValueType', {
|
|
22
|
-
is: BuildStepInputValueTypeName.STRING,
|
|
23
|
-
then: Joi.string().allow(''),
|
|
24
|
-
})
|
|
25
|
-
.when('allowedValueType', {
|
|
26
|
-
is: BuildStepInputValueTypeName.BOOLEAN,
|
|
27
|
-
then: Joi.alternatives(Joi.boolean(), Joi.string().pattern(BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX, 'context or output reference regex pattern')).messages({
|
|
28
|
-
'alternatives.types': '{{#label}} must be a boolean or reference to output or context value',
|
|
29
|
-
}),
|
|
30
|
-
})
|
|
31
|
-
.when('allowedValueType', {
|
|
32
|
-
is: BuildStepInputValueTypeName.NUMBER,
|
|
33
|
-
then: Joi.alternatives(Joi.number(), Joi.string().pattern(BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX, 'context or output reference regex pattern')).messages({
|
|
34
|
-
'alternatives.types': '{{#label}} must be a number or reference to output or context value',
|
|
35
|
-
}),
|
|
36
|
-
})
|
|
37
|
-
.when('allowedValueType', {
|
|
38
|
-
is: BuildStepInputValueTypeName.JSON,
|
|
39
|
-
then: Joi.alternatives(Joi.object(), Joi.string().pattern(BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX, 'context or output reference regex pattern')).messages({
|
|
40
|
-
'alternatives.types': '{{#label}} must be a object or reference to output or context value',
|
|
41
|
-
}),
|
|
42
|
-
}),
|
|
43
|
-
allowedValues: Joi.when('allowedValueType', {
|
|
44
|
-
is: BuildStepInputValueTypeName.STRING,
|
|
45
|
-
then: Joi.array().items(Joi.string().allow('')),
|
|
46
|
-
})
|
|
47
|
-
.when('allowedValueType', {
|
|
48
|
-
is: BuildStepInputValueTypeName.BOOLEAN,
|
|
49
|
-
then: Joi.array().items(Joi.boolean()),
|
|
50
|
-
})
|
|
51
|
-
.when('allowedValueType', {
|
|
52
|
-
is: BuildStepInputValueTypeName.NUMBER,
|
|
53
|
-
then: Joi.array().items(Joi.number()),
|
|
54
|
-
})
|
|
55
|
-
.when('allowedValueType', {
|
|
56
|
-
is: BuildStepInputValueTypeName.JSON,
|
|
57
|
-
then: Joi.array().items(Joi.object()),
|
|
58
|
-
}),
|
|
59
|
-
allowedValueType: Joi.string()
|
|
60
|
-
.valid(...Object.values(BuildStepInputValueTypeName))
|
|
61
|
-
.default(BuildStepInputValueTypeName.STRING),
|
|
62
|
-
required: Joi.boolean(),
|
|
63
|
-
})
|
|
64
|
-
.rename('allowed_values', 'allowedValues')
|
|
65
|
-
.rename('default_value', 'defaultValue')
|
|
66
|
-
.rename('type', 'allowedValueType')
|
|
67
|
-
.required(),
|
|
68
|
-
}));
|
|
69
|
-
const BuildStepOutputsSchema = Joi.array().items(Joi.alternatives().try(Joi.string().required(), Joi.object({
|
|
70
|
-
name: Joi.string().required(),
|
|
71
|
-
required: Joi.boolean(),
|
|
72
|
-
}).required()));
|
|
73
|
-
const BuildFunctionCallSchema = Joi.object({
|
|
74
|
-
id: Joi.string(),
|
|
75
|
-
inputs: Joi.object().pattern(Joi.string(), Joi.alternatives().try(Joi.string().allow(''), Joi.boolean(), Joi.number(), Joi.object())),
|
|
76
|
-
name: Joi.string(),
|
|
77
|
-
workingDirectory: Joi.string(),
|
|
78
|
-
shell: Joi.string(),
|
|
79
|
-
env: Joi.object().pattern(Joi.string(), Joi.string().allow('')),
|
|
80
|
-
if: Joi.string(),
|
|
81
|
-
timeout_minutes: Joi.number().positive(),
|
|
82
|
-
}).rename('working_directory', 'workingDirectory');
|
|
83
|
-
const BuildStepConfigSchema = Joi.any()
|
|
84
|
-
.invalid(null)
|
|
85
|
-
.when(Joi.object().pattern(Joi.string().disallow('run').required(), Joi.object().unknown().required()), {
|
|
86
|
-
then: Joi.object().pattern(Joi.string().disallow('run').min(1).required(), BuildFunctionCallSchema.required(), { matches: Joi.array().length(1) }),
|
|
87
|
-
})
|
|
88
|
-
.when(Joi.object({ run: Joi.object().unknown().required() }), {
|
|
89
|
-
then: Joi.object({
|
|
90
|
-
run: BuildFunctionCallSchema.keys({
|
|
91
|
-
outputs: BuildStepOutputsSchema,
|
|
92
|
-
command: Joi.string().required(),
|
|
93
|
-
}),
|
|
94
|
-
}),
|
|
95
|
-
})
|
|
96
|
-
.when(Joi.object({ run: Joi.string().required() }), {
|
|
97
|
-
then: Joi.object({
|
|
98
|
-
run: Joi.string().min(1).required(),
|
|
99
|
-
}),
|
|
100
|
-
})
|
|
101
|
-
.when(Joi.string(), {
|
|
102
|
-
then: Joi.string().min(1),
|
|
103
|
-
});
|
|
104
|
-
const BuildFunctionConfigSchema = Joi.object({
|
|
105
|
-
name: Joi.string(),
|
|
106
|
-
supportedRuntimePlatforms: Joi.array().items(...Object.values(BuildRuntimePlatform)),
|
|
107
|
-
inputs: BuildFunctionInputsSchema,
|
|
108
|
-
outputs: BuildStepOutputsSchema,
|
|
109
|
-
command: Joi.string(),
|
|
110
|
-
path: Joi.string(),
|
|
111
|
-
shell: Joi.string(),
|
|
112
|
-
})
|
|
113
|
-
.rename('supported_platforms', 'supportedRuntimePlatforms')
|
|
114
|
-
.xor('command', 'path')
|
|
115
|
-
.nand('command', 'path');
|
|
116
|
-
export const BuildFunctionsConfigFileSchema = Joi.object({
|
|
117
|
-
configFilesToImport: Joi.array().items(Joi.string().pattern(/\.y(a)?ml$/)),
|
|
118
|
-
functions: Joi.object().pattern(Joi.string()
|
|
119
|
-
.pattern(/^[\w-]+$/, 'function names')
|
|
120
|
-
.min(1)
|
|
121
|
-
.required()
|
|
122
|
-
.disallow('run'), BuildFunctionConfigSchema.required()),
|
|
123
|
-
})
|
|
124
|
-
.rename('import', 'configFilesToImport')
|
|
125
|
-
.required();
|
|
126
|
-
export const BuildConfigSchema = BuildFunctionsConfigFileSchema.append({
|
|
127
|
-
build: Joi.object({
|
|
128
|
-
name: Joi.string(),
|
|
129
|
-
steps: Joi.array().items(BuildStepConfigSchema.required()).required(),
|
|
130
|
-
}).required(),
|
|
131
|
-
}).required();
|
|
132
|
-
export async function readAndValidateBuildConfigFromPathAsync(configPath, params = {}) {
|
|
133
|
-
const rawConfig = await readRawBuildConfigAsync(configPath);
|
|
134
|
-
const config = validateConfig(BuildConfigSchema, rawConfig);
|
|
135
|
-
for (const functionName in config.functions) {
|
|
136
|
-
const customFunctionPath = config.functions[functionName].path;
|
|
137
|
-
if (customFunctionPath) {
|
|
138
|
-
config.functions[functionName].path = maybeResolveCustomFunctionRelativePath(path.dirname(configPath), customFunctionPath);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
const importedFunctions = await importFunctionsAsync(configPath, config.configFilesToImport);
|
|
142
|
-
mergeConfigWithImportedFunctions(config, importedFunctions);
|
|
143
|
-
validateAllFunctionsExist(config, params);
|
|
144
|
-
return config;
|
|
145
|
-
}
|
|
146
|
-
async function importFunctionsAsync(baseConfigPath, configPathsToImport) {
|
|
147
|
-
if (!configPathsToImport) {
|
|
148
|
-
return {};
|
|
149
|
-
}
|
|
150
|
-
const baseConfigDir = path.dirname(baseConfigPath);
|
|
151
|
-
const errors = [];
|
|
152
|
-
const importedFunctions = {};
|
|
153
|
-
// this is a set of visited files identified by ABSOLUTE paths
|
|
154
|
-
const visitedFiles = new Set([baseConfigPath]);
|
|
155
|
-
const configFilesToVisit = (configPathsToImport !== null && configPathsToImport !== void 0 ? configPathsToImport : []).map((childConfigRelativePath) => path.resolve(baseConfigDir, childConfigRelativePath));
|
|
156
|
-
while (configFilesToVisit.length > 0) {
|
|
157
|
-
const childConfigPath = configFilesToVisit.shift();
|
|
158
|
-
assert(childConfigPath, 'Guaranteed by loop condition');
|
|
159
|
-
if (visitedFiles.has(childConfigPath)) {
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
visitedFiles.add(childConfigPath);
|
|
163
|
-
try {
|
|
164
|
-
const childConfig = await readAndValidateBuildFunctionsConfigFileAsync(childConfigPath);
|
|
165
|
-
const childDir = path.dirname(childConfigPath);
|
|
166
|
-
for (const functionName in childConfig.functions) {
|
|
167
|
-
if (!(functionName in importedFunctions)) {
|
|
168
|
-
const f = childConfig.functions[functionName];
|
|
169
|
-
if (f.path) {
|
|
170
|
-
f.path = maybeResolveCustomFunctionRelativePath(childDir, f.path);
|
|
171
|
-
}
|
|
172
|
-
importedFunctions[functionName] = f;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (childConfig.configFilesToImport) {
|
|
176
|
-
configFilesToVisit.push(...childConfig.configFilesToImport.map((relativePath) => path.resolve(childDir, relativePath)));
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
if (err instanceof BuildConfigError) {
|
|
181
|
-
errors.push(err);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
throw err;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
if (errors.length > 0) {
|
|
189
|
-
throw new BuildWorkflowError(`Detected build config errors in imported files.`, errors);
|
|
190
|
-
}
|
|
191
|
-
return importedFunctions;
|
|
192
|
-
}
|
|
193
|
-
export async function readAndValidateBuildFunctionsConfigFileAsync(configPath) {
|
|
194
|
-
const rawConfig = await readRawBuildConfigAsync(configPath);
|
|
195
|
-
return validateConfig(BuildFunctionsConfigFileSchema, rawConfig);
|
|
196
|
-
}
|
|
197
|
-
export async function readRawBuildConfigAsync(configPath) {
|
|
198
|
-
const contents = await fs.readFile(configPath, 'utf-8');
|
|
199
|
-
return YAML.parse(contents);
|
|
200
|
-
}
|
|
201
|
-
export function validateConfig(schema, config, configFilePath) {
|
|
202
|
-
const { error, value } = schema.validate(config, {
|
|
203
|
-
allowUnknown: false,
|
|
204
|
-
abortEarly: false,
|
|
205
|
-
});
|
|
206
|
-
if (error) {
|
|
207
|
-
const errorMessage = error.details.map(({ message }) => message).join(', ');
|
|
208
|
-
throw new BuildConfigError(errorMessage, {
|
|
209
|
-
cause: error,
|
|
210
|
-
...(configFilePath && { metadata: { configFilePath } }),
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
return value;
|
|
214
|
-
}
|
|
215
|
-
export function mergeConfigWithImportedFunctions(config, importedFunctions) {
|
|
216
|
-
var _a;
|
|
217
|
-
if (Object.keys(importedFunctions).length === 0) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
config.functions = (_a = config.functions) !== null && _a !== void 0 ? _a : {};
|
|
221
|
-
for (const functionName in importedFunctions) {
|
|
222
|
-
if (!(functionName in config.functions)) {
|
|
223
|
-
config.functions[functionName] = importedFunctions[functionName];
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
export function isBuildStepCommandRun(step) {
|
|
228
|
-
return Boolean(step) && typeof step === 'object' && typeof step.run === 'object';
|
|
229
|
-
}
|
|
230
|
-
export function isBuildStepBareCommandRun(step) {
|
|
231
|
-
return Boolean(step) && typeof step === 'object' && typeof step.run === 'string';
|
|
232
|
-
}
|
|
233
|
-
export function isBuildStepFunctionCall(step) {
|
|
234
|
-
return Boolean(step) && typeof step === 'object' && !('run' in step);
|
|
235
|
-
}
|
|
236
|
-
export function isBuildStepBareFunctionOrFunctionGroupCall(step) {
|
|
237
|
-
return typeof step === 'string';
|
|
238
|
-
}
|
|
239
|
-
export function validateAllFunctionsExist(config, { externalFunctionIds = [], externalFunctionGroupsIds = [], skipNamespacedFunctionsOrFunctionGroupsCheck, }) {
|
|
240
|
-
const calledFunctionsOrFunctionGroupsSet = new Set();
|
|
241
|
-
for (const step of config.build.steps) {
|
|
242
|
-
if (typeof step === 'string') {
|
|
243
|
-
calledFunctionsOrFunctionGroupsSet.add(step);
|
|
244
|
-
}
|
|
245
|
-
else if (step !== null && !('run' in step)) {
|
|
246
|
-
const keys = Object.keys(step);
|
|
247
|
-
assert(keys.length === 1, 'There must be at most one function call in the step (enforced by joi).');
|
|
248
|
-
calledFunctionsOrFunctionGroupsSet.add(keys[0]);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
const calledFunctionsOrFunctionGroup = Array.from(calledFunctionsOrFunctionGroupsSet);
|
|
252
|
-
const externalFunctionIdsSet = new Set(externalFunctionIds);
|
|
253
|
-
const externalFunctionGroupsIdsSet = new Set(externalFunctionGroupsIds);
|
|
254
|
-
const nonExistentFunctionsOrFunctionGroups = calledFunctionsOrFunctionGroup.filter((calledFunctionOrFunctionGroup) => {
|
|
255
|
-
var _a;
|
|
256
|
-
if (isFullIdNamespaced(calledFunctionOrFunctionGroup) &&
|
|
257
|
-
skipNamespacedFunctionsOrFunctionGroupsCheck) {
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
260
|
-
return (!(calledFunctionOrFunctionGroup in ((_a = config.functions) !== null && _a !== void 0 ? _a : {})) &&
|
|
261
|
-
!externalFunctionIdsSet.has(calledFunctionOrFunctionGroup) &&
|
|
262
|
-
!externalFunctionGroupsIdsSet.has(calledFunctionOrFunctionGroup));
|
|
263
|
-
});
|
|
264
|
-
if (nonExistentFunctionsOrFunctionGroups.length > 0) {
|
|
265
|
-
throw new BuildConfigError(`Calling non-existent functions: ${nonExistentFunctionsOrFunctionGroups
|
|
266
|
-
.map((f) => `"${f}"`)
|
|
267
|
-
.join(', ')}.`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
function maybeResolveCustomFunctionRelativePath(dir, customFunctionPath) {
|
|
271
|
-
if (!path.isAbsolute(customFunctionPath)) {
|
|
272
|
-
return path.resolve(dir, customFunctionPath);
|
|
273
|
-
}
|
|
274
|
-
return customFunctionPath;
|
|
275
|
-
}
|
|
276
|
-
function isFullIdNamespaced(fullId) {
|
|
277
|
-
return fullId.includes('/');
|
|
278
|
-
}
|
|
279
|
-
//# sourceMappingURL=BuildConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BuildConfig.js","sourceRoot":"","sources":["../src/BuildConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport Joi from 'joi';\nimport YAML from 'yaml';\n\nimport { BuildConfigError, BuildWorkflowError } from './errors.js';\nimport { BuildRuntimePlatform } from './BuildRuntimePlatform.js';\nimport { BuildStepInputValueTypeName, BuildStepInputValueType } from './BuildStepInput.js';\nimport { BuildStepEnv } from './BuildStepEnv.js';\nimport { BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX } from './utils/template.js';\n\nexport type BuildFunctions = Record<string, BuildFunctionConfig>;\n\ninterface BuildFunctionsConfigFile {\n configFilesToImport?: string[];\n functions?: BuildFunctions;\n}\n\nexport interface BuildConfig extends BuildFunctionsConfigFile {\n build: {\n name?: string;\n steps: BuildStepConfig[];\n };\n}\n\nexport type BuildStepConfig =\n | BuildStepCommandRun\n | BuildStepBareCommandRun\n | BuildStepFunctionCall\n | BuildStepBareFunctionOrFunctionGroupCall;\n\nexport type BuildStepCommandRun = {\n run: BuildFunctionCallConfig & {\n outputs?: BuildStepOutputs;\n command: string;\n };\n};\nexport type BuildStepBareCommandRun = { run: string };\nexport type BuildStepFunctionCall = {\n [functionId: string]: BuildFunctionCallConfig;\n};\nexport type BuildStepBareFunctionOrFunctionGroupCall = string;\n\nexport type BuildFunctionCallConfig = {\n id?: string;\n inputs?: BuildStepInputs;\n name?: string;\n workingDirectory?: string;\n shell?: string;\n env?: BuildStepEnv;\n if?: string;\n timeout_minutes?: number;\n};\n\nexport type BuildStepInputs = Record<string, unknown>;\nexport type BuildStepOutputs = (\n | string\n | {\n name: string;\n required?: boolean;\n }\n)[];\n\nexport interface BuildFunctionConfig {\n inputs?: BuildFunctionInputs;\n outputs?: BuildFunctionOutputs;\n name?: string;\n supportedRuntimePlatforms?: BuildRuntimePlatform[];\n shell?: string;\n command?: string;\n path?: string;\n}\n\nexport type BuildFunctionInputs = (\n | string\n | {\n name: string;\n defaultValue?: BuildStepInputValueType;\n allowedValues?: BuildStepInputValueType[];\n required?: boolean;\n allowedValueType: BuildStepInputValueTypeName;\n }\n)[];\nexport type BuildFunctionOutputs = BuildStepOutputs;\n\nconst BuildFunctionInputsSchema = Joi.array().items(\n Joi.alternatives().conditional(Joi.ref('.'), {\n is: Joi.string(),\n then: Joi.string().required(),\n otherwise: Joi.object({\n name: Joi.string().required(),\n defaultValue: Joi.when('allowedValues', {\n is: Joi.exist(),\n then: Joi.valid(Joi.in('allowedValues')).messages({\n 'any.only': '{{#label}} must be one of allowed values',\n }),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.STRING,\n then: Joi.string().allow(''),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.BOOLEAN,\n then: Joi.alternatives(\n Joi.boolean(),\n Joi.string().pattern(\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n 'context or output reference regex pattern'\n )\n ).messages({\n 'alternatives.types':\n '{{#label}} must be a boolean or reference to output or context value',\n }),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.NUMBER,\n then: Joi.alternatives(\n Joi.number(),\n Joi.string().pattern(\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n 'context or output reference regex pattern'\n )\n ).messages({\n 'alternatives.types':\n '{{#label}} must be a number or reference to output or context value',\n }),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.JSON,\n then: Joi.alternatives(\n Joi.object(),\n Joi.string().pattern(\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n 'context or output reference regex pattern'\n )\n ).messages({\n 'alternatives.types':\n '{{#label}} must be a object or reference to output or context value',\n }),\n }),\n allowedValues: Joi.when('allowedValueType', {\n is: BuildStepInputValueTypeName.STRING,\n then: Joi.array().items(Joi.string().allow('')),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.BOOLEAN,\n then: Joi.array().items(Joi.boolean()),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.NUMBER,\n then: Joi.array().items(Joi.number()),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.JSON,\n then: Joi.array().items(Joi.object()),\n }),\n allowedValueType: Joi.string()\n .valid(...Object.values(BuildStepInputValueTypeName))\n .default(BuildStepInputValueTypeName.STRING),\n required: Joi.boolean(),\n })\n .rename('allowed_values', 'allowedValues')\n .rename('default_value', 'defaultValue')\n .rename('type', 'allowedValueType')\n .required(),\n })\n);\n\nconst BuildStepOutputsSchema = Joi.array().items(\n Joi.alternatives().try(\n Joi.string().required(),\n Joi.object({\n name: Joi.string().required(),\n required: Joi.boolean(),\n }).required()\n )\n);\n\nconst BuildFunctionCallSchema = Joi.object({\n id: Joi.string(),\n inputs: Joi.object().pattern(\n Joi.string(),\n Joi.alternatives().try(Joi.string().allow(''), Joi.boolean(), Joi.number(), Joi.object())\n ),\n name: Joi.string(),\n workingDirectory: Joi.string(),\n shell: Joi.string(),\n env: Joi.object().pattern(Joi.string(), Joi.string().allow('')),\n if: Joi.string(),\n timeout_minutes: Joi.number().positive(),\n}).rename('working_directory', 'workingDirectory');\n\nconst BuildStepConfigSchema = Joi.any<BuildStepConfig>()\n .invalid(null)\n .when(\n Joi.object().pattern(\n Joi.string().disallow('run').required(),\n Joi.object().unknown().required()\n ),\n {\n then: Joi.object().pattern(\n Joi.string().disallow('run').min(1).required(),\n BuildFunctionCallSchema.required(),\n { matches: Joi.array().length(1) }\n ),\n }\n )\n .when(Joi.object({ run: Joi.object().unknown().required() }), {\n then: Joi.object({\n run: BuildFunctionCallSchema.keys({\n outputs: BuildStepOutputsSchema,\n command: Joi.string().required(),\n }),\n }),\n })\n .when(Joi.object({ run: Joi.string().required() }), {\n then: Joi.object({\n run: Joi.string().min(1).required(),\n }),\n })\n .when(Joi.string(), {\n then: Joi.string().min(1),\n });\n\nconst BuildFunctionConfigSchema = Joi.object({\n name: Joi.string(),\n supportedRuntimePlatforms: Joi.array().items(...Object.values(BuildRuntimePlatform)),\n inputs: BuildFunctionInputsSchema,\n outputs: BuildStepOutputsSchema,\n command: Joi.string(),\n path: Joi.string(),\n shell: Joi.string(),\n})\n .rename('supported_platforms', 'supportedRuntimePlatforms')\n .xor('command', 'path')\n .nand('command', 'path');\n\nexport const BuildFunctionsConfigFileSchema = Joi.object<BuildFunctionsConfigFile>({\n configFilesToImport: Joi.array().items(Joi.string().pattern(/\\.y(a)?ml$/)),\n functions: Joi.object().pattern(\n Joi.string()\n .pattern(/^[\\w-]+$/, 'function names')\n .min(1)\n .required()\n .disallow('run'),\n BuildFunctionConfigSchema.required()\n ),\n})\n .rename('import', 'configFilesToImport')\n .required();\n\nexport const BuildConfigSchema = BuildFunctionsConfigFileSchema.append<BuildConfig>({\n build: Joi.object({\n name: Joi.string(),\n steps: Joi.array().items(BuildStepConfigSchema.required()).required(),\n }).required(),\n}).required();\n\ninterface BuildConfigValidationParams {\n externalFunctionIds?: string[];\n externalFunctionGroupsIds?: string[];\n skipNamespacedFunctionsOrFunctionGroupsCheck?: boolean;\n}\n\nexport async function readAndValidateBuildConfigFromPathAsync(\n configPath: string,\n params: BuildConfigValidationParams = {}\n): Promise<BuildConfig> {\n const rawConfig = await readRawBuildConfigAsync(configPath);\n\n const config = validateConfig(BuildConfigSchema, rawConfig);\n for (const functionName in config.functions) {\n const customFunctionPath = config.functions[functionName].path;\n if (customFunctionPath) {\n config.functions[functionName].path = maybeResolveCustomFunctionRelativePath(\n path.dirname(configPath),\n customFunctionPath\n );\n }\n }\n\n const importedFunctions = await importFunctionsAsync(configPath, config.configFilesToImport);\n mergeConfigWithImportedFunctions(config, importedFunctions);\n validateAllFunctionsExist(config, params);\n return config;\n}\n\nasync function importFunctionsAsync(\n baseConfigPath: string,\n configPathsToImport?: string[]\n): Promise<BuildFunctions> {\n if (!configPathsToImport) {\n return {};\n }\n\n const baseConfigDir = path.dirname(baseConfigPath);\n\n const errors: BuildConfigError[] = [];\n const importedFunctions: BuildFunctions = {};\n // this is a set of visited files identified by ABSOLUTE paths\n const visitedFiles = new Set<string>([baseConfigPath]);\n const configFilesToVisit = (configPathsToImport ?? []).map((childConfigRelativePath) =>\n path.resolve(baseConfigDir, childConfigRelativePath)\n );\n while (configFilesToVisit.length > 0) {\n const childConfigPath = configFilesToVisit.shift();\n assert(childConfigPath, 'Guaranteed by loop condition');\n if (visitedFiles.has(childConfigPath)) {\n continue;\n }\n visitedFiles.add(childConfigPath);\n try {\n const childConfig = await readAndValidateBuildFunctionsConfigFileAsync(childConfigPath);\n const childDir = path.dirname(childConfigPath);\n for (const functionName in childConfig.functions) {\n if (!(functionName in importedFunctions)) {\n const f = childConfig.functions[functionName];\n if (f.path) {\n f.path = maybeResolveCustomFunctionRelativePath(childDir, f.path);\n }\n importedFunctions[functionName] = f;\n }\n }\n if (childConfig.configFilesToImport) {\n configFilesToVisit.push(\n ...childConfig.configFilesToImport.map((relativePath) =>\n path.resolve(childDir, relativePath)\n )\n );\n }\n } catch (err) {\n if (err instanceof BuildConfigError) {\n errors.push(err);\n } else {\n throw err;\n }\n }\n }\n if (errors.length > 0) {\n throw new BuildWorkflowError(`Detected build config errors in imported files.`, errors);\n }\n return importedFunctions;\n}\n\nexport async function readAndValidateBuildFunctionsConfigFileAsync(\n configPath: string\n): Promise<BuildFunctionsConfigFile> {\n const rawConfig = await readRawBuildConfigAsync(configPath);\n return validateConfig(BuildFunctionsConfigFileSchema, rawConfig);\n}\n\nexport async function readRawBuildConfigAsync(configPath: string): Promise<any> {\n const contents = await fs.readFile(configPath, 'utf-8');\n return YAML.parse(contents);\n}\n\nexport function validateConfig<T>(\n schema: Joi.ObjectSchema<T>,\n config: object,\n configFilePath?: string\n): T {\n const { error, value } = schema.validate(config, {\n allowUnknown: false,\n abortEarly: false,\n });\n if (error) {\n const errorMessage = error.details.map(({ message }) => message).join(', ');\n throw new BuildConfigError(errorMessage, {\n cause: error,\n ...(configFilePath && { metadata: { configFilePath } }),\n });\n }\n return value;\n}\n\nexport function mergeConfigWithImportedFunctions(\n config: BuildConfig,\n importedFunctions: BuildFunctions\n): void {\n if (Object.keys(importedFunctions).length === 0) {\n return;\n }\n config.functions = config.functions ?? {};\n for (const functionName in importedFunctions) {\n if (!(functionName in config.functions)) {\n config.functions[functionName] = importedFunctions[functionName];\n }\n }\n}\n\nexport function isBuildStepCommandRun(step: BuildStepConfig): step is BuildStepCommandRun {\n return Boolean(step) && typeof step === 'object' && typeof step.run === 'object';\n}\n\nexport function isBuildStepBareCommandRun(step: BuildStepConfig): step is BuildStepBareCommandRun {\n return Boolean(step) && typeof step === 'object' && typeof step.run === 'string';\n}\n\nexport function isBuildStepFunctionCall(step: BuildStepConfig): step is BuildStepFunctionCall {\n return Boolean(step) && typeof step === 'object' && !('run' in step);\n}\n\nexport function isBuildStepBareFunctionOrFunctionGroupCall(\n step: BuildStepConfig\n): step is BuildStepBareFunctionOrFunctionGroupCall {\n return typeof step === 'string';\n}\n\nexport function validateAllFunctionsExist(\n config: BuildConfig,\n {\n externalFunctionIds = [],\n externalFunctionGroupsIds = [],\n skipNamespacedFunctionsOrFunctionGroupsCheck,\n }: BuildConfigValidationParams\n): void {\n const calledFunctionsOrFunctionGroupsSet = new Set<string>();\n for (const step of config.build.steps) {\n if (typeof step === 'string') {\n calledFunctionsOrFunctionGroupsSet.add(step);\n } else if (step !== null && !('run' in step)) {\n const keys = Object.keys(step);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n calledFunctionsOrFunctionGroupsSet.add(keys[0]);\n }\n }\n const calledFunctionsOrFunctionGroup = Array.from(calledFunctionsOrFunctionGroupsSet);\n const externalFunctionIdsSet = new Set(externalFunctionIds);\n const externalFunctionGroupsIdsSet = new Set(externalFunctionGroupsIds);\n const nonExistentFunctionsOrFunctionGroups = calledFunctionsOrFunctionGroup.filter(\n (calledFunctionOrFunctionGroup) => {\n if (\n isFullIdNamespaced(calledFunctionOrFunctionGroup) &&\n skipNamespacedFunctionsOrFunctionGroupsCheck\n ) {\n return false;\n }\n return (\n !(calledFunctionOrFunctionGroup in (config.functions ?? {})) &&\n !externalFunctionIdsSet.has(calledFunctionOrFunctionGroup) &&\n !externalFunctionGroupsIdsSet.has(calledFunctionOrFunctionGroup)\n );\n }\n );\n if (nonExistentFunctionsOrFunctionGroups.length > 0) {\n throw new BuildConfigError(\n `Calling non-existent functions: ${nonExistentFunctionsOrFunctionGroups\n .map((f) => `\"${f}\"`)\n .join(', ')}.`\n );\n }\n}\n\nfunction maybeResolveCustomFunctionRelativePath(dir: string, customFunctionPath: string): string {\n if (!path.isAbsolute(customFunctionPath)) {\n return path.resolve(dir, customFunctionPath);\n }\n return customFunctionPath;\n}\n\nfunction isFullIdNamespaced(fullId: string): boolean {\n return fullId.includes('/');\n}\n"]}
|