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,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.promptWriteMode = exports.isPackageJson = exports.isTsConfig = exports.genkitSetup = exports.ensureVertexApiEnabled = exports.doSetup = void 0;
3
+ exports.isPackageJson = exports.isTsConfig = void 0;
4
+ exports.doSetup = doSetup;
5
+ exports.ensureVertexApiEnabled = ensureVertexApiEnabled;
6
+ exports.genkitSetup = genkitSetup;
7
+ exports.promptWriteMode = promptWriteMode;
4
8
  const fs = require("fs");
5
9
  const path = require("path");
6
10
  const semver = require("semver");
@@ -94,14 +98,13 @@ function showStartMessage(setup, command) {
94
98
  logger_1.logger.info(clc.bold(clc.green(` ${command}`)));
95
99
  }
96
100
  async function doSetup(initSetup, config, options) {
97
- var _a;
98
101
  const setup = initSetup;
99
102
  const genkitInfo = await getGenkitInfo();
100
103
  if (genkitInfo.stopInstall) {
101
104
  (0, utils_1.logLabeledWarning)("genkit", "Stopped Genkit initialization");
102
105
  return;
103
106
  }
104
- if (((_a = setup.functions) === null || _a === void 0 ? void 0 : _a.languageChoice) !== "typescript") {
107
+ if (setup.functions?.languageChoice !== "typescript") {
105
108
  const continueFunctions = await (0, prompt_1.confirm)({
106
109
  message: "Genkit's Firebase integration uses Cloud Functions for Firebase with TypeScript.\nInitialize Functions to continue?",
107
110
  default: true,
@@ -144,7 +147,6 @@ async function doSetup(initSetup, config, options) {
144
147
  return;
145
148
  }
146
149
  }
147
- exports.doSetup = doSetup;
148
150
  async function ensureVertexApiEnabled(options) {
149
151
  const VERTEX_AI_URL = "https://aiplatform.googleapis.com";
150
152
  const projectId = (0, projectUtils_1.getProjectId)(options);
@@ -154,7 +156,6 @@ async function ensureVertexApiEnabled(options) {
154
156
  const silently = typeof options.markdown === "boolean" && options.markdown;
155
157
  return await (0, ensureApiEnabled_1.ensure)(projectId, VERTEX_AI_URL, "aiplatform", silently);
156
158
  }
157
- exports.ensureVertexApiEnabled = ensureVertexApiEnabled;
158
159
  function getModelOptions(genkitInfo) {
159
160
  let modelOptions;
160
161
  if (semver.gte(genkitInfo.templateVersion, UNIFIED_PLUGIN_VERSION)) {
@@ -255,10 +256,10 @@ const pluginToInfo = {
255
256
  },
256
257
  };
257
258
  function getPluginInfo(option) {
258
- if ((option === null || option === void 0 ? void 0 : option.provider) && option.plugin) {
259
+ if (option?.provider && option.plugin) {
259
260
  return pluginToInfo[`${option.plugin}(${option.provider})`];
260
261
  }
261
- if (option === null || option === void 0 ? void 0 : option.plugin) {
262
+ if (option?.plugin) {
262
263
  return pluginToInfo[option.plugin];
263
264
  }
264
265
  return {
@@ -273,7 +274,6 @@ function getBasePackages(genkitVersion) {
273
274
  }
274
275
  const externalDevPackages = ["typescript", "tsx"];
275
276
  async function genkitSetup(options, genkitInfo, projectDir) {
276
- var _a;
277
277
  const modelOptions = getModelOptions(genkitInfo);
278
278
  const supportedModels = Object.keys(modelOptions);
279
279
  const model = await (0, prompt_1.select)({
@@ -288,7 +288,7 @@ async function genkitSetup(options, genkitInfo, projectDir) {
288
288
  }
289
289
  const pluginPackages = [];
290
290
  pluginPackages.push(`@genkit-ai/firebase@${genkitInfo.genkitVersion}`);
291
- if ((_a = modelOptions[model]) === null || _a === void 0 ? void 0 : _a.package) {
291
+ if (modelOptions[model]?.package) {
292
292
  pluginPackages.push(modelOptions[model].package || "");
293
293
  }
294
294
  const packages = [...getBasePackages(genkitInfo.genkitVersion)];
@@ -313,7 +313,6 @@ async function genkitSetup(options, genkitInfo, projectDir) {
313
313
  generateSampleFile(modelOptions[model], projectDir, genkitInfo.templateVersion, enableTelemetry);
314
314
  }
315
315
  }
316
- exports.genkitSetup = genkitSetup;
317
316
  const isTsConfig = (value) => {
318
317
  if (!(0, error_1.isObject)(value) || (value.compilerOptions && !(0, error_1.isObject)(value.compilerOptions))) {
319
318
  return false;
@@ -353,10 +352,24 @@ async function updateTsConfig(nonInteractive, projectDir) {
353
352
  let newTsConfig = {};
354
353
  switch (choice) {
355
354
  case "overwrite":
356
- newTsConfig = Object.assign(Object.assign(Object.assign({}, existingTsConfig), tsConfig), { compilerOptions: Object.assign(Object.assign({}, existingTsConfig === null || existingTsConfig === void 0 ? void 0 : existingTsConfig.compilerOptions), tsConfig.compilerOptions) });
355
+ newTsConfig = {
356
+ ...existingTsConfig,
357
+ ...tsConfig,
358
+ compilerOptions: {
359
+ ...existingTsConfig?.compilerOptions,
360
+ ...tsConfig.compilerOptions,
361
+ },
362
+ };
357
363
  break;
358
364
  case "merge":
359
- newTsConfig = Object.assign(Object.assign(Object.assign({}, tsConfig), existingTsConfig), { compilerOptions: Object.assign(Object.assign({}, tsConfig.compilerOptions), existingTsConfig === null || existingTsConfig === void 0 ? void 0 : existingTsConfig.compilerOptions) });
365
+ newTsConfig = {
366
+ ...tsConfig,
367
+ ...existingTsConfig,
368
+ compilerOptions: {
369
+ ...tsConfig.compilerOptions,
370
+ ...existingTsConfig?.compilerOptions,
371
+ },
372
+ };
360
373
  break;
361
374
  case "keep":
362
375
  (0, utils_1.logLabeledWarning)("genkit", "Skipped updating tsconfig.json");
@@ -377,7 +390,7 @@ async function installNpmPackages(projectDir, packages, devPackages) {
377
390
  if (packages.length) {
378
391
  await (0, spawn_1.wrapSpawn)("npm", ["install", ...packages, "--save"], projectDir);
379
392
  }
380
- if (devPackages === null || devPackages === void 0 ? void 0 : devPackages.length) {
393
+ if (devPackages?.length) {
381
394
  await (0, spawn_1.wrapSpawn)("npm", ["install", ...devPackages, "--save-dev"], projectDir);
382
395
  }
383
396
  (0, utils_1.logLabeledSuccess)("genkit", "Successfully installed NPM packages");
@@ -388,7 +401,6 @@ async function installNpmPackages(projectDir, packages, devPackages) {
388
401
  }
389
402
  }
390
403
  function generateSampleFile(modelOption, projectDir, templateVersion, enableTelemetry) {
391
- var _a;
392
404
  let modelImport = "";
393
405
  const pluginInfo = getPluginInfo(modelOption);
394
406
  if (pluginInfo.imports) {
@@ -403,7 +415,7 @@ function generateSampleFile(modelOption, projectDir, templateVersion, enableTele
403
415
  const template = fs.readFileSync(templatePath, "utf8");
404
416
  const sample = renderConfig(pluginInfo, template
405
417
  .replace("$GENKIT_MODEL_IMPORT\n", commentedModelImport)
406
- .replace("$GENKIT_MODEL", (_a = pluginInfo.model) !== null && _a !== void 0 ? _a : "'' /* TODO: Set a model. */"), enableTelemetry);
418
+ .replace("$GENKIT_MODEL", pluginInfo.model ?? "'' /* TODO: Set a model. */"), enableTelemetry);
407
419
  (0, utils_1.logLabeledBullet)("genkit", "Generating sample file");
408
420
  try {
409
421
  const samplePath = "src/genkit-sample.ts";
@@ -444,10 +456,25 @@ async function updatePackageJson(nonInteractive, projectDir) {
444
456
  let newPackageJson = {};
445
457
  switch (choice) {
446
458
  case "overwrite":
447
- newPackageJson = Object.assign(Object.assign(Object.assign({}, existingPackageJson), packageJson), { scripts: Object.assign(Object.assign({}, existingPackageJson.scripts), packageJson.scripts) });
459
+ newPackageJson = {
460
+ ...existingPackageJson,
461
+ ...packageJson,
462
+ scripts: {
463
+ ...existingPackageJson.scripts,
464
+ ...packageJson.scripts,
465
+ },
466
+ };
448
467
  break;
449
468
  case "merge":
450
- newPackageJson = Object.assign(Object.assign(Object.assign({}, packageJson), existingPackageJson), { main: packageJson.main, scripts: Object.assign(Object.assign({}, packageJson.scripts), existingPackageJson.scripts) });
469
+ newPackageJson = {
470
+ ...packageJson,
471
+ ...existingPackageJson,
472
+ main: packageJson.main,
473
+ scripts: {
474
+ ...packageJson.scripts,
475
+ ...existingPackageJson.scripts,
476
+ },
477
+ };
451
478
  break;
452
479
  case "keep":
453
480
  (0, utils_1.logLabeledWarning)("genkit", "Skipped updating package.json");
@@ -486,4 +513,3 @@ async function promptWriteMode(message, defaultOption = "merge") {
486
513
  default: defaultOption,
487
514
  });
488
515
  }
489
- exports.promptWriteMode = promptWriteMode;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initGitHub = void 0;
3
+ exports.initGitHub = initGitHub;
4
4
  const colorette_1 = require("colorette");
5
5
  const fs = require("fs");
6
6
  const yaml = require("yaml");
@@ -29,11 +29,10 @@ const HOSTING_GITHUB_ACTION_NAME = "FirebaseExtended/action-hosting-deploy@v0";
29
29
  const SERVICE_ACCOUNT_MAX_KEY_NUMBER = 10;
30
30
  const githubApiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.githubApiOrigin)(), auth: false });
31
31
  async function initGitHub(setup) {
32
- var _a, _b, _c, _d, _e, _f, _g;
33
32
  if (!setup.projectId) {
34
33
  return (0, utils_1.reject)("Could not determine Project ID, can't set up GitHub workflow.", { exit: 1 });
35
34
  }
36
- if (!setup.config.hosting && !((_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.hosting)) {
35
+ if (!setup.config.hosting && !setup.featureInfo?.hosting) {
37
36
  return (0, utils_1.reject)(`Didn't find a Hosting config in firebase.json. Run ${(0, colorette_1.bold)("firebase init hosting")} instead.`);
38
37
  }
39
38
  logger_1.logger.info();
@@ -67,10 +66,10 @@ async function initGitHub(setup) {
67
66
  (0, utils_1.logSuccess)(`Uploaded service account JSON to GitHub as secret ${(0, colorette_1.bold)(githubSecretName)}.`);
68
67
  (0, utils_1.logBullet)(`You can manage your secrets at https://github.com/${repo}/settings/secrets.`);
69
68
  logger_1.logger.info();
70
- if (!Array.isArray(setup.config.hosting) && ((_b = setup.config.hosting) === null || _b === void 0 ? void 0 : _b.predeploy)) {
69
+ if (!Array.isArray(setup.config.hosting) && setup.config.hosting?.predeploy) {
71
70
  (0, utils_1.logBullet)(`You have a predeploy script configured in firebase.json.`);
72
71
  }
73
- const { script } = await promptForBuildScript((_c = setup === null || setup === void 0 ? void 0 : setup.hosting) === null || _c === void 0 ? void 0 : _c.useWebFrameworks);
72
+ const { script } = await promptForBuildScript(setup?.hosting?.useWebFrameworks);
74
73
  const ymlDeployDoc = loadYMLDeploy();
75
74
  let shouldWriteYMLHostingFile = true;
76
75
  let shouldWriteYMLDeployFile = false;
@@ -81,7 +80,7 @@ async function initGitHub(setup) {
81
80
  shouldWriteYMLHostingFile = overwrite;
82
81
  }
83
82
  if (shouldWriteYMLHostingFile) {
84
- writeChannelActionYMLFile(YML_FULL_PATH_PULL_REQUEST, githubSecretName, setup.projectId, script, (_d = setup === null || setup === void 0 ? void 0 : setup.hosting) === null || _d === void 0 ? void 0 : _d.useWebFrameworks, (_e = setup === null || setup === void 0 ? void 0 : setup.hosting) === null || _e === void 0 ? void 0 : _e.source);
83
+ writeChannelActionYMLFile(YML_FULL_PATH_PULL_REQUEST, githubSecretName, setup.projectId, script, setup?.hosting?.useWebFrameworks, setup?.hosting?.source);
85
84
  logger_1.logger.info();
86
85
  (0, utils_1.logSuccess)(`Created workflow file ${(0, colorette_1.bold)(YML_FULL_PATH_PULL_REQUEST)}`);
87
86
  }
@@ -101,7 +100,7 @@ async function initGitHub(setup) {
101
100
  shouldWriteYMLDeployFile = true;
102
101
  }
103
102
  if (shouldWriteYMLDeployFile) {
104
- writeDeployToProdActionYMLFile(YML_FULL_PATH_MERGE, branch, githubSecretName, setup.projectId, script, (_f = setup === null || setup === void 0 ? void 0 : setup.hosting) === null || _f === void 0 ? void 0 : _f.useWebFrameworks, (_g = setup === null || setup === void 0 ? void 0 : setup.hosting) === null || _g === void 0 ? void 0 : _g.source);
103
+ writeDeployToProdActionYMLFile(YML_FULL_PATH_MERGE, branch, githubSecretName, setup.projectId, script, setup?.hosting?.useWebFrameworks, setup?.hosting?.source);
105
104
  logger_1.logger.info();
106
105
  (0, utils_1.logSuccess)(`Created workflow file ${(0, colorette_1.bold)(YML_FULL_PATH_MERGE)}`);
107
106
  }
@@ -111,7 +110,6 @@ async function initGitHub(setup) {
111
110
  logger_1.logger.info((0, colorette_1.bold)((0, colorette_1.underline)(`https://github.com/settings/connections/applications/${(0, api_1.githubClientId)()}`)));
112
111
  (0, utils_1.logLabeledBullet)("Action required", `Push any new workflow file(s) to your repo`);
113
112
  }
114
- exports.initGitHub = initGitHub;
115
113
  function getGitFolderPath() {
116
114
  const commandDir = process.cwd();
117
115
  let projectRootDir = commandDir;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.actuate = exports.askQuestions = void 0;
3
+ exports.askQuestions = askQuestions;
4
+ exports.actuate = actuate;
4
5
  const clc = require("colorette");
5
6
  const node_fs_1 = require("node:fs");
6
7
  const path_1 = require("path");
@@ -21,8 +22,7 @@ const INDEX_TEMPLATE = (0, templates_1.readTemplateSync)("init/hosting/index.htm
21
22
  const MISSING_TEMPLATE = (0, templates_1.readTemplateSync)("init/hosting/404.html");
22
23
  const DEFAULT_IGNORES = ["firebase.json", "**/.*", "**/node_modules/**"];
23
24
  async function askQuestions(setup, config, options) {
24
- var _a, _b, _c, _d, _e, _f;
25
- var _g, _h, _j, _k, _l;
25
+ var _a, _b, _c, _d, _e;
26
26
  setup.featureInfo = setup.featureInfo || {};
27
27
  setup.featureInfo.hosting = {};
28
28
  if (setup.projectId) {
@@ -67,14 +67,14 @@ async function askQuestions(setup, config, options) {
67
67
  }
68
68
  }
69
69
  if (setup.featureInfo.hosting.useWebFrameworks) {
70
- (_a = (_g = setup.featureInfo.hosting).source) !== null && _a !== void 0 ? _a : (_g.source = await (0, prompt_1.input)({
70
+ (_a = setup.featureInfo.hosting).source ?? (_a.source = await (0, prompt_1.input)({
71
71
  message: "What folder would you like to use for your web application's root directory?",
72
72
  default: "hosting",
73
73
  }));
74
74
  discoveredFramework = await (0, frameworks_1.discover)((0, path_1.join)(config.projectDir, setup.featureInfo.hosting.source));
75
75
  if (discoveredFramework) {
76
76
  const name = frameworks_1.WebFrameworks[discoveredFramework.framework].name;
77
- (_b = (_h = setup.featureInfo.hosting).useDiscoveredFramework) !== null && _b !== void 0 ? _b : (_h.useDiscoveredFramework = await (0, prompt_1.confirm)({
77
+ (_b = setup.featureInfo.hosting).useDiscoveredFramework ?? (_b.useDiscoveredFramework = await (0, prompt_1.confirm)({
78
78
  message: `Detected an existing ${name} codebase in ${setup.featureInfo.hosting.source}, should we use this?`,
79
79
  default: true,
80
80
  }));
@@ -89,8 +89,8 @@ async function askQuestions(setup, config, options) {
89
89
  choices.push({ name, value });
90
90
  }
91
91
  }
92
- const defaultChoice = (_c = choices.find(({ value }) => value === (discoveredFramework === null || discoveredFramework === void 0 ? void 0 : discoveredFramework.framework))) === null || _c === void 0 ? void 0 : _c.value;
93
- (_d = (_j = setup.featureInfo.hosting).webFramework) !== null && _d !== void 0 ? _d : (_j.webFramework = await (0, prompt_1.select)({
92
+ const defaultChoice = choices.find(({ value }) => value === discoveredFramework?.framework)?.value;
93
+ (_c = setup.featureInfo.hosting).webFramework ?? (_c.webFramework = await (0, prompt_1.select)({
94
94
  message: "Please choose the framework:",
95
95
  default: defaultChoice,
96
96
  choices,
@@ -109,20 +109,18 @@ async function askQuestions(setup, config, options) {
109
109
  logger_1.logger.info(`will contain Hosting assets to be uploaded with ${clc.bold("firebase deploy")}. If you`);
110
110
  logger_1.logger.info("have a build process for your assets, use your build's output directory.");
111
111
  logger_1.logger.info();
112
- (_e = (_k = setup.featureInfo.hosting).public) !== null && _e !== void 0 ? _e : (_k.public = await (0, prompt_1.input)({
112
+ (_d = setup.featureInfo.hosting).public ?? (_d.public = await (0, prompt_1.input)({
113
113
  message: "What do you want to use as your public directory?",
114
114
  default: "public",
115
115
  }));
116
- (_f = (_l = setup.featureInfo.hosting).spa) !== null && _f !== void 0 ? _f : (_l.spa = await (0, prompt_1.confirm)("Configure as a single-page app (rewrite all urls to /index.html)?"));
116
+ (_e = setup.featureInfo.hosting).spa ?? (_e.spa = await (0, prompt_1.confirm)("Configure as a single-page app (rewrite all urls to /index.html)?"));
117
117
  }
118
118
  if (await (0, prompt_1.confirm)("Set up automatic builds and deploys with GitHub?")) {
119
119
  return (0, github_1.initGitHub)(setup);
120
120
  }
121
121
  }
122
- exports.askQuestions = askQuestions;
123
122
  async function actuate(setup, config, options) {
124
- var _a;
125
- const hostingInfo = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.hosting;
123
+ const hostingInfo = setup.featureInfo?.hosting;
126
124
  if (!hostingInfo) {
127
125
  throw new error_1.FirebaseError("Could not find hosting info in setup.featureInfo.hosting. This should not happen.", { exit: 2 });
128
126
  }
@@ -163,4 +161,3 @@ async function actuate(setup, config, options) {
163
161
  await config.askWriteProjectFile(`${hostingInfo.public}/index.html`, INDEX_TEMPLATE.replace(/{{VERSION}}/g, response.body.current.version), !!options.force);
164
162
  }
165
163
  }
166
- exports.actuate = actuate;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.doSetup = void 0;
3
+ exports.doSetup = doSetup;
4
4
  const clc = require("colorette");
5
5
  const _ = require("lodash");
6
6
  const projects_1 = require("../../management/projects");
@@ -15,7 +15,6 @@ const OPTION_USE_PROJECT = "Use an existing project";
15
15
  const OPTION_NEW_PROJECT = "Create a new project";
16
16
  const OPTION_ADD_FIREBASE = "Add Firebase to an existing Google Cloud Platform project";
17
17
  async function doSetup(setup, config, options) {
18
- var _a, _b;
19
18
  setup.project = {};
20
19
  logger_1.logger.info();
21
20
  logger_1.logger.info(`First, let's associate this project directory with a Firebase project.`);
@@ -30,7 +29,7 @@ async function doSetup(setup, config, options) {
30
29
  await usingProject(setup, config, options.project);
31
30
  return;
32
31
  }
33
- const projectFromRcFile = (_b = (_a = setup.rcfile) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.default;
32
+ const projectFromRcFile = setup.rcfile?.projects?.default;
34
33
  if (projectFromRcFile) {
35
34
  await (0, requireAuth_1.requireAuth)(options);
36
35
  await usingProject(setup, config, projectFromRcFile, ".firebaserc");
@@ -74,7 +73,6 @@ async function doSetup(setup, config, options) {
74
73
  return;
75
74
  }
76
75
  }
77
- exports.doSetup = doSetup;
78
76
  async function usingProject(setup, config, projectId, from = "") {
79
77
  const pm = await (0, projects_1.getFirebaseProject)(projectId);
80
78
  const label = `${pm.projectId}` + (pm.displayName ? ` (${pm.displayName})` : "");
@@ -82,14 +80,13 @@ async function usingProject(setup, config, projectId, from = "") {
82
80
  await usingProjectMetadata(setup, config, pm);
83
81
  }
84
82
  async function usingProjectMetadata(setup, config, pm) {
85
- var _a, _b;
86
83
  if (!pm) {
87
84
  throw new error_1.FirebaseError("null FirebaseProjectMetadata");
88
85
  }
89
86
  _.set(setup.rcfile, "projects.default", pm.projectId);
90
87
  setup.projectId = pm.projectId;
91
88
  setup.projectNumber = pm.projectNumber;
92
- setup.instance = (_a = pm.resources) === null || _a === void 0 ? void 0 : _a.realtimeDatabaseInstance;
93
- setup.projectLocation = (_b = pm.resources) === null || _b === void 0 ? void 0 : _b.locationId;
89
+ setup.instance = pm.resources?.realtimeDatabaseInstance;
90
+ setup.projectLocation = pm.resources?.locationId;
94
91
  utils.makeActiveProject(config.projectDir, pm.projectId);
95
92
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.doSetup = void 0;
3
+ exports.doSetup = doSetup;
4
4
  const prompt_1 = require("../../prompt");
5
5
  const fsutils = require("../../fsutils");
6
6
  const clc = require("colorette");
@@ -24,4 +24,3 @@ async function doSetup(setup, config) {
24
24
  };
25
25
  config.writeProjectFile(setup.config.remoteconfig.template, "{}");
26
26
  }
27
- exports.doSetup = doSetup;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.actuate = exports.askQuestions = void 0;
3
+ exports.askQuestions = askQuestions;
4
+ exports.actuate = actuate;
4
5
  const clc = require("colorette");
5
6
  const logger_1 = require("../../logger");
6
7
  const prompt_1 = require("../../prompt");
@@ -27,10 +28,8 @@ async function askQuestions(setup, config) {
27
28
  setup.featureInfo = setup.featureInfo || {};
28
29
  setup.featureInfo.storage = info;
29
30
  }
30
- exports.askQuestions = askQuestions;
31
31
  async function actuate(setup, config) {
32
- var _a;
33
- const info = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.storage;
32
+ const info = setup.featureInfo?.storage;
34
33
  if (!info) {
35
34
  throw new error_1.FirebaseError("storage featureInfo is not found");
36
35
  }
@@ -43,4 +42,3 @@ async function actuate(setup, config) {
43
42
  config.writeProjectFile(info.rulesFilename, info.rules);
44
43
  }
45
44
  }
46
- exports.actuate = actuate;
package/lib/init/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.actuate = exports.init = void 0;
3
+ exports.init = init;
4
+ exports.actuate = actuate;
4
5
  const lodash_1 = require("lodash");
5
6
  const clc = require("colorette");
6
7
  const error_1 = require("../error");
@@ -66,8 +67,7 @@ const featuresList = [
66
67
  ];
67
68
  const featureMap = new Map(featuresList.map((feature) => [feature.name, feature]));
68
69
  async function init(setup, config, options) {
69
- var _a;
70
- const nextFeature = (_a = setup.features) === null || _a === void 0 ? void 0 : _a.shift();
70
+ const nextFeature = setup.features?.shift();
71
71
  if (nextFeature) {
72
72
  const start = process.uptime();
73
73
  const f = featureMap.get(nextFeature);
@@ -97,10 +97,8 @@ async function init(setup, config, options) {
97
97
  return init(setup, config, options);
98
98
  }
99
99
  }
100
- exports.init = init;
101
100
  async function actuate(setup, config, options) {
102
- var _a;
103
- const nextFeature = (_a = setup.features) === null || _a === void 0 ? void 0 : _a.shift();
101
+ const nextFeature = setup.features?.shift();
104
102
  if (nextFeature) {
105
103
  const start = process.uptime();
106
104
  const f = lookupFeature(nextFeature);
@@ -118,7 +116,6 @@ async function actuate(setup, config, options) {
118
116
  return actuate(setup, config, options);
119
117
  }
120
118
  }
121
- exports.actuate = actuate;
122
119
  function lookupFeature(feature) {
123
120
  const f = featureMap.get(feature);
124
121
  if (!f) {
package/lib/init/spawn.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.spawnWithCommandString = exports.spawnWithOutput = exports.wrapSpawn = void 0;
3
+ exports.wrapSpawn = wrapSpawn;
4
+ exports.spawnWithOutput = spawnWithOutput;
5
+ exports.spawnWithCommandString = spawnWithCommandString;
4
6
  const spawn = require("cross-spawn");
5
7
  const logger_1 = require("../logger");
6
8
  const error_1 = require("../error");
@@ -9,7 +11,7 @@ function wrapSpawn(cmd, args, projectDir) {
9
11
  const installer = spawn(cmd, args, {
10
12
  cwd: projectDir,
11
13
  stdio: "inherit",
12
- env: Object.assign({}, process.env),
14
+ env: { ...process.env },
13
15
  });
14
16
  installer.on("error", (err) => {
15
17
  logger_1.logger.debug((0, error_1.getErrStack)(err));
@@ -22,13 +24,11 @@ function wrapSpawn(cmd, args, projectDir) {
22
24
  });
23
25
  });
24
26
  }
25
- exports.wrapSpawn = wrapSpawn;
26
27
  function spawnWithOutput(cmd, args) {
27
28
  return new Promise((resolve, reject) => {
28
- var _a, _b;
29
29
  const child = spawn(cmd, args);
30
30
  let output = "";
31
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
31
+ child.stdout?.on("data", (data) => {
32
32
  if ((0, error_1.isObject)(data) && data.toString) {
33
33
  output += data.toString();
34
34
  }
@@ -36,7 +36,7 @@ function spawnWithOutput(cmd, args) {
36
36
  output += JSON.stringify(data);
37
37
  }
38
38
  });
39
- (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
39
+ child.stderr?.on("data", (data) => {
40
40
  logger_1.logger.debug(`Error: spawn(${cmd}, ${args.join(", ")})\n Stderr:\n${JSON.stringify(data)}\n`);
41
41
  });
42
42
  child.on("error", (err) => {
@@ -52,14 +52,13 @@ function spawnWithOutput(cmd, args) {
52
52
  });
53
53
  });
54
54
  }
55
- exports.spawnWithOutput = spawnWithOutput;
56
55
  function spawnWithCommandString(cmd, projectDir, environmentVariables) {
57
56
  return new Promise((resolve, reject) => {
58
57
  const installer = spawn(cmd, {
59
58
  cwd: projectDir,
60
59
  stdio: "inherit",
61
60
  shell: true,
62
- env: Object.assign(Object.assign({}, process.env), environmentVariables),
61
+ env: { ...process.env, ...environmentVariables },
63
62
  });
64
63
  installer.on("error", (err) => {
65
64
  logger_1.logger.log("DEBUG", (0, error_1.getErrStack)(err));
@@ -72,4 +71,3 @@ function spawnWithCommandString(cmd, projectDir, environmentVariables) {
72
71
  });
73
72
  });
74
73
  }
75
- exports.spawnWithCommandString = spawnWithCommandString;
package/lib/listFiles.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listFiles = void 0;
3
+ exports.listFiles = listFiles;
4
4
  const glob_1 = require("glob");
5
5
  function listFiles(cwd, ignore = []) {
6
6
  return (0, glob_1.sync)("**/*", {
@@ -12,4 +12,3 @@ function listFiles(cwd, ignore = []) {
12
12
  posix: true,
13
13
  });
14
14
  }
15
- exports.listFiles = listFiles;
package/lib/loadCJSON.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadCJSON = void 0;
3
+ exports.loadCJSON = loadCJSON;
4
4
  const error_1 = require("./error");
5
5
  const cjson = require("cjson");
6
6
  function loadCJSON(path) {
@@ -14,4 +14,3 @@ function loadCJSON(path) {
14
14
  throw new error_1.FirebaseError(`Parse Error in ${path}:\n\n${e.message}`);
15
15
  }
16
16
  }
17
- exports.loadCJSON = loadCJSON;
@@ -19,7 +19,7 @@ class LocalFunction {
19
19
  }
20
20
  return resource.replace(this.paramWildcardRegex, (wildcard) => {
21
21
  const wildcardNoBraces = wildcard.slice(1, -1);
22
- const sub = params === null || params === void 0 ? void 0 : params[wildcardNoBraces];
22
+ const sub = params?.[wildcardNoBraces];
23
23
  return sub || wildcardNoBraces + utils.randomInt(1, 9);
24
24
  });
25
25
  }
@@ -66,7 +66,7 @@ class LocalFunction {
66
66
  const req = Object.assign(opts || {}, {
67
67
  path: path,
68
68
  body: json,
69
- method: (opts === null || opts === void 0 ? void 0 : opts.method) || "GET",
69
+ method: opts?.method || "GET",
70
70
  });
71
71
  return callClient.request(req);
72
72
  });
@@ -97,8 +97,7 @@ class LocalFunction {
97
97
  return { path: "/", opts: {} };
98
98
  }
99
99
  constructAuth(auth, authType) {
100
- var _a, _b, _c;
101
- if ((auth === null || auth === void 0 ? void 0 : auth.admin) || (auth === null || auth === void 0 ? void 0 : auth.variable)) {
100
+ if (auth?.admin || auth?.variable) {
102
101
  return {
103
102
  admin: auth.admin || false,
104
103
  variable: auth.variable,
@@ -110,17 +109,17 @@ class LocalFunction {
110
109
  return {
111
110
  admin: false,
112
111
  variable: {
113
- uid: (_a = auth === null || auth === void 0 ? void 0 : auth.uid) !== null && _a !== void 0 ? _a : "",
114
- token: (_b = auth === null || auth === void 0 ? void 0 : auth.token) !== null && _b !== void 0 ? _b : {},
112
+ uid: auth?.uid ?? "",
113
+ token: auth?.token ?? {},
115
114
  },
116
115
  };
117
116
  case "ADMIN":
118
- if ((auth === null || auth === void 0 ? void 0 : auth.uid) || (auth === null || auth === void 0 ? void 0 : auth.token)) {
117
+ if (auth?.uid || auth?.token) {
119
118
  throw new Error("authType and auth are incompatible.");
120
119
  }
121
120
  return { admin: true };
122
121
  case "UNAUTHENTICATED":
123
- if ((auth === null || auth === void 0 ? void 0 : auth.uid) || (auth === null || auth === void 0 ? void 0 : auth.token)) {
122
+ if (auth?.uid || auth?.token) {
124
123
  throw new Error("authType and auth are incompatible.");
125
124
  }
126
125
  return { admin: false };
@@ -132,7 +131,7 @@ class LocalFunction {
132
131
  return {
133
132
  admin: false,
134
133
  variable: {
135
- uid: (_c = auth.uid) !== null && _c !== void 0 ? _c : "",
134
+ uid: auth.uid ?? "",
136
135
  token: auth.token || {},
137
136
  },
138
137
  };
@@ -183,7 +182,6 @@ class LocalFunction {
183
182
  return utils.getFunctionsEventProvider(eventTrigger.eventType) === "PubSub";
184
183
  }
185
184
  triggerEvent(data, opts) {
186
- var _a, _b, _c, _d;
187
185
  opts = opts || {};
188
186
  let operationType;
189
187
  let dataPayload;
@@ -214,7 +212,8 @@ class LocalFunction {
214
212
  delta: data.after,
215
213
  };
216
214
  }
217
- const resource = (_a = this.trigger.eventTrigger.resource) !== null && _a !== void 0 ? _a : (_b = this.trigger.eventTrigger.eventFilterPathPatterns) === null || _b === void 0 ? void 0 : _b.ref;
215
+ const resource = this.trigger.eventTrigger.resource ??
216
+ this.trigger.eventTrigger.eventFilterPathPatterns?.ref;
218
217
  opts.resource = this.substituteParams(resource, opts.params);
219
218
  opts.auth = this.constructAuth(opts.auth, opts.authType);
220
219
  this.controller.call(this.trigger, dataPayload, opts);
@@ -242,14 +241,15 @@ class LocalFunction {
242
241
  oldValue: this.makeFirestoreValue(data.before),
243
242
  };
244
243
  }
245
- const resource = (_c = this.trigger.eventTrigger.resource) !== null && _c !== void 0 ? _c : (_d = this.trigger.eventTrigger.eventFilterPathPatterns) === null || _d === void 0 ? void 0 : _d.document;
244
+ const resource = this.trigger.eventTrigger.resource ??
245
+ this.trigger.eventTrigger.eventFilterPathPatterns?.document;
246
246
  opts.resource = this.substituteParams(resource, opts.params);
247
247
  this.controller.call(this.trigger, dataPayload, opts);
248
248
  }
249
249
  else if (this.isPubsubFunc(this.trigger.eventTrigger)) {
250
250
  dataPayload = data;
251
251
  if (this.trigger.platform === "gcfv2") {
252
- dataPayload = { message: Object.assign(Object.assign({}, data), { messageId: uuid.v4() }) };
252
+ dataPayload = { message: { ...data, messageId: uuid.v4() } };
253
253
  }
254
254
  this.controller.call(this.trigger, dataPayload || {}, opts);
255
255
  }
@@ -260,9 +260,8 @@ class LocalFunction {
260
260
  return "Successfully invoked function.";
261
261
  }
262
262
  makeFn() {
263
- var _a;
264
263
  if (this.trigger.httpsTrigger) {
265
- const isCallable = !!((_a = this.trigger.labels) === null || _a === void 0 ? void 0 : _a["deployment-callable"]);
264
+ const isCallable = !!this.trigger.labels?.["deployment-callable"];
266
265
  if (isCallable) {
267
266
  return (data, opt) => this.constructCallableFunc(data, opt);
268
267
  }
package/lib/logError.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logError = void 0;
3
+ exports.logError = logError;
4
4
  const logger_1 = require("./logger");
5
5
  const clc = require("colorette");
6
6
  function logError(error) {
@@ -26,4 +26,3 @@ function logError(error) {
26
26
  logger_1.logger.debug("Error Context:", JSON.stringify(error.context, undefined, 2));
27
27
  }
28
28
  }
29
- exports.logError = logError;