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,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDevModeHandle = exports.ɵcodegenPublicDirectory = exports.build = exports.discover = exports.vitePluginDiscover = exports.viteDiscoverWithNpmDependency = exports.init = exports.initViteTemplate = exports.DEFAULT_BUILD_SCRIPT = exports.supportedRange = exports.type = exports.support = exports.name = void 0;
3
+ exports.vitePluginDiscover = exports.viteDiscoverWithNpmDependency = exports.initViteTemplate = exports.DEFAULT_BUILD_SCRIPT = exports.supportedRange = exports.type = exports.support = exports.name = void 0;
4
+ exports.init = init;
5
+ exports.discover = discover;
6
+ exports.build = build;
7
+ exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
8
+ exports.getDevModeHandle = getDevModeHandle;
4
9
  const child_process_1 = require("child_process");
5
10
  const cross_spawn_1 = require("cross-spawn");
6
11
  const fs_1 = require("fs");
@@ -34,13 +39,11 @@ async function init(setup, config, baseTemplate = "vanilla") {
34
39
  cwd: (0, path_1.join)(config.projectDir, setup.featureInfo.hosting.source),
35
40
  });
36
41
  }
37
- exports.init = init;
38
42
  const viteDiscoverWithNpmDependency = (dep) => async (dir) => await discover(dir, undefined, dep);
39
43
  exports.viteDiscoverWithNpmDependency = viteDiscoverWithNpmDependency;
40
44
  const vitePluginDiscover = (plugin) => async (dir) => await discover(dir, plugin);
41
45
  exports.vitePluginDiscover = vitePluginDiscover;
42
46
  async function discover(dir, plugin, npmDependency) {
43
- var _a;
44
47
  if (!(0, fs_1.existsSync)((0, path_1.join)(dir, "package.json")))
45
48
  return;
46
49
  const additionalDep = npmDependency && (0, utils_1.findDependency)(npmDependency, { cwd: dir, depth: 0, omitDev: false });
@@ -50,11 +53,11 @@ async function discover(dir, plugin, npmDependency) {
50
53
  (0, fs_extra_1.pathExists)((0, path_1.join)(dir, "vite.config.ts")),
51
54
  ]);
52
55
  const anyConfigFileExists = configFilesExist.some((it) => it);
53
- const version = (_a = (0, utils_1.findDependency)("vite", {
56
+ const version = (0, utils_1.findDependency)("vite", {
54
57
  cwd: dir,
55
58
  depth,
56
59
  omitDev: false,
57
- })) === null || _a === void 0 ? void 0 : _a.version;
60
+ })?.version;
58
61
  if (!anyConfigFileExists && !version)
59
62
  return;
60
63
  if (npmDependency && !additionalDep)
@@ -69,7 +72,6 @@ async function discover(dir, plugin, npmDependency) {
69
72
  vite: true,
70
73
  };
71
74
  }
72
- exports.discover = discover;
73
75
  async function build(root, target) {
74
76
  const { build } = await (0, utils_1.relativeRequire)(root, "vite");
75
77
  await (0, utils_1.warnIfCustomBuildScript)(root, exports.name, exports.DEFAULT_BUILD_SCRIPT);
@@ -83,13 +85,11 @@ async function build(root, target) {
83
85
  process.env[envKey] = originalNodeEnv;
84
86
  return { rewrites: [{ source: "**", destination: "/index.html" }] };
85
87
  }
86
- exports.build = build;
87
88
  async function ɵcodegenPublicDirectory(root, dest) {
88
89
  const viteConfig = await getConfig(root);
89
90
  const viteDistPath = (0, path_1.join)(root, viteConfig.build.outDir);
90
91
  await (0, fs_extra_1.copy)(viteDistPath, dest);
91
92
  }
92
- exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
93
93
  async function getDevModeHandle(dir) {
94
94
  const host = new Promise((resolve, reject) => {
95
95
  const cli = (0, utils_1.getNodeModuleBin)("vite", dir);
@@ -108,7 +108,6 @@ async function getDevModeHandle(dir) {
108
108
  });
109
109
  return (0, utils_1.simpleProxy)(await host);
110
110
  }
111
- exports.getDevModeHandle = getDevModeHandle;
112
111
  async function getConfig(root) {
113
112
  const { resolveConfig } = await (0, utils_1.relativeRequire)(root, "vite");
114
113
  const cwd = process.cwd();
package/lib/fsAsync.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readdirRecursive = void 0;
3
+ exports.readdirRecursive = readdirRecursive;
4
4
  const fs_extra_1 = require("fs-extra");
5
5
  const ignore_1 = require("ignore");
6
6
  const _ = require("lodash");
@@ -59,4 +59,3 @@ async function readdirRecursive(options) {
59
59
  ignoreSymlinks: !!options.ignoreSymlinks,
60
60
  });
61
61
  }
62
- exports.readdirRecursive = readdirRecursive;
package/lib/fsutils.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.moveAll = exports.listFiles = exports.readFile = exports.dirExistsSync = exports.fileExistsSync = void 0;
3
+ exports.fileExistsSync = fileExistsSync;
4
+ exports.dirExistsSync = dirExistsSync;
5
+ exports.readFile = readFile;
6
+ exports.listFiles = listFiles;
7
+ exports.moveAll = moveAll;
4
8
  const fs_1 = require("fs");
5
9
  const path = require("path");
6
10
  const error_1 = require("./error");
@@ -13,7 +17,6 @@ function fileExistsSync(path) {
13
17
  return false;
14
18
  }
15
19
  }
