@expo/build-tools 1.0.204 → 1.0.206

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 (236) hide show
  1. package/dist/android/credentials.js +1 -2
  2. package/dist/android/credentials.js.map +1 -1
  3. package/dist/android/expoUpdates.js +5 -5
  4. package/dist/android/expoUpdates.js.map +1 -1
  5. package/dist/android/gradle.d.ts +0 -1
  6. package/dist/android/gradle.js +3 -4
  7. package/dist/android/gradle.js.map +1 -1
  8. package/dist/android/gradleConfig.js +1 -2
  9. package/dist/android/gradleConfig.js.map +1 -1
  10. package/dist/buildErrors/detectError.js +1 -2
  11. package/dist/buildErrors/detectError.js.map +1 -1
  12. package/dist/builders/android.js +1 -1
  13. package/dist/builders/android.js.map +1 -1
  14. package/dist/builders/common.js +1 -2
  15. package/dist/builders/common.js.map +1 -1
  16. package/dist/builders/custom.js +1 -2
  17. package/dist/builders/custom.js.map +1 -1
  18. package/dist/builders/ios.js +1 -1
  19. package/dist/builders/ios.js.map +1 -1
  20. package/dist/common/eagerBundle.d.ts +0 -1
  21. package/dist/common/eagerBundle.js +2 -3
  22. package/dist/common/eagerBundle.js.map +1 -1
  23. package/dist/common/easBuildInternal.d.ts +0 -1
  24. package/dist/common/easBuildInternal.js +2 -3
  25. package/dist/common/easBuildInternal.js.map +1 -1
  26. package/dist/common/git.d.ts +0 -1
  27. package/dist/common/git.js +1 -2
  28. package/dist/common/git.js.map +1 -1
  29. package/dist/common/installDependencies.js +2 -3
  30. package/dist/common/installDependencies.js.map +1 -1
  31. package/dist/common/prebuild.d.ts +0 -1
  32. package/dist/common/prebuild.js +1 -2
  33. package/dist/common/prebuild.js.map +1 -1
  34. package/dist/common/projectSources.js +2 -3
  35. package/dist/common/projectSources.js.map +1 -1
  36. package/dist/common/setup.js +1 -2
  37. package/dist/common/setup.js.map +1 -1
  38. package/dist/context.d.ts +0 -1
  39. package/dist/customBuildContext.d.ts +0 -1
  40. package/dist/gcs/LoggerStream.d.ts +0 -2
  41. package/dist/gcs/client.d.ts +0 -1
  42. package/dist/gcs/retry.js +1 -2
  43. package/dist/gcs/retry.js.map +1 -1
  44. package/dist/generic.js +1 -2
  45. package/dist/generic.js.map +1 -1
  46. package/dist/ios/configure.js +2 -3
  47. package/dist/ios/configure.js.map +1 -1
  48. package/dist/ios/credentials/distributionCertificate.js +2 -3
  49. package/dist/ios/credentials/distributionCertificate.js.map +1 -1
  50. package/dist/ios/credentials/provisioningProfile.d.ts +0 -1
  51. package/dist/ios/expoUpdates.js +5 -5
  52. package/dist/ios/expoUpdates.js.map +1 -1
  53. package/dist/ios/fastfile.js +1 -2
  54. package/dist/ios/fastfile.js.map +1 -1
  55. package/dist/ios/fastlane.d.ts +0 -1
  56. package/dist/ios/fastlane.js +3 -4
  57. package/dist/ios/fastlane.js.map +1 -1
  58. package/dist/ios/gymfile.js +2 -3
  59. package/dist/ios/gymfile.js.map +1 -1
  60. package/dist/ios/pod.js +1 -2
  61. package/dist/ios/pod.js.map +1 -1
  62. package/dist/ios/resign.js +1 -2
  63. package/dist/ios/resign.js.map +1 -1
  64. package/dist/ios/resolve.js +3 -4
  65. package/dist/ios/resolve.js.map +1 -1
  66. package/dist/ios/tvos.js +1 -2
  67. package/dist/ios/tvos.js.map +1 -1
  68. package/dist/ios/xcodeBuildLogs.d.ts +0 -1
  69. package/dist/ios/xcodeBuildLogs.js +2 -3
  70. package/dist/ios/xcodeBuildLogs.js.map +1 -1
  71. package/dist/ios/xcodeEnv.js +1 -2
  72. package/dist/ios/xcodeEnv.js.map +1 -1
  73. package/dist/ios/xcpretty.d.ts +0 -1
  74. package/dist/steps/easFunctionGroups.js +1 -2
  75. package/dist/steps/easFunctionGroups.js.map +1 -1
  76. package/dist/steps/easFunctions.js +1 -2
  77. package/dist/steps/easFunctions.js.map +1 -1
  78. package/dist/steps/functionGroups/build.js +1 -2
  79. package/dist/steps/functionGroups/build.js.map +1 -1
  80. package/dist/steps/functionGroups/maestroTest.js +1 -2
  81. package/dist/steps/functionGroups/maestroTest.js.map +1 -1
  82. package/dist/steps/functions/calculateEASUpdateRuntimeVersion.js +1 -2
  83. package/dist/steps/functions/calculateEASUpdateRuntimeVersion.js.map +1 -1
  84. package/dist/steps/functions/checkout.js +1 -2
  85. package/dist/steps/functions/checkout.js.map +1 -1
  86. package/dist/steps/functions/configureAndroidVersion.js +1 -2
  87. package/dist/steps/functions/configureAndroidVersion.js.map +1 -1
  88. package/dist/steps/functions/configureEASUpdateIfInstalled.js +1 -2
  89. package/dist/steps/functions/configureEASUpdateIfInstalled.js.map +1 -1
  90. package/dist/steps/functions/configureIosCredentials.js +1 -2
  91. package/dist/steps/functions/configureIosCredentials.js.map +1 -1
  92. package/dist/steps/functions/configureIosVersion.js +1 -2
  93. package/dist/steps/functions/configureIosVersion.js.map +1 -1
  94. package/dist/steps/functions/createSubmissionEntity.js +1 -2
  95. package/dist/steps/functions/createSubmissionEntity.js.map +1 -1
  96. package/dist/steps/functions/downloadArtifact.d.ts +0 -1
  97. package/dist/steps/functions/downloadArtifact.js +2 -3
  98. package/dist/steps/functions/downloadArtifact.js.map +1 -1
  99. package/dist/steps/functions/downloadBuild.d.ts +0 -1
  100. package/dist/steps/functions/downloadBuild.js +2 -3
  101. package/dist/steps/functions/downloadBuild.js.map +1 -1
  102. package/dist/steps/functions/eagerBundle.js +1 -2
  103. package/dist/steps/functions/eagerBundle.js.map +1 -1
  104. package/dist/steps/functions/findAndUploadBuildArtifacts.js +1 -2
  105. package/dist/steps/functions/findAndUploadBuildArtifacts.js.map +1 -1
  106. package/dist/steps/functions/generateGymfileFromTemplate.js +1 -2
  107. package/dist/steps/functions/generateGymfileFromTemplate.js.map +1 -1
  108. package/dist/steps/functions/getCredentialsForBuildTriggeredByGitHubIntegration.js +1 -2
  109. package/dist/steps/functions/getCredentialsForBuildTriggeredByGitHubIntegration.js.map +1 -1
  110. package/dist/steps/functions/injectAndroidCredentials.js +1 -2
  111. package/dist/steps/functions/injectAndroidCredentials.js.map +1 -1
  112. package/dist/steps/functions/installMaestro.js +14 -16
  113. package/dist/steps/functions/installMaestro.js.map +1 -1
  114. package/dist/steps/functions/installNodeModules.js +2 -3
  115. package/dist/steps/functions/installNodeModules.js.map +1 -1
  116. package/dist/steps/functions/installPods.js +1 -2
  117. package/dist/steps/functions/installPods.js.map +1 -1
  118. package/dist/steps/functions/internalMaestroTest.js +2 -3
  119. package/dist/steps/functions/internalMaestroTest.js.map +1 -1
  120. package/dist/steps/functions/prebuild.js +1 -2
  121. package/dist/steps/functions/prebuild.js.map +1 -1
  122. package/dist/steps/functions/repack.d.ts +0 -1
  123. package/dist/steps/functions/repack.js +3 -4
  124. package/dist/steps/functions/repack.js.map +1 -1
  125. package/dist/steps/functions/resolveAppleTeamIdFromCredentials.js +1 -2
  126. package/dist/steps/functions/resolveAppleTeamIdFromCredentials.js.map +1 -1
  127. package/dist/steps/functions/resolveBuildConfig.d.ts +0 -1
  128. package/dist/steps/functions/resolveBuildConfig.js +2 -3
  129. package/dist/steps/functions/resolveBuildConfig.js.map +1 -1
  130. package/dist/steps/functions/runFastlane.js +1 -2
  131. package/dist/steps/functions/runFastlane.js.map +1 -1
  132. package/dist/steps/functions/runGradle.js +1 -2
  133. package/dist/steps/functions/runGradle.js.map +1 -1
  134. package/dist/steps/functions/sendSlackMessage.js +1 -2
  135. package/dist/steps/functions/sendSlackMessage.js.map +1 -1
  136. package/dist/steps/functions/startAndroidEmulator.js +1 -2
  137. package/dist/steps/functions/startAndroidEmulator.js.map +1 -1
  138. package/dist/steps/functions/startIosSimulator.js +1 -2
  139. package/dist/steps/functions/startIosSimulator.js.map +1 -1
  140. package/dist/steps/functions/uploadArtifact.js +1 -2
  141. package/dist/steps/functions/uploadArtifact.js.map +1 -1
  142. package/dist/steps/functions/useNpmToken.js +1 -2
  143. package/dist/steps/functions/useNpmToken.js.map +1 -1
  144. package/dist/steps/utils/android/expoUpdates.js +4 -4
  145. package/dist/steps/utils/android/expoUpdates.js.map +1 -1
  146. package/dist/steps/utils/android/gradle.d.ts +0 -1
  147. package/dist/steps/utils/android/gradle.js +2 -3
  148. package/dist/steps/utils/android/gradle.js.map +1 -1
  149. package/dist/steps/utils/android/gradleConfig.d.ts +0 -1
  150. package/dist/steps/utils/android/gradleConfig.js +2 -3
  151. package/dist/steps/utils/android/gradleConfig.js.map +1 -1
  152. package/dist/steps/utils/expoUpdates.d.ts +0 -1
  153. package/dist/steps/utils/expoUpdates.js +2 -3
  154. package/dist/steps/utils/expoUpdates.js.map +1 -1
  155. package/dist/steps/utils/ios/configure.d.ts +0 -1
  156. package/dist/steps/utils/ios/configure.js +3 -4
  157. package/dist/steps/utils/ios/configure.js.map +1 -1
  158. package/dist/steps/utils/ios/credentials/distributionCertificate.js +2 -3
  159. package/dist/steps/utils/ios/credentials/distributionCertificate.js.map +1 -1
  160. package/dist/steps/utils/ios/credentials/keychain.d.ts +0 -1
  161. package/dist/steps/utils/ios/credentials/manager.d.ts +0 -1
  162. package/dist/steps/utils/ios/credentials/provisioningProfile.d.ts +0 -2
  163. package/dist/steps/utils/ios/expoUpdates.js +4 -4
  164. package/dist/steps/utils/ios/expoUpdates.js.map +1 -1
  165. package/dist/steps/utils/ios/fastlane.d.ts +0 -1
  166. package/dist/steps/utils/ios/fastlane.js +2 -3
  167. package/dist/steps/utils/ios/fastlane.js.map +1 -1
  168. package/dist/steps/utils/ios/resolve.js +2 -3
  169. package/dist/steps/utils/ios/resolve.js.map +1 -1
  170. package/dist/steps/utils/ios/tvos.js +1 -2
  171. package/dist/steps/utils/ios/tvos.js.map +1 -1
  172. package/dist/steps/utils/ios/xcpretty.d.ts +0 -1
  173. package/dist/utils/AndroidEmulatorUtils.d.ts +0 -2
  174. package/dist/utils/AndroidEmulatorUtils.js +32 -17
  175. package/dist/utils/AndroidEmulatorUtils.js.map +1 -1
  176. package/dist/utils/IosSimulatorUtils.d.ts +8 -1
  177. package/dist/utils/IosSimulatorUtils.js +29 -0
  178. package/dist/utils/IosSimulatorUtils.js.map +1 -1
  179. package/dist/utils/appConfig.d.ts +0 -1
  180. package/dist/utils/appConfig.js +1 -2
  181. package/dist/utils/appConfig.js.map +1 -1
  182. package/dist/utils/artifacts.d.ts +0 -1
  183. package/dist/utils/artifacts.js +5 -5
  184. package/dist/utils/artifacts.js.map +1 -1
  185. package/dist/utils/diffFingerprintsAsync.d.ts +0 -1
  186. package/dist/utils/diffFingerprintsAsync.js +1 -2
  187. package/dist/utils/diffFingerprintsAsync.js.map +1 -1
  188. package/dist/utils/environmentSecrets.js +1 -2
  189. package/dist/utils/environmentSecrets.js.map +1 -1
  190. package/dist/utils/expoFingerprintCli.js +3 -3
  191. package/dist/utils/expoFingerprintCli.js.map +1 -1
  192. package/dist/utils/expoUpdates.d.ts +0 -1
  193. package/dist/utils/expoUpdates.js +9 -10
  194. package/dist/utils/expoUpdates.js.map +1 -1
  195. package/dist/utils/expoUpdatesCli.js +2 -2
  196. package/dist/utils/expoUpdatesCli.js.map +1 -1
  197. package/dist/utils/files.js +2 -3
  198. package/dist/utils/files.js.map +1 -1
  199. package/dist/utils/findMaestroPathsFlowsToExecuteAsync.d.ts +0 -1
  200. package/dist/utils/findMaestroPathsFlowsToExecuteAsync.js +1 -2
  201. package/dist/utils/findMaestroPathsFlowsToExecuteAsync.js.map +1 -1
  202. package/dist/utils/fingerprint.js +1 -2
  203. package/dist/utils/fingerprint.js.map +1 -1
  204. package/dist/utils/getExpoUpdatesPackageVersionIfInstalledAsync.d.ts +0 -1
  205. package/dist/utils/getExpoUpdatesPackageVersionIfInstalledAsync.js +1 -1
  206. package/dist/utils/getExpoUpdatesPackageVersionIfInstalledAsync.js.map +1 -1
  207. package/dist/utils/hooks.js +2 -2
  208. package/dist/utils/hooks.js.map +1 -1
  209. package/dist/utils/npmrc.d.ts +0 -1
  210. package/dist/utils/npmrc.js +1 -2
  211. package/dist/utils/npmrc.js.map +1 -1
  212. package/dist/utils/outputs.d.ts +0 -1
  213. package/dist/utils/outputs.js +2 -3
  214. package/dist/utils/outputs.js.map +1 -1
  215. package/dist/utils/packageManager.js +6 -6
  216. package/dist/utils/packageManager.js.map +1 -1
  217. package/dist/utils/prepareBuildExecutable.js +1 -2
  218. package/dist/utils/prepareBuildExecutable.js.map +1 -1
  219. package/dist/utils/processes.js +1 -2
  220. package/dist/utils/processes.js.map +1 -1
  221. package/dist/utils/project.js +3 -4
  222. package/dist/utils/project.js.map +1 -1
  223. package/dist/utils/promiseRetryWithCondition.js +1 -2
  224. package/dist/utils/promiseRetryWithCondition.js.map +1 -1
  225. package/dist/utils/resolveRuntimeVersionAsync.d.ts +0 -1
  226. package/dist/utils/resolveRuntimeVersionAsync.js +1 -2
  227. package/dist/utils/resolveRuntimeVersionAsync.js.map +1 -1
  228. package/dist/utils/retry.d.ts +0 -1
  229. package/dist/utils/retry.js +2 -3
  230. package/dist/utils/retry.js.map +1 -1
  231. package/dist/utils/retryOnDNSFailure.js +2 -3
  232. package/dist/utils/retryOnDNSFailure.js.map +1 -1
  233. package/dist/utils/turtleFetch.d.ts +0 -1
  234. package/dist/utils/turtleFetch.js +2 -2
  235. package/dist/utils/turtleFetch.js.map +1 -1
  236. package/package.json +9 -9
