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.
- package/lib/accountExporter.js +3 -5
- package/lib/accountImporter.js +4 -5
- package/lib/api.js +3 -3
- package/lib/apiv2.js +9 -13
- package/lib/appUtils.js +33 -36
- package/lib/appdistribution/client.js +4 -8
- package/lib/appdistribution/distribution.js +4 -4
- package/lib/appdistribution/options-parser-util.js +8 -9
- package/lib/appdistribution/types.js +2 -2
- package/lib/appdistribution/yaml_helper.js +33 -17
- package/lib/apphosting/app.js +8 -13
- package/lib/apphosting/backend.js +34 -24
- package/lib/apphosting/config.js +14 -14
- package/lib/apphosting/githubConnections.js +38 -35
- package/lib/apphosting/localbuilds.js +4 -6
- package/lib/apphosting/repo.js +24 -20
- package/lib/apphosting/rollout.js +12 -5
- package/lib/apphosting/secrets/dialogs.js +9 -9
- package/lib/apphosting/secrets/index.js +9 -11
- package/lib/apphosting/utils.js +2 -3
- package/lib/apphosting/yaml.js +12 -11
- package/lib/apptesting/ensureProjectConfigured.js +1 -2
- package/lib/apptesting/invokeTests.js +2 -3
- package/lib/apptesting/parseTestFiles.js +5 -6
- package/lib/apptesting/types.js +2 -2
- package/lib/archiveDirectory.js +1 -2
- package/lib/auth.js +36 -40
- package/lib/bin/cli.js +2 -3
- package/lib/bin/mcp.js +47 -10
- package/lib/checkMinRequiredVersion.js +1 -2
- package/lib/checkValidTargetFilters.js +1 -2
- package/lib/command.js +6 -9
- package/lib/commands/appdistribution-testers-list.js +2 -3
- package/lib/commands/apphosting-backends-list.js +4 -6
- package/lib/commands/apphosting-builds-create.js +2 -3
- package/lib/commands/apphosting-builds-get.js +1 -2
- package/lib/commands/apphosting-rollouts-list.js +1 -2
- package/lib/commands/apps-init.js +1 -1
- package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
- package/lib/commands/crashlytics-symbols-upload.js +2 -2
- package/lib/commands/dataconnect-execute.js +4 -4
- package/lib/commands/dataconnect-sdk-generate.js +5 -6
- package/lib/commands/dataconnect-services-list.js +7 -8
- package/lib/commands/dataconnect-sql-diff.js +1 -2
- package/lib/commands/dataconnect-sql-migrate.js +4 -3
- package/lib/commands/dataconnect-sql-setup.js +2 -2
- package/lib/commands/dataconnect-sql-shell.js +5 -1
- package/lib/commands/emulators-start.js +1 -2
- package/lib/commands/ext-configure.js +6 -4
- package/lib/commands/ext-dev-list.js +2 -3
- package/lib/commands/ext-dev-upload.js +2 -2
- package/lib/commands/ext-export.js +1 -1
- package/lib/commands/ext-info.js +2 -3
- package/lib/commands/ext-install.js +5 -7
- package/lib/commands/firestore-backups-list.js +1 -2
- package/lib/commands/firestore-backups-schedules-list.js +1 -2
- package/lib/commands/firestore-indexes-list.js +1 -2
- package/lib/commands/firestore-utils.js +1 -2
- package/lib/commands/functions-artifacts-setpolicy.js +1 -2
- package/lib/commands/functions-config-export.js +2 -3
- package/lib/commands/hosting-channel-deploy.js +2 -2
- package/lib/commands/hosting-clone.js +2 -3
- package/lib/commands/hosting-sites-create.js +1 -1
- package/lib/commands/index.js +2 -3
- package/lib/commands/init.js +4 -5
- package/lib/commands/internaltesting-functions-discover.js +1 -1
- package/lib/commands/login.js +4 -5
- package/lib/commands/logout.js +3 -3
- package/lib/commands/projects-create.js +1 -1
- package/lib/commands/remoteconfig-experiments-list.js +2 -3
- package/lib/commands/remoteconfig-get.js +1 -1
- package/lib/commands/remoteconfig-rollback.js +1 -2
- package/lib/commands/remoteconfig-rollouts-list.js +2 -3
- package/lib/commands/remoteconfig-versions-list.js +3 -4
- package/lib/commands/use.js +3 -3
- package/lib/config.js +4 -5
- package/lib/crashlytics/buildToolsJarHelper.js +3 -5
- package/lib/crashlytics/events.js +4 -7
- package/lib/crashlytics/filters.js +10 -12
- package/lib/crashlytics/issues.js +2 -3
- package/lib/crashlytics/notes.js +3 -4
- package/lib/crashlytics/reports.js +21 -15
- package/lib/crashlytics/types.js +7 -7
- package/lib/crashlytics/utils.js +4 -4
- package/lib/database/api.js +2 -3
- package/lib/database/import.js +4 -4
- package/lib/database/metadata.js +5 -6
- package/lib/database/rulesConfig.js +2 -3
- package/lib/dataconnect/build.js +10 -13
- package/lib/dataconnect/checkIam.js +1 -2
- package/lib/dataconnect/client.js +15 -18
- package/lib/dataconnect/dataplaneClient.js +6 -6
- package/lib/dataconnect/ensureApis.js +2 -3
- package/lib/dataconnect/errors.js +8 -11
- package/lib/dataconnect/filters.js +2 -3
- package/lib/dataconnect/freeTrial.js +3 -4
- package/lib/dataconnect/graphqlError.js +5 -8
- package/lib/dataconnect/load.js +10 -11
- package/lib/dataconnect/names.js +14 -18
- package/lib/dataconnect/prompts.js +1 -2
- package/lib/dataconnect/provisionCloudSql.js +13 -17
- package/lib/dataconnect/schemaMigration.js +60 -27
- package/lib/dataconnect/types.js +10 -12
- package/lib/dataconnect/webhook.js +3 -3
- package/lib/defaultCredentials.js +3 -4
- package/lib/deploy/apphosting/deploy.js +2 -3
- package/lib/deploy/apphosting/prepare.js +3 -5
- package/lib/deploy/apphosting/release.js +1 -1
- package/lib/deploy/apphosting/util.js +1 -2
- package/lib/deploy/database/deploy.js +1 -2
- package/lib/deploy/database/prepare.js +1 -2
- package/lib/deploy/database/release.js +1 -2
- package/lib/deploy/dataconnect/context.js +15 -4
- package/lib/deploy/dataconnect/deploy.js +5 -6
- package/lib/deploy/dataconnect/prepare.js +7 -9
- package/lib/deploy/dataconnect/release.js +7 -10
- package/lib/deploy/extensions/deploy.js +7 -9
- package/lib/deploy/extensions/deploymentSummary.js +6 -7
- package/lib/deploy/extensions/planner.js +15 -18
- package/lib/deploy/extensions/prepare.js +9 -11
- package/lib/deploy/extensions/release.js +10 -12
- package/lib/deploy/extensions/secrets.js +8 -11
- package/lib/deploy/extensions/tasks.js +6 -8
- package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
- package/lib/deploy/extensions/validate.js +1 -2
- package/lib/deploy/firestore/deploy.js +3 -5
- package/lib/deploy/firestore/prepare.js +2 -3
- package/lib/deploy/firestore/release.js +3 -4
- package/lib/deploy/functions/backend.js +52 -42
- package/lib/deploy/functions/build.js +41 -15
- package/lib/deploy/functions/cache/applyHash.js +3 -5
- package/lib/deploy/functions/cache/hash.js +4 -5
- package/lib/deploy/functions/cel.js +3 -3
- package/lib/deploy/functions/checkIam.js +8 -8
- package/lib/deploy/functions/containerCleaner.js +10 -6
- package/lib/deploy/functions/deploy.js +6 -8
- package/lib/deploy/functions/ensure.js +6 -9
- package/lib/deploy/functions/functionsDeployHelper.js +10 -11
- package/lib/deploy/functions/params.js +10 -10
- package/lib/deploy/functions/prepare.js +41 -36
- package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
- package/lib/deploy/functions/pricing.js +3 -3
- package/lib/deploy/functions/prompts.js +7 -10
- package/lib/deploy/functions/release/executor.js +5 -6
- package/lib/deploy/functions/release/fabricator.js +76 -29
- package/lib/deploy/functions/release/index.js +23 -14
- package/lib/deploy/functions/release/planner.js +15 -14
- package/lib/deploy/functions/release/reporter.js +20 -20
- package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
- package/lib/deploy/functions/remoteSource.js +3 -4
- package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
- package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
- package/lib/deploy/functions/runtimes/index.js +1 -2
- package/lib/deploy/functions/runtimes/node/index.js +18 -9
- package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
- package/lib/deploy/functions/runtimes/node/validate.js +1 -2
- package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
- package/lib/deploy/functions/runtimes/python/index.js +12 -12
- package/lib/deploy/functions/runtimes/supported/index.js +5 -6
- package/lib/deploy/functions/services/auth.js +49 -36
- package/lib/deploy/functions/services/database.js +1 -2
- package/lib/deploy/functions/services/dataconnect.js +16 -2
- package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
- package/lib/deploy/functions/services/firestore.js +3 -5
- package/lib/deploy/functions/services/index.js +2 -2
- package/lib/deploy/functions/services/remoteConfig.js +1 -2
- package/lib/deploy/functions/services/storage.js +3 -5
- package/lib/deploy/functions/services/testLab.js +1 -2
- package/lib/deploy/functions/triggerRegionHelper.js +1 -2
- package/lib/deploy/functions/validate.js +12 -11
- package/lib/deploy/hosting/convertConfig.js +38 -22
- package/lib/deploy/hosting/deploy.js +4 -7
- package/lib/deploy/hosting/hashcache.js +2 -3
- package/lib/deploy/hosting/prepare.js +14 -14
- package/lib/deploy/hosting/release.js +1 -2
- package/lib/deploy/index.js +7 -8
- package/lib/deploy/lifecycleHooks.js +3 -5
- package/lib/deploy/remoteconfig/deploy.js +1 -1
- package/lib/deploy/remoteconfig/functions.js +5 -6
- package/lib/deploy/remoteconfig/prepare.js +2 -3
- package/lib/deploy/remoteconfig/release.js +2 -2
- package/lib/deploy/storage/deploy.js +1 -1
- package/lib/deploy/storage/prepare.js +1 -1
- package/lib/deploy/storage/release.js +1 -1
- package/lib/deploymentTool.js +5 -6
- package/lib/detectProjectRoot.js +1 -2
- package/lib/downloadUtils.js +2 -3
- package/lib/emulator/adminSdkConfig.js +2 -3
- package/lib/emulator/apphosting/config.js +1 -2
- package/lib/emulator/apphosting/developmentServer.js +3 -3
- package/lib/emulator/apphosting/serve.js +20 -14
- package/lib/emulator/auth/cloudFunctions.js +2 -3
- package/lib/emulator/auth/errors.js +2 -2
- package/lib/emulator/auth/handlers.js +3 -4
- package/lib/emulator/auth/index.js +6 -6
- package/lib/emulator/auth/operations.js +171 -129
- package/lib/emulator/auth/server.js +30 -22
- package/lib/emulator/auth/state.js +26 -36
- package/lib/emulator/auth/utils.js +12 -13
- package/lib/emulator/commandUtils.js +20 -20
- package/lib/emulator/controller.js +32 -29
- package/lib/emulator/databaseEmulator.js +1 -2
- package/lib/emulator/dataconnect/pgliteServer.js +48 -104
- package/lib/emulator/dataconnectEmulator.js +6 -9
- package/lib/emulator/download.js +2 -3
- package/lib/emulator/downloadableEmulatorInfo.json +31 -31
- package/lib/emulator/downloadableEmulators.js +49 -24
- package/lib/emulator/emulatorLogger.js +19 -4
- package/lib/emulator/env.js +6 -8
- package/lib/emulator/eventarcEmulator.js +2 -3
- package/lib/emulator/eventarcEmulatorUtils.js +3 -6
- package/lib/emulator/extensions/postinstall.js +1 -2
- package/lib/emulator/extensions/validation.js +4 -7
- package/lib/emulator/extensionsEmulator.js +6 -9
- package/lib/emulator/functionsEmulator.js +89 -46
- package/lib/emulator/functionsEmulatorRuntime.js +1 -1
- package/lib/emulator/functionsEmulatorShared.js +30 -30
- package/lib/emulator/functionsEmulatorShell.js +4 -6
- package/lib/emulator/functionsEmulatorUtils.js +8 -9
- package/lib/emulator/functionsRuntimeWorker.js +18 -9
- package/lib/emulator/hub.js +41 -34
- package/lib/emulator/hubClient.js +1 -1
- package/lib/emulator/initEmulators.js +2 -3
- package/lib/emulator/loggingEmulator.js +2 -2
- package/lib/emulator/portUtils.js +4 -5
- package/lib/emulator/registry.js +10 -4
- package/lib/emulator/shared/request.js +1 -2
- package/lib/emulator/storage/apis/firebase.js +16 -20
- package/lib/emulator/storage/apis/gcloud.js +6 -9
- package/lib/emulator/storage/apis/shared.js +1 -2
- package/lib/emulator/storage/crc.js +2 -3
- package/lib/emulator/storage/files.js +18 -41
- package/lib/emulator/storage/metadata.js +10 -4
- package/lib/emulator/storage/multipart.js +1 -2
- package/lib/emulator/storage/rfc.js +1 -2
- package/lib/emulator/storage/rules/config.js +1 -2
- package/lib/emulator/storage/rules/manager.js +3 -5
- package/lib/emulator/storage/rules/runtime.js +15 -13
- package/lib/emulator/storage/rules/types.js +2 -2
- package/lib/emulator/storage/rules/utils.js +5 -6
- package/lib/emulator/storage/server.js +1 -2
- package/lib/emulator/storage/upload.js +3 -4
- package/lib/emulator/taskQueue.js +11 -4
- package/lib/emulator/tasksEmulator.js +11 -12
- package/lib/emulator/types.js +6 -6
- package/lib/emulator/ui.js +6 -1
- package/lib/ensureApiEnabled.js +7 -9
- package/lib/env.js +2 -3
- package/lib/error.js +11 -13
- package/lib/errorOut.js +1 -2
- package/lib/experiments.js +15 -18
- package/lib/extensions/askUserForEventsConfig.js +12 -13
- package/lib/extensions/askUserForParam.js +11 -12
- package/lib/extensions/change-log.js +4 -5
- package/lib/extensions/checkProjectBilling.js +1 -2
- package/lib/extensions/diagnose.js +1 -2
- package/lib/extensions/displayExtensionInfo.js +25 -32
- package/lib/extensions/emulator/optionsHelper.js +6 -8
- package/lib/extensions/emulator/specHelper.js +15 -16
- package/lib/extensions/emulator/triggerHelper.js +3 -5
- package/lib/extensions/etags.js +2 -3
- package/lib/extensions/export.js +7 -9
- package/lib/extensions/extensionsApi.js +23 -29
- package/lib/extensions/extensionsHelper.js +52 -80
- package/lib/extensions/listExtensions.js +3 -5
- package/lib/extensions/localHelper.js +5 -5
- package/lib/extensions/manifest.js +15 -16
- package/lib/extensions/metricsUtils.js +3 -4
- package/lib/extensions/paramHelper.js +21 -18
- package/lib/extensions/provisioningHelper.js +17 -21
- package/lib/extensions/publishHelpers.js +1 -2
- package/lib/extensions/publisherApi.js +11 -13
- package/lib/extensions/refs.js +6 -7
- package/lib/extensions/runtimes/common.js +18 -19
- package/lib/extensions/runtimes/node.js +5 -6
- package/lib/extensions/secretsUtils.js +8 -8
- package/lib/extensions/tos.js +7 -8
- package/lib/extensions/types.js +3 -3
- package/lib/extensions/updateHelper.js +6 -7
- package/lib/extensions/utils.js +6 -8
- package/lib/extensions/versionHelper.js +1 -2
- package/lib/extensions/warnings.js +6 -8
- package/lib/fetchMOTD.js +1 -2
- package/lib/fetchWebSetup.js +3 -4
- package/lib/filterTargets.js +1 -2
- package/lib/firebaseConfigValidate.js +2 -3
- package/lib/firestore/api-sort.js +8 -9
- package/lib/firestore/api-types.js +15 -15
- package/lib/firestore/api.js +15 -13
- package/lib/firestore/backupUtils.js +3 -3
- package/lib/firestore/checkDatabaseType.js +1 -2
- package/lib/firestore/delete.js +1 -2
- package/lib/firestore/encodeFirestoreValue.js +1 -2
- package/lib/firestore/fsConfig.js +1 -2
- package/lib/firestore/options.js +1 -1
- package/lib/firestore/util.js +5 -6
- package/lib/firestore/validator.js +4 -5
- package/lib/frameworks/angular/index.js +14 -15
- package/lib/frameworks/angular/utils.js +21 -23
- package/lib/frameworks/astro/index.js +7 -7
- package/lib/frameworks/astro/utils.js +4 -6
- package/lib/frameworks/compose/discover/filesystem.js +3 -3
- package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
- package/lib/frameworks/compose/discover/index.js +1 -2
- package/lib/frameworks/compose/discover/runtime/node.js +8 -11
- package/lib/frameworks/compose/driver/docker.js +3 -5
- package/lib/frameworks/compose/driver/hooks.js +2 -2
- package/lib/frameworks/compose/driver/index.js +2 -2
- package/lib/frameworks/compose/driver/local.js +2 -3
- package/lib/frameworks/compose/index.js +5 -7
- package/lib/frameworks/constants.js +3 -3
- package/lib/frameworks/express/index.js +7 -8
- package/lib/frameworks/flutter/index.js +6 -7
- package/lib/frameworks/flutter/utils.js +4 -5
- package/lib/frameworks/index.js +21 -22
- package/lib/frameworks/next/constants.js +5 -2
- package/lib/frameworks/next/index.js +34 -32
- package/lib/frameworks/next/utils.js +40 -39
- package/lib/frameworks/nuxt/index.js +9 -9
- package/lib/frameworks/nuxt/utils.js +4 -6
- package/lib/frameworks/nuxt2/index.js +7 -7
- package/lib/frameworks/sveltekit/index.js +6 -8
- package/lib/frameworks/utils.js +26 -24
- package/lib/frameworks/vite/index.js +8 -9
- package/lib/fsAsync.js +1 -2
- package/lib/fsutils.js +5 -6
- package/lib/functional.js +11 -11
- package/lib/functions/artifacts.js +25 -22
- package/lib/functions/ensureTargeted.js +1 -2
- package/lib/functions/env.js +13 -14
- package/lib/functions/functionslog.js +2 -3
- package/lib/functions/projectConfig.js +29 -33
- package/lib/functions/python.js +10 -4
- package/lib/functions/secrets.js +32 -18
- package/lib/functionsConfig.js +14 -14
- package/lib/functionsConfigClone.js +1 -2
- package/lib/functionsShellCommandAction.js +2 -3
- package/lib/gcp/apphosting.js +43 -28
- package/lib/gcp/apptesting.js +2 -2
- package/lib/gcp/artifactregistry.js +5 -5
- package/lib/gcp/auth.js +11 -13
- package/lib/gcp/cloudbilling.js +4 -5
- package/lib/gcp/cloudbuild.js +10 -11
- package/lib/gcp/cloudfunctions.js +61 -45
- package/lib/gcp/cloudfunctionsv2.js +81 -43
- package/lib/gcp/cloudlogging.js +2 -4
- package/lib/gcp/cloudmonitoring.js +7 -7
- package/lib/gcp/cloudscheduler.js +12 -14
- package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
- package/lib/gcp/cloudsql/connect.js +14 -9
- package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
- package/lib/gcp/cloudsql/interactive.js +2 -3
- package/lib/gcp/cloudsql/permissions.js +8 -8
- package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
- package/lib/gcp/cloudtasks.js +19 -18
- package/lib/gcp/computeEngine.js +1 -2
- package/lib/gcp/devConnect.js +32 -29
- package/lib/gcp/docker.js +2 -4
- package/lib/gcp/eventarc.js +5 -5
- package/lib/gcp/firedata.js +4 -4
- package/lib/gcp/firestore.js +16 -16
- package/lib/gcp/iam.js +11 -12
- package/lib/gcp/identityPlatform.js +4 -5
- package/lib/gcp/k8s.js +1 -2
- package/lib/gcp/location.js +2 -2
- package/lib/gcp/proto.js +10 -11
- package/lib/gcp/pubsub.js +4 -5
- package/lib/gcp/resourceManager.js +5 -5
- package/lib/gcp/rules.js +13 -14
- package/lib/gcp/run.js +24 -31
- package/lib/gcp/runv2.js +39 -27
- package/lib/gcp/secretManager.js +60 -39
- package/lib/gcp/serviceusage.js +8 -4
- package/lib/gcp/storage.js +22 -20
- package/lib/gemini/fdcExperience.js +5 -5
- package/lib/getDefaultDatabaseInstance.js +2 -4
- package/lib/getDefaultHostingSite.js +3 -4
- package/lib/getProjectNumber.js +1 -2
- package/lib/hosting/api.js +32 -36
- package/lib/hosting/cloudRunProxy.js +2 -3
- package/lib/hosting/config.js +17 -17
- package/lib/hosting/expireUtils.js +3 -3
- package/lib/hosting/functionsProxy.js +1 -2
- package/lib/hosting/implicitInit.js +1 -2
- package/lib/hosting/initMiddleware.js +1 -2
- package/lib/hosting/interactive.js +1 -2
- package/lib/hosting/proxy.js +3 -5
- package/lib/hosting/runTags.js +8 -11
- package/lib/init/features/account.js +1 -2
- package/lib/init/features/ailogic/index.js +3 -5
- package/lib/init/features/ailogic/utils.js +6 -8
- package/lib/init/features/aitools/claude.js +1 -2
- package/lib/init/features/aitools/cursor.js +1 -2
- package/lib/init/features/aitools/gemini.js +1 -1
- package/lib/init/features/aitools/promptUpdater.js +10 -12
- package/lib/init/features/aitools.js +1 -2
- package/lib/init/features/apphosting.js +3 -4
- package/lib/init/features/apptesting/index.js +9 -9
- package/lib/init/features/database.js +4 -5
- package/lib/init/features/dataconnect/create_app.js +3 -4
- package/lib/init/features/dataconnect/index.js +25 -22
- package/lib/init/features/dataconnect/resolver.js +6 -10
- package/lib/init/features/dataconnect/sdk.js +31 -24
- package/lib/init/features/emulators.js +7 -6
- package/lib/init/features/extensions/index.js +3 -5
- package/lib/init/features/firestore/index.js +7 -9
- package/lib/init/features/firestore/indexes.js +2 -2
- package/lib/init/features/firestore/rules.js +3 -3
- package/lib/init/features/functions/index.js +3 -5
- package/lib/init/features/functions/javascript.js +1 -2
- package/lib/init/features/functions/npm-dependencies.js +1 -2
- package/lib/init/features/functions/python.js +1 -2
- package/lib/init/features/functions/typescript.js +1 -2
- package/lib/init/features/genkit/index.js +44 -18
- package/lib/init/features/hosting/github.js +6 -8
- package/lib/init/features/hosting/index.js +10 -13
- package/lib/init/features/project.js +4 -7
- package/lib/init/features/remoteconfig.js +1 -2
- package/lib/init/features/storage.js +3 -5
- package/lib/init/index.js +4 -7
- package/lib/init/spawn.js +7 -9
- package/lib/listFiles.js +1 -2
- package/lib/loadCJSON.js +1 -2
- package/lib/localFunction.js +14 -15
- package/lib/logError.js +1 -2
- package/lib/logger.js +7 -7
- package/lib/management/apps.js +22 -22
- package/lib/management/database.js +11 -12
- package/lib/management/projects.js +57 -56
- package/lib/management/provisioning/errorHandler.js +3 -5
- package/lib/management/provisioning/provision.js +15 -9
- package/lib/management/studio.js +2 -3
- package/lib/mcp/errors.js +4 -4
- package/lib/mcp/index.js +47 -45
- package/lib/mcp/prompt.js +1 -2
- package/lib/mcp/prompts/core/consult.js +2 -3
- package/lib/mcp/prompts/crashlytics/connect.js +15 -122
- package/lib/mcp/prompts/dataconnect/schema.js +3 -3
- package/lib/mcp/prompts/index.js +8 -10
- package/lib/mcp/resource.js +3 -15
- package/lib/mcp/resources/guides/app_id.js +39 -0
- package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
- package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
- package/lib/mcp/resources/index.js +11 -3
- package/lib/mcp/tool.js +3 -15
- package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
- package/lib/mcp/tools/apphosting/list_backends.js +1 -1
- package/lib/mcp/tools/auth/get_users.js +5 -16
- package/lib/mcp/tools/core/create_android_sha.js +4 -1
- package/lib/mcp/tools/core/get_environment.js +7 -4
- package/lib/mcp/tools/core/get_sdk_config.js +4 -5
- package/lib/mcp/tools/core/get_security_rules.js +1 -2
- package/lib/mcp/tools/core/init.js +2 -2
- package/lib/mcp/tools/core/logout.js +1 -1
- package/lib/mcp/tools/core/read_resources.js +2 -2
- package/lib/mcp/tools/core/validate_security_rules.js +1 -2
- package/lib/mcp/tools/crashlytics/events.js +43 -19
- package/lib/mcp/tools/crashlytics/index.js +1 -6
- package/lib/mcp/tools/crashlytics/issues.js +33 -12
- package/lib/mcp/tools/crashlytics/reports.js +66 -117
- package/lib/mcp/tools/dataconnect/list_services.js +2 -3
- package/lib/mcp/tools/firestore/converter.js +3 -5
- package/lib/mcp/tools/firestore/delete_document.js +1 -1
- package/lib/mcp/tools/functions/get_logs.js +14 -12
- package/lib/mcp/tools/functions/list_functions.js +1 -1
- package/lib/mcp/tools/index.js +67 -50
- package/lib/mcp/util/apptesting/availability.js +1 -2
- package/lib/mcp/util/availability.js +1 -2
- package/lib/mcp/util/crashlytics/availability.js +1 -2
- package/lib/mcp/util/dataconnect/compile.js +7 -6
- package/lib/mcp/util/dataconnect/converter.js +7 -10
- package/lib/mcp/util/dataconnect/emulator.js +1 -2
- package/lib/mcp/util.js +9 -11
- package/lib/messaging/sendMessage.js +1 -2
- package/lib/metaprogramming.js +1 -2
- package/lib/operation-poller.js +2 -2
- package/lib/profileReport.js +6 -6
- package/lib/profiler.js +1 -2
- package/lib/projectPath.js +1 -2
- package/lib/projectUtils.js +5 -6
- package/lib/prompt.js +22 -13
- package/lib/rc.js +5 -7
- package/lib/remoteconfig/deleteExperiment.js +1 -2
- package/lib/remoteconfig/deleteRollout.js +1 -2
- package/lib/remoteconfig/get.js +2 -3
- package/lib/remoteconfig/getExperiment.js +2 -2
- package/lib/remoteconfig/getRollout.js +2 -2
- package/lib/remoteconfig/interfaces.js +1 -1
- package/lib/remoteconfig/listExperiments.js +2 -2
- package/lib/remoteconfig/listRollouts.js +2 -2
- package/lib/remoteconfig/publish.js +1 -2
- package/lib/remoteconfig/rollback.js +1 -2
- package/lib/remoteconfig/versionslist.js +1 -2
- package/lib/requireAuth.js +4 -6
- package/lib/requireConfig.js +5 -8
- package/lib/requireDatabaseInstance.js +2 -2
- package/lib/requireHostingSite.js +1 -2
- package/lib/requireInteractive.js +1 -1
- package/lib/requirePermissions.js +1 -2
- package/lib/requireTosAcceptance.js +1 -2
- package/lib/responseToError.js +1 -2
- package/lib/rtdb.js +2 -3
- package/lib/rulesDeploy.js +3 -4
- package/lib/serve/functions.js +9 -1
- package/lib/serve/hosting.js +4 -5
- package/lib/serve/index.js +1 -2
- package/lib/shortenUrl.js +1 -2
- package/lib/templates.js +3 -4
- package/lib/throttler/throttler.js +3 -3
- package/lib/timeout.js +2 -3
- package/lib/track.js +23 -14
- package/lib/tsconfig.publish.tsbuildinfo +1 -0
- package/lib/unzip.js +2 -3
- package/lib/utils.js +62 -63
- package/lib/vsCodeUtils.js +2 -3
- package/package.json +6 -6
- package/templates/extensions/typescript/index.ts +1 -1
- package/templates/extensions/typescript/package.lint.json +1 -1
- package/templates/extensions/typescript/package.nolint.json +1 -1
- 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.
|
|
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 = (
|
|
56
|
+
const version = (0, utils_1.findDependency)("vite", {
|
|
54
57
|
cwd: dir,
|
|
55
58
|
depth,
|
|
56
59
|
omitDev: false,
|
|
57
|
-
})
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 (
|
|
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 =
|
|
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;
|
package/lib/functions/env.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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(
|
|
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 =
|
|
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:
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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 =
|
|
57
|
+
const commonConfig = { codebase, ...rest };
|
|
60
58
|
if (source) {
|
|
61
|
-
return
|
|
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
|
|
71
|
-
|
|
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 ('${
|
|
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
|
|
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;
|