@expo/build-tools 1.0.56 → 1.0.58

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 (85) hide show
  1. package/dist/android/credentials.js.map +1 -1
  2. package/dist/android/expoUpdates.js.map +1 -1
  3. package/dist/android/gradle.js.map +1 -1
  4. package/dist/android/gradleConfig.js.map +1 -1
  5. package/dist/buildErrors/buildErrorHandlers.js.map +1 -1
  6. package/dist/buildErrors/detectError.js +3 -2
  7. package/dist/buildErrors/detectError.js.map +1 -1
  8. package/dist/buildErrors/errors.types.d.ts +2 -1
  9. package/dist/buildErrors/errors.types.js.map +1 -1
  10. package/dist/buildErrors/userErrorHandlers.js +14 -0
  11. package/dist/buildErrors/userErrorHandlers.js.map +1 -1
  12. package/dist/builders/android.js.map +1 -1
  13. package/dist/builders/common.js.map +1 -1
  14. package/dist/builders/custom.js.map +1 -1
  15. package/dist/builders/ios.js +7 -2
  16. package/dist/builders/ios.js.map +1 -1
  17. package/dist/common/easBuildInternal.js.map +1 -1
  18. package/dist/common/installDependencies.js.map +1 -1
  19. package/dist/common/prebuild.js.map +1 -1
  20. package/dist/common/projectSources.js.map +1 -1
  21. package/dist/common/setup.js.map +1 -1
  22. package/dist/context.d.ts +15 -13
  23. package/dist/context.js +6 -15
  24. package/dist/context.js.map +1 -1
  25. package/dist/customBuildContext.d.ts +5 -2
  26. package/dist/customBuildContext.js +1 -1
  27. package/dist/customBuildContext.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +1 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/ios/configure.js +1 -0
  32. package/dist/ios/configure.js.map +1 -1
  33. package/dist/ios/credentials/distributionCertificate.js.map +1 -1
  34. package/dist/ios/credentials/keychain.js.map +1 -1
  35. package/dist/ios/credentials/manager.js.map +1 -1
  36. package/dist/ios/credentials/provisioningProfile.js.map +1 -1
  37. package/dist/ios/expoUpdates.js.map +1 -1
  38. package/dist/ios/fastfile.js.map +1 -1
  39. package/dist/ios/fastlane.js.map +1 -1
  40. package/dist/ios/gymfile.js.map +1 -1
  41. package/dist/ios/pod.js.map +1 -1
  42. package/dist/ios/resign.js.map +1 -1
  43. package/dist/ios/resolve.js.map +1 -1
  44. package/dist/ios/xcodeBuildLogs.js +8 -2
  45. package/dist/ios/xcodeBuildLogs.js.map +1 -1
  46. package/dist/ios/xcodeEnv.js.map +1 -1
  47. package/dist/ios/xcpretty.js.map +1 -1
  48. package/dist/steps/functions/configureAndroidVersion.js.map +1 -1
  49. package/dist/steps/functions/configureEASUpdateIfInstalled.js.map +1 -1
  50. package/dist/steps/functions/configureIosCredentials.js.map +1 -1
  51. package/dist/steps/functions/configureIosVersion.js.map +1 -1
  52. package/dist/steps/functions/findAndUploadBuildArtifacts.js +21 -4
  53. package/dist/steps/functions/findAndUploadBuildArtifacts.js.map +1 -1
  54. package/dist/steps/functions/generateGymfileFromTemplate.js.map +1 -1
  55. package/dist/steps/functions/injectAndroidCredentials.js.map +1 -1
  56. package/dist/steps/functions/installNodeModules.js.map +1 -1
  57. package/dist/steps/functions/prebuild.js.map +1 -1
  58. package/dist/steps/functions/resolveAppleTeamIdFromCredentials.js.map +1 -1
  59. package/dist/steps/functions/runFastlane.js.map +1 -1
  60. package/dist/steps/functions/uploadArtifact.js +14 -21
  61. package/dist/steps/functions/uploadArtifact.js.map +1 -1
  62. package/dist/steps/functions/useNpmToken.js.map +1 -1
  63. package/dist/steps/utils/android/expoUpdates.js.map +1 -1
  64. package/dist/steps/utils/android/gradle.js.map +1 -1
  65. package/dist/steps/utils/android/gradleConfig.js.map +1 -1
  66. package/dist/steps/utils/expoUpdates.js.map +1 -1
  67. package/dist/steps/utils/ios/configure.js.map +1 -1
  68. package/dist/steps/utils/ios/credentials/distributionCertificate.js.map +1 -1
  69. package/dist/steps/utils/ios/credentials/keychain.js.map +1 -1
  70. package/dist/steps/utils/ios/credentials/manager.js.map +1 -1
  71. package/dist/steps/utils/ios/credentials/provisioningProfile.js.map +1 -1
  72. package/dist/steps/utils/ios/expoUpdates.js.map +1 -1
  73. package/dist/steps/utils/ios/fastlane.js.map +1 -1
  74. package/dist/steps/utils/ios/resolve.js.map +1 -1
  75. package/dist/steps/utils/ios/xcpretty.js.map +1 -1
  76. package/dist/utils/appConfig.js.map +1 -1
  77. package/dist/utils/artifacts.js +15 -3
  78. package/dist/utils/artifacts.js.map +1 -1
  79. package/dist/utils/expoUpdates.js.map +1 -1
  80. package/dist/utils/hooks.js.map +1 -1
  81. package/dist/utils/npmrc.js.map +1 -1
  82. package/dist/utils/packageManager.js.map +1 -1
  83. package/dist/utils/processes.js.map +1 -1
  84. package/dist/utils/project.js.map +1 -1
  85. package/package.json +29 -29
