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,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUpdateReason = exports.cloudSQLBeingCreated = exports.setupCloudSql = void 0;
3
+ exports.setupCloudSql = setupCloudSql;
4
+ exports.cloudSQLBeingCreated = cloudSQLBeingCreated;
5
+ exports.getUpdateReason = getUpdateReason;
4
6
  const clc = require("colorette");
5
7
  const cloudSqlAdminClient = require("../gcp/cloudsql/cloudsqladmin");
6
8
  const logger_1 = require("../logger");
@@ -12,13 +14,12 @@ const utils = require("../utils");
12
14
  const cloudbilling_1 = require("../gcp/cloudbilling");
13
15
  const GOOGLE_ML_INTEGRATION_ROLE = "roles/aiplatform.user";
14
16
  async function setupCloudSql(args) {
15
- var _a;
16
17
  const { projectId, instanceId, requireGoogleMlIntegration, dryRun } = args;
17
18
  const startTime = Date.now();
18
19
  const stats = { action: "get" };
19
20
  let success = false;
20
21
  try {
21
- await upsertInstance(stats, Object.assign({}, args));
22
+ await upsertInstance(stats, { ...args });
22
23
  success = true;
23
24
  }
24
25
  finally {
@@ -28,7 +29,7 @@ async function setupCloudSql(args) {
28
29
  action: success ? stats.action : `${stats.action}_error`,
29
30
  location: args.location,
30
31
  enable_google_ml_integration: args.requireGoogleMlIntegration.toString(),
31
- database_version: ((_a = stats.databaseVersion) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || "unknown",
32
+ database_version: stats.databaseVersion?.toLowerCase() || "unknown",
32
33
  dataconnect_label: stats.dataconnectLabel || "unknown",
33
34
  }, Date.now() - startTime);
34
35
  }
@@ -37,16 +38,14 @@ async function setupCloudSql(args) {
37
38
  await (0, checkIam_1.grantRolesToCloudSqlServiceAccount)(projectId, instanceId, [GOOGLE_ML_INTEGRATION_ROLE]);
38
39
  }
39
40
  }
