firebase-tools 15.0.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +33 -36
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +47 -10
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +31 -31
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +47 -45
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +7 -4
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +67 -50
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newUniqueId = exports.toDNSCompatibleId = exports.actuate = exports.askQuestions = exports.FDC_DEFAULT_REGION = void 0;
3
+ exports.newUniqueId = exports.FDC_DEFAULT_REGION = void 0;
4
+ exports.askQuestions = askQuestions;
5
+ exports.actuate = actuate;
6
+ exports.toDNSCompatibleId = toDNSCompatibleId;
4
7
  const path_1 = require("path");
5
8
  const clc = require("colorette");
6
9
  const fs = require("fs-extra");
@@ -93,13 +96,11 @@ async function askQuestions(setup) {
93
96
  setup.featureInfo.dataconnect = info;
94
97
  await sdk.askQuestions(setup);
95
98
  }
96
- exports.askQuestions = askQuestions;
97
99
  async function actuate(setup, config, options) {
98
- var _a, _b, _c;
99
100
  const dir = config.get("dataconnect.source", "dataconnect");
100
101
  const dataDir = config.get("emulators.dataconnect.dataDir", `${dir}/.dataconnect/pgliteData`);
101
102
  config.set("emulators.dataconnect.dataDir", dataDir);
102
- const info = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.dataconnect;
103
+ const info = setup.featureInfo?.dataconnect;
103
104
  if (!info) {
104
105
  throw new Error("Data Connect feature RequiredInfo is not provided");
105
106
  }
@@ -113,15 +114,20 @@ async function actuate(setup, config, options) {
113
114
  await sdk.actuate(setup, config);
114
115
  }
115
116
  finally {
116
- const sdkInfo = (_b = setup.featureInfo) === null || _b === void 0 ? void 0 : _b.dataconnectSdk;
117
- const source = ((_c = setup.featureInfo) === null || _c === void 0 ? void 0 : _c.dataconnectSource) || "init";
118
- void (0, track_1.trackGA4)("dataconnect_init", Object.assign({ source, flow: info.flow.substring(1), project_status: setup.projectId
117
+ const sdkInfo = setup.featureInfo?.dataconnectSdk;
118
+ const source = setup.featureInfo?.dataconnectSource || "init";
119
+ void (0, track_1.trackGA4)("dataconnect_init", {
120
+ source,
121
+ flow: info.flow.substring(1),
122
+ project_status: setup.projectId
119
123
  ? (await (0, cloudbilling_1.isBillingEnabled)(setup))
120
124
  ? info.shouldProvisionCSQL
121
125
  ? "blaze_provisioned_csql"
122
126
  : "blaze"
123
127
  : "spark"
124
- : "missing" }, (sdkInfo ? sdk.initAppCounters(sdkInfo) : {})), Date.now() - startTime);
128
+ : "missing",
129
+ ...(sdkInfo ? sdk.initAppCounters(sdkInfo) : {}),
130
+ }, Date.now() - startTime);
125
131
  }
126
132
  if (info.appDescription) {
127
133
  setup.instructions.push(`You can visualize the Data Connect Schema in Firebase Console:
@@ -130,9 +136,7 @@ async function actuate(setup, config, options) {
130
136
  }
131
137
  setup.instructions.push(`Install the Data Connect VS Code Extensions. You can explore Data Connect Query on local pgLite and Cloud SQL Postgres Instance.`);
132
138
  }
133
- exports.actuate = actuate;
134
139
  async function actuateWithInfo(setup, config, info, options) {
135
- var _a;
136
140
  const projectId = setup.projectId;
137
141
  if (!projectId) {
138
142
  info.flow += "_save_template";
@@ -146,7 +150,7 @@ async function actuateWithInfo(setup, config, info, options) {
146
150
  instanceId: info.cloudSqlInstanceId,
147
151
  databaseId: info.cloudSqlDatabase,
148
152
  requireGoogleMlIntegration: false,
149
- source: ((_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.dataconnectSource) || "init",
153
+ source: setup.featureInfo?.dataconnectSource || "init",
150
154
  });
151
155
  }
152
156
  const serviceName = `projects/${projectId}/locations/${info.locationId}/services/${info.serviceId}`;
@@ -254,9 +258,11 @@ function schemasDeploySequence(projectId, info, schemaFiles, linkToCloudSql) {
254
258
  ];
255
259
  }
256
260
  async function writeFiles(config, info, serviceGql, options) {
257
- var _a, _b;
258
261
  const dir = config.get("dataconnect.source") || "dataconnect";
259
- const subbedDataconnectYaml = subDataconnectYamlValues(Object.assign(Object.assign({}, info), { connectorDirs: serviceGql.connectors.map((c) => c.path) }), (_a = serviceGql.secondarySchemaGqls) === null || _a === void 0 ? void 0 : _a.map((sch) => ({ id: sch.id, uri: sch.uri })));
262
+ const subbedDataconnectYaml = subDataconnectYamlValues({
263
+ ...info,
264
+ connectorDirs: serviceGql.connectors.map((c) => c.path),
265
+ }, serviceGql.secondarySchemaGqls?.map((sch) => ({ id: sch.id, uri: sch.uri })));
260
266
  config.set("dataconnect", { source: dir });
261
267
  await config.askWriteProjectFile((0, path_1.join)(dir, "dataconnect.yaml"), subbedDataconnectYaml, !!options.force, true);
262
268
  if (serviceGql.seedDataGql) {
@@ -270,7 +276,7 @@ async function writeFiles(config, info, serviceGql, options) {
270
276
  else {
271
277
  fs.ensureFileSync((0, path_1.join)(dir, "schema", "schema.gql"));
272
278
  }
273
- if ((_b = serviceGql.secondarySchemaGqls) === null || _b === void 0 ? void 0 : _b.length) {
279
+ if (serviceGql.secondarySchemaGqls?.length) {
274
280
  for (const sch of serviceGql.secondarySchemaGqls) {
275
281
  for (const f of sch.files) {
276
282
  await config.askWriteProjectFile((0, path_1.join)(dir, `schema_${sch.id}`, f.path), f.content, !!options.force);
@@ -353,7 +359,6 @@ async function promptForExistingServices(setup, info) {
353
359
  await downloadService(info, choice.name);
354
360
  }
355
361
  async function downloadService(info, serviceName) {
356
- var _a, _b, _c, _d, _e, _f, _g;
357
362
  let schemas = [];
358
363
  try {
359
364
  schemas = await (0, client_1.listSchemas)(serviceName, [
@@ -383,12 +388,12 @@ async function downloadService(info, serviceName) {
383
388
  for (const sch of schemas) {
384
389
  if ((0, types_1.isMainSchema)(sch)) {
385
390
  const primaryDatasource = sch.datasources.find((d) => d.postgresql);
386
- if ((_b = (_a = primaryDatasource === null || primaryDatasource === void 0 ? void 0 : primaryDatasource.postgresql) === null || _a === void 0 ? void 0 : _a.cloudSql) === null || _b === void 0 ? void 0 : _b.instance) {
391
+ if (primaryDatasource?.postgresql?.cloudSql?.instance) {
387
392
  const instanceName = (0, names_1.parseCloudSQLInstanceName)(primaryDatasource.postgresql.cloudSql.instance);
388
393
  info.cloudSqlInstanceId = instanceName.instanceId;
389
394
  }
390
- info.cloudSqlDatabase = (_d = (_c = primaryDatasource === null || primaryDatasource === void 0 ? void 0 : primaryDatasource.postgresql) === null || _c === void 0 ? void 0 : _c.database) !== null && _d !== void 0 ? _d : "";
391
- if ((_e = sch.source.files) === null || _e === void 0 ? void 0 : _e.length) {
395
+ info.cloudSqlDatabase = primaryDatasource?.postgresql?.database ?? "";
396
+ if (sch.source.files?.length) {
392
397
  info.serviceGql.schemaGql = sch.source.files;
393
398
  }
394
399
  }
@@ -399,7 +404,7 @@ async function downloadService(info, serviceName) {
399
404
  info.serviceGql.secondarySchemaGqls.push({
400
405
  id: sch.name.split("/").pop(),
401
406
  files: sch.source.files || [],
402
- uri: (_g = (_f = sch.datasources[0].httpGraphql) === null || _f === void 0 ? void 0 : _f.uri) !== null && _g !== void 0 ? _g : "",
407
+ uri: sch.datasources[0].httpGraphql?.uri ?? "",
403
408
  });
404
409
  }
405
410
  }
@@ -470,9 +475,8 @@ async function promptForCloudSQL(setup, info) {
470
475
  if (info.cloudSqlInstanceId === "") {
471
476
  const instances = await cloudsql.listInstances(setup.projectId);
472
477
  let choices = instances.map((i) => {
473
- var _a;
474
478
  let display = `${i.name} (${i.region})`;
475
- if (((_a = i.settings.userLabels) === null || _a === void 0 ? void 0 : _a["firebase-data-connect"]) === "ft") {
479
+ if (i.settings.userLabels?.["firebase-data-connect"] === "ft") {
476
480
  display += " (no cost trial)";
477
481
  }
478
482
  return { name: display, value: i.name, location: i.region };
@@ -600,4 +604,3 @@ function toDNSCompatibleId(id) {
600
604
  }
601
605
  return id || "app";
602
606
  }
603
- exports.toDNSCompatibleId = toDNSCompatibleId;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addSchemaToDataConnectYaml = exports.actuate = exports.askQuestions = void 0;
3
+ exports.askQuestions = askQuestions;
4
+ exports.actuate = actuate;
5
+ exports.addSchemaToDataConnectYaml = addSchemaToDataConnectYaml;
4
6
  const clc = require("colorette");
5
7
  const fs = require("fs-extra");
6
8
  const path_1 = require("path");
@@ -13,7 +15,6 @@ const experiments = require("../../../experiments");
13
15
  const cloudbilling_1 = require("../../../gcp/cloudbilling");
14
16
  const track_1 = require("../../../track");
15
17
  async function askQuestions(setup, config) {
16
- var _a;
17
18
  const resolverInfo = {
18
19
  id: "",
19
20
  uri: "",
@@ -41,7 +42,7 @@ async function askQuestions(setup, config) {
41
42
  }
42
43
  resolverInfo.id = await (0, prompt_1.input)({
43
44
  message: `What ID would you like to use for your custom resolver?`,
44
- default: (0, utils_1.newUniqueId)(`resolver`, ((_a = resolverInfo.serviceInfo.dataConnectYaml.schemas) === null || _a === void 0 ? void 0 : _a.map((sch) => sch.id || "")) || []),
45
+ default: (0, utils_1.newUniqueId)(`resolver`, resolverInfo.serviceInfo.dataConnectYaml.schemas?.map((sch) => sch.id || "") || []),
45
46
  });
46
47
  resolverInfo.uri = `https://${resolverInfo.id}-${setup.projectNumber || "PROJECT_NUMBER"}.${resolverInfo.serviceInfo.dataConnectYaml.location}.run.app/graphql`;
47
48
  (0, utils_1.logBullet)("Setting " +
@@ -52,13 +53,11 @@ async function askQuestions(setup, config) {
52
53
  setup.featureInfo = setup.featureInfo || {};
53
54
  setup.featureInfo.dataconnectResolver = resolverInfo;
54
55
  }
55
- exports.askQuestions = askQuestions;
56
56
  async function actuate(setup, config) {
57
- var _a;
58
57
  if (!experiments.isEnabled("fdcwebhooks")) {
59
58
  return;
60
59
  }
61
- const resolverInfo = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.dataconnectResolver;
60
+ const resolverInfo = setup.featureInfo?.dataconnectResolver;
62
61
  if (!resolverInfo) {
63
62
  throw new Error("Data Connect resolver feature ResolverRequiredInfo not provided");
64
63
  }
@@ -78,10 +77,8 @@ async function actuate(setup, config) {
78
77
  }, Date.now() - startTime);
79
78
  }
80
79
  }
81
- exports.actuate = actuate;
82
80
  function actuateWithInfo(config, info) {
83
- var _a;
84
- const dataConnectYaml = JSON.parse(JSON.stringify((_a = info.serviceInfo) === null || _a === void 0 ? void 0 : _a.dataConnectYaml));
81
+ const dataConnectYaml = JSON.parse(JSON.stringify(info.serviceInfo?.dataConnectYaml));
85
82
  addSchemaToDataConnectYaml(dataConnectYaml, info);
86
83
  info.serviceInfo.dataConnectYaml = dataConnectYaml;
87
84
  const dataConnectYamlContents = yaml.stringify(dataConnectYaml);
@@ -108,4 +105,3 @@ function addSchemaToDataConnectYaml(dataConnectYaml, info) {
108
105
  }
109
106
  dataConnectYaml.schemas.push(secondarySchema);
110
107
  }
111
- exports.addSchemaToDataConnectYaml = addSchemaToDataConnectYaml;
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addSdkGenerateToConnectorYaml = exports.initAppCounters = exports.actuate = exports.chooseApp = exports.askQuestions = exports.FDC_SDK_PLATFORM_ENV = exports.FDC_SDK_FRAMEWORKS_ENV = exports.FDC_APP_FOLDER = void 0;
3
+ exports.FDC_SDK_PLATFORM_ENV = exports.FDC_SDK_FRAMEWORKS_ENV = exports.FDC_APP_FOLDER = void 0;
4
+ exports.askQuestions = askQuestions;
5
+ exports.chooseApp = chooseApp;
6
+ exports.actuate = actuate;
7
+ exports.initAppCounters = initAppCounters;
8
+ exports.addSdkGenerateToConnectorYaml = addSdkGenerateToConnectorYaml;
4
9
  const yaml = require("yaml");
5
10
  const clc = require("colorette");
6
11
  const path = require("path");
@@ -63,7 +68,6 @@ async function askQuestions(setup) {
63
68
  setup.featureInfo = setup.featureInfo || {};
64
69
  setup.featureInfo.dataconnectSdk = info;
65
70
  }
66
- exports.askQuestions = askQuestions;
67
71
  async function chooseApp() {
68
72
  let apps = dedupeAppsByPlatformAndDirectory(await (0, appUtils_1.detectApps)(cwd));
69
73
  if (apps.length) {
@@ -106,6 +110,12 @@ async function chooseApp() {
106
110
  const pickedApps = await (0, prompt_1.checkbox)({
107
111
  message: "Which apps do you want to set up Data Connect SDKs in?",
108
112
  choices,
113
+ validate: (choices) => {
114
+ if (choices.length === 0) {
115
+ return "Please choose at least one app.";
116
+ }
117
+ return true;
118
+ },
109
119
  });
110
120
  if (!pickedApps || !pickedApps.length) {
111
121
  throw new error_1.FirebaseError("Command Aborted. Please choose at least one app.");
@@ -114,10 +124,8 @@ async function chooseApp() {
114
124
  }
115
125
  return apps;
116
126
  }
117
- exports.chooseApp = chooseApp;
118
127
  async function actuate(setup, config) {
119
- var _a, _b, _c;
120
- const sdkInfo = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.dataconnectSdk;
128
+ const sdkInfo = setup.featureInfo?.dataconnectSdk;
121
129
  if (!sdkInfo) {
122
130
  throw new Error("Data Connect SDK feature RequiredInfo is not provided");
123
131
  }
@@ -126,20 +134,22 @@ async function actuate(setup, config) {
126
134
  await actuateWithInfo(setup, config, sdkInfo);
127
135
  }
128
136
  finally {
129
- const fdcInfo = (_b = setup.featureInfo) === null || _b === void 0 ? void 0 : _b.dataconnect;
137
+ const fdcInfo = setup.featureInfo?.dataconnect;
130
138
  if (!fdcInfo) {
131
- const source = ((_c = setup.featureInfo) === null || _c === void 0 ? void 0 : _c.dataconnectSource) || "init_sdk";
132
- void (0, track_1.trackGA4)("dataconnect_init", Object.assign({ source, project_status: setup.projectId
139
+ const source = setup.featureInfo?.dataconnectSource || "init_sdk";
140
+ void (0, track_1.trackGA4)("dataconnect_init", {
141
+ source,
142
+ project_status: setup.projectId
133
143
  ? (await (0, cloudbilling_1.isBillingEnabled)(setup))
134
144
  ? "blaze"
135
145
  : "spark"
136
- : "missing" }, initAppCounters(sdkInfo)), Date.now() - startTime);
146
+ : "missing",
147
+ ...initAppCounters(sdkInfo),
148
+ }, Date.now() - startTime);
137
149
  }
138
150
  }
139
151
  }
140
- exports.actuate = actuate;
141
152
  function initAppCounters(info) {
142
- var _a;
143
153
  const counts = {
144
154
  num_web_apps: 0,
145
155
  num_android_apps: 0,
@@ -147,7 +157,7 @@ function initAppCounters(info) {
147
157
  num_flutter_apps: 0,
148
158
  num_admin_node_apps: 0,
149
159
  };
150
- for (const app of (_a = info.apps) !== null && _a !== void 0 ? _a : []) {
160
+ for (const app of info.apps ?? []) {
151
161
  switch (app.platform) {
152
162
  case appUtils_1.Platform.ADMIN_NODE:
153
163
  counts.num_admin_node_apps++;
@@ -168,7 +178,6 @@ function initAppCounters(info) {
168
178
  }
169
179
  return counts;
170
180
  }
171
- exports.initAppCounters = initAppCounters;
172
181
  async function actuateWithInfo(setup, config, info) {
173
182
  if (!info.apps.length) {
174
183
  info.apps = await (0, appUtils_1.detectApps)(cwd);
@@ -199,16 +208,16 @@ async function actuateWithInfo(setup, config, info) {
199
208
  });
200
209
  }
201
210
  catch (e) {
202
- (0, utils_1.logLabeledError)("dataconnect", `Failed to generate Data Connect SDKs\n${e === null || e === void 0 ? void 0 : e.message}`);
211
+ (0, utils_1.logLabeledError)("dataconnect", `Failed to generate Data Connect SDKs\n${e?.message}`);
203
212
  }
204
213
  (0, utils_1.logLabeledSuccess)("dataconnect", `Installed generated SDKs for ${clc.bold(apps.map((a) => (0, appUtils_1.appDescription)(a)).join(", "))}`);
205
214
  if (apps.some((a) => a.platform === appUtils_1.Platform.IOS)) {
206
215
  (0, utils_1.logBullet)(clc.bold("Please follow the instructions here to add your generated sdk to your XCode project:\n\thttps://firebase.google.com/docs/data-connect/ios-sdk#set-client"));
207
216
  }
208
- if (apps.some((a) => { var _a; return (_a = a.frameworks) === null || _a === void 0 ? void 0 : _a.includes(appUtils_1.Framework.REACT); })) {
217
+ if (apps.some((a) => a.frameworks?.includes(appUtils_1.Framework.REACT))) {
209
218
  (0, utils_1.logBullet)("Visit https://firebase.google.com/docs/data-connect/web-sdk#react for more information on how to set up React Generated SDKs for Firebase Data Connect");
210
219
  }
211
- if (apps.some((a) => { var _a; return (_a = a.frameworks) === null || _a === void 0 ? void 0 : _a.includes(appUtils_1.Framework.ANGULAR); })) {
220
+ if (apps.some((a) => a.frameworks?.includes(appUtils_1.Framework.ANGULAR))) {
212
221
  (0, utils_1.logBullet)("Run `ng add @angular/fire` to install angular sdk dependencies.\nVisit https://github.com/invertase/tanstack-query-firebase/tree/main/packages/angular for more information on how to set up Angular Generated SDKs for Firebase Data Connect");
213
222
  }
214
223
  }
@@ -256,7 +265,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
256
265
  package: `@dataconnect/admin-generated`,
257
266
  packageJsonDir: path.relative(connectorDir, appDir),
258
267
  };
259
- if (!(0, lodash_1.isArray)(generate === null || generate === void 0 ? void 0 : generate.adminNodeSdk)) {
268
+ if (!(0, lodash_1.isArray)(generate?.adminNodeSdk)) {
260
269
  generate.adminNodeSdk = generate.adminNodeSdk ? [generate.adminNodeSdk] : [];
261
270
  }
262
271
  if (!generate.adminNodeSdk.some((s) => s.outputDir === adminNodeSdk.outputDir)) {
@@ -275,7 +284,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
275
284
  for (const f of app.frameworks || []) {
276
285
  javascriptSdk[f] = true;
277
286
  }
278
- if (!(0, lodash_1.isArray)(generate === null || generate === void 0 ? void 0 : generate.javascriptSdk)) {
287
+ if (!(0, lodash_1.isArray)(generate?.javascriptSdk)) {
279
288
  generate.javascriptSdk = generate.javascriptSdk ? [generate.javascriptSdk] : [];
280
289
  }
281
290
  if (!generate.javascriptSdk.some((s) => s.outputDir === javascriptSdk.outputDir)) {
@@ -288,7 +297,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
288
297
  outputDir: path.relative(connectorDir, path.join(appDir, `lib/dataconnect_generated`)),
289
298
  package: "dataconnect_generated/generated.dart",
290
299
  };
291
- if (!(0, lodash_1.isArray)(generate === null || generate === void 0 ? void 0 : generate.dartSdk)) {
300
+ if (!(0, lodash_1.isArray)(generate?.dartSdk)) {
292
301
  generate.dartSdk = generate.dartSdk ? [generate.dartSdk] : [];
293
302
  }
294
303
  if (!generate.dartSdk.some((s) => s.outputDir === dartSdk.outputDir)) {
@@ -301,7 +310,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
301
310
  outputDir: path.relative(connectorDir, path.join(appDir, `src/main/kotlin`)),
302
311
  package: `com.google.firebase.dataconnect.generated`,
303
312
  };
304
- if (!(0, lodash_1.isArray)(generate === null || generate === void 0 ? void 0 : generate.kotlinSdk)) {
313
+ if (!(0, lodash_1.isArray)(generate?.kotlinSdk)) {
305
314
  generate.kotlinSdk = generate.kotlinSdk ? [generate.kotlinSdk] : [];
306
315
  }
307
316
  if (!generate.kotlinSdk.some((s) => s.outputDir === kotlinSdk.outputDir)) {
@@ -314,7 +323,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
314
323
  outputDir: path.relative(connectorDir, path.join(app.directory, `../FirebaseDataConnectGenerated`)),
315
324
  package: "DataConnectGenerated",
316
325
  };
317
- if (!(0, lodash_1.isArray)(generate === null || generate === void 0 ? void 0 : generate.swiftSdk)) {
326
+ if (!(0, lodash_1.isArray)(generate?.swiftSdk)) {
318
327
  generate.swiftSdk = generate.swiftSdk ? [generate.swiftSdk] : [];
319
328
  }
320
329
  if (!generate.swiftSdk.some((s) => s.outputDir === swiftSdk.outputDir)) {
@@ -326,9 +335,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
326
335
  throw new error_1.FirebaseError(`Unsupported platform ${app.platform} for Data Connect SDK generation. Supported platforms are: ${Object.values(appUtils_1.Platform).join(", ")}\n${JSON.stringify(app)}`);
327
336
  }
328
337
  }
329
- exports.addSdkGenerateToConnectorYaml = addSdkGenerateToConnectorYaml;
330
338
  function dedupeAppsByPlatformAndDirectory(apps) {
331
- var _a;
332
339
  const uniqueApps = new Map();
333
340
  for (const app of apps) {
334
341
  const frameworkKey = app.frameworks ? [...app.frameworks].sort().join(",") : "";
@@ -338,7 +345,7 @@ function dedupeAppsByPlatformAndDirectory(apps) {
338
345
  platform: app.platform,
339
346
  directory: app.directory,
340
347
  };
341
- if ((_a = app.frameworks) === null || _a === void 0 ? void 0 : _a.length) {
348
+ if (app.frameworks?.length) {
342
349
  minifiedApp.frameworks = [...app.frameworks];
343
350
  }
344
351
  uniqueApps.set(key, minifiedApp);
@@ -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 utils = require("../../utils");
6
6
  const prompt_1 = require("../../prompt");
@@ -9,12 +9,11 @@ const constants_1 = require("../../emulator/constants");
9
9
  const downloadableEmulators_1 = require("../../emulator/downloadableEmulators");
10
10
  const initEmulators_1 = require("../../emulator/initEmulators");
11
11
  async function doSetup(setup, config) {
12
- var _a, _b, _c;
13
12
  const choices = types_1.ALL_SERVICE_EMULATORS.map((e) => {
14
13
  return {
15
14
  value: e,
16
15
  name: constants_1.Constants.description(e),
17
- checked: (config === null || config === void 0 ? void 0 : config.has(e)) || (config === null || config === void 0 ? void 0 : config.has(`emulators.${e}`)),
16
+ checked: config?.has(e) || config?.has(`emulators.${e}`),
18
17
  };
19
18
  });
20
19
  const selections = {};
@@ -47,7 +46,10 @@ async function doSetup(setup, config) {
47
46
  if (additionalInitFn) {
48
47
  const additionalOptions = await additionalInitFn(config);
49
48
  if (additionalOptions) {
50
- emulators[selected] = Object.assign(Object.assign({}, setup.config.emulators[selected]), additionalOptions);
49
+ emulators[selected] = {
50
+ ...setup.config.emulators[selected],
51
+ ...additionalOptions,
52
+ };
51
53
  }
52
54
  }
53
55
  }
@@ -85,9 +87,8 @@ async function doSetup(setup, config) {
85
87
  await (0, downloadableEmulators_1.downloadIfNecessary)(selected);
86
88
  }
87
89
  }
88
- if ((_c = (_b = (_a = setup === null || setup === void 0 ? void 0 : setup.config) === null || _a === void 0 ? void 0 : _a.emulators) === null || _b === void 0 ? void 0 : _b.ui) === null || _c === void 0 ? void 0 : _c.enabled) {
90
+ if (setup?.config?.emulators?.ui?.enabled) {
89
91
  (0, downloadableEmulators_1.downloadIfNecessary)(types_1.Emulators.UI);
90
92
  }
91
93
  }
92
94
  }
93
- exports.doSetup = doSetup;
@@ -1,17 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.doSetup = void 0;
3
+ exports.doSetup = doSetup;
4
4
  const requirePermissions_1 = require("../../../requirePermissions");
5
5
  const ensureApiEnabled_1 = require("../../../ensureApiEnabled");
6
6
  const manifest = require("../../../extensions/manifest");
7
7
  const api_1 = require("../../../api");
8
8
  async function doSetup(setup, config, options) {
9
- var _a, _b;
10
- const projectId = (_b = (_a = setup === null || setup === void 0 ? void 0 : setup.rcfile) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.default;
9
+ const projectId = setup?.rcfile?.projects?.default;
11
10
  if (projectId) {
12
- await (0, requirePermissions_1.requirePermissions)(Object.assign(Object.assign({}, options), { project: projectId }));
11
+ await (0, requirePermissions_1.requirePermissions)({ ...options, project: projectId });
13
12
  await Promise.all([(0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.extensionsOrigin)(), "unused", true)]);
14
13
  }
15
14
  return manifest.writeEmptyManifest(config, options);
16
15
  }
17
- 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 rules = require("./rules");
5
6
  const indexes = require("./indexes");
6
7
  const error_1 = require("../../../error");
@@ -11,12 +12,12 @@ const api_2 = require("../../../api");
11
12
  async function askQuestions(setup, config) {
12
13
  const firestore = !Array.isArray(setup.config.firestore) ? setup.config.firestore : undefined;
13
14
  const info = {
14
- databaseId: (firestore === null || firestore === void 0 ? void 0 : firestore.database) || "",
15
- locationId: (firestore === null || firestore === void 0 ? void 0 : firestore.location) || "",
16
- rulesFilename: (firestore === null || firestore === void 0 ? void 0 : firestore.rules) || "",
15
+ databaseId: firestore?.database || "",
16
+ locationId: firestore?.location || "",
17
+ rulesFilename: firestore?.rules || "",
17
18
  rules: "",
18
19
  writeRules: true,
19
- indexesFilename: (firestore === null || firestore === void 0 ? void 0 : firestore.indexes) || "",
20
+ indexesFilename: firestore?.indexes || "",
20
21
  indexes: "",
21
22
  writeIndexes: true,
22
23
  };
@@ -63,10 +64,8 @@ async function askQuestions(setup, config) {
63
64
  setup.featureInfo = setup.featureInfo || {};
64
65
  setup.featureInfo.firestore = info;
65
66
  }
66
- exports.askQuestions = askQuestions;
67
67
  async function actuate(setup, config) {
68
- var _a;
69
- const info = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.firestore;
68
+ const info = setup.featureInfo?.firestore;
70
69
  if (!info) {
71
70
  throw new error_1.FirebaseError("Firestore featureInfo is not found");
72
71
  }
@@ -89,4 +88,3 @@ async function actuate(setup, config) {
89
88
  config.writeProjectFile(info.indexesFilename, info.indexes);
90
89
  }
91
90
  }
92
- exports.actuate = actuate;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initIndexes = exports.INDEXES_TEMPLATE = exports.DEFAULT_INDEXES_FILE = void 0;
3
+ exports.INDEXES_TEMPLATE = exports.DEFAULT_INDEXES_FILE = void 0;
4
+ exports.initIndexes = initIndexes;
4
5
  const clc = require("colorette");
5
6
  const error_1 = require("../../../error");
6
7
  const api = require("../../../firestore/api");
@@ -34,7 +35,6 @@ async function initIndexes(setup, config, info) {
34
35
  }
35
36
  info.writeRules = await config.confirmWriteProjectFile(info.indexesFilename, info.indexes);
36
37
  }
37
- exports.initIndexes = initIndexes;
38
38
  async function getIndexesFromConsole(projectId, databaseId) {
39
39
  const indexesPromise = indexes.listIndexes(projectId, databaseId);
40
40
  const fieldOverridesPromise = indexes.listFieldOverrides(projectId, databaseId);
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initRules = exports.getDefaultRules = exports.DEFAULT_RULES_FILE = void 0;
3
+ exports.DEFAULT_RULES_FILE = void 0;
4
+ exports.getDefaultRules = getDefaultRules;
5
+ exports.initRules = initRules;
4
6
  const clc = require("colorette");
5
7
  const gcp = require("../../../gcp");
6
8
  const prompt_1 = require("../../../prompt");
@@ -14,7 +16,6 @@ function getDefaultRules() {
14
16
  const formattedForRules = `${date.getFullYear()}, ${date.getMonth() + 1}, ${date.getDate()}`;
15
17
  return RULES_TEMPLATE.replace(/{{IN_30_DAYS}}/g, formattedForRules);
16
18
  }
17
- exports.getDefaultRules = getDefaultRules;
18
19
  async function initRules(setup, config, info) {
19
20
  logger_1.logger.info();
20
21
  logger_1.logger.info("Firestore Security Rules allow you to define how and when to allow");
@@ -37,7 +38,6 @@ async function initRules(setup, config, info) {
37
38
  }
38
39
  info.writeRules = await config.confirmWriteProjectFile(info.rulesFilename, info.rules);
39
40
  }
40
- exports.initRules = initRules;
41
41
  async function getRulesFromConsole(projectId) {
42
42
  const name = await gcp.rules.getLatestRulesetName(projectId, "cloud.firestore");
43
43
  if (!name) {
@@ -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 logger_1 = require("../../../logger");
6
6
  const prompt_1 = require("../../../prompt");
@@ -12,10 +12,9 @@ const api_1 = require("../../../api");
12
12
  const supported = require("../../../deploy/functions/runtimes/supported");
13
13
  const MAX_ATTEMPTS = 5;
14
14
  async function doSetup(setup, config, options) {
15
- var _a, _b;
16
- const projectId = (_b = (_a = setup === null || setup === void 0 ? void 0 : setup.rcfile) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.default;
15
+ const projectId = setup?.rcfile?.projects?.default;
17
16
  if (projectId) {
18
- await (0, requirePermissions_1.requirePermissions)(Object.assign(Object.assign({}, options), { project: projectId }));
17
+ await (0, requirePermissions_1.requirePermissions)({ ...options, project: projectId });
19
18
  await Promise.all([
20
19
  (0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.functionsOrigin)(), "unused", true),
21
20
  (0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.runtimeconfigOrigin)(), "unused", true),
@@ -46,7 +45,6 @@ async function doSetup(setup, config, options) {
46
45
  });
47
46
  return initOpt === "new" ? initNewCodebase(setup, config) : overwriteCodebase(setup, config);
48
47
  }
49
- exports.doSetup = doSetup;
50
48
  async function initNewCodebase(setup, config) {
51
49
  logger_1.logger.info("Let's create a new codebase for your functions.");
52
50
  logger_1.logger.info("A directory corresponding to the codebase will be created in your project");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setup = void 0;
3
+ exports.setup = setup;
4
4
  const npm_dependencies_1 = require("./npm-dependencies");
5
5
  const prompt_1 = require("../../../prompt");
6
6
  const projectConfig_1 = require("../../../functions/projectConfig");
@@ -28,4 +28,3 @@ async function setup(setup, config) {
28
28
  await config.askWriteProjectFile(`${setup.functions.source}/.gitignore`, GITIGNORE_TEMPLATE);
29
29
  await (0, npm_dependencies_1.askInstallDependencies)(setup.functions, config);
30
30
  }
31
- exports.setup = setup;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.askInstallDependencies = void 0;
3
+ exports.askInstallDependencies = askInstallDependencies;
4
4
  const logger_1 = require("../../../logger");
5
5
  const prompt_1 = require("../../../prompt");
6
6
  const spawn_1 = require("../../spawn");
@@ -19,4 +19,3 @@ async function askInstallDependencies(setup, config) {
19
19
  }
20
20
  }
21
21
  }
22
- exports.askInstallDependencies = askInstallDependencies;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setup = void 0;
3
+ exports.setup = setup;
4
4
  const spawn = require("cross-spawn");
5
5
  const python_1 = require("../../../deploy/functions/runtimes/python");
6
6
  const python_2 = require("../../../functions/python");
@@ -42,4 +42,3 @@ async function setup(setup, config) {
42
42
  });
43
43
  }
44
44
  }
45
- exports.setup = setup;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setup = void 0;
3
+ exports.setup = setup;
4
4
  const npm_dependencies_1 = require("./npm-dependencies");
5
5
  const prompt_1 = require("../../../prompt");
6
6
  const projectConfig_1 = require("../../../functions/projectConfig");
@@ -38,4 +38,3 @@ async function setup(setup, config) {
38
38
  await config.askWriteProjectFile(`${setup.functions.source}/.gitignore`, GITIGNORE_TEMPLATE);
39
39
  await (0, npm_dependencies_1.askInstallDependencies)(setup.functions, config);
40
40
  }
41
- exports.setup = setup;