@expo/steps 1.0.28 → 1.0.30
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/BuildConfigParser.cjs +0 -23
- package/dist_commonjs/BuildConfigParser.d.ts +0 -1
- package/dist_commonjs/BuildConfigParser.js.map +1 -1
- package/dist_commonjs/BuildRuntimePlatform.cjs +1 -1
- package/dist_commonjs/BuildRuntimePlatform.js.map +1 -1
- package/dist_commonjs/BuildStep.cjs +2 -2
- package/dist_commonjs/BuildStep.js.map +1 -1
- package/dist_commonjs/BuildStepInput.cjs +1 -1
- package/dist_commonjs/BuildStepInput.js.map +1 -1
- package/dist_commonjs/utils/customFunction.cjs +1 -58
- package/dist_commonjs/utils/customFunction.d.ts +0 -5
- package/dist_commonjs/utils/customFunction.js.map +1 -1
- package/dist_esm/BuildConfigParser.d.ts +0 -1
- package/dist_esm/BuildConfigParser.js +0 -23
- package/dist_esm/BuildConfigParser.js.map +1 -1
- package/dist_esm/utils/customFunction.d.ts +0 -5
- package/dist_esm/utils/customFunction.js +0 -56
- package/dist_esm/utils/customFunction.js.map +1 -1
- package/package.json +11 -12
|
@@ -16,7 +16,6 @@ const BuildWorkflowValidator_js_1 = require("./BuildWorkflowValidator.cjs");
|
|
|
16
16
|
const errors_js_1 = require("./errors.cjs");
|
|
17
17
|
const duplicates_js_1 = require("./utils/expodash/duplicates.cjs");
|
|
18
18
|
const uniq_js_1 = require("./utils/expodash/uniq.cjs");
|
|
19
|
-
const customFunction_js_1 = require("./utils/customFunction.cjs");
|
|
20
19
|
class BuildConfigParser {
|
|
21
20
|
constructor(ctx, { externalFunctions }) {
|
|
22
21
|
this.ctx = ctx;
|
|
@@ -32,10 +31,6 @@ class BuildConfigParser {
|
|
|
32
31
|
const buildSteps = config.build.steps.map((stepConfig) => this.createBuildStepFromConfig(stepConfig, buildFunctions));
|
|
33
32
|
const workflow = new BuildWorkflow_js_1.BuildWorkflow(this.ctx, { buildSteps, buildFunctions });
|
|
34
33
|
await new BuildWorkflowValidator_js_1.BuildWorkflowValidator(workflow).validateAsync();
|
|
35
|
-
const maybeInstallDependenciesAndCompileCustomFunctionModulesStep = this.maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(workflow);
|
|
36
|
-
if (maybeInstallDependenciesAndCompileCustomFunctionModulesStep) {
|
|
37
|
-
workflow.buildSteps.unshift(maybeInstallDependenciesAndCompileCustomFunctionModulesStep);
|
|
38
|
-
}
|
|
39
34
|
return workflow;
|
|
40
35
|
}
|
|
41
36
|
createBuildStepFromConfig(buildStepConfig, buildFunctions) {
|
|
@@ -214,24 +209,6 @@ class BuildConfigParser {
|
|
|
214
209
|
const ids = this.externalFunctions.map((f) => f.getFullId());
|
|
215
210
|
return (0, uniq_js_1.uniq)(ids);
|
|
216
211
|
}
|
|
217
|
-
maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(workflow) {
|
|
218
|
-
const customFunctions = [];
|
|
219
|
-
for (const buildFunction of Object.values(workflow.buildFunctions)) {
|
|
220
|
-
if (buildFunction.customFunctionModulePath) {
|
|
221
|
-
customFunctions.push(buildFunction);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (customFunctions.length === 0) {
|
|
225
|
-
return undefined;
|
|
226
|
-
}
|
|
227
|
-
const installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction = (0, customFunction_js_1.createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules)(customFunctions);
|
|
228
|
-
return installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction.createBuildStepFromFunctionCall(this.ctx, {
|
|
229
|
-
id: `${customFunction_js_1.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE}/${customFunction_js_1.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID}`,
|
|
230
|
-
name: customFunction_js_1.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,
|
|
231
|
-
callInputs: {},
|
|
232
|
-
workingDirectory: this.ctx.defaultWorkingDirectory,
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
212
|
}
|
|
236
213
|
exports.BuildConfigParser = BuildConfigParser;
|
|
237
214
|
//# sourceMappingURL=BuildConfigParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildConfigParser.js","sourceRoot":"","sources":["../src/BuildConfigParser.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport {\n BuildConfig,\n BuildFunctionConfig,\n BuildFunctionInputs,\n BuildFunctionOutputs,\n BuildStepBareCommandRun,\n BuildStepBareFunctionCall,\n BuildStepCommandRun,\n BuildStepConfig,\n BuildStepFunctionCall,\n BuildStepInputs,\n BuildStepOutputs,\n isBuildStepBareCommandRun,\n isBuildStepBareFunctionCall,\n isBuildStepCommandRun,\n readAndValidateBuildConfigAsync,\n} from './BuildConfig.js';\nimport { BuildFunction, BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport {\n BuildStepInput,\n BuildStepInputProvider,\n BuildStepInputValueTypeName,\n} from './BuildStepInput.js';\nimport { BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepOutput, BuildStepOutputProvider } from './BuildStepOutput.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildWorkflowValidator } from './BuildWorkflowValidator.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { uniq } from './utils/expodash/uniq.js';\nimport {\n INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID,\n INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,\n INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE,\n createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules,\n} from './utils/customFunction.js';\n\nexport class BuildConfigParser {\n private readonly externalFunctions?: BuildFunction[];\n\n constructor(\n private readonly ctx: BuildStepGlobalContext,\n { externalFunctions }: { externalFunctions?: BuildFunction[] }\n ) {\n this.validateExternalFunctions(externalFunctions);\n\n this.externalFunctions = externalFunctions;\n }\n\n public async parseAsync(): Promise<BuildWorkflow> {\n const config = await readAndValidateBuildConfigAsync(this.ctx.configPath, {\n externalFunctionIds: this.getExternalFunctionFullIds(),\n });\n const configBuildFunctions = this.createBuildFunctionsFromConfig(config.functions);\n const buildFunctions = this.mergeBuildFunctionsWithExternal(\n configBuildFunctions,\n this.externalFunctions\n );\n const buildSteps = config.build.steps.map((stepConfig) =>\n this.createBuildStepFromConfig(stepConfig, buildFunctions)\n );\n const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions });\n await new BuildWorkflowValidator(workflow).validateAsync();\n\n const maybeInstallDependenciesAndCompileCustomFunctionModulesStep =\n this.maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(workflow);\n if (maybeInstallDependenciesAndCompileCustomFunctionModulesStep) {\n workflow.buildSteps.unshift(maybeInstallDependenciesAndCompileCustomFunctionModulesStep);\n }\n return workflow;\n }\n\n private createBuildStepFromConfig(\n buildStepConfig: BuildStepConfig,\n buildFunctions: BuildFunctionById\n ): BuildStep {\n if (isBuildStepCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepCommandRun(buildStepConfig);\n } else if (isBuildStepBareCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareCommandRun(buildStepConfig);\n } else if (isBuildStepBareFunctionCall(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareFunctionCall(buildFunctions, buildStepConfig);\n } else {\n return this.createBuildStepFromBuildStepFunctionCall(buildFunctions, buildStepConfig);\n }\n }\n\n private createBuildStepFromBuildStepCommandRun({ run }: BuildStepCommandRun): BuildStep {\n const {\n id: maybeId,\n inputs: inputsConfig,\n outputs: outputsConfig,\n name,\n workingDirectory,\n shell,\n command,\n env,\n } = run;\n const id = BuildStep.getNewId(maybeId);\n const displayName = BuildStep.getDisplayName({ id, name, command });\n const inputs =\n inputsConfig && this.createBuildStepInputsFromDefinition(inputsConfig, displayName);\n const outputs =\n outputsConfig && this.createBuildStepOutputsFromDefinition(outputsConfig, displayName);\n return new BuildStep(this.ctx, {\n id,\n inputs,\n outputs,\n name,\n displayName,\n workingDirectory,\n shell,\n command,\n env,\n });\n }\n\n private createBuildStepFromBuildStepBareCommandRun({\n run: command,\n }: BuildStepBareCommandRun): BuildStep {\n const id = BuildStep.getNewId();\n const displayName = BuildStep.getDisplayName({ id, command });\n return new BuildStep(this.ctx, {\n id,\n displayName,\n command,\n });\n }\n\n private createBuildStepFromBuildStepBareFunctionCall(\n buildFunctions: BuildFunctionById,\n functionId: BuildStepBareFunctionCall\n ): BuildStep {\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx);\n }\n\n private createBuildStepFromBuildStepFunctionCall(\n buildFunctions: BuildFunctionById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep {\n const keys = Object.keys(buildStepFunctionCall);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n const functionId = keys[0];\n const buildFunctionCallConfig = buildStepFunctionCall[functionId];\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx, {\n id: buildFunctionCallConfig.id,\n name: buildFunctionCallConfig.name,\n callInputs: buildFunctionCallConfig.inputs,\n workingDirectory: buildFunctionCallConfig.workingDirectory,\n shell: buildFunctionCallConfig.shell,\n env: buildFunctionCallConfig.env,\n });\n }\n\n private createBuildFunctionsFromConfig(\n buildFunctionsConfig: BuildConfig['functions']\n ): BuildFunctionById {\n if (!buildFunctionsConfig) {\n return {};\n }\n const result: BuildFunctionById = {};\n for (const [functionId, buildFunctionConfig] of Object.entries(buildFunctionsConfig)) {\n const buildFunction = this.createBuildFunctionFromConfig({\n id: functionId,\n ...buildFunctionConfig,\n });\n result[buildFunction.getFullId()] = buildFunction;\n }\n return result;\n }\n\n private createBuildFunctionFromConfig({\n id,\n name,\n inputs: inputsConfig,\n outputs: outputsConfig,\n shell,\n command,\n supportedRuntimePlatforms,\n path: relativeCustomFunctionModulePath,\n }: BuildFunctionConfig & { id: string }): BuildFunction {\n const inputProviders =\n inputsConfig && this.createBuildStepInputProvidersFromBuildFunctionInputs(inputsConfig);\n const outputProviders =\n outputsConfig && this.createBuildStepOutputProvidersFromBuildFunctionOutputs(outputsConfig);\n let customFunctionModulePath = relativeCustomFunctionModulePath;\n if (relativeCustomFunctionModulePath) {\n const baseConfigDir = path.dirname(this.ctx.configPath);\n customFunctionModulePath = path.resolve(baseConfigDir, relativeCustomFunctionModulePath);\n }\n return new BuildFunction({\n id,\n name,\n inputProviders,\n outputProviders,\n shell,\n command,\n customFunctionModulePath,\n supportedRuntimePlatforms,\n });\n }\n\n private createBuildStepInputsFromDefinition(\n buildStepInputs: BuildStepInputs,\n stepDisplayName: string\n ): BuildStepInput[] {\n return Object.entries(buildStepInputs).map(\n ([key, value]) =>\n new BuildStepInput(this.ctx, {\n id: key,\n stepDisplayName,\n defaultValue: value,\n required: true,\n allowedValueTypeName:\n typeof value === 'object'\n ? BuildStepInputValueTypeName.JSON\n : (typeof value as BuildStepInputValueTypeName),\n })\n );\n }\n\n private createBuildStepInputProvidersFromBuildFunctionInputs(\n buildFunctionInputs: BuildFunctionInputs\n ): BuildStepInputProvider[] {\n return buildFunctionInputs.map((entry) => {\n return typeof entry === 'string'\n ? BuildStepInput.createProvider({\n id: entry,\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n })\n : BuildStepInput.createProvider({\n id: entry.name,\n required: entry.required ?? true,\n defaultValue: entry.defaultValue,\n allowedValues: entry.allowedValues,\n allowedValueTypeName: entry.allowedValueType,\n });\n });\n }\n\n private createBuildStepOutputsFromDefinition(\n buildStepOutputs: BuildStepOutputs,\n stepDisplayName: string\n ): BuildStepOutput[] {\n return buildStepOutputs.map((entry) =>\n typeof entry === 'string'\n ? new BuildStepOutput(this.ctx, { id: entry, stepDisplayName, required: true })\n : new BuildStepOutput(this.ctx, {\n id: entry.name,\n stepDisplayName,\n required: entry.required ?? true,\n })\n );\n }\n\n private createBuildStepOutputProvidersFromBuildFunctionOutputs(\n buildFunctionOutputs: BuildFunctionOutputs\n ): BuildStepOutputProvider[] {\n return buildFunctionOutputs.map((entry) =>\n typeof entry === 'string'\n ? BuildStepOutput.createProvider({ id: entry, required: true })\n : BuildStepOutput.createProvider({ id: entry.name, required: entry.required ?? true })\n );\n }\n\n private mergeBuildFunctionsWithExternal(\n configFunctions: BuildFunctionById,\n externalFunctions?: BuildFunction[]\n ): BuildFunctionById {\n const result: BuildFunctionById = { ...configFunctions };\n if (externalFunctions === undefined) {\n return result;\n }\n for (const buildFunction of externalFunctions) {\n // functions defined in config shadow the external ones\n const fullId = buildFunction.getFullId();\n if (!(fullId in result)) {\n result[fullId] = buildFunction;\n }\n }\n return result;\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 BuildStepRuntimeError(\n `Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n private 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 private maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(\n workflow: BuildWorkflow\n ): BuildStep | undefined {\n const customFunctions: BuildFunction[] = [];\n for (const buildFunction of Object.values(workflow.buildFunctions)) {\n if (buildFunction.customFunctionModulePath) {\n customFunctions.push(buildFunction);\n }\n }\n\n if (customFunctions.length === 0) {\n return undefined;\n }\n\n const installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction =\n createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions);\n\n return installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction.createBuildStepFromFunctionCall(\n this.ctx,\n {\n id: `${INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE}/${INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID}`,\n name: INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,\n callInputs: {},\n workingDirectory: this.ctx.defaultWorkingDirectory,\n }\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BuildConfigParser.js","sourceRoot":"","sources":["../src/BuildConfigParser.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport {\n BuildConfig,\n BuildFunctionConfig,\n BuildFunctionInputs,\n BuildFunctionOutputs,\n BuildStepBareCommandRun,\n BuildStepBareFunctionCall,\n BuildStepCommandRun,\n BuildStepConfig,\n BuildStepFunctionCall,\n BuildStepInputs,\n BuildStepOutputs,\n isBuildStepBareCommandRun,\n isBuildStepBareFunctionCall,\n isBuildStepCommandRun,\n readAndValidateBuildConfigAsync,\n} from './BuildConfig.js';\nimport { BuildFunction, BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport {\n BuildStepInput,\n BuildStepInputProvider,\n BuildStepInputValueTypeName,\n} from './BuildStepInput.js';\nimport { BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepOutput, BuildStepOutputProvider } from './BuildStepOutput.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildWorkflowValidator } from './BuildWorkflowValidator.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { uniq } from './utils/expodash/uniq.js';\n\nexport class BuildConfigParser {\n private readonly externalFunctions?: BuildFunction[];\n\n constructor(\n private readonly ctx: BuildStepGlobalContext,\n { externalFunctions }: { externalFunctions?: BuildFunction[] }\n ) {\n this.validateExternalFunctions(externalFunctions);\n\n this.externalFunctions = externalFunctions;\n }\n\n public async parseAsync(): Promise<BuildWorkflow> {\n const config = await readAndValidateBuildConfigAsync(this.ctx.configPath, {\n externalFunctionIds: this.getExternalFunctionFullIds(),\n });\n const configBuildFunctions = this.createBuildFunctionsFromConfig(config.functions);\n const buildFunctions = this.mergeBuildFunctionsWithExternal(\n configBuildFunctions,\n this.externalFunctions\n );\n const buildSteps = config.build.steps.map((stepConfig) =>\n this.createBuildStepFromConfig(stepConfig, buildFunctions)\n );\n const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions });\n await new BuildWorkflowValidator(workflow).validateAsync();\n return workflow;\n }\n\n private createBuildStepFromConfig(\n buildStepConfig: BuildStepConfig,\n buildFunctions: BuildFunctionById\n ): BuildStep {\n if (isBuildStepCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepCommandRun(buildStepConfig);\n } else if (isBuildStepBareCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareCommandRun(buildStepConfig);\n } else if (isBuildStepBareFunctionCall(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareFunctionCall(buildFunctions, buildStepConfig);\n } else {\n return this.createBuildStepFromBuildStepFunctionCall(buildFunctions, buildStepConfig);\n }\n }\n\n private createBuildStepFromBuildStepCommandRun({ run }: BuildStepCommandRun): BuildStep {\n const {\n id: maybeId,\n inputs: inputsConfig,\n outputs: outputsConfig,\n name,\n workingDirectory,\n shell,\n command,\n env,\n } = run;\n const id = BuildStep.getNewId(maybeId);\n const displayName = BuildStep.getDisplayName({ id, name, command });\n const inputs =\n inputsConfig && this.createBuildStepInputsFromDefinition(inputsConfig, displayName);\n const outputs =\n outputsConfig && this.createBuildStepOutputsFromDefinition(outputsConfig, displayName);\n return new BuildStep(this.ctx, {\n id,\n inputs,\n outputs,\n name,\n displayName,\n workingDirectory,\n shell,\n command,\n env,\n });\n }\n\n private createBuildStepFromBuildStepBareCommandRun({\n run: command,\n }: BuildStepBareCommandRun): BuildStep {\n const id = BuildStep.getNewId();\n const displayName = BuildStep.getDisplayName({ id, command });\n return new BuildStep(this.ctx, {\n id,\n displayName,\n command,\n });\n }\n\n private createBuildStepFromBuildStepBareFunctionCall(\n buildFunctions: BuildFunctionById,\n functionId: BuildStepBareFunctionCall\n ): BuildStep {\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx);\n }\n\n private createBuildStepFromBuildStepFunctionCall(\n buildFunctions: BuildFunctionById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep {\n const keys = Object.keys(buildStepFunctionCall);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n const functionId = keys[0];\n const buildFunctionCallConfig = buildStepFunctionCall[functionId];\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx, {\n id: buildFunctionCallConfig.id,\n name: buildFunctionCallConfig.name,\n callInputs: buildFunctionCallConfig.inputs,\n workingDirectory: buildFunctionCallConfig.workingDirectory,\n shell: buildFunctionCallConfig.shell,\n env: buildFunctionCallConfig.env,\n });\n }\n\n private createBuildFunctionsFromConfig(\n buildFunctionsConfig: BuildConfig['functions']\n ): BuildFunctionById {\n if (!buildFunctionsConfig) {\n return {};\n }\n const result: BuildFunctionById = {};\n for (const [functionId, buildFunctionConfig] of Object.entries(buildFunctionsConfig)) {\n const buildFunction = this.createBuildFunctionFromConfig({\n id: functionId,\n ...buildFunctionConfig,\n });\n result[buildFunction.getFullId()] = buildFunction;\n }\n return result;\n }\n\n private createBuildFunctionFromConfig({\n id,\n name,\n inputs: inputsConfig,\n outputs: outputsConfig,\n shell,\n command,\n supportedRuntimePlatforms,\n path: relativeCustomFunctionModulePath,\n }: BuildFunctionConfig & { id: string }): BuildFunction {\n const inputProviders =\n inputsConfig && this.createBuildStepInputProvidersFromBuildFunctionInputs(inputsConfig);\n const outputProviders =\n outputsConfig && this.createBuildStepOutputProvidersFromBuildFunctionOutputs(outputsConfig);\n let customFunctionModulePath = relativeCustomFunctionModulePath;\n if (relativeCustomFunctionModulePath) {\n const baseConfigDir = path.dirname(this.ctx.configPath);\n customFunctionModulePath = path.resolve(baseConfigDir, relativeCustomFunctionModulePath);\n }\n return new BuildFunction({\n id,\n name,\n inputProviders,\n outputProviders,\n shell,\n command,\n customFunctionModulePath,\n supportedRuntimePlatforms,\n });\n }\n\n private createBuildStepInputsFromDefinition(\n buildStepInputs: BuildStepInputs,\n stepDisplayName: string\n ): BuildStepInput[] {\n return Object.entries(buildStepInputs).map(\n ([key, value]) =>\n new BuildStepInput(this.ctx, {\n id: key,\n stepDisplayName,\n defaultValue: value,\n required: true,\n allowedValueTypeName:\n typeof value === 'object'\n ? BuildStepInputValueTypeName.JSON\n : (typeof value as BuildStepInputValueTypeName),\n })\n );\n }\n\n private createBuildStepInputProvidersFromBuildFunctionInputs(\n buildFunctionInputs: BuildFunctionInputs\n ): BuildStepInputProvider[] {\n return buildFunctionInputs.map((entry) => {\n return typeof entry === 'string'\n ? BuildStepInput.createProvider({\n id: entry,\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n })\n : BuildStepInput.createProvider({\n id: entry.name,\n required: entry.required ?? true,\n defaultValue: entry.defaultValue,\n allowedValues: entry.allowedValues,\n allowedValueTypeName: entry.allowedValueType,\n });\n });\n }\n\n private createBuildStepOutputsFromDefinition(\n buildStepOutputs: BuildStepOutputs,\n stepDisplayName: string\n ): BuildStepOutput[] {\n return buildStepOutputs.map((entry) =>\n typeof entry === 'string'\n ? new BuildStepOutput(this.ctx, { id: entry, stepDisplayName, required: true })\n : new BuildStepOutput(this.ctx, {\n id: entry.name,\n stepDisplayName,\n required: entry.required ?? true,\n })\n );\n }\n\n private createBuildStepOutputProvidersFromBuildFunctionOutputs(\n buildFunctionOutputs: BuildFunctionOutputs\n ): BuildStepOutputProvider[] {\n return buildFunctionOutputs.map((entry) =>\n typeof entry === 'string'\n ? BuildStepOutput.createProvider({ id: entry, required: true })\n : BuildStepOutput.createProvider({ id: entry.name, required: entry.required ?? true })\n );\n }\n\n private mergeBuildFunctionsWithExternal(\n configFunctions: BuildFunctionById,\n externalFunctions?: BuildFunction[]\n ): BuildFunctionById {\n const result: BuildFunctionById = { ...configFunctions };\n if (externalFunctions === undefined) {\n return result;\n }\n for (const buildFunction of externalFunctions) {\n // functions defined in config shadow the external ones\n const fullId = buildFunction.getFullId();\n if (!(fullId in result)) {\n result[fullId] = buildFunction;\n }\n }\n return result;\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 BuildStepRuntimeError(\n `Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n private 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"]}
|
|
@@ -5,5 +5,5 @@ var BuildRuntimePlatform;
|
|
|
5
5
|
(function (BuildRuntimePlatform) {
|
|
6
6
|
BuildRuntimePlatform["DARWIN"] = "darwin";
|
|
7
7
|
BuildRuntimePlatform["LINUX"] = "linux";
|
|
8
|
-
})(BuildRuntimePlatform
|
|
8
|
+
})(BuildRuntimePlatform || (exports.BuildRuntimePlatform = BuildRuntimePlatform = {}));
|
|
9
9
|
//# sourceMappingURL=BuildRuntimePlatform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildRuntimePlatform.js","sourceRoot":"","sources":["../src/BuildRuntimePlatform.ts"],"names":[],"mappings":";;;AAAA,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,uCAAe,CAAA;AACjB,CAAC,EAHW,oBAAoB,
|
|
1
|
+
{"version":3,"file":"BuildRuntimePlatform.js","sourceRoot":"","sources":["../src/BuildRuntimePlatform.ts"],"names":[],"mappings":";;;AAAA,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,uCAAe,CAAA;AACjB,CAAC,EAHW,oBAAoB,oCAApB,oBAAoB,QAG/B","sourcesContent":["export enum BuildRuntimePlatform {\n DARWIN = 'darwin',\n LINUX = 'linux',\n}\n"]}
|
|
@@ -24,12 +24,12 @@ var BuildStepStatus;
|
|
|
24
24
|
BuildStepStatus["FAIL"] = "fail";
|
|
25
25
|
BuildStepStatus["WARNING"] = "warning";
|
|
26
26
|
BuildStepStatus["SUCCESS"] = "success";
|
|
27
|
-
})(BuildStepStatus
|
|
27
|
+
})(BuildStepStatus || (exports.BuildStepStatus = BuildStepStatus = {}));
|
|
28
28
|
var BuildStepLogMarker;
|
|
29
29
|
(function (BuildStepLogMarker) {
|
|
30
30
|
BuildStepLogMarker["START_STEP"] = "start-step";
|
|
31
31
|
BuildStepLogMarker["END_STEP"] = "end-step";
|
|
32
|
-
})(BuildStepLogMarker
|
|
32
|
+
})(BuildStepLogMarker || (exports.BuildStepLogMarker = BuildStepLogMarker = {}));
|
|
33
33
|
// TODO: move to a place common with tests
|
|
34
34
|
const UUID_REGEX = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/;
|
|
35
35
|
class BuildStepOutputAccessor {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildStep.js","sourceRoot":"","sources":["../src/BuildStep.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildStepContext, BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepInput, BuildStepInputById, makeBuildStepInputByIdMap } from './BuildStepInput.js';\nimport {\n BuildStepOutput,\n BuildStepOutputById,\n SerializedBuildStepOutput,\n makeBuildStepOutputByIdMap,\n} from './BuildStepOutput.js';\nimport { BIN_PATH } from './utils/shell/bin.js';\nimport { getDefaultShell, getShellCommandAndArgs } from './utils/shell/command.js';\nimport {\n cleanUpStepTemporaryDirectoriesAsync,\n createTemporaryEnvsDirectoryAsync,\n createTemporaryOutputsDirectoryAsync,\n saveScriptToTemporaryFileAsync,\n} from './BuildTemporaryFiles.js';\nimport { spawnAsync } from './utils/shell/spawn.js';\nimport { interpolateWithInputs } from './utils/template.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport { BuildStepEnv } from './BuildStepEnv.js';\nimport { BuildRuntimePlatform } from './BuildRuntimePlatform.js';\n\nexport enum BuildStepStatus {\n NEW = 'new',\n IN_PROGRESS = 'in-progress',\n CANCELED = 'canceled',\n FAIL = 'fail',\n WARNING = 'warning',\n SUCCESS = 'success',\n}\n\nexport enum BuildStepLogMarker {\n START_STEP = 'start-step',\n END_STEP = 'end-step',\n}\n\nexport type BuildStepFunction = (\n ctx: BuildStepContext,\n {\n inputs,\n outputs,\n env,\n }: { inputs: BuildStepInputById; outputs: BuildStepOutputById; env: BuildStepEnv }\n) => unknown;\n\n// TODO: move to a place common with tests\nconst UUID_REGEX =\n /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/;\n\nexport interface SerializedBuildStepOutputAccessor {\n id: string;\n executed: boolean;\n outputById: Record<string, SerializedBuildStepOutput>;\n displayName: string;\n}\n\nexport class BuildStepOutputAccessor {\n constructor(\n public readonly id: string,\n public readonly displayName: string,\n protected readonly executed: boolean,\n protected readonly outputById: BuildStepOutputById\n ) {}\n\n public getOutputValueByName(name: string): string | undefined {\n if (!this.executed) {\n throw new BuildStepRuntimeError(\n `Failed getting output \"${name}\" from step \"${this.displayName}\". The step has not been executed yet.`\n );\n }\n if (!this.hasOutputParameter(name)) {\n throw new BuildStepRuntimeError(`Step \"${this.displayName}\" does not have output \"${name}\".`);\n }\n return this.outputById[name].value;\n }\n\n public hasOutputParameter(name: string): boolean {\n return name in this.outputById;\n }\n\n public serialize(): SerializedBuildStepOutputAccessor {\n return {\n id: this.id,\n executed: this.executed,\n outputById: Object.fromEntries(\n Object.entries(this.outputById).map(([key, value]) => [key, value.serialize()])\n ),\n displayName: this.displayName,\n };\n }\n\n public static deserialize(\n serialized: SerializedBuildStepOutputAccessor\n ): BuildStepOutputAccessor {\n const outputById = Object.fromEntries(\n Object.entries(serialized.outputById).map(([key, value]) => [\n key,\n BuildStepOutput.deserialize(value),\n ])\n );\n return new BuildStepOutputAccessor(\n serialized.id,\n serialized.displayName,\n serialized.executed,\n outputById\n );\n }\n}\n\nexport class BuildStep extends BuildStepOutputAccessor {\n public readonly id: string;\n public readonly name?: string;\n public readonly displayName: string;\n public readonly supportedRuntimePlatforms?: BuildRuntimePlatform[];\n public readonly inputs?: BuildStepInput[];\n public readonly outputs?: BuildStepOutput[];\n public readonly command?: string;\n public readonly fn?: BuildStepFunction;\n public readonly shell: string;\n public readonly ctx: BuildStepContext;\n public readonly env: BuildStepEnv;\n public status: BuildStepStatus;\n\n private readonly internalId: string;\n private readonly inputById: BuildStepInputById;\n protected readonly outputById: BuildStepOutputById;\n protected executed = false;\n\n public static getNewId(userDefinedId?: string): string {\n return userDefinedId ?? uuidv4();\n }\n\n public static getDisplayName({\n id,\n name,\n command,\n }: {\n id: string;\n name?: string;\n command?: string;\n }): string {\n if (name) {\n return name;\n }\n if (!id.match(UUID_REGEX)) {\n return id;\n }\n if (command) {\n const splits = command.trim().split('\\n');\n for (const split of splits) {\n const trimmed = split.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n return trimmed;\n }\n }\n }\n return id;\n }\n\n constructor(\n ctx: BuildStepGlobalContext,\n {\n id,\n name,\n displayName,\n inputs,\n outputs,\n command,\n fn,\n workingDirectory: maybeWorkingDirectory,\n shell,\n supportedRuntimePlatforms: maybeSupportedRuntimePlatforms,\n env,\n }: {\n id: string;\n name?: string;\n displayName: string;\n inputs?: BuildStepInput[];\n outputs?: BuildStepOutput[];\n command?: string;\n fn?: BuildStepFunction;\n workingDirectory?: string;\n shell?: string;\n supportedRuntimePlatforms?: BuildRuntimePlatform[];\n env?: BuildStepEnv;\n }\n ) {\n assert(command !== undefined || fn !== undefined, 'Either command or fn must be defined.');\n assert(!(command !== undefined && fn !== undefined), 'Command and fn cannot be both set.');\n const outputById = makeBuildStepOutputByIdMap(outputs);\n super(id, displayName, false, outputById);\n\n this.id = id;\n this.name = name;\n this.displayName = displayName;\n this.supportedRuntimePlatforms = maybeSupportedRuntimePlatforms;\n this.inputs = inputs;\n this.outputs = outputs;\n this.inputById = makeBuildStepInputByIdMap(inputs);\n this.outputById = outputById;\n this.fn = fn;\n this.command = command;\n this.shell = shell ?? getDefaultShell();\n this.status = BuildStepStatus.NEW;\n\n this.internalId = uuidv4();\n\n const logger = ctx.baseLogger.child({\n buildStepInternalId: this.internalId,\n buildStepId: this.id,\n buildStepDisplayName: this.displayName,\n });\n const workingDirectory =\n maybeWorkingDirectory !== undefined\n ? path.resolve(ctx.defaultWorkingDirectory, maybeWorkingDirectory)\n : ctx.defaultWorkingDirectory;\n this.ctx = ctx.stepCtx({ logger, workingDirectory });\n this.env = env ?? {};\n\n ctx.registerStep(this);\n }\n\n public async executeAsync(): Promise<void> {\n try {\n this.ctx.logger.info(\n { marker: BuildStepLogMarker.START_STEP },\n `Executing build step \"${this.displayName}\"`\n );\n this.status = BuildStepStatus.IN_PROGRESS;\n\n if (this.command !== undefined) {\n await this.executeCommandAsync();\n } else {\n await this.exectuteFnAsync();\n }\n\n this.ctx.logger.info(\n { marker: BuildStepLogMarker.END_STEP, result: BuildStepStatus.SUCCESS },\n `Finished build step \"${this.displayName}\" successfully`\n );\n this.status = BuildStepStatus.SUCCESS;\n } catch (err) {\n this.ctx.logger.error({ err });\n this.ctx.logger.error(\n { marker: BuildStepLogMarker.END_STEP, result: BuildStepStatus.FAIL },\n `Build step \"${this.displayName}\" failed`\n );\n this.status = BuildStepStatus.FAIL;\n throw err;\n } finally {\n this.executed = true;\n }\n }\n\n public hasOutputParameter(name: string): boolean {\n return name in this.outputById;\n }\n\n public getOutputValueByName(name: string): string | undefined {\n if (!this.executed) {\n throw new BuildStepRuntimeError(\n `Failed getting output \"${name}\" from step \"${this.displayName}\". The step has not been executed yet.`\n );\n }\n if (!this.hasOutputParameter(name)) {\n throw new BuildStepRuntimeError(`Step \"${this.displayName}\" does not have output \"${name}\".`);\n }\n return this.outputById[name].value;\n }\n\n public canBeRunOnRuntimePlatform(): boolean {\n return (\n !this.supportedRuntimePlatforms ||\n this.supportedRuntimePlatforms.includes(this.ctx.global.runtimePlatform)\n );\n }\n\n private async executeCommandAsync(): Promise<void> {\n assert(this.command, 'Command must be defined.');\n\n try {\n const command = this.interpolateInputsAndGlobalContextInCommand(this.command, this.inputs);\n this.ctx.logger.debug(`Interpolated inputs in the command template`);\n\n const outputsDir = await createTemporaryOutputsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(`Created temporary directory for step outputs: ${outputsDir}`);\n\n const envsDir = await createTemporaryEnvsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(\n `Created temporary directory for step environment variables: ${outputsDir}`\n );\n\n const scriptPath = await saveScriptToTemporaryFileAsync(this.ctx.global, this.id, command);\n this.ctx.logger.debug(`Saved script to ${scriptPath}`);\n\n const { command: shellCommand, args } = getShellCommandAndArgs(this.shell, scriptPath);\n this.ctx.logger.debug(\n `Executing script: ${shellCommand}${args !== undefined ? ` ${args.join(' ')}` : ''}`\n );\n await spawnAsync(shellCommand, args ?? [], {\n cwd: this.ctx.workingDirectory,\n logger: this.ctx.logger,\n env: this.getScriptEnv({ outputsDir, envsDir }),\n });\n this.ctx.logger.debug(`Script completed successfully`);\n\n await this.collectAndValidateOutputsAsync(outputsDir);\n await this.collectAndUpdateEnvsAsync(envsDir);\n this.ctx.logger.debug('Finished collecting output paramters');\n } finally {\n await cleanUpStepTemporaryDirectoriesAsync(this.ctx.global, this.id);\n }\n }\n\n private async exectuteFnAsync(): Promise<void> {\n assert(this.fn, 'Function (fn) must be defined');\n\n try {\n const outputsDir = await createTemporaryOutputsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(`Created temporary directory for step outputs: ${outputsDir}`);\n\n const envsDir = await createTemporaryEnvsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(\n `Created temporary directory for step environment variables: ${outputsDir}`\n );\n\n await this.fn(this.ctx, {\n inputs: this.inputById,\n outputs: this.outputById,\n env: this.getScriptEnv({ outputsDir, envsDir }),\n });\n\n this.ctx.logger.debug(`Script completed successfully`);\n\n await this.collectAndValidateOutputsAsync(outputsDir);\n await this.collectAndUpdateEnvsAsync(envsDir);\n this.ctx.logger.debug('Finished collecting output paramters');\n } finally {\n await cleanUpStepTemporaryDirectoriesAsync(this.ctx.global, this.id);\n }\n }\n\n private interpolateInputsAndGlobalContextInCommand(\n command: string,\n inputs?: BuildStepInput[]\n ): string {\n if (!inputs) {\n return command;\n }\n const vars = inputs.reduce((acc, input) => {\n acc[input.id] =\n typeof input.value === 'object'\n ? JSON.stringify(input.value)\n : input.value?.toString() ?? '';\n return acc;\n }, {} as Record<string, string>);\n const valueInterpolatedWithGlobalContext = this.ctx.global.interpolate(command);\n return interpolateWithInputs(valueInterpolatedWithGlobalContext, vars);\n }\n\n private async collectAndValidateOutputsAsync(outputsDir: string): Promise<void> {\n const files = await fs.readdir(outputsDir);\n\n const nonDefinedOutputIds: string[] = [];\n for (const outputId of files) {\n if (!(outputId in this.outputById)) {\n nonDefinedOutputIds.push(outputId);\n } else {\n const file = path.join(outputsDir, outputId);\n const rawContents = await fs.readFile(file, 'utf-8');\n const value = rawContents.trim();\n this.outputById[outputId].set(value);\n }\n }\n\n if (nonDefinedOutputIds.length > 0) {\n const idsString = nonDefinedOutputIds.map((i) => `\"${i}\"`).join(', ');\n this.ctx.logger.warn(`Some outputs are not defined in step config: ${idsString}`);\n }\n\n const nonSetRequiredOutputIds: string[] = [];\n for (const output of this.outputs ?? []) {\n try {\n const value = output.value;\n this.ctx.logger.debug(`Output parameter \"${output.id}\" is set to \"${value}\"`);\n } catch (err) {\n this.ctx.logger.debug({ err }, `Getting value for output parameter \"${output.id}\" failed.`);\n nonSetRequiredOutputIds.push(output.id);\n }\n }\n if (nonSetRequiredOutputIds.length > 0) {\n const idsString = nonSetRequiredOutputIds.map((i) => `\"${i}\"`).join(', ');\n throw new BuildStepRuntimeError(`Some required outputs have not been set: ${idsString}`, {\n metadata: { ids: nonSetRequiredOutputIds },\n });\n }\n }\n\n private async collectAndUpdateEnvsAsync(envsDir: string): Promise<void> {\n const filenames = await fs.readdir(envsDir);\n\n const entries = await Promise.all(\n filenames.map(async (basename) => {\n const rawContents = await fs.readFile(path.join(envsDir, basename), 'utf-8');\n return [basename, rawContents];\n })\n );\n this.ctx.global.updateEnv({\n ...this.ctx.global.env,\n ...Object.fromEntries(entries),\n });\n }\n\n private getScriptEnv({\n envsDir,\n outputsDir,\n }: {\n envsDir: string;\n outputsDir: string;\n }): Record<string, string> {\n const env = { ...this.ctx.global.env, ...this.env };\n const currentPath = env.PATH ?? process.env.PATH;\n const newPath = currentPath ? `${BIN_PATH}:${currentPath}` : BIN_PATH;\n return {\n ...env,\n __EXPO_STEPS_OUTPUTS_DIR: outputsDir,\n __EXPO_STEPS_ENVS_DIR: envsDir,\n __EXPO_STEPS_WORKING_DIRECTORY: this.ctx.workingDirectory,\n PATH: newPath,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BuildStep.js","sourceRoot":"","sources":["../src/BuildStep.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildStepContext, BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepInput, BuildStepInputById, makeBuildStepInputByIdMap } from './BuildStepInput.js';\nimport {\n BuildStepOutput,\n BuildStepOutputById,\n SerializedBuildStepOutput,\n makeBuildStepOutputByIdMap,\n} from './BuildStepOutput.js';\nimport { BIN_PATH } from './utils/shell/bin.js';\nimport { getDefaultShell, getShellCommandAndArgs } from './utils/shell/command.js';\nimport {\n cleanUpStepTemporaryDirectoriesAsync,\n createTemporaryEnvsDirectoryAsync,\n createTemporaryOutputsDirectoryAsync,\n saveScriptToTemporaryFileAsync,\n} from './BuildTemporaryFiles.js';\nimport { spawnAsync } from './utils/shell/spawn.js';\nimport { interpolateWithInputs } from './utils/template.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport { BuildStepEnv } from './BuildStepEnv.js';\nimport { BuildRuntimePlatform } from './BuildRuntimePlatform.js';\n\nexport enum BuildStepStatus {\n NEW = 'new',\n IN_PROGRESS = 'in-progress',\n CANCELED = 'canceled',\n FAIL = 'fail',\n WARNING = 'warning',\n SUCCESS = 'success',\n}\n\nexport enum BuildStepLogMarker {\n START_STEP = 'start-step',\n END_STEP = 'end-step',\n}\n\nexport type BuildStepFunction = (\n ctx: BuildStepContext,\n {\n inputs,\n outputs,\n env,\n }: { inputs: BuildStepInputById; outputs: BuildStepOutputById; env: BuildStepEnv }\n) => unknown;\n\n// TODO: move to a place common with tests\nconst UUID_REGEX =\n /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/;\n\nexport interface SerializedBuildStepOutputAccessor {\n id: string;\n executed: boolean;\n outputById: Record<string, SerializedBuildStepOutput>;\n displayName: string;\n}\n\nexport class BuildStepOutputAccessor {\n constructor(\n public readonly id: string,\n public readonly displayName: string,\n protected readonly executed: boolean,\n protected readonly outputById: BuildStepOutputById\n ) {}\n\n public getOutputValueByName(name: string): string | undefined {\n if (!this.executed) {\n throw new BuildStepRuntimeError(\n `Failed getting output \"${name}\" from step \"${this.displayName}\". The step has not been executed yet.`\n );\n }\n if (!this.hasOutputParameter(name)) {\n throw new BuildStepRuntimeError(`Step \"${this.displayName}\" does not have output \"${name}\".`);\n }\n return this.outputById[name].value;\n }\n\n public hasOutputParameter(name: string): boolean {\n return name in this.outputById;\n }\n\n public serialize(): SerializedBuildStepOutputAccessor {\n return {\n id: this.id,\n executed: this.executed,\n outputById: Object.fromEntries(\n Object.entries(this.outputById).map(([key, value]) => [key, value.serialize()])\n ),\n displayName: this.displayName,\n };\n }\n\n public static deserialize(\n serialized: SerializedBuildStepOutputAccessor\n ): BuildStepOutputAccessor {\n const outputById = Object.fromEntries(\n Object.entries(serialized.outputById).map(([key, value]) => [\n key,\n BuildStepOutput.deserialize(value),\n ])\n );\n return new BuildStepOutputAccessor(\n serialized.id,\n serialized.displayName,\n serialized.executed,\n outputById\n );\n }\n}\n\nexport class BuildStep extends BuildStepOutputAccessor {\n public readonly id: string;\n public readonly name?: string;\n public readonly displayName: string;\n public readonly supportedRuntimePlatforms?: BuildRuntimePlatform[];\n public readonly inputs?: BuildStepInput[];\n public readonly outputs?: BuildStepOutput[];\n public readonly command?: string;\n public readonly fn?: BuildStepFunction;\n public readonly shell: string;\n public readonly ctx: BuildStepContext;\n public readonly env: BuildStepEnv;\n public status: BuildStepStatus;\n\n private readonly internalId: string;\n private readonly inputById: BuildStepInputById;\n protected readonly outputById: BuildStepOutputById;\n protected executed = false;\n\n public static getNewId(userDefinedId?: string): string {\n return userDefinedId ?? uuidv4();\n }\n\n public static getDisplayName({\n id,\n name,\n command,\n }: {\n id: string;\n name?: string;\n command?: string;\n }): string {\n if (name) {\n return name;\n }\n if (!id.match(UUID_REGEX)) {\n return id;\n }\n if (command) {\n const splits = command.trim().split('\\n');\n for (const split of splits) {\n const trimmed = split.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n return trimmed;\n }\n }\n }\n return id;\n }\n\n constructor(\n ctx: BuildStepGlobalContext,\n {\n id,\n name,\n displayName,\n inputs,\n outputs,\n command,\n fn,\n workingDirectory: maybeWorkingDirectory,\n shell,\n supportedRuntimePlatforms: maybeSupportedRuntimePlatforms,\n env,\n }: {\n id: string;\n name?: string;\n displayName: string;\n inputs?: BuildStepInput[];\n outputs?: BuildStepOutput[];\n command?: string;\n fn?: BuildStepFunction;\n workingDirectory?: string;\n shell?: string;\n supportedRuntimePlatforms?: BuildRuntimePlatform[];\n env?: BuildStepEnv;\n }\n ) {\n assert(command !== undefined || fn !== undefined, 'Either command or fn must be defined.');\n assert(!(command !== undefined && fn !== undefined), 'Command and fn cannot be both set.');\n const outputById = makeBuildStepOutputByIdMap(outputs);\n super(id, displayName, false, outputById);\n\n this.id = id;\n this.name = name;\n this.displayName = displayName;\n this.supportedRuntimePlatforms = maybeSupportedRuntimePlatforms;\n this.inputs = inputs;\n this.outputs = outputs;\n this.inputById = makeBuildStepInputByIdMap(inputs);\n this.outputById = outputById;\n this.fn = fn;\n this.command = command;\n this.shell = shell ?? getDefaultShell();\n this.status = BuildStepStatus.NEW;\n\n this.internalId = uuidv4();\n\n const logger = ctx.baseLogger.child({\n buildStepInternalId: this.internalId,\n buildStepId: this.id,\n buildStepDisplayName: this.displayName,\n });\n const workingDirectory =\n maybeWorkingDirectory !== undefined\n ? path.resolve(ctx.defaultWorkingDirectory, maybeWorkingDirectory)\n : ctx.defaultWorkingDirectory;\n this.ctx = ctx.stepCtx({ logger, workingDirectory });\n this.env = env ?? {};\n\n ctx.registerStep(this);\n }\n\n public async executeAsync(): Promise<void> {\n try {\n this.ctx.logger.info(\n { marker: BuildStepLogMarker.START_STEP },\n `Executing build step \"${this.displayName}\"`\n );\n this.status = BuildStepStatus.IN_PROGRESS;\n\n if (this.command !== undefined) {\n await this.executeCommandAsync();\n } else {\n await this.exectuteFnAsync();\n }\n\n this.ctx.logger.info(\n { marker: BuildStepLogMarker.END_STEP, result: BuildStepStatus.SUCCESS },\n `Finished build step \"${this.displayName}\" successfully`\n );\n this.status = BuildStepStatus.SUCCESS;\n } catch (err) {\n this.ctx.logger.error({ err });\n this.ctx.logger.error(\n { marker: BuildStepLogMarker.END_STEP, result: BuildStepStatus.FAIL },\n `Build step \"${this.displayName}\" failed`\n );\n this.status = BuildStepStatus.FAIL;\n throw err;\n } finally {\n this.executed = true;\n }\n }\n\n public hasOutputParameter(name: string): boolean {\n return name in this.outputById;\n }\n\n public getOutputValueByName(name: string): string | undefined {\n if (!this.executed) {\n throw new BuildStepRuntimeError(\n `Failed getting output \"${name}\" from step \"${this.displayName}\". The step has not been executed yet.`\n );\n }\n if (!this.hasOutputParameter(name)) {\n throw new BuildStepRuntimeError(`Step \"${this.displayName}\" does not have output \"${name}\".`);\n }\n return this.outputById[name].value;\n }\n\n public canBeRunOnRuntimePlatform(): boolean {\n return (\n !this.supportedRuntimePlatforms ||\n this.supportedRuntimePlatforms.includes(this.ctx.global.runtimePlatform)\n );\n }\n\n private async executeCommandAsync(): Promise<void> {\n assert(this.command, 'Command must be defined.');\n\n try {\n const command = this.interpolateInputsAndGlobalContextInCommand(this.command, this.inputs);\n this.ctx.logger.debug(`Interpolated inputs in the command template`);\n\n const outputsDir = await createTemporaryOutputsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(`Created temporary directory for step outputs: ${outputsDir}`);\n\n const envsDir = await createTemporaryEnvsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(\n `Created temporary directory for step environment variables: ${outputsDir}`\n );\n\n const scriptPath = await saveScriptToTemporaryFileAsync(this.ctx.global, this.id, command);\n this.ctx.logger.debug(`Saved script to ${scriptPath}`);\n\n const { command: shellCommand, args } = getShellCommandAndArgs(this.shell, scriptPath);\n this.ctx.logger.debug(\n `Executing script: ${shellCommand}${args !== undefined ? ` ${args.join(' ')}` : ''}`\n );\n await spawnAsync(shellCommand, args ?? [], {\n cwd: this.ctx.workingDirectory,\n logger: this.ctx.logger,\n env: this.getScriptEnv({ outputsDir, envsDir }),\n });\n this.ctx.logger.debug(`Script completed successfully`);\n\n await this.collectAndValidateOutputsAsync(outputsDir);\n await this.collectAndUpdateEnvsAsync(envsDir);\n this.ctx.logger.debug('Finished collecting output paramters');\n } finally {\n await cleanUpStepTemporaryDirectoriesAsync(this.ctx.global, this.id);\n }\n }\n\n private async exectuteFnAsync(): Promise<void> {\n assert(this.fn, 'Function (fn) must be defined');\n\n try {\n const outputsDir = await createTemporaryOutputsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(`Created temporary directory for step outputs: ${outputsDir}`);\n\n const envsDir = await createTemporaryEnvsDirectoryAsync(this.ctx.global, this.id);\n this.ctx.logger.debug(\n `Created temporary directory for step environment variables: ${outputsDir}`\n );\n\n await this.fn(this.ctx, {\n inputs: this.inputById,\n outputs: this.outputById,\n env: this.getScriptEnv({ outputsDir, envsDir }),\n });\n\n this.ctx.logger.debug(`Script completed successfully`);\n\n await this.collectAndValidateOutputsAsync(outputsDir);\n await this.collectAndUpdateEnvsAsync(envsDir);\n this.ctx.logger.debug('Finished collecting output paramters');\n } finally {\n await cleanUpStepTemporaryDirectoriesAsync(this.ctx.global, this.id);\n }\n }\n\n private interpolateInputsAndGlobalContextInCommand(\n command: string,\n inputs?: BuildStepInput[]\n ): string {\n if (!inputs) {\n return command;\n }\n const vars = inputs.reduce((acc, input) => {\n acc[input.id] =\n typeof input.value === 'object'\n ? JSON.stringify(input.value)\n : input.value?.toString() ?? '';\n return acc;\n }, {} as Record<string, string>);\n const valueInterpolatedWithGlobalContext = this.ctx.global.interpolate(command);\n return interpolateWithInputs(valueInterpolatedWithGlobalContext, vars);\n }\n\n private async collectAndValidateOutputsAsync(outputsDir: string): Promise<void> {\n const files = await fs.readdir(outputsDir);\n\n const nonDefinedOutputIds: string[] = [];\n for (const outputId of files) {\n if (!(outputId in this.outputById)) {\n nonDefinedOutputIds.push(outputId);\n } else {\n const file = path.join(outputsDir, outputId);\n const rawContents = await fs.readFile(file, 'utf-8');\n const value = rawContents.trim();\n this.outputById[outputId].set(value);\n }\n }\n\n if (nonDefinedOutputIds.length > 0) {\n const idsString = nonDefinedOutputIds.map((i) => `\"${i}\"`).join(', ');\n this.ctx.logger.warn(`Some outputs are not defined in step config: ${idsString}`);\n }\n\n const nonSetRequiredOutputIds: string[] = [];\n for (const output of this.outputs ?? []) {\n try {\n const value = output.value;\n this.ctx.logger.debug(`Output parameter \"${output.id}\" is set to \"${value}\"`);\n } catch (err) {\n this.ctx.logger.debug({ err }, `Getting value for output parameter \"${output.id}\" failed.`);\n nonSetRequiredOutputIds.push(output.id);\n }\n }\n if (nonSetRequiredOutputIds.length > 0) {\n const idsString = nonSetRequiredOutputIds.map((i) => `\"${i}\"`).join(', ');\n throw new BuildStepRuntimeError(`Some required outputs have not been set: ${idsString}`, {\n metadata: { ids: nonSetRequiredOutputIds },\n });\n }\n }\n\n private async collectAndUpdateEnvsAsync(envsDir: string): Promise<void> {\n const filenames = await fs.readdir(envsDir);\n\n const entries = await Promise.all(\n filenames.map(async (basename) => {\n const rawContents = await fs.readFile(path.join(envsDir, basename), 'utf-8');\n return [basename, rawContents];\n })\n );\n this.ctx.global.updateEnv({\n ...this.ctx.global.env,\n ...Object.fromEntries(entries),\n });\n }\n\n private getScriptEnv({\n envsDir,\n outputsDir,\n }: {\n envsDir: string;\n outputsDir: string;\n }): Record<string, string> {\n const env = { ...this.ctx.global.env, ...this.env };\n const currentPath = env.PATH ?? process.env.PATH;\n const newPath = currentPath ? `${BIN_PATH}:${currentPath}` : BIN_PATH;\n return {\n ...env,\n __EXPO_STEPS_OUTPUTS_DIR: outputsDir,\n __EXPO_STEPS_ENVS_DIR: envsDir,\n __EXPO_STEPS_WORKING_DIRECTORY: this.ctx.workingDirectory,\n PATH: newPath,\n };\n }\n}\n"]}
|
|
@@ -10,7 +10,7 @@ var BuildStepInputValueTypeName;
|
|
|
10
10
|
BuildStepInputValueTypeName["BOOLEAN"] = "boolean";
|
|
11
11
|
BuildStepInputValueTypeName["NUMBER"] = "number";
|
|
12
12
|
BuildStepInputValueTypeName["JSON"] = "json";
|
|
13
|
-
})(BuildStepInputValueTypeName
|
|
13
|
+
})(BuildStepInputValueTypeName || (exports.BuildStepInputValueTypeName = BuildStepInputValueTypeName = {}));
|
|
14
14
|
class BuildStepInput {
|
|
15
15
|
static createProvider(params) {
|
|
16
16
|
return (ctx, stepDisplayName) => new BuildStepInput(ctx, { ...params, stepDisplayName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildStepInput.js","sourceRoot":"","sources":["../src/BuildStepInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { bunyan } from '@expo/logger';\n\nimport { BuildStepGlobalContext, SerializedBuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport {\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n interpolateWithOutputs,\n} from './utils/template.js';\n\nexport enum BuildStepInputValueTypeName {\n STRING = 'string',\n BOOLEAN = 'boolean',\n NUMBER = 'number',\n JSON = 'json',\n}\n\nexport type BuildStepInputValueType<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName\n> = T extends BuildStepInputValueTypeName.STRING\n ? string\n : T extends BuildStepInputValueTypeName.BOOLEAN\n ? boolean\n : T extends BuildStepInputValueTypeName.NUMBER\n ? number\n : Record<string, any>;\n\nexport type BuildStepInputValueTypeWithRequired<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> = R extends true ? BuildStepInputValueType<T> : BuildStepInputValueType<T> | undefined;\n\nexport type BuildStepInputById = Record<string, BuildStepInput>;\nexport type BuildStepInputProvider = (\n ctx: BuildStepGlobalContext,\n stepId: string\n) => BuildStepInput;\n\ninterface BuildStepInputProviderParams<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> {\n id: string;\n allowedValues?: BuildStepInputValueType<T>[];\n defaultValue?: BuildStepInputValueType<T>;\n required: R;\n allowedValueTypeName: T;\n}\n\ninterface BuildStepInputParams<T extends BuildStepInputValueTypeName, R extends boolean>\n extends BuildStepInputProviderParams<T, R> {\n stepDisplayName: string;\n}\n\nexport interface SerializedBuildStepInput<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> {\n id: string;\n stepDisplayName: string;\n defaultValue?: BuildStepInputValueType<T>;\n allowedValues?: BuildStepInputValueType<T>[];\n allowedValueTypeName: BuildStepInputValueTypeName;\n required: R;\n value?: BuildStepInputValueType<T>;\n ctx: SerializedBuildStepGlobalContext;\n}\n\nexport class BuildStepInput<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> {\n public readonly id: string;\n public readonly stepDisplayName: string;\n public readonly defaultValue?: BuildStepInputValueType<T>;\n public readonly allowedValues?: BuildStepInputValueType<T>[];\n public readonly allowedValueTypeName: T;\n public readonly required: R;\n\n private _value?: BuildStepInputValueType<T>;\n\n public static createProvider(params: BuildStepInputProviderParams): BuildStepInputProvider {\n return (ctx, stepDisplayName) => new BuildStepInput(ctx, { ...params, stepDisplayName });\n }\n\n constructor(\n private readonly ctx: BuildStepGlobalContext,\n {\n id,\n stepDisplayName,\n allowedValues,\n defaultValue,\n required,\n allowedValueTypeName,\n }: BuildStepInputParams<T, R>\n ) {\n this.id = id;\n this.stepDisplayName = stepDisplayName;\n this.allowedValues = allowedValues;\n this.defaultValue = defaultValue;\n this.required = required;\n this.allowedValueTypeName = allowedValueTypeName;\n }\n\n public get value(): BuildStepInputValueTypeWithRequired<T, R> {\n const rawValue = this._value ?? this.defaultValue;\n if (this.required && rawValue === undefined) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" is required but it was not set.`\n );\n }\n\n const valueDoesNotRequireInterpolation =\n rawValue === undefined ||\n typeof rawValue === 'boolean' ||\n typeof rawValue === 'number' ||\n typeof rawValue === 'object';\n if (valueDoesNotRequireInterpolation) {\n const currentTypeName =\n typeof rawValue === 'object' ? BuildStepInputValueTypeName.JSON : typeof rawValue;\n if (currentTypeName !== this.allowedValueTypeName && rawValue !== undefined) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`\n );\n }\n return rawValue as BuildStepInputValueTypeWithRequired<T, R>;\n } else {\n const valueInterpolatedWithGlobalContext = this.ctx.interpolate(rawValue);\n const valueInterpolatedWithOutputsAndGlobalContext = interpolateWithOutputs(\n valueInterpolatedWithGlobalContext,\n (path) => this.ctx.getStepOutputValue(path) ?? ''\n );\n return this.parseInputValueToAllowedType(valueInterpolatedWithOutputsAndGlobalContext);\n }\n }\n\n public get rawValue(): BuildStepInputValueType<T> | undefined {\n return this._value ?? this.defaultValue;\n }\n\n public set(value: BuildStepInputValueType<T> | undefined): BuildStepInput {\n if (this.required && value === undefined) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" is required.`\n );\n }\n\n this._value = value;\n return this;\n }\n\n public isValueOneOfAllowedValues(): boolean {\n const value = this._value ?? this.defaultValue;\n if (this.allowedValues === undefined || value === undefined) {\n return true;\n }\n return this.allowedValues.includes(value);\n }\n\n public isRawValueStepOrContextReference(): boolean {\n return (\n typeof this.rawValue === 'string' &&\n !!BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX.exec(this.rawValue)\n );\n }\n\n public serialize(): SerializedBuildStepInput<T, R> {\n return {\n id: this.id,\n stepDisplayName: this.stepDisplayName,\n defaultValue: this.defaultValue,\n allowedValues: this.allowedValues,\n allowedValueTypeName: this.allowedValueTypeName,\n required: this.required,\n value: this._value,\n ctx: this.ctx.serialize(),\n };\n }\n\n public static deserialize(\n serializedInput: SerializedBuildStepInput,\n logger: bunyan\n ): BuildStepInput {\n const deserializedContext = BuildStepGlobalContext.deserialize(serializedInput.ctx, logger);\n const input = new BuildStepInput(deserializedContext, {\n id: serializedInput.id,\n stepDisplayName: serializedInput.stepDisplayName,\n defaultValue: serializedInput.defaultValue,\n allowedValues: serializedInput.allowedValues,\n allowedValueTypeName: serializedInput.allowedValueTypeName,\n required: serializedInput.required,\n });\n input._value = serializedInput.value;\n return input;\n }\n\n private parseInputValueToAllowedType(value: string): BuildStepInputValueTypeWithRequired<T, R> {\n if (this.allowedValueTypeName === BuildStepInputValueTypeName.STRING) {\n return value as BuildStepInputValueTypeWithRequired<T, R>;\n } else if (this.allowedValueTypeName === BuildStepInputValueTypeName.NUMBER) {\n return this.parseInputValueToNumber(value) as BuildStepInputValueTypeWithRequired<T, R>;\n } else if (this.allowedValueTypeName === BuildStepInputValueTypeName.BOOLEAN) {\n return this.parseInputValueToBoolean(value) as BuildStepInputValueTypeWithRequired<T, R>;\n } else {\n return this.parseInputValueToObject(value) as BuildStepInputValueTypeWithRequired<T, R>;\n }\n }\n\n private parseInputValueToNumber(value: string): number {\n const numberValue = Number(value);\n if (Number.isNaN(numberValue)) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`\n );\n }\n return numberValue;\n }\n\n private parseInputValueToBoolean(value: string): boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`\n );\n }\n }\n\n private parseInputValueToObject(value: string): Record<string, any> {\n try {\n return JSON.parse(value);\n } catch (e: any) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`,\n {\n cause: e,\n }\n );\n }\n }\n}\n\nexport function makeBuildStepInputByIdMap(inputs?: BuildStepInput[]): BuildStepInputById {\n if (inputs === undefined) {\n return {};\n }\n return inputs.reduce((acc, input) => {\n acc[input.id] = input;\n return acc;\n }, {} as BuildStepInputById);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BuildStepInput.js","sourceRoot":"","sources":["../src/BuildStepInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { bunyan } from '@expo/logger';\n\nimport { BuildStepGlobalContext, SerializedBuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport {\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n interpolateWithOutputs,\n} from './utils/template.js';\n\nexport enum BuildStepInputValueTypeName {\n STRING = 'string',\n BOOLEAN = 'boolean',\n NUMBER = 'number',\n JSON = 'json',\n}\n\nexport type BuildStepInputValueType<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName\n> = T extends BuildStepInputValueTypeName.STRING\n ? string\n : T extends BuildStepInputValueTypeName.BOOLEAN\n ? boolean\n : T extends BuildStepInputValueTypeName.NUMBER\n ? number\n : Record<string, any>;\n\nexport type BuildStepInputValueTypeWithRequired<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> = R extends true ? BuildStepInputValueType<T> : BuildStepInputValueType<T> | undefined;\n\nexport type BuildStepInputById = Record<string, BuildStepInput>;\nexport type BuildStepInputProvider = (\n ctx: BuildStepGlobalContext,\n stepId: string\n) => BuildStepInput;\n\ninterface BuildStepInputProviderParams<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> {\n id: string;\n allowedValues?: BuildStepInputValueType<T>[];\n defaultValue?: BuildStepInputValueType<T>;\n required: R;\n allowedValueTypeName: T;\n}\n\ninterface BuildStepInputParams<T extends BuildStepInputValueTypeName, R extends boolean>\n extends BuildStepInputProviderParams<T, R> {\n stepDisplayName: string;\n}\n\nexport interface SerializedBuildStepInput<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> {\n id: string;\n stepDisplayName: string;\n defaultValue?: BuildStepInputValueType<T>;\n allowedValues?: BuildStepInputValueType<T>[];\n allowedValueTypeName: BuildStepInputValueTypeName;\n required: R;\n value?: BuildStepInputValueType<T>;\n ctx: SerializedBuildStepGlobalContext;\n}\n\nexport class BuildStepInput<\n T extends BuildStepInputValueTypeName = BuildStepInputValueTypeName,\n R extends boolean = boolean\n> {\n public readonly id: string;\n public readonly stepDisplayName: string;\n public readonly defaultValue?: BuildStepInputValueType<T>;\n public readonly allowedValues?: BuildStepInputValueType<T>[];\n public readonly allowedValueTypeName: T;\n public readonly required: R;\n\n private _value?: BuildStepInputValueType<T>;\n\n public static createProvider(params: BuildStepInputProviderParams): BuildStepInputProvider {\n return (ctx, stepDisplayName) => new BuildStepInput(ctx, { ...params, stepDisplayName });\n }\n\n constructor(\n private readonly ctx: BuildStepGlobalContext,\n {\n id,\n stepDisplayName,\n allowedValues,\n defaultValue,\n required,\n allowedValueTypeName,\n }: BuildStepInputParams<T, R>\n ) {\n this.id = id;\n this.stepDisplayName = stepDisplayName;\n this.allowedValues = allowedValues;\n this.defaultValue = defaultValue;\n this.required = required;\n this.allowedValueTypeName = allowedValueTypeName;\n }\n\n public get value(): BuildStepInputValueTypeWithRequired<T, R> {\n const rawValue = this._value ?? this.defaultValue;\n if (this.required && rawValue === undefined) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" is required but it was not set.`\n );\n }\n\n const valueDoesNotRequireInterpolation =\n rawValue === undefined ||\n typeof rawValue === 'boolean' ||\n typeof rawValue === 'number' ||\n typeof rawValue === 'object';\n if (valueDoesNotRequireInterpolation) {\n const currentTypeName =\n typeof rawValue === 'object' ? BuildStepInputValueTypeName.JSON : typeof rawValue;\n if (currentTypeName !== this.allowedValueTypeName && rawValue !== undefined) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`\n );\n }\n return rawValue as BuildStepInputValueTypeWithRequired<T, R>;\n } else {\n const valueInterpolatedWithGlobalContext = this.ctx.interpolate(rawValue);\n const valueInterpolatedWithOutputsAndGlobalContext = interpolateWithOutputs(\n valueInterpolatedWithGlobalContext,\n (path) => this.ctx.getStepOutputValue(path) ?? ''\n );\n return this.parseInputValueToAllowedType(valueInterpolatedWithOutputsAndGlobalContext);\n }\n }\n\n public get rawValue(): BuildStepInputValueType<T> | undefined {\n return this._value ?? this.defaultValue;\n }\n\n public set(value: BuildStepInputValueType<T> | undefined): BuildStepInput {\n if (this.required && value === undefined) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" is required.`\n );\n }\n\n this._value = value;\n return this;\n }\n\n public isValueOneOfAllowedValues(): boolean {\n const value = this._value ?? this.defaultValue;\n if (this.allowedValues === undefined || value === undefined) {\n return true;\n }\n return this.allowedValues.includes(value);\n }\n\n public isRawValueStepOrContextReference(): boolean {\n return (\n typeof this.rawValue === 'string' &&\n !!BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX.exec(this.rawValue)\n );\n }\n\n public serialize(): SerializedBuildStepInput<T, R> {\n return {\n id: this.id,\n stepDisplayName: this.stepDisplayName,\n defaultValue: this.defaultValue,\n allowedValues: this.allowedValues,\n allowedValueTypeName: this.allowedValueTypeName,\n required: this.required,\n value: this._value,\n ctx: this.ctx.serialize(),\n };\n }\n\n public static deserialize(\n serializedInput: SerializedBuildStepInput,\n logger: bunyan\n ): BuildStepInput {\n const deserializedContext = BuildStepGlobalContext.deserialize(serializedInput.ctx, logger);\n const input = new BuildStepInput(deserializedContext, {\n id: serializedInput.id,\n stepDisplayName: serializedInput.stepDisplayName,\n defaultValue: serializedInput.defaultValue,\n allowedValues: serializedInput.allowedValues,\n allowedValueTypeName: serializedInput.allowedValueTypeName,\n required: serializedInput.required,\n });\n input._value = serializedInput.value;\n return input;\n }\n\n private parseInputValueToAllowedType(value: string): BuildStepInputValueTypeWithRequired<T, R> {\n if (this.allowedValueTypeName === BuildStepInputValueTypeName.STRING) {\n return value as BuildStepInputValueTypeWithRequired<T, R>;\n } else if (this.allowedValueTypeName === BuildStepInputValueTypeName.NUMBER) {\n return this.parseInputValueToNumber(value) as BuildStepInputValueTypeWithRequired<T, R>;\n } else if (this.allowedValueTypeName === BuildStepInputValueTypeName.BOOLEAN) {\n return this.parseInputValueToBoolean(value) as BuildStepInputValueTypeWithRequired<T, R>;\n } else {\n return this.parseInputValueToObject(value) as BuildStepInputValueTypeWithRequired<T, R>;\n }\n }\n\n private parseInputValueToNumber(value: string): number {\n const numberValue = Number(value);\n if (Number.isNaN(numberValue)) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`\n );\n }\n return numberValue;\n }\n\n private parseInputValueToBoolean(value: string): boolean {\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`\n );\n }\n }\n\n private parseInputValueToObject(value: string): Record<string, any> {\n try {\n return JSON.parse(value);\n } catch (e: any) {\n throw new BuildStepRuntimeError(\n `Input parameter \"${this.id}\" for step \"${this.stepDisplayName}\" must be of type \"${this.allowedValueTypeName}\".`,\n {\n cause: e,\n }\n );\n }\n }\n}\n\nexport function makeBuildStepInputByIdMap(inputs?: BuildStepInput[]): BuildStepInputById {\n if (inputs === undefined) {\n return {};\n }\n return inputs.reduce((acc, input) => {\n acc[input.id] = input;\n return acc;\n }, {} as BuildStepInputById);\n}\n"]}
|
|
@@ -3,12 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.createCustomFunctionCall = exports.SCRIPTS_PATH = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const assert_1 = __importDefault(require("assert"));
|
|
9
8
|
const this_file_1 = require("this-file");
|
|
10
|
-
const package_manager_1 = require("@expo/package-manager");
|
|
11
|
-
const BuildFunction_js_1 = require("../BuildFunction.cjs");
|
|
12
9
|
const spawn_js_1 = require("./shell/spawn.cjs");
|
|
13
10
|
const thisFileCtx = (0, this_file_1.createContext)();
|
|
14
11
|
exports.SCRIPTS_PATH = path_1.default.join(thisFileCtx.dirname, '../../dist_commonjs/scripts');
|
|
@@ -32,58 +29,4 @@ function createCustomFunctionCall(customFunctionModulePath) {
|
|
|
32
29
|
};
|
|
33
30
|
}
|
|
34
31
|
exports.createCustomFunctionCall = createCustomFunctionCall;
|
|
35
|
-
exports.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID = 'install_dependencies_and_compile_custom_function_modules';
|
|
36
|
-
exports.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE = 'internal';
|
|
37
|
-
exports.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME = 'Install dependencies and compile custom function modules';
|
|
38
|
-
function createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions) {
|
|
39
|
-
return new BuildFunction_js_1.BuildFunction({
|
|
40
|
-
namespace: exports.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE,
|
|
41
|
-
id: exports.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID,
|
|
42
|
-
name: exports.INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,
|
|
43
|
-
// eslint-disable-next-line async-protect/async-suffix
|
|
44
|
-
fn: async (ctx, { env }) => {
|
|
45
|
-
for (const customFunction of customFunctions) {
|
|
46
|
-
(0, assert_1.default)(customFunction.customFunctionModulePath, 'customFunctionModulePath');
|
|
47
|
-
const packageManager = resolvePackageManagerForCustomFunction(customFunction.customFunctionModulePath);
|
|
48
|
-
ctx.logger.info(`Detected package manager ${packageManager} for custom function ${customFunction.id}`);
|
|
49
|
-
ctx.logger.info(`Installing dependencies for custom function ${customFunction.id}...`);
|
|
50
|
-
await (0, spawn_js_1.spawnAsync)(packageManager, ['install'], {
|
|
51
|
-
cwd: customFunction.customFunctionModulePath,
|
|
52
|
-
logger: ctx.logger,
|
|
53
|
-
env,
|
|
54
|
-
});
|
|
55
|
-
ctx.logger.info(`Compiling custom function ${customFunction.id}...`);
|
|
56
|
-
await (0, spawn_js_1.spawnAsync)(packageManager, ['run', 'build'], {
|
|
57
|
-
cwd: customFunction.customFunctionModulePath,
|
|
58
|
-
logger: ctx.logger,
|
|
59
|
-
env,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
exports.createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules = createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules;
|
|
66
|
-
var PackageManager;
|
|
67
|
-
(function (PackageManager) {
|
|
68
|
-
PackageManager["YARN"] = "yarn";
|
|
69
|
-
PackageManager["NPM"] = "npm";
|
|
70
|
-
PackageManager["PNPM"] = "pnpm";
|
|
71
|
-
})(PackageManager || (PackageManager = {}));
|
|
72
|
-
function resolvePackageManagerForCustomFunction(customFunctionModulePath) {
|
|
73
|
-
try {
|
|
74
|
-
const manager = (0, package_manager_1.resolvePackageManager)(customFunctionModulePath);
|
|
75
|
-
if (manager === 'npm') {
|
|
76
|
-
return PackageManager.NPM;
|
|
77
|
-
}
|
|
78
|
-
else if (manager === 'pnpm') {
|
|
79
|
-
return PackageManager.PNPM;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
return PackageManager.YARN;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return PackageManager.YARN;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
32
|
//# sourceMappingURL=customFunction.js.map
|
|
@@ -3,7 +3,6 @@ import { BuildStepEnv } from '../BuildStepEnv.js';
|
|
|
3
3
|
import { SerializedBuildStepInput } from '../BuildStepInput.js';
|
|
4
4
|
import { SerializedBuildStepOutput } from '../BuildStepOutput.js';
|
|
5
5
|
import { SerializedBuildStepContext } from '../BuildStepContext.js';
|
|
6
|
-
import { BuildFunction } from '../BuildFunction.js';
|
|
7
6
|
export declare const SCRIPTS_PATH: string;
|
|
8
7
|
export interface SerializedCustomBuildFunctionArguments {
|
|
9
8
|
env: BuildStepEnv;
|
|
@@ -12,7 +11,3 @@ export interface SerializedCustomBuildFunctionArguments {
|
|
|
12
11
|
ctx: SerializedBuildStepContext;
|
|
13
12
|
}
|
|
14
13
|
export declare function createCustomFunctionCall(customFunctionModulePath: string): BuildStepFunction;
|
|
15
|
-
export declare const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID = "install_dependencies_and_compile_custom_function_modules";
|
|
16
|
-
export declare const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE = "internal";
|
|
17
|
-
export declare const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME = "Install dependencies and compile custom function modules";
|
|
18
|
-
export declare function createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions: BuildFunction[]): BuildFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customFunction.js","sourceRoot":"","sources":["../../src/utils/customFunction.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;
|
|
1
|
+
{"version":3,"file":"customFunction.js","sourceRoot":"","sources":["../../src/utils/customFunction.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,yCAA0C;AAQ1C,+CAA8C;AAE9C,MAAM,WAAW,GAAG,IAAA,yBAAa,GAAE,CAAC;AAEvB,QAAA,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;AAS1F,SAAgB,wBAAwB,CAAC,wBAAgC;IACvE,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7C,MAAM,mBAAmB,GAA2C;YAClE,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CACrE;YACD,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CACxE;YACD,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE;SACrB,CAAC;QACF,MAAM,IAAA,qBAAU,EACd,MAAM,EACN;YACE,cAAI,CAAC,IAAI,CAAC,oBAAY,EAAE,uBAAuB,CAAC;YAChD,wBAAwB;YACxB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;SACpC,EACD;YACE,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,GAAG,CAAC,gBAAgB;YACzB,GAAG;SACJ,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AA1BD,4DA0BC","sourcesContent":["import path from 'path';\n\nimport { createContext } from 'this-file';\n\nimport { BuildStepFunction } from '../BuildStep.js';\nimport { BuildStepEnv } from '../BuildStepEnv.js';\nimport { SerializedBuildStepInput } from '../BuildStepInput.js';\nimport { SerializedBuildStepOutput } from '../BuildStepOutput.js';\nimport { SerializedBuildStepContext } from '../BuildStepContext.js';\n\nimport { spawnAsync } from './shell/spawn.js';\n\nconst thisFileCtx = createContext();\n\nexport const SCRIPTS_PATH = path.join(thisFileCtx.dirname, '../../dist_commonjs/scripts');\n\nexport interface SerializedCustomBuildFunctionArguments {\n env: BuildStepEnv;\n inputs: Record<string, SerializedBuildStepInput>;\n outputs: Record<string, SerializedBuildStepOutput>;\n ctx: SerializedBuildStepContext;\n}\n\nexport function createCustomFunctionCall(customFunctionModulePath: string): BuildStepFunction {\n return async (ctx, { env, inputs, outputs }) => {\n const serializedArguments: SerializedCustomBuildFunctionArguments = {\n env,\n inputs: Object.fromEntries(\n Object.entries(inputs).map(([id, input]) => [id, input.serialize()])\n ),\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([id, output]) => [id, output.serialize()])\n ),\n ctx: ctx.serialize(),\n };\n await spawnAsync(\n 'node',\n [\n path.join(SCRIPTS_PATH, 'runCustomFunction.cjs'),\n customFunctionModulePath,\n JSON.stringify(serializedArguments),\n ],\n {\n logger: ctx.logger,\n cwd: ctx.workingDirectory,\n env,\n }\n );\n };\n}\n"]}
|
|
@@ -10,7 +10,6 @@ import { BuildWorkflowValidator } from './BuildWorkflowValidator.js';
|
|
|
10
10
|
import { BuildStepRuntimeError } from './errors.js';
|
|
11
11
|
import { duplicates } from './utils/expodash/duplicates.js';
|
|
12
12
|
import { uniq } from './utils/expodash/uniq.js';
|
|
13
|
-
import { INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID, INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME, INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE, createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules, } from './utils/customFunction.js';
|
|
14
13
|
export class BuildConfigParser {
|
|
15
14
|
constructor(ctx, { externalFunctions }) {
|
|
16
15
|
this.ctx = ctx;
|
|
@@ -26,10 +25,6 @@ export class BuildConfigParser {
|
|
|
26
25
|
const buildSteps = config.build.steps.map((stepConfig) => this.createBuildStepFromConfig(stepConfig, buildFunctions));
|
|
27
26
|
const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions });
|
|
28
27
|
await new BuildWorkflowValidator(workflow).validateAsync();
|
|
29
|
-
const maybeInstallDependenciesAndCompileCustomFunctionModulesStep = this.maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(workflow);
|
|
30
|
-
if (maybeInstallDependenciesAndCompileCustomFunctionModulesStep) {
|
|
31
|
-
workflow.buildSteps.unshift(maybeInstallDependenciesAndCompileCustomFunctionModulesStep);
|
|
32
|
-
}
|
|
33
28
|
return workflow;
|
|
34
29
|
}
|
|
35
30
|
createBuildStepFromConfig(buildStepConfig, buildFunctions) {
|
|
@@ -208,23 +203,5 @@ export class BuildConfigParser {
|
|
|
208
203
|
const ids = this.externalFunctions.map((f) => f.getFullId());
|
|
209
204
|
return uniq(ids);
|
|
210
205
|
}
|
|
211
|
-
maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(workflow) {
|
|
212
|
-
const customFunctions = [];
|
|
213
|
-
for (const buildFunction of Object.values(workflow.buildFunctions)) {
|
|
214
|
-
if (buildFunction.customFunctionModulePath) {
|
|
215
|
-
customFunctions.push(buildFunction);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (customFunctions.length === 0) {
|
|
219
|
-
return undefined;
|
|
220
|
-
}
|
|
221
|
-
const installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction = createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions);
|
|
222
|
-
return installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction.createBuildStepFromFunctionCall(this.ctx, {
|
|
223
|
-
id: `${INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE}/${INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID}`,
|
|
224
|
-
name: INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,
|
|
225
|
-
callInputs: {},
|
|
226
|
-
workingDirectory: this.ctx.defaultWorkingDirectory,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
206
|
}
|
|
230
207
|
//# sourceMappingURL=BuildConfigParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildConfigParser.js","sourceRoot":"","sources":["../src/BuildConfigParser.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport {\n BuildConfig,\n BuildFunctionConfig,\n BuildFunctionInputs,\n BuildFunctionOutputs,\n BuildStepBareCommandRun,\n BuildStepBareFunctionCall,\n BuildStepCommandRun,\n BuildStepConfig,\n BuildStepFunctionCall,\n BuildStepInputs,\n BuildStepOutputs,\n isBuildStepBareCommandRun,\n isBuildStepBareFunctionCall,\n isBuildStepCommandRun,\n readAndValidateBuildConfigAsync,\n} from './BuildConfig.js';\nimport { BuildFunction, BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport {\n BuildStepInput,\n BuildStepInputProvider,\n BuildStepInputValueTypeName,\n} from './BuildStepInput.js';\nimport { BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepOutput, BuildStepOutputProvider } from './BuildStepOutput.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildWorkflowValidator } from './BuildWorkflowValidator.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { uniq } from './utils/expodash/uniq.js';\nimport {\n INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID,\n INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,\n INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE,\n createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules,\n} from './utils/customFunction.js';\n\nexport class BuildConfigParser {\n private readonly externalFunctions?: BuildFunction[];\n\n constructor(\n private readonly ctx: BuildStepGlobalContext,\n { externalFunctions }: { externalFunctions?: BuildFunction[] }\n ) {\n this.validateExternalFunctions(externalFunctions);\n\n this.externalFunctions = externalFunctions;\n }\n\n public async parseAsync(): Promise<BuildWorkflow> {\n const config = await readAndValidateBuildConfigAsync(this.ctx.configPath, {\n externalFunctionIds: this.getExternalFunctionFullIds(),\n });\n const configBuildFunctions = this.createBuildFunctionsFromConfig(config.functions);\n const buildFunctions = this.mergeBuildFunctionsWithExternal(\n configBuildFunctions,\n this.externalFunctions\n );\n const buildSteps = config.build.steps.map((stepConfig) =>\n this.createBuildStepFromConfig(stepConfig, buildFunctions)\n );\n const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions });\n await new BuildWorkflowValidator(workflow).validateAsync();\n\n const maybeInstallDependenciesAndCompileCustomFunctionModulesStep =\n this.maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(workflow);\n if (maybeInstallDependenciesAndCompileCustomFunctionModulesStep) {\n workflow.buildSteps.unshift(maybeInstallDependenciesAndCompileCustomFunctionModulesStep);\n }\n return workflow;\n }\n\n private createBuildStepFromConfig(\n buildStepConfig: BuildStepConfig,\n buildFunctions: BuildFunctionById\n ): BuildStep {\n if (isBuildStepCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepCommandRun(buildStepConfig);\n } else if (isBuildStepBareCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareCommandRun(buildStepConfig);\n } else if (isBuildStepBareFunctionCall(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareFunctionCall(buildFunctions, buildStepConfig);\n } else {\n return this.createBuildStepFromBuildStepFunctionCall(buildFunctions, buildStepConfig);\n }\n }\n\n private createBuildStepFromBuildStepCommandRun({ run }: BuildStepCommandRun): BuildStep {\n const {\n id: maybeId,\n inputs: inputsConfig,\n outputs: outputsConfig,\n name,\n workingDirectory,\n shell,\n command,\n env,\n } = run;\n const id = BuildStep.getNewId(maybeId);\n const displayName = BuildStep.getDisplayName({ id, name, command });\n const inputs =\n inputsConfig && this.createBuildStepInputsFromDefinition(inputsConfig, displayName);\n const outputs =\n outputsConfig && this.createBuildStepOutputsFromDefinition(outputsConfig, displayName);\n return new BuildStep(this.ctx, {\n id,\n inputs,\n outputs,\n name,\n displayName,\n workingDirectory,\n shell,\n command,\n env,\n });\n }\n\n private createBuildStepFromBuildStepBareCommandRun({\n run: command,\n }: BuildStepBareCommandRun): BuildStep {\n const id = BuildStep.getNewId();\n const displayName = BuildStep.getDisplayName({ id, command });\n return new BuildStep(this.ctx, {\n id,\n displayName,\n command,\n });\n }\n\n private createBuildStepFromBuildStepBareFunctionCall(\n buildFunctions: BuildFunctionById,\n functionId: BuildStepBareFunctionCall\n ): BuildStep {\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx);\n }\n\n private createBuildStepFromBuildStepFunctionCall(\n buildFunctions: BuildFunctionById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep {\n const keys = Object.keys(buildStepFunctionCall);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n const functionId = keys[0];\n const buildFunctionCallConfig = buildStepFunctionCall[functionId];\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx, {\n id: buildFunctionCallConfig.id,\n name: buildFunctionCallConfig.name,\n callInputs: buildFunctionCallConfig.inputs,\n workingDirectory: buildFunctionCallConfig.workingDirectory,\n shell: buildFunctionCallConfig.shell,\n env: buildFunctionCallConfig.env,\n });\n }\n\n private createBuildFunctionsFromConfig(\n buildFunctionsConfig: BuildConfig['functions']\n ): BuildFunctionById {\n if (!buildFunctionsConfig) {\n return {};\n }\n const result: BuildFunctionById = {};\n for (const [functionId, buildFunctionConfig] of Object.entries(buildFunctionsConfig)) {\n const buildFunction = this.createBuildFunctionFromConfig({\n id: functionId,\n ...buildFunctionConfig,\n });\n result[buildFunction.getFullId()] = buildFunction;\n }\n return result;\n }\n\n private createBuildFunctionFromConfig({\n id,\n name,\n inputs: inputsConfig,\n outputs: outputsConfig,\n shell,\n command,\n supportedRuntimePlatforms,\n path: relativeCustomFunctionModulePath,\n }: BuildFunctionConfig & { id: string }): BuildFunction {\n const inputProviders =\n inputsConfig && this.createBuildStepInputProvidersFromBuildFunctionInputs(inputsConfig);\n const outputProviders =\n outputsConfig && this.createBuildStepOutputProvidersFromBuildFunctionOutputs(outputsConfig);\n let customFunctionModulePath = relativeCustomFunctionModulePath;\n if (relativeCustomFunctionModulePath) {\n const baseConfigDir = path.dirname(this.ctx.configPath);\n customFunctionModulePath = path.resolve(baseConfigDir, relativeCustomFunctionModulePath);\n }\n return new BuildFunction({\n id,\n name,\n inputProviders,\n outputProviders,\n shell,\n command,\n customFunctionModulePath,\n supportedRuntimePlatforms,\n });\n }\n\n private createBuildStepInputsFromDefinition(\n buildStepInputs: BuildStepInputs,\n stepDisplayName: string\n ): BuildStepInput[] {\n return Object.entries(buildStepInputs).map(\n ([key, value]) =>\n new BuildStepInput(this.ctx, {\n id: key,\n stepDisplayName,\n defaultValue: value,\n required: true,\n allowedValueTypeName:\n typeof value === 'object'\n ? BuildStepInputValueTypeName.JSON\n : (typeof value as BuildStepInputValueTypeName),\n })\n );\n }\n\n private createBuildStepInputProvidersFromBuildFunctionInputs(\n buildFunctionInputs: BuildFunctionInputs\n ): BuildStepInputProvider[] {\n return buildFunctionInputs.map((entry) => {\n return typeof entry === 'string'\n ? BuildStepInput.createProvider({\n id: entry,\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n })\n : BuildStepInput.createProvider({\n id: entry.name,\n required: entry.required ?? true,\n defaultValue: entry.defaultValue,\n allowedValues: entry.allowedValues,\n allowedValueTypeName: entry.allowedValueType,\n });\n });\n }\n\n private createBuildStepOutputsFromDefinition(\n buildStepOutputs: BuildStepOutputs,\n stepDisplayName: string\n ): BuildStepOutput[] {\n return buildStepOutputs.map((entry) =>\n typeof entry === 'string'\n ? new BuildStepOutput(this.ctx, { id: entry, stepDisplayName, required: true })\n : new BuildStepOutput(this.ctx, {\n id: entry.name,\n stepDisplayName,\n required: entry.required ?? true,\n })\n );\n }\n\n private createBuildStepOutputProvidersFromBuildFunctionOutputs(\n buildFunctionOutputs: BuildFunctionOutputs\n ): BuildStepOutputProvider[] {\n return buildFunctionOutputs.map((entry) =>\n typeof entry === 'string'\n ? BuildStepOutput.createProvider({ id: entry, required: true })\n : BuildStepOutput.createProvider({ id: entry.name, required: entry.required ?? true })\n );\n }\n\n private mergeBuildFunctionsWithExternal(\n configFunctions: BuildFunctionById,\n externalFunctions?: BuildFunction[]\n ): BuildFunctionById {\n const result: BuildFunctionById = { ...configFunctions };\n if (externalFunctions === undefined) {\n return result;\n }\n for (const buildFunction of externalFunctions) {\n // functions defined in config shadow the external ones\n const fullId = buildFunction.getFullId();\n if (!(fullId in result)) {\n result[fullId] = buildFunction;\n }\n }\n return result;\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 BuildStepRuntimeError(\n `Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n private 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 private maybeCreateInstallDependenciesAndCompileCustomFunctionModulesStep(\n workflow: BuildWorkflow\n ): BuildStep | undefined {\n const customFunctions: BuildFunction[] = [];\n for (const buildFunction of Object.values(workflow.buildFunctions)) {\n if (buildFunction.customFunctionModulePath) {\n customFunctions.push(buildFunction);\n }\n }\n\n if (customFunctions.length === 0) {\n return undefined;\n }\n\n const installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction =\n createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions);\n\n return installDependenciesAndCompileCustomFunctionModulesFunctionBuildFunction.createBuildStepFromFunctionCall(\n this.ctx,\n {\n id: `${INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE}/${INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID}`,\n name: INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,\n callInputs: {},\n workingDirectory: this.ctx.defaultWorkingDirectory,\n }\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BuildConfigParser.js","sourceRoot":"","sources":["../src/BuildConfigParser.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport {\n BuildConfig,\n BuildFunctionConfig,\n BuildFunctionInputs,\n BuildFunctionOutputs,\n BuildStepBareCommandRun,\n BuildStepBareFunctionCall,\n BuildStepCommandRun,\n BuildStepConfig,\n BuildStepFunctionCall,\n BuildStepInputs,\n BuildStepOutputs,\n isBuildStepBareCommandRun,\n isBuildStepBareFunctionCall,\n isBuildStepCommandRun,\n readAndValidateBuildConfigAsync,\n} from './BuildConfig.js';\nimport { BuildFunction, BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport {\n BuildStepInput,\n BuildStepInputProvider,\n BuildStepInputValueTypeName,\n} from './BuildStepInput.js';\nimport { BuildStepGlobalContext } from './BuildStepContext.js';\nimport { BuildStepOutput, BuildStepOutputProvider } from './BuildStepOutput.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildWorkflowValidator } from './BuildWorkflowValidator.js';\nimport { BuildStepRuntimeError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { uniq } from './utils/expodash/uniq.js';\n\nexport class BuildConfigParser {\n private readonly externalFunctions?: BuildFunction[];\n\n constructor(\n private readonly ctx: BuildStepGlobalContext,\n { externalFunctions }: { externalFunctions?: BuildFunction[] }\n ) {\n this.validateExternalFunctions(externalFunctions);\n\n this.externalFunctions = externalFunctions;\n }\n\n public async parseAsync(): Promise<BuildWorkflow> {\n const config = await readAndValidateBuildConfigAsync(this.ctx.configPath, {\n externalFunctionIds: this.getExternalFunctionFullIds(),\n });\n const configBuildFunctions = this.createBuildFunctionsFromConfig(config.functions);\n const buildFunctions = this.mergeBuildFunctionsWithExternal(\n configBuildFunctions,\n this.externalFunctions\n );\n const buildSteps = config.build.steps.map((stepConfig) =>\n this.createBuildStepFromConfig(stepConfig, buildFunctions)\n );\n const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions });\n await new BuildWorkflowValidator(workflow).validateAsync();\n return workflow;\n }\n\n private createBuildStepFromConfig(\n buildStepConfig: BuildStepConfig,\n buildFunctions: BuildFunctionById\n ): BuildStep {\n if (isBuildStepCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepCommandRun(buildStepConfig);\n } else if (isBuildStepBareCommandRun(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareCommandRun(buildStepConfig);\n } else if (isBuildStepBareFunctionCall(buildStepConfig)) {\n return this.createBuildStepFromBuildStepBareFunctionCall(buildFunctions, buildStepConfig);\n } else {\n return this.createBuildStepFromBuildStepFunctionCall(buildFunctions, buildStepConfig);\n }\n }\n\n private createBuildStepFromBuildStepCommandRun({ run }: BuildStepCommandRun): BuildStep {\n const {\n id: maybeId,\n inputs: inputsConfig,\n outputs: outputsConfig,\n name,\n workingDirectory,\n shell,\n command,\n env,\n } = run;\n const id = BuildStep.getNewId(maybeId);\n const displayName = BuildStep.getDisplayName({ id, name, command });\n const inputs =\n inputsConfig && this.createBuildStepInputsFromDefinition(inputsConfig, displayName);\n const outputs =\n outputsConfig && this.createBuildStepOutputsFromDefinition(outputsConfig, displayName);\n return new BuildStep(this.ctx, {\n id,\n inputs,\n outputs,\n name,\n displayName,\n workingDirectory,\n shell,\n command,\n env,\n });\n }\n\n private createBuildStepFromBuildStepBareCommandRun({\n run: command,\n }: BuildStepBareCommandRun): BuildStep {\n const id = BuildStep.getNewId();\n const displayName = BuildStep.getDisplayName({ id, command });\n return new BuildStep(this.ctx, {\n id,\n displayName,\n command,\n });\n }\n\n private createBuildStepFromBuildStepBareFunctionCall(\n buildFunctions: BuildFunctionById,\n functionId: BuildStepBareFunctionCall\n ): BuildStep {\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx);\n }\n\n private createBuildStepFromBuildStepFunctionCall(\n buildFunctions: BuildFunctionById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep {\n const keys = Object.keys(buildStepFunctionCall);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n const functionId = keys[0];\n const buildFunctionCallConfig = buildStepFunctionCall[functionId];\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx, {\n id: buildFunctionCallConfig.id,\n name: buildFunctionCallConfig.name,\n callInputs: buildFunctionCallConfig.inputs,\n workingDirectory: buildFunctionCallConfig.workingDirectory,\n shell: buildFunctionCallConfig.shell,\n env: buildFunctionCallConfig.env,\n });\n }\n\n private createBuildFunctionsFromConfig(\n buildFunctionsConfig: BuildConfig['functions']\n ): BuildFunctionById {\n if (!buildFunctionsConfig) {\n return {};\n }\n const result: BuildFunctionById = {};\n for (const [functionId, buildFunctionConfig] of Object.entries(buildFunctionsConfig)) {\n const buildFunction = this.createBuildFunctionFromConfig({\n id: functionId,\n ...buildFunctionConfig,\n });\n result[buildFunction.getFullId()] = buildFunction;\n }\n return result;\n }\n\n private createBuildFunctionFromConfig({\n id,\n name,\n inputs: inputsConfig,\n outputs: outputsConfig,\n shell,\n command,\n supportedRuntimePlatforms,\n path: relativeCustomFunctionModulePath,\n }: BuildFunctionConfig & { id: string }): BuildFunction {\n const inputProviders =\n inputsConfig && this.createBuildStepInputProvidersFromBuildFunctionInputs(inputsConfig);\n const outputProviders =\n outputsConfig && this.createBuildStepOutputProvidersFromBuildFunctionOutputs(outputsConfig);\n let customFunctionModulePath = relativeCustomFunctionModulePath;\n if (relativeCustomFunctionModulePath) {\n const baseConfigDir = path.dirname(this.ctx.configPath);\n customFunctionModulePath = path.resolve(baseConfigDir, relativeCustomFunctionModulePath);\n }\n return new BuildFunction({\n id,\n name,\n inputProviders,\n outputProviders,\n shell,\n command,\n customFunctionModulePath,\n supportedRuntimePlatforms,\n });\n }\n\n private createBuildStepInputsFromDefinition(\n buildStepInputs: BuildStepInputs,\n stepDisplayName: string\n ): BuildStepInput[] {\n return Object.entries(buildStepInputs).map(\n ([key, value]) =>\n new BuildStepInput(this.ctx, {\n id: key,\n stepDisplayName,\n defaultValue: value,\n required: true,\n allowedValueTypeName:\n typeof value === 'object'\n ? BuildStepInputValueTypeName.JSON\n : (typeof value as BuildStepInputValueTypeName),\n })\n );\n }\n\n private createBuildStepInputProvidersFromBuildFunctionInputs(\n buildFunctionInputs: BuildFunctionInputs\n ): BuildStepInputProvider[] {\n return buildFunctionInputs.map((entry) => {\n return typeof entry === 'string'\n ? BuildStepInput.createProvider({\n id: entry,\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n })\n : BuildStepInput.createProvider({\n id: entry.name,\n required: entry.required ?? true,\n defaultValue: entry.defaultValue,\n allowedValues: entry.allowedValues,\n allowedValueTypeName: entry.allowedValueType,\n });\n });\n }\n\n private createBuildStepOutputsFromDefinition(\n buildStepOutputs: BuildStepOutputs,\n stepDisplayName: string\n ): BuildStepOutput[] {\n return buildStepOutputs.map((entry) =>\n typeof entry === 'string'\n ? new BuildStepOutput(this.ctx, { id: entry, stepDisplayName, required: true })\n : new BuildStepOutput(this.ctx, {\n id: entry.name,\n stepDisplayName,\n required: entry.required ?? true,\n })\n );\n }\n\n private createBuildStepOutputProvidersFromBuildFunctionOutputs(\n buildFunctionOutputs: BuildFunctionOutputs\n ): BuildStepOutputProvider[] {\n return buildFunctionOutputs.map((entry) =>\n typeof entry === 'string'\n ? BuildStepOutput.createProvider({ id: entry, required: true })\n : BuildStepOutput.createProvider({ id: entry.name, required: entry.required ?? true })\n );\n }\n\n private mergeBuildFunctionsWithExternal(\n configFunctions: BuildFunctionById,\n externalFunctions?: BuildFunction[]\n ): BuildFunctionById {\n const result: BuildFunctionById = { ...configFunctions };\n if (externalFunctions === undefined) {\n return result;\n }\n for (const buildFunction of externalFunctions) {\n // functions defined in config shadow the external ones\n const fullId = buildFunction.getFullId();\n if (!(fullId in result)) {\n result[fullId] = buildFunction;\n }\n }\n return result;\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 BuildStepRuntimeError(\n `Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n private 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"]}
|
|
@@ -3,7 +3,6 @@ import { BuildStepEnv } from '../BuildStepEnv.js';
|
|
|
3
3
|
import { SerializedBuildStepInput } from '../BuildStepInput.js';
|
|
4
4
|
import { SerializedBuildStepOutput } from '../BuildStepOutput.js';
|
|
5
5
|
import { SerializedBuildStepContext } from '../BuildStepContext.js';
|
|
6
|
-
import { BuildFunction } from '../BuildFunction.js';
|
|
7
6
|
export declare const SCRIPTS_PATH: string;
|
|
8
7
|
export interface SerializedCustomBuildFunctionArguments {
|
|
9
8
|
env: BuildStepEnv;
|
|
@@ -12,7 +11,3 @@ export interface SerializedCustomBuildFunctionArguments {
|
|
|
12
11
|
ctx: SerializedBuildStepContext;
|
|
13
12
|
}
|
|
14
13
|
export declare function createCustomFunctionCall(customFunctionModulePath: string): BuildStepFunction;
|
|
15
|
-
export declare const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID = "install_dependencies_and_compile_custom_function_modules";
|
|
16
|
-
export declare const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE = "internal";
|
|
17
|
-
export declare const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME = "Install dependencies and compile custom function modules";
|
|
18
|
-
export declare function createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions: BuildFunction[]): BuildFunction;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
-
import assert from 'assert';
|
|
3
2
|
import { createContext } from 'this-file';
|
|
4
|
-
import { resolvePackageManager } from '@expo/package-manager';
|
|
5
|
-
import { BuildFunction } from '../BuildFunction.js';
|
|
6
3
|
import { spawnAsync } from './shell/spawn.js';
|
|
7
4
|
const thisFileCtx = createContext();
|
|
8
5
|
export const SCRIPTS_PATH = path.join(thisFileCtx.dirname, '../../dist_commonjs/scripts');
|
|
@@ -25,57 +22,4 @@ export function createCustomFunctionCall(customFunctionModulePath) {
|
|
|
25
22
|
});
|
|
26
23
|
};
|
|
27
24
|
}
|
|
28
|
-
export const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID = 'install_dependencies_and_compile_custom_function_modules';
|
|
29
|
-
export const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE = 'internal';
|
|
30
|
-
export const INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME = 'Install dependencies and compile custom function modules';
|
|
31
|
-
export function createBuildFunctionToInstallDependenciesAndCompileCustomFunctionModules(customFunctions) {
|
|
32
|
-
return new BuildFunction({
|
|
33
|
-
namespace: INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAMESPACE,
|
|
34
|
-
id: INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_ID,
|
|
35
|
-
name: INSTALL_DEPENDENCIES_AND_COMPILE_CUSTOM_FUNCTION_MODULES_NAME,
|
|
36
|
-
// eslint-disable-next-line async-protect/async-suffix
|
|
37
|
-
fn: async (ctx, { env }) => {
|
|
38
|
-
for (const customFunction of customFunctions) {
|
|
39
|
-
assert(customFunction.customFunctionModulePath, 'customFunctionModulePath');
|
|
40
|
-
const packageManager = resolvePackageManagerForCustomFunction(customFunction.customFunctionModulePath);
|
|
41
|
-
ctx.logger.info(`Detected package manager ${packageManager} for custom function ${customFunction.id}`);
|
|
42
|
-
ctx.logger.info(`Installing dependencies for custom function ${customFunction.id}...`);
|
|
43
|
-
await spawnAsync(packageManager, ['install'], {
|
|
44
|
-
cwd: customFunction.customFunctionModulePath,
|
|
45
|
-
logger: ctx.logger,
|
|
46
|
-
env,
|
|
47
|
-
});
|
|
48
|
-
ctx.logger.info(`Compiling custom function ${customFunction.id}...`);
|
|
49
|
-
await spawnAsync(packageManager, ['run', 'build'], {
|
|
50
|
-
cwd: customFunction.customFunctionModulePath,
|
|
51
|
-
logger: ctx.logger,
|
|
52
|
-
env,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
var PackageManager;
|
|
59
|
-
(function (PackageManager) {
|
|
60
|
-
PackageManager["YARN"] = "yarn";
|
|
61
|
-
PackageManager["NPM"] = "npm";
|
|
62
|
-
PackageManager["PNPM"] = "pnpm";
|
|
63
|
-
})(PackageManager || (PackageManager = {}));
|
|
64
|
-
function resolvePackageManagerForCustomFunction(customFunctionModulePath) {
|
|
65
|
-
try {
|
|
66
|
-
const manager = resolvePackageManager(customFunctionModulePath);
|
|
67
|
-
if (manager === 'npm') {
|
|
68
|
-
return PackageManager.NPM;
|
|
69
|
-
}
|
|
70
|
-
else if (manager === 'pnpm') {
|
|
71
|
-
return PackageManager.PNPM;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
return PackageManager.YARN;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
return PackageManager.YARN;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
25
|
//# sourceMappingURL=customFunction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customFunction.js","sourceRoot":"","sources":["../../src/utils/customFunction.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"customFunction.js","sourceRoot":"","sources":["../../src/utils/customFunction.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAQ1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;AAS1F,MAAM,UAAU,wBAAwB,CAAC,wBAAgC;IACvE,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7C,MAAM,mBAAmB,GAA2C;YAClE,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CACrE;YACD,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CACxE;YACD,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE;SACrB,CAAC;QACF,MAAM,UAAU,CACd,MAAM,EACN;YACE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC;YAChD,wBAAwB;YACxB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;SACpC,EACD;YACE,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,GAAG,CAAC,gBAAgB;YACzB,GAAG;SACJ,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import path from 'path';\n\nimport { createContext } from 'this-file';\n\nimport { BuildStepFunction } from '../BuildStep.js';\nimport { BuildStepEnv } from '../BuildStepEnv.js';\nimport { SerializedBuildStepInput } from '../BuildStepInput.js';\nimport { SerializedBuildStepOutput } from '../BuildStepOutput.js';\nimport { SerializedBuildStepContext } from '../BuildStepContext.js';\n\nimport { spawnAsync } from './shell/spawn.js';\n\nconst thisFileCtx = createContext();\n\nexport const SCRIPTS_PATH = path.join(thisFileCtx.dirname, '../../dist_commonjs/scripts');\n\nexport interface SerializedCustomBuildFunctionArguments {\n env: BuildStepEnv;\n inputs: Record<string, SerializedBuildStepInput>;\n outputs: Record<string, SerializedBuildStepOutput>;\n ctx: SerializedBuildStepContext;\n}\n\nexport function createCustomFunctionCall(customFunctionModulePath: string): BuildStepFunction {\n return async (ctx, { env, inputs, outputs }) => {\n const serializedArguments: SerializedCustomBuildFunctionArguments = {\n env,\n inputs: Object.fromEntries(\n Object.entries(inputs).map(([id, input]) => [id, input.serialize()])\n ),\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([id, output]) => [id, output.serialize()])\n ),\n ctx: ctx.serialize(),\n };\n await spawnAsync(\n 'node',\n [\n path.join(SCRIPTS_PATH, 'runCustomFunction.cjs'),\n customFunctionModulePath,\n JSON.stringify(serializedArguments),\n ],\n {\n logger: ctx.logger,\n cwd: ctx.workingDirectory,\n env,\n }\n );\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/steps",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.30",
|
|
5
5
|
"main": "./dist_commonjs/index.cjs",
|
|
6
6
|
"types": "./dist_esm/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -31,38 +31,37 @@
|
|
|
31
31
|
"bugs": "https://github.com/expo/eas-build/issues",
|
|
32
32
|
"license": "BUSL-1.1",
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@jest/globals": "^29.
|
|
35
|
-
"@types/jest": "^29.
|
|
34
|
+
"@jest/globals": "^29.6.2",
|
|
35
|
+
"@types/jest": "^29.5.3",
|
|
36
36
|
"@types/lodash.clonedeep": "^4.5.7",
|
|
37
37
|
"@types/lodash.get": "^4.4.7",
|
|
38
38
|
"@types/node": "^18.11.18",
|
|
39
39
|
"chokidar-cli": "^3.0.0",
|
|
40
40
|
"eslint-plugin-async-protect": "^3.0.0",
|
|
41
|
-
"jest": "^29.
|
|
42
|
-
"ts-jest": "^29.
|
|
41
|
+
"jest": "^29.6.2",
|
|
42
|
+
"ts-jest": "^29.1.1",
|
|
43
43
|
"ts-mockito": "^2.6.1",
|
|
44
44
|
"ts-node": "^10.9.1",
|
|
45
|
-
"typescript": "^
|
|
45
|
+
"typescript": "^5.1.6"
|
|
46
46
|
},
|
|
47
47
|
"engines": {
|
|
48
48
|
"node": ">=14.0.0"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@expo/logger": "1.0.
|
|
52
|
-
"@expo/
|
|
53
|
-
"@expo/spawn-async": "^1.7.0",
|
|
51
|
+
"@expo/logger": "1.0.30",
|
|
52
|
+
"@expo/spawn-async": "^1.7.2",
|
|
54
53
|
"arg": "^5.0.2",
|
|
55
54
|
"fs-extra": "^11.1.1",
|
|
56
|
-
"joi": "^17.
|
|
55
|
+
"joi": "^17.9.2",
|
|
57
56
|
"lodash.clonedeep": "^4.5.0",
|
|
58
57
|
"lodash.get": "^4.4.2",
|
|
59
58
|
"this-file": "^2.0.3",
|
|
60
59
|
"uuid": "^9.0.0",
|
|
61
|
-
"yaml": "^2.
|
|
60
|
+
"yaml": "^2.3.1"
|
|
62
61
|
},
|
|
63
62
|
"volta": {
|
|
64
63
|
"node": "18.13.0",
|
|
65
64
|
"yarn": "1.22.19"
|
|
66
65
|
},
|
|
67
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "21dfc7673402b263d1a0af8df91cad411603d21d"
|
|
68
67
|
}
|