Skip to content

Conversation

@yuchenshi
Copy link
Member

Description

options.json has always been unset since at least 5 years ago but the typing
in options.ts says that it exists. This led to two kinds of mistakes.

  1. Using if (options.json) in command handlers. This effectively creates a
    dead branch. I've tried my best to remove those -- should be noop.
  2. Providing json: false when Options are required. It's a not a
    noop strictly-speaking but the tests should still pass since it is not
    actually accessed in commands. (These are mostly found in tests.)

Alternatives considered: Setting options.json for real seems appealing but
branching on options.json is almost always a mistake. Unless in some obscure
use cases (not found in the code base), it is best to let the global handling
deal with --json the flag.

Things taken care of by global handling:

  1. Suppressing normal output:
    if (getInheritedOption(options, "json")) {
    options.nonInteractive = true;
    } else if (!options.isMCP) {
    useConsoleLoggers();
    }
  2. Serializing the return value to JSON:
    if (getInheritedOption(options, "json")) {

Note that the last step wraps the return value in a wrapper object:
{status: "success", result: ...}. The dead branches I've removed all
failed to account for this. So if we had made options.json a real boolean,
it'd cause quite a few breaking changes unless we fix those one by one.

Scenarios Tested

Existing unit tests. I've also logged options.json in commands and made sure
it is always unset regardless of flags.

Sample Commands

N/A

Created using spr 1.3.6-beta.1
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @yuchenshi, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request resolves a long-standing inconsistency in the Options interface where the json property was typed as a boolean but was never actually set by commands. This led to two main issues: dead code branches that checked if (options.json) and incorrect assumptions in tests providing json: false. The changes remove the json property from the BaseOptions interface, add a clarifying JSDoc comment to guide future development, and refactor all affected command handlers to remove explicit options.json checks. This ensures that JSON output is handled consistently and globally via the --json flag, simplifying command logic and preventing future misinterpretations of the json option.

Highlights

  • Typing Correction: The json property has been removed from the BaseOptions interface and defaultOptions in options.ts, correcting a long-standing misleading type definition.
  • Code Simplification: All conditional checks for options.json within command handlers have been removed, streamlining the code and eliminating dead branches.
  • Consistent JSON Output Handling: The system now exclusively relies on the global --json flag handling, ensuring that commands consistently produce JSON output when requested, without requiring explicit checks in individual command logic.
  • Non-Interactive Mode Enforcement: When the --json flag is detected, options.interactive is explicitly set to false in command.ts, reinforcing non-interactive behavior for JSON output.
  • Test Refinements: json: false has been removed from various test option configurations, aligning tests with the corrected understanding that options.json is not directly set by commands.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This is an excellent pull request that addresses a long-standing issue with the misleading options.json typing. The changes are thorough and systematically remove the incorrect usage pattern across the codebase, replacing it with the intended framework-level handling of JSON output. The update to options.ts to explicitly type json as undefined and include a detailed comment explaining the correct approach is a fantastic improvement for future maintainability. The removal of dead and buggy code branches in various command files simplifies the logic and improves correctness. Overall, this is a high-quality cleanup and refactoring effort.

projectNumber: "",
projectRoot: "",
account: "",
json: true,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The VSCE right now doesn't call Firestore commands. So I believe this should be a noop.

const backups: Backup[] = listBackupsResponse.backups || [];

if (options.json) {
logger.info(JSON.stringify(listBackupsResponse, undefined, 2));
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This branch isn't consistent with the return backups. I believe the intention was to print listBackupsResponse when --json is used. But fulfilling that intention will cause a breaking change. So I kept it WAI (working as implemented) and left a TODO instead

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That was indeed the intention. It's possible that I didn't notice this when this was implemented the first time... sorry.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No problem. The next major (breaking) release of the CLI should be coming up soon and feel free to make it return listBackupsResponse by then

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

@joehan joehan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me once you remove the now unused logger imports that are making the linter mad.

@joehan joehan requested a review from rwhogg October 7, 2025 19:07
@joehan
Copy link
Member

joehan commented Oct 7, 2025

Created using spr 1.3.6-beta.1
@yuchenshi yuchenshi enabled auto-merge (squash) October 7, 2025 21:57
Created using spr 1.3.6-beta.1
Created using spr 1.3.6-beta.1
@yuchenshi yuchenshi disabled auto-merge October 13, 2025 19:32
Created using spr 1.3.6-beta.1
@yuchenshi yuchenshi enabled auto-merge (squash) October 13, 2025 19:34
Created using spr 1.3.6-beta.1
@yuchenshi yuchenshi merged commit 1157731 into master Oct 13, 2025
71 of 74 checks passed
@yuchenshi yuchenshi deleted the spr/yuchenshi/fix-misleading-typing-for-optionsjson branch October 13, 2025 20:35
@github-project-automation github-project-automation bot moved this from Approved [PR] to Done in [Cloud] Extensions + Functions Oct 13, 2025
joehan pushed a commit that referenced this pull request Oct 14, 2025
* Remove overrides that diverge the test configuration from the build configuration. (#9300)

Co-authored-by: Jamie Rothfeder <rothbutter@google.com>

* Fix misleading typing for options.json. (#9275)

* feat(dataconnect): Add confirmation for Gemini schema generation (#9282)

* feat(dataconnect): add confirmation for Gemini schema generation

Instead of directly asking for an app description to generate a schema with Gemini, this change first asks the user to confirm if they want to use Gemini.

If the user confirms, it then prompts for the app description with a default value of "an app for ${setup.projectId}".

* prompts

* changelog

* m

* feedback

* typo

* metrics

* Update index.ts

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

---------

Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
joehan added a commit that referenced this pull request Dec 10, 2025
* Update next to match master (#9313)

* Remove overrides that diverge the test configuration from the build configuration. (#9300)

Co-authored-by: Jamie Rothfeder <rothbutter@google.com>

* Fix misleading typing for options.json. (#9275)

* feat(dataconnect): Add confirmation for Gemini schema generation (#9282)

* feat(dataconnect): add confirmation for Gemini schema generation

Instead of directly asking for an app description to generate a schema with Gemini, this change first asks the user to confirm if they want to use Gemini.

If the user confirms, it then prompts for the app description with a default value of "an app for ${setup.projectId}".

* prompts

* changelog

* m

* feedback

* typo

* metrics

* Update index.ts

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

---------

Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: clean up monkey patching in functions emulator runtime (#9402)

1. Removed `functions.config()` Polyfill
Removed initializeRuntimeConfig() from `src/emulator/functionsEmulatorRuntime.ts`. This function manually read `.runtimeconfig.json` and set `CLOUD_RUNTIME_CONFIG` env var to polyfill the logic for old clients of the Functions SDK. Functions SDK has included this feature for more than 5+ years now.

2. Removed Callable Auth Monkey Patches
Removed wrapCallableHandler from src/emulator/functionsEmulatorRuntime.ts. that handled manual auth header swapping logic in src/emulator/functionsEmulator.ts. We now rely on the SDK's built-in skipTokenVerification feature shipped since 3.16.0.

3. Bumped Minimum SDK Version
Increased minimum required firebase-functions version from 3.15.1 to 3.16.0 (launched 4+ years ago) in `src/emulator/functionsEmulatorRuntime.ts`. This ensures users have an SDK that supports skipTokenVerification and likely handles .runtimeconfig.json loading correctly in emulation.

* BREAKING: hide functions:config:* commands by default (#9340)

We'll gate all mutating functions:config:* commands behind the new `legacyRuntimeConfigCommands` experiment. We'll keep functions:config:{get,export} available for inspection.

Includes some minor refactoring to align deprecation message across all surfaces.

```shell
$ firebase functions:config:set FOO=bar

Error: DEPRECATION NOTICE: Action required before March 2026

The functions.config() API and the Cloud Runtime Config service are deprecated. Deploys that rely on functions.config() will fail once Runtime Config shuts down in March 2026.

The legacy functions:config:* CLI commands are deprecated and will be removed before March 2026.

Migrate configuration to the Firebase Functions params APIs:

  import { defineJsonSecret } from "firebase-functions/params";

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

To convert existing runtime config values, try the interactive migration command:

  firebase functions:config:export

Learn more: https://firebase.google.com/docs/functions/config-env#migrate-config

To run this legacy command temporarily, run the following command and try again:

  firebase experiments:enable legacyRuntimeConfigCommands
```

* BREAKING: Rewrite functions:config:export command (#9341)

Target the new defineJsonSecret API as migration target for functions.config() usage. The new API is a simpler migration target for existing functions.config() use cases.

Example flow:

```shell
$ firebase functions:config:export
i  This command retrieves your Runtime Config values (accessed via functions.config()) and exports them as a Secret Manager secret.

i  Fetching your existing functions.config() from danielylee-90... ✔  Fetched your existing functions.config().

i  Configuration to be exported:
⚠  This may contain sensitive data. Do not share this output.

{
   <CONFIG>
}

✔ What would you like to name the new secret for your configuration? RUNTIME_CONFIG

✔  Created new secret version projects/XXX/secrets/RUNTIME_CONFIG/versions/1

i  To complete the migration, update your code:

  // Before:
  const functions = require('firebase-functions');

  exports.myFunction = functions.https.onRequest((req, res) => {
    const apiKey = functions.config().service.key;
    // ...
  });

  // After:
  const functions = require('firebase-functions');
  const { defineJsonSecret } = require('firebase-functions/params');

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })  // Bind secret here
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

i  Note: defineJsonSecret requires firebase-functions v6.6.0 or later. Update your package.json if needed. i  Then deploy your functions:
  firebase deploy --only functions
```

* feat(firestore): return listBackupsResponse from firestore:backups:list --json (#9392)

The `firestore:backups:list --json` command now returns the full `listBackupsResponse` object instead of just the `backups` array. This provides more information to the user, including a list of unreachable locations.

* Break java (#9451)

* error out java version below 21

* error out java version below 21

* error out java version below 21

* update formatting

* Remove duplicate error message

* Update CHANGELOG.md to include breaking change

* update CI to java 21

* Add setup-java action to integration

---------

Co-authored-by: Joe Hanley <joehanley@google.com>

* Removing support for .bolt rules (#9339)

* Removing support for .bolt rules

* Changelog

* Merging in master

* Stop following symlinks when archiving directories (#9284)

* Stop following symlinks when archiving directories

* Update exfil PR (#9289)

* Fix filter for symlinks

* Fine. Preserve ordering at the cost of readability

* Format

* Progress on new approach

* Remove unused tar path, fix up zip path to ignore symlinks, add test

* More tests

* Actually good for real this time
;

---------

Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>

* Remove --open-sesame and --close-sesame (#9532)

* Lazy load commands (#9519)

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.
- Added `scripts/benchmark_load.ts` to measure command load time.

* Fix help command as well

* Get rid of flawed benchmark test;

* Clean up unused vars

* Typeguards for style points

* Move typeguard

* Better types

* CHANGELOG

* More type cleanup

* No anys

* Fixing getCommand

* Bump timeout?

* 20s is better

* Removing extra timing code

* format

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: Enforce strict timeout validation for functions (#9540)

* feat: enforce strict timeout validation for functions

* nit: run formatter

* docs: add changelog entry for timeout validation

* refactor: optimize timeout validation logic

* nit: add "breaking" prefix in changelog.

* bug: remove redundant timeout validation.

* feat: remove obsolete parseTriggers fallback (#9521)

* feat: remove obsolete parseTriggers fallback

* nit: clean up conditional paths

* feat(dataconnect): Update dataconnect:* commands to use flags for --service & --location (#9312)

* Update Firestore Emulator to v1.20.2 (#9565)

* Bump FS emulator version to 1.20.2

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Joe Hanley <joehanley@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Fix test broken by merge conflict

* format

* Update version in server.json

* Implement a `firebase init dataconnect:resolver` command. (#9493)

* Implement a `firebase init dataconnect:schema` command.

* Gate behind experiment flag and a few other fixes.

* Add unit tests.

* Fix unit tests.

* Rename command to `firebase init dataconnect:resolver`.

* Commit missed file.

* Fix default location in Cloud Run URL.

* Don't prompt for Cloud Run URL.

* Remove no-op line.

* Gate command at init level.

* [VS Code] Fix rendering of generate query code lens (#9588)

* Fix package-lock.json

* Fix missing auth:import and appdistribution:testers:remove commands (#9590)

* Fix missing auth:import and appdistribution:testers:remove commands

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Dont pass undefined to getCommand (#9596)

* Fix --help (#9597)

* Fix --help

* handle firebase --help

* bump fdc emulator to v3 (#9602)

* FDC V3

* FDC V3

* merging

---------

Co-authored-by: oleina <oleina@google.com>
Co-authored-by: Joe Hanley <joehanley@google.com>

* lint

---------

Co-authored-by: Fred Zhang <fredzqm@google.com>
Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Daniel Lee <danielylee@google.com>
Co-authored-by: harshyyy21 <harshoza24@gmail.com>
Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Rosalyn Tan <rosalyntan@google.com>
Co-authored-by: Anthony Oleinik <48811365+antholeole@users.noreply.github.com>
Co-authored-by: oleina <oleina@google.com>
joehan added a commit that referenced this pull request Dec 15, 2025
)

* Update next to match master (#9313)

* Remove overrides that diverge the test configuration from the build configuration. (#9300)

Co-authored-by: Jamie Rothfeder <rothbutter@google.com>

* Fix misleading typing for options.json. (#9275)

* feat(dataconnect): Add confirmation for Gemini schema generation (#9282)

* feat(dataconnect): add confirmation for Gemini schema generation

Instead of directly asking for an app description to generate a schema with Gemini, this change first asks the user to confirm if they want to use Gemini.

If the user confirms, it then prompts for the app description with a default value of "an app for ${setup.projectId}".

* prompts

* changelog

* m

* feedback

* typo

* metrics

* Update index.ts

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

---------

Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: clean up monkey patching in functions emulator runtime (#9402)

1. Removed `functions.config()` Polyfill
Removed initializeRuntimeConfig() from `src/emulator/functionsEmulatorRuntime.ts`. This function manually read `.runtimeconfig.json` and set `CLOUD_RUNTIME_CONFIG` env var to polyfill the logic for old clients of the Functions SDK. Functions SDK has included this feature for more than 5+ years now.

2. Removed Callable Auth Monkey Patches
Removed wrapCallableHandler from src/emulator/functionsEmulatorRuntime.ts. that handled manual auth header swapping logic in src/emulator/functionsEmulator.ts. We now rely on the SDK's built-in skipTokenVerification feature shipped since 3.16.0.

3. Bumped Minimum SDK Version
Increased minimum required firebase-functions version from 3.15.1 to 3.16.0 (launched 4+ years ago) in `src/emulator/functionsEmulatorRuntime.ts`. This ensures users have an SDK that supports skipTokenVerification and likely handles .runtimeconfig.json loading correctly in emulation.

* BREAKING: hide functions:config:* commands by default (#9340)

We'll gate all mutating functions:config:* commands behind the new `legacyRuntimeConfigCommands` experiment. We'll keep functions:config:{get,export} available for inspection.

Includes some minor refactoring to align deprecation message across all surfaces.

```shell
$ firebase functions:config:set FOO=bar

Error: DEPRECATION NOTICE: Action required before March 2026

The functions.config() API and the Cloud Runtime Config service are deprecated. Deploys that rely on functions.config() will fail once Runtime Config shuts down in March 2026.

The legacy functions:config:* CLI commands are deprecated and will be removed before March 2026.

Migrate configuration to the Firebase Functions params APIs:

  import { defineJsonSecret } from "firebase-functions/params";

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

To convert existing runtime config values, try the interactive migration command:

  firebase functions:config:export

Learn more: https://firebase.google.com/docs/functions/config-env#migrate-config

To run this legacy command temporarily, run the following command and try again:

  firebase experiments:enable legacyRuntimeConfigCommands
```

* BREAKING: Rewrite functions:config:export command (#9341)

Target the new defineJsonSecret API as migration target for functions.config() usage. The new API is a simpler migration target for existing functions.config() use cases.

Example flow:

```shell
$ firebase functions:config:export
i  This command retrieves your Runtime Config values (accessed via functions.config()) and exports them as a Secret Manager secret.

i  Fetching your existing functions.config() from danielylee-90... ✔  Fetched your existing functions.config().

i  Configuration to be exported:
⚠  This may contain sensitive data. Do not share this output.

{
   <CONFIG>
}

✔ What would you like to name the new secret for your configuration? RUNTIME_CONFIG

✔  Created new secret version projects/XXX/secrets/RUNTIME_CONFIG/versions/1

i  To complete the migration, update your code:

  // Before:
  const functions = require('firebase-functions');

  exports.myFunction = functions.https.onRequest((req, res) => {
    const apiKey = functions.config().service.key;
    // ...
  });

  // After:
  const functions = require('firebase-functions');
  const { defineJsonSecret } = require('firebase-functions/params');

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })  // Bind secret here
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

i  Note: defineJsonSecret requires firebase-functions v6.6.0 or later. Update your package.json if needed. i  Then deploy your functions:
  firebase deploy --only functions
```

* feat(firestore): return listBackupsResponse from firestore:backups:list --json (#9392)

The `firestore:backups:list --json` command now returns the full `listBackupsResponse` object instead of just the `backups` array. This provides more information to the user, including a list of unreachable locations.

* Break java (#9451)

* error out java version below 21

* error out java version below 21

* error out java version below 21

* update formatting

* Remove duplicate error message

* Update CHANGELOG.md to include breaking change

* update CI to java 21

* Add setup-java action to integration

---------

Co-authored-by: Joe Hanley <joehanley@google.com>

* Removing support for .bolt rules (#9339)

* Removing support for .bolt rules

* Changelog

* Merging in master

* Stop following symlinks when archiving directories (#9284)

* Stop following symlinks when archiving directories

* Update exfil PR (#9289)

* Fix filter for symlinks

* Fine. Preserve ordering at the cost of readability

* Format

* Progress on new approach

* Remove unused tar path, fix up zip path to ignore symlinks, add test

* More tests

* Actually good for real this time
;

---------

Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>

* Remove --open-sesame and --close-sesame (#9532)

* Lazy load commands (#9519)

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.
- Added `scripts/benchmark_load.ts` to measure command load time.

* Fix help command as well

* Get rid of flawed benchmark test;

* Clean up unused vars

* Typeguards for style points

* Move typeguard

* Better types

* CHANGELOG

* More type cleanup

* No anys

* Fixing getCommand

* Bump timeout?

* 20s is better

* Removing extra timing code

* format

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: Enforce strict timeout validation for functions (#9540)

* feat: enforce strict timeout validation for functions

* nit: run formatter

* docs: add changelog entry for timeout validation

* refactor: optimize timeout validation logic

* nit: add "breaking" prefix in changelog.

* bug: remove redundant timeout validation.

* feat: remove obsolete parseTriggers fallback (#9521)

* feat: remove obsolete parseTriggers fallback

* nit: clean up conditional paths

* feat(dataconnect): Update dataconnect:* commands to use flags for --service & --location (#9312)

* Update Firestore Emulator to v1.20.2 (#9565)

* Bump FS emulator version to 1.20.2

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Joe Hanley <joehanley@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Fix test broken by merge conflict

* format

* Update version in server.json

* Performance improvements and new billing info for get_environment

* Implement a `firebase init dataconnect:resolver` command. (#9493)

* Implement a `firebase init dataconnect:schema` command.

* Gate behind experiment flag and a few other fixes.

* Add unit tests.

* Fix unit tests.

* Rename command to `firebase init dataconnect:resolver`.

* Commit missed file.

* Fix default location in Cloud Run URL.

* Don't prompt for Cloud Run URL.

* Remove no-op line.

* Gate command at init level.

* [VS Code] Fix rendering of generate query code lens (#9588)

* fix test

* Fix usage in mocks too

* Fix package-lock.json

* Fix missing auth:import and appdistribution:testers:remove commands (#9590)

* Fix missing auth:import and appdistribution:testers:remove commands

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* lint

* Dont pass undefined to getCommand (#9596)

* Fix --help (#9597)

* Fix --help

* handle firebase --help

* bump fdc emulator to v3 (#9602)

* FDC V3

* FDC V3

* merging

---------

Co-authored-by: oleina <oleina@google.com>
Co-authored-by: Joe Hanley <joehanley@google.com>

* lint

* Merging

* Get rid of uneeded intermediate variable

* Fix new test conflict

* Addressing flaky tests

---------

Co-authored-by: Fred Zhang <fredzqm@google.com>
Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Daniel Lee <danielylee@google.com>
Co-authored-by: harshyyy21 <harshoza24@gmail.com>
Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Rosalyn Tan <rosalyntan@google.com>
Co-authored-by: Anthony Oleinik <48811365+antholeole@users.noreply.github.com>
Co-authored-by: oleina <oleina@google.com>
andrewbrook pushed a commit that referenced this pull request Dec 16, 2025
* Update next to match master (#9313)

* Remove overrides that diverge the test configuration from the build configuration. (#9300)

Co-authored-by: Jamie Rothfeder <rothbutter@google.com>

* Fix misleading typing for options.json. (#9275)

* feat(dataconnect): Add confirmation for Gemini schema generation (#9282)

* feat(dataconnect): add confirmation for Gemini schema generation

Instead of directly asking for an app description to generate a schema with Gemini, this change first asks the user to confirm if they want to use Gemini.

If the user confirms, it then prompts for the app description with a default value of "an app for ${setup.projectId}".

* prompts

* changelog

* m

* feedback

* typo

* metrics

* Update index.ts

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

---------

Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: clean up monkey patching in functions emulator runtime (#9402)

1. Removed `functions.config()` Polyfill
Removed initializeRuntimeConfig() from `src/emulator/functionsEmulatorRuntime.ts`. This function manually read `.runtimeconfig.json` and set `CLOUD_RUNTIME_CONFIG` env var to polyfill the logic for old clients of the Functions SDK. Functions SDK has included this feature for more than 5+ years now.

2. Removed Callable Auth Monkey Patches
Removed wrapCallableHandler from src/emulator/functionsEmulatorRuntime.ts. that handled manual auth header swapping logic in src/emulator/functionsEmulator.ts. We now rely on the SDK's built-in skipTokenVerification feature shipped since 3.16.0.

3. Bumped Minimum SDK Version
Increased minimum required firebase-functions version from 3.15.1 to 3.16.0 (launched 4+ years ago) in `src/emulator/functionsEmulatorRuntime.ts`. This ensures users have an SDK that supports skipTokenVerification and likely handles .runtimeconfig.json loading correctly in emulation.

* BREAKING: hide functions:config:* commands by default (#9340)

We'll gate all mutating functions:config:* commands behind the new `legacyRuntimeConfigCommands` experiment. We'll keep functions:config:{get,export} available for inspection.

Includes some minor refactoring to align deprecation message across all surfaces.

```shell
$ firebase functions:config:set FOO=bar

Error: DEPRECATION NOTICE: Action required before March 2026

The functions.config() API and the Cloud Runtime Config service are deprecated. Deploys that rely on functions.config() will fail once Runtime Config shuts down in March 2026.

The legacy functions:config:* CLI commands are deprecated and will be removed before March 2026.

Migrate configuration to the Firebase Functions params APIs:

  import { defineJsonSecret } from "firebase-functions/params";

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

To convert existing runtime config values, try the interactive migration command:

  firebase functions:config:export

Learn more: https://firebase.google.com/docs/functions/config-env#migrate-config

To run this legacy command temporarily, run the following command and try again:

  firebase experiments:enable legacyRuntimeConfigCommands
```

* BREAKING: Rewrite functions:config:export command (#9341)

Target the new defineJsonSecret API as migration target for functions.config() usage. The new API is a simpler migration target for existing functions.config() use cases.

Example flow:

```shell
$ firebase functions:config:export
i  This command retrieves your Runtime Config values (accessed via functions.config()) and exports them as a Secret Manager secret.

i  Fetching your existing functions.config() from danielylee-90... ✔  Fetched your existing functions.config().

i  Configuration to be exported:
⚠  This may contain sensitive data. Do not share this output.

{
   <CONFIG>
}

✔ What would you like to name the new secret for your configuration? RUNTIME_CONFIG

✔  Created new secret version projects/XXX/secrets/RUNTIME_CONFIG/versions/1

i  To complete the migration, update your code:

  // Before:
  const functions = require('firebase-functions');

  exports.myFunction = functions.https.onRequest((req, res) => {
    const apiKey = functions.config().service.key;
    // ...
  });

  // After:
  const functions = require('firebase-functions');
  const { defineJsonSecret } = require('firebase-functions/params');

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })  // Bind secret here
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

i  Note: defineJsonSecret requires firebase-functions v6.6.0 or later. Update your package.json if needed. i  Then deploy your functions:
  firebase deploy --only functions
```

* feat(firestore): return listBackupsResponse from firestore:backups:list --json (#9392)

The `firestore:backups:list --json` command now returns the full `listBackupsResponse` object instead of just the `backups` array. This provides more information to the user, including a list of unreachable locations.

* Break java (#9451)

* error out java version below 21

* error out java version below 21

* error out java version below 21

* update formatting

* Remove duplicate error message

* Update CHANGELOG.md to include breaking change

* update CI to java 21

* Add setup-java action to integration

---------

Co-authored-by: Joe Hanley <joehanley@google.com>

* Removing support for .bolt rules (#9339)

* Removing support for .bolt rules

* Changelog

* Merging in master

* Stop following symlinks when archiving directories (#9284)

* Stop following symlinks when archiving directories

* Update exfil PR (#9289)

* Fix filter for symlinks

* Fine. Preserve ordering at the cost of readability

* Format

* Progress on new approach

* Remove unused tar path, fix up zip path to ignore symlinks, add test

* More tests

* Actually good for real this time
;

---------

Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>

* Remove --open-sesame and --close-sesame (#9532)

* Lazy load commands (#9519)

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.
- Added `scripts/benchmark_load.ts` to measure command load time.

* Fix help command as well

* Get rid of flawed benchmark test;

* Clean up unused vars

* Typeguards for style points

* Move typeguard

* Better types

* CHANGELOG

* More type cleanup

* No anys

* Fixing getCommand

* Bump timeout?

* 20s is better

* Removing extra timing code

* format

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: Enforce strict timeout validation for functions (#9540)

* feat: enforce strict timeout validation for functions

* nit: run formatter

* docs: add changelog entry for timeout validation

* refactor: optimize timeout validation logic

* nit: add "breaking" prefix in changelog.

* bug: remove redundant timeout validation.

* feat: remove obsolete parseTriggers fallback (#9521)

* feat: remove obsolete parseTriggers fallback

* nit: clean up conditional paths

* feat(dataconnect): Update dataconnect:* commands to use flags for --service & --location (#9312)

* Update Firestore Emulator to v1.20.2 (#9565)

* Bump FS emulator version to 1.20.2

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Joe Hanley <joehanley@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Fix test broken by merge conflict

* format

* Update version in server.json

* Implement a `firebase init dataconnect:resolver` command. (#9493)

* Implement a `firebase init dataconnect:schema` command.

* Gate behind experiment flag and a few other fixes.

* Add unit tests.

* Fix unit tests.

* Rename command to `firebase init dataconnect:resolver`.

* Commit missed file.

* Fix default location in Cloud Run URL.

* Don't prompt for Cloud Run URL.

* Remove no-op line.

* Gate command at init level.

* [VS Code] Fix rendering of generate query code lens (#9588)

* Fix package-lock.json

* Fix missing auth:import and appdistribution:testers:remove commands (#9590)

* Fix missing auth:import and appdistribution:testers:remove commands

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Dont pass undefined to getCommand (#9596)

* Fix --help (#9597)

* Fix --help

* handle firebase --help

* bump fdc emulator to v3 (#9602)

* FDC V3

* FDC V3

* merging

---------

Co-authored-by: oleina <oleina@google.com>
Co-authored-by: Joe Hanley <joehanley@google.com>

* lint

---------

Co-authored-by: Fred Zhang <fredzqm@google.com>
Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Daniel Lee <danielylee@google.com>
Co-authored-by: harshyyy21 <harshoza24@gmail.com>
Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Rosalyn Tan <rosalyntan@google.com>
Co-authored-by: Anthony Oleinik <48811365+antholeole@users.noreply.github.com>
Co-authored-by: oleina <oleina@google.com>
andrewbrook pushed a commit that referenced this pull request Dec 16, 2025
)

* Update next to match master (#9313)

* Remove overrides that diverge the test configuration from the build configuration. (#9300)

Co-authored-by: Jamie Rothfeder <rothbutter@google.com>

* Fix misleading typing for options.json. (#9275)

* feat(dataconnect): Add confirmation for Gemini schema generation (#9282)

* feat(dataconnect): add confirmation for Gemini schema generation

Instead of directly asking for an app description to generate a schema with Gemini, this change first asks the user to confirm if they want to use Gemini.

If the user confirms, it then prompts for the app description with a default value of "an app for ${setup.projectId}".

* prompts

* changelog

* m

* feedback

* typo

* metrics

* Update index.ts

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

---------

Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: clean up monkey patching in functions emulator runtime (#9402)

1. Removed `functions.config()` Polyfill
Removed initializeRuntimeConfig() from `src/emulator/functionsEmulatorRuntime.ts`. This function manually read `.runtimeconfig.json` and set `CLOUD_RUNTIME_CONFIG` env var to polyfill the logic for old clients of the Functions SDK. Functions SDK has included this feature for more than 5+ years now.

2. Removed Callable Auth Monkey Patches
Removed wrapCallableHandler from src/emulator/functionsEmulatorRuntime.ts. that handled manual auth header swapping logic in src/emulator/functionsEmulator.ts. We now rely on the SDK's built-in skipTokenVerification feature shipped since 3.16.0.

3. Bumped Minimum SDK Version
Increased minimum required firebase-functions version from 3.15.1 to 3.16.0 (launched 4+ years ago) in `src/emulator/functionsEmulatorRuntime.ts`. This ensures users have an SDK that supports skipTokenVerification and likely handles .runtimeconfig.json loading correctly in emulation.

* BREAKING: hide functions:config:* commands by default (#9340)

We'll gate all mutating functions:config:* commands behind the new `legacyRuntimeConfigCommands` experiment. We'll keep functions:config:{get,export} available for inspection.

Includes some minor refactoring to align deprecation message across all surfaces.

```shell
$ firebase functions:config:set FOO=bar

Error: DEPRECATION NOTICE: Action required before March 2026

The functions.config() API and the Cloud Runtime Config service are deprecated. Deploys that rely on functions.config() will fail once Runtime Config shuts down in March 2026.

The legacy functions:config:* CLI commands are deprecated and will be removed before March 2026.

Migrate configuration to the Firebase Functions params APIs:

  import { defineJsonSecret } from "firebase-functions/params";

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

To convert existing runtime config values, try the interactive migration command:

  firebase functions:config:export

Learn more: https://firebase.google.com/docs/functions/config-env#migrate-config

To run this legacy command temporarily, run the following command and try again:

  firebase experiments:enable legacyRuntimeConfigCommands
```

* BREAKING: Rewrite functions:config:export command (#9341)

Target the new defineJsonSecret API as migration target for functions.config() usage. The new API is a simpler migration target for existing functions.config() use cases.

Example flow:

```shell
$ firebase functions:config:export
i  This command retrieves your Runtime Config values (accessed via functions.config()) and exports them as a Secret Manager secret.

i  Fetching your existing functions.config() from danielylee-90... ✔  Fetched your existing functions.config().

i  Configuration to be exported:
⚠  This may contain sensitive data. Do not share this output.

{
   <CONFIG>
}

✔ What would you like to name the new secret for your configuration? RUNTIME_CONFIG

✔  Created new secret version projects/XXX/secrets/RUNTIME_CONFIG/versions/1

i  To complete the migration, update your code:

  // Before:
  const functions = require('firebase-functions');

  exports.myFunction = functions.https.onRequest((req, res) => {
    const apiKey = functions.config().service.key;
    // ...
  });

  // After:
  const functions = require('firebase-functions');
  const { defineJsonSecret } = require('firebase-functions/params');

  const config = defineJsonSecret("RUNTIME_CONFIG");

  exports.myFunction = functions
    .runWith({ secrets: [config] })  // Bind secret here
    .https.onRequest((req, res) => {
      const apiKey = config.value().service.key;
      // ...
    });

i  Note: defineJsonSecret requires firebase-functions v6.6.0 or later. Update your package.json if needed. i  Then deploy your functions:
  firebase deploy --only functions
```

* feat(firestore): return listBackupsResponse from firestore:backups:list --json (#9392)

The `firestore:backups:list --json` command now returns the full `listBackupsResponse` object instead of just the `backups` array. This provides more information to the user, including a list of unreachable locations.

* Break java (#9451)

* error out java version below 21

* error out java version below 21

* error out java version below 21

* update formatting

* Remove duplicate error message

* Update CHANGELOG.md to include breaking change

* update CI to java 21

* Add setup-java action to integration

---------

Co-authored-by: Joe Hanley <joehanley@google.com>

* Removing support for .bolt rules (#9339)

* Removing support for .bolt rules

* Changelog

* Merging in master

* Stop following symlinks when archiving directories (#9284)

* Stop following symlinks when archiving directories

* Update exfil PR (#9289)

* Fix filter for symlinks

* Fine. Preserve ordering at the cost of readability

* Format

* Progress on new approach

* Remove unused tar path, fix up zip path to ignore symlinks, add test

* More tests

* Actually good for real this time
;

---------

Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>

* Remove --open-sesame and --close-sesame (#9532)

* Lazy load commands (#9519)

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.

* Refactor command loading to be lazy

- Updated `src/commands/index.ts` to make `loadCommand` return a lazy runner that only `require`s and registers the command when executed or explicitly loaded.
- Updated `src/index.ts` to handle lazy loading in the catch-all command handler by traversing the `client` object and loading the matching command before re-parsing arguments.
- Updated `src/bin/cli.ts` to load all commands when no arguments are provided (global help), ensuring the help text is fully populated.
- Added cycle detection to the `loadAll` logic to handle circular references in the `client` object.
- Added `scripts/benchmark_load.ts` to measure command load time.

* Fix help command as well

* Get rid of flawed benchmark test;

* Clean up unused vars

* Typeguards for style points

* Move typeguard

* Better types

* CHANGELOG

* More type cleanup

* No anys

* Fixing getCommand

* Bump timeout?

* 20s is better

* Removing extra timing code

* format

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* BREAKING: Enforce strict timeout validation for functions (#9540)

* feat: enforce strict timeout validation for functions

* nit: run formatter

* docs: add changelog entry for timeout validation

* refactor: optimize timeout validation logic

* nit: add "breaking" prefix in changelog.

* bug: remove redundant timeout validation.

* feat: remove obsolete parseTriggers fallback (#9521)

* feat: remove obsolete parseTriggers fallback

* nit: clean up conditional paths

* feat(dataconnect): Update dataconnect:* commands to use flags for --service & --location (#9312)

* Update Firestore Emulator to v1.20.2 (#9565)

* Bump FS emulator version to 1.20.2

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Joe Hanley <joehanley@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Fix test broken by merge conflict

* format

* Update version in server.json

* Performance improvements and new billing info for get_environment

* Implement a `firebase init dataconnect:resolver` command. (#9493)

* Implement a `firebase init dataconnect:schema` command.

* Gate behind experiment flag and a few other fixes.

* Add unit tests.

* Fix unit tests.

* Rename command to `firebase init dataconnect:resolver`.

* Commit missed file.

* Fix default location in Cloud Run URL.

* Don't prompt for Cloud Run URL.

* Remove no-op line.

* Gate command at init level.

* [VS Code] Fix rendering of generate query code lens (#9588)

* fix test

* Fix usage in mocks too

* Fix package-lock.json

* Fix missing auth:import and appdistribution:testers:remove commands (#9590)

* Fix missing auth:import and appdistribution:testers:remove commands

* Update CHANGELOG.md

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* lint

* Dont pass undefined to getCommand (#9596)

* Fix --help (#9597)

* Fix --help

* handle firebase --help

* bump fdc emulator to v3 (#9602)

* FDC V3

* FDC V3

* merging

---------

Co-authored-by: oleina <oleina@google.com>
Co-authored-by: Joe Hanley <joehanley@google.com>

* lint

* Merging

* Get rid of uneeded intermediate variable

* Fix new test conflict

* Addressing flaky tests

---------

Co-authored-by: Fred Zhang <fredzqm@google.com>
Co-authored-by: Jamie Rothfeder <jamie.rothfeder@gmail.com>
Co-authored-by: Jamie Rothfeder <rothbutter@google.com>
Co-authored-by: Yuchen Shi <yuchenshi@google.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Daniel Lee <danielylee@google.com>
Co-authored-by: harshyyy21 <harshoza24@gmail.com>
Co-authored-by: Thomas Bouldin <inlined@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Rosalyn Tan <rosalyntan@google.com>
Co-authored-by: Anthony Oleinik <48811365+antholeole@users.noreply.github.com>
Co-authored-by: oleina <oleina@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants