Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion firebase-vscode/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ resources/dist
.vscode-test
.wdio-vscode-service
logs
!*.tgz
!*.tgz
prebuilt-extensions
3 changes: 2 additions & 1 deletion firebase-vscode/.vscodeignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ node_modules/
dist/test/
*.tgz
package-lock.json
.wdio-vscode-service/
.wdio-vscode-service/
prebuilt-extensions/
2 changes: 2 additions & 0 deletions firebase-vscode/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## NEXT

- [Added] @data-connect tool callable from the Gemini Code Assist extension.

## 1.3.1

- Updated internal `firebase-tools` dependency to 14.2.1
Expand Down
2 changes: 2 additions & 0 deletions firebase-vscode/common/messaging/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ export interface WebviewToExtensionParamsMap {
/** Clears data from a running data connect emulator */
"fdc.clear-emulator-data": void;

"firebase.activate.gemini": void;

// Initialize "result" tab.
getDataConnectResults: void;

Expand Down
33 changes: 21 additions & 12 deletions firebase-vscode/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions firebase-vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
},
"repository": "https://github.com/firebase/firebase-tools",
"sideEffects": false,
"extensionDependencies": [
"google.geminicodeassist"
],
"categories": [
"Other"
],
Expand Down Expand Up @@ -213,6 +216,7 @@
"test-compile": "npm run copyfiles && webpack --config src/test/webpack.test.js",
"lint": "eslint src --ext ts",
"test": "npm run test:unit && npm run test:e2e",
"pretest:e2e": "curl -fsSL https://code-server.dev/install.sh | sh -s -- --edge && code-server --install-extension Google.geminicodeassist --extensions-dir ./prebuilt-extensions/",
"pretest:unit": "npm run test-compile && tsc -p src/test/tsconfig.test.json",
"test:unit": "node ./dist/test/firebase-vscode/src/test/runTest.js",
"test:e2e": "npm run test:e2e:empty && npm run test:e2e:fishfood",
Expand Down
30 changes: 23 additions & 7 deletions firebase-vscode/src/analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,13 @@ export enum DATA_CONNECT_EVENT_NAME {
START_EMULATORS = "start_emulators",
AUTO_COMPLETE = "auto_complete",
SESSION_CHAR_COUNT = "session_char_count",
EMULATOR_EXPORT ="emulator_export",
EMULATOR_EXPORT = "emulator_export",
SETUP_FIREBASE_BINARY = "setup_firebase_binary",
GEMINI_ERROR = "gemini_error",
GEMINI_OPERATION_CALL = "gemini_operation_call",
GEMINI_SCHEMA_CALL = "gemini_schema_call",
GEMINI_SUCCESS = "gemini_success",
TRY_GEMINI_CLICKED = "try_gemini_clicked",
}

export class AnalyticsLogger {
Expand All @@ -42,9 +47,9 @@ export class AnalyticsLogger {
private sessionCharCount = 0; // Track total chars for the session

constructor(context: vscode.ExtensionContext) {
this.logger = monospaceEnv.value.isMonospace ? new IDXLogger(new GA4TelemetrySender(pluginLogger), context) : env.createTelemetryLogger(
new GA4TelemetrySender(pluginLogger),
);
this.logger = monospaceEnv.value.isMonospace
? new IDXLogger(new GA4TelemetrySender(pluginLogger), context)
: env.createTelemetryLogger(new GA4TelemetrySender(pluginLogger));

let subscriptions: vscode.Disposable[] = [
vscode.workspace.onDidChangeTextDocument(
Expand Down Expand Up @@ -149,13 +154,15 @@ export class AnalyticsLogger {
}

export class IDXLogger {
constructor(private sender: GA4TelemetrySender, private context: vscode.ExtensionContext) {}
constructor(
private sender: GA4TelemetrySender,
private context: vscode.ExtensionContext,
) {}
public logUsage(eventName: string, data?: any) {
const packageJson = this.context.extension.packageJSON;
data = {
...data,
extversion: packageJson.version,
extname: "idx",
...getAnalyticsContext(this.context),
isidx: "true",
};
this.sender.sendEventData(eventName, data);
Expand Down Expand Up @@ -207,6 +214,15 @@ class GA4TelemetrySender implements TelemetrySender {
}
}

export function getAnalyticsContext(context: vscode.ExtensionContext) {
const packageJson = context.extension.packageJSON;

return {
extversion: packageJson.version,
extname: monospaceEnv.value.isMonospace ? "idx" : "vscode",
};
}

function addFirebaseBinaryMetadata(data?: Record<string, any> | undefined) {
const settings = getSettings();
return { ...data, binary_kind: settings.firebaseBinaryKind };
Expand Down
Loading
Loading