16
- exports.fileExistsSync = fileExistsSync;
17
20
  function dirExistsSync(path) {
18
21
  try {
19
22
  return (0, fs_1.statSync)(path).isDirectory();
@@ -22,7 +25,6 @@ function dirExistsSync(path) {
22
25
  return false;
23
26
  }
24
27
  }
25
- exports.dirExistsSync = dirExistsSync;
26
28
  function readFile(path) {
27
29
  try {
28
30
  return (0, fs_1.readFileSync)(path).toString();
@@ -34,7 +36,6 @@ function readFile(path) {
34
36
  throw e;
35
37
  }
36
38
  }
37
- exports.readFile = readFile;
38
39
  function listFiles(path) {
39
40
  try {
40
41
  return (0, fs_1.readdirSync)(path);
@@ -46,7 +47,6 @@ function listFiles(path) {
46
47
  throw e;
47
48
  }
48
49
  }
49
- exports.listFiles = listFiles;
50
50
  function moveAll(srcDir, destDir) {
51
51
  if (!(0, fs_1.existsSync)(destDir)) {
52
52
  (0, fs_1.mkdirSync)(destDir, { recursive: true });
@@ -59,4 +59,3 @@ function moveAll(srcDir, destDir) {
59
59
  (0, fs_extra_1.moveSync)(srcPath, path.join(destDir, f));
60
60
  }
61
61
  }
62
- exports.moveAll = moveAll;
package/lib/functional.js CHANGED
@@ -1,6 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.optionalValueMatches = exports.nullsafeVisitor = exports.mapObject = exports.partitionRecord = exports.partition = exports.assertExhaustive = exports.zipIn = exports.zip = exports.reduceFlat = exports.flatten = exports.flattenArray = exports.flattenObject = void 0;
3
+ exports.nullsafeVisitor = exports.zipIn = void 0;
4
+ exports.flattenObject = flattenObject;
5
+ exports.flattenArray = flattenArray;
6
+ exports.flatten = flatten;
7
+ exports.reduceFlat = reduceFlat;
8
+ exports.zip = zip;
9
+ exports.assertExhaustive = assertExhaustive;
10
+ exports.partition = partition;
11
+ exports.partitionRecord = partitionRecord;
12
+ exports.mapObject = mapObject;
13
+ exports.optionalValueMatches = optionalValueMatches;
4
14
  function* flattenObject(obj) {
5
15
  function* helper(path, obj) {
6
16
  for (const [k, v] of Object.entries(obj)) {
@@ -14,7 +24,6 @@ function* flattenObject(obj) {
14
24
  }
15
25
  yield* helper([], obj);
16
26
  }
17
- exports.flattenObject = flattenObject;
18
27
  function* flattenArray(arr) {
19
28
  for (const val of arr) {
20
29
  if (Array.isArray(val)) {
@@ -25,7 +34,6 @@ function* flattenArray(arr) {
25
34
  }
26
35
  }
27
36
  }
28
- exports.flattenArray = flattenArray;
29
37
  function flatten(objOrArr) {
30
38
  if (Array.isArray(objOrArr)) {
31
39
  return flattenArray(objOrArr);
@@ -34,11 +42,9 @@ function flatten(objOrArr) {
34
42
  return flattenObject(objOrArr);
35
43
  }
36
44
  }
37
- exports.flatten = flatten;
38
45
  function reduceFlat(accum, next) {
39
46
  return [...(accum || []), ...flatten([next])];
40
47
  }
41
- exports.reduceFlat = reduceFlat;
42
48
  function* zip(left, right) {
43
49
  if (left.length !== right.length) {
44
50
  throw new Error("Cannot zip between two lists of differen lengths");
@@ -47,7 +53,6 @@ function* zip(left, right) {
47
53
  yield [left[i], right[i]];
48
54
  }
49
55
  }
50
- exports.zip = zip;
51
56
  const zipIn = (other) => (elem, ndx) => {
52
57
  return [elem, other[ndx]];
53
58
  };
@@ -55,21 +60,18 @@ exports.zipIn = zipIn;
55
60
  function assertExhaustive(val, message) {
56
61
  throw new Error(message || `Never has a value (${val}).`);
57
62
  }
58
- exports.assertExhaustive = assertExhaustive;
59
63
  function partition(arr, predicate) {
60
64
  return arr.reduce((acc, elem) => {
61
65
  acc[predicate(elem) ? 0 : 1].push(elem);
62
66
  return acc;
63
67
  }, [[], []]);
64
68
  }
65
- exports.partition = partition;
66
69
  function partitionRecord(rec, predicate) {
67
70
  return Object.entries(rec).reduce((acc, [key, val]) => {
68
71
  acc[predicate(key, val) ? 0 : 1][key] = val;
69
72
  return acc;
70
73
  }, [{}, {}]);
71
74
  }
72
- exports.partitionRecord = partitionRecord;
73
75
  function mapObject(input, transform) {
74
76
  const result = {};
75
77
  for (const [k, v] of Object.entries(input)) {
@@ -77,7 +79,6 @@ function mapObject(input, transform) {
77
79
  }
78
80
  return result;
79
81
  }
80
- exports.mapObject = mapObject;
81
82
  const nullsafeVisitor = (func, ...rest) => (first) => {
82
83
  if (first === null) {
83
84
  return null;
@@ -90,4 +91,3 @@ function optionalValueMatches(lhs, rhs, defaultValue) {
90
91
  rhs = rhs === undefined ? defaultValue : rhs;
91
92
  return lhs === rhs;
92
93
  }
93
- exports.optionalValueMatches = optionalValueMatches;
@@ -1,6 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setCleanupPolicies = exports.checkCleanupPolicy = exports.hasCleanupOptOut = exports.hasSameCleanupPolicy = exports.setCleanupPolicy = exports.optOutRepository = exports.updateRepository = exports.generateCleanupPolicy = exports.parseDaysFromPolicy = exports.daysToSeconds = exports.findExistingPolicy = exports.getRepo = exports.getRepoCache = exports.makeRepoPath = exports.DEFAULT_CLEANUP_DAYS = exports.OPT_OUT_LABEL_KEY = exports.CLEANUP_POLICY_ID = exports.GCF_REPO_ID = void 0;
3
+ exports.getRepoCache = exports.DEFAULT_CLEANUP_DAYS = exports.OPT_OUT_LABEL_KEY = exports.CLEANUP_POLICY_ID = exports.GCF_REPO_ID = void 0;
4
+ exports.makeRepoPath = makeRepoPath;
5
+ exports.getRepo = getRepo;
6
+ exports.findExistingPolicy = findExistingPolicy;
7
+ exports.daysToSeconds = daysToSeconds;
8
+ exports.parseDaysFromPolicy = parseDaysFromPolicy;
9
+ exports.generateCleanupPolicy = generateCleanupPolicy;
10
+ exports.updateRepository = updateRepository;
11
+ exports.optOutRepository = optOutRepository;
12
+ exports.setCleanupPolicy = setCleanupPolicy;
13
+ exports.hasSameCleanupPolicy = hasSameCleanupPolicy;
14
+ exports.hasCleanupOptOut = hasCleanupOptOut;
15
+ exports.checkCleanupPolicy = checkCleanupPolicy;
16
+ exports.setCleanupPolicies = setCleanupPolicies;
4
17
  const artifactregistry = require("../gcp/artifactregistry");
5
18
  const logger_1 = require("../logger");
6
19
  const error_1 = require("../error");
@@ -12,7 +25,6 @@ const SECONDS_IN_DAY = 24 * 60 * 60;
12
25
  function makeRepoPath(projectId, location, repoName = exports.GCF_REPO_ID) {
13
26
  return `projects/${projectId}/locations/${location}/repositories/${repoName}`;
14
27
  }
15
- exports.makeRepoPath = makeRepoPath;
16
28
  exports.getRepoCache = new Map();
17
29
  async function getRepo(projectId, location, forceRefresh = false, repoName = exports.GCF_REPO_ID) {
18
30
  const repoPath = makeRepoPath(projectId, location, repoName);
@@ -23,17 +35,13 @@ async function getRepo(projectId, location, forceRefresh = false, repoName = exp
23
35
  exports.getRepoCache.set(repoPath, repo);
24
36
  return repo;
25
37
  }
26
- exports.getRepo = getRepo;
27
38
  function findExistingPolicy(repository) {
28
- var _a;
29
- return (_a = repository === null || repository === void 0 ? void 0 : repository.cleanupPolicies) === null || _a === void 0 ? void 0 : _a[exports.CLEANUP_POLICY_ID];
39
+ return repository?.cleanupPolicies?.[exports.CLEANUP_POLICY_ID];
30
40
  }
31
- exports.findExistingPolicy = findExistingPolicy;
32
41
  function daysToSeconds(days) {
33
42
  const seconds = days * SECONDS_IN_DAY;
34
43
  return `${seconds}s`;
35
44
  }
36
- exports.daysToSeconds = daysToSeconds;
37
45
  function parseDaysFromPolicy(olderThan) {
38
46
  const match = olderThan.match(/^(\d+)s$/);
39
47
  if (match && match[1]) {
@@ -42,7 +50,6 @@ function parseDaysFromPolicy(olderThan) {
42
50
  }
43
51
  return;
44
52
  }
45
- exports.parseDaysFromPolicy = parseDaysFromPolicy;
46
53
  function generateCleanupPolicy(daysToKeep) {
47
54
  return {
48
55
  [exports.CLEANUP_POLICY_ID]: {
@@ -55,7 +62,6 @@ function generateCleanupPolicy(daysToKeep) {
55
62
  },
56
63
  };
57
64
  }
58
- exports.generateCleanupPolicy = generateCleanupPolicy;
59
65
  async function updateRepository(repo) {
60
66
  try {
61
67
  await artifactregistry.updateRepository(repo);
@@ -73,49 +79,48 @@ async function updateRepository(repo) {
73
79
  }
74
80
  }
75
81
  }
76
- exports.updateRepository = updateRepository;
77
82
  async function optOutRepository(repository) {
78
- const policies = Object.assign({}, repository.cleanupPolicies);
83
+ const policies = {
84
+ ...repository.cleanupPolicies,
85
+ };
79
86
  if (exports.CLEANUP_POLICY_ID in policies) {
80
87
  delete policies[exports.CLEANUP_POLICY_ID];
81
88
  }
82
89
  const update = {
83
90
  name: repository.name,
84
- labels: Object.assign(Object.assign({}, repository.labels), { [exports.OPT_OUT_LABEL_KEY]: "true" }),
91
+ labels: { ...repository.labels, [exports.OPT_OUT_LABEL_KEY]: "true" },
85
92
  cleanupPolicies: policies,
86
93
  };
87
94
  await exports.updateRepository(update);
88
95
  }
89
- exports.optOutRepository = optOutRepository;
90
96
  async function setCleanupPolicy(repository, daysToKeep) {
91
- const labels = Object.assign({}, repository.labels);
97
+ const labels = { ...repository.labels };
92
98
  delete labels[exports.OPT_OUT_LABEL_KEY];
93
99
  const update = {
94
100
  name: repository.name,
95
- cleanupPolicies: Object.assign(Object.assign({}, repository.cleanupPolicies), generateCleanupPolicy(daysToKeep)),
101
+ cleanupPolicies: {
102
+ ...repository.cleanupPolicies,
103
+ ...generateCleanupPolicy(daysToKeep),
104
+ },
96
105
  cleanupPolicyDryRun: false,
97
106
  labels,
98
107
  };
99
108
  await exports.updateRepository(update);
100
109
  }
101
- exports.setCleanupPolicy = setCleanupPolicy;
102
110
  function hasSameCleanupPolicy(repository, daysToKeep) {
103
- var _a, _b;
104
111
  const existingPolicy = findExistingPolicy(repository);
105
112
  if (!existingPolicy) {
106
113
  return false;
107
114
  }
108
- if (((_a = existingPolicy.condition) === null || _a === void 0 ? void 0 : _a.tagState) !== "ANY" || !((_b = existingPolicy.condition) === null || _b === void 0 ? void 0 : _b.olderThan)) {
115
+ if (existingPolicy.condition?.tagState !== "ANY" || !existingPolicy.condition?.olderThan) {
109
116
  return false;
110
117
  }
111
118
  const existingSeconds = parseDaysFromPolicy(existingPolicy.condition.olderThan);
112
119
  return existingSeconds === daysToKeep;
113
120
  }
114
- exports.hasSameCleanupPolicy = hasSameCleanupPolicy;
115
121
  function hasCleanupOptOut(repo) {
116
122
  return !!(repo.labels && repo.labels[exports.OPT_OUT_LABEL_KEY] === "true");
117
123
  }
118
- exports.hasCleanupOptOut = hasCleanupOptOut;
119
124
  async function checkCleanupPolicy(projectId, locations) {
120
125
  if (locations.length === 0) {
121
126
  return { locationsToSetup: [], locationsWithErrors: [] };
@@ -155,7 +160,6 @@ async function checkCleanupPolicy(projectId, locations) {
155
160
  }
156
161
  return { locationsToSetup, locationsWithErrors };
157
162
  }
158
- exports.checkCleanupPolicy = checkCleanupPolicy;
159
163
  async function setCleanupPolicies(projectId, locations, daysToKeep) {
160
164
  if (locations.length === 0)
161
165
  return { locationsWithPolicy: [], locationsWithErrors: [] };
@@ -190,4 +194,3 @@ async function setCleanupPolicies(projectId, locations, daysToKeep) {
190
194
  locationsWithErrors,
191
195
  };
192
196
  }
193
- exports.setCleanupPolicies = setCleanupPolicies;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureTargeted = void 0;
3
+ exports.ensureTargeted = ensureTargeted;
4
4
  function ensureTargeted(only, codebaseOrFunction, functionId) {
5
5
  const parts = only.split(",");
6
6
  if (parts.includes("functions")) {
@@ -18,4 +18,3 @@ function ensureTargeted(only, codebaseOrFunction, functionId) {
18
18
  }
19
19
  return `${only},${newTarget}`;
20
20
  }
21
- exports.ensureTargeted = ensureTargeted;
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.writeResolvedParams = exports.loadFirebaseEnvs = exports.loadUserEnvs = exports.checkForDuplicateKeys = exports.writeUserEnvs = exports.hasUserEnvs = exports.parseStrict = exports.validateKey = exports.KeyValidationError = exports.parse = void 0;
3
+ exports.KeyValidationError = void 0;
4
+ exports.parse = parse;
5
+ exports.validateKey = validateKey;
6
+ exports.parseStrict = parseStrict;
7
+ exports.hasUserEnvs = hasUserEnvs;
8
+ exports.writeUserEnvs = writeUserEnvs;
9
+ exports.checkForDuplicateKeys = checkForDuplicateKeys;
10
+ exports.loadUserEnvs = loadUserEnvs;
11
+ exports.loadFirebaseEnvs = loadFirebaseEnvs;
12
+ exports.writeResolvedParams = writeResolvedParams;
4
13
  const clc = require("colorette");
5
14
  const fs = require("fs");
6
15
  const path = require("path");
@@ -92,7 +101,6 @@ function parse(data) {
92
101
  }
93
102
  return { envs, errors };
94
103
  }
95
- exports.parse = parse;
96
104
  class KeyValidationError extends Error {
97
105
  constructor(key, message) {
98
106
  super(`Failed to validate key ${key}: ${message}`);
@@ -113,7 +121,6 @@ function validateKey(key) {
113
121
  throw new KeyValidationError(key, `Key ${key} starts with a reserved prefix (${RESERVED_PREFIXES.join(" ")})`);
114
122
  }
115
123
  }
116
- exports.validateKey = validateKey;
117
124
  function parseStrict(data) {
118
125
  const { envs, errors } = parse(data);
119
126
  if (errors.length) {
@@ -139,7 +146,6 @@ function parseStrict(data) {
139
146
  }
140
147
  return envs;
141
148
  }
142
- exports.parseStrict = parseStrict;
143
149
  function findEnvfiles(configDir, projectId, projectAlias, isEmulator) {
144
150
  const files = [".env"];
145
151
  files.push(`.env.${projectId}`);
@@ -158,7 +164,6 @@ function hasUserEnvs(opts) {
158
164
  const configDir = opts.configDir || opts.functionsSource;
159
165
  return findEnvfiles(configDir, opts.projectId, opts.projectAlias, opts.isEmulator).length > 0;
160
166
  }
161
- exports.hasUserEnvs = hasUserEnvs;
162
167
  function writeUserEnvs(toWrite, envOpts) {
163
168
  if (Object.keys(toWrite).length === 0) {
164
169
  return;
@@ -177,7 +182,7 @@ function writeUserEnvs(toWrite, envOpts) {
177
182
  }
178
183
  const fullEnvs = loadUserEnvs(envOpts);
179
184
  const prodEnvs = isEmulator
180
- ? loadUserEnvs(Object.assign(Object.assign({}, envOpts), { isEmulator: false }))
185
+ ? loadUserEnvs({ ...envOpts, isEmulator: false })
181
186
  : loadUserEnvs(envOpts);
182
187
  checkForDuplicateKeys(isEmulator || false, Object.keys(toWrite), fullEnvs, prodEnvs);
183
188
  for (const k of Object.keys(toWrite)) {
@@ -190,7 +195,6 @@ function writeUserEnvs(toWrite, envOpts) {
190
195
  }
191
196
  fs.appendFileSync(path.join(configDir, targetEnvFile), lines);
192
197
  }
193
- exports.writeUserEnvs = writeUserEnvs;
194
198
  function checkForDuplicateKeys(isEmulator, keys, fullEnv, envsWithoutLocal) {
195
199
  for (const key of keys) {
196
200
  const definedInEnv = fullEnv.hasOwnProperty(key);
@@ -204,7 +208,6 @@ function checkForDuplicateKeys(isEmulator, keys, fullEnv, envsWithoutLocal) {
204
208
  }
205
209
  }
206
210
  }
207
- exports.checkForDuplicateKeys = checkForDuplicateKeys;
208
211
  function formatUserEnvForWrite(key, value) {
209
212
  const escapedValue = value.replace(ALL_ESCAPABLE_CHARACTERS_RE, (match) => CHARACTERS_TO_ESCAPE_SEQUENCES[match]);
210
213
  if (escapedValue !== value) {
@@ -213,7 +216,6 @@ function formatUserEnvForWrite(key, value) {
213
216
  return `${key}=${escapedValue}\n`;
214
217
  }
215
218
  function loadUserEnvs(opts) {
216
- var _a;
217
219
  const configDir = opts.configDir || opts.functionsSource;
218
220
  const envFiles = findEnvfiles(configDir, opts.projectId, opts.projectAlias, opts.isEmulator);
219
221
  if (envFiles.length === 0) {
@@ -230,26 +232,24 @@ function loadUserEnvs(opts) {
230
232
  for (const f of envFiles) {
231
233
  try {
232
234
  const data = fs.readFileSync(path.join(configDir, f), "utf8");
233
- envs = Object.assign(Object.assign({}, envs), parseStrict(data));
235
+ envs = { ...envs, ...parseStrict(data) };
234
236
  }
235
237
  catch (err) {
236
238
  throw new error_1.FirebaseError(`Failed to load environment variables from ${f}.`, {
237
239
  exit: 2,
238
- children: ((_a = err.children) === null || _a === void 0 ? void 0 : _a.length) > 0 ? err.children : [err],
240
+ children: err.children?.length > 0 ? err.children : [err],
239
241
  });
240
242
  }
241
243
  }
242
244
  (0, utils_1.logBullet)(clc.cyan(clc.bold("functions: ")) + `Loaded environment variables from ${envFiles.join(", ")}.`);
243
245
  return envs;
244
246
  }
245
- exports.loadUserEnvs = loadUserEnvs;
246
247
  function loadFirebaseEnvs(firebaseConfig, projectId) {
247
248
  return {
248
249
  FIREBASE_CONFIG: JSON.stringify(firebaseConfig),
249
250
  GCLOUD_PROJECT: projectId,
250
251
  };
251
252
  }
252
- exports.loadFirebaseEnvs = loadFirebaseEnvs;
253
253
  function writeResolvedParams(resolvedEnvs, userEnvs, userEnvOpt) {
254
254
  const toWrite = {};
255
255
  for (const paramName of Object.keys(resolvedEnvs)) {
@@ -260,4 +260,3 @@ function writeResolvedParams(resolvedEnvs, userEnvs, userEnvOpt) {
260
260
  }
261
261
  writeUserEnvs(toWrite, userEnvOpt);
262
262
  }
263
- exports.writeResolvedParams = writeResolvedParams;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logEntries = exports.getApiFilter = void 0;
3
+ exports.getApiFilter = getApiFilter;
4
+ exports.logEntries = logEntries;
4
5
  const logger_1 = require("../logger");
5
6
  function getApiFilter(functionList) {
6
7
  const baseFilter = 'resource.type="cloud_function" OR ' +
@@ -14,7 +15,6 @@ function getApiFilter(functionList) {
14
15
  }
15
16
  return baseFilter;
16
17
  }
17
- exports.getApiFilter = getApiFilter;
18
18
  function logEntries(entries) {
19
19
  if (!entries || entries.length === 0) {
20
20
  logger_1.logger.info("No log entries found.");
@@ -32,4 +32,3 @@ function logEntries(entries) {
32
32
  logger_1.logger.info(`${timestamp} ${severity} ${name}: ${message}`);
33
33
  }
34
34
  }
35
- exports.logEntries = logEntries;
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
2
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.shouldUseRuntimeConfig = exports.resolveConfigDir = exports.requireLocal = exports.isRemoteConfig = exports.isLocalConfig = exports.configForCodebase = exports.normalizeAndValidate = exports.validate = exports.assertUnique = exports.validatePrefix = exports.validateCodebase = exports.normalize = exports.DEFAULT_CODEBASE = void 0;
3
+ exports.DEFAULT_CODEBASE = void 0;
4
+ exports.normalize = normalize;
5
+ exports.validateCodebase = validateCodebase;
6
+ exports.validatePrefix = validatePrefix;
7
+ exports.assertUnique = assertUnique;
8
+ exports.validate = validate;
9
+ exports.normalizeAndValidate = normalizeAndValidate;
10
+ exports.configForCodebase = configForCodebase;
11
+ exports.isLocalConfig = isLocalConfig;
12
+ exports.isRemoteConfig = isRemoteConfig;
13
+ exports.requireLocal = requireLocal;
14
+ exports.resolveConfigDir = resolveConfigDir;
15
+ exports.shouldUseRuntimeConfig = shouldUseRuntimeConfig;
15
16
  const error_1 = require("../error");
16
17
  exports.DEFAULT_CODEBASE = "default";
17
18
  function normalize(config) {
@@ -26,14 +27,12 @@ function normalize(config) {
26
27
  }
27
28
  return [config];
28
29
  }
29
- exports.normalize = normalize;
30
30
  function validateCodebase(codebase) {
31
31
  if (codebase.length === 0 || codebase.length > 63 || !/^[a-z0-9_-]+$/.test(codebase)) {
32
32
  throw new error_1.FirebaseError("Invalid codebase name. Codebase must be less than 64 characters and " +
33
33
  "can contain only lowercase letters, numeric characters, underscores, and dashes.");
34
34
  }
35
35
  }
36
- exports.validateCodebase = validateCodebase;
37
36
  function validatePrefix(prefix) {
38
37
  if (prefix.length > 30) {
39
38
  throw new error_1.FirebaseError("Invalid prefix. Prefix must be 30 characters or less.");
@@ -42,23 +41,26 @@ function validatePrefix(prefix) {
42
41
  throw new error_1.FirebaseError("Invalid prefix. Prefix must start with a lowercase letter, can contain only lowercase letters, numeric characters, and dashes, and cannot start or end with a dash.");
43
42
  }
44
43
  }
45
- exports.validatePrefix = validatePrefix;
46
44
  function validateSingle(config) {
47
- const { source, remoteSource, runtime, codebase: providedCodebase } = config, rest = __rest(config, ["source", "remoteSource", "runtime", "codebase"]);
45
+ const { source, remoteSource, runtime, codebase: providedCodebase, ...rest } = config;
48
46
  if (source && remoteSource) {
49
47
  throw new error_1.FirebaseError("Cannot specify both 'source' and 'remoteSource' in a single functions config. Please choose one.");
50
48
  }
51
49
  if (!source && !remoteSource) {
52
50
  throw new error_1.FirebaseError("codebase source must be specified. Must specify either 'source' or 'remoteSource' in a functions config.");
53
51
  }
54
- const codebase = providedCodebase !== null && providedCodebase !== void 0 ? providedCodebase : exports.DEFAULT_CODEBASE;
52
+ const codebase = providedCodebase ?? exports.DEFAULT_CODEBASE;
55
53
  validateCodebase(codebase);
56
54
  if (config.prefix) {
57
55
  validatePrefix(config.prefix);
58
56
  }
59
- const commonConfig = Object.assign({ codebase }, rest);
57
+ const commonConfig = { codebase, ...rest };
60
58
  if (source) {
61
- return Object.assign(Object.assign(Object.assign({}, commonConfig), { source }), (runtime ? { runtime } : {}));
59
+ return {
60
+ ...commonConfig,
61
+ source,
62
+ ...(runtime ? { runtime } : {}),
63
+ };
62
64
  }
63
65
  else if (remoteSource) {
64
66
  if (!remoteSource.repository || !remoteSource.ref) {
@@ -67,8 +69,11 @@ function validateSingle(config) {
67
69
  if (!runtime) {
68
70
  throw new error_1.FirebaseError("functions.runtime is required when using remoteSource in firebase.json.");
69
71
  }
70
- return Object.assign(Object.assign({}, commonConfig), { remoteSource,
71
- runtime });
72
+ return {
73
+ ...commonConfig,
74
+ remoteSource,
75
+ runtime,
76
+ };
72
77
  }
73
78
  throw new error_1.FirebaseError("Invalid functions config.");
74
79
  }
@@ -85,9 +90,7 @@ function assertUnique(config, property, propval) {
85
90
  values.add(value);
86
91
  }
87
92
  }
88
- exports.assertUnique = assertUnique;
89
93
  function assertUniqueSourcePrefixPair(config) {
90
- var _a;
91
94
  const sourcePrefixPairs = new Set();
92
95
  for (const c of config) {
93
96
  let sourceIdentifier;
@@ -105,7 +108,7 @@ function assertUniqueSourcePrefixPair(config) {
105
108
  }
106
109
  const key = JSON.stringify({ source: sourceIdentifier, prefix: c.prefix || "" });
107
110
  if (sourcePrefixPairs.has(key)) {
108
- throw new error_1.FirebaseError(`More than one functions config specifies the same ${sourceDescription} and prefix ('${(_a = c.prefix) !== null && _a !== void 0 ? _a : ""}'). Please add a unique 'prefix' to each function configuration that shares this source to resolve the conflict.`);
111
+ throw new error_1.FirebaseError(`More than one functions config specifies the same ${sourceDescription} and prefix ('${c.prefix ?? ""}'). Please add a unique 'prefix' to each function configuration that shares this source to resolve the conflict.`);
109
112
  }
110
113
  sourcePrefixPairs.add(key);
111
114
  }
@@ -116,11 +119,9 @@ function validate(config) {
116
119
  assertUniqueSourcePrefixPair(validated);
117
120
  return validated;
118
121
  }
119
- exports.validate = validate;
120
122
  function normalizeAndValidate(config) {
121
123
  return validate(normalize(config));
122
124
  }
123
- exports.normalizeAndValidate = normalizeAndValidate;
124
125
  function configForCodebase(config, codebase) {
125
126
  const codebaseCfg = config.find((c) => c.codebase === codebase);
126
127
  if (!codebaseCfg) {
@@ -128,28 +129,23 @@ function configForCodebase(config, codebase) {
128
129
  }
129
130
  return codebaseCfg;
130
131
  }
131
- exports.configForCodebase = configForCodebase;
132
132
  function isLocalConfig(c) {
133
133
  return c.source !== undefined;
134
134
  }
135
- exports.isLocalConfig = isLocalConfig;
136
135
  function isRemoteConfig(c) {
137
136
  return c.remoteSource !== undefined;
138
137
  }
139
- exports.isRemoteConfig = isRemoteConfig;
140
138
  function requireLocal(c, purpose) {
141
139
  if (!isLocalConfig(c)) {
142
- const msg = purpose !== null && purpose !== void 0 ? purpose : "This operation requires a local functions source directory, but the codebase is configured with a remote source.";
140
+ const msg = purpose ??
141
+ "This operation requires a local functions source directory, but the codebase is configured with a remote source.";
143
142
  throw new error_1.FirebaseError(msg);
144
143
  }
145
144
  return c;
146
145
  }
147
- exports.requireLocal = requireLocal;
148
146
  function resolveConfigDir(c) {
149
147
  return c.configDir || c.source;
150
148
  }
151
- exports.resolveConfigDir = resolveConfigDir;
152
149
  function shouldUseRuntimeConfig(cfg) {
153
150
  return isLocalConfig(cfg) && cfg.disallowLegacyRuntimeConfig !== true;
154
151
  }
155
- exports.shouldUseRuntimeConfig = shouldUseRuntimeConfig;