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
@@ -17,7 +17,6 @@ exports.command = new command_1.Command("dataconnect:services:list")
17
17
  "dataconnect.connectors.list",
18
18
  ])
19
19
  .action(async (options) => {
20
- var _a, _b, _c, _d, _e, _f, _g, _h;
21
20
  const projectId = (0, projectUtils_1.needProjectId)(options);
22
21
  await (0, ensureApis_1.ensureApis)(projectId);
23
22
  const services = await client.listAllServices(projectId);
@@ -34,23 +33,23 @@ exports.command = new command_1.Command("dataconnect:services:list")
34
33
  });
35
34
  const jsonOutput = { services: [] };
36
35
  for (const service of services) {
37
- const schema = (_a = (await client.getSchema(service.name))) !== null && _a !== void 0 ? _a : {
36
+ const schema = (await client.getSchema(service.name)) ?? {
38
37
  name: "",
39
38
  datasources: [{}],
40
39
  source: { files: [] },
41
40
  };
42
41
  const connectors = await client.listConnectors(service.name);
43
42
  const serviceName = names.parseServiceName(service.name);
44
- const postgresDatasource = schema === null || schema === void 0 ? void 0 : schema.datasources.find((d) => d.postgresql);
45
- const instanceName = (_d = (_c = (_b = postgresDatasource === null || postgresDatasource === void 0 ? void 0 : postgresDatasource.postgresql) === null || _b === void 0 ? void 0 : _b.cloudSql) === null || _c === void 0 ? void 0 : _c.instance) !== null && _d !== void 0 ? _d : "";
43
+ const postgresDatasource = schema?.datasources.find((d) => d.postgresql);
44
+ const instanceName = postgresDatasource?.postgresql?.cloudSql?.instance ?? "";
46
45
  const instanceId = instanceName.split("/").pop();
47
- const dbId = (_f = (_e = postgresDatasource === null || postgresDatasource === void 0 ? void 0 : postgresDatasource.postgresql) === null || _e === void 0 ? void 0 : _e.database) !== null && _f !== void 0 ? _f : "";
46
+ const dbId = postgresDatasource?.postgresql?.database ?? "";
48
47
  const dbName = `CloudSQL Instance: ${instanceId}\nDatabase: ${dbId}`;
49
48
  table.push([
50
49
  serviceName.serviceId,
51
50
  serviceName.location,
52
51
  dbName,
53
- (_g = schema === null || schema === void 0 ? void 0 : schema.updateTime) !== null && _g !== void 0 ? _g : "",
52
+ schema?.updateTime ?? "",
54
53
  "",
55
54
  "",
56
55
  ]);
@@ -58,7 +57,7 @@ exports.command = new command_1.Command("dataconnect:services:list")
58
57
  serviceId: serviceName.serviceId,
59
58
  location: serviceName.location,
60
59
  datasource: dbName,
61
- schemaUpdateTime: schema === null || schema === void 0 ? void 0 : schema.updateTime,
60
+ schemaUpdateTime: schema?.updateTime,
62
61
  connectors: [],
63
62
  };
64
63
  for (const conn of connectors) {
@@ -66,7 +65,7 @@ exports.command = new command_1.Command("dataconnect:services:list")
66
65
  table.push(["", "", "", "", connectorName.connectorId, conn.updateTime]);
67
66
  serviceJson.connectors.push({
68
67
  connectorId: connectorName.connectorId,
69
- connectorLastUpdated: (_h = conn.updateTime) !== null && _h !== void 0 ? _h : "",
68
+ connectorLastUpdated: conn.updateTime ?? "",
70
69
  });
71
70
  }
72
71
  jsonOutput.services.push(serviceJson);
@@ -20,10 +20,9 @@ exports.command = new command_1.Command("dataconnect:sql:diff")
20
20
  ])
21
21
  .before(requireAuth_1.requireAuth)