@@ -1 +1 @@
1
- {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../../../src/steps/utils/ios/credentials/keychain.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'os';\nimport path from 'path';\n\nimport spawn from '@expo/turtle-spawn';\nimport { v4 as uuid } from 'uuid';\nimport { bunyan } from '@expo/logger';\n\nimport { runFastlane } from '../fastlane';\n\nexport default class Keychain {\n private readonly keychainPath: string;\n private readonly keychainPassword: string;\n private created = false;\n private destroyed = false;\n\n constructor() {\n this.keychainPath = path.join(os.tmpdir(), `turtle-v2-${uuid()}.keychain`);\n this.keychainPassword = uuid();\n }\n\n get data(): { path: string; password: string } {\n return {\n path: this.keychainPath,\n password: this.keychainPassword,\n };\n }\n\n public async create(logger: bunyan): Promise<void> {\n logger.debug(`Creating keychain - ${this.keychainPath}`);\n await runFastlane([\n 'run',\n 'create_keychain',\n `path:${this.keychainPath}`,\n `password:${this.keychainPassword}`,\n 'unlock:true',\n 'timeout:360000',\n ]);\n this.created = true;\n }\n\n public async importCertificate(\n logger: bunyan,\n certPath: string,\n certPassword: string\n ): Promise<void> {\n if (!this.created) {\n throw new Error('You must create a keychain first.');\n }\n\n logger.debug(`Importing certificate ${certPath} into keychain ${this.keychainPath}`);\n await runFastlane([\n 'run',\n 'import_certificate',\n `certificate_path:${certPath}`,\n `certificate_password:${certPassword}`,\n `keychain_path:${this.keychainPath}`,\n `keychain_password:${this.keychainPassword}`,\n ]);\n }\n\n public async ensureCertificateImported(teamId: string, fingerprint: string): Promise<void> {\n const identities = await this.findIdentitiesByTeamId(teamId);\n if (!identities.includes(fingerprint)) {\n throw new Error(\n `Distribution certificate with fingerprint ${fingerprint} hasn't been imported successfully`\n );\n }\n }\n\n public async destroy(logger: bunyan, keychainPath?: string): Promise<void> {\n if (!keychainPath && !this.created) {\n logger.warn(\"There is nothing to destroy, a keychain hasn't been created yet.\");\n return;\n }\n if (this.destroyed) {\n logger.warn('The keychain has been already destroyed');\n return;\n }\n const keychainToDeletePath = keychainPath ?? this.keychainPath;\n logger.info(`Destroying keychain - ${keychainToDeletePath}`);\n try {\n await runFastlane(['run', 'delete_keychain', `keychain_path:${keychainToDeletePath}`]);\n this.destroyed = true;\n } catch (err) {\n logger.error({ err }, 'Failed to delete the keychain\\n');\n throw err;\n }\n }\n\n public async cleanUpKeychains(logger: bunyan): Promise<void> {\n const { stdout } = await spawn('security', ['list-keychains'], { stdio: 'pipe' });\n const keychainList = (/\"(.*)\"/g.exec(stdout) ?? ([] as string[])).map((i) =>\n i.slice(1, i.length - 1)\n );\n const turtleKeychainList = keychainList.filter((keychain) =>\n /turtle-v2-[\\w-]+\\.keychain$/.exec(keychain)\n );\n for (const turtleKeychainPath of turtleKeychainList) {\n await this.destroy(logger, turtleKeychainPath);\n }\n }\n\n private async findIdentitiesByTeamId(teamId: string): Promise<string> {\n const { output } = await spawn(\n 'security',\n ['find-identity', '-v', '-s', `(${teamId})`, this.keychainPath],\n {\n stdio: 'pipe',\n }\n );\n return output.join('');\n }\n}\n"]}
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../../../src/steps/utils/ios/credentials/keychain.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'os';\nimport path from 'path';\n\nimport spawn from '@expo/turtle-spawn';\nimport { v4 as uuid } from 'uuid';\nimport { bunyan } from '@expo/logger';\n\nimport { runFastlane } from '../fastlane';\n\nexport default class Keychain {\n private readonly keychainPath: string;\n private readonly keychainPassword: string;\n private created = false;\n private destroyed = false;\n\n constructor() {\n this.keychainPath = path.join(os.tmpdir(), `turtle-v2-${uuid()}.keychain`);\n this.keychainPassword = uuid();\n }\n\n get data(): { path: string; password: string } {\n return {\n path: this.keychainPath,\n password: this.keychainPassword,\n };\n }\n\n public async create(logger: bunyan): Promise<void> {\n logger.debug(`Creating keychain - ${this.keychainPath}`);\n await runFastlane([\n 'run',\n 'create_keychain',\n `path:${this.keychainPath}`,\n `password:${this.keychainPassword}`,\n 'unlock:true',\n 'timeout:360000',\n ]);\n this.created = true;\n }\n\n public async importCertificate(\n logger: bunyan,\n certPath: string,\n certPassword: string\n ): Promise<void> {\n if (!this.created) {\n throw new Error('You must create a keychain first.');\n }\n\n logger.debug(`Importing certificate ${certPath} into keychain ${this.keychainPath}`);\n await runFastlane([\n 'run',\n 'import_certificate',\n `certificate_path:${certPath}`,\n `certificate_password:${certPassword}`,\n `keychain_path:${this.keychainPath}`,\n `keychain_password:${this.keychainPassword}`,\n ]);\n }\n\n public async ensureCertificateImported(teamId: string, fingerprint: string): Promise<void> {\n const identities = await this.findIdentitiesByTeamId(teamId);\n if (!identities.includes(fingerprint)) {\n throw new Error(\n `Distribution certificate with fingerprint ${fingerprint} hasn't been imported successfully`\n );\n }\n }\n\n public async destroy(logger: bunyan, keychainPath?: string): Promise<void> {\n if (!keychainPath && !this.created) {\n logger.warn(\"There is nothing to destroy, a keychain hasn't been created yet.\");\n return;\n }\n if (this.destroyed) {\n logger.warn('The keychain has been already destroyed');\n return;\n }\n const keychainToDeletePath = keychainPath ?? this.keychainPath;\n logger.info(`Destroying keychain - ${keychainToDeletePath}`);\n try {\n await runFastlane(['run', 'delete_keychain', `keychain_path:${keychainToDeletePath}`]);\n this.destroyed = true;\n } catch (err) {\n logger.error({ err }, 'Failed to delete the keychain\\n');\n throw err;\n }\n }\n\n public async cleanUpKeychains(logger: bunyan): Promise<void> {\n const { stdout } = await spawn('security', ['list-keychains'], { stdio: 'pipe' });\n const keychainList = (/\"(.*)\"/g.exec(stdout) ?? ([] as string[])).map((i) =>\n i.slice(1, i.length - 1)\n );\n const turtleKeychainList = keychainList.filter((keychain) =>\n /turtle-v2-[\\w-]+\\.keychain$/.exec(keychain)\n );\n for (const turtleKeychainPath of turtleKeychainList) {\n await this.destroy(logger, turtleKeychainPath);\n }\n }\n\n private async findIdentitiesByTeamId(teamId: string): Promise<string> {\n const { output } = await spawn(\n 'security',\n ['find-identity', '-v', '-s', `(${teamId})`, this.keychainPath],\n {\n stdio: 'pipe',\n }\n );\n return output.join('');\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../../src/steps/utils/ios/credentials/manager.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport os from 'os';\nimport path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport { orderBy } from 'lodash';\nimport { v4 as uuid } from 'uuid';\nimport { bunyan } from '@expo/logger';\n\nimport * as distributionCertificateUtils from './distributionCertificate';\nimport Keychain from './keychain';\nimport ProvisioningProfile, {\n DistributionType,\n ProvisioningProfileData,\n} from './provisioningProfile';\n\nexport interface Credentials {\n applicationTargetProvisioningProfile: ProvisioningProfile;\n keychainPath: string;\n targetProvisioningProfiles: TargetProvisioningProfiles;\n distributionType: DistributionType;\n teamId: string;\n}\n\nexport type TargetProvisioningProfiles = Record<string, ProvisioningProfileData>;\n\nexport default class IosCredentialsManager {\n private keychain?: Keychain;\n private readonly provisioningProfiles: ProvisioningProfile[] = [];\n private cleanedUp = false;\n\n constructor(private readonly buildCredentials: Ios.BuildCredentials) {}\n\n public async prepare(logger: bunyan): Promise<Credentials> {\n logger.info('Preparing credentials');\n\n logger.info('Creating keychain');\n this.keychain = new Keychain();\n await this.keychain.create(logger);\n\n const targets = Object.keys(this.buildCredentials);\n const targetProvisioningProfiles: TargetProvisioningProfiles = {};\n for (const target of targets) {\n const provisioningProfile = await this.prepareTargetCredentials(\n logger,\n target,\n this.buildCredentials[target]\n );\n this.provisioningProfiles.push(provisioningProfile);\n targetProvisioningProfiles[target] = provisioningProfile.data;\n }\n\n const applicationTargetProvisioningProfile = this.getApplicationTargetProvisioningProfile();\n\n // TODO: ensure that all dist types and team ids in the array are the same\n const { distributionType, teamId } = applicationTargetProvisioningProfile.data;\n\n return {\n applicationTargetProvisioningProfile,\n keychainPath: this.keychain.data.path,\n targetProvisioningProfiles,\n distributionType,\n teamId,\n };\n }\n\n public async cleanUp(logger: bunyan): Promise<void> {\n if (this.cleanedUp || (!this.keychain && this.provisioningProfiles.length === 0)) {\n return;\n }\n\n if (this.keychain) {\n await this.keychain.destroy(logger);\n }\n if (this.provisioningProfiles) {\n for (const provisioningProfile of this.provisioningProfiles) {\n await provisioningProfile.destroy(logger);\n }\n }\n this.cleanedUp = true;\n }\n\n private async prepareTargetCredentials(\n logger: bunyan,\n target: string,\n targetCredentials: Ios.TargetCredentials\n ): Promise<ProvisioningProfile> {\n try {\n assert(this.keychain, 'Keychain should be initialized');\n\n logger.info(`Preparing credentials for target '${target}'`);\n const distCertPath = path.join(os.tmpdir(), `${uuid()}.p12`);\n\n logger.info('Getting distribution certificate fingerprint and common name');\n const certificateFingerprint = distributionCertificateUtils.getFingerprint(\n targetCredentials.distributionCertificate\n );\n const certificateCommonName = distributionCertificateUtils.getCommonName(\n targetCredentials.distributionCertificate\n );\n logger.info(\n `Fingerprint = \"${certificateFingerprint}\", common name = ${certificateCommonName}`\n );\n\n logger.info(`Writing distribution certificate to ${distCertPath}`);\n await fs.writeFile(\n distCertPath,\n Buffer.from(targetCredentials.distributionCertificate.dataBase64, 'base64')\n );\n\n logger.info('Importing distribution certificate into the keychain');\n await this.keychain.importCertificate(\n logger,\n distCertPath,\n targetCredentials.distributionCertificate.password\n );\n\n logger.info('Initializing provisioning profile');\n const provisioningProfile = new ProvisioningProfile(\n Buffer.from(targetCredentials.provisioningProfileBase64, 'base64'),\n this.keychain.data.path,\n target,\n certificateCommonName\n );\n await provisioningProfile.init(logger);\n\n logger.info('Validating whether distribution certificate has been imported successfully');\n await this.keychain.ensureCertificateImported(\n provisioningProfile.data.teamId,\n certificateFingerprint\n );\n\n logger.info('Verifying whether the distribution certificate and provisioning profile match');\n provisioningProfile.verifyCertificate(certificateFingerprint);\n\n return provisioningProfile;\n } catch (err) {\n await this.cleanUp(logger);\n throw err;\n }\n }\n\n private getApplicationTargetProvisioningProfile(): ProvisioningProfile {\n // sorting works because bundle ids share common prefix\n const sorted = orderBy(this.provisioningProfiles, 'data.bundleIdentifier', 'asc');\n return sorted[0];\n }\n}\n"]}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../../src/steps/utils/ios/credentials/manager.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport os from 'os';\nimport path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport { orderBy } from 'lodash';\nimport { v4 as uuid } from 'uuid';\nimport { bunyan } from '@expo/logger';\n\nimport * as distributionCertificateUtils from './distributionCertificate';\nimport Keychain from './keychain';\nimport ProvisioningProfile, {\n DistributionType,\n ProvisioningProfileData,\n} from './provisioningProfile';\n\nexport interface Credentials {\n applicationTargetProvisioningProfile: ProvisioningProfile;\n keychainPath: string;\n targetProvisioningProfiles: TargetProvisioningProfiles;\n distributionType: DistributionType;\n teamId: string;\n}\n\nexport type TargetProvisioningProfiles = Record<string, ProvisioningProfileData>;\n\nexport default class IosCredentialsManager {\n private keychain?: Keychain;\n private readonly provisioningProfiles: ProvisioningProfile[] = [];\n private cleanedUp = false;\n\n constructor(private readonly buildCredentials: Ios.BuildCredentials) {}\n\n public async prepare(logger: bunyan): Promise<Credentials> {\n logger.info('Preparing credentials');\n\n logger.info('Creating keychain');\n this.keychain = new Keychain();\n await this.keychain.create(logger);\n\n const targets = Object.keys(this.buildCredentials);\n const targetProvisioningProfiles: TargetProvisioningProfiles = {};\n for (const target of targets) {\n const provisioningProfile = await this.prepareTargetCredentials(\n logger,\n target,\n this.buildCredentials[target]\n );\n this.provisioningProfiles.push(provisioningProfile);\n targetProvisioningProfiles[target] = provisioningProfile.data;\n }\n\n const applicationTargetProvisioningProfile = this.getApplicationTargetProvisioningProfile();\n\n // TODO: ensure that all dist types and team ids in the array are the same\n const { distributionType, teamId } = applicationTargetProvisioningProfile.data;\n\n return {\n applicationTargetProvisioningProfile,\n keychainPath: this.keychain.data.path,\n targetProvisioningProfiles,\n distributionType,\n teamId,\n };\n }\n\n public async cleanUp(logger: bunyan): Promise<void> {\n if (this.cleanedUp || (!this.keychain && this.provisioningProfiles.length === 0)) {\n return;\n }\n\n if (this.keychain) {\n await this.keychain.destroy(logger);\n }\n if (this.provisioningProfiles) {\n for (const provisioningProfile of this.provisioningProfiles) {\n await provisioningProfile.destroy(logger);\n }\n }\n this.cleanedUp = true;\n }\n\n private async prepareTargetCredentials(\n logger: bunyan,\n target: string,\n targetCredentials: Ios.TargetCredentials\n ): Promise<ProvisioningProfile> {\n try {\n assert(this.keychain, 'Keychain should be initialized');\n\n logger.info(`Preparing credentials for target '${target}'`);\n const distCertPath = path.join(os.tmpdir(), `${uuid()}.p12`);\n\n logger.info('Getting distribution certificate fingerprint and common name');\n const certificateFingerprint = distributionCertificateUtils.getFingerprint(\n targetCredentials.distributionCertificate\n );\n const certificateCommonName = distributionCertificateUtils.getCommonName(\n targetCredentials.distributionCertificate\n );\n logger.info(\n `Fingerprint = \"${certificateFingerprint}\", common name = ${certificateCommonName}`\n );\n\n logger.info(`Writing distribution certificate to ${distCertPath}`);\n await fs.writeFile(\n distCertPath,\n Buffer.from(targetCredentials.distributionCertificate.dataBase64, 'base64')\n );\n\n logger.info('Importing distribution certificate into the keychain');\n await this.keychain.importCertificate(\n logger,\n distCertPath,\n targetCredentials.distributionCertificate.password\n );\n\n logger.info('Initializing provisioning profile');\n const provisioningProfile = new ProvisioningProfile(\n Buffer.from(targetCredentials.provisioningProfileBase64, 'base64'),\n this.keychain.data.path,\n target,\n certificateCommonName\n );\n await provisioningProfile.init(logger);\n\n logger.info('Validating whether distribution certificate has been imported successfully');\n await this.keychain.ensureCertificateImported(\n provisioningProfile.data.teamId,\n certificateFingerprint\n );\n\n logger.info('Verifying whether the distribution certificate and provisioning profile match');\n provisioningProfile.verifyCertificate(certificateFingerprint);\n\n return provisioningProfile;\n } catch (err) {\n await this.cleanUp(logger);\n throw err;\n }\n }\n\n private getApplicationTargetProvisioningProfile(): ProvisioningProfile {\n // sorting works because bundle ids share common prefix\n const sorted = orderBy(this.provisioningProfiles, 'data.bundleIdentifier', 'asc');\n return sorted[0];\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provisioningProfile.js","sourceRoot":"","sources":["../../../../../src/steps/utils/ios/credentials/provisioningProfile.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport os from 'os';\nimport path from 'path';\n\nimport { errors } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport plist from 'plist';\nimport { v4 as uuid } from 'uuid';\nimport { bunyan } from '@expo/logger';\n\nexport interface ProvisioningProfileData {\n path: string;\n target: string;\n bundleIdentifier: string;\n teamId: string;\n uuid: string;\n name: string;\n developerCertificate: Buffer;\n certificateCommonName: string;\n distributionType: DistributionType;\n}\n\nexport enum DistributionType {\n AD_HOC = 'ad-hoc',\n APP_STORE = 'app-store',\n ENTERPRISE = 'enterprise',\n}\n\nconst PROVISIONING_PROFILES_DIRECTORY = path.join(\n os.homedir(),\n 'Library/MobileDevice/Provisioning Profiles'\n);\n\nexport default class ProvisioningProfile {\n get data(): ProvisioningProfileData {\n if (!this.profileData) {\n throw new Error('You must init the profile first!');\n } else {\n return this.profileData;\n }\n }\n\n private readonly profilePath: string;\n private profileData?: ProvisioningProfileData;\n\n constructor(\n private readonly profile: Buffer,\n private readonly keychainPath: string,\n private readonly target: string,\n private readonly certificateCommonName: string\n ) {\n this.profilePath = path.join(PROVISIONING_PROFILES_DIRECTORY, `${uuid()}.mobileprovision`);\n }\n\n public async init(logger: bunyan): Promise<void> {\n logger.debug(`Making sure ${PROVISIONING_PROFILES_DIRECTORY} exits`);\n await fs.ensureDir(PROVISIONING_PROFILES_DIRECTORY);\n\n logger.debug(`Writing provisioning profile to ${this.profilePath}`);\n await fs.writeFile(this.profilePath, this.profile);\n\n logger.debug('Loading provisioning profile');\n await this.load();\n }\n\n public async destroy(logger: bunyan): Promise<void> {\n if (!this.profilePath) {\n logger.warn(\"There is nothing to destroy, a provisioning profile hasn't been created yet.\");\n return;\n }\n logger.info('Removing provisioning profile');\n await fs.remove(this.profilePath);\n }\n\n public verifyCertificate(fingerprint: string): void {\n const devCertFingerprint = this.genDerCertFingerprint();\n if (devCertFingerprint !== fingerprint) {\n throw new errors.CredentialsDistCertMismatchError(\n `Provisioning profile and distribution certificate don't match.\nProfile's certificate fingerprint = ${devCertFingerprint}, distribution certificate fingerprint = ${fingerprint}`\n );\n }\n }\n\n private async load(): Promise<void> {\n let result;\n try {\n result = await spawn(\n 'security',\n ['cms', '-D', '-k', this.keychainPath, '-i', this.profilePath],\n {\n stdio: 'pipe',\n }\n );\n } catch (err: any) {\n throw new Error(err.stderr.trim());\n }\n const { output } = result;\n\n const plistRaw = output.join('');\n let plistData;\n try {\n plistData = plist.parse(plistRaw) as plist.PlistObject;\n } catch (error: any) {\n throw new Error(`Error when parsing plist: ${error.message}`);\n }\n\n const applicationIdentifier = (plistData.Entitlements as plist.PlistObject)[\n 'application-identifier'\n ] as string;\n const bundleIdentifier = applicationIdentifier.replace(/^.+?\\./, '');\n\n this.profileData = {\n path: this.profilePath,\n target: this.target,\n bundleIdentifier,\n teamId: (plistData.TeamIdentifier as string[])[0],\n uuid: plistData.UUID as string,\n name: plistData.Name as string,\n developerCertificate: Buffer.from((plistData.DeveloperCertificates as string[])[0], 'base64'),\n certificateCommonName: this.certificateCommonName,\n distributionType: this.resolveDistributionType(plistData),\n };\n }\n\n private resolveDistributionType(plistData: plist.PlistObject): DistributionType {\n if (plistData.ProvisionsAllDevices) {\n return DistributionType.ENTERPRISE;\n } else if (plistData.ProvisionedDevices) {\n return DistributionType.AD_HOC;\n } else {\n return DistributionType.APP_STORE;\n }\n }\n\n private genDerCertFingerprint(): string {\n return crypto\n .createHash('sha1')\n .update(this.data.developerCertificate)\n .digest('hex')\n .toUpperCase();\n }\n}\n"]}
1
+ {"version":3,"file":"provisioningProfile.js","sourceRoot":"","sources":["../../../../../src/steps/utils/ios/credentials/provisioningProfile.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport os from 'os';\nimport path from 'path';\n\nimport { errors } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport plist from 'plist';\nimport { v4 as uuid } from 'uuid';\nimport { bunyan } from '@expo/logger';\n\nexport interface ProvisioningProfileData {\n path: string;\n target: string;\n bundleIdentifier: string;\n teamId: string;\n uuid: string;\n name: string;\n developerCertificate: Buffer;\n certificateCommonName: string;\n distributionType: DistributionType;\n}\n\nexport enum DistributionType {\n AD_HOC = 'ad-hoc',\n APP_STORE = 'app-store',\n ENTERPRISE = 'enterprise',\n}\n\nconst PROVISIONING_PROFILES_DIRECTORY = path.join(\n os.homedir(),\n 'Library/MobileDevice/Provisioning Profiles'\n);\n\nexport default class ProvisioningProfile {\n get data(): ProvisioningProfileData {\n if (!this.profileData) {\n throw new Error('You must init the profile first!');\n } else {\n return this.profileData;\n }\n }\n\n private readonly profilePath: string;\n private profileData?: ProvisioningProfileData;\n\n constructor(\n private readonly profile: Buffer,\n private readonly keychainPath: string,\n private readonly target: string,\n private readonly certificateCommonName: string\n ) {\n this.profilePath = path.join(PROVISIONING_PROFILES_DIRECTORY, `${uuid()}.mobileprovision`);\n }\n\n public async init(logger: bunyan): Promise<void> {\n logger.debug(`Making sure ${PROVISIONING_PROFILES_DIRECTORY} exits`);\n await fs.ensureDir(PROVISIONING_PROFILES_DIRECTORY);\n\n logger.debug(`Writing provisioning profile to ${this.profilePath}`);\n await fs.writeFile(this.profilePath, this.profile);\n\n logger.debug('Loading provisioning profile');\n await this.load();\n }\n\n public async destroy(logger: bunyan): Promise<void> {\n if (!this.profilePath) {\n logger.warn(\"There is nothing to destroy, a provisioning profile hasn't been created yet.\");\n return;\n }\n logger.info('Removing provisioning profile');\n await fs.remove(this.profilePath);\n }\n\n public verifyCertificate(fingerprint: string): void {\n const devCertFingerprint = this.genDerCertFingerprint();\n if (devCertFingerprint !== fingerprint) {\n throw new errors.CredentialsDistCertMismatchError(\n `Provisioning profile and distribution certificate don't match.\nProfile's certificate fingerprint = ${devCertFingerprint}, distribution certificate fingerprint = ${fingerprint}`\n );\n }\n }\n\n private async load(): Promise<void> {\n let result;\n try {\n result = await spawn(\n 'security',\n ['cms', '-D', '-k', this.keychainPath, '-i', this.profilePath],\n {\n stdio: 'pipe',\n }\n );\n } catch (err: any) {\n throw new Error(err.stderr.trim());\n }\n const { output } = result;\n\n const plistRaw = output.join('');\n let plistData;\n try {\n plistData = plist.parse(plistRaw) as plist.PlistObject;\n } catch (error: any) {\n throw new Error(`Error when parsing plist: ${error.message}`);\n }\n\n const applicationIdentifier = (plistData.Entitlements as plist.PlistObject)[\n 'application-identifier'\n ] as string;\n const bundleIdentifier = applicationIdentifier.replace(/^.+?\\./, '');\n\n this.profileData = {\n path: this.profilePath,\n target: this.target,\n bundleIdentifier,\n teamId: (plistData.TeamIdentifier as string[])[0],\n uuid: plistData.UUID as string,\n name: plistData.Name as string,\n developerCertificate: Buffer.from((plistData.DeveloperCertificates as string[])[0], 'base64'),\n certificateCommonName: this.certificateCommonName,\n distributionType: this.resolveDistributionType(plistData),\n };\n }\n\n private resolveDistributionType(plistData: plist.PlistObject): DistributionType {\n if (plistData.ProvisionsAllDevices) {\n return DistributionType.ENTERPRISE;\n } else if (plistData.ProvisionedDevices) {\n return DistributionType.AD_HOC;\n } else {\n return DistributionType.APP_STORE;\n }\n }\n\n private genDerCertFingerprint(): string {\n return crypto\n .createHash('sha1')\n .update(this.data.developerCertificate)\n .digest('hex')\n .toUpperCase();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/expoUpdates.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOSConfig } from '@expo/config-plugins';\nimport fs from 'fs-extra';\nimport plist from '@expo/plist';\n\nexport enum IosMetadataName {\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'EXUpdatesRequestHeaders',\n RELEASE_CHANNEL = 'EXUpdatesReleaseChannel',\n RUNTIME_VERSION = 'EXUpdatesRuntimeVersion',\n}\n\nexport async function iosSetChannelNativelyAsync(\n channel: string,\n workingDirectory: string\n): Promise<void> {\n const expoPlistPath = IOSConfig.Paths.getExpoPlistPath(workingDirectory);\n\n if (!(await fs.pathExists(expoPlistPath))) {\n throw new Error(`${expoPlistPath} does not exist`);\n }\n\n const expoPlistContents = await fs.readFile(expoPlistPath, 'utf8');\n const items: Record<string, string | Record<string, string>> = plist.parse(expoPlistContents);\n items[IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY] = {\n ...((items[IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY] as Record<\n string,\n string\n >) ?? {}),\n 'expo-channel-name': channel,\n };\n const updatedExpoPlistContents = plist.build(items);\n\n await fs.writeFile(expoPlistPath, updatedExpoPlistContents);\n}\n\nexport async function iosSetRuntimeVersionNativelyAsync(\n runtimeVersion: string,\n workingDirectory: string\n): Promise<void> {\n const expoPlistPath = IOSConfig.Paths.getExpoPlistPath(workingDirectory);\n\n if (!(await fs.pathExists(expoPlistPath))) {\n throw new Error(`${expoPlistPath} does not exist`);\n }\n\n const expoPlistContents = await fs.readFile(expoPlistPath, 'utf8');\n const items = plist.parse(expoPlistContents);\n items[IosMetadataName.RUNTIME_VERSION] = runtimeVersion;\n const updatedExpoPlistContents = plist.build(items);\n\n await fs.writeFile(expoPlistPath, updatedExpoPlistContents);\n}\n\nexport async function iosGetNativelyDefinedChannelAsync(\n workingDirectory: string\n): Promise<string | null> {\n const expoPlistPath = IOSConfig.Paths.getExpoPlistPath(workingDirectory);\n\n if (!(await fs.pathExists(expoPlistPath))) {\n return null;\n }\n\n const expoPlistContents = await fs.readFile(expoPlistPath, 'utf8');\n try {\n const items: Record<string, string | Record<string, string>> = plist.parse(expoPlistContents);\n const updatesRequestHeaders = (items[\n IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY\n ] ?? {}) as Record<string, string>;\n return updatesRequestHeaders['expo-channel-name'] ?? null;\n } catch (err: any) {\n throw new Error(\n `Failed to parse ${IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY} from Expo.plist: ${err.message}`\n );\n }\n}\n"]}
1
+ {"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/expoUpdates.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOSConfig } from '@expo/config-plugins';\nimport fs from 'fs-extra';\nimport plist from '@expo/plist';\n\nexport enum IosMetadataName {\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'EXUpdatesRequestHeaders',\n RELEASE_CHANNEL = 'EXUpdatesReleaseChannel',\n RUNTIME_VERSION = 'EXUpdatesRuntimeVersion',\n}\n\nexport async function iosSetChannelNativelyAsync(\n channel: string,\n workingDirectory: string\n): Promise<void> {\n const expoPlistPath = IOSConfig.Paths.getExpoPlistPath(workingDirectory);\n\n if (!(await fs.pathExists(expoPlistPath))) {\n throw new Error(`${expoPlistPath} does not exist`);\n }\n\n const expoPlistContents = await fs.readFile(expoPlistPath, 'utf8');\n const items: Record<string, string | Record<string, string>> = plist.parse(expoPlistContents);\n items[IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY] = {\n ...((items[IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY] as Record<\n string,\n string\n >) ?? {}),\n 'expo-channel-name': channel,\n };\n const updatedExpoPlistContents = plist.build(items);\n\n await fs.writeFile(expoPlistPath, updatedExpoPlistContents);\n}\n\nexport async function iosSetRuntimeVersionNativelyAsync(\n runtimeVersion: string,\n workingDirectory: string\n): Promise<void> {\n const expoPlistPath = IOSConfig.Paths.getExpoPlistPath(workingDirectory);\n\n if (!(await fs.pathExists(expoPlistPath))) {\n throw new Error(`${expoPlistPath} does not exist`);\n }\n\n const expoPlistContents = await fs.readFile(expoPlistPath, 'utf8');\n const items = plist.parse(expoPlistContents);\n items[IosMetadataName.RUNTIME_VERSION] = runtimeVersion;\n const updatedExpoPlistContents = plist.build(items);\n\n await fs.writeFile(expoPlistPath, updatedExpoPlistContents);\n}\n\nexport async function iosGetNativelyDefinedChannelAsync(\n workingDirectory: string\n): Promise<string | null> {\n const expoPlistPath = IOSConfig.Paths.getExpoPlistPath(workingDirectory);\n\n if (!(await fs.pathExists(expoPlistPath))) {\n return null;\n }\n\n const expoPlistContents = await fs.readFile(expoPlistPath, 'utf8');\n try {\n const items: Record<string, string | Record<string, string>> = plist.parse(expoPlistContents);\n const updatesRequestHeaders = (items[\n IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY\n ] ?? {}) as Record<string, string>;\n return updatesRequestHeaders['expo-channel-name'] ?? null;\n } catch (err: any) {\n throw new Error(\n `Failed to parse ${IosMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY} from Expo.plist: ${err.message}`\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/fastlane.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAIxB,sEAAwD;AAExD,yCAA8C;AAEvC,KAAK,UAAU,cAAc,CAAC,EACnC,UAAU,EACV,MAAM,EACN,kBAAkB,EAClB,GAAG,GAMJ;IACC,MAAM,WAAW,GAAG,IAAI,2BAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7D,KAAK,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACnD,IAAI;QACF,MAAM,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE;YACzB,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;YACjC,MAAM;YACN,GAAG;SACJ,CAAC,CAAC;KACJ;YAAS;QACR,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;KAC3B;AACH,CAAC;AAtBD,wCAsBC;AAEM,KAAK,UAAU,WAAW,CAC/B,YAAsB,EACtB,EACE,MAAM,EACN,GAAG,EACH,GAAG,MAKD,EAAE;IAEN,MAAM,eAAe,GAAG;QACtB,uBAAuB,EAAE,GAAG;QAC5B,0BAA0B,EAAE,GAAG;QAC/B,0BAA0B,EAAE,MAAM;QAClC,uBAAuB,EAAE,MAAM;QAC/B,MAAM,EAAE,aAAa;QACrB,GAAG,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,OAAO,CAAC,GAAG,CAAC;KACxB,CAAC;IACF,OAAO,MAAM,IAAA,sBAAK,EAAC,UAAU,EAAE,YAAY,EAAE;QAC3C,GAAG,EAAE,eAAe;QACpB,MAAM;QACN,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAzBD,kCAyBC","sourcesContent":["import path from 'path';\n\nimport { bunyan } from '@expo/logger';\nimport { Env } from '@expo/eas-build-job';\nimport spawn, { SpawnResult } from '@expo/turtle-spawn';\n\nimport { XcodeBuildLogger } from './xcpretty';\n\nexport async function runFastlaneGym({\n workingDir,\n logger,\n buildLogsDirectory,\n env,\n}: {\n workingDir: string;\n logger: bunyan;\n buildLogsDirectory: string;\n env: Env;\n}): Promise<void> {\n const buildLogger = new XcodeBuildLogger(logger, workingDir);\n void buildLogger.watchLogFiles(buildLogsDirectory);\n try {\n await runFastlane(['gym'], {\n cwd: path.join(workingDir, 'ios'),\n logger,\n env,\n });\n } finally {\n await buildLogger.flush();\n }\n}\n\nexport async function runFastlane(\n fastlaneArgs: string[],\n {\n logger,\n env,\n cwd,\n }: {\n logger?: bunyan;\n env?: Record<string, string>;\n cwd?: string;\n } = {}\n): Promise<SpawnResult> {\n const fastlaneEnvVars = {\n FASTLANE_DISABLE_COLORS: '1',\n FASTLANE_SKIP_UPDATE_CHECK: '1',\n SKIP_SLOW_FASTLANE_WARNING: 'true',\n FASTLANE_HIDE_TIMESTAMP: 'true',\n LC_ALL: 'en_US.UTF-8',\n ...(env ?? process.env),\n };\n return await spawn('fastlane', fastlaneArgs, {\n env: fastlaneEnvVars,\n logger,\n cwd,\n });\n}\n"]}
1
+ {"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/fastlane.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAIxB,sEAAwD;AAExD,yCAA8C;AAEvC,KAAK,UAAU,cAAc,CAAC,EACnC,UAAU,EACV,MAAM,EACN,kBAAkB,EAClB,GAAG,GAMJ;IACC,MAAM,WAAW,GAAG,IAAI,2BAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7D,KAAK,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE;YACzB,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;YACjC,MAAM;YACN,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAtBD,wCAsBC;AAEM,KAAK,UAAU,WAAW,CAC/B,YAAsB,EACtB,EACE,MAAM,EACN,GAAG,EACH,GAAG,MAKD,EAAE;IAEN,MAAM,eAAe,GAAG;QACtB,uBAAuB,EAAE,GAAG;QAC5B,0BAA0B,EAAE,GAAG;QAC/B,0BAA0B,EAAE,MAAM;QAClC,uBAAuB,EAAE,MAAM;QAC/B,MAAM,EAAE,aAAa;QACrB,GAAG,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,OAAO,CAAC,GAAG,CAAC;KACxB,CAAC;IACF,OAAO,MAAM,IAAA,sBAAK,EAAC,UAAU,EAAE,YAAY,EAAE;QAC3C,GAAG,EAAE,eAAe;QACpB,MAAM;QACN,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAzBD,kCAyBC","sourcesContent":["import path from 'path';\n\nimport { bunyan } from '@expo/logger';\nimport { Env } from '@expo/eas-build-job';\nimport spawn, { SpawnResult } from '@expo/turtle-spawn';\n\nimport { XcodeBuildLogger } from './xcpretty';\n\nexport async function runFastlaneGym({\n workingDir,\n logger,\n buildLogsDirectory,\n env,\n}: {\n workingDir: string;\n logger: bunyan;\n buildLogsDirectory: string;\n env: Env;\n}): Promise<void> {\n const buildLogger = new XcodeBuildLogger(logger, workingDir);\n void buildLogger.watchLogFiles(buildLogsDirectory);\n try {\n await runFastlane(['gym'], {\n cwd: path.join(workingDir, 'ios'),\n logger,\n env,\n });\n } finally {\n await buildLogger.flush();\n }\n}\n\nexport async function runFastlane(\n fastlaneArgs: string[],\n {\n logger,\n env,\n cwd,\n }: {\n logger?: bunyan;\n env?: Record<string, string>;\n cwd?: string;\n } = {}\n): Promise<SpawnResult> {\n const fastlaneEnvVars = {\n FASTLANE_DISABLE_COLORS: '1',\n FASTLANE_SKIP_UPDATE_CHECK: '1',\n SKIP_SLOW_FASTLANE_WARNING: 'true',\n FASTLANE_HIDE_TIMESTAMP: 'true',\n LC_ALL: 'en_US.UTF-8',\n ...(env ?? process.env),\n };\n return await spawn('fastlane', fastlaneArgs, {\n env: fastlaneEnvVars,\n logger,\n cwd,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/resolve.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAG5B,yDAAiD;AAEjD,SAAgB,aAAa,CAAC,UAAkB,EAAE,GAAY,EAAE,MAAe;IAC7E,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC;KACf;IACD,IAAI,GAAG,CAAC,MAAM,EAAE;QACd,OAAO,GAAG,CAAC,MAAM,CAAC;KACnB;IACD,MAAM,OAAO,GAAG,0BAAS,CAAC,WAAW,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAA,gBAAM,EAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,gDAAgD,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAVD,sCAUC;AAED,SAAgB,yBAAyB,CAAC,GAAY,EAAE,kBAA2B;IACjF,IAAI,kBAAkB,EAAE;QACtB,OAAO,kBAAkB,CAAC;KAC3B;SAAM,IAAI,GAAG,CAAC,kBAAkB,EAAE;QACjC,OAAO,GAAG,CAAC,kBAAkB,CAAC;KAC/B;SAAM,IAAI,GAAG,CAAC,iBAAiB,EAAE;QAChC,OAAO,OAAO,CAAC;KAChB;SAAM;QACL,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAVD,8DAUC","sourcesContent":["import assert from 'assert';\n\nimport { Ios } from '@expo/eas-build-job';\nimport { IOSConfig } from '@expo/config-plugins';\n\nexport function resolveScheme(workingDir: string, job: Ios.Job, scheme?: string): string {\n if (scheme) {\n return scheme;\n }\n if (job.scheme) {\n return job.scheme;\n }\n const schemes = IOSConfig.BuildScheme.getSchemesFromXcodeproj(workingDir);\n assert(schemes.length === 1, 'Ejected project should have exactly one scheme');\n return schemes[0];\n}\n\nexport function resolveBuildConfiguration(job: Ios.Job, buildConfiguration?: string): string {\n if (buildConfiguration) {\n return buildConfiguration;\n } else if (job.buildConfiguration) {\n return job.buildConfiguration;\n } else if (job.developmentClient) {\n return 'Debug';\n } else {\n return 'Release';\n }\n}\n"]}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/resolve.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAG5B,yDAAiD;AAEjD,SAAgB,aAAa,CAAC,UAAkB,EAAE,GAAY,EAAE,MAAe;IAC7E,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,0BAAS,CAAC,WAAW,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAA,gBAAM,EAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,gDAAgD,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAVD,sCAUC;AAED,SAAgB,yBAAyB,CAAC,GAAY,EAAE,kBAA2B;IACjF,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;SAAM,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,kBAAkB,CAAC;IAChC,CAAC;SAAM,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAVD,8DAUC","sourcesContent":["import assert from 'assert';\n\nimport { Ios } from '@expo/eas-build-job';\nimport { IOSConfig } from '@expo/config-plugins';\n\nexport function resolveScheme(workingDir: string, job: Ios.Job, scheme?: string): string {\n if (scheme) {\n return scheme;\n }\n if (job.scheme) {\n return job.scheme;\n }\n const schemes = IOSConfig.BuildScheme.getSchemesFromXcodeproj(workingDir);\n assert(schemes.length === 1, 'Ejected project should have exactly one scheme');\n return schemes[0];\n}\n\nexport function resolveBuildConfiguration(job: Ios.Job, buildConfiguration?: string): string {\n if (buildConfiguration) {\n return buildConfiguration;\n } else if (job.buildConfiguration) {\n return job.buildConfiguration;\n } else if (job.developmentClient) {\n return 'Debug';\n } else {\n return 'Release';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"xcpretty.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/xcpretty.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport fs from 'fs-extra';\nimport { bunyan } from '@expo/logger';\nimport { ExpoRunFormatter } from '@expo/xcpretty';\nimport spawnAsync, { SpawnPromise, SpawnResult } from '@expo/spawn-async';\nimport fg from 'fast-glob';\n\nconst CHECK_FILE_INTERVAL_MS = 1000;\n\nexport class XcodeBuildLogger {\n private loggerError?: Error;\n private flushing: boolean = false;\n private logReaderPromise?: SpawnPromise<SpawnResult>;\n private logsPath?: string;\n\n constructor(private readonly logger: bunyan, private readonly projectRoot: string) {}\n\n public async watchLogFiles(logsDirectory: string): Promise<void> {\n while (!this.flushing) {\n const logsFilename = await this.getBuildLogFilename(logsDirectory);\n if (logsFilename) {\n this.logsPath = path.join(logsDirectory, logsFilename);\n void this.startBuildLogger(this.logsPath);\n return;\n }\n await new Promise((res) => setTimeout(res, CHECK_FILE_INTERVAL_MS));\n }\n }\n\n public async flush(): Promise<void> {\n this.flushing = true;\n if (this.loggerError) {\n throw this.loggerError;\n }\n if (this.logReaderPromise) {\n this.logReaderPromise.child.kill('SIGINT');\n try {\n await this.logReaderPromise;\n } catch {}\n }\n if (this.logsPath) {\n await this.findBundlerErrors(this.logsPath);\n }\n }\n private async getBuildLogFilename(logsDirectory: string): Promise<string | undefined> {\n const paths = await fg('*.log', { cwd: logsDirectory });\n return paths.length >= 1 ? paths[0] : undefined;\n }\n\n private async startBuildLogger(logsPath: string): Promise<void> {\n try {\n const formatter = ExpoRunFormatter.create(this.projectRoot, {\n // TODO: Can provide xcode project name for better parsing\n isDebug: false,\n });\n this.logReaderPromise = spawnAsync('tail', ['-n', '+0', '-f', logsPath], { stdio: 'pipe' });\n assert(this.logReaderPromise.child.stdout, 'stdout is not available');\n this.logReaderPromise.child.stdout.on('data', (data: string) => {\n const lines = formatter.pipe(data.toString());\n for (const line of lines) {\n this.logger.info(line);\n }\n });\n await this.logReaderPromise;\n\n this.logger.info(formatter.getBuildSummary());\n } catch (err: any) {\n if (!this.flushing) {\n this.loggerError = err;\n }\n }\n }\n\n private async findBundlerErrors(logsPath: string): Promise<void> {\n try {\n const logFile = await fs.readFile(logsPath, 'utf-8');\n const match = logFile.match(\n /Welcome to Metro!\\s* Fast - Scalable - Integrated\\s*([\\s\\S]*)Run CLI with --verbose flag for more details.\\nCommand PhaseScriptExecution failed with a nonzero exit code/\n );\n if (match) {\n this.logger.info(match[1]);\n }\n } catch (err) {\n this.logger.error({ err }, 'Failed to read Xcode logs');\n }\n }\n}\n"]}
1
+ {"version":3,"file":"xcpretty.js","sourceRoot":"","sources":["../../../../src/steps/utils/ios/xcpretty.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport fs from 'fs-extra';\nimport { bunyan } from '@expo/logger';\nimport { ExpoRunFormatter } from '@expo/xcpretty';\nimport spawnAsync, { SpawnPromise, SpawnResult } from '@expo/spawn-async';\nimport fg from 'fast-glob';\n\nconst CHECK_FILE_INTERVAL_MS = 1000;\n\nexport class XcodeBuildLogger {\n private loggerError?: Error;\n private flushing: boolean = false;\n private logReaderPromise?: SpawnPromise<SpawnResult>;\n private logsPath?: string;\n\n constructor(\n private readonly logger: bunyan,\n private readonly projectRoot: string\n ) {}\n\n public async watchLogFiles(logsDirectory: string): Promise<void> {\n while (!this.flushing) {\n const logsFilename = await this.getBuildLogFilename(logsDirectory);\n if (logsFilename) {\n this.logsPath = path.join(logsDirectory, logsFilename);\n void this.startBuildLogger(this.logsPath);\n return;\n }\n await new Promise((res) => setTimeout(res, CHECK_FILE_INTERVAL_MS));\n }\n }\n\n public async flush(): Promise<void> {\n this.flushing = true;\n if (this.loggerError) {\n throw this.loggerError;\n }\n if (this.logReaderPromise) {\n this.logReaderPromise.child.kill('SIGINT');\n try {\n await this.logReaderPromise;\n } catch {}\n }\n if (this.logsPath) {\n await this.findBundlerErrors(this.logsPath);\n }\n }\n private async getBuildLogFilename(logsDirectory: string): Promise<string | undefined> {\n const paths = await fg('*.log', { cwd: logsDirectory });\n return paths.length >= 1 ? paths[0] : undefined;\n }\n\n private async startBuildLogger(logsPath: string): Promise<void> {\n try {\n const formatter = ExpoRunFormatter.create(this.projectRoot, {\n // TODO: Can provide xcode project name for better parsing\n isDebug: false,\n });\n this.logReaderPromise = spawnAsync('tail', ['-n', '+0', '-f', logsPath], { stdio: 'pipe' });\n assert(this.logReaderPromise.child.stdout, 'stdout is not available');\n this.logReaderPromise.child.stdout.on('data', (data: string) => {\n const lines = formatter.pipe(data.toString());\n for (const line of lines) {\n this.logger.info(line);\n }\n });\n await this.logReaderPromise;\n\n this.logger.info(formatter.getBuildSummary());\n } catch (err: any) {\n if (!this.flushing) {\n this.loggerError = err;\n }\n }\n }\n\n private async findBundlerErrors(logsPath: string): Promise<void> {\n try {\n const logFile = await fs.readFile(logsPath, 'utf-8');\n const match = logFile.match(\n /Welcome to Metro!\\s* Fast - Scalable - Integrated\\s*([\\s\\S]*)Run CLI with --verbose flag for more details.\\nCommand PhaseScriptExecution failed with a nonzero exit code/\n );\n if (match) {\n this.logger.info(match[1]);\n }\n } catch (err) {\n this.logger.error({ err }, 'Failed to read Xcode logs');\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"appConfig.js","sourceRoot":"","sources":["../../src/utils/appConfig.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAwD;AAExD,yCAAmD;AACnD,mCAAiC;AACjC,oDAA4B;AAE5B,SAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,GAAG,EACH,MAAM,EACN,UAAU,GAMX;IACC,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IACzC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjD,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAEvC,MAAM,WAAW,GAA2C,EAAE,CAAC;IAC/D,MAAM,+BAA+B,GAAG,UAAU,IAAI,gBAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3F,MAAM,qBAAqB,GAAG,+BAA+B,CAAC,CAAC,CAAC,IAAA,UAAI,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,YAAY,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC1D,IAAI;QACF,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;QAC3B,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC,CAAC;QACF,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,GAAG,IAAS;YAC3C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,GAAG,IAAS;YAC3C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,OAAO,IAAA,kBAAS,EAAC,UAAU,EAAE;YAC3B,yBAAyB,EAAE,IAAI;YAC/B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;KACJ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;KACX;YAAS;QACR,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC;QACjC,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;QACnC,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;KAC5C;AACH,CAAC;AArDD,sCAqDC","sourcesContent":["import { getConfig, ProjectConfig } from '@expo/config';\nimport { Env } from '@expo/eas-build-job';\nimport { bunyan, LoggerLevel } from '@expo/logger';\nimport { load } from '@expo/env';\nimport semver from 'semver';\n\nexport function readAppConfig({\n projectDir,\n env,\n logger,\n sdkVersion,\n}: {\n projectDir: string;\n env: Env;\n logger: bunyan;\n sdkVersion?: string;\n}): ProjectConfig {\n const originalProcessExit = process.exit;\n const originalProcessCwd = process.cwd;\n const originalStdoutWrite = process.stdout.write;\n const originalStderrWrite = process.stderr.write;\n const originalProcessEnv = process.env;\n\n const stdoutStore: { text: string; level: LoggerLevel }[] = [];\n const shouldLoadEnvVarsFromDotenvFile = sdkVersion && semver.satisfies(sdkVersion, '>=49');\n const envVarsFromDotenvFile = shouldLoadEnvVarsFromDotenvFile ? load(projectDir) : {};\n const newEnvsToUse = { ...env, ...envVarsFromDotenvFile };\n try {\n process.env = newEnvsToUse;\n process.exit = () => {\n throw new Error('Failed to evaluate app config file');\n };\n process.cwd = () => projectDir;\n process.stdout.write = function (...args: any) {\n stdoutStore.push({ text: String(args[0]), level: LoggerLevel.INFO });\n return originalStdoutWrite.apply(process.stdout, args);\n };\n process.stderr.write = function (...args: any) {\n stdoutStore.push({ text: String(args[0]), level: LoggerLevel.ERROR });\n return originalStderrWrite.apply(process.stderr, args);\n };\n return getConfig(projectDir, {\n skipSDKVersionRequirement: true,\n isPublicConfig: true,\n });\n } catch (err) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n stdoutStore.forEach(({ text, level }) => {\n logger[level](text.trim());\n });\n throw err;\n } finally {\n process.env = originalProcessEnv;\n process.exit = originalProcessExit;\n process.cwd = originalProcessCwd;\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n}\n"]}
1
+ {"version":3,"file":"appConfig.js","sourceRoot":"","sources":["../../src/utils/appConfig.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAwD;AAExD,yCAAmD;AACnD,mCAAiC;AACjC,oDAA4B;AAE5B,SAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,GAAG,EACH,MAAM,EACN,UAAU,GAMX;IACC,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IACzC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjD,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAEvC,MAAM,WAAW,GAA2C,EAAE,CAAC;IAC/D,MAAM,+BAA+B,GAAG,UAAU,IAAI,gBAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3F,MAAM,qBAAqB,GAAG,+BAA+B,CAAC,CAAC,CAAC,IAAA,UAAI,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,YAAY,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;QAC3B,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC,CAAC;QACF,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,GAAG,IAAS;YAC3C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,GAAG,IAAS;YAC3C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,OAAO,IAAA,kBAAS,EAAC,UAAU,EAAE;YAC3B,yBAAyB,EAAE,IAAI;YAC/B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC;QACjC,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;QACnC,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;IAC7C,CAAC;AACH,CAAC;AArDD,sCAqDC","sourcesContent":["import { getConfig, ProjectConfig } from '@expo/config';\nimport { Env } from '@expo/eas-build-job';\nimport { bunyan, LoggerLevel } from '@expo/logger';\nimport { load } from '@expo/env';\nimport semver from 'semver';\n\nexport function readAppConfig({\n projectDir,\n env,\n logger,\n sdkVersion,\n}: {\n projectDir: string;\n env: Env;\n logger: bunyan;\n sdkVersion?: string;\n}): ProjectConfig {\n const originalProcessExit = process.exit;\n const originalProcessCwd = process.cwd;\n const originalStdoutWrite = process.stdout.write;\n const originalStderrWrite = process.stderr.write;\n const originalProcessEnv = process.env;\n\n const stdoutStore: { text: string; level: LoggerLevel }[] = [];\n const shouldLoadEnvVarsFromDotenvFile = sdkVersion && semver.satisfies(sdkVersion, '>=49');\n const envVarsFromDotenvFile = shouldLoadEnvVarsFromDotenvFile ? load(projectDir) : {};\n const newEnvsToUse = { ...env, ...envVarsFromDotenvFile };\n try {\n process.env = newEnvsToUse;\n process.exit = () => {\n throw new Error('Failed to evaluate app config file');\n };\n process.cwd = () => projectDir;\n process.stdout.write = function (...args: any) {\n stdoutStore.push({ text: String(args[0]), level: LoggerLevel.INFO });\n return originalStdoutWrite.apply(process.stdout, args);\n };\n process.stderr.write = function (...args: any) {\n stdoutStore.push({ text: String(args[0]), level: LoggerLevel.ERROR });\n return originalStderrWrite.apply(process.stderr, args);\n };\n return getConfig(projectDir, {\n skipSDKVersionRequirement: true,\n isPublicConfig: true,\n });\n } catch (err) {\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n stdoutStore.forEach(({ text, level }) => {\n logger[level](text.trim());\n });\n throw err;\n } finally {\n process.env = originalProcessEnv;\n process.exit = originalProcessExit;\n process.cwd = originalProcessCwd;\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n}\n"]}
@@ -7,7 +7,7 @@ exports.uploadApplicationArchive = exports.maybeFindAndUploadBuildArtifacts = ex
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
9
  const fast_glob_1 = __importDefault(require("fast-glob"));
10
- const context_1 = require("../context");
10
+ const eas_build_job_1 = require("@expo/eas-build-job");
11
11
  async function findArtifacts(rootDir, patternOrPath, buildLogger) {
12
12
  const files = await (0, fast_glob_1.default)(patternOrPath, { cwd: rootDir, onlyFiles: false });
13
13
  if (files.length === 0) {
@@ -47,7 +47,13 @@ async function maybeFindAndUploadBuildArtifacts(ctx, { logger }) {
47
47
  const buildArtifacts = (await Promise.all(ctx.job.buildArtifactPaths.map((path) => findArtifacts(ctx.getReactNativeProjectDirectory(), path, logger)))).flat();
48
48
  logger.info(`Build artifacts: ${buildArtifacts.join(', ')}`);
49
49
  logger.info('Uploading build artifacts...');
50
- await ctx.uploadArtifacts(context_1.ArtifactType.BUILD_ARTIFACTS, buildArtifacts, logger);
50
+ await ctx.uploadArtifact({
51
+ artifact: {
52
+ type: eas_build_job_1.ManagedArtifactType.BUILD_ARTIFACTS,
53
+ paths: buildArtifacts,
54
+ },
55
+ logger,
56
+ });
51
57
  }
52
58
  catch (err) {
53
59
  logger.error({ err }, 'Failed to upload build artifacts');
@@ -58,7 +64,13 @@ async function uploadApplicationArchive(ctx, { logger, patternOrPath, rootDir, }
58
64
  const applicationArchives = await findArtifacts(rootDir, patternOrPath, logger);
59
65
  logger.info(`Application archives: ${applicationArchives.join(', ')}`);
60
66
  logger.info('Uploading application archive...');
61
- await ctx.uploadArtifacts(context_1.ArtifactType.APPLICATION_ARCHIVE, applicationArchives, logger);
67
+ await ctx.uploadArtifact({
68
+ artifact: {
69
+ type: eas_build_job_1.ManagedArtifactType.APPLICATION_ARCHIVE,
70
+ paths: applicationArchives,
71
+ },
72
+ logger,
73
+ });
62
74
  }
63
75
  exports.uploadApplicationArchive = uploadApplicationArchive;
64
76
  //# 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 { Job } from '@expo/eas-build-job';\n\nimport { ArtifactType, BuildContext } from '../context';\n\nexport async function findArtifacts(\n rootDir: string,\n patternOrPath: string,\n buildLogger: bunyan\n): Promise<string[]> {\n const files = await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new Error(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n await logMissingFileError(path.join(rootDir, patternOrPath), buildLogger);\n throw new Error(`No such file or directory ${patternOrPath}`);\n }\n }\n return files.map((relativePath) => path.join(rootDir, relativePath));\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<Job>,\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(ctx.getReactNativeProjectDirectory(), path, logger)\n )\n )\n ).flat();\n logger.info(`Build artifacts: ${buildArtifacts.join(', ')}`);\n logger.info('Uploading build artifacts...');\n await ctx.uploadArtifacts(ArtifactType.BUILD_ARTIFACTS, buildArtifacts, logger);\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 logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n logger.info('Uploading application archive...');\n await ctx.uploadArtifacts(ArtifactType.APPLICATION_ARCHIVE, applicationArchives, logger);\n}\n"]}
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 } from '@expo/eas-build-job';\n\nimport { BuildContext } from '../context';\n\nexport async function findArtifacts(\n rootDir: string,\n patternOrPath: string,\n buildLogger: bunyan\n): Promise<string[]> {\n const files = await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new Error(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n await logMissingFileError(path.join(rootDir, patternOrPath), buildLogger);\n throw new Error(`No such file or directory ${patternOrPath}`);\n }\n }\n return files.map((relativePath) => path.join(rootDir, relativePath));\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<Job>,\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(ctx.getReactNativeProjectDirectory(), path, logger)\n )\n )\n ).flat();\n logger.info(`Build artifacts: ${buildArtifacts.join(', ')}`);\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 logger.info(`Application archives: ${applicationArchives.join(', ')}`);\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"]}
@@ -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';\n\nimport { Platform, Job } from '@expo/eas-build-job';\nimport { getRuntimeVersionNullable } from '@expo/config-plugins/build/utils/Updates';\n\nimport {\n androidSetRuntimeVersionNativelyAsync,\n androidSetChannelNativelyAsync,\n androidSetClassicReleaseChannelNativelyAsync,\n androidGetNativelyDefinedClassicReleaseChannelAsync,\n androidGetNativelyDefinedRuntimeVersionAsync,\n androidGetNativelyDefinedChannelAsync,\n} from '../android/expoUpdates';\nimport {\n iosSetRuntimeVersionNativelyAsync,\n iosSetChannelNativelyAsync,\n iosSetClassicReleaseChannelNativelyAsync,\n iosGetNativelyDefinedClassicReleaseChannelAsync,\n iosGetNativelyDefinedRuntimeVersionAsync,\n iosGetNativelyDefinedChannelAsync,\n} from '../ios/expoUpdates';\nimport { BuildContext } from '../context';\n\nimport isExpoUpdatesInstalledAsync from './isExpoUpdatesInstalled';\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<Job>): 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\n/**\n * Used for classic Expo Updates\n */\nexport async function setClassicReleaseChannelNativelyAsync(ctx: BuildContext<Job>): Promise<void> {\n assert(ctx.job.releaseChannel, 'releaseChannel must be defined');\n\n const configFile = ctx.job.platform === Platform.ANDROID ? 'AndroidManifest.xml' : 'Expo.plist';\n ctx.logger.info(`Setting the release channel in '${configFile}' to '${ctx.job.releaseChannel}'`);\n\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n await androidSetClassicReleaseChannelNativelyAsync(ctx);\n return;\n }\n case Platform.IOS: {\n await iosSetClassicReleaseChannelNativelyAsync(ctx);\n return;\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\n/**\n * Used for classic Expo Updates\n */\nexport async function getNativelyDefinedClassicReleaseChannelAsync(\n ctx: BuildContext<Job>\n): Promise<string | null> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n return androidGetNativelyDefinedClassicReleaseChannelAsync(ctx);\n }\n case Platform.IOS: {\n return iosGetNativelyDefinedClassicReleaseChannelAsync(ctx);\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport async function configureClassicExpoUpdatesAsync(ctx: BuildContext<Job>): Promise<void> {\n if (ctx.job.releaseChannel) {\n await setClassicReleaseChannelNativelyAsync(ctx);\n } else {\n /**\n * If releaseChannel is not defined:\n * 1. Try to infer it from the native value.\n * 2. If it is not set, fallback to 'default'.\n */\n const releaseChannel = await getNativelyDefinedClassicReleaseChannelAsync(ctx);\n if (releaseChannel) {\n ctx.logger.info(\n `Using the release channel pre-configured in native project (${releaseChannel})`\n );\n ctx.logger.warn('Please add the \"releaseChannel\" field to your build profile (eas.json)');\n } else {\n ctx.logger.info(`Using default release channel for 'expo-updates' (default)`);\n }\n }\n}\n\nexport async function configureEASExpoUpdatesAsync(ctx: BuildContext<Job>): Promise<void> {\n await setChannelNativelyAsync(ctx);\n}\n\nexport async function configureExpoUpdatesIfInstalledAsync(ctx: BuildContext<Job>): Promise<void> {\n if (!(await isExpoUpdatesInstalledAsync(ctx.getReactNativeProjectDirectory()))) {\n return;\n }\n\n const appConfigRuntimeVersion =\n ctx.job.version?.runtimeVersion ?? getRuntimeVersionNullable(ctx.appConfig, ctx.job.platform);\n if (ctx.metadata?.runtimeVersion && ctx.metadata?.runtimeVersion !== appConfigRuntimeVersion) {\n ctx.markBuildPhaseHasWarnings();\n ctx.logger.warn(\n `Runtime version from the app config evaluated on your local machine (${ctx.metadata.runtimeVersion}) does not match the one resolved here (${appConfigRuntimeVersion}).`\n );\n ctx.logger.warn(\n \"If you're using conditional app configs, e.g. depending on an environment variable, make sure to set the variable in eas.json or configure it with EAS Secret.\"\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 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 {\n if (ctx.job.releaseChannel !== undefined) {\n ctx.logger.warn(\n `This build is configured with EAS Update however has a Classic Updates releaseChannel set instead of having an EAS Update channel.`\n );\n } else {\n ctx.logger.warn(\n `This build is configured to query EAS Update for updates, however no channel is set in eas.json.`\n );\n }\n ctx.markBuildPhaseHasWarnings();\n }\n }\n } else {\n await configureClassicExpoUpdatesAsync(ctx);\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 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"]}
1
+ {"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../src/utils/expoUpdates.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\n\nimport { Platform, Job } from '@expo/eas-build-job';\nimport { getRuntimeVersionNullable } from '@expo/config-plugins/build/utils/Updates';\n\nimport {\n androidSetRuntimeVersionNativelyAsync,\n androidSetChannelNativelyAsync,\n androidSetClassicReleaseChannelNativelyAsync,\n androidGetNativelyDefinedClassicReleaseChannelAsync,\n androidGetNativelyDefinedRuntimeVersionAsync,\n androidGetNativelyDefinedChannelAsync,\n} from '../android/expoUpdates';\nimport {\n iosSetRuntimeVersionNativelyAsync,\n iosSetChannelNativelyAsync,\n iosSetClassicReleaseChannelNativelyAsync,\n iosGetNativelyDefinedClassicReleaseChannelAsync,\n iosGetNativelyDefinedRuntimeVersionAsync,\n iosGetNativelyDefinedChannelAsync,\n} from '../ios/expoUpdates';\nimport { BuildContext } from '../context';\n\nimport isExpoUpdatesInstalledAsync from './isExpoUpdatesInstalled';\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<Job>): 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\n/**\n * Used for classic Expo Updates\n */\nexport async function setClassicReleaseChannelNativelyAsync(ctx: BuildContext<Job>): Promise<void> {\n assert(ctx.job.releaseChannel, 'releaseChannel must be defined');\n\n const configFile = ctx.job.platform === Platform.ANDROID ? 'AndroidManifest.xml' : 'Expo.plist';\n ctx.logger.info(`Setting the release channel in '${configFile}' to '${ctx.job.releaseChannel}'`);\n\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n await androidSetClassicReleaseChannelNativelyAsync(ctx);\n return;\n }\n case Platform.IOS: {\n await iosSetClassicReleaseChannelNativelyAsync(ctx);\n return;\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\n/**\n * Used for classic Expo Updates\n */\nexport async function getNativelyDefinedClassicReleaseChannelAsync(\n ctx: BuildContext<Job>\n): Promise<string | null> {\n switch (ctx.job.platform) {\n case Platform.ANDROID: {\n return androidGetNativelyDefinedClassicReleaseChannelAsync(ctx);\n }\n case Platform.IOS: {\n return iosGetNativelyDefinedClassicReleaseChannelAsync(ctx);\n }\n default:\n throw new Error(`Platform is not supported.`);\n }\n}\n\nexport async function configureClassicExpoUpdatesAsync(ctx: BuildContext<Job>): Promise<void> {\n if (ctx.job.releaseChannel) {\n await setClassicReleaseChannelNativelyAsync(ctx);\n } else {\n /**\n * If releaseChannel is not defined:\n * 1. Try to infer it from the native value.\n * 2. If it is not set, fallback to 'default'.\n */\n const releaseChannel = await getNativelyDefinedClassicReleaseChannelAsync(ctx);\n if (releaseChannel) {\n ctx.logger.info(\n `Using the release channel pre-configured in native project (${releaseChannel})`\n );\n ctx.logger.warn('Please add the \"releaseChannel\" field to your build profile (eas.json)');\n } else {\n ctx.logger.info(`Using default release channel for 'expo-updates' (default)`);\n }\n }\n}\n\nexport async function configureEASExpoUpdatesAsync(ctx: BuildContext<Job>): Promise<void> {\n await setChannelNativelyAsync(ctx);\n}\n\nexport async function configureExpoUpdatesIfInstalledAsync(ctx: BuildContext<Job>): Promise<void> {\n if (!(await isExpoUpdatesInstalledAsync(ctx.getReactNativeProjectDirectory()))) {\n return;\n }\n\n const appConfigRuntimeVersion =\n ctx.job.version?.runtimeVersion ?? getRuntimeVersionNullable(ctx.appConfig, ctx.job.platform);\n if (ctx.metadata?.runtimeVersion && ctx.metadata?.runtimeVersion !== appConfigRuntimeVersion) {\n ctx.markBuildPhaseHasWarnings();\n ctx.logger.warn(\n `Runtime version from the app config evaluated on your local machine (${ctx.metadata.runtimeVersion}) does not match the one resolved here (${appConfigRuntimeVersion}).`\n );\n ctx.logger.warn(\n \"If you're using conditional app configs, e.g. depending on an environment variable, make sure to set the variable in eas.json or configure it with EAS Secret.\"\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 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 {\n if (ctx.job.releaseChannel !== undefined) {\n ctx.logger.warn(\n `This build is configured with EAS Update however has a Classic Updates releaseChannel set instead of having an EAS Update channel.`\n );\n } else {\n ctx.logger.warn(\n `This build is configured to query EAS Update for updates, however no channel is set in eas.json.`\n );\n }\n ctx.markBuildPhaseHasWarnings();\n }\n }\n } else {\n await configureClassicExpoUpdatesAsync(ctx);\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 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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/utils/hooks.ts"],"names":[],"mappings":";;;;;;AACA,sEAAuC;AAIvC,qDAAkD;AAClD,uCAA0D;AAE1D,IAAY,IAWX;AAXD,WAAY,IAAI;IACd,6CAAqC,CAAA;IACrC,+CAAuC,CAAA;IACvC;;OAEG;IACH,+DAAuD,CAAA;IACvD,iDAAyC,CAAA;IACzC,6CAAqC,CAAA;IACrC,mDAA2C,CAAA;IAC3C,+CAAuC,CAAA;AACzC,CAAC,EAXW,IAAI,oBAAJ,IAAI,QAWf;AAEM,KAAK,UAAU,gBAAgB,CACpC,GAAuB,EACvB,IAAU,EACV,EAAE,SAAS,KAA6C,EAAE;;IAE1D,MAAM,UAAU,GAAG,GAAG,CAAC,8BAA8B,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAC;IAChD,IAAI,MAAA,WAAW,CAAC,OAAO,0CAAG,IAAI,CAAC,EAAE;QAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,6CAA6C,CAAC,CAAC;QAC9E,wFAAwF;QACxF,yBAAyB;QACzB,MAAM,cAAc,GAClB,CAAC,MAAM,IAAA,sBAAY,EAAC,UAAU,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW;YAC3D,CAAC,CAAC,+BAAc,CAAC,GAAG;YACpB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;QACzB,MAAM,IAAA,sBAAK,EAAC,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACzC,GAAG,EAAE,UAAU;YACf,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,GAAG;gBACV,GAAG,SAAS;aACb;SACF,CAAC,CAAC;KACJ;AACH,CAAC;AAxBD,4CAwBC","sourcesContent":["import { Job } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\n\nimport { BuildContext } from '../context';\n\nimport { PackageManager } from './packageManager';\nimport { isUsingYarn2, readPackageJson } from './project';\n\nexport enum Hook {\n PRE_INSTALL = 'eas-build-pre-install',\n POST_INSTALL = 'eas-build-post-install',\n /**\n * @deprecated\n */\n PRE_UPLOAD_ARTIFACTS = 'eas-build-pre-upload-artifacts',\n ON_BUILD_SUCCESS = 'eas-build-on-success',\n ON_BUILD_ERROR = 'eas-build-on-error',\n ON_BUILD_COMPLETE = 'eas-build-on-complete',\n ON_BUILD_CANCEL = 'eas-build-on-cancel',\n}\n\nexport async function runHookIfPresent<TJob extends Job>(\n ctx: BuildContext<TJob>,\n hook: Hook,\n { extraEnvs }: { extraEnvs?: Record<string, string> } = {}\n): Promise<void> {\n const projectDir = ctx.getReactNativeProjectDirectory();\n const packageJson = readPackageJson(projectDir);\n if (packageJson.scripts?.[hook]) {\n ctx.logger.info(`Script '${hook}' is present in package.json, running it...`);\n // when using yarn 2, it's not possible to run any scripts before running 'yarn install'\n // use 'npm' in that case\n const packageManager =\n (await isUsingYarn2(projectDir)) && hook === Hook.PRE_INSTALL\n ? PackageManager.NPM\n : ctx.packageManager;\n await spawn(packageManager, ['run', hook], {\n cwd: projectDir,\n logger: ctx.logger,\n env: {\n ...ctx.env,\n ...extraEnvs,\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/utils/hooks.ts"],"names":[],"mappings":";;;;;;AACA,sEAAuC;AAIvC,qDAAkD;AAClD,uCAA0D;AAE1D,IAAY,IAWX;AAXD,WAAY,IAAI;IACd,6CAAqC,CAAA;IACrC,+CAAuC,CAAA;IACvC;;OAEG;IACH,+DAAuD,CAAA;IACvD,iDAAyC,CAAA;IACzC,6CAAqC,CAAA;IACrC,mDAA2C,CAAA;IAC3C,+CAAuC,CAAA;AACzC,CAAC,EAXW,IAAI,oBAAJ,IAAI,QAWf;AAEM,KAAK,UAAU,gBAAgB,CACpC,GAAuB,EACvB,IAAU,EACV,EAAE,SAAS,KAA6C,EAAE;;IAE1D,MAAM,UAAU,GAAG,GAAG,CAAC,8BAA8B,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAC;IAChD,IAAI,MAAA,WAAW,CAAC,OAAO,0CAAG,IAAI,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,6CAA6C,CAAC,CAAC;QAC9E,wFAAwF;QACxF,yBAAyB;QACzB,MAAM,cAAc,GAClB,CAAC,MAAM,IAAA,sBAAY,EAAC,UAAU,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW;YAC3D,CAAC,CAAC,+BAAc,CAAC,GAAG;YACpB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;QACzB,MAAM,IAAA,sBAAK,EAAC,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACzC,GAAG,EAAE,UAAU;YACf,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,GAAG;gBACV,GAAG,SAAS;aACb;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAxBD,4CAwBC","sourcesContent":["import { Job } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\n\nimport { BuildContext } from '../context';\n\nimport { PackageManager } from './packageManager';\nimport { isUsingYarn2, readPackageJson } from './project';\n\nexport enum Hook {\n PRE_INSTALL = 'eas-build-pre-install',\n POST_INSTALL = 'eas-build-post-install',\n /**\n * @deprecated\n */\n PRE_UPLOAD_ARTIFACTS = 'eas-build-pre-upload-artifacts',\n ON_BUILD_SUCCESS = 'eas-build-on-success',\n ON_BUILD_ERROR = 'eas-build-on-error',\n ON_BUILD_COMPLETE = 'eas-build-on-complete',\n ON_BUILD_CANCEL = 'eas-build-on-cancel',\n}\n\nexport async function runHookIfPresent<TJob extends Job>(\n ctx: BuildContext<TJob>,\n hook: Hook,\n { extraEnvs }: { extraEnvs?: Record<string, string> } = {}\n): Promise<void> {\n const projectDir = ctx.getReactNativeProjectDirectory();\n const packageJson = readPackageJson(projectDir);\n if (packageJson.scripts?.[hook]) {\n ctx.logger.info(`Script '${hook}' is present in package.json, running it...`);\n // when using yarn 2, it's not possible to run any scripts before running 'yarn install'\n // use 'npm' in that case\n const packageManager =\n (await isUsingYarn2(projectDir)) && hook === Hook.PRE_INSTALL\n ? PackageManager.NPM\n : ctx.packageManager;\n await spawn(packageManager, ['run', hook], {\n cwd: projectDir,\n logger: ctx.logger,\n env: {\n ...ctx.env,\n ...extraEnvs,\n },\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"npmrc.js","sourceRoot":"","sources":["../../src/utils/npmrc.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAIxB,wDAA0B;AAI1B,qDAAuD;AAEvD,MAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAEnE,KAAK,UAAU,eAAe,CAAC,GAAsB,EAAE,MAAc;IAC1E,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QACrB,MAAM,2BAA2B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAChD;SAAM;QACL,MAAM,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAC1C;AACH,CAAC;AAND,0CAMC;AAED,KAAK,UAAU,2BAA2B,CAAC,GAAsB,EAAE,MAAc;IAC/E,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;KACrF;SAAM;QACL,MAAM,aAAa,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACtF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,kBAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;KACtD;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAsB,EAAE,MAAc;IACzE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAChC,IAAA,oCAAmB,EAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,EACzD,QAAQ,CACT,CAAC;IACF,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,mBAAmB,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;KACvF;AACH,CAAC","sourcesContent":["import path from 'path';\n\nimport { Job } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport fs from 'fs-extra';\n\nimport { BuildContext } from '../context';\n\nimport { findPackagerRootDir } from './packageManager';\n\nconst NPMRC_TEMPLATE_PATH = path.join(__dirname, '../../templates/npmrc');\n\nexport async function setUpNpmrcAsync(ctx: BuildContext<Job>, logger: bunyan): Promise<void> {\n if (ctx.env.NPM_TOKEN) {\n await createNpmrcIfNotExistsAsync(ctx, logger);\n } else {\n await logIfNpmrcExistsAsync(ctx, logger);\n }\n}\n\nasync function createNpmrcIfNotExistsAsync(ctx: BuildContext<Job>, logger: bunyan): Promise<void> {\n logger.info('We detected that you set the NPM_TOKEN environment variable');\n const projectNpmrcPath = path.join(ctx.buildDirectory, '.npmrc');\n if (await fs.pathExists(projectNpmrcPath)) {\n logger.info('.npmrc already exists in your project directory, skipping generation');\n } else {\n const npmrcContents = await fs.readFile(NPMRC_TEMPLATE_PATH, 'utf8');\n logger.info('Creating .npmrc in your project directory with the following contents:');\n logger.info(npmrcContents);\n await fs.copy(NPMRC_TEMPLATE_PATH, projectNpmrcPath);\n }\n}\n\nasync function logIfNpmrcExistsAsync(ctx: BuildContext<Job>, logger: bunyan): Promise<void> {\n const projectNpmrcPath = path.join(\n findPackagerRootDir(ctx.getReactNativeProjectDirectory()),\n '.npmrc'\n );\n if (await fs.pathExists(projectNpmrcPath)) {\n logger.info(`.npmrc found at ${path.relative(ctx.buildDirectory, projectNpmrcPath)}`);\n }\n}\n"]}
1
+ {"version":3,"file":"npmrc.js","sourceRoot":"","sources":["../../src/utils/npmrc.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAIxB,wDAA0B;AAI1B,qDAAuD;AAEvD,MAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAEnE,KAAK,UAAU,eAAe,CAAC,GAAsB,EAAE,MAAc;IAC1E,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,2BAA2B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAND,0CAMC;AAED,KAAK,UAAU,2BAA2B,CAAC,GAAsB,EAAE,MAAc;IAC/E,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACtF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,kBAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAsB,EAAE,MAAc;IACzE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAChC,IAAA,oCAAmB,EAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,EACzD,QAAQ,CACT,CAAC;IACF,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,mBAAmB,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC","sourcesContent":["import path from 'path';\n\nimport { Job } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport fs from 'fs-extra';\n\nimport { BuildContext } from '../context';\n\nimport { findPackagerRootDir } from './packageManager';\n\nconst NPMRC_TEMPLATE_PATH = path.join(__dirname, '../../templates/npmrc');\n\nexport async function setUpNpmrcAsync(ctx: BuildContext<Job>, logger: bunyan): Promise<void> {\n if (ctx.env.NPM_TOKEN) {\n await createNpmrcIfNotExistsAsync(ctx, logger);\n } else {\n await logIfNpmrcExistsAsync(ctx, logger);\n }\n}\n\nasync function createNpmrcIfNotExistsAsync(ctx: BuildContext<Job>, logger: bunyan): Promise<void> {\n logger.info('We detected that you set the NPM_TOKEN environment variable');\n const projectNpmrcPath = path.join(ctx.buildDirectory, '.npmrc');\n if (await fs.pathExists(projectNpmrcPath)) {\n logger.info('.npmrc already exists in your project directory, skipping generation');\n } else {\n const npmrcContents = await fs.readFile(NPMRC_TEMPLATE_PATH, 'utf8');\n logger.info('Creating .npmrc in your project directory with the following contents:');\n logger.info(npmrcContents);\n await fs.copy(NPMRC_TEMPLATE_PATH, projectNpmrcPath);\n }\n}\n\nasync function logIfNpmrcExistsAsync(ctx: BuildContext<Job>, logger: bunyan): Promise<void> {\n const projectNpmrcPath = path.join(\n findPackagerRootDir(ctx.getReactNativeProjectDirectory()),\n '.npmrc'\n );\n if (await fs.pathExists(projectNpmrcPath)) {\n logger.info(`.npmrc found at ${path.relative(ctx.buildDirectory, projectNpmrcPath)}`);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"packageManager.js","sourceRoot":"","sources":["../../src/utils/packageManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA4C;AAC5C,2EAA6D;AAC7D,oDAA4B;AAE5B,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,6BAAW,CAAA;IACX,+BAAa,CAAA;IACb,6BAAW,CAAA;AACb,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,IAAI;QACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,OAAO,KAAK,KAAK,EAAE;YACrB,OAAO,cAAc,CAAC,GAAG,CAAC;SAC3B;aAAM,IAAI,OAAO,KAAK,MAAM,EAAE;YAC7B,OAAO,cAAc,CAAC,IAAI,CAAC;SAC5B;aAAM,IAAI,OAAO,KAAK,KAAK,EAAE;YAC5B,OAAO,cAAc,CAAC,GAAG,CAAC;SAC3B;aAAM;YACL,OAAO,cAAc,CAAC,IAAI,CAAC;SAC5B;KACF;IAAC,MAAM;QACN,OAAO,cAAc,CAAC,IAAI,CAAC;KAC5B;AACH,CAAC;AAfD,sDAeC;AAED,SAAgB,mBAAmB,CAAC,UAAkB;;IACpD,OAAO,MAAA,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,mCAAI,UAAU,CAAC;AACzE,CAAC;AAFD,kDAEC;AAEM,KAAK,UAAU,kBAAkB;IACtC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAA,sBAAU,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1F,OAAO,gBAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAHD,gDAGC","sourcesContent":["import spawnAsync from '@expo/turtle-spawn';\nimport * as PackageManagerUtils from '@expo/package-manager';\nimport semver from 'semver';\n\nexport enum PackageManager {\n YARN = 'yarn',\n NPM = 'npm',\n PNPM = 'pnpm',\n BUN = 'bun',\n}\n\nexport function resolvePackageManager(directory: string): PackageManager {\n try {\n const manager = PackageManagerUtils.resolvePackageManager(directory);\n if (manager === 'npm') {\n return PackageManager.NPM;\n } else if (manager === 'pnpm') {\n return PackageManager.PNPM;\n } else if (manager === 'bun') {\n return PackageManager.BUN;\n } else {\n return PackageManager.YARN;\n }\n } catch {\n return PackageManager.YARN;\n }\n}\n\nexport function findPackagerRootDir(currentDir: string): string {\n return PackageManagerUtils.findWorkspaceRoot(currentDir) ?? currentDir;\n}\n\nexport async function isAtLeastNpm7Async(): Promise<boolean> {\n const version = (await spawnAsync('npm', ['--version'], { stdio: 'pipe' })).stdout.trim();\n return semver.gte(version, '7.0.0');\n}\n"]}
1
+ {"version":3,"file":"packageManager.js","sourceRoot":"","sources":["../../src/utils/packageManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA4C;AAC5C,2EAA6D;AAC7D,oDAA4B;AAE5B,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,6BAAW,CAAA;IACX,+BAAa,CAAA;IACb,6BAAW,CAAA;AACb,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,cAAc,CAAC,GAAG,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,cAAc,CAAC,IAAI,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO,cAAc,CAAC,GAAG,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,cAAc,CAAC,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;AACH,CAAC;AAfD,sDAeC;AAED,SAAgB,mBAAmB,CAAC,UAAkB;;IACpD,OAAO,MAAA,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,mCAAI,UAAU,CAAC;AACzE,CAAC;AAFD,kDAEC;AAEM,KAAK,UAAU,kBAAkB;IACtC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAA,sBAAU,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1F,OAAO,gBAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAHD,gDAGC","sourcesContent":["import spawnAsync from '@expo/turtle-spawn';\nimport * as PackageManagerUtils from '@expo/package-manager';\nimport semver from 'semver';\n\nexport enum PackageManager {\n YARN = 'yarn',\n NPM = 'npm',\n PNPM = 'pnpm',\n BUN = 'bun',\n}\n\nexport function resolvePackageManager(directory: string): PackageManager {\n try {\n const manager = PackageManagerUtils.resolvePackageManager(directory);\n if (manager === 'npm') {\n return PackageManager.NPM;\n } else if (manager === 'pnpm') {\n return PackageManager.PNPM;\n } else if (manager === 'bun') {\n return PackageManager.BUN;\n } else {\n return PackageManager.YARN;\n }\n } catch {\n return PackageManager.YARN;\n }\n}\n\nexport function findPackagerRootDir(currentDir: string): string {\n return PackageManagerUtils.findWorkspaceRoot(currentDir) ?? currentDir;\n}\n\nexport async function isAtLeastNpm7Async(): Promise<boolean> {\n const version = (await spawnAsync('npm', ['--version'], { stdio: 'pipe' })).stdout.trim();\n return semver.gte(version, '7.0.0');\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/utils/processes.ts"],"names":[],"mappings":";;;;;;AAAA,sEAAuC;AAEvC,KAAK,UAAU,oBAAoB,CAAC,UAAoB;IACtD,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAK,EAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAChE,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM;aACjB,QAAQ,EAAE;aACV,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACrB;IAAC,MAAM;QACN,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAEM,KAAK,UAAU,sCAAsC,CAAC,IAAY;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAC5B,OAAO,gBAAgB,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACvD,gBAAgB,GAAG,KAAK,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACtB,gBAAgB,GAAG,IAAI,CAAC;gBACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACnB;SACF;KACF;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAdD,wFAcC","sourcesContent":["import spawn from '@expo/turtle-spawn';\n\nasync function getChildrenPidsAsync(parentPids: number[]): Promise<number[]> {\n try {\n const result = await spawn('pgrep', ['-P', parentPids.join(',')], {\n stdio: 'pipe',\n });\n return result.stdout\n .toString()\n .split('\\n')\n .map((i) => Number(i.trim()))\n .filter((i) => i);\n } catch {\n return [];\n }\n}\n\nexport async function getParentAndDescendantProcessPidsAsync(ppid: number): Promise<number[]> {\n const children = new Set<number>([ppid]);\n let shouldCheckAgain = true;\n while (shouldCheckAgain) {\n const pids = await getChildrenPidsAsync([...children]);\n shouldCheckAgain = false;\n for (const pid of pids) {\n if (!children.has(pid)) {\n shouldCheckAgain = true;\n children.add(pid);\n }\n }\n }\n return [...children];\n}\n"]}
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/utils/processes.ts"],"names":[],"mappings":";;;;;;AAAA,sEAAuC;AAEvC,KAAK,UAAU,oBAAoB,CAAC,UAAoB;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAK,EAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAChE,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM;aACjB,QAAQ,EAAE;aACV,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,sCAAsC,CAAC,IAAY;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAC5B,OAAO,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACvD,gBAAgB,GAAG,KAAK,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,gBAAgB,GAAG,IAAI,CAAC;gBACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAdD,wFAcC","sourcesContent":["import spawn from '@expo/turtle-spawn';\n\nasync function getChildrenPidsAsync(parentPids: number[]): Promise<number[]> {\n try {\n const result = await spawn('pgrep', ['-P', parentPids.join(',')], {\n stdio: 'pipe',\n });\n return result.stdout\n .toString()\n .split('\\n')\n .map((i) => Number(i.trim()))\n .filter((i) => i);\n } catch {\n return [];\n }\n}\n\nexport async function getParentAndDescendantProcessPidsAsync(ppid: number): Promise<number[]> {\n const children = new Set<number>([ppid]);\n let shouldCheckAgain = true;\n while (shouldCheckAgain) {\n const pids = await getChildrenPidsAsync([...children]);\n shouldCheckAgain = false;\n for (const pid of pids) {\n if (!children.has(pid)) {\n shouldCheckAgain = true;\n children.add(pid);\n }\n }\n }\n return [...children];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,sEAAoF;AACpF,wDAA0B;AAC1B,oDAA4B;AAG5B,4DAA8E;AAE9E;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,oCAAmB,EAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;IACjF,OAAO,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;AACpF,CAAC;AAJD,oCAIC;AAED,SAAgB,iBAAiB,CAC/B,GAAuB,EACvB,IAAc,EACd,OAAqB,EACrB,EACE,qBAAqB,GAAG,KAAK,EAC7B,kBAAkB,GAC+C;IAEnE,IAAI,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,CAAC,EAAE;QACtD,OAAO,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;KACvE;SAAM;QACL,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,GAAG,EAAE;YAC7C,OAAO,IAAA,sBAAK,EAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;SAC5C;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE;YACrD,OAAO,IAAA,sBAAK,EAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;SAC7C;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE;YACrD,OAAO,IAAA,sBAAK,EAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;SAC7C;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,GAAG,EAAE;YACpD,OAAO,IAAA,sBAAK,EAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;SAC5C;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;SACvE;KACF;AACH,CAAC;AAzBD,8CAyBC;AAED,SAAgB,sBAAsB,CACpC,GAAuB,EACvB,qBAAqB,GAAG,KAAK;IAE7B,OAAO,CACL,qBAAqB;QACrB,GAAG,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;QAClC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU;QACzB,gBAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAClD,CAAC;AACJ,CAAC;AAVD,wDAUC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,CAAC,kBAAE,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;KACjE;IACD,IAAI;QACF,OAAO,kBAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;KACzC;IAAC,OAAO,GAAQ,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;KACzE;AACH,CAAC;AAVD,0CAUC","sourcesContent":["import path from 'path';\n\nimport { Job } from '@expo/eas-build-job';\nimport spawn, { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport semver from 'semver';\n\nimport { BuildContext } from '../context';\nimport { findPackagerRootDir, PackageManager } from '../utils/packageManager';\n\n/**\n * check if .yarnrc.yml exists in the project dir or in the workspace root dir\n */\nexport async function isUsingYarn2(projectDir: string): Promise<boolean> {\n const yarnrcPath = path.join(projectDir, '.yarnrc.yml');\n const yarnrcRootPath = path.join(findPackagerRootDir(projectDir), '.yarnrc.yml');\n return (await fs.pathExists(yarnrcPath)) || (await fs.pathExists(yarnrcRootPath));\n}\n\nexport function runExpoCliCommand<TJob extends Job>(\n ctx: BuildContext<TJob>,\n args: string[],\n options: SpawnOptions,\n {\n forceUseGlobalExpoCli = false,\n npmVersionAtLeast7,\n }: { forceUseGlobalExpoCli?: boolean; npmVersionAtLeast7: boolean }\n): SpawnPromise<SpawnResult> {\n if (shouldUseGlobalExpoCli(ctx, forceUseGlobalExpoCli)) {\n return ctx.runGlobalExpoCliCommand(args, options, npmVersionAtLeast7);\n } else {\n const argsWithExpo = ['expo', ...args];\n if (ctx.packageManager === PackageManager.NPM) {\n return spawn('npx', argsWithExpo, options);\n } else if (ctx.packageManager === PackageManager.YARN) {\n return spawn('yarn', argsWithExpo, options);\n } else if (ctx.packageManager === PackageManager.PNPM) {\n return spawn('pnpm', argsWithExpo, options);\n } else if (ctx.packageManager === PackageManager.BUN) {\n return spawn('bun', argsWithExpo, options);\n } else {\n throw new Error(`Unsupported package manager: ${ctx.packageManager}`);\n }\n }\n}\n\nexport function shouldUseGlobalExpoCli<TJob extends Job>(\n ctx: BuildContext<TJob>,\n forceUseGlobalExpoCli = false\n): boolean {\n return (\n forceUseGlobalExpoCli ||\n ctx.env.EXPO_USE_LOCAL_CLI === '0' ||\n !ctx.appConfig.sdkVersion ||\n semver.satisfies(ctx.appConfig.sdkVersion, '<46')\n );\n}\n\nexport function readPackageJson(projectDir: string): any {\n const packageJsonPath = path.join(projectDir, 'package.json');\n if (!fs.pathExistsSync(packageJsonPath)) {\n throw new Error(`package.json does not exist in ${projectDir}`);\n }\n try {\n return fs.readJSONSync(packageJsonPath);\n } catch (err: any) {\n throw new Error(`Failed to parse or read package.json: ${err.message}`);\n }\n}\n"]}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,sEAAoF;AACpF,wDAA0B;AAC1B,oDAA4B;AAG5B,4DAA8E;AAE9E;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,oCAAmB,EAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;IACjF,OAAO,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;AACpF,CAAC;AAJD,oCAIC;AAED,SAAgB,iBAAiB,CAC/B,GAAuB,EACvB,IAAc,EACd,OAAqB,EACrB,EACE,qBAAqB,GAAG,KAAK,EAC7B,kBAAkB,GAC+C;IAEnE,IAAI,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,GAAG,EAAE,CAAC;YAC9C,OAAO,IAAA,sBAAK,EAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE,CAAC;YACtD,OAAO,IAAA,sBAAK,EAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE,CAAC;YACtD,OAAO,IAAA,sBAAK,EAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,GAAG,CAAC,cAAc,KAAK,+BAAc,CAAC,GAAG,EAAE,CAAC;YACrD,OAAO,IAAA,sBAAK,EAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;AACH,CAAC;AAzBD,8CAyBC;AAED,SAAgB,sBAAsB,CACpC,GAAuB,EACvB,qBAAqB,GAAG,KAAK;IAE7B,OAAO,CACL,qBAAqB;QACrB,GAAG,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;QAClC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU;QACzB,gBAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAClD,CAAC;AACJ,CAAC;AAVD,wDAUC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,CAAC,kBAAE,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,kBAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAVD,0CAUC","sourcesContent":["import path from 'path';\n\nimport { Job } from '@expo/eas-build-job';\nimport spawn, { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport semver from 'semver';\n\nimport { BuildContext } from '../context';\nimport { findPackagerRootDir, PackageManager } from '../utils/packageManager';\n\n/**\n * check if .yarnrc.yml exists in the project dir or in the workspace root dir\n */\nexport async function isUsingYarn2(projectDir: string): Promise<boolean> {\n const yarnrcPath = path.join(projectDir, '.yarnrc.yml');\n const yarnrcRootPath = path.join(findPackagerRootDir(projectDir), '.yarnrc.yml');\n return (await fs.pathExists(yarnrcPath)) || (await fs.pathExists(yarnrcRootPath));\n}\n\nexport function runExpoCliCommand<TJob extends Job>(\n ctx: BuildContext<TJob>,\n args: string[],\n options: SpawnOptions,\n {\n forceUseGlobalExpoCli = false,\n npmVersionAtLeast7,\n }: { forceUseGlobalExpoCli?: boolean; npmVersionAtLeast7: boolean }\n): SpawnPromise<SpawnResult> {\n if (shouldUseGlobalExpoCli(ctx, forceUseGlobalExpoCli)) {\n return ctx.runGlobalExpoCliCommand(args, options, npmVersionAtLeast7);\n } else {\n const argsWithExpo = ['expo', ...args];\n if (ctx.packageManager === PackageManager.NPM) {\n return spawn('npx', argsWithExpo, options);\n } else if (ctx.packageManager === PackageManager.YARN) {\n return spawn('yarn', argsWithExpo, options);\n } else if (ctx.packageManager === PackageManager.PNPM) {\n return spawn('pnpm', argsWithExpo, options);\n } else if (ctx.packageManager === PackageManager.BUN) {\n return spawn('bun', argsWithExpo, options);\n } else {\n throw new Error(`Unsupported package manager: ${ctx.packageManager}`);\n }\n }\n}\n\nexport function shouldUseGlobalExpoCli<TJob extends Job>(\n ctx: BuildContext<TJob>,\n forceUseGlobalExpoCli = false\n): boolean {\n return (\n forceUseGlobalExpoCli ||\n ctx.env.EXPO_USE_LOCAL_CLI === '0' ||\n !ctx.appConfig.sdkVersion ||\n semver.satisfies(ctx.appConfig.sdkVersion, '<46')\n );\n}\n\nexport function readPackageJson(projectDir: string): any {\n const packageJsonPath = path.join(projectDir, 'package.json');\n if (!fs.pathExistsSync(packageJsonPath)) {\n throw new Error(`package.json does not exist in ${projectDir}`);\n }\n try {\n return fs.readJSONSync(packageJsonPath);\n } catch (err: any) {\n throw new Error(`Failed to parse or read package.json: ${err.message}`);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/build-tools",
3
- "version": "1.0.56",
3
+ "version": "1.0.58",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -22,20 +22,20 @@
22
22
  "license": "BUSL-1.1",
23
23
  "dependencies": {
24
24
  "@expo/config": "^8.1.2",
25
- "@expo/config-plugins": "^7.2.4",
26
- "@expo/downloader": "1.0.37",
27
- "@expo/eas-build-job": "1.0.56",
25
+ "@expo/config-plugins": "^7.2.5",
26
+ "@expo/downloader": "1.0.57",
27
+ "@expo/eas-build-job": "1.0.57",
28
28
  "@expo/env": "^0.0.5",
29
- "@expo/logger": "1.0.52",
29
+ "@expo/logger": "1.0.57",
30
30
  "@expo/package-manager": "1.1.2",
31
31
  "@expo/plist": "^0.0.20",
32
- "@expo/steps": "1.0.55",
33
- "@expo/template-file": "1.0.37",
34
- "@expo/turtle-spawn": "1.0.52",
35
- "@expo/xcpretty": "^4.2.2",
36
- "fast-glob": "^3.3.1",
37
- "fs-extra": "^11.1.1",
38
- "joi": "^17.9.2",
32
+ "@expo/steps": "1.0.57",
33
+ "@expo/template-file": "1.0.57",
34
+ "@expo/turtle-spawn": "1.0.57",
35
+ "@expo/xcpretty": "^4.3.0",
36
+ "fast-glob": "^3.3.2",
37
+ "fs-extra": "^11.2.0",
38
+ "joi": "^17.11.0",
39
39
  "lodash": "^4.17.21",
40
40
  "node-forge": "^1.3.1",
41
41
  "nullthrows": "^1.1.1",
@@ -43,28 +43,28 @@
43
43
  "semver": "^7.5.4"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/fs-extra": "^11.0.1",
47
- "@types/jest": "^29.5.3",
48
- "@types/lodash": "^4.14.196",
49
- "@types/node": "^18.11.18",
50
- "@types/node-forge": "^1.3.1",
51
- "@types/plist": "^3.0.2",
52
- "@types/semver": "^7.5.0",
53
- "@types/uuid": "^9.0.2",
54
- "@types/xml2js": "^0.4.11",
55
- "jest": "^29.6.2",
56
- "memfs": "^4.2.0",
46
+ "@types/fs-extra": "^11.0.4",
47
+ "@types/jest": "^29.5.11",
48
+ "@types/lodash": "^4.14.202",
49
+ "@types/node": "20.11.0",
50
+ "@types/node-forge": "^1.3.11",
51
+ "@types/plist": "^3.0.5",
52
+ "@types/semver": "^7.5.6",
53
+ "@types/uuid": "^9.0.7",
54
+ "@types/xml2js": "^0.4.14",
55
+ "jest": "^29.7.0",
56
+ "memfs": "^4.6.0",
57
57
  "quill-delta": "^5.1.0",
58
58
  "rxjs": "^7.8.1",
59
59
  "ts-jest": "^29.1.1",
60
60
  "ts-mockito": "^2.6.1",
61
- "tslib": "^2.6.1",
62
- "typescript": "^5.1.6",
63
- "uuid": "^9.0.0"
61
+ "tslib": "^2.6.2",
62
+ "typescript": "^5.3.3",
63
+ "uuid": "^9.0.1"
64
64
  },
65
65
  "volta": {
66
- "node": "18.13.0",
67
- "yarn": "1.22.19"
66
+ "node": "20.11.0",
67
+ "yarn": "1.22.21"
68
68
  },
69
- "gitHead": "92de9713aa41d8d04bf4bf1903ccf8928d29b0f1"
69
+ "gitHead": "93e0e1146ac9a4f2b94db96604f0ea4048a89bb9"
70
70
  }