firebase-tools 15.0.0 → 15.2.0

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 (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +33 -36
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +47 -10
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +31 -31
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +47 -45
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +7 -4
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +67 -50
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serialExportUsers = exports.validateOptions = void 0;
3
+ exports.validateOptions = validateOptions;
4
+ exports.serialExportUsers = serialExportUsers;
4
5
  const os = require("os");
5
6
  const path = require("path");
6
7
  const apiv2_1 = require("./apiv2");
@@ -138,7 +139,6 @@ function validateOptions(options, fileName) {
138
139
  }
139
140
  return exportOptions;
140
141
  }
141
- exports.validateOptions = validateOptions;
142
142
  function createWriteUsersToFile() {
143
143
  let jsonSep = "";
144
144
  return (userList, format, writeStream) => {
@@ -158,7 +158,6 @@ function createWriteUsersToFile() {
158
158
  };
159
159
  }
160
160
  async function serialExportUsers(projectId, options) {
161
- var _a;
162
161
  if (!options.writeUsersToFile) {
163
162
  options.writeUsersToFile = createWriteUsersToFile();
164
163
  }
@@ -189,7 +188,7 @@ async function serialExportUsers(projectId, options) {
189
188
  }
190
189
  }
191
190
  catch (err) {
192
- if (((_a = err.original) === null || _a === void 0 ? void 0 : _a.code) === "ETIMEDOUT") {
191
+ if (err.original?.code === "ETIMEDOUT") {
193
192
  options.timeoutRetryCount++;
194
193
  if (options.timeoutRetryCount > 5) {
195
194
  return err;
@@ -204,4 +203,3 @@ async function serialExportUsers(projectId, options) {
204
203
  }
205
204
  }
206
205
  }
207
- exports.serialExportUsers = serialExportUsers;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serialImportUsers = exports.validateUserJson = exports.validateOptions = exports.transArrayToUser = void 0;
3
+ exports.transArrayToUser = transArrayToUser;
4
+ exports.validateOptions = validateOptions;
5
+ exports.validateUserJson = validateUserJson;
6
+ exports.serialImportUsers = serialImportUsers;
4
7
  const clc = require("colorette");
5
8
  const apiv2_1 = require("./apiv2");
6
9
  const api_1 = require("./api");
@@ -134,7 +137,6 @@ function transArrayToUser(arr) {
134
137
  }
135
138
  return user;
136
139
  }
137
- exports.transArrayToUser = transArrayToUser;
138
140
  function validateOptions(options) {
139
141
  const hashOptions = validateRequiredParameters(options);
140
142
  if (!hashOptions.valid) {
@@ -152,7 +154,6 @@ function validateOptions(options) {
152
154
  }
153
155
  return hashOptions;
154
156
  }
155
- exports.validateOptions = validateOptions;
156
157
  function validateRequiredParameters(options) {
157
158
  if (!options.hashAlgo) {
158
159
  utils.logWarning("No hash algorithm specified. Password users cannot be imported.");
@@ -271,7 +272,6 @@ function validateUserJson(userJson) {
271
272
  }
272
273
  return {};
273
274
  }
274
- exports.validateUserJson = validateUserJson;
275
275
  async function sendRequest(projectId, userList, hashOptions) {
276
276
  logger_1.logger.info("Starting importing " + userList.length + " account(s).");
277
277
  const postData = genUploadAccountPostBody(projectId, userList, hashOptions);
@@ -302,4 +302,3 @@ function serialImportUsers(projectId, hashOptions, userListArr, index) {
302
302
  }
303
303
  });
304
304
  }
305
- exports.serialImportUsers = serialImportUsers;
package/lib/api.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.storageOrigin = exports.runtimeconfigOrigin = exports.rulesOrigin = exports.resourceManagerOrigin = exports.crashlyticsApiOrigin = exports.messagingApiOrigin = exports.remoteConfigApiOrigin = exports.rtdbMetadataOrigin = exports.rtdbManagementOrigin = exports.realtimeOrigin = exports.extensionsTOSOrigin = exports.extensionsPublisherOrigin = exports.extensionsOrigin = exports.iamOrigin = exports.identityOrigin = exports.hostingOrigin = exports.googleOrigin = exports.pubsubOrigin = exports.cloudTasksOrigin = exports.cloudschedulerOrigin = exports.cloudbuildOrigin = exports.functionsDefaultRegion = exports.runOrigin = exports.functionsV2Origin = exports.functionsOrigin = exports.firestoreOrigin = exports.firestoreOriginOrEmulator = exports.firedataOrigin = exports.firebaseExtensionsRegistryOrigin = exports.firebaseApiOrigin = exports.eventarcOrigin = exports.dynamicLinksKey = exports.dynamicLinksOrigin = exports.consoleOrigin = exports.authManagementOrigin = exports.authOrigin = exports.apphostingGitHubAppInstallationURL = exports.apphostingP4SADomain = exports.apphostingOrigin = exports.appDistributionOrigin = exports.artifactRegistryDomain = exports.developerConnectP4SADomain = exports.developerConnectOrigin = exports.containerRegistryDomain = exports.cloudMonitoringOrigin = exports.cloudloggingOrigin = exports.cloudbillingOrigin = exports.clientSecret = exports.clientId = exports.authProxyOrigin = void 0;
4
- exports.setScopes = exports.getScopes = exports.cloudTestingOrigin = exports.appTestingOrigin = exports.cloudAiCompanionOrigin = exports.vertexAIOrigin = exports.cloudSQLAdminOrigin = exports.dataConnectLocalConnString = exports.dataconnectP4SADomain = exports.dataconnectOrigin = exports.githubClientSecret = exports.githubClientId = exports.computeOrigin = exports.secretManagerOrigin = exports.githubApiOrigin = exports.githubOrigin = exports.studioApiOrigin = exports.serviceUsageOrigin = exports.cloudRunApiOrigin = exports.hostingApiOrigin = exports.firebaseStorageOrigin = void 0;
4
+ exports.cloudTestingOrigin = exports.appTestingOrigin = exports.cloudAiCompanionOrigin = exports.vertexAIOrigin = exports.cloudSQLAdminOrigin = exports.dataConnectLocalConnString = exports.dataconnectP4SADomain = exports.dataconnectOrigin = exports.githubClientSecret = exports.githubClientId = exports.computeOrigin = exports.secretManagerOrigin = exports.githubApiOrigin = exports.githubOrigin = exports.studioApiOrigin = exports.serviceUsageOrigin = exports.cloudRunApiOrigin = exports.hostingApiOrigin = exports.firebaseStorageOrigin = void 0;
5
+ exports.getScopes = getScopes;
6
+ exports.setScopes = setScopes;
5
7
  const constants_1 = require("./emulator/constants");
6
8
  const logger_1 = require("./logger");
7
9
  const scopes = require("./scopes");
@@ -153,7 +155,6 @@ exports.cloudTestingOrigin = cloudTestingOrigin;
153
155
  function getScopes() {
154
156
  return Array.from(commandScopes);
155
157
  }
156
- exports.getScopes = getScopes;
157
158
  function setScopes(sps = []) {
158
159
  commandScopes = new Set([
159
160
  scopes.EMAIL,
@@ -166,4 +167,3 @@ function setScopes(sps = []) {
166
167
  }
167
168
  logger_1.logger.debug("> command requires scopes:", Array.from(commandScopes));
168
169
  }
169
- exports.setScopes = setScopes;
package/lib/apiv2.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Client = exports.getAccessToken = exports.setAccessToken = exports.setRefreshToken = exports.STANDARD_HEADERS = void 0;
3
+ exports.Client = exports.STANDARD_HEADERS = void 0;
4
+ exports.setRefreshToken = setRefreshToken;
5
+ exports.setAccessToken = setAccessToken;
6
+ exports.getAccessToken = getAccessToken;
4
7
  const url_1 = require("url");
5
8
  const stream_1 = require("stream");
6
9
  const proxy_agent_1 = require("proxy-agent");
@@ -28,11 +31,9 @@ let refreshToken = "";
28
31
  function setRefreshToken(token = "") {
29
32
  refreshToken = token;
30
33
  }
31
- exports.setRefreshToken = setRefreshToken;
32
34
  function setAccessToken(token = "") {
33
35
  accessToken = token;
34
36
  }
35
- exports.setAccessToken = setAccessToken;
36
37
  async function getAccessToken() {
37
38
  const valid = auth.haveValidTokens(refreshToken, []);
38
39
  const usingADC = !auth.loggedIn();
@@ -42,7 +43,6 @@ async function getAccessToken() {
42
43
  const data = await auth.getAccessToken(refreshToken, []);
43
44
  return data.access_token;
44
45
  }
45
- exports.getAccessToken = getAccessToken;
46
46
  function proxyURIFromEnv() {
47
47
  return (process.env.HTTPS_PROXY ||
48
48
  process.env.https_proxy ||
@@ -176,7 +176,6 @@ class Client {
176
176
  return `${this.opts.urlPrefix}${versionPath}${options.path}`;
177
177
  }
178
178
  async doRequest(options) {
179
- var _a;
180
179
  if (!options.path.startsWith("/")) {
181
180
  options.path = "/" + options.path;
182
181
  }
@@ -232,7 +231,7 @@ class Client {
232
231
  fetchOptions.body = JSON.stringify(options.body);
233
232
  }
234
233
  const operationOptions = {
235
- retries: ((_a = options.retryCodes) === null || _a === void 0 ? void 0 : _a.length) ? 1 : 2,
234
+ retries: options.retryCodes?.length ? 1 : 2,
236
235
  minTimeout: 1 * 1000,
237
236
  maxTimeout: 5 * 1000,
238
237
  };
@@ -248,7 +247,6 @@ class Client {
248
247
  const operation = retry.operation(operationOptions);
249
248
  return await new Promise((resolve, reject) => {
250
249
  operation.attempt(async (currentAttempt) => {
251
- var _a;
252
250
  let res;
253
251
  let body;
254
252
  try {
@@ -312,7 +310,7 @@ class Client {
312
310
  setAccessToken();
313
311
  setAccessToken(await getAccessToken());
314
312
  }
315
- if ((_a = options.retryCodes) === null || _a === void 0 ? void 0 : _a.includes(res.status)) {
313
+ if (options.retryCodes?.includes(res.status)) {
316
314
  const err = (0, responseToError_1.responseToError)({ statusCode: res.status }, body, fetchURL) || undefined;
317
315
  if (operation.retry(err)) {
318
316
  return;
@@ -331,11 +329,10 @@ class Client {
331
329
  });
332
330
  }
333
331
  logRequest(options) {
334
- var _a, _b;
335
332
  let queryParamsLog = "[none]";
336
333
  if (options.queryParams) {
337
334
  queryParamsLog = "[omitted]";
338
- if (!((_a = options.skipLog) === null || _a === void 0 ? void 0 : _a.queryParams)) {
335
+ if (!options.skipLog?.queryParams) {
339
336
  queryParamsLog =
340
337
  options.queryParams instanceof url_1.URLSearchParams
341
338
  ? options.queryParams.toString()
@@ -350,18 +347,17 @@ class Client {
350
347
  }
351
348
  if (options.body !== undefined) {
352
349
  let logBody = "[omitted]";
353
- if (!((_b = options.skipLog) === null || _b === void 0 ? void 0 : _b.body)) {
350
+ if (!options.skipLog?.body) {
354
351
  logBody = bodyToString(options.body);
355
352
  }
356
353
  logger_1.logger.debug(`>>> [apiv2][body] ${options.method} ${logURL} ${logBody}`);
357
354
  }
358
355
  }
359
356
  logResponse(res, body, options) {
360
- var _a;
361
357
  const logURL = this.requestURL(options);
362
358
  logger_1.logger.debug(`<<< [apiv2][status] ${options.method} ${logURL} ${res.status}`);
363
359
  let logBody = "[omitted]";
364
- if (!((_a = options.skipLog) === null || _a === void 0 ? void 0 : _a.resBody)) {
360
+ if (!options.skipLog?.resBody) {
365
361
  logBody = bodyToString(body);
366
362
  }
367
363
  logger_1.logger.debug(`<<< [apiv2][body] ${options.method} ${logURL} ${logBody}`);
package/lib/appUtils.js CHANGED
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectFiles = exports.extractAppIdentifiersAndroid = exports.extractAppIdentifierIos = exports.extractAppIdentifiersFlutter = exports.getAllDepsFromPackageJson = exports.detectApps = exports.getPlatformsFromFolder = exports.appDescription = exports.Framework = exports.Platform = void 0;
3
+ exports.Framework = exports.Platform = void 0;
4
+ exports.appDescription = appDescription;
5
+ exports.getPlatformsFromFolder = getPlatformsFromFolder;
6
+ exports.detectApps = detectApps;
7
+ exports.getAllDepsFromPackageJson = getAllDepsFromPackageJson;
8
+ exports.extractAppIdentifiersFlutter = extractAppIdentifiersFlutter;
9
+ exports.extractAppIdentifierIos = extractAppIdentifierIos;
10
+ exports.extractAppIdentifiersAndroid = extractAppIdentifiersAndroid;
11
+ exports.detectFiles = detectFiles;
4
12
  const fs = require("fs-extra");
5
13
  const path = require("path");
6
14
  const glob_1 = require("glob");
@@ -11,40 +19,36 @@ var Platform;
11
19
  Platform["IOS"] = "IOS";
12
20
  Platform["FLUTTER"] = "FLUTTER";
13
21
  Platform["ADMIN_NODE"] = "ADMIN_NODE";
14
- })(Platform = exports.Platform || (exports.Platform = {}));
22
+ })(Platform || (exports.Platform = Platform = {}));
15
23
  var Framework;
16
24
  (function (Framework) {
17
25
  Framework["REACT"] = "react";
18
26
  Framework["ANGULAR"] = "angular";
19
- })(Framework = exports.Framework || (exports.Framework = {}));
27
+ })(Framework || (exports.Framework = Framework = {}));
20
28
  function appDescription(a) {
21
29
  return `${a.directory} (${a.platform.toLowerCase()})`;
22
30
  }
23
- exports.appDescription = appDescription;
24
31
  async function getPlatformsFromFolder(dirPath) {
25
32
  const apps = await detectApps(dirPath);
26
33
  return [...new Set(apps.map((app) => app.platform))];
27
34
  }
28
- exports.getPlatformsFromFolder = getPlatformsFromFolder;
29
35
  async function detectApps(dirPath) {
30
- const packageJsonFiles = await detectFiles(dirPath, "package.json");
31
- const pubSpecYamlFiles = await detectFiles(dirPath, "pubspec.yaml");
32
- const srcMainFolders = await detectFiles(dirPath, "src/main/");
33
- const xCodeProjects = await detectFiles(dirPath, "*.xcodeproj/");
34
- const adminAndWebApps = (await Promise.all(packageJsonFiles.map((p) => packageJsonToAdminOrWebApp(dirPath, p)))).flat();
35
- const flutterAppPromises = await Promise.all(pubSpecYamlFiles.map((f) => processFlutterDir(dirPath, f)));
36
- const flutterApps = flutterAppPromises.flat();
37
- const androidAppPromises = await Promise.all(srcMainFolders.map((f) => processAndroidDir(dirPath, f)));
38
- const androidApps = androidAppPromises
39
- .flat()
40
- .filter((a) => !flutterApps.some((f) => isPathInside(f.directory, a.directory)));
41
- const iosAppPromises = await Promise.all(xCodeProjects.map((f) => processIosDir(dirPath, f)));
42
- const iosApps = iosAppPromises
43
- .flat()
44
- .filter((a) => !flutterApps.some((f) => isPathInside(f.directory, a.directory)));
36
+ const [packageJsonFiles, pubSpecYamlFiles, srcMainFolders, xCodeProjects] = await Promise.all([
37
+ detectFiles(dirPath, "package.json"),
38
+ detectFiles(dirPath, "pubspec.yaml"),
39
+ detectFiles(dirPath, "src/main/"),
40
+ detectFiles(dirPath, "*.xcodeproj/"),
41
+ ]);
42
+ const [adminAndWebApps, flutterApps, androidAppsRaw, iosAppsRaw] = await Promise.all([
43
+ Promise.all(packageJsonFiles.map((p) => packageJsonToAdminOrWebApp(dirPath, p))).then((r) => r.flat()),
44
+ Promise.all(pubSpecYamlFiles.map((f) => processFlutterDir(dirPath, f))).then((r) => r.flat()),
45
+ Promise.all(srcMainFolders.map((f) => processAndroidDir(dirPath, f))).then((r) => r.flat()),
46
+ Promise.all(xCodeProjects.map((f) => processIosDir(dirPath, f))).then((r) => r.flat()),
47
+ ]);
48
+ const androidApps = androidAppsRaw.filter((a) => !flutterApps.some((f) => isPathInside(f.directory, a.directory)));
49
+ const iosApps = iosAppsRaw.filter((a) => !flutterApps.some((f) => isPathInside(f.directory, a.directory)));
45
50
  return [...flutterApps, ...androidApps, ...iosApps, ...adminAndWebApps];
46
51
  }
47
- exports.detectApps = detectApps;
48
52
  async function processIosDir(dirPath, filePath) {
49
53
  const iosDir = path.dirname(filePath);
50
54
  const iosAppIds = await detectAppIdsForPlatform(dirPath, Platform.IOS);
@@ -110,13 +114,11 @@ function isPathInside(parent, child) {
110
114
  return !relativePath.startsWith(`..`);
111
115
  }
112
116
  function getAllDepsFromPackageJson(packageJson) {
113
- var _a, _b;
114
- const devDependencies = Object.keys((_a = packageJson.devDependencies) !== null && _a !== void 0 ? _a : {});
115
- const dependencies = Object.keys((_b = packageJson.dependencies) !== null && _b !== void 0 ? _b : {});
117
+ const devDependencies = Object.keys(packageJson.devDependencies ?? {});
118
+ const dependencies = Object.keys(packageJson.dependencies ?? {});
116
119
  const allDeps = Array.from(new Set([...devDependencies, ...dependencies]));
117
120
  return allDeps;
118
121
  }
119
- exports.getAllDepsFromPackageJson = getAllDepsFromPackageJson;
120
122
  async function packageJsonToAdminOrWebApp(dirPath, packageJsonFile) {
121
123
  try {
122
124
  const fullPath = path.join(dirPath, packageJsonFile);
@@ -186,43 +188,40 @@ function extractAppIdentifiersFlutter(fileContent) {
186
188
  const optionsContent = match[1];
187
189
  const appIdMatch = appIdRegex.exec(optionsContent);
188
190
  const bundleIdMatch = bundleIdRegex.exec(optionsContent);
189
- if (appIdMatch === null || appIdMatch === void 0 ? void 0 : appIdMatch[1]) {
191
+ if (appIdMatch?.[1]) {
190
192
  identifiers.push({
191
193
  appId: appIdMatch[1],
192
- bundleId: bundleIdMatch === null || bundleIdMatch === void 0 ? void 0 : bundleIdMatch[1],
194
+ bundleId: bundleIdMatch?.[1],
193
195
  });
194
196
  }
195
197
  }
196
198
  return identifiers;
197
199
  }
198
- exports.extractAppIdentifiersFlutter = extractAppIdentifiersFlutter;
199
200
  function extractAppIdentifierIos(fileContent) {
200
201
  const appIdRegex = /<key>GOOGLE_APP_ID<\/key>\s*<string>([^<]*)<\/string>/;
201
202
  const bundleIdRegex = /<key>BUNDLE_ID<\/key>\s*<string>([^<]*)<\/string>/;
202
203
  const appIdMatch = fileContent.match(appIdRegex);
203
204
  const bundleIdMatch = fileContent.match(bundleIdRegex);
204
- if (appIdMatch === null || appIdMatch === void 0 ? void 0 : appIdMatch[1]) {
205
+ if (appIdMatch?.[1]) {
205
206
  return [
206
207
  {
207
208
  appId: appIdMatch[1],
208
- bundleId: bundleIdMatch === null || bundleIdMatch === void 0 ? void 0 : bundleIdMatch[1],
209
+ bundleId: bundleIdMatch?.[1],
209
210
  },
210
211
  ];
211
212
  }
212
213
  return [];
213
214
  }
214
- exports.extractAppIdentifierIos = extractAppIdentifierIos;
215
215
  function extractAppIdentifiersAndroid(fileContent) {
216
- var _a, _b;
217
216
  const identifiers = [];
218
217
  try {
219
218
  const config = JSON.parse(fileContent);
220
219
  if (config.client && Array.isArray(config.client)) {
221
220
  for (const client of config.client) {
222
- if ((_a = client.client_info) === null || _a === void 0 ? void 0 : _a.mobilesdk_app_id) {
221
+ if (client.client_info?.mobilesdk_app_id) {
223
222
  identifiers.push({
224
223
  appId: client.client_info.mobilesdk_app_id,
225
- bundleId: (_b = client.client_info.android_client_info) === null || _b === void 0 ? void 0 : _b.package_name,
224
+ bundleId: client.client_info.android_client_info?.package_name,
226
225
  });
227
226
  }
228
227
  }
@@ -233,7 +232,6 @@ function extractAppIdentifiersAndroid(fileContent) {
233
232
  }
234
233
  return identifiers;
235
234
  }
236
- exports.extractAppIdentifiersAndroid = extractAppIdentifiersAndroid;
237
235
  async function detectFiles(dirPath, filePattern) {
238
236
  const options = {
239
237
  cwd: dirPath,
@@ -251,4 +249,3 @@ async function detectFiles(dirPath, filePattern) {
251
249
  };
252
250
  return (0, glob_1.glob)(`**/${filePattern}`, options);
253
251
  }
254
- exports.detectFiles = detectFiles;
@@ -69,7 +69,6 @@ class AppDistributionClient {
69
69
  utils.logSuccess("added release notes successfully");
70
70
  }
71
71
  async distribute(releaseName, testerEmails = [], groupAliases = []) {
72
- var _a, _b, _c;
73
72
  if (testerEmails.length === 0 && groupAliases.length === 0) {
74
73
  utils.logWarning("no testers or groups specified, skipping");
75
74
  return;
@@ -84,7 +83,7 @@ class AppDistributionClient {
84
83
  }
85
84
  catch (err) {
86
85
  let errorMessage = (0, error_1.getErrMsg)(err);
87
- const errorStatus = (_c = (_b = (_a = err === null || err === void 0 ? void 0 : err.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.status;
86
+ const errorStatus = err?.context?.body?.error?.status;
88
87
  if (errorStatus === "FAILED_PRECONDITION") {
89
88
  errorMessage = "invalid testers";
90
89
  }
@@ -98,7 +97,6 @@ class AppDistributionClient {
98
97
  utils.logSuccess("distributed to testers/groups successfully");
99
98
  }
100
99
  async listTesters(projectName, groupName) {
101
- var _a;
102
100
  const testers = [];
103
101
  const client = this.appDistroV1Client;
104
102
  const filter = groupName ? `groups=${projectName}/groups/${groupName}` : null;
@@ -117,7 +115,7 @@ class AppDistributionClient {
117
115
  catch (err) {
118
116
  throw new error_1.FirebaseError(`Client request failed to list testers ${(0, error_1.getErrMsg)(err)}`);
119
117
  }
120
- for (const t of (_a = apiResponse.body.testers) !== null && _a !== void 0 ? _a : []) {
118
+ for (const t of apiResponse.body.testers ?? []) {
121
119
  testers.push({
122
120
  name: t.name,
123
121
  displayName: t.displayName,
@@ -157,7 +155,6 @@ class AppDistributionClient {
157
155
  return apiResponse.body;
158
156
  }
159
157
  async listGroups(projectName) {
160
- var _a;
161
158
  const groups = [];
162
159
  const client = this.appDistroV1Client;
163
160
  let pageToken;
@@ -167,7 +164,7 @@ class AppDistributionClient {
167
164
  const apiResponse = await client.get(`${projectName}/groups`, {
168
165
  queryParams,
169
166
  });
170
- groups.push(...((_a = apiResponse.body.groups) !== null && _a !== void 0 ? _a : []));
167
+ groups.push(...(apiResponse.body.groups ?? []));
171
168
  pageToken = apiResponse.body.nextPageToken;
172
169
  }
173
170
  catch (err) {
@@ -251,7 +248,6 @@ class AppDistributionClient {
251
248
  return response.body;
252
249
  }
253
250
  async listTestCases(appName) {
254
- var _a;
255
251
  const testCases = [];
256
252
  const client = this.appDistroV1AlphaClient;
257
253
  let pageToken;
@@ -261,7 +257,7 @@ class AppDistributionClient {
261
257
  const apiResponse = await client.get(`${appName}/testCases`, {
262
258
  queryParams,
263
259
  });
264
- testCases.push(...((_a = apiResponse.body.testCases) !== null && _a !== void 0 ? _a : []));
260
+ testCases.push(...(apiResponse.body.testCases ?? []));
265
261
  pageToken = apiResponse.body.nextPageToken;
266
262
  }
267
263
  catch (err) {
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.awaitTestResults = exports.Distribution = exports.upload = exports.DistributionFileType = void 0;
3
+ exports.Distribution = exports.DistributionFileType = void 0;
4
+ exports.upload = upload;
5
+ exports.awaitTestResults = awaitTestResults;
4
6
  const fs = require("fs-extra");
5
7
  const logger_1 = require("../logger");
6
8
  const pathUtil = require("path");
@@ -14,7 +16,7 @@ var DistributionFileType;
14
16
  DistributionFileType["IPA"] = "ipa";
15
17
  DistributionFileType["APK"] = "apk";
16
18
  DistributionFileType["AAB"] = "aab";
17
- })(DistributionFileType = exports.DistributionFileType || (exports.DistributionFileType = {}));
19
+ })(DistributionFileType || (exports.DistributionFileType = DistributionFileType = {}));
18
20
  async function upload(requests, appName, distribution) {
19
21
  utils.logBullet("uploading binary...");
20
22
  try {
@@ -49,7 +51,6 @@ async function upload(requests, appName, distribution) {
49
51
  throw new error_1.FirebaseError(`Failed to upload release. ${(0, error_1.getErrMsg)(err)}`, { exit: 1 });
50
52
  }
51
53
  }
52
- exports.upload = upload;
53
54
  class Distribution {
54
55
  constructor(path) {
55
56
  this.path = path;
@@ -125,7 +126,6 @@ async function awaitTestResults(releaseTests, requests) {
125
126
  exit: 1,
126
127
  });
127
128
  }
128
- exports.awaitTestResults = awaitTestResults;
129
129
  function delay(ms) {
130
130
  return new Promise((resolve) => setTimeout(resolve, ms));
131
131
  }
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLoginCredential = exports.parseTestDevices = exports.toAppName = exports.getAppName = exports.getProjectName = exports.ensureFileExists = exports.getEmails = exports.parseIntoStringArray = void 0;
3
+ exports.parseIntoStringArray = parseIntoStringArray;
4
+ exports.getEmails = getEmails;
5
+ exports.ensureFileExists = ensureFileExists;
6
+ exports.getProjectName = getProjectName;
7
+ exports.getAppName = getAppName;
8
+ exports.toAppName = toAppName;
9
+ exports.parseTestDevices = parseTestDevices;
10
+ exports.getLoginCredential = getLoginCredential;
4
11
  const fs = require("fs-extra");
5
12
  const error_1 = require("../error");
6
13
  const projectUtils_1 = require("../projectUtils");
@@ -14,7 +21,6 @@ function parseIntoStringArray(value, file = "") {
14
21
  }
15
22
  return [];
16
23
  }
17
- exports.parseIntoStringArray = parseIntoStringArray;
18
24
  function getEmails(emails, file) {
19
25
  if (emails.length === 0) {
20
26
  ensureFileExists(file);
@@ -23,13 +29,11 @@ function getEmails(emails, file) {
23
29
  }
24
30
  return emails;
25
31
  }
26
- exports.getEmails = getEmails;
27
32
  function ensureFileExists(file, message = "") {
28
33
  if (!fs.existsSync(file)) {
29
34
  throw new error_1.FirebaseError(`File ${file} does not exist: ${message}`);
30
35
  }
31
36
  }
32
- exports.ensureFileExists = ensureFileExists;
33
37
  function splitter(value) {
34
38
  return value
35
39
  .split(/[,\n]/)
@@ -40,18 +44,15 @@ async function getProjectName(options) {
40
44
  const projectNumber = await (0, projectUtils_1.needProjectNumber)(options);
41
45
  return `projects/${projectNumber}`;
42
46
  }
43
- exports.getProjectName = getProjectName;
44
47
  function getAppName(options) {
45
48
  if (!options.app) {
46
49
  throw new error_1.FirebaseError("set the --app option to a valid Firebase app id and try again");
47
50
  }
48
51
  return toAppName(options.app);
49
52
  }
50
- exports.getAppName = getAppName;
51
53
  function toAppName(appId) {
52
54
  return `projects/${appId.split(":")[1]}/apps/${appId}`;
53
55
  }
54
- exports.toAppName = toAppName;
55
56
  function parseTestDevices(value, file = "") {
56
57
  if (!value && file) {
57
58
  ensureFileExists(file);
@@ -66,7 +67,6 @@ function parseTestDevices(value, file = "") {
66
67
  .filter((entry) => !!entry)
67
68
  .map((str) => parseTestDevice(str));
68
69
  }
69
- exports.parseTestDevices = parseTestDevices;
70
70
  function parseTestDevice(testDeviceString) {
71
71
  const entries = testDeviceString.split(",");
72
72
  const allowedKeys = new Set(["model", "version", "orientation", "locale"]);
@@ -127,7 +127,6 @@ function getLoginCredential(args) {
127
127
  }
128
128
  return loginCredential;
129
129
  }
130
- exports.getLoginCredential = getLoginCredential;
131
130
  function isPresenceMismatched(value1, value2) {
132
131
  return (value1 && !value2) || (!value1 && value2);
133
132
  }
@@ -10,11 +10,11 @@ var IntegrationState;
10
10
  IntegrationState["APP_NOT_PUBLISHED"] = "APP_NOT_PUBLISHED";
11
11
  IntegrationState["AAB_STATE_UNAVAILABLE"] = "AAB_STATE_UNAVAILABLE";
12
12
  IntegrationState["PLAY_IAS_TERMS_NOT_ACCEPTED"] = "PLAY_IAS_TERMS_NOT_ACCEPTED";
13
- })(IntegrationState = exports.IntegrationState || (exports.IntegrationState = {}));
13
+ })(IntegrationState || (exports.IntegrationState = IntegrationState = {}));
14
14
  var UploadReleaseResult;
15
15
  (function (UploadReleaseResult) {
16
16
  UploadReleaseResult["UPLOAD_RELEASE_RESULT_UNSPECIFIED"] = "UPLOAD_RELEASE_RESULT_UNSPECIFIED";
17
17
  UploadReleaseResult["RELEASE_CREATED"] = "RELEASE_CREATED";
18
18
  UploadReleaseResult["RELEASE_UPDATED"] = "RELEASE_UPDATED";
19
19
  UploadReleaseResult["RELEASE_UNMODIFIED"] = "RELEASE_UNMODIFIED";
20
- })(UploadReleaseResult = exports.UploadReleaseResult || (exports.UploadReleaseResult = {}));
20
+ })(UploadReleaseResult || (exports.UploadReleaseResult = UploadReleaseResult = {}));
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fromYaml = exports.toYaml = void 0;
3
+ exports.toYaml = toYaml;
4
+ exports.fromYaml = fromYaml;
4
5
  const jsYaml = require("js-yaml");
5
6
  const error_1 = require("../error");
6
7
  const ALLOWED_YAML_STEP_KEYS = new Set(["goal", "hint", "successCriteria"]);
@@ -11,18 +12,25 @@ const ALLOWED_YAML_TEST_CASE_KEYS = new Set([
11
12
  "steps",
12
13
  ]);
13
14
  function extractIdFromResourceName(name) {
14
- var _a;
15
- return (_a = name.split("/").pop()) !== null && _a !== void 0 ? _a : "";
15
+ return name.split("/").pop() ?? "";
16
16
  }
17
17
  function toYamlTestCases(testCases) {
18
- return testCases.map((testCase) => (Object.assign(Object.assign({ displayName: testCase.displayName, id: extractIdFromResourceName(testCase.name) }, (testCase.prerequisiteTestCase && {
19
- prerequisiteTestCaseId: extractIdFromResourceName(testCase.prerequisiteTestCase),
20
- })), { steps: testCase.aiInstructions.steps.map((step) => (Object.assign(Object.assign({ goal: step.goal }, (step.hint && { hint: step.hint })), (step.successCriteria && { successCriteria: step.successCriteria })))) })));
18
+ return testCases.map((testCase) => ({
19
+ displayName: testCase.displayName,
20
+ id: extractIdFromResourceName(testCase.name),
21
+ ...(testCase.prerequisiteTestCase && {
22
+ prerequisiteTestCaseId: extractIdFromResourceName(testCase.prerequisiteTestCase),
23
+ }),
24
+ steps: testCase.aiInstructions.steps.map((step) => ({
25
+ goal: step.goal,
26
+ ...(step.hint && { hint: step.hint }),
27
+ ...(step.successCriteria && { successCriteria: step.successCriteria }),
28
+ })),
29
+ }));
21
30
  }
22
31
  function toYaml(testCases) {
23
32
  return jsYaml.safeDump(toYamlTestCases(testCases));
24
33
  }
25
- exports.toYaml = toYaml;
26
34
  function castExists(it, thing) {
27
35
  if (it == null) {
28
36
  throw new error_1.FirebaseError(`"${thing}" is required`);
@@ -39,18 +47,27 @@ function checkAllowedKeys(allowedKeys, o) {
39
47
  function fromYamlTestCases(appName, yamlTestCases) {
40
48
  return yamlTestCases.map((yamlTestCase) => {
41
49
  checkAllowedKeys(ALLOWED_YAML_TEST_CASE_KEYS, yamlTestCase);
42
- return Object.assign(Object.assign({ displayName: castExists(yamlTestCase.displayName, "displayName"), aiInstructions: {
50
+ return {
51
+ displayName: castExists(yamlTestCase.displayName, "displayName"),
52
+ aiInstructions: {
43
53
  steps: castExists(yamlTestCase.steps, "steps").map((yamlStep) => {
44
54
  checkAllowedKeys(ALLOWED_YAML_STEP_KEYS, yamlStep);
45
- return Object.assign(Object.assign({ goal: castExists(yamlStep.goal, "goal") }, (yamlStep.hint && { hint: yamlStep.hint })), (yamlStep.successCriteria && {
46
- successCriteria: yamlStep.successCriteria,
47
- }));
55
+ return {
56
+ goal: castExists(yamlStep.goal, "goal"),
57
+ ...(yamlStep.hint && { hint: yamlStep.hint }),
58
+ ...(yamlStep.successCriteria && {
59
+ successCriteria: yamlStep.successCriteria,
60
+ }),
61
+ };
48
62
  }),
49
- } }, (yamlTestCase.id && {
50
- name: `${appName}/testCases/${yamlTestCase.id}`,
51
- })), (yamlTestCase.prerequisiteTestCaseId && {
52
- prerequisiteTestCase: `${appName}/testCases/${yamlTestCase.prerequisiteTestCaseId}`,
53
- }));
63
+ },
64
+ ...(yamlTestCase.id && {
65
+ name: `${appName}/testCases/${yamlTestCase.id}`,
66
+ }),
67
+ ...(yamlTestCase.prerequisiteTestCaseId && {
68
+ prerequisiteTestCase: `${appName}/testCases/${yamlTestCase.prerequisiteTestCaseId}`,
69
+ }),
70
+ };
54
71
  });
55
72
  }
56
73
  function fromYaml(appName, yaml) {
@@ -66,4 +83,3 @@ function fromYaml(appName, yaml) {
66
83
  }
67
84
  return fromYamlTestCases(appName, parsedYaml);
68
85
  }
69
- exports.fromYaml = fromYaml;