@expo/steps 0.0.8 → 0.0.10

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.
Files changed (128) hide show
  1. package/dist_commonjs/BuildConfig.cjs +15 -11
  2. package/dist_commonjs/BuildConfig.d.ts +1 -2
  3. package/dist_commonjs/BuildConfig.js.map +1 -1
  4. package/dist_commonjs/BuildConfigParser.cjs +115 -79
  5. package/dist_commonjs/BuildConfigParser.d.ts +14 -5
  6. package/dist_commonjs/BuildConfigParser.js.map +1 -1
  7. package/dist_commonjs/BuildFunction.cjs +30 -13
  8. package/dist_commonjs/BuildFunction.d.ts +20 -15
  9. package/dist_commonjs/BuildFunction.js.map +1 -1
  10. package/dist_commonjs/BuildStep.cjs +83 -55
  11. package/dist_commonjs/BuildStep.d.ts +25 -11
  12. package/dist_commonjs/BuildStep.js.map +1 -1
  13. package/dist_commonjs/BuildStepContext.cjs +5 -2
  14. package/dist_commonjs/BuildStepContext.d.ts +4 -0
  15. package/dist_commonjs/BuildStepContext.js.map +1 -1
  16. package/dist_commonjs/BuildStepInput.cjs +19 -6
  17. package/dist_commonjs/BuildStepInput.d.ts +11 -4
  18. package/dist_commonjs/BuildStepInput.js.map +1 -1
  19. package/dist_commonjs/BuildStepOutput.cjs +19 -6
  20. package/dist_commonjs/BuildStepOutput.d.ts +10 -4
  21. package/dist_commonjs/BuildStepOutput.js.map +1 -1
  22. package/dist_commonjs/BuildTemporaryFiles.cjs +1 -59
  23. package/dist_commonjs/BuildTemporaryFiles.d.ts +0 -4
  24. package/dist_commonjs/BuildTemporaryFiles.js.map +1 -1
  25. package/dist_commonjs/BuildWorkflow.cjs +3 -16
  26. package/dist_commonjs/BuildWorkflow.d.ts +0 -3
  27. package/dist_commonjs/BuildWorkflow.js.map +1 -1
  28. package/dist_commonjs/BuildWorkflowValidator.cjs +18 -28
  29. package/dist_commonjs/BuildWorkflowValidator.js.map +1 -1
  30. package/dist_commonjs/cli/cli.cjs +0 -4
  31. package/dist_commonjs/cli/cli.js.map +1 -1
  32. package/dist_commonjs/errors.cjs +30 -0
  33. package/dist_commonjs/errors.d.ts +24 -0
  34. package/dist_commonjs/errors.js.map +1 -0
  35. package/dist_commonjs/index.cjs +33 -3
  36. package/dist_commonjs/index.d.ts +5 -1
  37. package/dist_commonjs/index.js.map +1 -1
  38. package/dist_commonjs/utils/expodash/duplicates.cjs +18 -0
  39. package/dist_commonjs/utils/expodash/duplicates.d.ts +1 -0
  40. package/dist_commonjs/utils/expodash/duplicates.js.map +1 -0
  41. package/dist_commonjs/utils/template.cjs +2 -2
  42. package/dist_commonjs/utils/template.js.map +1 -1
  43. package/dist_esm/BuildConfig.d.ts +1 -2
  44. package/dist_esm/BuildConfig.js +14 -10
  45. package/dist_esm/BuildConfig.js.map +1 -1
  46. package/dist_esm/BuildConfigParser.d.ts +14 -5
  47. package/dist_esm/BuildConfigParser.js +115 -79
  48. package/dist_esm/BuildConfigParser.js.map +1 -1
  49. package/dist_esm/BuildFunction.d.ts +20 -15
  50. package/dist_esm/BuildFunction.js +27 -13
  51. package/dist_esm/BuildFunction.js.map +1 -1
  52. package/dist_esm/BuildStep.d.ts +25 -11
  53. package/dist_esm/BuildStep.js +82 -54
  54. package/dist_esm/BuildStep.js.map +1 -1
  55. package/dist_esm/BuildStepContext.d.ts +4 -0
  56. package/dist_esm/BuildStepContext.js +4 -1
  57. package/dist_esm/BuildStepContext.js.map +1 -1
  58. package/dist_esm/BuildStepInput.d.ts +11 -4
  59. package/dist_esm/BuildStepInput.js +17 -5
  60. package/dist_esm/BuildStepInput.js.map +1 -1
  61. package/dist_esm/BuildStepOutput.d.ts +10 -4
  62. package/dist_esm/BuildStepOutput.js +17 -5
  63. package/dist_esm/BuildStepOutput.js.map +1 -1
  64. package/dist_esm/BuildTemporaryFiles.d.ts +0 -4
  65. package/dist_esm/BuildTemporaryFiles.js +0 -55
  66. package/dist_esm/BuildTemporaryFiles.js.map +1 -1
  67. package/dist_esm/BuildWorkflow.d.ts +0 -3
  68. package/dist_esm/BuildWorkflow.js +3 -16
  69. package/dist_esm/BuildWorkflow.js.map +1 -1
  70. package/dist_esm/BuildWorkflowValidator.js +17 -27
  71. package/dist_esm/BuildWorkflowValidator.js.map +1 -1
  72. package/dist_esm/cli/cli.js +0 -4
  73. package/dist_esm/cli/cli.js.map +1 -1
  74. package/dist_esm/errors.d.ts +24 -0
  75. package/dist_esm/errors.js +23 -0
  76. package/dist_esm/errors.js.map +1 -0
  77. package/dist_esm/index.d.ts +5 -1
  78. package/dist_esm/index.js +5 -1
  79. package/dist_esm/index.js.map +1 -1
  80. package/dist_esm/utils/expodash/duplicates.d.ts +1 -0
  81. package/dist_esm/utils/expodash/duplicates.js +14 -0
  82. package/dist_esm/utils/expodash/duplicates.js.map +1 -0
  83. package/dist_esm/utils/template.js +1 -1
  84. package/dist_esm/utils/template.js.map +1 -1
  85. package/package.json +2 -1
  86. package/bin/upload-artifact +0 -12
  87. package/dist_commonjs/BuildArtifacts.cjs +0 -9
  88. package/dist_commonjs/BuildArtifacts.d.ts +0 -5
  89. package/dist_commonjs/BuildArtifacts.js.map +0 -1
  90. package/dist_commonjs/bin/uploadArtifact.cjs +0 -30
  91. package/dist_commonjs/bin/uploadArtifact.d.ts +0 -1
  92. package/dist_commonjs/bin/uploadArtifact.js.map +0 -1
  93. package/dist_commonjs/errors/BuildConfigError.cjs +0 -8
  94. package/dist_commonjs/errors/BuildConfigError.d.ts +0 -3
  95. package/dist_commonjs/errors/BuildConfigError.js.map +0 -1
  96. package/dist_commonjs/errors/BuildInternalError.cjs +0 -7
  97. package/dist_commonjs/errors/BuildInternalError.d.ts +0 -2
  98. package/dist_commonjs/errors/BuildInternalError.js.map +0 -1
  99. package/dist_commonjs/errors/BuildStepRuntimeError.cjs +0 -8
  100. package/dist_commonjs/errors/BuildStepRuntimeError.d.ts +0 -3
  101. package/dist_commonjs/errors/BuildStepRuntimeError.js.map +0 -1
  102. package/dist_commonjs/errors/BuildWorkflowError.cjs +0 -13
  103. package/dist_commonjs/errors/BuildWorkflowError.d.ts +0 -10
  104. package/dist_commonjs/errors/BuildWorkflowError.js.map +0 -1
  105. package/dist_commonjs/errors/UserError.cjs +0 -14
  106. package/dist_commonjs/errors/UserError.d.ts +0 -9
  107. package/dist_commonjs/errors/UserError.js.map +0 -1
  108. package/dist_esm/BuildArtifacts.d.ts +0 -5
  109. package/dist_esm/BuildArtifacts.js +0 -6
  110. package/dist_esm/BuildArtifacts.js.map +0 -1
  111. package/dist_esm/bin/uploadArtifact.d.ts +0 -1
  112. package/dist_esm/bin/uploadArtifact.js +0 -25
  113. package/dist_esm/bin/uploadArtifact.js.map +0 -1
  114. package/dist_esm/errors/BuildConfigError.d.ts +0 -3
  115. package/dist_esm/errors/BuildConfigError.js +0 -4
  116. package/dist_esm/errors/BuildConfigError.js.map +0 -1
  117. package/dist_esm/errors/BuildInternalError.d.ts +0 -2
  118. package/dist_esm/errors/BuildInternalError.js +0 -3
  119. package/dist_esm/errors/BuildInternalError.js.map +0 -1
  120. package/dist_esm/errors/BuildStepRuntimeError.d.ts +0 -3
  121. package/dist_esm/errors/BuildStepRuntimeError.js +0 -4
  122. package/dist_esm/errors/BuildStepRuntimeError.js.map +0 -1
  123. package/dist_esm/errors/BuildWorkflowError.d.ts +0 -10
  124. package/dist_esm/errors/BuildWorkflowError.js +0 -9
  125. package/dist_esm/errors/BuildWorkflowError.js.map +0 -1
  126. package/dist_esm/errors/UserError.d.ts +0 -9
  127. package/dist_esm/errors/UserError.js +0 -10
  128. package/dist_esm/errors/UserError.js.map +0 -1
