firebase-tools 15.1.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +19 -21
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +1 -2
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +7 -7
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +18 -20
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +16 -23
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +3 -3
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +17 -9
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,6 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.upsertConnector = exports.listConnectors = exports.deleteConnector = exports.getConnector = exports.deleteSchema = exports.upsertSchema = exports.listSchemas = exports.getSchema = exports.deleteService = exports.createService = exports.listAllServices = exports.getService = exports.listLocations = void 0;
3
+ exports.listLocations = listLocations;
4
+ exports.getService = getService;
5
+ exports.listAllServices = listAllServices;
6
+ exports.createService = createService;
7
+ exports.deleteService = deleteService;
8
+ exports.getSchema = getSchema;
9
+ exports.listSchemas = listSchemas;
10
+ exports.upsertSchema = upsertSchema;
11
+ exports.deleteSchema = deleteSchema;
12
+ exports.getConnector = getConnector;
13
+ exports.deleteConnector = deleteConnector;
14
+ exports.listConnectors = listConnectors;
15
+ exports.upsertConnector = upsertConnector;
4
16
  const api_1 = require("../api");
5
17
  const apiv2_1 = require("../apiv2");
6
18
  const operationPoller = require("../operation-poller");
@@ -13,22 +25,17 @@ const dataconnectClient = () => new apiv2_1.Client({
13
25
  auth: true,
14
26
  });
15
27
  async function listLocations(projectId) {
16
- var _a, _b, _c;
17
28
  const res = await dataconnectClient().get(`/projects/${projectId}/locations`);
18
- return (_c = (_b = (_a = res.body) === null || _a === void 0 ? void 0 : _a.locations) === null || _b === void 0 ? void 0 : _b.map((l) => l.locationId)) !== null && _c !== void 0 ? _c : [];
29
+ return res.body?.locations?.map((l) => l.locationId) ?? [];
19
30
  }
20
- exports.listLocations = listLocations;
21
31
  async function getService(serviceName) {
22
32
  const res = await dataconnectClient().get(serviceName);
23
33
  return res.body;
24
34
  }
25
- exports.getService = getService;
26
35
  async function listAllServices(projectId) {
27
- var _a;
28
36
  const res = await dataconnectClient().get(`/projects/${projectId}/locations/-/services`);
29
- return (_a = res.body.services) !== null && _a !== void 0 ? _a : [];
37
+ return res.body.services ?? [];
30
38
  }
31
- exports.listAllServices = listAllServices;
32
39
  async function createService(projectId, locationId, serviceId) {
33
40
  try {
34
41
  const op = await dataconnectClient().post(`/projects/${projectId}/locations/${locationId}/services`, {
@@ -52,7 +59,6 @@ async function createService(projectId, locationId, serviceId) {
52
59
  return undefined;
53
60
  }
54
61
  }
55
- exports.createService = createService;
56
62
  async function deleteService(serviceName) {
57
63
  const op = await dataconnectClient().delete(serviceName, {
58
64
  queryParams: { force: "true" },
@@ -64,7 +70,6 @@ async function deleteService(serviceName) {
64
70
  });
65
71
  return pollRes;
66
72
  }
67
- exports.deleteService = deleteService;
68
73
  async function getSchema(serviceName, schemaId = types.MAIN_SCHEMA_ID) {
69
74
  try {
70
75
  const res = await dataconnectClient().get(`${serviceName}/schemas/${schemaId}`);
@@ -77,7 +82,6 @@ async function getSchema(serviceName, schemaId = types.MAIN_SCHEMA_ID) {
77
82
  return undefined;
78
83
  }
79
84
  }
80
- exports.getSchema = getSchema;
81
85
  async function listSchemas(serviceName, fields = []) {
82
86
  const schemas = [];
83
87
  const getNextPage = async (pageToken = "") => {
@@ -96,7 +100,6 @@ async function listSchemas(serviceName, fields = []) {
96
100
  await getNextPage();
97
101
  return schemas;
98
102
  }
99
- exports.listSchemas = listSchemas;
100
103
  async function upsertSchema(schema, validateOnly = false, async = false) {
101
104
  const op = await dataconnectClient().patch(`${schema.name}`, schema, {
102
105
  queryParams: {
@@ -114,7 +117,6 @@ async function upsertSchema(schema, validateOnly = false, async = false) {
114
117
  masterTimeout: 10000,
115
118
  });
116
119
  }
117
- exports.upsertSchema = upsertSchema;
118
120
  async function deleteSchema(serviceName) {
119
121
  const op = await dataconnectClient().delete(`${serviceName}/schemas/${types.MAIN_SCHEMA_ID}`);
120
122
  await operationPoller.pollOperation({
@@ -124,12 +126,10 @@ async function deleteSchema(serviceName) {
124
126
  });
125
127
  return;
126
128
  }
127
- exports.deleteSchema = deleteSchema;
128
129
  async function getConnector(name) {
129
130
  const res = await dataconnectClient().get(name);
130
131
  return res.body;
131
132
  }
132
- exports.getConnector = getConnector;
133
133
  async function deleteConnector(name) {
134
134
  const op = await dataconnectClient().delete(name);
135
135
  await operationPoller.pollOperation({
@@ -139,7 +139,6 @@ async function deleteConnector(name) {
139
139
  });
140
140
  return;
141
141
  }
142
- exports.deleteConnector = deleteConnector;
143
142
  async function listConnectors(serviceName, fields = []) {
144
143
  const connectors = [];
145
144
  const getNextPage = async (pageToken = "") => {
@@ -158,7 +157,6 @@ async function listConnectors(serviceName, fields = []) {
158
157
  await getNextPage();
159
158
  return connectors;
160
159
  }
161
- exports.listConnectors = listConnectors;
162
160
  async function upsertConnector(connector) {
163
161
  const op = await dataconnectClient().patch(`${connector.name}?allow_missing=true`, connector);
164
162
  const pollRes = await operationPoller.pollOperation({
@@ -168,4 +166,3 @@ async function upsertConnector(connector) {
168
166
  });
169
167
  return pollRes;
170
168
  }
171
- exports.upsertConnector = upsertConnector;
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeGraphQLMutation = exports.executeGraphQLQuery = exports.executeGraphQLRead = exports.executeGraphQL = exports.dataconnectDataplaneClient = exports.DATACONNECT_API_VERSION = exports.dataconnectOrigin = void 0;
3
+ exports.DATACONNECT_API_VERSION = exports.dataconnectOrigin = void 0;
4
+ exports.dataconnectDataplaneClient = dataconnectDataplaneClient;
5
+ exports.executeGraphQL = executeGraphQL;
6
+ exports.executeGraphQLRead = executeGraphQLRead;
7
+ exports.executeGraphQLQuery = executeGraphQLQuery;
8
+ exports.executeGraphQLMutation = executeGraphQLMutation;
4
9
  const api_1 = require("../api");
5
10
  var api_2 = require("../api");
6
11
  Object.defineProperty(exports, "dataconnectOrigin", { enumerable: true, get: function () { return api_2.dataconnectOrigin; } });
@@ -13,24 +18,19 @@ function dataconnectDataplaneClient() {
13
18
  auth: true,
14
19
  });
15
20
  }
16
- exports.dataconnectDataplaneClient = dataconnectDataplaneClient;
17
21
  async function executeGraphQL(client, servicePath, body) {
18
22
  const res = await client.post(`${servicePath}:executeGraphql`, body, { resolveOnHTTPError: true });
19
23
  return res;
20
24
  }
21
- exports.executeGraphQL = executeGraphQL;
22
25
  async function executeGraphQLRead(client, servicePath, body) {
23
26
  const res = await client.post(`${servicePath}:executeGraphqlRead`, body, { resolveOnHTTPError: true });
24
27
  return res;
25
28
  }
26
- exports.executeGraphQLRead = executeGraphQLRead;
27
29
  async function executeGraphQLQuery(client, connectorPath, body) {
28
30
  const res = await client.post(`${connectorPath}:executeQuery`, body, { resolveOnHTTPError: true });
29
31
  return res;
30
32
  }
31
- exports.executeGraphQLQuery = executeGraphQLQuery;
32
33
  async function executeGraphQLMutation(client, connectorPath, body) {
33
34
  const res = await client.post(`${connectorPath}:executeMutation`, body, { resolveOnHTTPError: true });
34
35
  return res;
35
36
  }
36
- exports.executeGraphQLMutation = executeGraphQLMutation;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureGIFApiTos = exports.ensureApis = void 0;
3
+ exports.ensureApis = ensureApis;
4
+ exports.ensureGIFApiTos = ensureGIFApiTos;
4
5
  const api = require("../api");
5
6
  const configstore_1 = require("../configstore");
6
7
  const ensureApiEnabled_1 = require("../ensureApiEnabled");
@@ -11,7 +12,6 @@ async function ensureApis(projectId, silent = false) {
11
12
  (0, ensureApiEnabled_1.ensure)(projectId, api.cloudSQLAdminOrigin(), prefix, silent),
12
13
  ]);
13
14
  }
14
- exports.ensureApis = ensureApis;
15
15
  async function ensureGIFApiTos(projectId) {
16
16
  if (configstore_1.configstore.get("gemini")) {
17
17
  await (0, ensureApiEnabled_1.ensure)(projectId, api.cloudAiCompanionOrigin(), "");
@@ -23,4 +23,3 @@ async function ensureGIFApiTos(projectId) {
23
23
  }
24
24
  return true;
25
25
  }
26
- exports.ensureGIFApiTos = ensureGIFApiTos;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getGQLErrors = exports.getInvalidConnectors = exports.getIncompatibleSchemaError = void 0;
3
+ exports.getIncompatibleSchemaError = getIncompatibleSchemaError;
4
+ exports.getInvalidConnectors = getInvalidConnectors;
5
+ exports.getGQLErrors = getGQLErrors;
4
6
  const graphqlError_1 = require("./graphqlError");
5
7
  const INCOMPATIBLE_SCHEMA_ERROR_TYPESTRING = "IncompatibleSqlSchemaError";
6
8
  const PRECONDITION_ERROR_TYPESTRING = "type.googleapis.com/google.rpc.PreconditionFailure";
@@ -19,27 +21,22 @@ function getIncompatibleSchemaError(err) {
19
21
  incompatible.violationType = violationTypes[0];
20
22
  return incompatible;
21
23
  }
22
- exports.getIncompatibleSchemaError = getIncompatibleSchemaError;
23
24
  function getInvalidConnectors(err) {
24
- var _a, _b;
25
25
  const preconditionErrs = errorDetails(err, PRECONDITION_ERROR_TYPESTRING);
26
26
  const invalidConns = [];
27
27
  for (const preconditionErr of preconditionErrs) {
28
- const incompatibleConnViolation = (_a = preconditionErr === null || preconditionErr === void 0 ? void 0 : preconditionErr.violations) === null || _a === void 0 ? void 0 : _a.filter((v) => v.type === INCOMPATIBLE_CONNECTOR_TYPE);
29
- const newConns = (_b = incompatibleConnViolation === null || incompatibleConnViolation === void 0 ? void 0 : incompatibleConnViolation.map((i) => i.subject)) !== null && _b !== void 0 ? _b : [];
28
+ const incompatibleConnViolation = preconditionErr?.violations?.filter((v) => v.type === INCOMPATIBLE_CONNECTOR_TYPE);
29
+ const newConns = incompatibleConnViolation?.map((i) => i.subject) ?? [];
30
30
  invalidConns.push(...newConns);
31
31
  }
32
32
  return invalidConns;
33
33
  }
34
- exports.getInvalidConnectors = getInvalidConnectors;
35
34
  function getGQLErrors(err) {
36
35
  const gqlErrs = errorDetails(err, "GraphqlError");
37
36
  return gqlErrs.map(graphqlError_1.prettify).join("\n");
38
37
  }
39
- exports.getGQLErrors = getGQLErrors;
40
38
  function errorDetails(err, ofType) {
41
- var _a, _b;
42
- const original = ((_b = (_a = err.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) || (err === null || err === void 0 ? void 0 : err.original);
43
- const details = original === null || original === void 0 ? void 0 : original.details;
44
- return (details === null || details === void 0 ? void 0 : details.filter((d) => { var _a; return (_a = d["@type"]) === null || _a === void 0 ? void 0 : _a.includes(ofType); })) || [];
39
+ const original = err.context?.body?.error || err?.original;
40
+ const details = original?.details;
41
+ return details?.filter((d) => d["@type"]?.includes(ofType)) || [];
45
42
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toString = exports.getResourceFilters = void 0;
3
+ exports.getResourceFilters = getResourceFilters;
4
+ exports.toString = toString;
4
5
  const error_1 = require("../error");
5
6
  function getResourceFilters(options) {
6
7
  if (!options.only) {
@@ -21,7 +22,6 @@ function getResourceFilters(options) {
21
22
  }
22
23
  return filters;
23
24
  }
24
- exports.getResourceFilters = getResourceFilters;
25
25
  function parseSelector(selector) {
26
26
  const parts = selector.split(":");
27
27
  const filter = {
@@ -53,4 +53,3 @@ function toString(rf) {
53
53
  }
54
54
  return base;
55
55
  }
56
- exports.toString = toString;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.upgradeInstructions = exports.checkFreeTrialInstanceUsed = exports.freeTrialTermsLink = void 0;
3
+ exports.freeTrialTermsLink = freeTrialTermsLink;
4
+ exports.checkFreeTrialInstanceUsed = checkFreeTrialInstanceUsed;
5
+ exports.upgradeInstructions = upgradeInstructions;
4
6
  const clc = require("colorette");
5
7
  const cloudmonitoring_1 = require("../gcp/cloudmonitoring");
6
8
  function freeTrialTermsLink() {
7
9
  return "https://firebase.google.com/pricing";
8
10
  }
9
- exports.freeTrialTermsLink = freeTrialTermsLink;
10
11
  const FREE_TRIAL_METRIC = "sqladmin.googleapis.com/fdc_lifetime_free_trial_per_project";
11
12
  async function checkFreeTrialInstanceUsed(projectId) {
12
13
  const past7d = new Date();
@@ -28,7 +29,6 @@ async function checkFreeTrialInstanceUsed(projectId) {
28
29
  }
29
30
  return used;
30
31
  }
31
- exports.checkFreeTrialInstanceUsed = checkFreeTrialInstanceUsed;
32
32
  function upgradeInstructions(projectId, trialUsed) {
33
33
  return `To provision a ${trialUsed ? "paid CloudSQL Postgres instance" : "CloudSQL Postgres instance on the Firebase Data Connect no-cost trial"}:
34
34
 
@@ -38,4 +38,3 @@ function upgradeInstructions(projectId, trialUsed) {
38
38
 
39
39
  2. Run ${clc.bold("firebase deploy --only dataconnect")} to deploy your Data Connect service.`;
40
40
  }
41
- exports.upgradeInstructions = upgradeInstructions;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prettifyTable = exports.prettify = void 0;
3
+ exports.prettify = prettify;
4
+ exports.prettifyTable = prettifyTable;
4
5
  const Table = require("cli-table3");
5
6
  function prettify(err) {
6
- var _a, _b, _c, _d;
7
7
  let message = err.message;
8
- let header = (_b = (_a = err.extensions) === null || _a === void 0 ? void 0 : _a.file) !== null && _b !== void 0 ? _b : "";
8
+ let header = err.extensions?.file ?? "";
9
9
  if (err.locations && err.locations.length) {
10
- const line = (_d = (_c = err.locations[0]) === null || _c === void 0 ? void 0 : _c.line) !== null && _d !== void 0 ? _d : "";
10
+ const line = err.locations[0]?.line ?? "";
11
11
  if (line) {
12
12
  header += `:${line}`;
13
13
  }
@@ -31,7 +31,6 @@ function prettify(err) {
31
31
  }
32
32
  return header.length ? `${header}: ${message}` : message;
33
33
  }
34
- exports.prettify = prettify;
35
34
  function splitIssueMessage(err) {
36
35
  const msg = err.message.split(": ");
37
36
  if (msg.length >= 2) {
@@ -40,7 +39,6 @@ function splitIssueMessage(err) {
40
39
  return ["", err.message];
41
40
  }
42
41
  function prettifyTable(errs) {
43
- var _a, _b;
44
42
  const table = new Table({
45
43
  head: ["Type", "Issue", "Workaround", "Reason"],
46
44
  style: { head: ["yellow"] },
@@ -51,7 +49,7 @@ function prettifyTable(errs) {
51
49
  for (const e of errs) {
52
50
  const msg = splitIssueMessage(e);
53
51
  e.message = msg[1];
54
- if (!((_b = (_a = e.extensions) === null || _a === void 0 ? void 0 : _a.workarounds) === null || _b === void 0 ? void 0 : _b.length)) {
52
+ if (!e.extensions?.workarounds?.length) {
55
53
  table.push([msg[0], prettify(e), "", ""]);
56
54
  }
57
55
  else {
@@ -68,4 +66,3 @@ function prettifyTable(errs) {
68
66
  }
69
67
  return table.toString();
70
68
  }
71
- exports.prettifyTable = prettifyTable;
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.squashGraphQL = exports.readGQLFiles = exports.readConnectorYaml = exports.readDataConnectYaml = exports.readFirebaseJson = exports.load = exports.loadAll = exports.pickServices = exports.pickOneService = void 0;
3
+ exports.pickOneService = pickOneService;
4
+ exports.pickServices = pickServices;
5
+ exports.loadAll = loadAll;
6
+ exports.load = load;
7
+ exports.readFirebaseJson = readFirebaseJson;
8
+ exports.readDataConnectYaml = readDataConnectYaml;
9
+ exports.readConnectorYaml = readConnectorYaml;
10
+ exports.readGQLFiles = readGQLFiles;
11
+ exports.squashGraphQL = squashGraphQL;
4
12
  const path = require("path");
5
13
  const fs = require("fs-extra");
6
14
  const clc = require("colorette");
@@ -17,7 +25,6 @@ async function pickOneService(projectId, config, service, location) {
17
25
  }
18
26
  return services[0];
19
27
  }
20
- exports.pickOneService = pickOneService;
21
28
  async function pickServices(projectId, config, serviceId, location) {
22
29
  const serviceInfos = await loadAll(projectId, config);
23
30
  if (serviceInfos.length === 0) {
@@ -32,12 +39,10 @@ async function pickServices(projectId, config, serviceId, location) {
32
39
  }
33
40
  return matchingServices;
34
41
  }
35
- exports.pickServices = pickServices;
36
42
  async function loadAll(projectId, config) {
37
43
  const serviceCfgs = readFirebaseJson(config);
38
44
  return await Promise.all(serviceCfgs.map((c) => load(projectId, config, c.source)));
39
45
  }
40
- exports.loadAll = loadAll;
41
46
  async function load(projectId, config, sourceDirectory) {
42
47
  const resolvedDir = config.path(sourceDirectory);
43
48
  const dataConnectYaml = await readDataConnectYaml(resolvedDir);
@@ -77,9 +82,8 @@ async function load(projectId, config, sourceDirectory) {
77
82
  connectorInfo,
78
83
  };
79
84
  }
80
- exports.load = load;
81
85
  function readFirebaseJson(config) {
82
- if (!(config === null || config === void 0 ? void 0 : config.has("dataconnect"))) {
86
+ if (!config?.has("dataconnect")) {
83
87
  return [];
84
88
  }
85
89
  const validator = (cfg) => {
@@ -101,13 +105,11 @@ function readFirebaseJson(config) {
101
105
  throw new error_1.FirebaseError("Invalid firebase.json: dataconnect should be of the form { source: string }");
102
106
  }
103
107
  }
104
- exports.readFirebaseJson = readFirebaseJson;
105
108
  async function readDataConnectYaml(sourceDirectory) {
106
109
  const file = await (0, utils_1.readFileFromDirectory)(sourceDirectory, "dataconnect.yaml");
107
110
  const dataconnectYaml = await (0, utils_1.wrappedSafeLoad)(file.source);
108
111
  return validateDataConnectYaml(dataconnectYaml);
109
112
  }
110
- exports.readDataConnectYaml = readDataConnectYaml;
111
113
  function validateDataConnectYaml(unvalidated) {
112
114
  if (!unvalidated["location"]) {
113
115
  throw new error_1.FirebaseError("Missing required field 'location' in dataconnect.yaml");
@@ -125,7 +127,6 @@ async function readConnectorYaml(sourceDirectory) {
125
127
  const connectorYaml = await (0, utils_1.wrappedSafeLoad)(file.source);
126
128
  return validateConnectorYaml(connectorYaml);
127
129
  }
128
- exports.readConnectorYaml = readConnectorYaml;
129
130
  function validateConnectorYaml(unvalidated) {
130
131
  return unvalidated;
131
132
  }
@@ -136,7 +137,6 @@ async function readGQLFiles(sourceDir) {
136
137
  const files = await (0, glob_1.glob)("**/*.{gql,graphql}", { cwd: sourceDir, absolute: true, nodir: true });
137
138
  return files.map((f) => toFile(sourceDir, f));
138
139
  }
139
- exports.readGQLFiles = readGQLFiles;
140
140
  function toFile(sourceDir, fullPath) {
141
141
  const relPath = path.relative(sourceDir, fullPath);
142
142
  if (!fs.existsSync(fullPath)) {
@@ -166,4 +166,3 @@ function squashGraphQL(source) {
166
166
  }
167
167
  return query;
168
168
  }
169
- exports.squashGraphQL = squashGraphQL;
@@ -1,14 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isGraphqlName = exports.parseCloudSQLInstanceName = exports.parseConnectorName = exports.parseServiceName = void 0;
3
+ exports.parseServiceName = parseServiceName;
4
+ exports.parseConnectorName = parseConnectorName;
5
+ exports.parseCloudSQLInstanceName = parseCloudSQLInstanceName;
6
+ exports.isGraphqlName = isGraphqlName;
4
7
  const error_1 = require("../error");
5
8
  const serviceNameRegex = /projects\/(?<projectId>[^\/]+)\/locations\/(?<location>[^\/]+)\/services\/(?<serviceId>[^\/]+)/;
6
9
  function parseServiceName(serviceName) {
7
- var _a, _b, _c;
8
10
  const res = serviceNameRegex.exec(serviceName);
9
- const projectId = (_a = res === null || res === void 0 ? void 0 : res.groups) === null || _a === void 0 ? void 0 : _a.projectId;
10
- const location = (_b = res === null || res === void 0 ? void 0 : res.groups) === null || _b === void 0 ? void 0 : _b.location;
11
- const serviceId = (_c = res === null || res === void 0 ? void 0 : res.groups) === null || _c === void 0 ? void 0 : _c.serviceId;
11
+ const projectId = res?.groups?.projectId;
12
+ const location = res?.groups?.location;
13
+ const serviceId = res?.groups?.serviceId;
12
14
  if (!projectId || !location || !serviceId) {
13
15
  throw new error_1.FirebaseError(`${serviceName} is not a valid service name`);
14
16
  }
@@ -22,15 +24,13 @@ function parseServiceName(serviceName) {
22
24
  toString,
23
25
  };
24
26
  }
25
- exports.parseServiceName = parseServiceName;
26
27
  const connectorNameRegex = /projects\/(?<projectId>[^\/]+)\/locations\/(?<location>[^\/]+)\/services\/(?<serviceId>[^\/]+)\/connectors\/(?<connectorId>[^\/]+)/;
27
28
  function parseConnectorName(connectorName) {
28
- var _a, _b, _c, _d;
29
29
  const res = connectorNameRegex.exec(connectorName);
30
- const projectId = (_a = res === null || res === void 0 ? void 0 : res.groups) === null || _a === void 0 ? void 0 : _a.projectId;
31
- const location = (_b = res === null || res === void 0 ? void 0 : res.groups) === null || _b === void 0 ? void 0 : _b.location;
32
- const serviceId = (_c = res === null || res === void 0 ? void 0 : res.groups) === null || _c === void 0 ? void 0 : _c.serviceId;
33
- const connectorId = (_d = res === null || res === void 0 ? void 0 : res.groups) === null || _d === void 0 ? void 0 : _d.connectorId;
30
+ const projectId = res?.groups?.projectId;
31
+ const location = res?.groups?.location;
32
+ const serviceId = res?.groups?.serviceId;
33
+ const connectorId = res?.groups?.connectorId;
34
34
  if (!projectId || !location || !serviceId || !connectorId) {
35
35
  throw new error_1.FirebaseError(`${connectorName} is not a valid connector name`);
36
36
  }
@@ -45,14 +45,12 @@ function parseConnectorName(connectorName) {
45
45
  toString,
46
46
  };
47
47
  }
48
- exports.parseConnectorName = parseConnectorName;
49
48
  const cloudSQLInstanceNameRegex = /projects\/(?<projectId>[^\/]+)\/locations\/(?<location>[^\/]+)\/instances\/(?<instanceId>[^\/]+)/;
50
49
  function parseCloudSQLInstanceName(cloudSQLInstanceName) {
51
- var _a, _b, _c;
52
50
  const res = cloudSQLInstanceNameRegex.exec(cloudSQLInstanceName);
53
- const projectId = (_a = res === null || res === void 0 ? void 0 : res.groups) === null || _a === void 0 ? void 0 : _a.projectId;
54
- const location = (_b = res === null || res === void 0 ? void 0 : res.groups) === null || _b === void 0 ? void 0 : _b.location;
55
- const instanceId = (_c = res === null || res === void 0 ? void 0 : res.groups) === null || _c === void 0 ? void 0 : _c.instanceId;
51
+ const projectId = res?.groups?.projectId;
52
+ const location = res?.groups?.location;
53
+ const instanceId = res?.groups?.instanceId;
56
54
  if (!projectId || !location || !instanceId) {
57
55
  throw new error_1.FirebaseError(`${cloudSQLInstanceName} is not a valid cloudSQL instance name`);
58
56
  }
@@ -66,9 +64,7 @@ function parseCloudSQLInstanceName(cloudSQLInstanceName) {
66
64
  toString,
67
65
  };
68
66
  }
69
- exports.parseCloudSQLInstanceName = parseCloudSQLInstanceName;
70
67
  const graphqlNameRegex = /^[A-Za-z_][A-Za-z0-9_]*$/;
71
68
  function isGraphqlName(name) {
72
69
  return graphqlNameRegex.test(name);
73
70
  }
74
- exports.isGraphqlName = isGraphqlName;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.promptDeleteConnector = void 0;
3
+ exports.promptDeleteConnector = promptDeleteConnector;
4
4
  const prompt_1 = require("../prompt");
5
5
  const utils = require("../utils");
6
6
  const client_1 = require("./client");
@@ -17,4 +17,3 @@ async function promptDeleteConnector(options, connectorName) {
17
17
  utils.logLabeledSuccess("dataconnect", `Connector ${connectorName} deleted`);
18
18
  }
19
19
  }
20
- exports.promptDeleteConnector = promptDeleteConnector;
@@ -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;