firebase-tools 15.1.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 +19 -21
  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 +1 -2
  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 +7 -7
  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 +18 -20
  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 +16 -23
  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 +3 -3
  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 +17 -9
  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,7 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureDataConnectTriggerRegion = void 0;
3
+ exports.ensureDataConnectTriggerRegion = ensureDataConnectTriggerRegion;
4
+ exports.getDataConnectP4SA = getDataConnectP4SA;
5
+ const api_1 = require("../../../api");
4
6
  const error_1 = require("../../../error");
7
+ const AUTOPUSH_DATACONNECT_SA_DOMAIN = "gcp-sa-autopush-dataconnect.iam.gserviceaccount.com";
8
+ const STAGING_DATACONNECT_SA_DOMAIN = "gcp-sa-staging-dataconnect.iam.gserviceaccount.com";
9
+ const PROD_DATACONNECT_SA_DOMAIN = "gcp-sa-firebasedataconnect.iam.gserviceaccount.com";
5
10
  function ensureDataConnectTriggerRegion(endpoint) {
6
11
  if (!endpoint.eventTrigger.region) {
7
12
  endpoint.eventTrigger.region = endpoint.region;
@@ -11,4 +16,13 @@ function ensureDataConnectTriggerRegion(endpoint) {
11
16
  }
12
17
  return Promise.resolve();
13
18
  }
14
- exports.ensureDataConnectTriggerRegion = ensureDataConnectTriggerRegion;
19
+ function getDataConnectP4SA(projectNumber) {
20
+ const origin = (0, api_1.dataconnectOrigin)();
21
+ if (origin.includes("autopush")) {
22
+ return `service-${projectNumber}@${AUTOPUSH_DATACONNECT_SA_DOMAIN}`;
23
+ }
24
+ if (origin.includes("staging")) {
25
+ return `service-${projectNumber}@${STAGING_DATACONNECT_SA_DOMAIN}`;
26
+ }
27
+ return `service-${projectNumber}@${PROD_DATACONNECT_SA_DOMAIN}`;
28
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureFirebaseAlertsTriggerRegion = void 0;
3
+ exports.ensureFirebaseAlertsTriggerRegion = ensureFirebaseAlertsTriggerRegion;
4
4
  const error_1 = require("../../../error");
5
5
  function ensureFirebaseAlertsTriggerRegion(endpoint) {
6
6
  if (!endpoint.eventTrigger.region) {
@@ -11,4 +11,3 @@ function ensureFirebaseAlertsTriggerRegion(endpoint) {
11
11
  }
12
12
  return Promise.resolve();
13
13
  }
14
- exports.ensureFirebaseAlertsTriggerRegion = ensureFirebaseAlertsTriggerRegion;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureFirestoreTriggerRegion = exports.clearCache = void 0;
3
+ exports.clearCache = clearCache;
4
+ exports.ensureFirestoreTriggerRegion = ensureFirestoreTriggerRegion;
4
5
  const firestore = require("../../../gcp/firestore");
5
6
  const error_1 = require("../../../error");
6
7
  const dbCache = new Map();
@@ -9,7 +10,6 @@ function clearCache() {
9
10
  dbCache.clear();
10
11
  dbPromiseCache.clear();
11
12
  }
12
- exports.clearCache = clearCache;
13
13
  async function getDatabase(project, databaseId) {
14
14
  const key = `${project}/${databaseId}`;
15
15
  if (dbCache.has(key)) {
@@ -33,8 +33,7 @@ async function getDatabase(project, databaseId) {
33
33
  return dbPromise;
34
34
  }
35
35
  async function ensureFirestoreTriggerRegion(endpoint) {
36
- var _a;
37
- const db = await getDatabase(endpoint.project, ((_a = endpoint.eventTrigger.eventFilters) === null || _a === void 0 ? void 0 : _a.database) || "(default)");
36
+ const db = await getDatabase(endpoint.project, endpoint.eventTrigger.eventFilters?.database || "(default)");
38
37
  const dbRegion = db.locationId;
39
38
  if (!endpoint.eventTrigger.region) {
40
39
  endpoint.eventTrigger.region = dbRegion;
@@ -43,4 +42,3 @@ async function ensureFirestoreTriggerRegion(endpoint) {
43
42
  throw new error_1.FirebaseError("A firestore trigger location must match the firestore database region.");
44
43
  }
45
44
  }
46
- exports.ensureFirestoreTriggerRegion = ensureFirestoreTriggerRegion;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serviceForEndpoint = exports.noopProjectBindings = exports.noop = void 0;
3
+ exports.noopProjectBindings = exports.noop = void 0;
4
+ exports.serviceForEndpoint = serviceForEndpoint;
4
5
  const backend = require("../backend");
5
6
  const auth_1 = require("./auth");
6
7
  const storage_1 = require("./storage");
@@ -131,4 +132,3 @@ function serviceForEndpoint(endpoint) {
131
132
  }
132
133
  return noOpService;
133
134
  }
134
- exports.serviceForEndpoint = serviceForEndpoint;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureRemoteConfigTriggerRegion = void 0;
3
+ exports.ensureRemoteConfigTriggerRegion = ensureRemoteConfigTriggerRegion;
4
4
  const error_1 = require("../../../error");
5
5
  function ensureRemoteConfigTriggerRegion(endpoint) {
6
6
  if (!endpoint.eventTrigger.region) {
@@ -11,4 +11,3 @@ function ensureRemoteConfigTriggerRegion(endpoint) {
11
11
  }
12
12
  return Promise.resolve();
13
13
  }
14
- exports.ensureRemoteConfigTriggerRegion = ensureRemoteConfigTriggerRegion;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureStorageTriggerRegion = exports.obtainStorageBindings = void 0;
3
+ exports.obtainStorageBindings = obtainStorageBindings;
4
+ exports.ensureStorageTriggerRegion = ensureStorageTriggerRegion;
4
5
  const storage = require("../../../gcp/storage");
5
6
  const logger_1 = require("../../../logger");
6
7
  const error_1 = require("../../../error");
@@ -15,13 +16,11 @@ async function obtainStorageBindings(projectNumber) {
15
16
  };
16
17
  return [pubsubPublisherBinding];
17
18
  }
18
- exports.obtainStorageBindings = obtainStorageBindings;
19
19
  async function ensureStorageTriggerRegion(endpoint) {
20
- var _a;
21
20
  const { eventTrigger } = endpoint;
22
21
  if (!eventTrigger.region) {
23
22
  logger_1.logger.debug("Looking up bucket region for the storage event trigger");
24
- if (!((_a = eventTrigger.eventFilters) === null || _a === void 0 ? void 0 : _a.bucket)) {
23
+ if (!eventTrigger.eventFilters?.bucket) {
25
24
  throw new error_1.FirebaseError("Error: storage event trigger is missing bucket filter: " +
26
25
  JSON.stringify(eventTrigger, null, 2));
27
26
  }
@@ -41,4 +40,3 @@ async function ensureStorageTriggerRegion(endpoint) {
41
40
  throw new error_1.FirebaseError(`A function in region ${endpoint.region} cannot listen to a bucket in region ${eventTrigger.region}`);
42
41
  }
43
42
  }
44
- exports.ensureStorageTriggerRegion = ensureStorageTriggerRegion;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureTestLabTriggerRegion = void 0;
3
+ exports.ensureTestLabTriggerRegion = ensureTestLabTriggerRegion;
4
4
  const error_1 = require("../../../error");
5
5
  function ensureTestLabTriggerRegion(endpoint) {
6
6
  if (!endpoint.eventTrigger.region) {
@@ -11,4 +11,3 @@ function ensureTestLabTriggerRegion(endpoint) {
11
11
  }
12
12
  return Promise.resolve();
13
13
  }
14
- exports.ensureTestLabTriggerRegion = ensureTestLabTriggerRegion;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureTriggerRegions = void 0;
3
+ exports.ensureTriggerRegions = ensureTriggerRegions;
4
4
  const backend = require("./backend");
5
5
  const services_1 = require("./services");
6
6
  async function ensureTriggerRegions(want) {
@@ -13,4 +13,3 @@ async function ensureTriggerRegions(want) {
13
13
  }
14
14
  await Promise.all(regionLookups);
15
15
  }
16
- exports.ensureTriggerRegions = ensureTriggerRegions;
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.secretsAreValid = exports.functionIdsAreValid = exports.functionsDirectoryExists = exports.endpointsAreUnique = exports.validateTimeoutConfig = exports.cpuConfigIsValid = exports.endpointsAreValid = exports.MAX_V2_SCHEDULE_ATTEMPT_DEADLINE_SECONDS = exports.DEFAULT_V2_SCHEDULE_ATTEMPT_DEADLINE_SECONDS = void 0;
3
+ exports.MAX_V2_SCHEDULE_ATTEMPT_DEADLINE_SECONDS = exports.DEFAULT_V2_SCHEDULE_ATTEMPT_DEADLINE_SECONDS = void 0;
4
+ exports.endpointsAreValid = endpointsAreValid;
5
+ exports.cpuConfigIsValid = cpuConfigIsValid;
6
+ exports.validateTimeoutConfig = validateTimeoutConfig;
7
+ exports.endpointsAreUnique = endpointsAreUnique;
8
+ exports.functionsDirectoryExists = functionsDirectoryExists;
9
+ exports.functionIdsAreValid = functionIdsAreValid;
10
+ exports.secretsAreValid = secretsAreValid;
4
11
  const path = require("path");
5
12
  const clc = require("colorette");
6
13
  const error_1 = require("../../error");
@@ -27,10 +34,9 @@ function matchingIds(endpoints, filter) {
27
34
  }
28
35
  const mem = (endpoint) => endpoint.availableMemoryMb || backend.DEFAULT_MEMORY;
29
36
  const cpu = (endpoint) => {
30
- var _a;
31
37
  return endpoint.cpu === "gcf_gen1"
32
38
  ? backend.memoryToGen1Cpu(mem(endpoint))
33
- : (_a = endpoint.cpu) !== null && _a !== void 0 ? _a : backend.memoryToGen2Cpu(mem(endpoint));
39
+ : endpoint.cpu ?? backend.memoryToGen2Cpu(mem(endpoint));
34
40
  };
35
41
  function validateScheduledTimeout(ep) {
36
42
  if (backend.isScheduleTriggered(ep) &&
@@ -69,7 +75,6 @@ function endpointsAreValid(wantBackend) {
69
75
  }
70
76
  cpuConfigIsValid(endpoints);
71
77
  }
72
- exports.endpointsAreValid = endpointsAreValid;
73
78
  function cpuConfigIsValid(endpoints) {
74
79
  const gcfV1WithCPU = matchingIds(endpoints, (endpoint) => endpoint.platform === "gcfv1" && typeof endpoint["cpu"] !== "undefined");
75
80
  if (gcfV1WithCPU.length) {
@@ -122,7 +127,6 @@ function cpuConfigIsValid(endpoints) {
122
127
  throw new error_1.FirebaseError(msg);
123
128
  }
124
129
  }
125
- exports.cpuConfigIsValid = cpuConfigIsValid;
126
130
  function validateTimeoutConfig(endpoints) {
127
131
  const invalidEndpoints = [];
128
132
  for (const ep of endpoints) {
@@ -143,7 +147,9 @@ function validateTimeoutConfig(endpoints) {
143
147
  else if (backend.isTaskQueueTriggered(ep)) {
144
148
  limit = MAX_V2_TASK_QUEUE_TIMEOUT_SECONDS;
145
149
  }
146
- else if (backend.isHttpsTriggered(ep) || backend.isCallableTriggered(ep)) {
150
+ else if (backend.isHttpsTriggered(ep) ||
151
+ backend.isCallableTriggered(ep) ||
152
+ backend.isDataConnectGraphqlTriggered(ep)) {
147
153
  limit = MAX_V2_HTTP_TIMEOUT_SECONDS;
148
154
  }
149
155
  if (limit !== undefined && timeout > limit) {
@@ -162,7 +168,6 @@ function validateTimeoutConfig(endpoints) {
162
168
  "\n\nFor more information, see https://firebase.google.com/docs/functions/quotas#time_limits";
163
169
  throw new error_1.FirebaseError(msg);
164
170
  }
165
- exports.validateTimeoutConfig = validateTimeoutConfig;
166
171
  function endpointsAreUnique(backends) {
167
172
  const endpointToCodebases = {};
168
173
  for (const [codebase, b] of Object.entries(backends)) {
@@ -185,7 +190,6 @@ function endpointsAreUnique(backends) {
185
190
  const msgs = Object.entries(conflicts).map(([fn, codebases]) => `${fn}: ${codebases.join(",")}`);
186
191
  throw new error_1.FirebaseError("More than one codebase claims following functions:\n\t" + `${msgs.join("\n\t")}`);
187
192
  }
188
- exports.endpointsAreUnique = endpointsAreUnique;
189
193
  function functionsDirectoryExists(sourceDir, projectDir) {
190
194
  if (!fsutils.dirExistsSync(sourceDir)) {
191
195
  const sourceDirName = path.relative(projectDir, sourceDir);
@@ -194,7 +198,6 @@ function functionsDirectoryExists(sourceDir, projectDir) {
194
198
  throw new error_1.FirebaseError(msg);
195
199
  }
196
200
  }
197
- exports.functionsDirectoryExists = functionsDirectoryExists;
198
201
  function functionIdsAreValid(functions) {
199
202
  const functionName = /^[a-zA-Z][a-zA-Z0-9_-]{0,62}$/;
200
203
  const invalidIds = functions.filter((fn) => !functionName.test(fn.id));
@@ -204,7 +207,6 @@ function functionIdsAreValid(functions) {
204
207
  throw new error_1.FirebaseError(msg);
205
208
  }
206
209
  }
207
- exports.functionIdsAreValid = functionIdsAreValid;
208
210
  async function secretsAreValid(projectId, wantBackend) {
209
211
  const endpoints = backend
210
212
  .allEndpoints(wantBackend)
@@ -212,7 +214,6 @@ async function secretsAreValid(projectId, wantBackend) {
212
214
  validatePlatformTargets(endpoints);
213
215
  await validateSecretVersions(projectId, endpoints);
214
216
  }
215
- exports.secretsAreValid = secretsAreValid;
216
217
  const secretsSupportedPlatforms = ["gcfv1", "gcfv2"];
217
218
  function validatePlatformTargets(endpoints) {
218
219
  const unsupported = endpoints.filter((e) => !secretsSupportedPlatforms.includes(e.platform));
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertConfig = exports.findEndpointForRewrite = void 0;
3
+ exports.findEndpointForRewrite = findEndpointForRewrite;
4
+ exports.convertConfig = convertConfig;
4
5
  const error_1 = require("../../error");
5
6
  const backend = require("../functions/backend");
6
7
  const utils_1 = require("../../utils");
@@ -58,11 +59,9 @@ function findEndpointForRewrite(site, targetBackend, id, region) {
58
59
  foundMatchingId: true,
59
60
  };
60
61
  }
61
- exports.findEndpointForRewrite = findEndpointForRewrite;
62
62
  async function convertConfig(context, functionsPayload, deploy) {
63
- var _a, _b, _c, _d;
64
63
  const config = {};
65
- const hasBackends = !!((_a = deploy.config.rewrites) === null || _a === void 0 ? void 0 : _a.some((r) => "function" in r || "run" in r));
64
+ const hasBackends = !!deploy.config.rewrites?.some((r) => "function" in r || "run" in r);
66
65
  const wantBackend = backend.merge(...Object.values(functionsPayload.functions || {}).map((c) => c.wantBackend));
67
66
  let haveBackend = backend.empty();
68
67
  if (hasBackends) {
@@ -80,11 +79,13 @@ async function convertConfig(context, functionsPayload, deploy) {
80
79
  }
81
80
  }
82
81
  }
83
- config.rewrites = (_b = deploy.config.rewrites) === null || _b === void 0 ? void 0 : _b.map((rewrite) => {
84
- var _a;
82
+ config.rewrites = deploy.config.rewrites?.map((rewrite) => {
85
83
  const target = extractPattern("rewrite", rewrite);
86
84
  if ("destination" in rewrite) {
87
- return Object.assign(Object.assign({}, target), { path: rewrite.destination });
85
+ return {
86
+ ...target,
87
+ path: rewrite.destination,
88
+ };
88
89
  }
89
90
  if ("function" in rewrite) {
90
91
  if (typeof rewrite.function === "string") {
@@ -98,14 +99,14 @@ async function convertConfig(context, functionsPayload, deploy) {
98
99
  : undefined;
99
100
  const endpoint = deployingEndpointSearch.matchingEndpoint
100
101
  ? deployingEndpointSearch.matchingEndpoint
101
- : existingEndpointSearch === null || existingEndpointSearch === void 0 ? void 0 : existingEndpointSearch.matchingEndpoint;
102
+ : existingEndpointSearch?.matchingEndpoint;
102
103
  if (!endpoint) {
103
- if (deployingEndpointSearch.foundMatchingId || (existingEndpointSearch === null || existingEndpointSearch === void 0 ? void 0 : existingEndpointSearch.foundMatchingId)) {
104
+ if (deployingEndpointSearch.foundMatchingId || existingEndpointSearch?.foundMatchingId) {
104
105
  throw new error_1.FirebaseError(`Unable to find a valid endpoint for function. Functions matching the rewrite
105
106
  are present but in the wrong region.`);
106
107
  }
107
108
  (0, utils_1.logLabeledWarning)(`hosting[${deploy.config.site}]`, `Unable to find a valid endpoint for function \`${id}\`, but still including it in the config`);
108
- const apiRewrite = Object.assign(Object.assign({}, target), { function: id });
109
+ const apiRewrite = { ...target, function: id };
109
110
  if (region) {
110
111
  apiRewrite.functionRegion = region;
111
112
  }
@@ -118,12 +119,19 @@ async function convertConfig(context, functionsPayload, deploy) {
118
119
  if (rewrite.function.pinTag) {
119
120
  throw new error_1.FirebaseError(`Function ${endpoint.id} is a 1st gen function and therefore does not support the ${(0, colorette_1.bold)("pinTag")} option`);
120
121
  }
121
- return Object.assign(Object.assign({}, target), { function: endpoint.id, functionRegion: endpoint.region });
122
+ return {
123
+ ...target,
124
+ function: endpoint.id,
125
+ functionRegion: endpoint.region,
126
+ };
122
127
  }
123
- const apiRewrite = Object.assign(Object.assign({}, target), { run: {
124
- serviceId: (_a = endpoint.runServiceId) !== null && _a !== void 0 ? _a : endpoint.id,
128
+ const apiRewrite = {
129
+ ...target,
130
+ run: {
131
+ serviceId: endpoint.runServiceId ?? endpoint.id,
125
132
  region: endpoint.region,
126
- } });
133
+ },
134
+ };
127
135
  if (rewrite.function.pinTag) {
128
136
  if (endpoint.minInstances) {
129
137
  throw new error_1.FirebaseError(`Function ${endpoint.id} has minInstances set and is in a rewrite ` +
@@ -139,13 +147,16 @@ async function convertConfig(context, functionsPayload, deploy) {
139
147
  if (!rewrite.dynamicLinks) {
140
148
  throw new error_1.FirebaseError("Can only set dynamicLinks to true in a rewrite");
141
149
  }
142
- return Object.assign(Object.assign({}, target), { dynamicLinks: true });
150
+ return { ...target, dynamicLinks: true };
143
151
  }
144
152
  if ("run" in rewrite) {
145
- const apiRewrite = Object.assign(Object.assign({}, target), { run: {
153
+ const apiRewrite = {
154
+ ...target,
155
+ run: {
146
156
  serviceId: rewrite.run.serviceId,
147
157
  region: rewrite.run.region || "us-central1",
148
- } });
158
+ },
159
+ };
149
160
  if (rewrite.run.pinTag) {
150
161
  experiments.assertEnabled("pintags", "pin to a run service revision");
151
162
  apiRewrite.run.tag = runTags.TODO_TAG_NAME;
@@ -164,23 +175,28 @@ async function convertConfig(context, functionsPayload, deploy) {
164
175
  const versionId = (0, utils_1.last)(deploy.version.split("/"));
165
176
  await runTags.setRewriteTags(config.rewrites, context.projectId, versionId);
166
177
  }
167
- config.redirects = (_c = deploy.config.redirects) === null || _c === void 0 ? void 0 : _c.map((redirect) => {
168
- const apiRedirect = Object.assign(Object.assign({}, extractPattern("redirect", redirect)), { location: redirect.destination });
178
+ config.redirects = deploy.config.redirects?.map((redirect) => {
179
+ const apiRedirect = {
180
+ ...extractPattern("redirect", redirect),
181
+ location: redirect.destination,
182
+ };
169
183
  if (redirect.type) {
170
184
  apiRedirect.statusCode = redirect.type;
171
185
  }
172
186
  return apiRedirect;
173
187
  });
174
- config.headers = (_d = deploy.config.headers) === null || _d === void 0 ? void 0 : _d.map((header) => {
188
+ config.headers = deploy.config.headers?.map((header) => {
175
189
  const headers = {};
176
190
  for (const { key, value } of header.headers || []) {
177
191
  headers[key] = value;
178
192
  }
179
- return Object.assign(Object.assign({}, extractPattern("header", header)), { headers });
193
+ return {
194
+ ...extractPattern("header", header),
195
+ headers,
196
+ };
180
197
  });
181
198
  proto.copyIfPresent(config, deploy.config, "cleanUrls", "appAssociation", "i18n");
182
199
  proto.convertIfPresent(config, deploy.config, "trailingSlashBehavior", "trailingSlash", (b) => b ? "ADD" : "REMOVE");
183
200
  proto.pruneUndefiends(config);
184
201
  return config;
185
202
  }
186
- exports.convertConfig = convertConfig;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deploy = void 0;
3
+ exports.deploy = deploy;
4
4
  const uploader_1 = require("./uploader");
5
5
  const detectProjectRoot_1 = require("../../detectProjectRoot");
6
6
  const listFiles_1 = require("../../listFiles");
@@ -11,8 +11,7 @@ const ora = require("ora");
11
11
  const fsutils_1 = require("../../fsutils");
12
12
  const error_1 = require("../../error");
13
13
  async function deploy(context, options) {
14
- var _a, _b;
15
- if (!((_a = context.hosting) === null || _a === void 0 ? void 0 : _a.deploys)) {
14
+ if (!context.hosting?.deploys) {
16
15
  return;
17
16
  }
18
17
  const spinner = ora();
@@ -25,12 +24,11 @@ async function deploy(context, options) {
25
24
  }
26
25
  }
27
26
  async function runDeploys(deploys, debugging) {
28
- var _a;
29
27
  const deploy = deploys.shift();
30
28
  if (!deploy) {
31
29
  return;
32
30
  }
33
- if (!((_a = deploy.config) === null || _a === void 0 ? void 0 : _a.public)) {
31
+ if (!deploy.config?.public) {
34
32
  (0, utils_1.logLabeledBullet)(`hosting[${deploy.config.site}]`, 'no "public" directory to upload, continuing with release');
35
33
  return runDeploys(deploys, debugging);
36
34
  }
@@ -79,7 +77,6 @@ async function deploy(context, options) {
79
77
  return runDeploys(deploys, debugging);
80
78
  }
81
79
  const debugging = !!(options.debug || options.nonInteractive);
82
- const deploys = [...(((_b = context.hosting) === null || _b === void 0 ? void 0 : _b.deploys) || [])];
80
+ const deploys = [...(context.hosting?.deploys || [])];
83
81
  return runDeploys(deploys, debugging);
84
82
  }
85
- exports.deploy = deploy;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dump = exports.load = void 0;
3
+ exports.load = load;
4
+ exports.dump = dump;
4
5
  const fs = require("fs-extra");
5
6
  const path = require("path");
6
7
  const logger_1 = require("../../logger");
@@ -29,7 +30,6 @@ function load(cwd, name) {
29
30
  return new Map();
30
31
  }
31
32
  }
32
- exports.load = load;
33
33
  function dump(cwd, name, data) {
34
34
  let st = "";
35
35
  let count = 0;
@@ -45,4 +45,3 @@ function dump(cwd, name, data) {
45
45
  logger_1.logger.debug(`[hosting] unable to store hash cache [${name}]: ${e.stack}`);
46
46
  }
47
47
  }
48
- exports.dump = dump;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unsafePins = exports.prepare = exports.addPinnedFunctionsToOnlyString = exports.hasPinnedFunctions = void 0;
3
+ exports.hasPinnedFunctions = hasPinnedFunctions;
4
+ exports.addPinnedFunctionsToOnlyString = addPinnedFunctionsToOnlyString;
5
+ exports.prepare = prepare;
6
+ exports.unsafePins = unsafePins;
4
7
  const error_1 = require("../../error");
5
8
  const api = require("../../hosting/api");
6
9
  const config = require("../../hosting/config");
@@ -31,9 +34,7 @@ function hasPinnedFunctions(options) {
31
34
  }
32
35
  return false;
33
36
  }
34
- exports.hasPinnedFunctions = hasPinnedFunctions;
35
37
  async function addPinnedFunctionsToOnlyString(context, options) {
36
- var _a;
37
38
  if (!options.only) {
38
39
  return false;
39
40
  }
@@ -45,7 +46,7 @@ async function addPinnedFunctionsToOnlyString(context, options) {
45
46
  if (!("function" in r) || typeof r.function !== "object" || !r.function.pinTag) {
46
47
  continue;
47
48
  }
48
- const endpoint = (_a = (await backend.existingBackend(context)).endpoints[r.function.region || "us-central1"]) === null || _a === void 0 ? void 0 : _a[r.function.functionId];
49
+ const endpoint = (await backend.existingBackend(context)).endpoints[r.function.region || "us-central1"]?.[r.function.functionId];
49
50
  if (endpoint) {
50
51
  options.only = (0, ensureTargeted_1.ensureTargeted)(options.only, endpoint.codebase || "default", endpoint.id);
51
52
  }
@@ -66,7 +67,6 @@ async function addPinnedFunctionsToOnlyString(context, options) {
66
67
  }
67
68
  return addedFunctions.length !== 0;
68
69
  }
69
- exports.addPinnedFunctionsToOnlyString = addPinnedFunctionsToOnlyString;
70
70
  async function prepare(context, options) {
71
71
  handlePublicDirectoryFlag(options);
72
72
  const configs = config.hostingConfig(options);
@@ -74,8 +74,9 @@ async function prepare(context, options) {
74
74
  return Promise.resolve();
75
75
  }
76
76
  const versions = await Promise.all(configs.map(async (config) => {
77
- var _a, _b;
78
- const labels = Object.assign({}, deploymentTool.labels());
77
+ const labels = {
78
+ ...deploymentTool.labels(),
79
+ };
79
80
  if (config.webFramework) {
80
81
  labels["firebase-web-framework"] = config.webFramework;
81
82
  }
@@ -88,8 +89,10 @@ async function prepare(context, options) {
88
89
  utils.logLabeledError("Hosting", msg);
89
90
  throw new Error(msg);
90
91
  }
91
- const runPins = (_b = (_a = config.rewrites) === null || _a === void 0 ? void 0 : _a.filter((r) => "run" in r && r.run.pinTag)) === null || _b === void 0 ? void 0 : _b.map((r) => r.run.serviceId);
92
- if (runPins === null || runPins === void 0 ? void 0 : runPins.length) {
92
+ const runPins = config.rewrites
93
+ ?.filter((r) => "run" in r && r.run.pinTag)
94
+ ?.map((r) => r.run.serviceId);
95
+ if (runPins?.length) {
93
96
  utils.logLabeledBullet("hosting", `The site ${clc.bold(config.site)} will pin rewrites to the current ` +
94
97
  `latest revision of service(s) ${runPins.map(clc.bold).join(",")}`);
95
98
  }
@@ -112,7 +115,6 @@ async function prepare(context, options) {
112
115
  context.hosting.deploys.push({ config, version });
113
116
  }
114
117
  }
115
- exports.prepare = prepare;
116
118
  function rewriteTarget(source) {
117
119
  if ("glob" in source) {
118
120
  return source.glob;
@@ -128,7 +130,6 @@ function rewriteTarget(source) {
128
130
  }
129
131
  }
130
132
  async function unsafePins(context, config) {
131
- var _a, _b, _c, _d;
132
133
  if ((context.hostingChannel || "live") === "live") {
133
134
  return [];
134
135
  }
@@ -140,7 +141,7 @@ async function unsafePins(context, config) {
140
141
  }
141
142
  if ("function" in rewrite && typeof rewrite.function === "object" && rewrite.function.pinTag) {
142
143
  const region = rewrite.function.region || "us-central1";
143
- const endpoint = (_a = (await backend.existingBackend(context)).endpoints[region]) === null || _a === void 0 ? void 0 : _a[rewrite.function.functionId];
144
+ const endpoint = (await backend.existingBackend(context)).endpoints[region]?.[rewrite.function.functionId];
144
145
  if (!endpoint) {
145
146
  continue;
146
147
  }
@@ -152,7 +153,7 @@ async function unsafePins(context, config) {
152
153
  }
153
154
  const channelConfig = await api.getChannel(context.projectId, config.site, "live");
154
155
  const existingUntaggedRewrites = {};
155
- for (const rewrite of ((_d = (_c = (_b = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.release) === null || _b === void 0 ? void 0 : _b.version) === null || _c === void 0 ? void 0 : _c.config) === null || _d === void 0 ? void 0 : _d.rewrites) || []) {
156
+ for (const rewrite of channelConfig?.release?.version?.config?.rewrites || []) {
156
157
  if ("run" in rewrite && !rewrite.run.tag) {
157
158
  existingUntaggedRewrites[rewriteTarget(rewrite)] =
158
159
  `${rewrite.run.region}/${rewrite.run.serviceId}`;
@@ -160,4 +161,3 @@ async function unsafePins(context, config) {
160
161
  }
161
162
  return Object.keys(targetTaggedRewrites).filter((target) => targetTaggedRewrites[target] === existingUntaggedRewrites[target]);
162
163
  }
163
- exports.unsafePins = unsafePins;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.release = void 0;
3
+ exports.release = release;
4
4
  const api = require("../../hosting/api");
5
5
  const logger_1 = require("../../logger");
6
6
  const utils = require("../../utils");
@@ -37,4 +37,3 @@ async function release(context, options, functionsPayload) {
37
37
  utils.logLabeledSuccess(`hosting[${deploy.config.site}]`, "release complete");
38
38
  }));
39
39
  }
40
- exports.release = release;
@@ -48,7 +48,7 @@ const isDeployingWebFramework = (options) => {
48
48
  if (!config)
49
49
  return false;
50
50
  const normalizedConfig = Array.isArray(config) ? config : [config];
51
- const webFrameworksInConfig = normalizedConfig.filter((c) => c === null || c === void 0 ? void 0 : c.source);
51
+ const webFrameworksInConfig = normalizedConfig.filter((c) => c?.source);
52
52
  if (webFrameworksInConfig.length === 0)
53
53
  return false;
54
54
  if (!options.only)
@@ -64,7 +64,6 @@ const isDeployingWebFramework = (options) => {
64
64
  };
65
65
  exports.isDeployingWebFramework = isDeployingWebFramework;
66
66
  const deploy = async function (targetNames, options, customContext = {}) {
67
- var _a, _b, _c, _d;
68
67
  const projectId = (0, projectUtils_1.needProjectId)(options);
69
68
  const payload = {};
70
69
  const context = Object.assign({ projectId }, customContext);
@@ -145,10 +144,10 @@ const deploy = async function (targetNames, options, customContext = {}) {
145
144
  params[t] = "true";
146
145
  }
147
146
  void (0, track_1.trackGA4)("product_deploy", params, duration);
148
- const stats = (_a = context === null || context === void 0 ? void 0 : context.dataconnect) === null || _a === void 0 ? void 0 : _a.deployStats;
147
+ const stats = context?.dataconnect?.deployStats;
149
148
  if (stats) {
150
149
  const fdcParams = (0, context_1.deployStatsParams)(stats);
151
- void (0, track_1.trackGA4)("dataconnect_deploy", Object.assign(Object.assign({}, fdcParams), baseParams), duration);
150
+ void (0, track_1.trackGA4)("dataconnect_deploy", { ...fdcParams, ...baseParams }, duration);
152
151
  }
153
152
  }
154
153
  const successMessage = options.dryRun ? "Dry run complete!" : "Deploy complete!";
@@ -156,13 +155,13 @@ const deploy = async function (targetNames, options, customContext = {}) {
156
155
  (0, utils_1.logSuccess)((0, colorette_1.bold)((0, colorette_1.underline)(successMessage)));
157
156
  logger_1.logger.info();
158
157
  const deployedHosting = (0, lodash_1.includes)(targetNames, "hosting");
159
- logger_1.logger.info((0, colorette_1.bold)("Project Console:"), (0, utils_1.consoleUrl)((_b = options.project) !== null && _b !== void 0 ? _b : "_", "/overview"));
158
+ logger_1.logger.info((0, colorette_1.bold)("Project Console:"), (0, utils_1.consoleUrl)(options.project ?? "_", "/overview"));
160
159
  if (deployedHosting) {
161
- (0, lodash_1.each)((_c = context.hosting) === null || _c === void 0 ? void 0 : _c.deploys, (deploy) => {
160
+ (0, lodash_1.each)(context.hosting?.deploys, (deploy) => {
162
161
  logger_1.logger.info((0, colorette_1.bold)("Hosting URL:"), (0, utils_1.addSubdomain)((0, api_1.hostingOrigin)(), deploy.config.site));
163
162
  });
164
- const versionNames = (_d = context.hosting) === null || _d === void 0 ? void 0 : _d.deploys.map((deploy) => deploy.version);
165
- return { hosting: (versionNames === null || versionNames === void 0 ? void 0 : versionNames.length) === 1 ? versionNames[0] : versionNames };
163
+ const versionNames = context.hosting?.deploys.map((deploy) => deploy.version);
164
+ return { hosting: versionNames?.length === 1 ? versionNames[0] : versionNames };
166
165
  }
167
166
  else {
168
167
  return { hosting: undefined };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.lifecycleHooks = void 0;
3
+ exports.lifecycleHooks = lifecycleHooks;
4
4
  const utils = require("../utils");
5
5
  const clc = require("colorette");
6
6
  const childProcess = require("child_process");
@@ -44,13 +44,12 @@ function runCommand(command, childOptions) {
44
44
  });
45
45
  }
46
46
  function getChildEnvironment(target, overallOptions, config) {
47
- var _a;
48
47
  const projectId = needProjectId(overallOptions);
49
48
  const projectDir = overallOptions.projectRoot;
50
49
  let resourceDir;
51
50
  switch (target) {
52
51
  case "hosting":
53
- resourceDir = overallOptions.config.path((_a = config.public) !== null && _a !== void 0 ? _a : config.source);
52
+ resourceDir = overallOptions.config.path(config.public ?? config.source);
54
53
  break;
55
54
  case "functions":
56
55
  resourceDir = overallOptions.config.path(config.source);
@@ -120,7 +119,7 @@ function getReleventConfigs(target, options) {
120
119
  });
121
120
  if (target === "functions") {
122
121
  let onlyConfigs = [];
123
- const matched = onlyTargets.reduce((matched, target) => (Object.assign(Object.assign({}, matched), { [target]: false })), {});
122
+ const matched = onlyTargets.reduce((matched, target) => ({ ...matched, [target]: false }), {});
124
123
  for (const config of targetConfigs) {
125
124
  if (!config.codebase) {
126
125
  onlyConfigs.push(config);
@@ -153,4 +152,3 @@ function lifecycleHooks(target, hook) {
153
152
  }, Promise.resolve());
154
153
  };
155
154
  }
156
- exports.lifecycleHooks = lifecycleHooks;
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- async function default_1() { }
4
3
  exports.default = default_1;
4
+ async function default_1() { }