40
- exports.setupCloudSql = setupCloudSql;
41
41
  async function upsertInstance(stats, args) {
42
- var _a, _b;
43
42
  const { projectId, instanceId, requireGoogleMlIntegration, dryRun } = args;
44
43
  try {
45
44
  const existingInstance = await cloudSqlAdminClient.getInstance(projectId, instanceId);
46
45
  utils.logLabeledBullet("dataconnect", `Found existing Cloud SQL instance ${clc.bold(instanceId)}.`);
47
46
  stats.databaseVersion = existingInstance.databaseVersion;
48
47
  stats.dataconnectLabel =
49
- ((_b = (_a = existingInstance.settings) === null || _a === void 0 ? void 0 : _a.userLabels) === null || _b === void 0 ? void 0 : _b["firebase-data-connect"]) || "absent";
48
+ existingInstance.settings?.userLabels?.["firebase-data-connect"] || "absent";
50
49
  const why = getUpdateReason(existingInstance, requireGoogleMlIntegration);
51
50
  if (why) {
52
51
  if (dryRun) {
@@ -61,7 +60,7 @@ async function upsertInstance(stats, args) {
61
60
  await (0, utils_1.promiseWithSpinner)(() => cloudSqlAdminClient.updateInstanceForDataConnect(existingInstance, requireGoogleMlIntegration), "Updating your Cloud SQL instance...");
62
61
  }
63
62
  }
64
- await upsertDatabase(Object.assign({}, args));
63
+ await upsertDatabase({ ...args });
65
64
  }
66
65
  catch (err) {
67
66
  if (err.status !== 404) {
@@ -71,7 +70,7 @@ async function upsertInstance(stats, args) {
71
70
  stats.databaseVersion = cloudSqlAdminClient.DEFAULT_DATABASE_VERSION;
72
71
  const freeTrialUsed = await (0, freeTrial_1.checkFreeTrialInstanceUsed)(projectId);
73
72
  stats.dataconnectLabel = freeTrialUsed ? "nt" : "ft";
74
- await createInstance(Object.assign(Object.assign({}, args), { freeTrialLabel: stats.dataconnectLabel }));
73
+ await createInstance({ ...args, freeTrialLabel: stats.dataconnectLabel });
75
74
  }
76
75
  }
77
76
  async function createInstance(args) {
@@ -104,7 +103,6 @@ function cloudSQLBeingCreated(projectId, instanceId, isFreeTrial, billingEnabled
104
103
  : `
105
104
  Monitor its progress at\n\n\t${cloudSqlAdminClient.instanceConsoleLink(projectId, instanceId)}\n`));
106
105
  }
107
- exports.cloudSQLBeingCreated = cloudSQLBeingCreated;
108
106
  async function upsertDatabase(args) {
109
107
  const { projectId, instanceId, databaseId, dryRun } = args;
110
108
  try {
@@ -127,14 +125,13 @@ async function upsertDatabase(args) {
127
125
  }
128
126
  }
129
127
  function getUpdateReason(instance, requireGoogleMlIntegration) {
130
- var _a, _b, _c, _d, _e, _f;
131
128
  let reason = "";
132
129
  const settings = instance.settings;
133
- if (!((_a = settings.ipConfiguration) === null || _a === void 0 ? void 0 : _a.ipv4Enabled)) {
130
+ if (!settings.ipConfiguration?.ipv4Enabled) {
134
131
  utils.logLabeledWarning("dataconnect", `Cloud SQL instance ${clc.bold(instance.name)} does not have a public IP.
135
132
  ${clc.bold("firebase dataconnect:sql:migrate")} will only work within its VPC (e.g. GCE, GKE).`);
136
- if (((_b = settings.ipConfiguration) === null || _b === void 0 ? void 0 : _b.privateNetwork) &&
137
- !((_c = settings.ipConfiguration) === null || _c === void 0 ? void 0 : _c.enablePrivatePathForGoogleCloudServices)) {
133
+ if (settings.ipConfiguration?.privateNetwork &&
134
+ !settings.ipConfiguration?.enablePrivatePathForGoogleCloudServices) {
138
135
  reason += "\n - to enable Private Path for Google Cloud Services.";
139
136
  }
140
137
  }
@@ -142,14 +139,13 @@ function getUpdateReason(instance, requireGoogleMlIntegration) {
142
139
  if (!settings.enableGoogleMlIntegration) {
143
140
  reason += "\n - to enable Google ML integration.";
144
141
  }
145
- if (!((_d = settings.databaseFlags) === null || _d === void 0 ? void 0 : _d.some((f) => f.name === "cloudsql.enable_google_ml_integration" && f.value === "on"))) {
142
+ if (!settings.databaseFlags?.some((f) => f.name === "cloudsql.enable_google_ml_integration" && f.value === "on")) {
146
143
  reason += "\n - to enable Google ML integration database flag.";
147
144
  }
148
145
  }
149
- const isIamEnabled = (_f = (_e = settings.databaseFlags) === null || _e === void 0 ? void 0 : _e.some((f) => f.name === "cloudsql.iam_authentication" && f.value === "on")) !== null && _f !== void 0 ? _f : false;
146
+ const isIamEnabled = settings.databaseFlags?.some((f) => f.name === "cloudsql.iam_authentication" && f.value === "on") ?? false;
150
147
  if (!isIamEnabled) {
151
148
  reason += "\n - to enable IAM authentication database flag.";
152
149
  }
153
150
  return reason;
154
151
  }
155
- exports.getUpdateReason = getUpdateReason;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureServiceIsConnectedToCloudSql = exports.getIdentifiers = exports.grantRoleToUserInSchema = exports.migrateSchema = exports.diffSchema = void 0;
3
+ exports.diffSchema = diffSchema;
4
+ exports.migrateSchema = migrateSchema;
5
+ exports.upsertSecondarySchema = upsertSecondarySchema;
6
+ exports.grantRoleToUserInSchema = grantRoleToUserInSchema;
7
+ exports.getIdentifiers = getIdentifiers;
8
+ exports.serviceNameFromSchema = serviceNameFromSchema;
9
+ exports.ensureServiceIsConnectedToCloudSql = ensureServiceIsConnectedToCloudSql;
4
10
  const clc = require("colorette");
5
11
  const sql_formatter_1 = require("sql-formatter");
6
12
  const types_1 = require("./types");
@@ -40,7 +46,7 @@ async function setupSchemaIfNecessary(instanceId, databaseId, options) {
40
46
  }
41
47
  }
42
48
  async function diffSchema(options, schema, schemaValidation) {
43
- let validationMode = schemaValidation !== null && schemaValidation !== void 0 ? schemaValidation : "STRICT";
49
+ let validationMode = schemaValidation ?? "STRICT";
44
50
  setSchemaValidationMode(schema, validationMode);
45
51
  displayStartSchemaDiff(validationMode);
46
52
  const { serviceName, instanceName, databaseId, instanceId } = getIdentifiers(schema);
@@ -51,7 +57,7 @@ async function diffSchema(options, schema, schemaValidation) {
51
57
  displayNoSchemaDiff(instanceId, databaseId, validationMode);
52
58
  }
53
59
  catch (err) {
54
- if ((err === null || err === void 0 ? void 0 : err.status) !== 400) {
60
+ if (err?.status !== 400) {
55
61
  throw err;
56
62
  }
57
63
  incompatible = errors.getIncompatibleSchemaError(err);
@@ -84,7 +90,7 @@ async function diffSchema(options, schema, schemaValidation) {
84
90
  displayNoSchemaDiff(instanceId, databaseId, validationMode);
85
91
  }
86
92
  catch (err) {
87
- if ((err === null || err === void 0 ? void 0 : err.status) !== 400) {
93
+ if (err?.status !== 400) {
88
94
  throw err;
89
95
  }
90
96
  compatibleIncompatible = errors.getIncompatibleSchemaError(err);
@@ -101,11 +107,9 @@ async function diffSchema(options, schema, schemaValidation) {
101
107
  }
102
108
  return incompatible.diffs;
103
109
  }
104
- exports.diffSchema = diffSchema;
105
110
  async function migrateSchema(args) {
106
- var _a;
107
111
  const { options, schema, validateOnly, schemaValidation, stats } = args;
108
- let validationMode = schemaValidation !== null && schemaValidation !== void 0 ? schemaValidation : "COMPATIBLE";
112
+ let validationMode = schemaValidation ?? "COMPATIBLE";
109
113
  setSchemaValidationMode(schema, validationMode);
110
114
  displayStartSchemaDiff(validationMode);
111
115
  const projectId = (0, projectUtils_1.needProjectId)(options);
@@ -116,7 +120,7 @@ async function migrateSchema(args) {
116
120
  if (stats) {
117
121
  stats.numSchemaSkippedDueToPendingCreate++;
118
122
  }
119
- const postgresql = (_a = schema.datasources.find((d) => d.postgresql)) === null || _a === void 0 ? void 0 : _a.postgresql;
123
+ const postgresql = schema.datasources.find((d) => d.postgresql)?.postgresql;
120
124
  if (!postgresql) {
121
125
  throw new error_1.FirebaseError(`Cannot find Postgres datasource in the schema to deploy: ${serviceName}/schemas/${types_1.MAIN_SCHEMA_ID}.\nIts datasources: ${JSON.stringify(schema.datasources)}`);
122
126
  }
@@ -136,7 +140,7 @@ async function migrateSchema(args) {
136
140
  displayNoSchemaDiff(instanceId, databaseId, validationMode);
137
141
  }
138
142
  catch (err) {
139
- if ((err === null || err === void 0 ? void 0 : err.status) !== 400) {
143
+ if (err?.status !== 400) {
140
144
  throw err;
141
145
  }
142
146
  const incompatible = errors.getIncompatibleSchemaError(err);
@@ -206,7 +210,34 @@ async function migrateSchema(args) {
206
210
  }
207
211
  return diffs;
208
212
  }
209
- exports.migrateSchema = migrateSchema;
213
+ async function upsertSecondarySchema(args) {
214
+ const { options, schema, stats } = args;
215
+ const serviceName = serviceNameFromSchema(schema);
216
+ try {
217
+ await (0, client_1.upsertSchema)(schema, false);
218
+ }
219
+ catch (err) {
220
+ if (err?.status !== 400) {
221
+ throw err;
222
+ }
223
+ const invalidConnectors = errors.getInvalidConnectors(err);
224
+ if (!invalidConnectors.length) {
225
+ const gqlErrs = errors.getGQLErrors(err);
226
+ if (gqlErrs) {
227
+ throw new error_1.FirebaseError(`There are errors in your schema files:\n${gqlErrs}`);
228
+ }
229
+ throw err;
230
+ }
231
+ if (stats) {
232
+ stats.numSchemaInvalidConnectors += invalidConnectors.length;
233
+ }
234
+ const shouldDeleteInvalidConnectors = await promptForInvalidConnectorError(options, serviceName, invalidConnectors, false);
235
+ if (shouldDeleteInvalidConnectors) {
236
+ await deleteInvalidConnectors(invalidConnectors);
237
+ }
238
+ await (0, client_1.upsertSchema)(schema, false);
239
+ }
240
+ }
210
241
  async function grantRoleToUserInSchema(options, schema) {
211
242
  const role = options.role;
212
243
  const email = options.email;
@@ -218,7 +249,6 @@ async function grantRoleToUserInSchema(options, schema) {
218
249
  }
219
250
  await (0, permissionsSetup_1.grantRoleTo)(options, instanceId, databaseId, role, email);
220
251
  }
221
- exports.grantRoleToUserInSchema = grantRoleToUserInSchema;
222
252
  function diffsEqual(x, y) {
223
253
  if (x.length !== y.length) {
224
254
  return false;
@@ -234,23 +264,22 @@ function diffsEqual(x, y) {
234
264
  }
235
265
  function setSchemaValidationMode(schema, schemaValidation) {
236
266
  const postgresDatasource = schema.datasources.find((d) => d.postgresql);
237
- if (postgresDatasource === null || postgresDatasource === void 0 ? void 0 : postgresDatasource.postgresql) {
267
+ if (postgresDatasource?.postgresql) {
238
268
  postgresDatasource.postgresql.schemaValidation = schemaValidation;
239
269
  }
240
270
  }
241
271
  function getIdentifiers(schema) {
242
- var _a, _b, _c;
243
272
  const postgresDatasource = schema.datasources.find((d) => d.postgresql);
244
- const databaseId = (_a = postgresDatasource === null || postgresDatasource === void 0 ? void 0 : postgresDatasource.postgresql) === null || _a === void 0 ? void 0 : _a.database;
273
+ const databaseId = postgresDatasource?.postgresql?.database;
245
274
  if (!databaseId) {
246
275
  throw new error_1.FirebaseError("Data Connect schema must have a postgres datasource with a database name.");
247
276
  }
248
- const instanceName = (_c = (_b = postgresDatasource === null || postgresDatasource === void 0 ? void 0 : postgresDatasource.postgresql) === null || _b === void 0 ? void 0 : _b.cloudSql) === null || _c === void 0 ? void 0 : _c.instance;
277
+ const instanceName = postgresDatasource?.postgresql?.cloudSql?.instance;
249
278
  if (!instanceName) {
250
279
  throw new error_1.FirebaseError("Data Connect schema must have a postgres datasource with a CloudSQL instance.");
251
280
  }
252
281
  const instanceId = instanceName.split("/").pop();
253
- const serviceName = schema.name.replace(`/schemas/${types_1.MAIN_SCHEMA_ID}`, "");
282
+ const serviceName = serviceNameFromSchema(schema);
254
283
  return {
255
284
  databaseId,
256
285
  instanceId,
@@ -258,7 +287,10 @@ function getIdentifiers(schema) {
258
287
  serviceName,
259
288
  };
260
289
  }
261
- exports.getIdentifiers = getIdentifiers;
290
+ function serviceNameFromSchema(schema) {
291
+ const regex = /\/schemas\/[^/]*$/;
292
+ return schema.name.replace(regex, "");
293
+ }
262
294
  function suggestedCommand(serviceName, invalidConnectorNames) {
263
295
  const serviceId = serviceName.split("/")[5];
264
296
  const connectorIds = invalidConnectorNames.map((i) => i.split("/")[7]);
@@ -371,7 +403,10 @@ async function promptForInvalidConnectorError(options, serviceName, invalidConne
371
403
  return true;
372
404
  }
373
405
  if (!options.nonInteractive &&
374
- (await (0, prompt_1.confirm)(Object.assign(Object.assign({}, options), { message: `Would you like to delete and recreate these connectors? This will cause ${clc.red(`downtime`)}.` })))) {
406
+ (await (0, prompt_1.confirm)({
407
+ ...options,
408
+ message: `Would you like to delete and recreate these connectors? This will cause ${clc.red(`downtime`)}.`,
409
+ }))) {
375
410
  return true;
376
411
  }
377
412
  const cmd = suggestedCommand(serviceName, invalidConnectors);
@@ -386,13 +421,12 @@ function displayInvalidConnectors(invalidConnectors) {
386
421
  (0, utils_1.logLabeledWarning)("dataconnect", `This is a ${clc.red("breaking")} change and may break existing apps.`);
387
422
  }
388
423
  async function ensureServiceIsConnectedToCloudSql(serviceName, instanceName, databaseId, linkIfNotConnected) {
389
- var _a, _b, _c, _d;
390
424
  let currentSchema = await (0, client_1.getSchema)(serviceName);
391
- let postgresql = (_b = (_a = currentSchema === null || currentSchema === void 0 ? void 0 : currentSchema.datasources) === null || _a === void 0 ? void 0 : _a.find((d) => d.postgresql)) === null || _b === void 0 ? void 0 : _b.postgresql;
392
- if ((currentSchema === null || currentSchema === void 0 ? void 0 : currentSchema.reconciling) &&
393
- (postgresql === null || postgresql === void 0 ? void 0 : postgresql.ephemeral) &&
394
- ((_c = postgresql === null || postgresql === void 0 ? void 0 : postgresql.cloudSql) === null || _c === void 0 ? void 0 : _c.instance) &&
395
- (postgresql === null || postgresql === void 0 ? void 0 : postgresql.schemaValidation) === "NONE") {
425
+ let postgresql = currentSchema?.datasources?.find((d) => d.postgresql)?.postgresql;
426
+ if (currentSchema?.reconciling &&
427
+ postgresql?.ephemeral &&
428
+ postgresql?.cloudSql?.instance &&
429
+ postgresql?.schemaValidation === "NONE") {
396
430
  const [, , , , , serviceId] = serviceName.split("/");
397
431
  const [, projectId, , , , instanceId] = postgresql.cloudSql.instance.split("/");
398
432
  throw new error_1.FirebaseError(`While checking the service ${serviceId}, ` + (0, provisionCloudSql_1.cloudSQLBeingCreated)(projectId, instanceId));
@@ -419,7 +453,7 @@ async function ensureServiceIsConnectedToCloudSql(serviceName, instanceName, dat
419
453
  postgresql = currentSchema.datasources[0].postgresql;
420
454
  }
421
455
  let alreadyConnected = !postgresql.ephemeral || false;
422
- if (((_d = postgresql.cloudSql) === null || _d === void 0 ? void 0 : _d.instance) && postgresql.cloudSql.instance !== instanceName) {
456
+ if (postgresql.cloudSql?.instance && postgresql.cloudSql.instance !== instanceName) {
423
457
  alreadyConnected = false;
424
458
  (0, utils_1.logLabeledWarning)("dataconnect", `Switching connected Cloud SQL instance\n From ${postgresql.cloudSql.instance}\n To ${instanceName}`);
425
459
  }
@@ -437,13 +471,12 @@ async function ensureServiceIsConnectedToCloudSql(serviceName, instanceName, dat
437
471
  await (0, client_1.upsertSchema)(currentSchema, false);
438
472
  }
439
473
  catch (err) {
440
- if ((err === null || err === void 0 ? void 0 : err.status) >= 500) {
474
+ if (err?.status >= 500) {
441
475
  throw err;
442
476
  }
443
477
  logger_1.logger.debug(`Failed to ensure service is connected to Cloud SQL: ${err.message}`);
444
478
  }
445
479
  }
446
- exports.ensureServiceIsConnectedToCloudSql = ensureServiceIsConnectedToCloudSql;
447
480
  function displayStartSchemaDiff(validationMode) {
448
481
  switch (validationMode) {
449
482
  case "COMPATIBLE":
@@ -1,14 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isGraphQLResponseError = exports.isGraphQLResponse = exports.isMainSchema = exports.mainSchema = exports.mainSchemaYaml = exports.toDatasource = exports.requiresVector = exports.MAIN_SCHEMA_ID = void 0;
3
+ exports.isGraphQLResponseError = exports.isGraphQLResponse = exports.MAIN_SCHEMA_ID = void 0;
4
+ exports.requiresVector = requiresVector;
5
+ exports.toDatasource = toDatasource;
6
+ exports.mainSchemaYaml = mainSchemaYaml;
7
+ exports.mainSchema = mainSchema;
8
+ exports.isMainSchema = isMainSchema;
4
9
  exports.MAIN_SCHEMA_ID = "main";
5
10
  function requiresVector(dm) {
6
- var _a, _b, _c, _d;
7
- return (_d = (_c = (_b = (_a = dm === null || dm === void 0 ? void 0 : dm.primaryDataSource) === null || _a === void 0 ? void 0 : _a.postgres) === null || _b === void 0 ? void 0 : _b.requiredExtensions) === null || _c === void 0 ? void 0 : _c.includes("vector")) !== null && _d !== void 0 ? _d : false;
11
+ return dm?.primaryDataSource?.postgres?.requiredExtensions?.includes("vector") ?? false;
8
12
  }
9
- exports.requiresVector = requiresVector;
10
13
  function toDatasource(projectId, locationId, ds) {
11
- if (ds === null || ds === void 0 ? void 0 : ds.postgresql) {
14
+ if (ds?.postgresql) {
12
15
  return {
13
16
  postgresql: {
14
17
  database: ds.postgresql.database,
@@ -19,7 +22,7 @@ function toDatasource(projectId, locationId, ds) {
19
22
  },
20
23
  };
21
24
  }
22
- if (ds === null || ds === void 0 ? void 0 : ds.httpGraphql) {
25
+ if (ds?.httpGraphql) {
23
26
  return {
24
27
  httpGraphql: {
25
28
  uri: ds.httpGraphql.uri,
@@ -29,19 +32,16 @@ function toDatasource(projectId, locationId, ds) {
29
32
  }
30
33
  return {};
31
34
  }
32
- exports.toDatasource = toDatasource;
33
35
  function mainSchemaYaml(dataconnectYaml) {
34
- var _a;
35
36
  if (dataconnectYaml.schema) {
36
37
  return dataconnectYaml.schema;
37
38
  }
38
- const mainSch = (_a = dataconnectYaml.schemas) === null || _a === void 0 ? void 0 : _a.find((s) => s.id === exports.MAIN_SCHEMA_ID || !s.id);
39
+ const mainSch = dataconnectYaml.schemas?.find((s) => s.id === exports.MAIN_SCHEMA_ID || !s.id);
39
40
  if (!mainSch) {
40
41
  throw new Error(`Service ${dataconnectYaml.serviceId} has no main schema defined`);
41
42
  }
42
43
  return mainSch;
43
44
  }
44
- exports.mainSchemaYaml = mainSchemaYaml;
45
45
  function mainSchema(schemas) {
46
46
  const mainSch = schemas.find((s) => isMainSchema(s));
47
47
  if (!mainSch) {
@@ -49,11 +49,9 @@ function mainSchema(schemas) {
49
49
  }
50
50
  return mainSch;
51
51
  }
52
- exports.mainSchema = mainSchema;
53
52
  function isMainSchema(schema) {
54
53
  return schema.name.endsWith(`/schemas/${exports.MAIN_SCHEMA_ID}`);
55
54
  }
56
- exports.isMainSchema = isMainSchema;
57
55
  const isGraphQLResponse = (g) => !!g.data || !!g.errors;
58
56
  exports.isGraphQLResponse = isGraphQLResponse;
59
57
  const isGraphQLResponseError = (g) => !!g.error;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendVSCodeMessage = exports.port = exports.DEFAULT_PORT = exports.VSCODE_MESSAGE = void 0;
3
+ exports.port = exports.DEFAULT_PORT = exports.VSCODE_MESSAGE = void 0;
4
+ exports.sendVSCodeMessage = sendVSCodeMessage;
4
5
  const node_fetch_1 = require("node-fetch");
5
6
  const logger_1 = require("../logger");
6
7
  var VSCODE_MESSAGE;
@@ -8,7 +9,7 @@ var VSCODE_MESSAGE;
8
9
  VSCODE_MESSAGE["EMULATORS_STARTED"] = "EMULATORS_STARTED";
9
10
  VSCODE_MESSAGE["EMULATORS_START_ERRORED"] = "EMULATORS_START_ERRORED";
10
11
  VSCODE_MESSAGE["EMULATORS_SHUTDOWN"] = "EMULATORS_SHUTDOWN";
11
- })(VSCODE_MESSAGE = exports.VSCODE_MESSAGE || (exports.VSCODE_MESSAGE = {}));
12
+ })(VSCODE_MESSAGE || (exports.VSCODE_MESSAGE = VSCODE_MESSAGE = {}));
12
13
  exports.DEFAULT_PORT = "40001";
13
14
  exports.port = process.env.VSCODE_WEBHOOK_PORT || exports.DEFAULT_PORT;
14
15
  async function sendVSCodeMessage(body) {
@@ -29,4 +30,3 @@ async function sendVSCodeMessage(body) {
29
30
  logger_1.logger.debug(`Could not find VSCode notification endpoint: ${e}. If you are not running the Firebase Data Connect VSCode extension, this is expected and not an issue.`);
30
31
  }
31
32
  }
32
- exports.sendVSCodeMessage = sendVSCodeMessage;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasDefaultCredentials = exports.clearCredentials = exports.getCredentialPathAsync = void 0;
3
+ exports.getCredentialPathAsync = getCredentialPathAsync;
4
+ exports.clearCredentials = clearCredentials;
5
+ exports.hasDefaultCredentials = hasDefaultCredentials;
4
6
  const fs = require("fs");
5
7
  const path = require("path");
6
8
  const google_auth_library_1 = require("google-auth-library");
@@ -29,7 +31,6 @@ async function getCredentialPathAsync(account) {
29
31
  });
30
32
  });
31
33
  }
32
- exports.getCredentialPathAsync = getCredentialPathAsync;
33
34
  function clearCredentials(account) {
34
35
  const filePath = credFilePath(account.user);
35
36
  if (!filePath) {
@@ -40,7 +41,6 @@ function clearCredentials(account) {
40
41
  }
41
42
  fs.unlinkSync(filePath);
42
43
  }
43
- exports.clearCredentials = clearCredentials;
44
44
  function getCredential(tokens) {
45
45
  if (tokens.refresh_token) {
46
46
  return {
@@ -88,4 +88,3 @@ async function hasDefaultCredentials() {
88
88
  return false;
89
89
  }
90
90
  }
91
- exports.hasDefaultCredentials = hasDefaultCredentials;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const fs = require("fs");
4
5
  const path = require("path");
5
6
  const error_1 = require("../../error");
@@ -49,8 +50,7 @@ async function default_1(context, options) {
49
50
  bucketsPerLocation[loc] = resolvedName;
50
51
  }));
51
52
  await Promise.all(Object.values(context.backendConfigs).map(async (cfg) => {
52
- var _a;
53
- const rootDir = (_a = options.projectRoot) !== null && _a !== void 0 ? _a : process.cwd();
53
+ const rootDir = options.projectRoot ?? process.cwd();
54
54
  let builtAppDir;
55
55
  if (cfg.localBuild) {
56
56
  builtAppDir = context.backendLocalBuilds[cfg.backendId].buildDir;
@@ -75,4 +75,3 @@ async function default_1(context, options) {
75
75
  `gs://${bucketName}/${path.basename(zippedSourcePath)}`;
76
76
  }));
77
77
  }
78
- exports.default = default_1;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBackendConfigs = void 0;
3
+ exports.default = default_1;
4
+ exports.getBackendConfigs = getBackendConfigs;
4
5
  const path = require("path");
5
6
  const backend_1 = require("../../apphosting/backend");
6
7
  const apphosting_1 = require("../../gcp/apphosting");
@@ -11,7 +12,6 @@ const utils_1 = require("../../utils");
11
12
  const localbuilds_1 = require("../../apphosting/localbuilds");
12
13
  const error_1 = require("../../error");
13
14
  async function default_1(context, options) {
14
- var _a;
15
15
  const projectId = (0, projectUtils_1.needProjectId)(options);
16
16
  await (0, apphosting_1.ensureApiEnabled)(options);
17
17
  await (0, backend_1.ensureRequiredApisEnabled)(projectId);
@@ -55,7 +55,7 @@ async function default_1(context, options) {
55
55
  }
56
56
  const backend = filteredBackends[0];
57
57
  const { location } = (0, apphosting_1.parseBackendName)(backend.name);
58
- if (cfg.alwaysDeployFromSource === undefined && ((_a = backend.codebase) === null || _a === void 0 ? void 0 : _a.repository)) {
58
+ if (cfg.alwaysDeployFromSource === undefined && backend.codebase?.repository) {
59
59
  const { connectionName, id } = (0, devConnect_1.parseGitRepositoryLinkName)(backend.codebase.repository);
60
60
  const gitRepositoryLink = await (0, devConnect_1.getGitRepositoryLink)(projectId, location, connectionName, id);
61
61
  if (!options.force) {
@@ -129,7 +129,6 @@ async function default_1(context, options) {
129
129
  }
130
130
  }
131
131
  }
132
- exports.default = default_1;
133
132
  function getBackendConfigs(options) {
134
133
  if (!options.config.src.apphosting) {
135
134
  return [];
@@ -158,4 +157,3 @@ function getBackendConfigs(options) {
158
157
  }
159
158
  return backendConfigs.filter((cfg) => backendIds.includes(cfg.backendId));
160
159
  }
161
- exports.getBackendConfigs = getBackendConfigs;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const ora = require("ora");
4
5
  const api_1 = require("../../api");
5
6
  const backend_1 = require("../../apphosting/backend");
@@ -52,4 +53,3 @@ async function default_1(context, options) {
52
53
  }
53
54
  rolloutsSpinner.stop();
54
55
  }
55
- exports.default = default_1;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createArchive = void 0;
3
+ exports.createArchive = createArchive;
4
4
  const archiver = require("archiver");
5
5
  const fs = require("fs");
6
6
  const path = require("path");
@@ -39,7 +39,6 @@ async function createArchive(config, rootDir, targetSubDir) {
39
39
  }
40
40
  return tmpFile;
41
41
  }
42
- exports.createArchive = createArchive;
43
42
  function parseGitIgnorePatterns(projectRoot, gitIgnorePath = ".gitignore") {
44
43
  const absoluteFilePath = path.resolve(projectRoot, gitIgnorePath);
45
44
  if (!fs.existsSync(absoluteFilePath)) {
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deploy = void 0;
4
- async function deploy() { }
5
3
  exports.deploy = deploy;
4
+ async function deploy() { }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepare = void 0;
3
+ exports.prepare = prepare;
4
4
  const clc = require("colorette");
5
5
  const path = require("path");
6
6
  const error_1 = require("../../error");
@@ -49,4 +49,3 @@ function prepare(context, options) {
49
49
  });
50
50
  }));
51
51
  }
52
- exports.prepare = prepare;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.release = void 0;
3
+ exports.release = release;
4
4
  const clc = require("colorette");
5
5
  const rtdb = require("../../rtdb");
6
6
  const utils = require("../../utils");
@@ -27,4 +27,3 @@ function release(context) {
27
27
  });
28
28
  }));
29
29
  }
30
- exports.release = release;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deployStatsParams = exports.initDeployStats = void 0;
3
+ exports.initDeployStats = initDeployStats;
4
+ exports.deployStatsParams = deployStatsParams;
4
5
  function initDeployStats() {
5
6
  return {
6
7
  numBuildErrors: 0,
@@ -15,12 +16,22 @@ function initDeployStats() {
15
16
  numSchemaInvalidConnectors: 0,
16
17
  };
17
18
  }
18
- exports.initDeployStats = initDeployStats;
19
19
  function deployStatsParams(stats) {
20
20
  const buildWarnings = {};
21
21
  for (const [type, num] of stats.numBuildWarnings.entries()) {
22
22
  buildWarnings[`num_build_warnings_${type}`] = num;
23
23
  }
24
- return Object.assign({ missing_billing: (!!stats.missingBilling).toString(), num_service_created: stats.numServiceCreated, num_service_deleted: stats.numServiceDeleted, num_schema_migrated: stats.numSchemaMigrated, num_connector_updated_before_schema: stats.numConnectorUpdatedBeforeSchema, num_connector_updated_after_schema: stats.numConnectorUpdatedAfterSchema, num_schema_skipped_due_to_pending_create: stats.numSchemaSkippedDueToPendingCreate, num_schema_sql_diffs: stats.numSchemaSqlDiffs, num_schema_invalid_connectors: stats.numSchemaInvalidConnectors, num_build_errors: stats.numBuildErrors }, buildWarnings);
24
+ return {
25
+ missing_billing: (!!stats.missingBilling).toString(),
26
+ num_service_created: stats.numServiceCreated,
27
+ num_service_deleted: stats.numServiceDeleted,
28
+ num_schema_migrated: stats.numSchemaMigrated,
29
+ num_connector_updated_before_schema: stats.numConnectorUpdatedBeforeSchema,
30
+ num_connector_updated_after_schema: stats.numConnectorUpdatedAfterSchema,
31
+ num_schema_skipped_due_to_pending_create: stats.numSchemaSkippedDueToPendingCreate,
32
+ num_schema_sql_diffs: stats.numSchemaSqlDiffs,
33
+ num_schema_invalid_connectors: stats.numSchemaInvalidConnectors,
34
+ num_build_errors: stats.numBuildErrors,
35
+ ...buildWarnings,
36
+ };
25
37
  }
26
- exports.deployStatsParams = deployStatsParams;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const client = require("../../dataconnect/client");
4
5
  const utils = require("../../utils");
5
6
  const types_1 = require("../../dataconnect/types");
@@ -27,7 +28,7 @@ async function default_1(context, options) {
27
28
  .filter((si) => !services.some((s) => matches(si, s)))
28
29
  .filter((si) => {
29
30
  return (!filters ||
30
- (filters === null || filters === void 0 ? void 0 : filters.some((f) => si.dataConnectYaml.serviceId === f.serviceId)));
31
+ filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId));
31
32
  });
32
33
  dataconnect.deployStats.numServiceCreated = servicesToCreate.length;
33
34
  const servicesToDelete = filters
@@ -57,14 +58,13 @@ async function default_1(context, options) {
57
58
  await Promise.all(serviceInfos
58
59
  .filter((si) => {
59
60
  return (!filters ||
60
- (filters === null || filters === void 0 ? void 0 : filters.some((f) => si.dataConnectYaml.serviceId === f.serviceId)));
61
+ filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId));
61
62
  })
62
63
  .map(async (s) => {
63
- var _a, _b, _c;
64
64
  const postgresDatasource = (0, types_1.mainSchema)(s.schemas).datasources.find((d) => d.postgresql);
65
65
  if (postgresDatasource) {
66
- const instanceId = (_b = (_a = postgresDatasource.postgresql) === null || _a === void 0 ? void 0 : _a.cloudSql) === null || _b === void 0 ? void 0 : _b.instance.split("/").pop();
67
- const databaseId = (_c = postgresDatasource.postgresql) === null || _c === void 0 ? void 0 : _c.database;
66
+ const instanceId = postgresDatasource.postgresql?.cloudSql?.instance.split("/").pop();
67
+ const databaseId = postgresDatasource.postgresql?.database;
68
68
  if (!instanceId || !databaseId) {
69
69
  return Promise.resolve();
70
70
  }
@@ -80,7 +80,6 @@ async function default_1(context, options) {
80
80
  }));
81
81
  return;
82
82
  }
83
- exports.default = default_1;
84
83
  function matches(si, s) {
85
84
  return si.serviceName === s.name;
86
85
  }