22
22
  .action(async (options) => {
23
- var _a;
24
23
  const projectId = (0, projectUtils_1.needProjectId)(options);
25
24
  await (0, ensureApis_1.ensureApis)(projectId);
26
25
  const serviceInfo = await (0, load_1.pickOneService)(projectId, options.config, options.service, options.location);
27
- const diffs = await (0, schemaMigration_1.diffSchema)(options, (0, types_1.mainSchema)(serviceInfo.schemas), (_a = (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql) === null || _a === void 0 ? void 0 : _a.schemaValidation);
26
+ const diffs = await (0, schemaMigration_1.diffSchema)(options, (0, types_1.mainSchema)(serviceInfo.schemas), (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql?.schemaValidation);
28
27
  return { projectId, diffs };
29
28
  });
@@ -24,11 +24,11 @@ exports.command = new command_1.Command("dataconnect:sql:migrate")
24
24
  .before(requireAuth_1.requireAuth)
25
25
  .withForce("execute any required database changes without prompting")
26
26
  .action(async (options) => {
27
- var _a, _b;
28
27
  const projectId = (0, projectUtils_1.needProjectId)(options);
29
28
  await (0, ensureApis_1.ensureApis)(projectId);
30
29
  const serviceInfo = await (0, load_1.pickOneService)(projectId, options.config, options.service, options.location);
31
- const instanceId = (_a = (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql) === null || _a === void 0 ? void 0 : _a.cloudSql.instanceId;
30
+ const instanceId = (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql?.cloudSql
31
+ .instanceId;
32
32
  if (!instanceId) {
33
33
  throw new error_1.FirebaseError("dataconnect.yaml is missing field schema.datasource.postgresql.cloudsql.instanceId");
34
34
  }
@@ -36,7 +36,8 @@ exports.command = new command_1.Command("dataconnect:sql:migrate")
36
36
  options,
37
37
  schema: (0, types_1.mainSchema)(serviceInfo.schemas),
38
38
  validateOnly: true,
39
- schemaValidation: (_b = (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql) === null || _b === void 0 ? void 0 : _b.schemaValidation,
39
+ schemaValidation: (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql
40
+ ?.schemaValidation,
40
41
  });
41
42
  if (diffs.length) {
42
43
  (0, utils_1.logLabeledSuccess)("dataconnect", `Database schema sucessfully migrated! Run 'firebase deploy' to deploy your new schema to your Data Connect service.`);
@@ -25,11 +25,11 @@ exports.command = new command_1.Command("dataconnect:sql:setup")
25
25
  ])
26
26
  .before(requireAuth_1.requireAuth)
27
27
  .action(async (options) => {
28
- var _a;
29
28
  const projectId = (0, projectUtils_1.needProjectId)(options);
30
29
  await (0, ensureApis_1.ensureApis)(projectId);
31
30
  const serviceInfo = await (0, load_1.pickOneService)(projectId, options.config, options.service, options.location);
32
- const instanceId = (_a = (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql) === null || _a === void 0 ? void 0 : _a.cloudSql.instanceId;
31
+ const instanceId = (0, types_1.mainSchemaYaml)(serviceInfo.dataConnectYaml).datasource.postgresql?.cloudSql
32
+ .instanceId;
33
33
  if (!instanceId) {
34
34
  throw new error_1.FirebaseError("dataconnect.yaml is missing field schema.datasource.postgresql.cloudsql.instanceId");
35
35
  }
@@ -98,7 +98,11 @@ exports.command = new command_1.Command("dataconnect:sql:shell")
98
98
  ipType: cloud_sql_connector_1.IpAddressTypes.PUBLIC,
99
99
  authType: cloud_sql_connector_1.AuthTypes.IAM,
100
100
  });
101
- const pool = new pg.Pool(Object.assign(Object.assign({}, clientOpts), { user: username, database: databaseId }));
101
+ const pool = new pg.Pool({
102
+ ...clientOpts,
103
+ user: username,
104
+ database: databaseId,
105
+ });
102
106
  const conn = await pool.connect();
103
107
  logger_1.logger.info(`Logged in as ${username}`);
104
108
  logger_1.logger.info(clc.cyan("Welcome to Data Connect Cloud SQL Shell"));
@@ -55,8 +55,7 @@ function printEmulatorOverview(options) {
55
55
  reservedPorts.push(info.port);
56
56
  }
57
57
  controller.filterEmulatorTargets(options).forEach((emulator) => {
58
- var _a;
59
- reservedPorts.push(...(((_a = registry_1.EmulatorRegistry.getInfo(emulator)) === null || _a === void 0 ? void 0 : _a.reservedPorts) || []));
58
+ reservedPorts.push(...(registry_1.EmulatorRegistry.getInfo(emulator)?.reservedPorts || []));
60
59
  });
61
60
  }
62
61
  const reservedPortsString = reservedPorts.length > 0 ? reservedPorts.join(", ") : "None";
@@ -28,7 +28,6 @@ exports.command = new command_1.Command("ext:configure <extensionInstanceId>")
28
28
  .before(checkMinRequiredVersion_1.checkMinRequiredVersion, "extMinVersion")
29
29
  .before(extensionsHelper_1.diagnoseAndFixProject)
30
30
  .action(async (instanceId, options) => {
31
- var _a, _b;
32
31
  const projectId = (0, projectUtils_1.getProjectId)(options);
33
32
  if (options.nonInteractive) {
34
33
  throw new error_1.FirebaseError(`Command not supported in non-interactive mode, edit ./extensions/${instanceId}.env directly instead. ` +
@@ -53,8 +52,8 @@ exports.command = new command_1.Command("ext:configure <extensionInstanceId>")
53
52
  instanceId,
54
53
  projectDir: config.projectDir,
55
54
  });
56
- const params = ((_a = spec.params) !== null && _a !== void 0 ? _a : []).concat((_b = spec.systemParams) !== null && _b !== void 0 ? _b : []);
57
- const [immutableParams, tbdParams] = (0, functional_1.partition)(params, (param) => { var _a; return (_a = (param.immutable && !!oldParamValues[param.param])) !== null && _a !== void 0 ? _a : false; });
55
+ const params = (spec.params ?? []).concat(spec.systemParams ?? []);
56
+ const [immutableParams, tbdParams] = (0, functional_1.partition)(params, (param) => (param.immutable && !!oldParamValues[param.param]) ?? false);
58
57
  infoImmutableParams(immutableParams, oldParamValues);
59
58
  paramHelper.setNewDefaults(tbdParams, oldParamValues);
60
59
  const mutableParamsBindingOptions = await paramHelper.getParams({
@@ -73,7 +72,10 @@ exports.command = new command_1.Command("ext:configure <extensionInstanceId>")
73
72
  baseValue: eventsConfig.allowedEventTypes.join(","),
74
73
  };
75
74
  }
76
- const newParamOptions = Object.assign(Object.assign({}, (0, paramHelper_1.buildBindingOptionsWithBaseValue)(oldParamValues)), mutableParamsBindingOptions);
75
+ const newParamOptions = {
76
+ ...(0, paramHelper_1.buildBindingOptionsWithBaseValue)(oldParamValues),
77
+ ...mutableParamsBindingOptions,
78
+ };
77
79
  await manifest.writeToManifest([
78
80
  {
79
81
  instanceId,
@@ -33,12 +33,11 @@ exports.command = new command_1.Command("ext:dev:list <publisherId>")
33
33
  });
34
34
  const sorted = extensions.sort((a, b) => a.ref.localeCompare(b.ref));
35
35
  sorted.forEach((extension) => {
36
- var _a, _b;
37
36
  table.push([
38
37
  (0, utils_1.last)(extension.ref.split("/")),
39
38
  (0, extensionsHelper_1.unpackExtensionState)(extension),
40
- (_a = extension.latestVersion) !== null && _a !== void 0 ? _a : "-",
41
- (_b = extension.latestApprovedVersion) !== null && _b !== void 0 ? _b : "-",
39
+ extension.latestVersion ?? "-",
40
+ extension.latestApprovedVersion ?? "-",
42
41
  ]);
43
42
  });
44
43
  (0, utils_1.logLabeledBullet)(extensionsHelper_1.logPrefix, `list of uploaded extensions for publisher ${clc.bold(publisherId)}:`);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uploadExtensionAction = exports.command = void 0;
3
+ exports.command = void 0;
4
+ exports.uploadExtensionAction = uploadExtensionAction;
4
5
  const clc = require("colorette");
5
6
  const marked_1 = require("marked");
6
7
  const marked_terminal_1 = require("marked-terminal");
@@ -83,4 +84,3 @@ async function uploadExtensionAction(extensionRef, options) {
83
84
  }
84
85
  return res;
85
86
  }
86
- exports.uploadExtensionAction = uploadExtensionAction;
@@ -45,7 +45,7 @@ exports.command = new command_1.Command("ext:export")
45
45
  return;
46
46
  }
47
47
  const manifestSpecs = withRefSubbed.map((spec) => {
48
- const paramCopy = Object.assign(Object.assign({}, spec.params), spec.systemParams);
48
+ const paramCopy = { ...spec.params, ...spec.systemParams };
49
49
  if (spec.eventarcChannel) {
50
50
  paramCopy.EVENTARC_CHANNEL = spec.eventarcChannel;
51
51
  }
@@ -18,7 +18,6 @@ exports.command = new command_1.Command("ext:info <extensionName>")
18
18
  .option("--markdown", "output info in Markdown suitable for constructing a README file")
19
19
  .before(checkMinRequiredVersion_1.checkMinRequiredVersion, "extMinVersion")
20
20
  .action(async (extensionName, options) => {
21
- var _a, _b;
22
21
  let spec;
23
22
  if ((0, localHelper_1.isLocalExtension)(extensionName)) {
24
23
  if (!options.markdown) {
@@ -53,8 +52,8 @@ exports.command = new command_1.Command("ext:info <extensionName>")
53
52
  else {
54
53
  lines.push(`**Name**: ${spec.displayName}`);
55
54
  }
56
- const authorName = (_a = spec.author) === null || _a === void 0 ? void 0 : _a.authorName;
57
- const url = (_b = spec.author) === null || _b === void 0 ? void 0 : _b.url;
55
+ const authorName = spec.author?.authorName;
56
+ const url = spec.author?.url;
58
57
  const urlMarkdown = url ? `(**[${url}](${url})**)` : "";
59
58
  lines.push(`**Author**: ${authorName} ${urlMarkdown}`);
60
59
  if (spec.description) {
@@ -32,7 +32,6 @@ exports.command = new command_1.Command("ext:install [extensionRefOrLocalPath]")
32
32
  .before(checkMinRequiredVersion_1.checkMinRequiredVersion, "extMinVersion")
33
33
  .before(extensionsHelper_1.diagnoseAndFixProject)
34
34
  .action(async (extensionRef, options) => {
35
- var _a, _b;
36
35
  if (options.local) {
37
36
  utils.logLabeledWarning(extensionsHelper_1.logPrefix, "As of firebase-tools@11.0.0, the `--local` flag is no longer required, as it is the default behavior.");
38
37
  }
@@ -82,7 +81,7 @@ exports.command = new command_1.Command("ext:install [extensionRefOrLocalPath]")
82
81
  }))) {
83
82
  return;
84
83
  }
85
- const spec = (_a = source === null || source === void 0 ? void 0 : source.spec) !== null && _a !== void 0 ? _a : extensionVersion === null || extensionVersion === void 0 ? void 0 : extensionVersion.spec;
84
+ const spec = source?.spec ?? extensionVersion?.spec;
86
85
  if (!spec) {
87
86
  throw new error_1.FirebaseError(`Could not find the extension.yaml for extension '${clc.bold(extensionRef)}'. Please make sure this is a valid extension and try again.`);
88
87
  }
@@ -94,7 +93,7 @@ exports.command = new command_1.Command("ext:install [extensionRefOrLocalPath]")
94
93
  }
95
94
  else if (extensionVersion) {
96
95
  void (0, track_1.trackGA4)("extension_added_to_manifest", {
97
- published: ((_b = extensionVersion.listing) === null || _b === void 0 ? void 0 : _b.state) === "APPROVED" ? "published" : "uploaded",
96
+ published: extensionVersion.listing?.state === "APPROVED" ? "published" : "uploaded",
98
97
  interactive: options.nonInteractive ? "false" : "true",
99
98
  });
100
99
  }
@@ -118,10 +117,9 @@ exports.command = new command_1.Command("ext:install [extensionRefOrLocalPath]")
118
117
  }
119
118
  });
120
119
  async function installToManifest(options) {
121
- var _a, _b, _c;
122
120
  const { projectId, extensionRef, extVersion, source, nonInteractive, force } = options;
123
121
  const isLocalSource = (0, extensionsHelper_1.isLocalPath)(extensionRef);
124
- const spec = (_a = extVersion === null || extVersion === void 0 ? void 0 : extVersion.spec) !== null && _a !== void 0 ? _a : source === null || source === void 0 ? void 0 : source.spec;
122
+ const spec = extVersion?.spec ?? source?.spec;
125
123
  if (!spec) {
126
124
  throw new error_1.FirebaseError(`Could not find the extension.yaml for ${extensionRef}. Please make sure this is a valid extension and try again.`);
127
125
  }
@@ -135,7 +133,7 @@ async function installToManifest(options) {
135
133
  }
136
134
  const paramBindingOptions = await paramHelper.getParams({
137
135
  projectId,
138
- paramSpecs: ((_b = spec.params) !== null && _b !== void 0 ? _b : []).concat((_c = spec.systemParams) !== null && _c !== void 0 ? _c : []),
136
+ paramSpecs: (spec.params ?? []).concat(spec.systemParams ?? []),
139
137
  nonInteractive,
140
138
  instanceId,
141
139
  });
@@ -157,6 +155,6 @@ async function installToManifest(options) {
157
155
  params: paramBindingOptions,
158
156
  extensionSpec: spec,
159
157
  },
160
- ], config, { nonInteractive, force: force !== null && force !== void 0 ? force : false });
158
+ ], config, { nonInteractive, force: force ?? false });
161
159
  (0, tos_1.displayDeveloperTOSWarning)();
162
160
  }
@@ -14,9 +14,8 @@ exports.command = new command_1.Command("firestore:backups:list")
14
14
  .before(requirePermissions_1.requirePermissions, ["datastore.backups.list"])
15
15
  .before(commandUtils_1.warnEmulatorNotSupported, types_1.Emulators.FIRESTORE)
16
16
  .action(async (options) => {
17
- var _a;
18
17
  const printer = new pretty_print_1.PrettyPrint();
19
- const location = (_a = options.location) !== null && _a !== void 0 ? _a : "-";
18
+ const location = options.location ?? "-";
20
19
  const listBackupsResponse = await (0, firestore_1.listBackups)(options.project, location);
21
20
  const backups = listBackupsResponse.backups || [];
22
21
  printer.prettyPrintBackups(backups);
@@ -13,9 +13,8 @@ exports.command = new command_1.Command("firestore:backups:schedules:list")
13
13
  .before(requirePermissions_1.requirePermissions, ["datastore.backupSchedules.list"])
14
14
  .before(commandUtils_1.warnEmulatorNotSupported, types_1.Emulators.FIRESTORE)
15
15
  .action(async (options) => {
16
- var _a;
17
16
  const printer = new pretty_print_1.PrettyPrint();
18
- const databaseId = (_a = options.database) !== null && _a !== void 0 ? _a : "(default)";
17
+ const databaseId = options.database ?? "(default)";
19
18
  const backupSchedules = await (0, firestore_1.listBackupSchedules)(options.project, databaseId);
20
19
  printer.prettyPrintBackupSchedules(backupSchedules, databaseId);
21
20
  return backupSchedules;
@@ -18,10 +18,9 @@ exports.command = new command_1.Command("firestore:indexes")
18
18
  .before(requirePermissions_1.requirePermissions, ["datastore.indexes.list"])
19
19
  .before(commandUtils_1.warnEmulatorNotSupported, types_1.Emulators.FIRESTORE)
20
20
  .action(async (options) => {
21
- var _a;
22
21
  const indexApi = new fsi.FirestoreApi();
23
22
  const printer = new pretty_print_1.PrettyPrint();
24
- const databaseId = (_a = options.database) !== null && _a !== void 0 ? _a : "(default)";
23
+ const databaseId = options.database ?? "(default)";
25
24
  const projectId = (0, projectUtils_1.needProjectId)(options);
26
25
  const indexes = await indexApi.listIndexes(projectId, databaseId);
27
26
  const fieldOverrides = await indexApi.listFieldOverrides(projectId, databaseId);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getShortOperationName = void 0;
3
+ exports.getShortOperationName = getShortOperationName;
4
4
  const error_1 = require("../error");
5
5
  function getShortOperationName(operationName) {
6
6
  let opName = operationName;
@@ -12,4 +12,3 @@ function getShortOperationName(operationName) {
12
12
  }
13
13
  return opName;
14
14
  }
15
- exports.getShortOperationName = getShortOperationName;
@@ -29,7 +29,6 @@ exports.command = new command_1.Command("functions:artifacts:setpolicy")
29
29
  "artifactregistry.versions.delete",
30
30
  ])
31
31
  .action(async (options) => {
32
- var _a;
33
32
  if (options.days && options.none) {
34
33
  throw new error_1.FirebaseError("Cannot specify both --days and --none options.");
35
34
  }
@@ -98,7 +97,7 @@ exports.command = new command_1.Command("functions:artifacts:setpolicy")
98
97
  (0, utils_1.logBullet)("This helps reduce storage costs by removing old container images that are no longer needed");
99
98
  const existingPolicy = artifacts.findExistingPolicy(repository);
100
99
  let isUpdate = false;
101
- if (existingPolicy && ((_a = existingPolicy.condition) === null || _a === void 0 ? void 0 : _a.olderThan)) {
100
+ if (existingPolicy && existingPolicy.condition?.olderThan) {
102
101
  const existingDays = artifacts.parseDaysFromPolicy(existingPolicy.condition.olderThan);
103
102
  if (existingDays) {
104
103
  isUpdate = true;
@@ -48,7 +48,6 @@ exports.command = new command_1.Command("functions:config:export")
48
48
  .before(requirePermissions_1.requirePermissions, [...RUNTIME_CONFIG_PERMISSIONS, ...SECRET_MANAGER_PERMISSIONS])
49
49
  .before(requireConfig_1.requireConfig)
50
50
  .action(async (options) => {
51
- var _a;
52
51
  const projectId = (0, projectUtils_1.needProjectId)(options);
53
52
  (0, utils_1.logBullet)("This command retrieves your Runtime Config values (accessed via " +
54
53
  clc.bold("functions.config()") +
@@ -145,8 +144,8 @@ exports.command = new command_1.Command("functions:config:export")
145
144
  try {
146
145
  const functionsConfig = options.config.get("functions");
147
146
  const source = Array.isArray(functionsConfig)
148
- ? (_a = functionsConfig[0]) === null || _a === void 0 ? void 0 : _a.source
149
- : functionsConfig === null || functionsConfig === void 0 ? void 0 : functionsConfig.source;
147
+ ? functionsConfig[0]?.source
148
+ : functionsConfig?.source;
150
149
  if (source) {
151
150
  const sourceDir = options.config.path(source);
152
151
  sdkVersion = (0, versioning_1.getFunctionsSDKVersion)(sourceDir);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hostingChannelDeployAction = exports.command = void 0;
3
+ exports.command = void 0;
4
+ exports.hostingChannelDeployAction = hostingChannelDeployAction;
4
5
  const colorette_1 = require("colorette");
5
6
  const command_1 = require("../command");
6
7
  const error_1 = require("../error");
@@ -124,7 +125,6 @@ async function hostingChannelDeployAction(channelId, options) {
124
125
  });
125
126
  return deploys;
126
127
  }
127
- exports.hostingChannelDeployAction = hostingChannelDeployAction;
128
128
  async function syncAuthState(projectId, sites) {
129
129
  const siteNames = sites.map((d) => d.site);
130
130
  const urlNames = sites.map((d) => d.url);
@@ -18,7 +18,6 @@ For example, to copy the content for a site \`my-site\` from a preview channel \
18
18
  firebase hosting:clone my-site:foo my-site:live`)
19
19
  .before(requireAuth_1.requireAuth)
20
20
  .action(async (source = "", targetChannel = "") => {
21
- var _a, _b, _c, _d;
22
21
  let sourceVersionName;
23
22
  let sourceVersion;
24
23
  let [sourceSiteId, sourceChannelId] = source.split(":");
@@ -47,7 +46,7 @@ For example, to copy the content for a site \`my-site\` from a preview channel \
47
46
  if (!sChannel) {
48
47
  throw new error_1.FirebaseError(`Could not find the channel ${(0, colorette_1.bold)(sourceChannelId)} for site ${(0, colorette_1.bold)(sourceSiteId)}.`);
49
48
  }
50
- sourceVersionName = (_b = (_a = sChannel.release) === null || _a === void 0 ? void 0 : _a.version) === null || _b === void 0 ? void 0 : _b.name;
49
+ sourceVersionName = sChannel.release?.version?.name;
51
50
  if (!sourceVersionName) {
52
51
  throw new error_1.FirebaseError(`Could not find a version on the channel ${(0, colorette_1.bold)(sourceChannelId)} for site ${(0, colorette_1.bold)(sourceSiteId)}.`);
53
52
  }
@@ -71,7 +70,7 @@ For example, to copy the content for a site \`my-site\` from a preview channel \
71
70
  logger_1.logger.debug("[hosting] unable to add auth domain", e);
72
71
  }
73
72
  }
74
- const currentTargetVersionName = (_d = (_c = tChannel.release) === null || _c === void 0 ? void 0 : _c.version) === null || _d === void 0 ? void 0 : _d.name;
73
+ const currentTargetVersionName = tChannel.release?.version?.name;
75
74
  if (equalSiteIds && sourceVersionName === currentTargetVersionName) {
76
75
  utils.logSuccess(`Channels ${(0, colorette_1.bold)(sourceChannelId)} and ${(0, colorette_1.bold)(targetChannel)} are serving identical versions. No need to clone.`);
77
76
  return;
@@ -21,7 +21,7 @@ exports.command = new command_1.Command("hosting:sites:create [siteId]")
21
21
  if (options.nonInteractive && !siteId) {
22
22
  throw new error_1.FirebaseError(`${(0, colorette_1.bold)("siteId")} is required in a non-interactive environment`);
23
23
  }
24
- siteId = await (0, interactive_1.pickHostingSiteName)(siteId !== null && siteId !== void 0 ? siteId : "", options);
24
+ siteId = await (0, interactive_1.pickHostingSiteName)(siteId ?? "", options);
25
25
  const site = await (0, api_1.createSite)(projectId, siteId, appId);
26
26
  logger_1.logger.info();
27
27
  (0, utils_1.logLabeledSuccess)(LOG_TAG, `Site ${(0, colorette_1.bold)(siteId)} has been created in project ${(0, colorette_1.bold)(projectId)}.`);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.load = void 0;
3
+ exports.load = load;
4
4
  const experiments = require("../experiments");
5
5
  function load(client) {
6
6
  function loadCommand(name) {
@@ -253,7 +253,7 @@ function load(client) {
253
253
  client.use = loadCommand("use");
254
254
  if (experiments.isEnabled("apptesting")) {
255
255
  client.apptesting = {};
256
- client.apptesting.execute = loadCommand("apptesting-execute");
256
+ client.apptesting.wata = loadCommand("apptesting-wata");
257
257
  }
258
258
  const t1 = process.hrtime.bigint();
259
259
  const diffMS = (t1 - t0) / BigInt(1e6);
@@ -261,4 +261,3 @@ function load(client) {
261
261
  }
262
262
  return client;
263
263
  }
264
- exports.load = load;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.postInitSaves = exports.initAction = exports.command = void 0;
3
+ exports.command = void 0;
4
+ exports.initAction = initAction;
5
+ exports.postInitSaves = postInitSaves;
4
6
  const clc = require("colorette");
5
7
  const os = require("os");
6
8
  const path = require("path");
@@ -139,7 +141,6 @@ exports.command = new command_1.Command("init [feature]")
139
141
  .help(HELP)
140
142
  .action(initAction);
141
143
  async function initAction(feature, options) {
142
- var _a;
143
144
  if (feature && !featureNames.includes(feature)) {
144
145
  return utils.reject(clc.bold(feature) +
145
146
  " is not a supported feature; must be one of " +
@@ -205,7 +206,7 @@ async function initAction(feature, options) {
205
206
  },
206
207
  });
207
208
  }
208
- if (!setup.features || ((_a = setup.features) === null || _a === void 0 ? void 0 : _a.length) === 0) {
209
+ if (!setup.features || setup.features?.length === 0) {
209
210
  throw new error_1.FirebaseError("Must select at least one feature. Use " +
210
211
  clc.bold(clc.underline("SPACEBAR")) +
211
212
  " to select features, or specify a feature by running " +
@@ -231,7 +232,6 @@ async function initAction(feature, options) {
231
232
  }
232
233
  }
233
234
  }
234
- exports.initAction = initAction;
235
235
  async function postInitSaves(setup, config) {
236
236
  logger_1.logger.info();
237
237
  config.writeProjectFile("firebase.json", setup.config);
@@ -242,4 +242,3 @@ async function postInitSaves(setup, config) {
242
242
  logger_1.logger.info();
243
243
  utils.logSuccess("Firebase initialization complete!");
244
244
  }
245
- exports.postInitSaves = postInitSaves;
@@ -25,7 +25,7 @@ exports.command = new command_1.Command("internaltesting:functions:discover")
25
25
  try {
26
26
  const runtimeConfigApiEnabled = await ensureApiEnabled.check(projectId, (0, api_1.runtimeconfigOrigin)(), "runtimeconfig", true);
27
27
  if (runtimeConfigApiEnabled) {
28
- runtimeConfig = Object.assign(Object.assign({}, runtimeConfig), (await (0, prepareFunctionsUpload_1.getFunctionsConfig)(projectId)));
28
+ runtimeConfig = { ...runtimeConfig, ...(await (0, prepareFunctionsUpload_1.getFunctionsConfig)(projectId)) };
29
29
  }
30
30
  }
31
31
  catch (err) {
@@ -15,7 +15,6 @@ exports.command = new command_1.Command("login")
15
15
  .option("--no-localhost", "login from a device without an accessible localhost")
16
16
  .option("--reauth", "force reauthentication even if already logged in")
17
17
  .action(async (options) => {
18
- var _a, _b, _c, _d;
19
18
  if (options.nonInteractive && !options.prototyperLogin) {
20
19
  throw new error_1.FirebaseError("Cannot run login in non-interactive mode. See " +
21
20
  clc.bold("login:ci") +
@@ -23,13 +22,13 @@ exports.command = new command_1.Command("login")
23
22
  }
24
23
  const user = options.user;
25
24
  const tokens = options.tokens;
26
- if (user && (tokens === null || tokens === void 0 ? void 0 : tokens.refresh_token) && !options.reauth) {
25
+ if (user && tokens?.refresh_token && !options.reauth) {
27
26
  logger_1.logger.info("Already logged in as", clc.bold(user.email));
28
27
  return user;
29
28
  }
30
29
  if (options.consent) {
31
- (_b = (_a = options.consent) === null || _a === void 0 ? void 0 : _a.metrics) !== null && _b !== void 0 ? _b : configstore_1.configstore.set("usage", options.consent.metrics);
32
- (_d = (_c = options.consent) === null || _c === void 0 ? void 0 : _c.gemini) !== null && _d !== void 0 ? _d : configstore_1.configstore.set("gemini", options.consent.gemini);
30
+ options.consent?.metrics ?? configstore_1.configstore.set("usage", options.consent.metrics);
31
+ options.consent?.gemini ?? configstore_1.configstore.set("gemini", options.consent.gemini);
33
32
  }
34
33
  else if (!options.reauth && !options.prototyperLogin) {
35
34
  utils.logBullet("The Firebase CLI’s MCP server feature can optionally make use of Gemini in Firebase. " +
@@ -49,7 +48,7 @@ exports.command = new command_1.Command("login")
49
48
  return auth.loginPrototyper();
50
49
  }
51
50
  const useLocalhost = !(0, utils_1.isCloudEnvironment)() && !!options.localhost;
52
- const result = await auth.loginGoogle(useLocalhost, user === null || user === void 0 ? void 0 : user.email);
51
+ const result = await auth.loginGoogle(useLocalhost, user?.email);
53
52
  auth.recordCredentials(result);
54
53
  logger_1.logger.info();
55
54
  if (typeof result.user !== "string") {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logoutAction = exports.command = void 0;
3
+ exports.command = void 0;
4
+ exports.logoutAction = logoutAction;
4
5
  const command_1 = require("../command");
5
6
  const logger_1 = require("../logger");
6
7
  const clc = require("colorette");
@@ -25,7 +26,7 @@ async function logoutAction(email, options) {
25
26
  utils.logWarning(`No account matches ${email}, can't log out.`);
26
27
  return;
27
28
  }
28
- const logoutDefault = email === (defaultAccount === null || defaultAccount === void 0 ? void 0 : defaultAccount.user.email);
29
+ const logoutDefault = email === defaultAccount?.user.email;
29
30
  let newDefaultAccount = undefined;
30
31
  if (logoutDefault && additionalAccounts.length > 0) {
31
32
  if (additionalAccounts.length === 1) {
@@ -72,4 +73,3 @@ async function logoutAction(email, options) {
72
73
  (0, auth_1.setGlobalDefaultAccount)(newDefaultAccount);
73
74
  }
74
75
  }
75
- exports.logoutAction = logoutAction;
@@ -17,7 +17,7 @@ exports.command = new command_1.Command("projects:create [projectId]")
17
17
  throw new error_1.FirebaseError("Invalid argument, please provide only one type of project parent (organization or folder)");
18
18
  }
19
19
  if (!options.nonInteractive) {
20
- options = Object.assign(Object.assign({}, options), (await (0, projects_1.promptProjectCreation)(options)));
20
+ options = { ...options, ...(await (0, projects_1.promptProjectCreation)(options)) };
21
21
  }
22
22
  if (!options.projectId) {
23
23
  throw new error_1.FirebaseError("Project ID cannot be empty");
@@ -19,15 +19,14 @@ exports.command = new command_1.Command("remoteconfig:experiments:list")
19
19
  "firebaseanalytics.resources.googleAnalyticsReadAndAnalyze",
20
20
  ])
21
21
  .action(async (options) => {
22
- var _a;
23
22
  const projectNumber = await (0, projectUtils_1.needProjectNumber)(options);
24
23
  const listExperimentOptions = {
25
- pageSize: (_a = options.pageSize) !== null && _a !== void 0 ? _a : interfaces_1.DEFAULT_PAGE_SIZE,
24
+ pageSize: options.pageSize ?? interfaces_1.DEFAULT_PAGE_SIZE,
26
25
  pageToken: options.pageToken,
27
26
  filter: options.filter,
28
27
  };
29
28
  const { experiments, nextPageToken } = await rcExperiment.listExperiments(projectNumber, interfaces_1.NAMESPACE_FIREBASE, listExperimentOptions);
30
- logger_1.logger.info(rcExperiment.parseExperimentList(experiments !== null && experiments !== void 0 ? experiments : []));
29
+ logger_1.logger.info(rcExperiment.parseExperimentList(experiments ?? []));
31
30
  if (nextPageToken) {
32
31
  logger_1.logger.info(`\nNext Page Token: \x1b[32m${nextPageToken}\x1b[0m\n`);
33
32
  }
@@ -57,7 +57,7 @@ exports.command = new command_1.Command("remoteconfig:get")
57
57
  utils.assertIsString(options.output);
58
58
  filename = options.output;
59
59
  }
60
- const outTemplate = Object.assign({}, template);
60
+ const outTemplate = { ...template };
61
61
  delete outTemplate.version;
62
62
  fs.writeFileSync(filename, JSON.stringify(outTemplate, null, 2));
63
63
  }
@@ -16,14 +16,13 @@ exports.command = new command_1.Command("remoteconfig:rollback")
16
16
  .option("-v, --version-number <versionNumber>", "rollback to the specified version of the template")
17
17
  .withForce()
18
18
  .action(async (options) => {
19
- var _a;
20
19
  const templateVersion = await (0, versionslist_1.getVersions)((0, projectUtils_1.needProjectId)(options), 1);
21
20
  let targetVersion = 0;
22
21
  if (options.versionNumber) {
23
22
  targetVersion = options.versionNumber;
24
23
  }
25
24
  else {
26
- if ((_a = templateVersion === null || templateVersion === void 0 ? void 0 : templateVersion.versions[0]) === null || _a === void 0 ? void 0 : _a.versionNumber) {
25
+ if (templateVersion?.versions[0]?.versionNumber) {
27
26
  const latestVersion = templateVersion.versions[0].versionNumber.toString();
28
27
  const previousVersion = parseInt(latestVersion) - 1;
29
28
  targetVersion = previousVersion;
@@ -19,15 +19,14 @@ exports.command = new command_1.Command("remoteconfig:rollouts:list")
19
19
  "firebaseanalytics.resources.googleAnalyticsReadAndAnalyze",
20
20
  ])
21
21
  .action(async (options) => {
22
- var _a;
23
22
  const projectNumber = await (0, projectUtils_1.needProjectNumber)(options);
24
23
  const listRolloutOptions = {
25
- pageSize: (_a = options.pageSize) !== null && _a !== void 0 ? _a : interfaces_1.DEFAULT_PAGE_SIZE,
24
+ pageSize: options.pageSize ?? interfaces_1.DEFAULT_PAGE_SIZE,
26
25
  pageToken: options.pageToken,
27
26
  filter: options.filter,
28
27
  };
29
28
  const { rollouts, nextPageToken } = await rcRollout.listRollouts(projectNumber, interfaces_1.NAMESPACE_FIREBASE, listRolloutOptions);
30
- logger_1.logger.info(rcRollout.parseRolloutList(rollouts !== null && rollouts !== void 0 ? rollouts : []));
29
+ logger_1.logger.info(rcRollout.parseRolloutList(rollouts ?? []));
31
30
  if (nextPageToken) {
32
31
  logger_1.logger.info(`\nNext Page Token: \x1b[32m${nextPageToken}\x1b[0m\n`);
33
32
  }