@@ -3,7 +3,11 @@ 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.formatBytes = exports.uploadApplicationArchive = exports.maybeFindAndUploadBuildArtifacts = exports.findArtifacts = exports.FindArtifactsError = void 0;
6
+ exports.FindArtifactsError = void 0;
7
+ exports.findArtifacts = findArtifacts;
8
+ exports.maybeFindAndUploadBuildArtifacts = maybeFindAndUploadBuildArtifacts;
9
+ exports.uploadApplicationArchive = uploadApplicationArchive;
10
+ exports.formatBytes = formatBytes;
7
11
  const path_1 = __importDefault(require("path"));
8
12
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
13
  const fast_glob_1 = __importDefault(require("fast-glob"));
@@ -40,7 +44,6 @@ async function findArtifacts({ rootDir, patternOrPath, logger, }) {
40
44
  return path_1.default.join(rootDir, filePath);
41
45
  });
42
46
  }
43
- exports.findArtifacts = findArtifacts;
44
47
  async function logMissingFileError(artifactPath, buildLogger) {
45
48
  let currentPath = artifactPath;
46
49
  while (!(await fs_extra_1.default.pathExists(currentPath))) {
@@ -87,7 +90,6 @@ async function maybeFindAndUploadBuildArtifacts(ctx, { logger }) {
87
90
  logger.error({ err }, 'Failed to upload build artifacts');
88
91
  }
89
92
  }
90
- exports.maybeFindAndUploadBuildArtifacts = maybeFindAndUploadBuildArtifacts;
91
93
  async function uploadApplicationArchive(ctx, { logger, patternOrPath, rootDir, }) {
92
94
  const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });
93
95
  const artifactsSizes = await getArtifactsSizes(applicationArchives);
@@ -105,7 +107,6 @@ async function uploadApplicationArchive(ctx, { logger, patternOrPath, rootDir, }
105
107
  logger,
106
108
  });
107
109
  }