@@ -1,8 +1,6 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs/promises';
3
3
  import { v4 as uuidv4 } from 'uuid';
4
- import { BuildArtifactType } from './BuildArtifacts.js';
5
- import { BuildInternalError } from './errors/BuildInternalError.js';
6
4
  export async function saveScriptToTemporaryFileAsync(ctx, stepId, scriptContents) {
7
5
  const scriptsDir = getTemporaryScriptsDirPath(ctx, stepId);
8
6
  await fs.mkdir(scriptsDir, { recursive: true });
@@ -10,46 +8,11 @@ export async function saveScriptToTemporaryFileAsync(ctx, stepId, scriptContents
10
8
  await fs.writeFile(temporaryScriptPath, scriptContents);
11
9
  return temporaryScriptPath;
12
10
  }
13
- export async function saveArtifactToTemporaryDirectoryAsync(ctx, type, artifactPath) {
14
- let targetArtifactPath;
15
- if (type === BuildArtifactType.APPLICATION_ARCHIVE) {
16
- targetArtifactPath = path.join(getTemporaryApplicationArchiveDirPath(ctx), path.basename(artifactPath));
17
- }
18
- else if (type === BuildArtifactType.BUILD_ARTIFACT) {
19
- targetArtifactPath = path.join(getTemporaryBuildArtifactsDirPath(ctx), path.basename(artifactPath));
20
- }
21
- else {
22
- throw new BuildInternalError(`Uploading artifacts of type "${type}" is not implemented.`);
23
- }
24
- await fs.mkdir(path.dirname(targetArtifactPath), { recursive: true });
25
- await fs.copyFile(artifactPath, targetArtifactPath);
26
- return targetArtifactPath;
27
- }
28
11
  export async function createTemporaryOutputsDirectoryAsync(ctx, stepId) {
29
12
  const directory = getTemporaryOutputsDirPath(ctx, stepId);
30
13
  await fs.mkdir(directory, { recursive: true });
31
14
  return directory;
32
15
  }
33
- export async function findArtifactsByTypeAsync(ctx, type) {
34
- let artifactsDirPath;
35
- if (type === BuildArtifactType.APPLICATION_ARCHIVE) {
36
- artifactsDirPath = getTemporaryApplicationArchiveDirPath(ctx);
37
- }
38
- else if (type === BuildArtifactType.BUILD_ARTIFACT) {
39
- artifactsDirPath = getTemporaryBuildArtifactsDirPath(ctx);
40
- }
41
- else {
42
- throw new BuildInternalError(`Finding artifacts of type "${type}" is not implemented.`);
43
- }
44
- try {
45
- const filenames = await fs.readdir(artifactsDirPath);
46
- return filenames.map((filename) => path.join(artifactsDirPath, filename));
47
- }
48
- catch (err) {
49
- ctx.logger.debug({ err }, `Failed reading artifacts of type "${type}" from "${artifactsDirPath}". The directory probably doesn't exist.`);
50
- return [];
51
- }
52
- }
53
16
  export async function cleanUpStepTemporaryDirectoriesAsync(ctx, stepId) {
54
17
  if (ctx.skipCleanup) {
55
18
  return;
@@ -58,15 +21,6 @@ export async function cleanUpStepTemporaryDirectoriesAsync(ctx, stepId) {
58
21
  await fs.rm(stepTemporaryDirectory, { recursive: true, force: true });
59
22
  ctx.logger.debug({ stepTemporaryDirectory }, 'Removed step temporary directory');
60
23
  }
61
- export async function cleanUpWorkflowTemporaryDirectoriesAsync(ctx) {
62
- if (ctx.skipCleanup) {
63
- return;
64
- }
65
- const temporaryDirectories = [getTemporaryArtifactsDirPath(ctx)];
66
- const rmPromises = temporaryDirectories.map((dir) => fs.rm(dir, { recursive: true, force: true }));
67
- await Promise.all(rmPromises);
68
- ctx.logger.debug({ temporaryDirectories }, 'Removed temporary directories');
69
- }
70
24
  function getTemporaryStepDirPath(ctx, stepId) {
71
25
  return path.join(ctx.baseWorkingDirectory, 'steps', stepId);
72
26
  }
@@ -76,13 +30,4 @@ function getTemporaryScriptsDirPath(ctx, stepId) {
76
30
  function getTemporaryOutputsDirPath(ctx, stepId) {
77
31
  return path.join(getTemporaryStepDirPath(ctx, stepId), 'outputs');
78
32
  }
79
- function getTemporaryApplicationArchiveDirPath(ctx) {
80
- return path.join(getTemporaryArtifactsDirPath(ctx), 'application-archive');
81
- }
82
- function getTemporaryBuildArtifactsDirPath(ctx) {
83
- return path.join(getTemporaryArtifactsDirPath(ctx), 'build-artifacts');
84
- }
85
- function getTemporaryArtifactsDirPath(ctx) {
86
- return path.join(ctx.baseWorkingDirectory, 'artifacts');
87
- }
88
33
  //# sourceMappingURL=BuildTemporaryFiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuildTemporaryFiles.js","sourceRoot":"","sources":["../src/BuildTemporaryFiles.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport fs from 'fs/promises';\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildStepContext } from './BuildStepContext.js';\nimport { BuildArtifactType } from './BuildArtifacts.js';\nimport { BuildInternalError } from './errors/BuildInternalError.js';\n\nexport async function saveScriptToTemporaryFileAsync(\n ctx: BuildStepContext,\n stepId: string,\n scriptContents: string\n): Promise<string> {\n const scriptsDir = getTemporaryScriptsDirPath(ctx, stepId);\n await fs.mkdir(scriptsDir, { recursive: true });\n const temporaryScriptPath = path.join(scriptsDir, `${uuidv4()}.sh`);\n await fs.writeFile(temporaryScriptPath, scriptContents);\n return temporaryScriptPath;\n}\n\nexport async function saveArtifactToTemporaryDirectoryAsync(\n ctx: BuildStepContext,\n type: BuildArtifactType,\n artifactPath: string\n): Promise<string> {\n let targetArtifactPath: string;\n if (type === BuildArtifactType.APPLICATION_ARCHIVE) {\n targetArtifactPath = path.join(\n getTemporaryApplicationArchiveDirPath(ctx),\n path.basename(artifactPath)\n );\n } else if (type === BuildArtifactType.BUILD_ARTIFACT) {\n targetArtifactPath = path.join(\n getTemporaryBuildArtifactsDirPath(ctx),\n path.basename(artifactPath)\n );\n } else {\n throw new BuildInternalError(`Uploading artifacts of type \"${type}\" is not implemented.`);\n }\n\n await fs.mkdir(path.dirname(targetArtifactPath), { recursive: true });\n await fs.copyFile(artifactPath, targetArtifactPath);\n return targetArtifactPath;\n}\n\nexport async function createTemporaryOutputsDirectoryAsync(\n ctx: BuildStepContext,\n stepId: string\n): Promise<string> {\n const directory = getTemporaryOutputsDirPath(ctx, stepId);\n await fs.mkdir(directory, { recursive: true });\n return directory;\n}\n\nexport async function findArtifactsByTypeAsync(\n ctx: BuildStepContext,\n type: BuildArtifactType\n): Promise<string[]> {\n let artifactsDirPath: string;\n if (type === BuildArtifactType.APPLICATION_ARCHIVE) {\n artifactsDirPath = getTemporaryApplicationArchiveDirPath(ctx);\n } else if (type === BuildArtifactType.BUILD_ARTIFACT) {\n artifactsDirPath = getTemporaryBuildArtifactsDirPath(ctx);\n } else {\n throw new BuildInternalError(`Finding artifacts of type \"${type}\" is not implemented.`);\n }\n try {\n const filenames = await fs.readdir(artifactsDirPath);\n return filenames.map((filename) => path.join(artifactsDirPath, filename));\n } catch (err) {\n ctx.logger.debug(\n { err },\n `Failed reading artifacts of type \"${type}\" from \"${artifactsDirPath}\". The directory probably doesn't exist.`\n );\n return [];\n }\n}\n\nexport async function cleanUpStepTemporaryDirectoriesAsync(\n ctx: BuildStepContext,\n stepId: string\n): Promise<void> {\n if (ctx.skipCleanup) {\n return;\n }\n const stepTemporaryDirectory = getTemporaryStepDirPath(ctx, stepId);\n await fs.rm(stepTemporaryDirectory, { recursive: true, force: true });\n ctx.logger.debug({ stepTemporaryDirectory }, 'Removed step temporary directory');\n}\n\nexport async function cleanUpWorkflowTemporaryDirectoriesAsync(\n ctx: BuildStepContext\n): Promise<void> {\n if (ctx.skipCleanup) {\n return;\n }\n\n const temporaryDirectories: string[] = [getTemporaryArtifactsDirPath(ctx)];\n const rmPromises = temporaryDirectories.map((dir) =>\n fs.rm(dir, { recursive: true, force: true })\n );\n await Promise.all(rmPromises);\n ctx.logger.debug({ temporaryDirectories }, 'Removed temporary directories');\n}\n\nfunction getTemporaryStepDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(ctx.baseWorkingDirectory, 'steps', stepId);\n}\n\nfunction getTemporaryScriptsDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(getTemporaryStepDirPath(ctx, stepId), 'scripts');\n}\n\nfunction getTemporaryOutputsDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(getTemporaryStepDirPath(ctx, stepId), 'outputs');\n}\n\nfunction getTemporaryApplicationArchiveDirPath(ctx: BuildStepContext): string {\n return path.join(getTemporaryArtifactsDirPath(ctx), 'application-archive');\n}\n\nfunction getTemporaryBuildArtifactsDirPath(ctx: BuildStepContext): string {\n return path.join(getTemporaryArtifactsDirPath(ctx), 'build-artifacts');\n}\n\nfunction getTemporaryArtifactsDirPath(ctx: BuildStepContext): string {\n return path.join(ctx.baseWorkingDirectory, 'artifacts');\n}\n"]}
1
+ {"version":3,"file":"BuildTemporaryFiles.js","sourceRoot":"","sources":["../src/BuildTemporaryFiles.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAqB,EACrB,MAAc,EACd,cAAsB;IAEtB,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACxD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,GAAqB,EACrB,MAAc;IAEd,MAAM,SAAS,GAAG,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,GAAqB,EACrB,MAAc;IAEd,IAAI,GAAG,CAAC,WAAW,EAAE;QACnB,OAAO;KACR;IACD,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,sBAAsB,EAAE,EAAE,kCAAkC,CAAC,CAAC;AACnF,CAAC;AACD,SAAS,uBAAuB,CAAC,GAAqB,EAAE,MAAc;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAqB,EAAE,MAAc;IACvE,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAqB,EAAE,MAAc;IACvE,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import path from 'path';\nimport fs from 'fs/promises';\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildStepContext } from './BuildStepContext.js';\n\nexport async function saveScriptToTemporaryFileAsync(\n ctx: BuildStepContext,\n stepId: string,\n scriptContents: string\n): Promise<string> {\n const scriptsDir = getTemporaryScriptsDirPath(ctx, stepId);\n await fs.mkdir(scriptsDir, { recursive: true });\n const temporaryScriptPath = path.join(scriptsDir, `${uuidv4()}.sh`);\n await fs.writeFile(temporaryScriptPath, scriptContents);\n return temporaryScriptPath;\n}\n\nexport async function createTemporaryOutputsDirectoryAsync(\n ctx: BuildStepContext,\n stepId: string\n): Promise<string> {\n const directory = getTemporaryOutputsDirPath(ctx, stepId);\n await fs.mkdir(directory, { recursive: true });\n return directory;\n}\n\nexport async function cleanUpStepTemporaryDirectoriesAsync(\n ctx: BuildStepContext,\n stepId: string\n): Promise<void> {\n if (ctx.skipCleanup) {\n return;\n }\n const stepTemporaryDirectory = getTemporaryStepDirPath(ctx, stepId);\n await fs.rm(stepTemporaryDirectory, { recursive: true, force: true });\n ctx.logger.debug({ stepTemporaryDirectory }, 'Removed step temporary directory');\n}\nfunction getTemporaryStepDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(ctx.baseWorkingDirectory, 'steps', stepId);\n}\n\nfunction getTemporaryScriptsDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(getTemporaryStepDirPath(ctx, stepId), 'scripts');\n}\n\nfunction getTemporaryOutputsDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(getTemporaryStepDirPath(ctx, stepId), 'outputs');\n}\n"]}
@@ -1,4 +1,3 @@
1
- import { BuildArtifacts } from './BuildArtifacts.js';
2
1
  import { BuildFunctionById } from './BuildFunction.js';
3
2
  import { BuildStep } from './BuildStep.js';
4
3
  import { BuildStepContext } from './BuildStepContext.js';
@@ -12,6 +11,4 @@ export declare class BuildWorkflow {
12
11
  buildFunctions: BuildFunctionById;
13
12
  });
14
13
  executeAsync(env?: BuildStepEnv): Promise<void>;
15
- collectArtifactsAsync(): Promise<BuildArtifacts>;
16
- cleanUpAsync(): Promise<void>;
17
14
  }
@@ -1,7 +1,7 @@
1
- import { BuildArtifactType } from './BuildArtifacts.js';
2
- import { cleanUpWorkflowTemporaryDirectoriesAsync, findArtifactsByTypeAsync, } from './BuildTemporaryFiles.js';
3
1
  export class BuildWorkflow {
4
- constructor(ctx, { buildSteps, buildFunctions }) {
2
+ constructor(
3
+ // @ts-expect-error ctx is not used in this class but let's keep it here for consistency
4
+ ctx, { buildSteps, buildFunctions }) {
5
5
  this.ctx = ctx;
6
6
  this.buildSteps = buildSteps;
7
7
  this.buildFunctions = buildFunctions;
@@ -11,18 +11,5 @@ export class BuildWorkflow {
11
11
  await step.executeAsync(env);
12
12
  }
13
13
  }
14
- async collectArtifactsAsync() {
15
- const applicationArchives = await findArtifactsByTypeAsync(this.ctx, BuildArtifactType.APPLICATION_ARCHIVE);
16
- const buildArtifacts = await findArtifactsByTypeAsync(this.ctx, BuildArtifactType.BUILD_ARTIFACT);
17
- return {
18
- ...(applicationArchives.length > 0 && {
19
- [BuildArtifactType.APPLICATION_ARCHIVE]: applicationArchives,
20
- }),
21
- ...(buildArtifacts.length > 0 && { [BuildArtifactType.BUILD_ARTIFACT]: buildArtifacts }),
22
- };
23
- }
24
- async cleanUpAsync() {
25
- await cleanUpWorkflowTemporaryDirectoriesAsync(this.ctx);
26
- }
27
14
  }
28
15
  //# sourceMappingURL=BuildWorkflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuildWorkflow.js","sourceRoot":"","sources":["../src/BuildWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EACL,wCAAwC,EACxC,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,MAAM,OAAO,aAAa;IAIxB,YACmB,GAAqB,EACtC,EAAE,UAAU,EAAE,cAAc,EAAkE;QAD7E,QAAG,GAAH,GAAG,CAAkB;QAGtC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAoB,OAAO,CAAC,GAAG;QACvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAChC,MAAM,mBAAmB,GAAG,MAAM,wBAAwB,CACxD,IAAI,CAAC,GAAG,EACR,iBAAiB,CAAC,mBAAmB,CACtC,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,wBAAwB,CACnD,IAAI,CAAC,GAAG,EACR,iBAAiB,CAAC,cAAc,CACjC,CAAC;QACF,OAAO;YACL,GAAG,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI;gBACpC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,mBAAmB;aAC7D,CAAC;YACF,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;SACzF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,MAAM,wCAAwC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;CACF","sourcesContent":["import { BuildArtifacts, BuildArtifactType } from './BuildArtifacts.js';\nimport { BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport { BuildStepContext } from './BuildStepContext.js';\nimport { BuildStepEnv } from './BuildStepEnv.js';\nimport {\n cleanUpWorkflowTemporaryDirectoriesAsync,\n findArtifactsByTypeAsync,\n} from './BuildTemporaryFiles.js';\n\nexport class BuildWorkflow {\n public readonly buildSteps: BuildStep[];\n public readonly buildFunctions: BuildFunctionById;\n\n constructor(\n private readonly ctx: BuildStepContext,\n { buildSteps, buildFunctions }: { buildSteps: BuildStep[]; buildFunctions: BuildFunctionById }\n ) {\n this.buildSteps = buildSteps;\n this.buildFunctions = buildFunctions;\n }\n\n public async executeAsync(env: BuildStepEnv = process.env): Promise<void> {\n for (const step of this.buildSteps) {\n await step.executeAsync(env);\n }\n }\n\n public async collectArtifactsAsync(): Promise<BuildArtifacts> {\n const applicationArchives = await findArtifactsByTypeAsync(\n this.ctx,\n BuildArtifactType.APPLICATION_ARCHIVE\n );\n const buildArtifacts = await findArtifactsByTypeAsync(\n this.ctx,\n BuildArtifactType.BUILD_ARTIFACT\n );\n return {\n ...(applicationArchives.length > 0 && {\n [BuildArtifactType.APPLICATION_ARCHIVE]: applicationArchives,\n }),\n ...(buildArtifacts.length > 0 && { [BuildArtifactType.BUILD_ARTIFACT]: buildArtifacts }),\n };\n }\n\n public async cleanUpAsync(): Promise<void> {\n await cleanUpWorkflowTemporaryDirectoriesAsync(this.ctx);\n }\n}\n"]}
1
+ {"version":3,"file":"BuildWorkflow.js","sourceRoot":"","sources":["../src/BuildWorkflow.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,aAAa;IAIxB;IACE,wFAAwF;IACvE,GAAqB,EACtC,EAAE,UAAU,EAAE,cAAc,EAAkE;QAD7E,QAAG,GAAH,GAAG,CAAkB;QAGtC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAoB,OAAO,CAAC,GAAG;QACvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC9B;IACH,CAAC;CACF","sourcesContent":["import { BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport { BuildStepContext } from './BuildStepContext.js';\nimport { BuildStepEnv } from './BuildStepEnv.js';\n\nexport class BuildWorkflow {\n public readonly buildSteps: BuildStep[];\n public readonly buildFunctions: BuildFunctionById;\n\n constructor(\n // @ts-expect-error ctx is not used in this class but let's keep it here for consistency\n private readonly ctx: BuildStepContext,\n { buildSteps, buildFunctions }: { buildSteps: BuildStep[]; buildFunctions: BuildFunctionById }\n ) {\n this.buildSteps = buildSteps;\n this.buildFunctions = buildFunctions;\n }\n\n public async executeAsync(env: BuildStepEnv = process.env): Promise<void> {\n for (const step of this.buildSteps) {\n await step.executeAsync(env);\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { BuildConfigError } from './errors/BuildConfigError.js';
2
- import { BuildWorkflowError } from './errors/BuildWorkflowError.js';
1
+ import { BuildConfigError, BuildWorkflowError } from './errors.js';
2
+ import { duplicates } from './utils/expodash/duplicates.js';
3
3
  import { findOutputPaths } from './utils/template.js';
4
4
  export class BuildWorkflowValidator {
5
5
  constructor(workflow) {
@@ -10,22 +10,12 @@ export class BuildWorkflowValidator {
10
10
  errors.push(...this.validateUniqueStepIds());
11
11
  errors.push(...this.validateInputs());
12
12
  if (errors.length !== 0) {
13
- throw new BuildWorkflowError('Build workflow is invalid', errors);
13
+ throw new BuildWorkflowError('Build workflow is invalid.', errors);
14
14
  }
15
15
  }
16
16
  validateUniqueStepIds() {
17
17
  const stepIds = this.workflow.buildSteps.map(({ id }) => id);
18
- const visitedStepIdsSet = new Set();
19
- const duplicatedStepIdsSet = new Set();
20
- for (const stepId of stepIds) {
21
- if (visitedStepIdsSet.has(stepId)) {
22
- duplicatedStepIdsSet.add(stepId);
23
- }
24
- else {
25
- visitedStepIdsSet.add(stepId);
26
- }
27
- }
28
- const duplicatedStepIds = [...duplicatedStepIdsSet];
18
+ const duplicatedStepIds = duplicates(stepIds);
29
19
  if (duplicatedStepIds.length === 0) {
30
20
  return [];
31
21
  }
@@ -38,33 +28,33 @@ export class BuildWorkflowValidator {
38
28
  var _a;
39
29
  const errors = [];
40
30
  const allStepIds = new Set(this.workflow.buildSteps.map((s) => s.id));
41
- const stepByStepId = {};
42
- for (const step of this.workflow.buildSteps) {
43
- for (const input of (_a = step.inputs) !== null && _a !== void 0 ? _a : []) {
44
- if (input.defaultValue === undefined) {
31
+ const visitedStepByStepId = {};
32
+ for (const currentStep of this.workflow.buildSteps) {
33
+ for (const currentStepInput of (_a = currentStep.inputs) !== null && _a !== void 0 ? _a : []) {
34
+ if (currentStepInput.defaultValue === undefined) {
45
35
  continue;
46
36
  }
47
- const paths = findOutputPaths(input.defaultValue);
48
- for (const { stepId, outputId } of paths) {
49
- if (!(stepId in stepByStepId)) {
50
- if (allStepIds.has(stepId)) {
51
- const error = new BuildConfigError(`Input parameter "${input.id}" for step "${step.id}" uses an expression that references an output parameter from the future step "${stepId}".`);
37
+ const paths = findOutputPaths(currentStepInput.defaultValue);
38
+ for (const { stepId: referencedStepId, outputId: referencedStepOutputId } of paths) {
39
+ if (!(referencedStepId in visitedStepByStepId)) {
40
+ if (allStepIds.has(referencedStepId)) {
41
+ const error = new BuildConfigError(`Input parameter "${currentStepInput.id}" for step "${currentStep.displayName}" uses an expression that references an output parameter from the future step "${referencedStepId}".`);
52
42
  errors.push(error);
53
43
  }
54
44
  else {
55
- const error = new BuildConfigError(`Input parameter "${input.id}" for step "${step.id}" uses an expression that references an output parameter from a non-existent step "${stepId}".`);
45
+ const error = new BuildConfigError(`Input parameter "${currentStepInput.id}" for step "${currentStep.displayName}" uses an expression that references an output parameter from a non-existent step "${referencedStepId}".`);
56
46
  errors.push(error);
57
47
  }
58
48
  }
59
49
  else {
60
- if (!stepByStepId[stepId].hasOutputParameter(outputId)) {
61
- const error = new BuildConfigError(`Input parameter "${input.id}" for step "${step.id}" uses an expression that references an undefined output parameter "${outputId}" from step "${stepId}".`);
50
+ if (!visitedStepByStepId[referencedStepId].hasOutputParameter(referencedStepOutputId)) {
51
+ const error = new BuildConfigError(`Input parameter "${currentStepInput.id}" for step "${currentStep.displayName}" uses an expression that references an undefined output parameter "${referencedStepOutputId}" from step "${referencedStepId}".`);
62
52
  errors.push(error);
63
53
  }
64
54
  }
65
55
  }
66
56
  }
67
- stepByStepId[step.id] = step;
57
+ visitedStepByStepId[currentStep.id] = currentStep;
68
58
  }
69
59
  return errors;
70
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BuildWorkflowValidator.js","sourceRoot":"","sources":["../src/BuildWorkflowValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,sBAAsB;IACjC,YAA6B,QAAuB;QAAvB,aAAQ,GAAR,QAAQ,CAAe;IAAG,CAAC;IAEjD,QAAQ;QACb,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM,IAAI,kBAAkB,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;SACnE;IACH,CAAC;IAEO,qBAAqB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACjC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aAClC;iBAAM;gBACL,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aAC/B;SACF;QACD,MAAM,iBAAiB,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;QACpD,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,OAAO,EAAE,CAAC;SACX;aAAM;YACL,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAChC,wBAAwB,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,CAAC;SAChB;IACH,CAAC;IAEO,cAAc;;QACpB,MAAM,MAAM,GAAuB,EAAE,CAAC;QAEtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,YAAY,GAA8B,EAAE,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,KAAK,MAAM,KAAK,IAAI,MAAA,IAAI,CAAC,MAAM,mCAAI,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;oBACpC,SAAS;iBACV;gBACD,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAClD,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE;oBACxC,IAAI,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;wBAC7B,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;4BAC1B,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAChC,oBAAoB,KAAK,CAAC,EAAE,eAAe,IAAI,CAAC,EAAE,kFAAkF,MAAM,IAAI,CAC/I,CAAC;4BACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBACpB;6BAAM;4BACL,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAChC,oBAAoB,KAAK,CAAC,EAAE,eAAe,IAAI,CAAC,EAAE,sFAAsF,MAAM,IAAI,CACnJ,CAAC;4BACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBACpB;qBACF;yBAAM;wBACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;4BACtD,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAChC,oBAAoB,KAAK,CAAC,EAAE,eAAe,IAAI,CAAC,EAAE,uEAAuE,QAAQ,gBAAgB,MAAM,IAAI,CAC5J,CAAC;4BACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBACpB;qBACF;iBACF;aACF;YACD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;SAC9B;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { BuildStep } from './BuildStep.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildConfigError } from './errors/BuildConfigError.js';\nimport { BuildWorkflowError } from './errors/BuildWorkflowError.js';\nimport { findOutputPaths } from './utils/template.js';\n\nexport class BuildWorkflowValidator {\n constructor(private readonly workflow: BuildWorkflow) {}\n\n public validate(): void {\n const errors: BuildConfigError[] = [];\n errors.push(...this.validateUniqueStepIds());\n errors.push(...this.validateInputs());\n if (errors.length !== 0) {\n throw new BuildWorkflowError('Build workflow is invalid', errors);\n }\n }\n\n private validateUniqueStepIds(): BuildConfigError[] {\n const stepIds = this.workflow.buildSteps.map(({ id }) => id);\n const visitedStepIdsSet = new Set<string>();\n const duplicatedStepIdsSet = new Set<string>();\n for (const stepId of stepIds) {\n if (visitedStepIdsSet.has(stepId)) {\n duplicatedStepIdsSet.add(stepId);\n } else {\n visitedStepIdsSet.add(stepId);\n }\n }\n const duplicatedStepIds = [...duplicatedStepIdsSet];\n if (duplicatedStepIds.length === 0) {\n return [];\n } else {\n const error = new BuildConfigError(\n `Duplicated step IDs: ${duplicatedStepIds.map((i) => `\"${i}\"`).join(', ')}`\n );\n return [error];\n }\n }\n\n private validateInputs(): BuildConfigError[] {\n const errors: BuildConfigError[] = [];\n\n const allStepIds = new Set(this.workflow.buildSteps.map((s) => s.id));\n const stepByStepId: Record<string, BuildStep> = {};\n for (const step of this.workflow.buildSteps) {\n for (const input of step.inputs ?? []) {\n if (input.defaultValue === undefined) {\n continue;\n }\n const paths = findOutputPaths(input.defaultValue);\n for (const { stepId, outputId } of paths) {\n if (!(stepId in stepByStepId)) {\n if (allStepIds.has(stepId)) {\n const error = new BuildConfigError(\n `Input parameter \"${input.id}\" for step \"${step.id}\" uses an expression that references an output parameter from the future step \"${stepId}\".`\n );\n errors.push(error);\n } else {\n const error = new BuildConfigError(\n `Input parameter \"${input.id}\" for step \"${step.id}\" uses an expression that references an output parameter from a non-existent step \"${stepId}\".`\n );\n errors.push(error);\n }\n } else {\n if (!stepByStepId[stepId].hasOutputParameter(outputId)) {\n const error = new BuildConfigError(\n `Input parameter \"${input.id}\" for step \"${step.id}\" uses an expression that references an undefined output parameter \"${outputId}\" from step \"${stepId}\".`\n );\n errors.push(error);\n }\n }\n }\n }\n stepByStepId[step.id] = step;\n }\n\n return errors;\n }\n}\n"]}
1
+ {"version":3,"file":"BuildWorkflowValidator.js","sourceRoot":"","sources":["../src/BuildWorkflowValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import { BuildStep } from './BuildStep.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildConfigError, BuildWorkflowError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { findOutputPaths } from './utils/template.js';\n\nexport class BuildWorkflowValidator {\n constructor(private readonly workflow: BuildWorkflow) {}\n\n public validate(): void {\n const errors: BuildConfigError[] = [];\n errors.push(...this.validateUniqueStepIds());\n errors.push(...this.validateInputs());\n if (errors.length !== 0) {\n throw new BuildWorkflowError('Build workflow is invalid.', errors);\n }\n }\n\n private validateUniqueStepIds(): BuildConfigError[] {\n const stepIds = this.workflow.buildSteps.map(({ id }) => id);\n const duplicatedStepIds = duplicates(stepIds);\n if (duplicatedStepIds.length === 0) {\n return [];\n } else {\n const error = new BuildConfigError(\n `Duplicated step IDs: ${duplicatedStepIds.map((i) => `\"${i}\"`).join(', ')}`\n );\n return [error];\n }\n }\n\n private validateInputs(): BuildConfigError[] {\n const errors: BuildConfigError[] = [];\n\n const allStepIds = new Set(this.workflow.buildSteps.map((s) => s.id));\n const visitedStepByStepId: Record<string, BuildStep> = {};\n for (const currentStep of this.workflow.buildSteps) {\n for (const currentStepInput of currentStep.inputs ?? []) {\n if (currentStepInput.defaultValue === undefined) {\n continue;\n }\n const paths = findOutputPaths(currentStepInput.defaultValue);\n for (const { stepId: referencedStepId, outputId: referencedStepOutputId } of paths) {\n if (!(referencedStepId in visitedStepByStepId)) {\n if (allStepIds.has(referencedStepId)) {\n const error = new BuildConfigError(\n `Input parameter \"${currentStepInput.id}\" for step \"${currentStep.displayName}\" uses an expression that references an output parameter from the future step \"${referencedStepId}\".`\n );\n errors.push(error);\n } else {\n const error = new BuildConfigError(\n `Input parameter \"${currentStepInput.id}\" for step \"${currentStep.displayName}\" uses an expression that references an output parameter from a non-existent step \"${referencedStepId}\".`\n );\n errors.push(error);\n }\n } else {\n if (!visitedStepByStepId[referencedStepId].hasOutputParameter(referencedStepOutputId)) {\n const error = new BuildConfigError(\n `Input parameter \"${currentStepInput.id}\" for step \"${currentStep.displayName}\" uses an expression that references an undefined output parameter \"${referencedStepOutputId}\" from step \"${referencedStepId}\".`\n );\n errors.push(error);\n }\n }\n }\n }\n visitedStepByStepId[currentStep.id] = currentStep;\n }\n\n return errors;\n }\n}\n"]}
@@ -13,10 +13,6 @@ async function runAsync(configPath, workingDirectory) {
13
13
  const parser = new BuildConfigParser(ctx, { configPath });
14
14
  const workflow = await parser.parseAsync();
15
15
  await workflow.executeAsync();
16
- const artifacts = await workflow.collectArtifactsAsync();
17
- if (Object.keys(artifacts).length > 0) {
18
- logger.info({ artifacts }, 'The workflow produced artifacts');
19
- }
20
16
  }
21
17
  const relativeConfigPath = process.argv[2];
22
18
  const relativeWorkingDirectoryPath = process.argv[3];
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,KAAK,UAAU,QAAQ,CAAC,UAAkB,EAAE,gBAAwB;IAClE,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACzD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,iCAAiC,CAAC,CAAC;KAC/D;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErD,IAAI,CAAC,kBAAkB,IAAI,CAAC,4BAA4B,EAAE;IACxD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAEnF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnD,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC","sourcesContent":["import path from 'path';\n\nimport { createLogger } from '@expo/logger';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildConfigParser } from '../BuildConfigParser.js';\nimport { BuildStepContext } from '../BuildStepContext.js';\n\nconst logger = createLogger({\n name: 'steps-cli',\n level: 'info',\n});\n\nasync function runAsync(configPath: string, workingDirectory: string): Promise<void> {\n const fakeBuildId = uuidv4();\n const ctx = new BuildStepContext(fakeBuildId, logger, false, workingDirectory);\n const parser = new BuildConfigParser(ctx, { configPath });\n const workflow = await parser.parseAsync();\n await workflow.executeAsync();\n const artifacts = await workflow.collectArtifactsAsync();\n if (Object.keys(artifacts).length > 0) {\n logger.info({ artifacts }, 'The workflow produced artifacts');\n }\n}\n\nconst relativeConfigPath = process.argv[2];\nconst relativeWorkingDirectoryPath = process.argv[3];\n\nif (!relativeConfigPath && !relativeWorkingDirectoryPath) {\n console.error('Usage: yarn cli config.yml path/to/working/directory');\n process.exit(1);\n}\n\nconst configPath = path.resolve(process.cwd(), relativeConfigPath);\nconst workingDirectory = path.resolve(process.cwd(), relativeWorkingDirectoryPath);\n\nrunAsync(configPath, workingDirectory).catch((err) => {\n logger.error({ err }, 'Build failed');\n});\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,KAAK,UAAU,QAAQ,CAAC,UAAkB,EAAE,gBAAwB;IAClE,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErD,IAAI,CAAC,kBAAkB,IAAI,CAAC,4BAA4B,EAAE;IACxD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAEnF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnD,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC","sourcesContent":["import path from 'path';\n\nimport { createLogger } from '@expo/logger';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildConfigParser } from '../BuildConfigParser.js';\nimport { BuildStepContext } from '../BuildStepContext.js';\n\nconst logger = createLogger({\n name: 'steps-cli',\n level: 'info',\n});\n\nasync function runAsync(configPath: string, workingDirectory: string): Promise<void> {\n const fakeBuildId = uuidv4();\n const ctx = new BuildStepContext(fakeBuildId, logger, false, workingDirectory);\n const parser = new BuildConfigParser(ctx, { configPath });\n const workflow = await parser.parseAsync();\n await workflow.executeAsync();\n}\n\nconst relativeConfigPath = process.argv[2];\nconst relativeWorkingDirectoryPath = process.argv[3];\n\nif (!relativeConfigPath && !relativeWorkingDirectoryPath) {\n console.error('Usage: yarn cli config.yml path/to/working/directory');\n process.exit(1);\n}\n\nconst configPath = path.resolve(process.cwd(), relativeConfigPath);\nconst workingDirectory = path.resolve(process.cwd(), relativeWorkingDirectoryPath);\n\nrunAsync(configPath, workingDirectory).catch((err) => {\n logger.error({ err }, 'Build failed');\n});\n"]}
@@ -0,0 +1,24 @@
1
+ declare abstract class UserError extends Error {
2
+ readonly message: string;
3
+ readonly cause?: Error;
4
+ readonly metadata: object;
5
+ constructor(message: string, extra?: {
6
+ metadata?: object;
7
+ cause?: Error;
8
+ });
9
+ }
10
+ export declare class BuildConfigError extends UserError {
11
+ }
12
+ export declare class BuildInternalError extends Error {
13
+ }
14
+ export declare class BuildStepRuntimeError extends UserError {
15
+ }
16
+ export declare class BuildWorkflowError extends UserError {
17
+ readonly message: string;
18
+ readonly errors: BuildConfigError[];
19
+ constructor(message: string, errors: BuildConfigError[], extra?: {
20
+ metadata?: object;
21
+ cause?: Error;
22
+ });
23
+ }
24
+ export {};
@@ -0,0 +1,23 @@
1
+ class UserError extends Error {
2
+ constructor(message, extra) {
3
+ var _a;
4
+ super(message);
5
+ this.message = message;
6
+ this.metadata = (_a = extra === null || extra === void 0 ? void 0 : extra.cause) !== null && _a !== void 0 ? _a : {};
7
+ this.cause = extra === null || extra === void 0 ? void 0 : extra.cause;
8
+ }
9
+ }
10
+ export class BuildConfigError extends UserError {
11
+ }
12
+ export class BuildInternalError extends Error {
13
+ }
14
+ export class BuildStepRuntimeError extends UserError {
15
+ }
16
+ export class BuildWorkflowError extends UserError {
17
+ constructor(message, errors, extra) {
18
+ super(message, extra);
19
+ this.message = message;
20
+ this.errors = errors;
21
+ }
22
+ }
23
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAe,SAAU,SAAQ,KAAK;IAIpC,YAC2B,OAAe,EACxC,KAGC;;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QANU,YAAO,GAAP,OAAO,CAAQ;QAOxC,IAAI,CAAC,QAAQ,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,SAAS;CAAG;AAElD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,MAAM,OAAO,qBAAsB,SAAQ,SAAS;CAAG;AAEvD,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C,YAC2B,OAAe,EACxB,MAA0B,EAC1C,KAGC;QAED,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAPG,YAAO,GAAP,OAAO,CAAQ;QACxB,WAAM,GAAN,MAAM,CAAoB;IAO5C,CAAC;CACF","sourcesContent":["abstract class UserError extends Error {\n public readonly cause?: Error;\n public readonly metadata: object;\n\n constructor(\n public override readonly message: string,\n extra?: {\n metadata?: object;\n cause?: Error;\n }\n ) {\n super(message);\n this.metadata = extra?.cause ?? {};\n this.cause = extra?.cause;\n }\n}\n\nexport class BuildConfigError extends UserError {}\n\nexport class BuildInternalError extends Error {}\n\nexport class BuildStepRuntimeError extends UserError {}\n\nexport class BuildWorkflowError extends UserError {\n constructor(\n public override readonly message: string,\n public readonly errors: BuildConfigError[],\n extra?: {\n metadata?: object;\n cause?: Error;\n }\n ) {\n super(message, extra);\n }\n}\n"]}
@@ -1,3 +1,7 @@
1
- export { BuildArtifactType } from './BuildArtifacts.js';
2
1
  export { BuildConfigParser } from './BuildConfigParser.js';
2
+ export { BuildFunction } from './BuildFunction.js';
3
+ export { BuildStepInput } from './BuildStepInput.js';
4
+ export { BuildStepOutput } from './BuildStepOutput.js';
3
5
  export { BuildStepContext } from './BuildStepContext.js';
6
+ export { BuildWorkflow } from './BuildWorkflow.js';
7
+ export * as errors from './errors.js';
package/dist_esm/index.js CHANGED
@@ -1,4 +1,8 @@
1
- export { BuildArtifactType } from './BuildArtifacts.js';
2
1
  export { BuildConfigParser } from './BuildConfigParser.js';
2
+ export { BuildFunction } from './BuildFunction.js';
3
+ export { BuildStepInput } from './BuildStepInput.js';
4
+ export { BuildStepOutput } from './BuildStepOutput.js';
3
5
  export { BuildStepContext } from './BuildStepContext.js';
6
+ export { BuildWorkflow } from './BuildWorkflow.js';
7
+ export * as errors from './errors.js';
4
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { BuildArtifactType } from './BuildArtifacts.js';\nexport { BuildConfigParser } from './BuildConfigParser.js';\nexport { BuildStepContext } from './BuildStepContext.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC","sourcesContent":["export { BuildConfigParser } from './BuildConfigParser.js';\nexport { BuildFunction } from './BuildFunction.js';\nexport { BuildStepInput } from './BuildStepInput.js';\nexport { BuildStepOutput } from './BuildStepOutput.js';\nexport { BuildStepContext } from './BuildStepContext.js';\nexport { BuildWorkflow } from './BuildWorkflow.js';\nexport * as errors from './errors.js';\n"]}
@@ -0,0 +1 @@
1
+ export declare function duplicates<T = any>(items: T[]): T[];
@@ -0,0 +1,14 @@
1
+ export function duplicates(items) {
2
+ const visitedItemsSet = new Set();
3
+ const duplicatedItemsSet = new Set();
4
+ for (const item of items) {
5
+ if (visitedItemsSet.has(item)) {
6
+ duplicatedItemsSet.add(item);
7
+ }
8
+ else {
9
+ visitedItemsSet.add(item);
10
+ }
11
+ }
12
+ return [...duplicatedItemsSet];
13
+ }
14
+ //# sourceMappingURL=duplicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../../../src/utils/expodash/duplicates.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAU,KAAU;IAC5C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAK,CAAC;IACrC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAK,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7B,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC9B;aAAM;YACL,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC3B;KACF;IACD,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACjC,CAAC","sourcesContent":["export function duplicates<T = any>(items: T[]): T[] {\n const visitedItemsSet = new Set<T>();\n const duplicatedItemsSet = new Set<T>();\n for (const item of items) {\n if (visitedItemsSet.has(item)) {\n duplicatedItemsSet.add(item);\n } else {\n visitedItemsSet.add(item);\n }\n }\n return [...duplicatedItemsSet];\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BuildConfigError } from '../errors/BuildConfigError.js';
1
+ import { BuildConfigError } from '../errors.js';
2
2
  import { nullthrows } from './nullthrows.js';
3
3
  export const BUILD_STEP_INPUT_EXPRESSION_REGEXP = /\${\s*inputs\.([\S]+)\s*}/;
4
4
  export const BUILD_STEP_OUTPUT_EXPRESSION_REGEXP = /\${\s*steps\.([\S]+)\s*}/;
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,MAAM,kCAAkC,GAAG,2BAA2B,CAAC;AAC9E,MAAM,CAAC,MAAM,mCAAmC,GAAG,0BAA0B,CAAC;AAE9E,MAAM,UAAU,qBAAqB,CACnC,cAAsB,EACtB,MAA8B;IAE9B,OAAO,WAAW,CAAC,cAAc,EAAE,kCAAkC,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,EAA4B;IAE5B,OAAO,WAAW,CAAC,cAAc,EAAE,mCAAmC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAClB,cAAsB,EACtB,KAAa,EACb,QAA4D;IAE5D,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,cAAc,CAAC;KACvB;IACD,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACvC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,eAAe,CAAC,cAAsB;IACpD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,gBAAgB,CACxB,gKAAgK,UAAU,GAAG,CAC9K,CAAC;KACH;IACD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { BuildConfigError } from '../errors/BuildConfigError.js';\n\nimport { nullthrows } from './nullthrows.js';\n\nexport const BUILD_STEP_INPUT_EXPRESSION_REGEXP = /\\${\\s*inputs\\.([\\S]+)\\s*}/;\nexport const BUILD_STEP_OUTPUT_EXPRESSION_REGEXP = /\\${\\s*steps\\.([\\S]+)\\s*}/;\n\nexport function interpolateWithInputs(\n templateString: string,\n inputs: Record<string, string>\n): string {\n return interpolate(templateString, BUILD_STEP_INPUT_EXPRESSION_REGEXP, inputs);\n}\n\nexport function interpolateWithOutputs(\n templateString: string,\n fn: (path: string) => string\n): string {\n return interpolate(templateString, BUILD_STEP_OUTPUT_EXPRESSION_REGEXP, fn);\n}\n\nfunction interpolate(\n templateString: string,\n regex: RegExp,\n varsOrFn: Record<string, string> | ((key: string) => string)\n): string {\n const matched = templateString.match(new RegExp(regex, 'g'));\n if (!matched) {\n return templateString;\n }\n let result = templateString;\n for (const match of matched) {\n const [, key] = nullthrows(match.match(regex));\n const value = typeof varsOrFn === 'function' ? varsOrFn(key) : varsOrFn[key];\n result = result.replace(match, value);\n }\n return result;\n}\n\ninterface BuildOutputPath {\n stepId: string;\n outputId: string;\n}\n\nexport function findOutputPaths(templateString: string): BuildOutputPath[] {\n const result: BuildOutputPath[] = [];\n const matches = templateString.matchAll(new RegExp(BUILD_STEP_OUTPUT_EXPRESSION_REGEXP, 'g'));\n for (const match of matches) {\n result.push(parseOutputPath(match[1]));\n }\n return result;\n}\n\nexport function parseOutputPath(outputPath: string): BuildOutputPath {\n const splits = outputPath.split('.');\n if (splits.length !== 2) {\n throw new BuildConfigError(\n `Step output path must consist of two components joined with a dot, where first is the step ID, and second is the output name, e.g. \"step3.output1\". Passed: \"${outputPath}\"`\n );\n }\n const [stepId, outputId] = splits;\n return { stepId, outputId };\n}\n"]}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,MAAM,kCAAkC,GAAG,2BAA2B,CAAC;AAC9E,MAAM,CAAC,MAAM,mCAAmC,GAAG,0BAA0B,CAAC;AAE9E,MAAM,UAAU,qBAAqB,CACnC,cAAsB,EACtB,MAA8B;IAE9B,OAAO,WAAW,CAAC,cAAc,EAAE,kCAAkC,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,EAA4B;IAE5B,OAAO,WAAW,CAAC,cAAc,EAAE,mCAAmC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAClB,cAAsB,EACtB,KAAa,EACb,QAA4D;IAE5D,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,cAAc,CAAC;KACvB;IACD,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACvC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,eAAe,CAAC,cAAsB;IACpD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,gBAAgB,CACxB,gKAAgK,UAAU,GAAG,CAC9K,CAAC;KACH;IACD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { BuildConfigError } from '../errors.js';\n\nimport { nullthrows } from './nullthrows.js';\n\nexport const BUILD_STEP_INPUT_EXPRESSION_REGEXP = /\\${\\s*inputs\\.([\\S]+)\\s*}/;\nexport const BUILD_STEP_OUTPUT_EXPRESSION_REGEXP = /\\${\\s*steps\\.([\\S]+)\\s*}/;\n\nexport function interpolateWithInputs(\n templateString: string,\n inputs: Record<string, string>\n): string {\n return interpolate(templateString, BUILD_STEP_INPUT_EXPRESSION_REGEXP, inputs);\n}\n\nexport function interpolateWithOutputs(\n templateString: string,\n fn: (path: string) => string\n): string {\n return interpolate(templateString, BUILD_STEP_OUTPUT_EXPRESSION_REGEXP, fn);\n}\n\nfunction interpolate(\n templateString: string,\n regex: RegExp,\n varsOrFn: Record<string, string> | ((key: string) => string)\n): string {\n const matched = templateString.match(new RegExp(regex, 'g'));\n if (!matched) {\n return templateString;\n }\n let result = templateString;\n for (const match of matched) {\n const [, key] = nullthrows(match.match(regex));\n const value = typeof varsOrFn === 'function' ? varsOrFn(key) : varsOrFn[key];\n result = result.replace(match, value);\n }\n return result;\n}\n\ninterface BuildOutputPath {\n stepId: string;\n outputId: string;\n}\n\nexport function findOutputPaths(templateString: string): BuildOutputPath[] {\n const result: BuildOutputPath[] = [];\n const matches = templateString.matchAll(new RegExp(BUILD_STEP_OUTPUT_EXPRESSION_REGEXP, 'g'));\n for (const match of matches) {\n result.push(parseOutputPath(match[1]));\n }\n return result;\n}\n\nexport function parseOutputPath(outputPath: string): BuildOutputPath {\n const splits = outputPath.split('.');\n if (splits.length !== 2) {\n throw new BuildConfigError(\n `Step output path must consist of two components joined with a dot, where first is the step ID, and second is the output name, e.g. \"step3.output1\". Passed: \"${outputPath}\"`\n );\n }\n const [stepId, outputId] = splits;\n return { stepId, outputId };\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@expo/steps",
3
3
  "type": "module",
4
- "version": "0.0.8",
4
+ "version": "0.0.10",
5
5
  "main": "./dist_commonjs/index.cjs",
6
6
  "types": "./dist_esm/index.d.ts",
7
7
  "exports": {
@@ -39,6 +39,7 @@
39
39
  "jest": "^29.4.1",
40
40
  "ts-jest": "^29.0.5",
41
41
  "ts-mockito": "^2.6.1",
42
+ "ts-node": "^10.9.1",
42
43
  "typescript": "^4.9.5"
43
44
  },
44
45
  "engines": {
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- set -eo pipefail
4
-
5
- if [[ -z "$__EXPO_STEPS_BUILD_ID" || -z "$__EXPO_STEPS_WORKING_DIRECTORY" ]]; then
6
- echo "Set __EXPO_STEPS_BUILD_ID and __EXPO_STEPS_WORKING_DIRECTORY"
7
- exit 1
8
- fi
9
-
10
- STEPS_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/.. && pwd )"
11
-
12
- node $STEPS_ROOT_DIR/dist_commonjs/bin/uploadArtifact.cjs $@
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BuildArtifactType = void 0;
4
- var BuildArtifactType;
5
- (function (BuildArtifactType) {
6
- BuildArtifactType["APPLICATION_ARCHIVE"] = "application-archive";
7
- BuildArtifactType["BUILD_ARTIFACT"] = "build-artifact";
8
- })(BuildArtifactType = exports.BuildArtifactType || (exports.BuildArtifactType = {}));
9
- //# sourceMappingURL=BuildArtifacts.js.map
@@ -1,5 +0,0 @@
1
- export declare enum BuildArtifactType {
2
- APPLICATION_ARCHIVE = "application-archive",
3
- BUILD_ARTIFACT = "build-artifact"
4
- }
5
- export type BuildArtifacts = Partial<Record<BuildArtifactType, string[]>>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"BuildArtifacts.js","sourceRoot":"","sources":["../src/BuildArtifacts.ts"],"names":[],"mappings":";;;AAAA,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,gEAA2C,CAAA;IAC3C,sDAAiC,CAAA;AACnC,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B","sourcesContent":["export enum BuildArtifactType {\n APPLICATION_ARCHIVE = 'application-archive',\n BUILD_ARTIFACT = 'build-artifact',\n}\n\nexport type BuildArtifacts = Partial<Record<BuildArtifactType, string[]>>;\n"]}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- var _a;
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const path_1 = __importDefault(require("path"));
8
- const logger_1 = require("@expo/logger");
9
- const arg_1 = __importDefault(require("arg"));
10
- const nullthrows_js_1 = require("../utils/nullthrows.cjs");
11
- const BuildArtifacts_js_1 = require("../BuildArtifacts.cjs");
12
- const BuildStepContext_js_1 = require("../BuildStepContext.cjs");
13
- const BuildTemporaryFiles_js_1 = require("../BuildTemporaryFiles.cjs");
14
- const args = (0, arg_1.default)({
15
- '--type': String,
16
- });
17
- const artifactPathArg = (0, nullthrows_js_1.nullthrows)((_a = args._) === null || _a === void 0 ? void 0 : _a[0], 'upload-artifact must be run with the artifact path, e.g. "upload-artifact path/to/app.ipa"');
18
- const artifactPath = path_1.default.resolve(process.cwd(), artifactPathArg);
19
- const logger = (0, logger_1.createLogger)({
20
- name: 'eas-build',
21
- level: 'info',
22
- });
23
- const ctx = new BuildStepContext_js_1.BuildStepContext((0, nullthrows_js_1.nullthrows)(process.env.__EXPO_STEPS_BUILD_ID, 'Set __EXPO_STEPS_BUILD_ID.'), logger, false, (0, nullthrows_js_1.nullthrows)(process.env.__EXPO_STEPS_WORKING_DIRECTORY, 'Set __EXPO_STEPS_BUILD_ID.'));
24
- const rawType = args['--type'];
25
- const type = rawType !== null && rawType !== void 0 ? rawType : BuildArtifacts_js_1.BuildArtifactType.APPLICATION_ARCHIVE;
26
- (0, BuildTemporaryFiles_js_1.saveArtifactToTemporaryDirectoryAsync)(ctx, type, artifactPath).catch((err) => {
27
- console.error(`Failed preparing "${artifactPath}" for upload.`, err);
28
- process.exit(2);
29
- });
30
- //# sourceMappingURL=uploadArtifact.js.map
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploadArtifact.js","sourceRoot":"","sources":["../../src/bin/uploadArtifact.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,yCAA4C;AAC5C,8CAAsB;AAEtB,0DAAoD;AACpD,4DAAyD;AACzD,gEAA0D;AAC1D,sEAAkF;AAElF,MAAM,IAAI,GAAG,IAAA,aAAG,EAAC;IACf,QAAQ,EAAE,MAAM;CACjB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAA,0BAAU,EAChC,MAAA,IAAI,CAAC,CAAC,0CAAG,CAAC,CAAC,EACX,4FAA4F,CAC7F,CAAC;AACF,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;AAElE,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAI,sCAAgB,CAC9B,IAAA,0BAAU,EAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,4BAA4B,CAAC,EAC3E,MAAM,EACN,KAAK,EACL,IAAA,0BAAU,EAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,CACrF,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAkC,CAAC;AAChE,MAAM,IAAI,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,qCAAiB,CAAC,mBAAmB,CAAC;AAE9D,IAAA,8DAAqC,EAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3E,OAAO,CAAC,KAAK,CAAC,qBAAqB,YAAY,eAAe,EAAE,GAAG,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["import path from 'path';\n\nimport { createLogger } from '@expo/logger';\nimport arg from 'arg';\n\nimport { nullthrows } from '../utils/nullthrows.js';\nimport { BuildArtifactType } from '../BuildArtifacts.js';\nimport { BuildStepContext } from '../BuildStepContext.js';\nimport { saveArtifactToTemporaryDirectoryAsync } from '../BuildTemporaryFiles.js';\n\nconst args = arg({\n '--type': String,\n});\n\nconst artifactPathArg = nullthrows(\n args._?.[0],\n 'upload-artifact must be run with the artifact path, e.g. \"upload-artifact path/to/app.ipa\"'\n);\nconst artifactPath = path.resolve(process.cwd(), artifactPathArg);\n\nconst logger = createLogger({\n name: 'eas-build',\n level: 'info',\n});\n\nconst ctx = new BuildStepContext(\n nullthrows(process.env.__EXPO_STEPS_BUILD_ID, 'Set __EXPO_STEPS_BUILD_ID.'),\n logger,\n false,\n nullthrows(process.env.__EXPO_STEPS_WORKING_DIRECTORY, 'Set __EXPO_STEPS_BUILD_ID.')\n);\n\nconst rawType = args['--type'] as BuildArtifactType | undefined;\nconst type = rawType ?? BuildArtifactType.APPLICATION_ARCHIVE;\n\nsaveArtifactToTemporaryDirectoryAsync(ctx, type, artifactPath).catch((err) => {\n console.error(`Failed preparing \"${artifactPath}\" for upload.`, err);\n process.exit(2);\n});\n"]}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BuildConfigError = void 0;
4
- const UserError_js_1 = require("./UserError.cjs");
5
- class BuildConfigError extends UserError_js_1.UserError {
6
- }
7
- exports.BuildConfigError = BuildConfigError;
8
- //# sourceMappingURL=BuildConfigError.js.map
@@ -1,3 +0,0 @@
1
- import { UserError } from './UserError.js';
2
- export declare class BuildConfigError extends UserError {
3
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"BuildConfigError.js","sourceRoot":"","sources":["../../src/errors/BuildConfigError.ts"],"names":[],"mappings":";;;AAAA,iDAA2C;AAE3C,MAAa,gBAAiB,SAAQ,wBAAS;CAAG;AAAlD,4CAAkD","sourcesContent":["import { UserError } from './UserError.js';\n\nexport class BuildConfigError extends UserError {}\n"]}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BuildInternalError = void 0;
4
- class BuildInternalError extends Error {
5
- }
6
- exports.BuildInternalError = BuildInternalError;
7
- //# sourceMappingURL=BuildInternalError.js.map
@@ -1,2 +0,0 @@
1
- export declare class BuildInternalError extends Error {
2
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"BuildInternalError.js","sourceRoot":"","sources":["../../src/errors/BuildInternalError.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD","sourcesContent":["export class BuildInternalError extends Error {}\n"]}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BuildStepRuntimeError = void 0;
4
- const UserError_js_1 = require("./UserError.cjs");
5
- class BuildStepRuntimeError extends UserError_js_1.UserError {
6
- }
7
- exports.BuildStepRuntimeError = BuildStepRuntimeError;
8
- //# sourceMappingURL=BuildStepRuntimeError.js.map
@@ -1,3 +0,0 @@
1
- import { UserError } from './UserError.js';
2
- export declare class BuildStepRuntimeError extends UserError {
3
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"BuildStepRuntimeError.js","sourceRoot":"","sources":["../../src/errors/BuildStepRuntimeError.ts"],"names":[],"mappings":";;;AAAA,iDAA2C;AAE3C,MAAa,qBAAsB,SAAQ,wBAAS;CAAG;AAAvD,sDAAuD","sourcesContent":["import { UserError } from './UserError.js';\n\nexport class BuildStepRuntimeError extends UserError {}\n"]}