108
- exports.uploadApplicationArchive = uploadApplicationArchive;
109
110
  async function getArtifactsSizes(artifacts) {
110
111
  const artifactsSizes = {};
111
112
  await Promise.all(artifacts.map(async (artifact) => {
@@ -163,5 +164,4 @@ function formatBytes(bytes) {
163
164
  }
164
165
  return `${Math.floor(bytes / 1024)} GB`;
165
166
  }
166
- exports.formatBytes = formatBytes;
167
167
  //# sourceMappingURL=artifacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/utils/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { ManagedArtifactType, Job, BuildJob } from '@expo/eas-build-job';\nimport promiseLimit from 'promise-limit';\n\nimport { BuildContext } from '../context';\n\nexport class FindArtifactsError extends Error {}\n\nexport async function findArtifacts({\n rootDir,\n patternOrPath,\n logger,\n}: {\n rootDir: string;\n patternOrPath: string;\n /** If provided, will log error suggesting possible files to upload. */\n logger: bunyan | null;\n}): Promise<string[]> {\n const files = path.isAbsolute(patternOrPath)\n ? (await fs.pathExists(patternOrPath))\n ? [patternOrPath]\n : []\n : await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new FindArtifactsError(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n if (logger) {\n await logMissingFileError(path.join(rootDir, patternOrPath), logger);\n }\n throw new FindArtifactsError(`No such file or directory ${patternOrPath}`);\n }\n }\n\n return files.map((filePath) => {\n // User may provide an absolute path as input in which case\n // fg will return an absolute path.\n if (path.isAbsolute(filePath)) {\n return filePath;\n }\n\n // User may also provide a relative path in which case\n // fg will return a path relative to rootDir.\n return path.join(rootDir, filePath);\n });\n}\n\nasync function logMissingFileError(artifactPath: string, buildLogger: bunyan): Promise<void> {\n let currentPath = artifactPath;\n while (!(await fs.pathExists(currentPath))) {\n currentPath = path.resolve(currentPath, '..');\n }\n if (currentPath === path.resolve(currentPath, '..')) {\n buildLogger.error(`There is no such file or directory \"${artifactPath}\".`);\n return;\n }\n const dirContent = await fs.readdir(currentPath);\n if (dirContent.length === 0) {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" is empty.`\n );\n } else {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" contains [${dirContent.join(\n ', '\n )}].`\n );\n }\n}\n\nexport async function maybeFindAndUploadBuildArtifacts(\n ctx: BuildContext<BuildJob>,\n { logger }: { logger: bunyan }\n): Promise<void> {\n if (!ctx.job.buildArtifactPaths || ctx.job.buildArtifactPaths.length === 0) {\n return;\n }\n try {\n const buildArtifacts = (\n await Promise.all(\n ctx.job.buildArtifactPaths.map((path) =>\n findArtifacts({\n rootDir: ctx.getReactNativeProjectDirectory(),\n patternOrPath: path,\n logger,\n })\n )\n )\n ).flat();\n const artifactsSizes = await getArtifactsSizes(buildArtifacts);\n logger.info(`Build artifacts:`);\n for (const artifactPath of buildArtifacts) {\n const maybeSize = artifactsSizes[artifactPath];\n logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);\n }\n logger.info('Uploading build artifacts...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.BUILD_ARTIFACTS,\n paths: buildArtifacts,\n },\n logger,\n });\n } catch (err: any) {\n logger.error({ err }, 'Failed to upload build artifacts');\n }\n}\n\nexport async function uploadApplicationArchive(\n ctx: BuildContext<Job>,\n {\n logger,\n patternOrPath,\n rootDir,\n }: {\n logger: bunyan;\n patternOrPath: string;\n rootDir: string;\n }\n): Promise<void> {\n const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });\n const artifactsSizes = await getArtifactsSizes(applicationArchives);\n logger.info(`Application archives:`);\n for (const artifactPath of applicationArchives) {\n const maybeSize = artifactsSizes[artifactPath];\n logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);\n }\n logger.info('Uploading application archive...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: applicationArchives,\n },\n logger,\n });\n}\n\nasync function getArtifactsSizes(artifacts: string[]): Promise<Record<string, number | undefined>> {\n const artifactsSizes: Record<string, number | undefined> = {};\n await Promise.all(\n artifacts.map(async (artifact) => {\n artifactsSizes[artifact] = await getArtifactSize(artifact);\n })\n );\n return artifactsSizes;\n}\n\nasync function getArtifactSize(artifact: string): Promise<number | undefined> {\n try {\n const stat = await fs.stat(artifact);\n if (!stat.isDirectory()) {\n return stat.size;\n } else {\n const files = await fg('**/*', { cwd: artifact, onlyFiles: true });\n\n if (files.length > 100_000) {\n return undefined;\n }\n\n const getFileSizePromiseLimit = promiseLimit<number>(100);\n const sizes = await Promise.all(\n files.map((file) =>\n getFileSizePromiseLimit(async () => (await fs.stat(path.join(artifact, file))).size)\n )\n );\n return sizes.reduce((acc, size) => acc + size, 0);\n }\n } catch {\n return undefined;\n }\n}\n\n// same as in\n// https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) {\n return `0`;\n }\n let multiplier = 1;\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes)} B`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} KB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / 1024)} KB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} MB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / multiplier)} MB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} GB`;\n }\n return `${Math.floor(bytes / 1024)} GB`;\n}\n"]}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/utils/artifacts.ts"],"names":[],"mappings":";;;;;;AAYA,sCAqCC;AAyBD,4EAoCC;AAED,4DA2BC;AAuCD,kCA2BC;AA7MD,gDAAwB;AAExB,wDAA0B;AAC1B,0DAA2B;AAE3B,uDAAyE;AACzE,kEAAyC;AAIzC,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD;AAEzC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,aAAa,EACb,MAAM,GAMP;IACC,MAAM,KAAK,GAAG,cAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC1C,CAAC,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC,aAAa,CAAC;YACjB,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,MAAM,IAAA,mBAAE,EAAC,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,mBAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,kBAAkB,CAAC,wCAAwC,aAAa,GAAG,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,mBAAmB,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,IAAI,kBAAkB,CAAC,6BAA6B,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5B,2DAA2D;QAC3D,mCAAmC;QACnC,IAAI,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,sDAAsD;QACtD,6CAA6C;QAC7C,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,YAAoB,EAAE,WAAmB;IAC1E,IAAI,WAAW,GAAG,YAAY,CAAC;IAC/B,OAAO,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC3C,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,WAAW,KAAK,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;QACpD,WAAW,CAAC,KAAK,CAAC,uCAAuC,YAAY,IAAI,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,KAAK,CACf,uCAAuC,YAAY,iBAAiB,WAAW,aAAa,CAC7F,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,KAAK,CACf,uCAAuC,YAAY,iBAAiB,WAAW,eAAe,UAAU,CAAC,IAAI,CAC3G,IAAI,CACL,IAAI,CACN,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gCAAgC,CACpD,GAA2B,EAC3B,EAAE,MAAM,EAAsB;IAE9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,CACrB,MAAM,OAAO,CAAC,GAAG,CACf,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,aAAa,CAAC;YACZ,OAAO,EAAE,GAAG,CAAC,8BAA8B,EAAE;YAC7C,aAAa,EAAE,IAAI;YACnB,MAAM;SACP,CAAC,CACH,CACF,CACF,CAAC,IAAI,EAAE,CAAC;QACT,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC,cAAc,CAAC;YACvB,QAAQ,EAAE;gBACR,IAAI,EAAE,mCAAmB,CAAC,eAAe;gBACzC,KAAK,EAAE,cAAc;aACtB;YACD,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,GAAsB,EACtB,EACE,MAAM,EACN,aAAa,EACb,OAAO,GAKR;IAED,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACrC,KAAK,MAAM,YAAY,IAAI,mBAAmB,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,GAAG,CAAC,cAAc,CAAC;QACvB,QAAQ,EAAE;YACR,IAAI,EAAE,mCAAmB,CAAC,mBAAmB;YAC7C,KAAK,EAAE,mBAAmB;SAC3B;QACD,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,SAAmB;IAClD,MAAM,cAAc,GAAuC,EAAE,CAAC;IAC9D,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,cAAc,CAAC,QAAQ,CAAC,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC,CACH,CAAC;IACF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAE,EAAC,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnE,IAAI,KAAK,CAAC,MAAM,GAAG,MAAO,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,uBAAuB,GAAG,IAAA,uBAAY,EAAS,GAAG,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,uBAAuB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,kBAAE,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CACrF,CACF,CAAC;YACF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,aAAa;AACb,4HAA4H;AAC5H,SAAgB,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAClC,CAAC;IACD,UAAU,IAAI,IAAI,CAAC;IACnB,IAAI,KAAK,GAAG,KAAK,GAAG,UAAU,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1C,CAAC;IACD,UAAU,IAAI,IAAI,CAAC;IACnB,IAAI,KAAK,GAAG,KAAK,GAAG,UAAU,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAChD,CAAC;IACD,UAAU,IAAI,IAAI,CAAC;IACnB,IAAI,KAAK,GAAG,KAAK,GAAG,UAAU,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1C,CAAC","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { ManagedArtifactType, Job, BuildJob } from '@expo/eas-build-job';\nimport promiseLimit from 'promise-limit';\n\nimport { BuildContext } from '../context';\n\nexport class FindArtifactsError extends Error {}\n\nexport async function findArtifacts({\n rootDir,\n patternOrPath,\n logger,\n}: {\n rootDir: string;\n patternOrPath: string;\n /** If provided, will log error suggesting possible files to upload. */\n logger: bunyan | null;\n}): Promise<string[]> {\n const files = path.isAbsolute(patternOrPath)\n ? (await fs.pathExists(patternOrPath))\n ? [patternOrPath]\n : []\n : await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new FindArtifactsError(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n if (logger) {\n await logMissingFileError(path.join(rootDir, patternOrPath), logger);\n }\n throw new FindArtifactsError(`No such file or directory ${patternOrPath}`);\n }\n }\n\n return files.map((filePath) => {\n // User may provide an absolute path as input in which case\n // fg will return an absolute path.\n if (path.isAbsolute(filePath)) {\n return filePath;\n }\n\n // User may also provide a relative path in which case\n // fg will return a path relative to rootDir.\n return path.join(rootDir, filePath);\n });\n}\n\nasync function logMissingFileError(artifactPath: string, buildLogger: bunyan): Promise<void> {\n let currentPath = artifactPath;\n while (!(await fs.pathExists(currentPath))) {\n currentPath = path.resolve(currentPath, '..');\n }\n if (currentPath === path.resolve(currentPath, '..')) {\n buildLogger.error(`There is no such file or directory \"${artifactPath}\".`);\n return;\n }\n const dirContent = await fs.readdir(currentPath);\n if (dirContent.length === 0) {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" is empty.`\n );\n } else {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" contains [${dirContent.join(\n ', '\n )}].`\n );\n }\n}\n\nexport async function maybeFindAndUploadBuildArtifacts(\n ctx: BuildContext<BuildJob>,\n { logger }: { logger: bunyan }\n): Promise<void> {\n if (!ctx.job.buildArtifactPaths || ctx.job.buildArtifactPaths.length === 0) {\n return;\n }\n try {\n const buildArtifacts = (\n await Promise.all(\n ctx.job.buildArtifactPaths.map((path) =>\n findArtifacts({\n rootDir: ctx.getReactNativeProjectDirectory(),\n patternOrPath: path,\n logger,\n })\n )\n )\n ).flat();\n const artifactsSizes = await getArtifactsSizes(buildArtifacts);\n logger.info(`Build artifacts:`);\n for (const artifactPath of buildArtifacts) {\n const maybeSize = artifactsSizes[artifactPath];\n logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);\n }\n logger.info('Uploading build artifacts...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.BUILD_ARTIFACTS,\n paths: buildArtifacts,\n },\n logger,\n });\n } catch (err: any) {\n logger.error({ err }, 'Failed to upload build artifacts');\n }\n}\n\nexport async function uploadApplicationArchive(\n ctx: BuildContext<Job>,\n {\n logger,\n patternOrPath,\n rootDir,\n }: {\n logger: bunyan;\n patternOrPath: string;\n rootDir: string;\n }\n): Promise<void> {\n const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });\n const artifactsSizes = await getArtifactsSizes(applicationArchives);\n logger.info(`Application archives:`);\n for (const artifactPath of applicationArchives) {\n const maybeSize = artifactsSizes[artifactPath];\n logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);\n }\n logger.info('Uploading application archive...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: applicationArchives,\n },\n logger,\n });\n}\n\nasync function getArtifactsSizes(artifacts: string[]): Promise<Record<string, number | undefined>> {\n const artifactsSizes: Record<string, number | undefined> = {};\n await Promise.all(\n artifacts.map(async (artifact) => {\n artifactsSizes[artifact] = await getArtifactSize(artifact);\n })\n );\n return artifactsSizes;\n}\n\nasync function getArtifactSize(artifact: string): Promise<number | undefined> {\n try {\n const stat = await fs.stat(artifact);\n if (!stat.isDirectory()) {\n return stat.size;\n } else {\n const files = await fg('**/*', { cwd: artifact, onlyFiles: true });\n\n if (files.length > 100_000) {\n return undefined;\n }\n\n const getFileSizePromiseLimit = promiseLimit<number>(100);\n const sizes = await Promise.all(\n files.map((file) =>\n getFileSizePromiseLimit(async () => (await fs.stat(path.join(artifact, file))).size)\n )\n );\n return sizes.reduce((acc, size) => acc + size, 0);\n }\n } catch {\n return undefined;\n }\n}\n\n// same as in\n// https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) {\n return `0`;\n }\n let multiplier = 1;\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes)} B`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} KB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / 1024)} KB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} MB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / multiplier)} MB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} GB`;\n }\n return `${Math.floor(bytes / 1024)} GB`;\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="bunyan" />
2
1
  import { BuildStepEnv } from '@expo/steps';
3
2
  import { bunyan } from '@expo/logger';
4
3
  export declare function diffFingerprintsAsync(projectDir: string, fingerprint1File: string, fingerprint2File: string, { env, logger }: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.diffFingerprintsAsync = void 0;
3
+ exports.diffFingerprintsAsync = diffFingerprintsAsync;
4
4
  const expoFingerprintCli_1 = require("./expoFingerprintCli");
5
5
  async function diffFingerprintsAsync(projectDir, fingerprint1File, fingerprint2File, { env, logger }) {
6
6
  if (!(await (0, expoFingerprintCli_1.isModernExpoFingerprintCLISupportedAsync)(projectDir))) {
@@ -22,5 +22,4 @@ async function diffFingerprintsAsync(projectDir, fingerprint1File, fingerprint2F
22
22
  throw e;
23
23
  }
24
24
  }
25
- exports.diffFingerprintsAsync = diffFingerprintsAsync;
26
25
  //# sourceMappingURL=diffFingerprintsAsync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diffFingerprintsAsync.js","sourceRoot":"","sources":["../../src/utils/diffFingerprintsAsync.ts"],"names":[],"mappings":";;;AAGA,6DAM8B;AAEvB,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,gBAAwB,EACxB,gBAAwB,EACxB,EAAE,GAAG,EAAE,MAAM,EAAyC;IAEtD,IAAI,CAAC,CAAC,MAAM,IAAA,6DAAwC,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,gDAA2B,EACtC,UAAU,EACV,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EACxD;YACE,GAAG;SACJ,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IACE,CAAC,YAAY,0DAAqC;YAClD,CAAC,YAAY,yDAAoC;YACjD,CAAC,YAAY,0DAAqC,EAClD,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AA9BD,sDA8BC","sourcesContent":["import { BuildStepEnv } from '@expo/steps';\nimport { bunyan } from '@expo/logger';\n\nimport {\n ExpoFingerprintCLICommandFailedError,\n ExpoFingerprintCLIInvalidCommandError,\n ExpoFingerprintCLIModuleNotFoundError,\n expoFingerprintCommandAsync,\n isModernExpoFingerprintCLISupportedAsync,\n} from './expoFingerprintCli';\n\nexport async function diffFingerprintsAsync(\n projectDir: string,\n fingerprint1File: string,\n fingerprint2File: string,\n { env, logger }: { env: BuildStepEnv; logger: bunyan }\n): Promise<string | null> {\n if (!(await isModernExpoFingerprintCLISupportedAsync(projectDir))) {\n logger.debug('Fingerprint diff not available');\n return null;\n }\n\n try {\n return await expoFingerprintCommandAsync(\n projectDir,\n ['fingerprint:diff', fingerprint1File, fingerprint2File],\n {\n env,\n }\n );\n } catch (e) {\n if (\n e instanceof ExpoFingerprintCLIModuleNotFoundError ||\n e instanceof ExpoFingerprintCLICommandFailedError ||\n e instanceof ExpoFingerprintCLIInvalidCommandError\n ) {\n logger.debug('Fingerprint diff not available');\n return null;\n }\n throw e;\n }\n}\n"]}
1
+ {"version":3,"file":"diffFingerprintsAsync.js","sourceRoot":"","sources":["../../src/utils/diffFingerprintsAsync.ts"],"names":[],"mappings":";;AAWA,sDA8BC;AAtCD,6DAM8B;AAEvB,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,gBAAwB,EACxB,gBAAwB,EACxB,EAAE,GAAG,EAAE,MAAM,EAAyC;IAEtD,IAAI,CAAC,CAAC,MAAM,IAAA,6DAAwC,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,gDAA2B,EACtC,UAAU,EACV,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EACxD;YACE,GAAG;SACJ,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IACE,CAAC,YAAY,0DAAqC;YAClD,CAAC,YAAY,yDAAoC;YACjD,CAAC,YAAY,0DAAqC,EAClD,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC","sourcesContent":["import { BuildStepEnv } from '@expo/steps';\nimport { bunyan } from '@expo/logger';\n\nimport {\n ExpoFingerprintCLICommandFailedError,\n ExpoFingerprintCLIInvalidCommandError,\n ExpoFingerprintCLIModuleNotFoundError,\n expoFingerprintCommandAsync,\n isModernExpoFingerprintCLISupportedAsync,\n} from './expoFingerprintCli';\n\nexport async function diffFingerprintsAsync(\n projectDir: string,\n fingerprint1File: string,\n fingerprint2File: string,\n { env, logger }: { env: BuildStepEnv; logger: bunyan }\n): Promise<string | null> {\n if (!(await isModernExpoFingerprintCLISupportedAsync(projectDir))) {\n logger.debug('Fingerprint diff not available');\n return null;\n }\n\n try {\n return await expoFingerprintCommandAsync(\n projectDir,\n ['fingerprint:diff', fingerprint1File, fingerprint2File],\n {\n env,\n }\n );\n } catch (e) {\n if (\n e instanceof ExpoFingerprintCLIModuleNotFoundError ||\n e instanceof ExpoFingerprintCLICommandFailedError ||\n e instanceof ExpoFingerprintCLIInvalidCommandError\n ) {\n logger.debug('Fingerprint diff not available');\n return null;\n }\n throw e;\n }\n}\n"]}
@@ -3,7 +3,7 @@ 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.createTemporaryEnvironmentSecretFile = void 0;
6
+ exports.createTemporaryEnvironmentSecretFile = createTemporaryEnvironmentSecretFile;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const uuid_1 = require("uuid");
@@ -12,5 +12,4 @@ function createTemporaryEnvironmentSecretFile(secretsDir, value) {
12
12
  fs_1.default.writeFileSync(randomFilePath, Buffer.from(value, 'base64'));
13
13
  return randomFilePath;
14
14
  }
15
- exports.createTemporaryEnvironmentSecretFile = createTemporaryEnvironmentSecretFile;
16
15
  //# sourceMappingURL=environmentSecrets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"environmentSecrets.js","sourceRoot":"","sources":["../../src/utils/environmentSecrets.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,+BAAkC;AAElC,SAAgB,oCAAoC,CAAC,UAAkB,EAAE,KAAa;IACpF,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAA,SAAI,GAAE,CAAC,CAAC;IACrD,YAAE,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,OAAO,cAAc,CAAC;AACxB,CAAC;AAJD,oFAIC","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { v4 as uuid } from 'uuid';\n\nexport function createTemporaryEnvironmentSecretFile(secretsDir: string, value: string): string {\n const randomFilePath = path.join(secretsDir, uuid());\n fs.writeFileSync(randomFilePath, Buffer.from(value, 'base64'));\n return randomFilePath;\n}\n"]}
1
+ {"version":3,"file":"environmentSecrets.js","sourceRoot":"","sources":["../../src/utils/environmentSecrets.ts"],"names":[],"mappings":";;;;;AAKA,oFAIC;AATD,4CAAoB;AACpB,gDAAwB;AAExB,+BAAkC;AAElC,SAAgB,oCAAoC,CAAC,UAAkB,EAAE,KAAa;IACpF,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAA,SAAI,GAAE,CAAC,CAAC;IACrD,YAAE,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,OAAO,cAAc,CAAC;AACxB,CAAC","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { v4 as uuid } from 'uuid';\n\nexport function createTemporaryEnvironmentSecretFile(secretsDir: string, value: string): string {\n const randomFilePath = path.join(secretsDir, uuid());\n fs.writeFileSync(randomFilePath, Buffer.from(value, 'base64'));\n return randomFilePath;\n}\n"]}
@@ -3,7 +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.isModernExpoFingerprintCLISupportedAsync = exports.expoFingerprintCommandAsync = exports.ExpoFingerprintCLICommandFailedError = exports.ExpoFingerprintCLIInvalidCommandError = exports.ExpoFingerprintCLIModuleNotFoundError = void 0;
6
+ exports.ExpoFingerprintCLICommandFailedError = exports.ExpoFingerprintCLIInvalidCommandError = exports.ExpoFingerprintCLIModuleNotFoundError = void 0;
7
+ exports.expoFingerprintCommandAsync = expoFingerprintCommandAsync;
8
+ exports.isModernExpoFingerprintCLISupportedAsync = isModernExpoFingerprintCLISupportedAsync;
7
9
  const resolve_from_1 = __importDefault(require("resolve-from"));
8
10
  const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
9
11
  const fs_extra_1 = __importDefault(require("fs-extra"));
@@ -52,7 +54,6 @@ async function expoFingerprintCommandAsync(projectDir, args, { env }) {
52
54
  throw e;
53
55
  }
54
56
  }
55
- exports.expoFingerprintCommandAsync = expoFingerprintCommandAsync;
56
57
  async function getExpoFingerprintPackageVersionIfInstalledAsync(projectDir) {
57
58
  const expoPackageRoot = resolve_from_1.default.silent(projectDir, 'expo/package.json');
58
59
  const maybePackageJson = resolve_from_1.default.silent(expoPackageRoot !== null && expoPackageRoot !== void 0 ? expoPackageRoot : projectDir, '@expo/fingerprint/package.json');
@@ -72,5 +73,4 @@ async function isModernExpoFingerprintCLISupportedAsync(projectDir) {
72
73
  }
73
74
  return semver_1.default.gte(expoFingerprintPackageVersion, '0.11.2');
74
75
  }
75
- exports.isModernExpoFingerprintCLISupportedAsync = isModernExpoFingerprintCLISupportedAsync;
76
76
  //# sourceMappingURL=expoFingerprintCli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expoFingerprintCli.js","sourceRoot":"","sources":["../../src/utils/expoFingerprintCli.ts"],"names":[],"mappings":"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","sourcesContent":["import resolveFrom from 'resolve-from';\nimport spawnAsync from '@expo/turtle-spawn';\nimport { BuildStepEnv } from '@expo/steps';\nimport fs from 'fs-extra';\nimport semver from 'semver';\n\nexport class ExpoFingerprintCLIModuleNotFoundError extends Error {}\nexport class ExpoFingerprintCLIInvalidCommandError extends Error {}\nexport class ExpoFingerprintCLICommandFailedError extends Error {}\n\nfunction resolveExpoFingerprintCLI(projectRoot: string): string {\n const expoPackageRoot = resolveFrom.silent(projectRoot, 'expo/package.json');\n try {\n return (\n resolveFrom.silent(expoPackageRoot ?? projectRoot, '@expo/fingerprint/bin/cli') ??\n resolveFrom(expoPackageRoot ?? projectRoot, '@expo/fingerprint/bin/cli.js')\n );\n } catch (e: any) {\n if (e.code === 'MODULE_NOT_FOUND') {\n throw new ExpoFingerprintCLIModuleNotFoundError(\n `The \\`@expo/fingerprint\\` package was not found.`\n );\n }\n throw e;\n }\n}\n\nexport async function expoFingerprintCommandAsync(\n projectDir: string,\n args: string[],\n { env }: { env: BuildStepEnv }\n): Promise<string> {\n const expoFingerprintCli = resolveExpoFingerprintCLI(projectDir);\n try {\n const spawnResult = await spawnAsync(expoFingerprintCli, args, {\n stdio: 'pipe',\n cwd: projectDir,\n env,\n });\n return spawnResult.stdout;\n } catch (e: any) {\n if (e.stderr && typeof e.stderr === 'string') {\n if (e.stderr.includes('Invalid command')) {\n throw new ExpoFingerprintCLIInvalidCommandError(\n `The command specified by ${args} was not valid in the \\`@expo/fingerprint\\` CLI.`\n );\n } else {\n throw new ExpoFingerprintCLICommandFailedError(e.stderr);\n }\n }\n throw e;\n }\n}\n\nasync function getExpoFingerprintPackageVersionIfInstalledAsync(\n projectDir: string\n): Promise<string | null> {\n const expoPackageRoot = resolveFrom.silent(projectDir, 'expo/package.json');\n const maybePackageJson = resolveFrom.silent(\n expoPackageRoot ?? projectDir,\n '@expo/fingerprint/package.json'\n );\n if (!maybePackageJson) {\n return null;\n }\n const { version } = await fs.readJson(maybePackageJson);\n return version ?? null;\n}\n\nexport async function isModernExpoFingerprintCLISupportedAsync(\n projectDir: string\n): Promise<boolean> {\n const expoFingerprintPackageVersion =\n await getExpoFingerprintPackageVersionIfInstalledAsync(projectDir);\n if (!expoFingerprintPackageVersion) {\n return false;\n }\n\n if (expoFingerprintPackageVersion.includes('canary')) {\n return true;\n }\n\n return semver.gte(expoFingerprintPackageVersion, '0.11.2');\n}\n"]}
1
+ {"version":3,"file":"expoFingerprintCli.js","sourceRoot":"","sources":["../../src/utils/expoFingerprintCli.ts"],"names":[],"mappings":"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","sourcesContent":["import resolveFrom from 'resolve-from';\nimport spawnAsync from '@expo/turtle-spawn';\nimport { BuildStepEnv } from '@expo/steps';\nimport fs from 'fs-extra';\nimport semver from 'semver';\n\nexport class ExpoFingerprintCLIModuleNotFoundError extends Error {}\nexport class ExpoFingerprintCLIInvalidCommandError extends Error {}\nexport class ExpoFingerprintCLICommandFailedError extends Error {}\n\nfunction resolveExpoFingerprintCLI(projectRoot: string): string {\n const expoPackageRoot = resolveFrom.silent(projectRoot, 'expo/package.json');\n try {\n return (\n resolveFrom.silent(expoPackageRoot ?? projectRoot, '@expo/fingerprint/bin/cli') ??\n resolveFrom(expoPackageRoot ?? projectRoot, '@expo/fingerprint/bin/cli.js')\n );\n } catch (e: any) {\n if (e.code === 'MODULE_NOT_FOUND') {\n throw new ExpoFingerprintCLIModuleNotFoundError(\n `The \\`@expo/fingerprint\\` package was not found.`\n );\n }\n throw e;\n }\n}\n\nexport async function expoFingerprintCommandAsync(\n projectDir: string,\n args: string[],\n { env }: { env: BuildStepEnv }\n): Promise<string> {\n const expoFingerprintCli = resolveExpoFingerprintCLI(projectDir);\n try {\n const spawnResult = await spawnAsync(expoFingerprintCli, args, {\n stdio: 'pipe',\n cwd: projectDir,\n env,\n });\n return spawnResult.stdout;\n } catch (e: any) {\n if (e.stderr && typeof e.stderr === 'string') {\n if (e.stderr.includes('Invalid command')) {\n throw new ExpoFingerprintCLIInvalidCommandError(\n `The command specified by ${args} was not valid in the \\`@expo/fingerprint\\` CLI.`\n );\n } else {\n throw new ExpoFingerprintCLICommandFailedError(e.stderr);\n }\n }\n throw e;\n }\n}\n\nasync function getExpoFingerprintPackageVersionIfInstalledAsync(\n projectDir: string\n): Promise<string | null> {\n const expoPackageRoot = resolveFrom.silent(projectDir, 'expo/package.json');\n const maybePackageJson = resolveFrom.silent(\n expoPackageRoot ?? projectDir,\n '@expo/fingerprint/package.json'\n );\n if (!maybePackageJson) {\n return null;\n }\n const { version } = await fs.readJson(maybePackageJson);\n return version ?? null;\n}\n\nexport async function isModernExpoFingerprintCLISupportedAsync(\n projectDir: string\n): Promise<boolean> {\n const expoFingerprintPackageVersion =\n await getExpoFingerprintPackageVersionIfInstalledAsync(projectDir);\n if (!expoFingerprintPackageVersion) {\n return false;\n }\n\n if (expoFingerprintPackageVersion.includes('canary')) {\n return true;\n }\n\n return semver.gte(expoFingerprintPackageVersion, '0.11.2');\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="bunyan" />
2
1
  import { Platform, Job, BuildJob, Workflow } from '@expo/eas-build-job';
3
2
  import { ExpoConfig } from '@expo/config';
4
3
  import { bunyan } from '@expo/logger';
@@ -3,7 +3,15 @@ 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.isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported = exports.isEASUpdateConfigured = exports.getRuntimeVersionAsync = exports.getChannelAsync = exports.resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync = exports.configureExpoUpdatesIfInstalledAsync = exports.configureEASExpoUpdatesAsync = exports.setChannelNativelyAsync = exports.setRuntimeVersionNativelyAsync = void 0;
6
+ exports.setRuntimeVersionNativelyAsync = setRuntimeVersionNativelyAsync;
7
+ exports.setChannelNativelyAsync = setChannelNativelyAsync;
8
+ exports.configureEASExpoUpdatesAsync = configureEASExpoUpdatesAsync;
9
+ exports.configureExpoUpdatesIfInstalledAsync = configureExpoUpdatesIfInstalledAsync;
10
+ exports.resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync = resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync;
11
+ exports.getChannelAsync = getChannelAsync;
12
+ exports.getRuntimeVersionAsync = getRuntimeVersionAsync;
13
+ exports.isEASUpdateConfigured = isEASUpdateConfigured;
14
+ exports.isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported = isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported;
7
15
  const assert_1 = __importDefault(require("assert"));
8
16
  const os_1 = __importDefault(require("os"));
9
17
  const path_1 = __importDefault(require("path"));
@@ -32,7 +40,6 @@ async function setRuntimeVersionNativelyAsync(ctx, runtimeVersion) {
32
40
  throw new Error(`Platform is not supported.`);
33
41
  }
34
42
  }
35
- exports.setRuntimeVersionNativelyAsync = setRuntimeVersionNativelyAsync;
36
43
  /**
37
44
  * Used for when Expo Updates is pointed at an EAS server.
38
45
  */
@@ -57,11 +64,9 @@ async function setChannelNativelyAsync(ctx) {
57
64
  throw new Error(`Platform is not supported.`);
58
65
  }
59
66
  }
60
- exports.setChannelNativelyAsync = setChannelNativelyAsync;
61
67
  async function configureEASExpoUpdatesAsync(ctx) {
62
68
  await setChannelNativelyAsync(ctx);
63
69
  }
64
- exports.configureEASExpoUpdatesAsync = configureEASExpoUpdatesAsync;
65
70
  async function configureExpoUpdatesIfInstalledAsync(ctx, resolvedRuntime) {
66
71
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
67
72
  const expoUpdatesPackageVersion = await (0, getExpoUpdatesPackageVersionIfInstalledAsync_1.default)(ctx.getReactNativeProjectDirectory(), ctx.logger);
@@ -113,7 +118,6 @@ This would cause any updates published on the local machine to not be compatible
113
118
  await setRuntimeVersionNativelyAsync(ctx, ctx.job.version.runtimeVersion);
114
119
  }
115
120
  }
116
- exports.configureExpoUpdatesIfInstalledAsync = configureExpoUpdatesIfInstalledAsync;
117
121
  async function resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({ cwd, appConfig, platform, workflow, logger, env, }) {
118
122
  const expoUpdatesPackageVersion = await (0, getExpoUpdatesPackageVersionIfInstalledAsync_1.default)(cwd, logger);
119
123
  if (expoUpdatesPackageVersion === null) {
@@ -131,7 +135,6 @@ async function resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({ cwd, appCo
131
135
  logger.info(`Resolved runtime version: ${resolvedRuntimeVersion === null || resolvedRuntimeVersion === void 0 ? void 0 : resolvedRuntimeVersion.runtimeVersion}`);
132
136
  return resolvedRuntimeVersion;
133
137
  }
134
- exports.resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync = resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync;
135
138
  async function getChannelAsync(ctx) {
136
139
  switch (ctx.job.platform) {
137
140
  case eas_build_job_1.Platform.ANDROID: {
@@ -144,7 +147,6 @@ async function getChannelAsync(ctx) {
144
147
  throw new Error(`Platform is not supported.`);
145
148
  }
146
149
  }
147
- exports.getChannelAsync = getChannelAsync;
148
150
  async function getRuntimeVersionAsync(ctx) {
149
151
  switch (ctx.job.platform) {
150
152
  case eas_build_job_1.Platform.ANDROID: {
@@ -157,7 +159,6 @@ async function getRuntimeVersionAsync(ctx) {
157
159
  throw new Error(`Platform is not supported.`);
158
160
  }
159
161
  }
160
- exports.getRuntimeVersionAsync = getRuntimeVersionAsync;
161
162
  function isEASUpdateConfigured(ctx) {
162
163
  var _a;
163
164
  const rawUrl = (_a = ctx.appConfig.updates) === null || _a === void 0 ? void 0 : _a.url;
@@ -174,7 +175,6 @@ function isEASUpdateConfigured(ctx) {
174
175
  return false;
175
176
  }
176
177
  }
177
- exports.isEASUpdateConfigured = isEASUpdateConfigured;
178
178
  function isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported(expoUpdatesPackageVersion) {
179
179
  if (expoUpdatesPackageVersion.includes('canary')) {
180
180
  return true;
@@ -182,7 +182,6 @@ function isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported(expoUpdatesPac
182
182
  // Anything SDK 51 or greater uses the expo-updates CLI
183
183
  return semver_1.default.gte(expoUpdatesPackageVersion, '0.25.4');
184
184
  }
185
- exports.isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported = isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported;
186
185
  async function logDiffFingerprints({ resolvedRuntime, ctx, }) {
187
186
  var _a;
188
187
  const { resolvedRuntimeVersion, resolvedFingerprintSources } = resolvedRuntime;
@@ -1 +1 @@
1
- {"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../src/utils/expoUpdates.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport os from 'os';\nimport path from 'path';\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { Platform, Job, BuildJob, Workflow, FingerprintSourceType } from '@expo/eas-build-job';\nimport semver from 'semver';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { BuildStepEnv } from '@expo/steps';\nimport fetch from 'node-fetch';\nimport fs from 'fs-extra';\n\nimport {\n androidSetRuntimeVersionNativelyAsync,\n androidSetChannelNativelyAsync,\n androidGetNativelyDefinedRuntimeVersionAsync,\n androidGetNativelyDefinedChannelAsync,\n} from '../android/expoUpdates';\nimport {\n iosSetRuntimeVersionNativelyAsync,\n iosSetChannelNativelyAsync,\n iosGetNativelyDefinedRuntimeVersionAsync,\n iosGetNativelyDefinedChannelAsync,\n} from '../ios/expoUpdates';\nimport { BuildContext } from '../context';\n\nimport getExpoUpdatesPackageVersionIfInstalledAsync from './getExpoUpdatesPackageVersionIfInstalledAsync';\nimport { resolveRuntimeVersionAsync } from './resolveRuntimeVersionAsync';\nimport { diffFingerprintsAsync } from './diffFingerprintsAsync';\nimport { stringifyFingerprintDiff } from './fingerprint';\n\nexport async function setRuntimeVersionNativelyAsync(\n ctx: BuildContext<Job>,\n runtimeVersion: string\n): Promise<void> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n await androidSetRuntimeVersionNativelyAsync(ctx, runtimeVersion);\n return;\n }\n case Platform.IOS: {\n await iosSetRuntimeVersionNativelyAsync(ctx, runtimeVersion);\n return;\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\n/**\n * Used for when Expo Updates is pointed at an EAS server.\n */\nexport async function setChannelNativelyAsync(ctx: BuildContext<BuildJob>): Promise<void> {\n assert(ctx.job.updates?.channel, 'updates.channel must be defined');\n const newUpdateRequestHeaders: Record<string, string> = {\n 'expo-channel-name': ctx.job.updates.channel,\n };\n\n const configFile = ctx.job.platform === Platform.ANDROID ? 'AndroidManifest.xml' : 'Expo.plist';\n ctx.logger.info(\n `Setting the update request headers in '${configFile}' to '${JSON.stringify(\n newUpdateRequestHeaders\n )}'`\n );\n\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n await androidSetChannelNativelyAsync(ctx);\n return;\n }\n case Platform.IOS: {\n await iosSetChannelNativelyAsync(ctx);\n return;\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport async function configureEASExpoUpdatesAsync(ctx: BuildContext<BuildJob>): Promise<void> {\n await setChannelNativelyAsync(ctx);\n}\n\ntype ResolvedRuntime = {\n resolvedRuntimeVersion: string | null;\n resolvedFingerprintSources?: object[] | null;\n};\n\nexport async function configureExpoUpdatesIfInstalledAsync(\n ctx: BuildContext<BuildJob>,\n resolvedRuntime: ResolvedRuntime\n): Promise<void> {\n const expoUpdatesPackageVersion = await getExpoUpdatesPackageVersionIfInstalledAsync(\n ctx.getReactNativeProjectDirectory(),\n ctx.logger\n );\n if (expoUpdatesPackageVersion === null) {\n return;\n }\n\n const appConfigRuntimeVersion =\n ctx.job.version?.runtimeVersion ?? resolvedRuntime.resolvedRuntimeVersion;\n\n if (ctx.metadata?.runtimeVersion && ctx.metadata.runtimeVersion !== appConfigRuntimeVersion) {\n ctx.logger.warn(\n `\nRuntime version mismatch:\n- Runtime version calculated on local machine: ${ctx.metadata.runtimeVersion}\n- Runtime version calculated on EAS: ${appConfigRuntimeVersion}\n\nThis may be due to one or more factors:\n- Differing result of conditional app config (app.config.js) evaluation for runtime version resolution.\n- Differing fingerprint when using fingerprint runtime version policy. If applicable, see fingerprint diff below.\n\nThis would cause any updates published on the local machine to not be compatible with this build.\n`\n );\n await logDiffFingerprints({ resolvedRuntime, ctx });\n throw new Error(\n 'Runtime version calculated on local machine not equal to runtime version calculated during build.'\n );\n }\n\n if (isEASUpdateConfigured(ctx)) {\n if (ctx.job.updates?.channel !== undefined) {\n await configureEASExpoUpdatesAsync(ctx);\n } else {\n const channel = await getChannelAsync(ctx);\n const isDevelopmentClient = ctx.job.developmentClient ?? false;\n\n if (channel !== null) {\n const configFile =\n ctx.job.platform === Platform.ANDROID ? 'AndroidManifest.xml' : 'Expo.plist';\n ctx.logger.info(`The channel name for EAS Update in ${configFile} is set to \"${channel}\"`);\n } else if (isDevelopmentClient) {\n // NO-OP: Development clients don't need to have a channel set\n } else {\n const easUpdateUrl = ctx.appConfig.updates?.url ?? null;\n const jobProfile = ctx.job.buildProfile ?? null;\n ctx.logger.warn(\n `This build has an invalid EAS Update configuration: update.url is set to \"${easUpdateUrl}\" in app config, but a channel is not specified${\n jobProfile ? '' : ` for the current build profile \"${jobProfile}\" in eas.json`\n }.`\n );\n ctx.logger.warn(`- No channel will be set and EAS Update will be disabled for the build.`);\n ctx.logger.warn(\n `- Run \\`eas update:configure\\` to set your channel in eas.json. For more details, see https://docs.expo.dev/eas-update/getting-started/#configure-your-project`\n );\n\n ctx.markBuildPhaseHasWarnings();\n }\n }\n }\n\n if (ctx.job.version?.runtimeVersion) {\n ctx.logger.info('Updating runtimeVersion in Expo.plist');\n await setRuntimeVersionNativelyAsync(ctx, ctx.job.version.runtimeVersion);\n }\n}\n\nexport async function resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({\n cwd,\n appConfig,\n platform,\n workflow,\n logger,\n env,\n}: {\n cwd: string;\n appConfig: ExpoConfig;\n platform: Platform;\n workflow: Workflow;\n logger: bunyan;\n env: BuildStepEnv;\n}): Promise<{\n runtimeVersion: string | null;\n fingerprintSources: object[] | null;\n} | null> {\n const expoUpdatesPackageVersion = await getExpoUpdatesPackageVersionIfInstalledAsync(cwd, logger);\n if (expoUpdatesPackageVersion === null) {\n return null;\n }\n\n const resolvedRuntimeVersion = await resolveRuntimeVersionAsync({\n projectDir: cwd,\n exp: appConfig,\n platform,\n workflow,\n logger,\n expoUpdatesPackageVersion,\n env,\n });\n\n logger.info(`Resolved runtime version: ${resolvedRuntimeVersion?.runtimeVersion}`);\n return resolvedRuntimeVersion;\n}\n\nexport async function getChannelAsync(ctx: BuildContext<Job>): Promise<string | null> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n return await androidGetNativelyDefinedChannelAsync(ctx);\n }\n case Platform.IOS: {\n return await iosGetNativelyDefinedChannelAsync(ctx);\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport async function getRuntimeVersionAsync(ctx: BuildContext<Job>): Promise<string | null> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n return await androidGetNativelyDefinedRuntimeVersionAsync(ctx);\n }\n case Platform.IOS: {\n return await iosGetNativelyDefinedRuntimeVersionAsync(ctx);\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport function isEASUpdateConfigured(ctx: BuildContext<Job>): boolean {\n const rawUrl = ctx.appConfig.updates?.url;\n if (!rawUrl) {\n return false;\n }\n try {\n const url = new URL(rawUrl);\n return ['u.expo.dev', 'staging-u.expo.dev'].includes(url.hostname);\n } catch (err) {\n ctx.logger.error({ err }, `Cannot parse expo.updates.url = ${rawUrl} as URL`);\n ctx.logger.error(`Assuming EAS Update is not configured`);\n return false;\n }\n}\n\nexport function isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported(\n expoUpdatesPackageVersion: string\n): boolean {\n if (expoUpdatesPackageVersion.includes('canary')) {\n return true;\n }\n\n // Anything SDK 51 or greater uses the expo-updates CLI\n return semver.gte(expoUpdatesPackageVersion, '0.25.4');\n}\n\nasync function logDiffFingerprints({\n resolvedRuntime,\n ctx,\n}: {\n resolvedRuntime: ResolvedRuntime;\n ctx: BuildContext<BuildJob>;\n}): Promise<void> {\n const { resolvedRuntimeVersion, resolvedFingerprintSources } = resolvedRuntime;\n if (ctx.metadata?.fingerprintSource && resolvedFingerprintSources && resolvedRuntimeVersion) {\n try {\n const fingerprintSource = ctx.metadata.fingerprintSource;\n\n let localFingerprintFile: string | null = null;\n\n if (fingerprintSource.type === FingerprintSourceType.URL) {\n const result = await fetch(fingerprintSource.url);\n const localFingerprintJSON = await result.json();\n localFingerprintFile = path.join(os.tmpdir(), `eas-build-${uuidv4()}-local-fingerprint`);\n await fs.writeFile(localFingerprintFile, JSON.stringify(localFingerprintJSON));\n } else if (fingerprintSource.type === FingerprintSourceType.PATH) {\n localFingerprintFile = fingerprintSource.path;\n } else {\n ctx.logger.warn(`Invalid fingerprint source type: ${fingerprintSource.type}`);\n }\n\n if (localFingerprintFile) {\n const easFingerprint = {\n hash: resolvedRuntimeVersion,\n sources: resolvedFingerprintSources,\n };\n const easFingerprintFile = path.join(os.tmpdir(), `eas-build-${uuidv4()}-eas-fingerprint`);\n await fs.writeFile(easFingerprintFile, JSON.stringify(easFingerprint));\n\n const changesJSONString = await diffFingerprintsAsync(\n ctx.getReactNativeProjectDirectory(),\n localFingerprintFile,\n easFingerprintFile,\n { env: ctx.env, logger: ctx.logger }\n );\n if (changesJSONString) {\n const changes = JSON.parse(changesJSONString);\n if (changes.length) {\n ctx.logger.warn('Difference between local and EAS fingerprints:');\n ctx.logger.warn(stringifyFingerprintDiff(changes));\n }\n }\n }\n } catch (error) {\n ctx.logger.warn('Failed to compare fingerprints', error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../src/utils/expoUpdates.ts"],"names":[],"mappings":";;;;;AAgCA,wEAgBC;AAKD,0DAyBC;AAED,oEAEC;AAOD,oFAsEC;AAED,oHAmCC;AAED,0CAWC;AAED,wDAWC;AAED,sDAaC;AAED,4HASC;AAxPD,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AAExB,+BAAoC;AACpC,uDAA+F;AAC/F,oDAA4B;AAI5B,4DAA+B;AAC/B,wDAA0B;AAE1B,wDAKgC;AAChC,oDAK4B;AAG5B,kIAA0G;AAC1G,6EAA0E;AAC1E,mEAAgE;AAChE,+CAAyD;AAElD,KAAK,UAAU,8BAA8B,CAClD,GAAsB,EACtB,cAAsB;IAEtB,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,wBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACtB,MAAM,IAAA,mDAAqC,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,KAAK,wBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,MAAM,IAAA,+CAAiC,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,uBAAuB,CAAC,GAA2B;;IACvE,IAAA,gBAAM,EAAC,MAAA,GAAG,CAAC,GAAG,CAAC,OAAO,0CAAE,OAAO,EAAE,iCAAiC,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAA2B;QACtD,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;KAC7C,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,wBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC;IAChG,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,0CAA0C,UAAU,SAAS,IAAI,CAAC,SAAS,CACzE,uBAAuB,CACxB,GAAG,CACL,CAAC;IAEF,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,wBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACtB,MAAM,IAAA,4CAA8B,EAAC,GAAG,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,KAAK,wBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,MAAM,IAAA,wCAA0B,EAAC,GAAG,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAAC,GAA2B;IAC5E,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAOM,KAAK,UAAU,oCAAoC,CACxD,GAA2B,EAC3B,eAAgC;;IAEhC,MAAM,yBAAyB,GAAG,MAAM,IAAA,sDAA4C,EAClF,GAAG,CAAC,8BAA8B,EAAE,EACpC,GAAG,CAAC,MAAM,CACX,CAAC;IACF,IAAI,yBAAyB,KAAK,IAAI,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,uBAAuB,GAC3B,MAAA,MAAA,GAAG,CAAC,GAAG,CAAC,OAAO,0CAAE,cAAc,mCAAI,eAAe,CAAC,sBAAsB,CAAC;IAE5E,IAAI,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,cAAc,KAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,uBAAuB,EAAE,CAAC;QAC5F,GAAG,CAAC,MAAM,CAAC,IAAI,CACb;;iDAE2C,GAAG,CAAC,QAAQ,CAAC,cAAc;uCACrC,uBAAuB;;;;;;;CAO7D,CACI,CAAC;QACF,MAAM,mBAAmB,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAA,MAAA,GAAG,CAAC,GAAG,CAAC,OAAO,0CAAE,OAAO,MAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,4BAA4B,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,mBAAmB,GAAG,MAAA,GAAG,CAAC,GAAG,CAAC,iBAAiB,mCAAI,KAAK,CAAC;YAE/D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,UAAU,GACd,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,wBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC;gBAC/E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,UAAU,eAAe,OAAO,GAAG,CAAC,CAAC;YAC7F,CAAC;iBAAM,IAAI,mBAAmB,EAAE,CAAC;gBAC/B,8DAA8D;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,MAAA,MAAA,GAAG,CAAC,SAAS,CAAC,OAAO,0CAAE,GAAG,mCAAI,IAAI,CAAC;gBACxD,MAAM,UAAU,GAAG,MAAA,GAAG,CAAC,GAAG,CAAC,YAAY,mCAAI,IAAI,CAAC;gBAChD,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,6EAA6E,YAAY,kDACvF,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC,UAAU,eACjE,GAAG,CACJ,CAAC;gBACF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;gBAC3F,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,gKAAgK,CACjK,CAAC;gBAEF,GAAG,CAAC,yBAAyB,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAA,GAAG,CAAC,GAAG,CAAC,OAAO,0CAAE,cAAc,EAAE,CAAC;QACpC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACzD,MAAM,8BAA8B,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,oDAAoD,CAAC,EACzE,GAAG,EACH,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,GAAG,GAQJ;IAIC,MAAM,yBAAyB,GAAG,MAAM,IAAA,sDAA4C,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClG,IAAI,yBAAyB,KAAK,IAAI,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,sBAAsB,GAAG,MAAM,IAAA,uDAA0B,EAAC;QAC9D,UAAU,EAAE,GAAG;QACf,GAAG,EAAE,SAAS;QACd,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,yBAAyB;QACzB,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,6BAA6B,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,cAAc,EAAE,CAAC,CAAC;IACnF,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,GAAsB;IAC1D,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,wBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACtB,OAAO,MAAM,IAAA,mDAAqC,EAAC,GAAG,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,wBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,OAAO,MAAM,IAAA,+CAAiC,EAAC,GAAG,CAAC,CAAC;QACtD,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,GAAsB;IACjE,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,wBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACtB,OAAO,MAAM,IAAA,0DAA4C,EAAC,GAAG,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,wBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,OAAO,MAAM,IAAA,sDAAwC,EAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAsB;;IAC1D,MAAM,MAAM,GAAG,MAAA,GAAG,CAAC,SAAS,CAAC,OAAO,0CAAE,GAAG,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,mCAAmC,MAAM,SAAS,CAAC,CAAC;QAC9E,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,wDAAwD,CACtE,yBAAiC;IAEjC,IAAI,yBAAyB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,OAAO,gBAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,EACjC,eAAe,EACf,GAAG,GAIJ;;IACC,MAAM,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,GAAG,eAAe,CAAC;IAC/E,IAAI,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,iBAAiB,KAAI,0BAA0B,IAAI,sBAAsB,EAAE,CAAC;QAC5F,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAEzD,IAAI,oBAAoB,GAAkB,IAAI,CAAC;YAE/C,IAAI,iBAAiB,CAAC,IAAI,KAAK,qCAAqB,CAAC,GAAG,EAAE,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAK,EAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,oBAAoB,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,aAAa,IAAA,SAAM,GAAE,oBAAoB,CAAC,CAAC;gBACzF,MAAM,kBAAE,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,iBAAiB,CAAC,IAAI,KAAK,qCAAqB,CAAC,IAAI,EAAE,CAAC;gBACjE,oBAAoB,GAAG,iBAAiB,CAAC,IAAI,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,cAAc,GAAG;oBACrB,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,0BAA0B;iBACpC,CAAC;gBACF,MAAM,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,aAAa,IAAA,SAAM,GAAE,kBAAkB,CAAC,CAAC;gBAC3F,MAAM,kBAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;gBAEvE,MAAM,iBAAiB,GAAG,MAAM,IAAA,6CAAqB,EACnD,GAAG,CAAC,8BAA8B,EAAE,EACpC,oBAAoB,EACpB,kBAAkB,EAClB,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CACrC,CAAC;gBACF,IAAI,iBAAiB,EAAE,CAAC;oBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAC9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;wBAClE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,sCAAwB,EAAC,OAAO,CAAC,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import assert from 'assert';\nimport os from 'os';\nimport path from 'path';\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { Platform, Job, BuildJob, Workflow, FingerprintSourceType } from '@expo/eas-build-job';\nimport semver from 'semver';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { BuildStepEnv } from '@expo/steps';\nimport fetch from 'node-fetch';\nimport fs from 'fs-extra';\n\nimport {\n androidSetRuntimeVersionNativelyAsync,\n androidSetChannelNativelyAsync,\n androidGetNativelyDefinedRuntimeVersionAsync,\n androidGetNativelyDefinedChannelAsync,\n} from '../android/expoUpdates';\nimport {\n iosSetRuntimeVersionNativelyAsync,\n iosSetChannelNativelyAsync,\n iosGetNativelyDefinedRuntimeVersionAsync,\n iosGetNativelyDefinedChannelAsync,\n} from '../ios/expoUpdates';\nimport { BuildContext } from '../context';\n\nimport getExpoUpdatesPackageVersionIfInstalledAsync from './getExpoUpdatesPackageVersionIfInstalledAsync';\nimport { resolveRuntimeVersionAsync } from './resolveRuntimeVersionAsync';\nimport { diffFingerprintsAsync } from './diffFingerprintsAsync';\nimport { stringifyFingerprintDiff } from './fingerprint';\n\nexport async function setRuntimeVersionNativelyAsync(\n ctx: BuildContext<Job>,\n runtimeVersion: string\n): Promise<void> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n await androidSetRuntimeVersionNativelyAsync(ctx, runtimeVersion);\n return;\n }\n case Platform.IOS: {\n await iosSetRuntimeVersionNativelyAsync(ctx, runtimeVersion);\n return;\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\n/**\n * Used for when Expo Updates is pointed at an EAS server.\n */\nexport async function setChannelNativelyAsync(ctx: BuildContext<BuildJob>): Promise<void> {\n assert(ctx.job.updates?.channel, 'updates.channel must be defined');\n const newUpdateRequestHeaders: Record<string, string> = {\n 'expo-channel-name': ctx.job.updates.channel,\n };\n\n const configFile = ctx.job.platform === Platform.ANDROID ? 'AndroidManifest.xml' : 'Expo.plist';\n ctx.logger.info(\n `Setting the update request headers in '${configFile}' to '${JSON.stringify(\n newUpdateRequestHeaders\n )}'`\n );\n\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n await androidSetChannelNativelyAsync(ctx);\n return;\n }\n case Platform.IOS: {\n await iosSetChannelNativelyAsync(ctx);\n return;\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport async function configureEASExpoUpdatesAsync(ctx: BuildContext<BuildJob>): Promise<void> {\n await setChannelNativelyAsync(ctx);\n}\n\ntype ResolvedRuntime = {\n resolvedRuntimeVersion: string | null;\n resolvedFingerprintSources?: object[] | null;\n};\n\nexport async function configureExpoUpdatesIfInstalledAsync(\n ctx: BuildContext<BuildJob>,\n resolvedRuntime: ResolvedRuntime\n): Promise<void> {\n const expoUpdatesPackageVersion = await getExpoUpdatesPackageVersionIfInstalledAsync(\n ctx.getReactNativeProjectDirectory(),\n ctx.logger\n );\n if (expoUpdatesPackageVersion === null) {\n return;\n }\n\n const appConfigRuntimeVersion =\n ctx.job.version?.runtimeVersion ?? resolvedRuntime.resolvedRuntimeVersion;\n\n if (ctx.metadata?.runtimeVersion && ctx.metadata.runtimeVersion !== appConfigRuntimeVersion) {\n ctx.logger.warn(\n `\nRuntime version mismatch:\n- Runtime version calculated on local machine: ${ctx.metadata.runtimeVersion}\n- Runtime version calculated on EAS: ${appConfigRuntimeVersion}\n\nThis may be due to one or more factors:\n- Differing result of conditional app config (app.config.js) evaluation for runtime version resolution.\n- Differing fingerprint when using fingerprint runtime version policy. If applicable, see fingerprint diff below.\n\nThis would cause any updates published on the local machine to not be compatible with this build.\n`\n );\n await logDiffFingerprints({ resolvedRuntime, ctx });\n throw new Error(\n 'Runtime version calculated on local machine not equal to runtime version calculated during build.'\n );\n }\n\n if (isEASUpdateConfigured(ctx)) {\n if (ctx.job.updates?.channel !== undefined) {\n await configureEASExpoUpdatesAsync(ctx);\n } else {\n const channel = await getChannelAsync(ctx);\n const isDevelopmentClient = ctx.job.developmentClient ?? false;\n\n if (channel !== null) {\n const configFile =\n ctx.job.platform === Platform.ANDROID ? 'AndroidManifest.xml' : 'Expo.plist';\n ctx.logger.info(`The channel name for EAS Update in ${configFile} is set to \"${channel}\"`);\n } else if (isDevelopmentClient) {\n // NO-OP: Development clients don't need to have a channel set\n } else {\n const easUpdateUrl = ctx.appConfig.updates?.url ?? null;\n const jobProfile = ctx.job.buildProfile ?? null;\n ctx.logger.warn(\n `This build has an invalid EAS Update configuration: update.url is set to \"${easUpdateUrl}\" in app config, but a channel is not specified${\n jobProfile ? '' : ` for the current build profile \"${jobProfile}\" in eas.json`\n }.`\n );\n ctx.logger.warn(`- No channel will be set and EAS Update will be disabled for the build.`);\n ctx.logger.warn(\n `- Run \\`eas update:configure\\` to set your channel in eas.json. For more details, see https://docs.expo.dev/eas-update/getting-started/#configure-your-project`\n );\n\n ctx.markBuildPhaseHasWarnings();\n }\n }\n }\n\n if (ctx.job.version?.runtimeVersion) {\n ctx.logger.info('Updating runtimeVersion in Expo.plist');\n await setRuntimeVersionNativelyAsync(ctx, ctx.job.version.runtimeVersion);\n }\n}\n\nexport async function resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({\n cwd,\n appConfig,\n platform,\n workflow,\n logger,\n env,\n}: {\n cwd: string;\n appConfig: ExpoConfig;\n platform: Platform;\n workflow: Workflow;\n logger: bunyan;\n env: BuildStepEnv;\n}): Promise<{\n runtimeVersion: string | null;\n fingerprintSources: object[] | null;\n} | null> {\n const expoUpdatesPackageVersion = await getExpoUpdatesPackageVersionIfInstalledAsync(cwd, logger);\n if (expoUpdatesPackageVersion === null) {\n return null;\n }\n\n const resolvedRuntimeVersion = await resolveRuntimeVersionAsync({\n projectDir: cwd,\n exp: appConfig,\n platform,\n workflow,\n logger,\n expoUpdatesPackageVersion,\n env,\n });\n\n logger.info(`Resolved runtime version: ${resolvedRuntimeVersion?.runtimeVersion}`);\n return resolvedRuntimeVersion;\n}\n\nexport async function getChannelAsync(ctx: BuildContext<Job>): Promise<string | null> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n return await androidGetNativelyDefinedChannelAsync(ctx);\n }\n case Platform.IOS: {\n return await iosGetNativelyDefinedChannelAsync(ctx);\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport async function getRuntimeVersionAsync(ctx: BuildContext<Job>): Promise<string | null> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n return await androidGetNativelyDefinedRuntimeVersionAsync(ctx);\n }\n case Platform.IOS: {\n return await iosGetNativelyDefinedRuntimeVersionAsync(ctx);\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport function isEASUpdateConfigured(ctx: BuildContext<Job>): boolean {\n const rawUrl = ctx.appConfig.updates?.url;\n if (!rawUrl) {\n return false;\n }\n try {\n const url = new URL(rawUrl);\n return ['u.expo.dev', 'staging-u.expo.dev'].includes(url.hostname);\n } catch (err) {\n ctx.logger.error({ err }, `Cannot parse expo.updates.url = ${rawUrl} as URL`);\n ctx.logger.error(`Assuming EAS Update is not configured`);\n return false;\n }\n}\n\nexport function isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported(\n expoUpdatesPackageVersion: string\n): boolean {\n if (expoUpdatesPackageVersion.includes('canary')) {\n return true;\n }\n\n // Anything SDK 51 or greater uses the expo-updates CLI\n return semver.gte(expoUpdatesPackageVersion, '0.25.4');\n}\n\nasync function logDiffFingerprints({\n resolvedRuntime,\n ctx,\n}: {\n resolvedRuntime: ResolvedRuntime;\n ctx: BuildContext<BuildJob>;\n}): Promise<void> {\n const { resolvedRuntimeVersion, resolvedFingerprintSources } = resolvedRuntime;\n if (ctx.metadata?.fingerprintSource && resolvedFingerprintSources && resolvedRuntimeVersion) {\n try {\n const fingerprintSource = ctx.metadata.fingerprintSource;\n\n let localFingerprintFile: string | null = null;\n\n if (fingerprintSource.type === FingerprintSourceType.URL) {\n const result = await fetch(fingerprintSource.url);\n const localFingerprintJSON = await result.json();\n localFingerprintFile = path.join(os.tmpdir(), `eas-build-${uuidv4()}-local-fingerprint`);\n await fs.writeFile(localFingerprintFile, JSON.stringify(localFingerprintJSON));\n } else if (fingerprintSource.type === FingerprintSourceType.PATH) {\n localFingerprintFile = fingerprintSource.path;\n } else {\n ctx.logger.warn(`Invalid fingerprint source type: ${fingerprintSource.type}`);\n }\n\n if (localFingerprintFile) {\n const easFingerprint = {\n hash: resolvedRuntimeVersion,\n sources: resolvedFingerprintSources,\n };\n const easFingerprintFile = path.join(os.tmpdir(), `eas-build-${uuidv4()}-eas-fingerprint`);\n await fs.writeFile(easFingerprintFile, JSON.stringify(easFingerprint));\n\n const changesJSONString = await diffFingerprintsAsync(\n ctx.getReactNativeProjectDirectory(),\n localFingerprintFile,\n easFingerprintFile,\n { env: ctx.env, logger: ctx.logger }\n );\n if (changesJSONString) {\n const changes = JSON.parse(changesJSONString);\n if (changes.length) {\n ctx.logger.warn('Difference between local and EAS fingerprints:');\n ctx.logger.warn(stringifyFingerprintDiff(changes));\n }\n }\n }\n } catch (error) {\n ctx.logger.warn('Failed to compare fingerprints', error);\n }\n }\n}\n"]}
@@ -26,7 +26,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.expoUpdatesCommandAsync = exports.ExpoUpdatesCLICommandFailedError = exports.ExpoUpdatesCLIInvalidCommandError = exports.ExpoUpdatesCLIModuleNotFoundError = void 0;
29
+ exports.ExpoUpdatesCLICommandFailedError = exports.ExpoUpdatesCLIInvalidCommandError = exports.ExpoUpdatesCLIModuleNotFoundError = void 0;
30
+ exports.expoUpdatesCommandAsync = expoUpdatesCommandAsync;
30
31
  const resolve_from_1 = __importStar(require("resolve-from"));
31
32
  const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
32
33
  class ExpoUpdatesCLIModuleNotFoundError extends Error {
@@ -71,5 +72,4 @@ async function expoUpdatesCommandAsync(projectDir, args, { env }) {
71
72
  throw e;
72
73
  }
73
74
  }
74
- exports.expoUpdatesCommandAsync = expoUpdatesCommandAsync;
75
75
  //# sourceMappingURL=expoUpdatesCli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expoUpdatesCli.js","sourceRoot":"","sources":["../../src/utils/expoUpdatesCli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAwE;AACxE,sEAA4C;AAG5C,MAAa,iCAAkC,SAAQ,KAAK;CAAG;AAA/D,8EAA+D;AAC/D,MAAa,iCAAkC,SAAQ,KAAK;CAAG;AAA/D,8EAA+D;AAC/D,MAAa,gCAAiC,SAAQ,KAAK;CAAG;AAA9D,4EAA8D;AAEvD,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,IAAc,EACd,EAAE,GAAG,EAAyB;;IAE9B,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC;QACH,cAAc;YACZ,MAAA,IAAA,qBAAiB,EAAC,UAAU,EAAE,sBAAsB,CAAC,mCACrD,IAAA,sBAAW,EAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAClC,MAAM,IAAI,iCAAiC,CACzC,uIAAuI,CACxI,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAU,EAAC,cAAc,EAAE,IAAI,EAAE;YACzD,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,UAAU;YACf,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,iCAAiC,CACzC,4BAA4B,IAAI,6CAA6C,CAC9E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,gCAAgC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAtCD,0DAsCC","sourcesContent":["import resolveFrom, { silent as silentResolveFrom } from 'resolve-from';\nimport spawnAsync from '@expo/turtle-spawn';\nimport { BuildStepEnv } from '@expo/steps';\n\nexport class ExpoUpdatesCLIModuleNotFoundError extends Error {}\nexport class ExpoUpdatesCLIInvalidCommandError extends Error {}\nexport class ExpoUpdatesCLICommandFailedError extends Error {}\n\nexport async function expoUpdatesCommandAsync(\n projectDir: string,\n args: string[],\n { env }: { env: BuildStepEnv }\n): Promise<string> {\n let expoUpdatesCli;\n try {\n expoUpdatesCli =\n silentResolveFrom(projectDir, 'expo-updates/bin/cli') ??\n resolveFrom(projectDir, 'expo-updates/bin/cli.js');\n } catch (e: any) {\n if (e.code === 'MODULE_NOT_FOUND') {\n throw new ExpoUpdatesCLIModuleNotFoundError(\n `The \\`expo-updates\\` package was not found. Follow the installation directions at https://docs.expo.dev/bare/installing-expo-modules/`\n );\n }\n throw e;\n }\n\n try {\n const spawnResult = await spawnAsync(expoUpdatesCli, args, {\n stdio: 'pipe',\n cwd: projectDir,\n env,\n });\n return spawnResult.stdout;\n } catch (e: any) {\n if (e.stderr && typeof e.stderr === 'string') {\n if (e.stderr.includes('Invalid command')) {\n throw new ExpoUpdatesCLIInvalidCommandError(\n `The command specified by ${args} was not valid in the \\`expo-updates\\` CLI.`\n );\n } else {\n throw new ExpoUpdatesCLICommandFailedError(e.stderr);\n }\n }\n throw e;\n }\n}\n"]}
1
+ {"version":3,"file":"expoUpdatesCli.js","sourceRoot":"","sources":["../../src/utils/expoUpdatesCli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,0DAsCC;AA9CD,6DAAwE;AACxE,sEAA4C;AAG5C,MAAa,iCAAkC,SAAQ,KAAK;CAAG;AAA/D,8EAA+D;AAC/D,MAAa,iCAAkC,SAAQ,KAAK;CAAG;AAA/D,8EAA+D;AAC/D,MAAa,gCAAiC,SAAQ,KAAK;CAAG;AAA9D,4EAA8D;AAEvD,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,IAAc,EACd,EAAE,GAAG,EAAyB;;IAE9B,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC;QACH,cAAc;YACZ,MAAA,IAAA,qBAAiB,EAAC,UAAU,EAAE,sBAAsB,CAAC,mCACrD,IAAA,sBAAW,EAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAClC,MAAM,IAAI,iCAAiC,CACzC,uIAAuI,CACxI,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAU,EAAC,cAAc,EAAE,IAAI,EAAE;YACzD,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,UAAU;YACf,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,iCAAiC,CACzC,4BAA4B,IAAI,6CAA6C,CAC9E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,gCAAgC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC","sourcesContent":["import resolveFrom, { silent as silentResolveFrom } from 'resolve-from';\nimport spawnAsync from '@expo/turtle-spawn';\nimport { BuildStepEnv } from '@expo/steps';\n\nexport class ExpoUpdatesCLIModuleNotFoundError extends Error {}\nexport class ExpoUpdatesCLIInvalidCommandError extends Error {}\nexport class ExpoUpdatesCLICommandFailedError extends Error {}\n\nexport async function expoUpdatesCommandAsync(\n projectDir: string,\n args: string[],\n { env }: { env: BuildStepEnv }\n): Promise<string> {\n let expoUpdatesCli;\n try {\n expoUpdatesCli =\n silentResolveFrom(projectDir, 'expo-updates/bin/cli') ??\n resolveFrom(projectDir, 'expo-updates/bin/cli.js');\n } catch (e: any) {\n if (e.code === 'MODULE_NOT_FOUND') {\n throw new ExpoUpdatesCLIModuleNotFoundError(\n `The \\`expo-updates\\` package was not found. Follow the installation directions at https://docs.expo.dev/bare/installing-expo-modules/`\n );\n }\n throw e;\n }\n\n try {\n const spawnResult = await spawnAsync(expoUpdatesCli, args, {\n stdio: 'pipe',\n cwd: projectDir,\n env,\n });\n return spawnResult.stdout;\n } catch (e: any) {\n if (e.stderr && typeof e.stderr === 'string') {\n if (e.stderr.includes('Invalid command')) {\n throw new ExpoUpdatesCLIInvalidCommandError(\n `The command specified by ${args} was not valid in the \\`expo-updates\\` CLI.`\n );\n } else {\n throw new ExpoUpdatesCLICommandFailedError(e.stderr);\n }\n }\n throw e;\n }\n}\n"]}
@@ -26,7 +26,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.isFileTarGzAsync = exports.decompressTarAsync = void 0;
29
+ exports.decompressTarAsync = decompressTarAsync;
30
+ exports.isFileTarGzAsync = isFileTarGzAsync;
30
31
  // import fs from 'node:fs';
31
32
  const promises_1 = __importDefault(require("node:fs/promises"));
32
33
  const node_stream_1 = __importDefault(require("node:stream"));
@@ -37,7 +38,6 @@ async function decompressTarAsync({ archivePath, destinationDirectory, }) {
37
38
  const fileHandle = await promises_1.default.open(archivePath, 'r');
38
39
  await streamPipeline(fileHandle.createReadStream(), tar.extract({ cwd: destinationDirectory }, []));
39
40
  }
40
- exports.decompressTarAsync = decompressTarAsync;
41
41
  async function isFileTarGzAsync(path) {
42
42
  if (path.endsWith('tar.gz') || path.endsWith('.tgz')) {
43
43
  return true;
@@ -54,5 +54,4 @@ async function isFileTarGzAsync(path) {
54
54
  // Source: https://en.wikipedia.org/wiki/Gzip#File_format
55
55
  return buffer[0] === 0x1f && buffer[1] === 0x8b && buffer[2] === 0x08;
56
56
  }
57
- exports.isFileTarGzAsync = isFileTarGzAsync;
58
57
  //# sourceMappingURL=files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAA4B;AAC5B,gEAA0C;AAC1C,8DAAiC;AACjC,yCAAsC;AAEtC,yCAA2B;AAE3B,MAAM,cAAc,GAAG,IAAA,qBAAS,EAAC,qBAAM,CAAC,QAAQ,CAAC,CAAC;AAE3C,KAAK,UAAU,kBAAkB,CAAC,EACvC,WAAW,EACX,oBAAoB,GAIrB;IACC,MAAM,UAAU,GAAG,MAAM,kBAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,cAAc,CAClB,UAAU,CAAC,gBAAgB,EAAE,EAC7B,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAC/C,CAAC;AACJ,CAAC;AAZD,gDAYC;AAEM,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,EAAE,GAAG,MAAM,kBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAEjB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8DAA8D;IAC9D,0DAA0D;IAC1D,yDAAyD;IACzD,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACxE,CAAC;AAlBD,4CAkBC","sourcesContent":["// import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport stream from 'node:stream';\nimport { promisify } from 'node:util';\n\nimport * as tar from 'tar';\n\nconst streamPipeline = promisify(stream.pipeline);\n\nexport async function decompressTarAsync({\n archivePath,\n destinationDirectory,\n}: {\n archivePath: string;\n destinationDirectory: string;\n}): Promise<void> {\n const fileHandle = await fsPromises.open(archivePath, 'r');\n await streamPipeline(\n fileHandle.createReadStream(),\n tar.extract({ cwd: destinationDirectory }, [])\n );\n}\n\nexport async function isFileTarGzAsync(path: string): Promise<boolean> {\n if (path.endsWith('tar.gz') || path.endsWith('.tgz')) {\n return true;\n }\n\n // read only first 3 bytes to check if it's gzip\n const fd = await fsPromises.open(path, 'r');\n const { buffer } = await fd.read(Buffer.alloc(3), 0, 3, 0);\n await fd.close();\n\n if (buffer.length < 3) {\n return false;\n }\n\n // Check whether provided `buffer` is a valid Gzip file header\n // Gzip files always begin with 0x1F 0x8B 0x08 magic bytes\n // Source: https://en.wikipedia.org/wiki/Gzip#File_format\n return buffer[0] === 0x1f && buffer[1] === 0x8b && buffer[2] === 0x08;\n}\n"]}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,gDAYC;AAED,4CAkBC;AAzCD,4BAA4B;AAC5B,gEAA0C;AAC1C,8DAAiC;AACjC,yCAAsC;AAEtC,yCAA2B;AAE3B,MAAM,cAAc,GAAG,IAAA,qBAAS,EAAC,qBAAM,CAAC,QAAQ,CAAC,CAAC;AAE3C,KAAK,UAAU,kBAAkB,CAAC,EACvC,WAAW,EACX,oBAAoB,GAIrB;IACC,MAAM,UAAU,GAAG,MAAM,kBAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,cAAc,CAClB,UAAU,CAAC,gBAAgB,EAAE,EAC7B,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAC/C,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,EAAE,GAAG,MAAM,kBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAEjB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8DAA8D;IAC9D,0DAA0D;IAC1D,yDAAyD;IACzD,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACxE,CAAC","sourcesContent":["// import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport stream from 'node:stream';\nimport { promisify } from 'node:util';\n\nimport * as tar from 'tar';\n\nconst streamPipeline = promisify(stream.pipeline);\n\nexport async function decompressTarAsync({\n archivePath,\n destinationDirectory,\n}: {\n archivePath: string;\n destinationDirectory: string;\n}): Promise<void> {\n const fileHandle = await fsPromises.open(archivePath, 'r');\n await streamPipeline(\n fileHandle.createReadStream(),\n tar.extract({ cwd: destinationDirectory }, [])\n );\n}\n\nexport async function isFileTarGzAsync(path: string): Promise<boolean> {\n if (path.endsWith('tar.gz') || path.endsWith('.tgz')) {\n return true;\n }\n\n // read only first 3 bytes to check if it's gzip\n const fd = await fsPromises.open(path, 'r');\n const { buffer } = await fd.read(Buffer.alloc(3), 0, 3, 0);\n await fd.close();\n\n if (buffer.length < 3) {\n return false;\n }\n\n // Check whether provided `buffer` is a valid Gzip file header\n // Gzip files always begin with 0x1F 0x8B 0x08 magic bytes\n // Source: https://en.wikipedia.org/wiki/Gzip#File_format\n return buffer[0] === 0x1f && buffer[1] === 0x8b && buffer[2] === 0x08;\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="bunyan" />
2
1
  import { bunyan } from '@expo/logger';
3
2
  export declare function findMaestroPathsFlowsToExecuteAsync({ workingDirectory, flowPath, includeTags: _includeTags, excludeTags: _excludeTags, logger, }: {
4
3
  workingDirectory: string;
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.findMaestroPathsFlowsToExecuteAsync = void 0;
29
+ exports.findMaestroPathsFlowsToExecuteAsync = findMaestroPathsFlowsToExecuteAsync;
30
30
  const node_fs_1 = require("node:fs");
31
31
  const path = __importStar(require("node:path"));
32
32
  const yaml = __importStar(require("yaml"));
@@ -98,7 +98,6 @@ async function findMaestroPathsFlowsToExecuteAsync({ workingDirectory, flowPath,
98
98
  })
99
99
  .map(({ path }) => path);
100
100
  }
101
- exports.findMaestroPathsFlowsToExecuteAsync = findMaestroPathsFlowsToExecuteAsync;
102
101
  async function findAndParseWorkspaceConfigAsync({ dirPath, workingDirectory, logger, }) {
103
102
  const configPaths = await (0, fast_glob_1.default)(['config.yaml', 'config.yml'], {
104
103
  cwd: dirPath,
@@ -1 +1 @@
1
- {"version":3,"file":"findMaestroPathsFlowsToExecuteAsync.js","sourceRoot":"","sources":["../../src/utils/findMaestroPathsFlowsToExecuteAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\n\nimport { bunyan } from '@expo/logger';\nimport * as yaml from 'yaml';\nimport { z } from 'zod';\nimport { asyncResult } from '@expo/results';\nimport fg from 'fast-glob';\n\nconst FlowConfigSchema = z.object({\n name: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\nconst WorkspaceConfigSchema = z.object({\n flows: z.array(z.string()).optional(),\n executionOrder: z.record(z.unknown()).optional(),\n includeTags: z.array(z.string()).optional(),\n excludeTags: z.array(z.string()).optional(),\n});\n\ntype FlowConfig = z.infer<typeof FlowConfigSchema>;\ntype WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;\n\nexport async function findMaestroPathsFlowsToExecuteAsync({\n workingDirectory,\n flowPath,\n includeTags: _includeTags,\n excludeTags: _excludeTags,\n logger,\n}: {\n workingDirectory: string;\n flowPath: string;\n includeTags: string[] | undefined;\n excludeTags: string[] | undefined;\n logger: bunyan;\n}): Promise<string[]> {\n const absoluteFlowPath = path.resolve(workingDirectory, flowPath);\n // If it's a file, just return it (no validation needed)\n const stat = await fs.stat(absoluteFlowPath);\n\n if (stat.isFile()) {\n logger.info(`Found a file: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n return [absoluteFlowPath];\n }\n\n // It's a directory - discover flow files\n logger.info(`Found a directory: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n\n // Check for workspace config\n logger.info(`Searching for workspace config...`);\n const workspaceConfig = await findAndParseWorkspaceConfigAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n logger,\n });\n logger.info(`Using workspace config: ${JSON.stringify(workspaceConfig)}`);\n\n if (workspaceConfig?.executionOrder) {\n logger.warn(`Execution order is not supported yet. Ignoring.`);\n }\n\n logger.info(`Searching for flow files...`);\n const { flows } = await findAndParseFlowFilesAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n workspaceConfig,\n logger,\n });\n\n if (flows.length === 0) {\n logger.info(\n `No valid flow files found in: ${path.relative(workingDirectory, absoluteFlowPath)}`\n );\n return [];\n }\n\n const includeTags = [...(_includeTags ?? []), ...(workspaceConfig?.includeTags ?? [])];\n const excludeTags = [...(_excludeTags ?? []), ...(workspaceConfig?.excludeTags ?? [])];\n\n if (includeTags.length === 0 && excludeTags.length === 0) {\n logger.info(`No tags provided, returning all flows.`);\n return flows.map(({ path }) => path);\n }\n\n logger.info(\n `Filtering flows by tags. Tags to include: ${JSON.stringify(includeTags)}. Tags to exclude: ${JSON.stringify(excludeTags) ?? 'none'}.`\n );\n return flows\n .filter(({ config, path: flowPath }) => {\n const shouldInclude = matchesTags({\n flowTags: config?.tags ?? [],\n includeTags,\n excludeTags,\n });\n\n logger.info(\n shouldInclude\n ? `- ${path.relative(workingDirectory, flowPath)} matches tags, including.`\n : `- ${path.relative(workingDirectory, flowPath)} does not match tags, excluding.`\n );\n\n return shouldInclude;\n })\n .map(({ path }) => path);\n}\n\nasync function findAndParseWorkspaceConfigAsync({\n dirPath,\n workingDirectory,\n logger,\n}: {\n dirPath: string;\n workingDirectory: string;\n logger: bunyan;\n}): Promise<WorkspaceConfig | null> {\n const configPaths = await fg(['config.yaml', 'config.yml'], {\n cwd: dirPath,\n absolute: true,\n });\n\n if (configPaths.length === 0) {\n logger.info(`No workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n }\n\n for (const configPath of configPaths) {\n try {\n const content = await fs.readFile(configPath, 'utf-8');\n const configDoc = yaml.parse(content);\n if (!configDoc) {\n logger.warn(\n `No content found in workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n logger.info(`Using workspace config from: ${path.relative(workingDirectory, configPath)}`);\n return WorkspaceConfigSchema.parse(configDoc);\n } catch (err) {\n logger.warn(\n { err },\n `Failed to parse workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n }\n\n logger.info(`No valid workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n}\n\nasync function findAndParseFlowFilesAsync({\n workingDirectory,\n dirPath,\n workspaceConfig,\n logger,\n}: {\n workingDirectory: string;\n dirPath: string;\n workspaceConfig: WorkspaceConfig | null;\n logger: bunyan;\n}): Promise<{ flows: { config: FlowConfig; path: string }[] }> {\n const flows: { config: FlowConfig; path: string }[] = [];\n\n // Determine flow patterns from config or use default\n const flowPatterns = workspaceConfig?.flows ?? ['*'];\n logger.info(`Using flow patterns: ${JSON.stringify(flowPatterns)}`);\n\n // Use fast-glob to find matching files\n const matchedFiles = await fg(flowPatterns, {\n cwd: dirPath,\n absolute: true,\n onlyFiles: true,\n ignore: ['*/config.yaml', '*/config.yml'], // Skip workspace config files\n });\n\n logger.info(`Found ${matchedFiles.length} potential flow files`);\n\n // Parse each matched file\n for (const filePath of matchedFiles) {\n // Skip non-YAML files\n const ext = path.extname(filePath);\n if (ext !== '.yaml' && ext !== '.yml') {\n logger.info(`Skipping non-YAML file: ${path.relative(workingDirectory, filePath)}`);\n continue;\n }\n\n const result = await asyncResult(parseFlowFile(filePath));\n if (result.ok) {\n logger.info(`Found flow file: ${path.relative(workingDirectory, filePath)}`);\n flows.push({ config: result.value, path: filePath });\n } else {\n logger.info(\n { err: result.reason },\n `Skipping flow file: ${path.relative(workingDirectory, filePath)}`\n );\n }\n }\n\n return { flows };\n}\n\nasync function parseFlowFile(filePath: string): Promise<FlowConfig> {\n const content = await fs.readFile(filePath, 'utf-8');\n const documents = yaml.parseAllDocuments(content);\n const configDoc = documents[0];\n if (!configDoc) {\n throw new Error(`No config section found in ${filePath}`);\n }\n return FlowConfigSchema.parse(configDoc.toJS());\n}\n\nfunction matchesTags({\n flowTags,\n includeTags,\n excludeTags,\n}: {\n flowTags: string[];\n includeTags: string[];\n excludeTags: string[];\n}): boolean {\n // Include logic: if includeTags is empty OR flow has any of the include tags\n const includeMatch =\n includeTags.length === 0 || includeTags.some((tag) => flowTags.includes(tag));\n\n // Exclude logic: if excludeTags is empty OR flow has none of the exclude tags\n const excludeMatch =\n excludeTags.length === 0 || !excludeTags.some((tag) => flowTags.includes(tag));\n\n return includeMatch && excludeMatch;\n}\n"]}
1
+ {"version":3,"file":"findMaestroPathsFlowsToExecuteAsync.js","sourceRoot":"","sources":["../../src/utils/findMaestroPathsFlowsToExecuteAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\n\nimport { bunyan } from '@expo/logger';\nimport * as yaml from 'yaml';\nimport { z } from 'zod';\nimport { asyncResult } from '@expo/results';\nimport fg from 'fast-glob';\n\nconst FlowConfigSchema = z.object({\n name: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\nconst WorkspaceConfigSchema = z.object({\n flows: z.array(z.string()).optional(),\n executionOrder: z.record(z.unknown()).optional(),\n includeTags: z.array(z.string()).optional(),\n excludeTags: z.array(z.string()).optional(),\n});\n\ntype FlowConfig = z.infer<typeof FlowConfigSchema>;\ntype WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;\n\nexport async function findMaestroPathsFlowsToExecuteAsync({\n workingDirectory,\n flowPath,\n includeTags: _includeTags,\n excludeTags: _excludeTags,\n logger,\n}: {\n workingDirectory: string;\n flowPath: string;\n includeTags: string[] | undefined;\n excludeTags: string[] | undefined;\n logger: bunyan;\n}): Promise<string[]> {\n const absoluteFlowPath = path.resolve(workingDirectory, flowPath);\n // If it's a file, just return it (no validation needed)\n const stat = await fs.stat(absoluteFlowPath);\n\n if (stat.isFile()) {\n logger.info(`Found a file: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n return [absoluteFlowPath];\n }\n\n // It's a directory - discover flow files\n logger.info(`Found a directory: ${path.relative(workingDirectory, absoluteFlowPath)}`);\n\n // Check for workspace config\n logger.info(`Searching for workspace config...`);\n const workspaceConfig = await findAndParseWorkspaceConfigAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n logger,\n });\n logger.info(`Using workspace config: ${JSON.stringify(workspaceConfig)}`);\n\n if (workspaceConfig?.executionOrder) {\n logger.warn(`Execution order is not supported yet. Ignoring.`);\n }\n\n logger.info(`Searching for flow files...`);\n const { flows } = await findAndParseFlowFilesAsync({\n dirPath: absoluteFlowPath,\n workingDirectory,\n workspaceConfig,\n logger,\n });\n\n if (flows.length === 0) {\n logger.info(\n `No valid flow files found in: ${path.relative(workingDirectory, absoluteFlowPath)}`\n );\n return [];\n }\n\n const includeTags = [...(_includeTags ?? []), ...(workspaceConfig?.includeTags ?? [])];\n const excludeTags = [...(_excludeTags ?? []), ...(workspaceConfig?.excludeTags ?? [])];\n\n if (includeTags.length === 0 && excludeTags.length === 0) {\n logger.info(`No tags provided, returning all flows.`);\n return flows.map(({ path }) => path);\n }\n\n logger.info(\n `Filtering flows by tags. Tags to include: ${JSON.stringify(includeTags)}. Tags to exclude: ${JSON.stringify(excludeTags) ?? 'none'}.`\n );\n return flows\n .filter(({ config, path: flowPath }) => {\n const shouldInclude = matchesTags({\n flowTags: config?.tags ?? [],\n includeTags,\n excludeTags,\n });\n\n logger.info(\n shouldInclude\n ? `- ${path.relative(workingDirectory, flowPath)} matches tags, including.`\n : `- ${path.relative(workingDirectory, flowPath)} does not match tags, excluding.`\n );\n\n return shouldInclude;\n })\n .map(({ path }) => path);\n}\n\nasync function findAndParseWorkspaceConfigAsync({\n dirPath,\n workingDirectory,\n logger,\n}: {\n dirPath: string;\n workingDirectory: string;\n logger: bunyan;\n}): Promise<WorkspaceConfig | null> {\n const configPaths = await fg(['config.yaml', 'config.yml'], {\n cwd: dirPath,\n absolute: true,\n });\n\n if (configPaths.length === 0) {\n logger.info(`No workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n }\n\n for (const configPath of configPaths) {\n try {\n const content = await fs.readFile(configPath, 'utf-8');\n const configDoc = yaml.parse(content);\n if (!configDoc) {\n logger.warn(\n `No content found in workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n logger.info(`Using workspace config from: ${path.relative(workingDirectory, configPath)}`);\n return WorkspaceConfigSchema.parse(configDoc);\n } catch (err) {\n logger.warn(\n { err },\n `Failed to parse workspace config: ${path.relative(workingDirectory, configPath)}`\n );\n continue;\n }\n }\n\n logger.info(`No valid workspace config found in: ${path.relative(workingDirectory, dirPath)}`);\n return null;\n}\n\nasync function findAndParseFlowFilesAsync({\n workingDirectory,\n dirPath,\n workspaceConfig,\n logger,\n}: {\n workingDirectory: string;\n dirPath: string;\n workspaceConfig: WorkspaceConfig | null;\n logger: bunyan;\n}): Promise<{ flows: { config: FlowConfig; path: string }[] }> {\n const flows: { config: FlowConfig; path: string }[] = [];\n\n // Determine flow patterns from config or use default\n const flowPatterns = workspaceConfig?.flows ?? ['*'];\n logger.info(`Using flow patterns: ${JSON.stringify(flowPatterns)}`);\n\n // Use fast-glob to find matching files\n const matchedFiles = await fg(flowPatterns, {\n cwd: dirPath,\n absolute: true,\n onlyFiles: true,\n ignore: ['*/config.yaml', '*/config.yml'], // Skip workspace config files\n });\n\n logger.info(`Found ${matchedFiles.length} potential flow files`);\n\n // Parse each matched file\n for (const filePath of matchedFiles) {\n // Skip non-YAML files\n const ext = path.extname(filePath);\n if (ext !== '.yaml' && ext !== '.yml') {\n logger.info(`Skipping non-YAML file: ${path.relative(workingDirectory, filePath)}`);\n continue;\n }\n\n const result = await asyncResult(parseFlowFile(filePath));\n if (result.ok) {\n logger.info(`Found flow file: ${path.relative(workingDirectory, filePath)}`);\n flows.push({ config: result.value, path: filePath });\n } else {\n logger.info(\n { err: result.reason },\n `Skipping flow file: ${path.relative(workingDirectory, filePath)}`\n );\n }\n }\n\n return { flows };\n}\n\nasync function parseFlowFile(filePath: string): Promise<FlowConfig> {\n const content = await fs.readFile(filePath, 'utf-8');\n const documents = yaml.parseAllDocuments(content);\n const configDoc = documents[0];\n if (!configDoc) {\n throw new Error(`No config section found in ${filePath}`);\n }\n return FlowConfigSchema.parse(configDoc.toJS());\n}\n\nfunction matchesTags({\n flowTags,\n includeTags,\n excludeTags,\n}: {\n flowTags: string[];\n includeTags: string[];\n excludeTags: string[];\n}): boolean {\n // Include logic: if includeTags is empty OR flow has any of the include tags\n const includeMatch =\n includeTags.length === 0 || includeTags.some((tag) => flowTags.includes(tag));\n\n // Exclude logic: if excludeTags is empty OR flow has none of the exclude tags\n const excludeMatch =\n excludeTags.length === 0 || !excludeTags.some((tag) => flowTags.includes(tag));\n\n return includeMatch && excludeMatch;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stringifyFingerprintDiff = void 0;
3
+ exports.stringifyFingerprintDiff = stringifyFingerprintDiff;
4
4
  function stringifyFingerprintDiff(fingerprintDiff) {
5
5
  return JSON.stringify(fingerprintDiff, (key, value) => {
6
6
  if (key === 'contents') {
@@ -15,5 +15,4 @@ function stringifyFingerprintDiff(fingerprintDiff) {
15
15
  return value;
16
16
  }, ' ');
17
17
  }
18
- exports.stringifyFingerprintDiff = stringifyFingerprintDiff;
19
18
  //# sourceMappingURL=fingerprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/utils/fingerprint.ts"],"names":[],"mappings":";;;AAAA,SAAgB,wBAAwB,CAAC,eAAyB;IAChE,OAAO,IAAI,CAAC,SAAS,CACnB,eAAe,EACf,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EACD,GAAG,CACJ,CAAC;AACJ,CAAC;AAhBD,4DAgBC","sourcesContent":["export function stringifyFingerprintDiff(fingerprintDiff: object[]): string {\n return JSON.stringify(\n fingerprintDiff,\n (key, value) => {\n if (key === 'contents') {\n try {\n const item = JSON.parse(value);\n return item;\n } catch {\n return value;\n }\n }\n return value;\n },\n ' '\n );\n}\n"]}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/utils/fingerprint.ts"],"names":[],"mappings":";;AAAA,4DAgBC;AAhBD,SAAgB,wBAAwB,CAAC,eAAyB;IAChE,OAAO,IAAI,CAAC,SAAS,CACnB,eAAe,EACf,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EACD,GAAG,CACJ,CAAC;AACJ,CAAC","sourcesContent":["export function stringifyFingerprintDiff(fingerprintDiff: object[]): string {\n return JSON.stringify(\n fingerprintDiff,\n (key, value) => {\n if (key === 'contents') {\n try {\n const item = JSON.parse(value);\n return item;\n } catch {\n return value;\n }\n }\n return value;\n },\n ' '\n );\n}\n"]}
@@ -1,3 +1,2 @@
1
- /// <reference types="bunyan" />
2
1
  import { bunyan } from '@expo/logger';
3
2
  export default function getExpoUpdatesPackageVersionIfInstalledAsync(reactNativeProjectDirectory: string, logger: bunyan): Promise<string | null>;
@@ -3,6 +3,7 @@ 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.default = getExpoUpdatesPackageVersionIfInstalledAsync;
6
7
  const fs_extra_1 = __importDefault(require("fs-extra"));
7
8
  const resolve_from_1 = __importDefault(require("resolve-from"));
8
9
  async function getExpoUpdatesPackageVersionIfInstalledAsync(reactNativeProjectDirectory, logger) {
@@ -15,5 +16,4 @@ async function getExpoUpdatesPackageVersionIfInstalledAsync(reactNativeProjectDi
15
16
  logger.debug(`Resolved expo-updates package version: ${versionOuter}`);
16
17
  return versionOuter;
17
18
  }
18
- exports.default = getExpoUpdatesPackageVersionIfInstalledAsync;
19
19
  //# sourceMappingURL=getExpoUpdatesPackageVersionIfInstalledAsync.js.map