From 32c3a2df9062291737c4cd416539b4868167a131 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Mon, 19 Aug 2024 18:12:12 -0700 Subject: [PATCH 1/8] Added dart to firebase CLI --- src/commands/dataconnect-sdk-generate.ts | 4 +- src/dataconnect/fileUtils.spec.ts | 47 ++++++++++++++++++++++++ src/dataconnect/fileUtils.ts | 20 ++++++++-- src/dataconnect/types.ts | 6 +++ src/emulator/dataconnectEmulator.ts | 5 +++ src/emulator/downloadableEmulators.ts | 9 +++-- src/experiments.ts | 7 +++- src/init/features/dataconnect/sdk.ts | 32 +++++++++++++--- 8 files changed, 116 insertions(+), 14 deletions(-) diff --git a/src/commands/dataconnect-sdk-generate.ts b/src/commands/dataconnect-sdk-generate.ts index 3bc1cfcdd7e..72a4aec73fe 100644 --- a/src/commands/dataconnect-sdk-generate.ts +++ b/src/commands/dataconnect-sdk-generate.ts @@ -7,6 +7,7 @@ import { needProjectId } from "../projectUtils"; import { load } from "../dataconnect/load"; import { readFirebaseJson } from "../dataconnect/fileUtils"; import { logger } from "../logger"; +import * as experiments from "../experiments"; export const command = new Command("dataconnect:sdk:generate") .description("generates typed SDKs for your Data Connect connectors") @@ -21,7 +22,8 @@ export const command = new Command("dataconnect:sdk:generate") return ( c.connectorYaml.generate?.javascriptSdk || c.connectorYaml.generate?.kotlinSdk || - c.connectorYaml.generate?.swiftSdk + c.connectorYaml.generate?.swiftSdk || + (experiments.isEnabled("fdcdart") && c.connectorYaml.generate?.dartSdk) ); }); if (!hasGeneratables) { diff --git a/src/dataconnect/fileUtils.spec.ts b/src/dataconnect/fileUtils.spec.ts index 0cee753789f..1635cbccbd3 100644 --- a/src/dataconnect/fileUtils.spec.ts +++ b/src/dataconnect/fileUtils.spec.ts @@ -3,6 +3,7 @@ import { getPlatformFromFolder, generateSdkYaml } from "./fileUtils"; import { ConnectorYaml, Platform } from "./types"; import * as mockfs from "mock-fs"; import FileSystem from "mock-fs/lib/filesystem"; +import { isEnabled, setEnabled } from "../experiments"; describe("getPlatformFromFolder", () => { const cases: { @@ -10,6 +11,7 @@ describe("getPlatformFromFolder", () => { folderName: string; folderItems: FileSystem.DirectoryItems; output: Platform; + enableDart?: boolean; }[] = [ { desc: "Empty folder", @@ -85,6 +87,34 @@ describe("getPlatformFromFolder", () => { }, output: Platform.IOS, }, + { + desc: "Dart identifier 1", + folderName: "is/this/a/dart/test", + folderItems: { + file1: "contents", + "pubspec.yaml": "my deps", + }, + enableDart: true, + output: Platform.DART, + }, + { + desc: "Dart identifier 2", + folderName: "is/this/a/dart/test", + folderItems: { + "pubspec.lock": "my deps", + }, + enableDart: true, + output: Platform.DART, + }, + { + desc: "Dart identifier with experiment disabled", + folderName: "is/this/a/dart/test", + folderItems: { + "pubspec.lock": "my deps", + }, + enableDart: false, + output: Platform.UNDETERMINED, + }, { desc: "multiple identifiers, returns undetermined", folderName: "test/", @@ -98,9 +128,13 @@ describe("getPlatformFromFolder", () => { ]; for (const c of cases) { it(c.desc, async () => { + const wasEnabledBefore = isEnabled("fdcdart"); + setEnabled("fdcdart", !!c.enableDart); mockfs({ [c.folderName]: c.folderItems }); const platform = await getPlatformFromFolder(c.folderName); expect(platform).to.equal(c.output); + // Reset experiment + setEnabled("fdcdart", wasEnabledBefore); }); afterEach(() => { mockfs.restore(); @@ -157,6 +191,19 @@ describe("generateSdkYaml", () => { }); }); + it("should add Dart SDK generation for DART platform when Dart is enabled", () => { + const modifiedYaml = generateSdkYaml( + Platform.DART, + sampleConnectorYaml, + connectorYamlFolder, + appFolder, + ); + expect(modifiedYaml.generate?.dartSdk).to.deep.equal({ + outputDir: "../dataconnect-generated", + package: "test_connector", + }); + }); + it("should create generate object if it doesn't exist", () => { const yamlWithoutGenerate: ConnectorYaml = { connectorId: "test_connector" }; const modifiedYaml = generateSdkYaml( diff --git a/src/dataconnect/fileUtils.ts b/src/dataconnect/fileUtils.ts index ddb8f7c37ab..6111b66fdb6 100644 --- a/src/dataconnect/fileUtils.ts +++ b/src/dataconnect/fileUtils.ts @@ -7,6 +7,7 @@ import { readFileFromDirectory, wrappedSafeLoad } from "../utils"; import { Config } from "../config"; import { DataConnectMultiple } from "../firebaseConfig"; import { load } from "./load"; +import * as experiments from "../experiments"; export function readFirebaseJson(config: Config): DataConnectMultiple { if (!config.has("dataconnect")) { @@ -111,6 +112,7 @@ export async function pickService( const WEB_INDICATORS = ["package.json", "package-lock.json", "node_modules"]; const IOS_INDICATORS = ["info.plist", "podfile", "package.swift"]; const ANDROID_INDICATORS = ["androidmanifest.xml", "build.gradle", "build.gradle.kts"]; +const DART_INDICATORS = ["pubspec.yaml", "pubspec.lock"]; // endswith match const IOS_POSTFIX_INDICATORS = [".xcworkspace", ".xcodeproj"]; @@ -123,6 +125,7 @@ export async function getPlatformFromFolder(dirPath: string) { let hasWeb = false; let hasAndroid = false; let hasIOS = false; + let hasDart = false; for (const fileName of fileNames) { const cleanedFileName = fileName.toLowerCase(); hasWeb ||= WEB_INDICATORS.some((indicator) => indicator === cleanedFileName); @@ -130,13 +133,18 @@ export async function getPlatformFromFolder(dirPath: string) { hasIOS ||= IOS_INDICATORS.some((indicator) => indicator === cleanedFileName) || IOS_POSTFIX_INDICATORS.some((indicator) => cleanedFileName.endsWith(indicator)); + hasDart ||= + experiments.isEnabled("fdcdart") && + DART_INDICATORS.some((indicator) => indicator === cleanedFileName); } - if (hasWeb && !hasAndroid && !hasIOS) { + if (hasWeb && !hasAndroid && !hasIOS && !hasDart) { return Platform.WEB; - } else if (hasAndroid && !hasWeb && !hasIOS) { + } else if (hasAndroid && !hasWeb && !hasIOS && !hasDart) { return Platform.ANDROID; - } else if (hasIOS && !hasWeb && !hasAndroid) { + } else if (hasIOS && !hasWeb && !hasAndroid && !hasDart) { return Platform.IOS; + } else if (hasDart && !hasWeb && !hasIOS && !hasAndroid) { + return Platform.DART; } // At this point, its not clear which platform the app directory is // (either because we found no indicators, or indicators for multiple platforms) @@ -179,5 +187,11 @@ export function generateSdkYaml( package: `connectors.${connectorYaml.connectorId}`, }; } + if (platform === Platform.DART) { + connectorYaml.generate.dartSdk = { + outputDir, + package: connectorYaml.connectorId, + }; + } return connectorYaml; } diff --git a/src/dataconnect/types.ts b/src/dataconnect/types.ts index fd9fa846058..07f96678794 100644 --- a/src/dataconnect/types.ts +++ b/src/dataconnect/types.ts @@ -130,6 +130,7 @@ export interface Generate { javascriptSdk?: JavascriptSDK; swiftSdk?: SwiftSDK; kotlinSdk?: KotlinSDK; + dartSdk?: DartSDK; } export interface JavascriptSDK { @@ -146,11 +147,16 @@ export interface KotlinSDK { outputDir: string; package: string; } +export interface DartSDK { + outputDir: string; + package: string; +} export enum Platform { ANDROID = "ANDROID", WEB = "WEB", IOS = "IOS", + DART = "DART", UNDETERMINED = "UNDETERMINED", } diff --git a/src/emulator/dataconnectEmulator.ts b/src/emulator/dataconnectEmulator.ts index 84fc5dac6a7..026e5b81478 100644 --- a/src/emulator/dataconnectEmulator.ts +++ b/src/emulator/dataconnectEmulator.ts @@ -17,6 +17,7 @@ import { load } from "../dataconnect/load"; import { isVSCodeExtension } from "../utils"; import { Config } from "../config"; import { EventEmitter } from "events"; +import * as experiments from "../experiments"; export interface DataConnectEmulatorArgs { projectId: string; @@ -88,6 +89,7 @@ export class DataConnectEmulator implements EmulatorInstance { config_dir: resolvedConfigDir, enable_output_schema_extensions: true, enable_output_generated_sdk: true, + enable_dart: experiments.isEnabled("fdcdart"), }); this.usingExistingEmulator = false; } @@ -147,6 +149,9 @@ export class DataConnectEmulator implements EmulatorInstance { `--config_dir=${args.configDir}`, `--connector_id=${args.connectorId}`, ]; + if (experiments.isEnabled("fdcdart")) { + cmd.push("--enable_dart=true"); + } const res = childProcess.spawnSync(commandInfo.binary, cmd, { encoding: "utf-8" }); logger.info(res.stderr); diff --git a/src/emulator/downloadableEmulators.ts b/src/emulator/downloadableEmulators.ts index c594dc0a0b8..572236156c5 100755 --- a/src/emulator/downloadableEmulators.ts +++ b/src/emulator/downloadableEmulators.ts @@ -57,9 +57,9 @@ const EMULATOR_UPDATE_DETAILS: { [s in DownloadableEmulators]: EmulatorUpdateDet dataconnect: process.platform === "darwin" ? { - version: "1.3.5", - expectedSize: 24232704, - expectedChecksum: "4eabf613a4a5feeaa173e1375b62bde0", + version: "dart2", + expectedSize: 33772480, + expectedChecksum: "57b5592917db709cf2d73810affd4781", } : process.platform === "win32" ? { @@ -172,7 +172,7 @@ export const DownloadDetails: { [s in DownloadableEmulators]: EmulatorDownloadDe cacheDir: CACHE_DIR, remoteUrl: process.platform === "darwin" - ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-macos-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` + ? `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-2?alt=media&token=48694c1f-5458-4044-8361-44d0f37193ce` : process.platform === "win32" ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-windows-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` : `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-linux-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}`, @@ -294,6 +294,7 @@ const Commands: { [s in DownloadableEmulators]: DownloadableEmulatorCommand } = "config_dir", "enable_output_schema_extensions", "enable_output_generated_sdk", + "enable_dart", // Additional flags that CLI shouldn't pass: // rpc_retry_count, // resolvers_emulator, diff --git a/src/experiments.ts b/src/experiments.ts index 08eb211761d..a74a9e0cbdd 100644 --- a/src/experiments.ts +++ b/src/experiments.ts @@ -1,7 +1,6 @@ import { bold, italic } from "colorette"; import * as leven from "leven"; import { basename } from "path"; - import { configstore } from "./configstore"; import { FirebaseError } from "./error"; import { isRunningInGithubAction } from "./init/features/hosting/github"; @@ -140,6 +139,12 @@ export const ALL_EXPERIMENTS = experiments({ fullDescription: "Enable Data Connect schema migrations in Compatible Mode", public: false, }, + // TODO(mtewani): Remove when Dart SDK Generation is supported. + fdcdart: { + shortDescription: "Enable Data Connect Dart SDK Generation", + fullDescription: "Enable Data Connect Dart SDK Generation", + public: false, + }, }); export type ExperimentName = keyof typeof ALL_EXPERIMENTS; diff --git a/src/init/features/dataconnect/sdk.ts b/src/init/features/dataconnect/sdk.ts index 362a8422e7e..016652bfd8e 100644 --- a/src/init/features/dataconnect/sdk.ts +++ b/src/init/features/dataconnect/sdk.ts @@ -15,6 +15,7 @@ import { load } from "../../../dataconnect/load"; import { ConnectorInfo, ConnectorYaml, + DartSDK, JavascriptSDK, KotlinSDK, Platform, @@ -23,6 +24,7 @@ import { DataConnectEmulator } from "../../../emulator/dataconnectEmulator"; import { FirebaseError } from "../../../error"; import { camelCase, snakeCase, upperFirst } from "lodash"; import { logSuccess, logBullet } from "../../../utils"; +import * as experiments from "../../../experiments"; export type SDKInfo = { connectorYamlContents: string; @@ -87,14 +89,18 @@ async function askQuestions(setup: Setup, config: Config): Promise { } else { // If we still can't autodetect, just ask the user logBullet("Couldn't automatically detect your app's platform."); + const platforms = [ + { name: "iOS (Swift)", value: Platform.IOS }, + { name: "Web (JavaScript)", value: Platform.WEB }, + { name: "Android (Kotlin)", value: Platform.ANDROID }, + ]; + if (experiments.isEnabled("fdcdart")) { + platforms.push({ name: "Flutter (Dart)", value: Platform.DART }); + } targetPlatform = await promptOnce({ message: "Which platform do you want to set up a generated SDK for?", type: "list", - choices: [ - { name: "iOS (Swift)", value: Platform.IOS }, - { name: "Web (JavaScript)", value: Platform.WEB }, - { name: "Android (Kotlin)", value: Platform.ANDROID }, - ], + choices: platforms, }); } } @@ -144,6 +150,22 @@ async function askQuestions(setup: Setup, config: Config): Promise { newConnectorYaml.generate.javascriptSdk = javascriptSdk; } + // We don't have to check if the experiment was enabled since we already made that check above. + if (targetPlatform === Platform.DART) { + const outputDir = + newConnectorYaml.generate.dartSdk?.outputDir || + path.relative( + connectorInfo.directory, + path.join(appDir, `generated/dart/${newConnectorYaml.connectorId}`), + ); + const pkg = newConnectorYaml.generate.dartSdk?.package ?? newConnectorYaml.connectorId; + const dartSdk: DartSDK = { + outputDir, + package: pkg, + }; + newConnectorYaml.generate.dartSdk = dartSdk; + } + if (targetPlatform === Platform.ANDROID) { // app/src/main/kotlin and app/src/main/java are conventional for Android, // but not required or enforced. If one of them is present (preferring the From e34190ab46f035df5562cf91ef1df1692b5abfe4 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 20 Aug 2024 10:10:47 -0700 Subject: [PATCH 2/8] Removed emulator changes --- src/emulator/downloadableEmulators.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/emulator/downloadableEmulators.ts b/src/emulator/downloadableEmulators.ts index 572236156c5..c594dc0a0b8 100755 --- a/src/emulator/downloadableEmulators.ts +++ b/src/emulator/downloadableEmulators.ts @@ -57,9 +57,9 @@ const EMULATOR_UPDATE_DETAILS: { [s in DownloadableEmulators]: EmulatorUpdateDet dataconnect: process.platform === "darwin" ? { - version: "dart2", - expectedSize: 33772480, - expectedChecksum: "57b5592917db709cf2d73810affd4781", + version: "1.3.5", + expectedSize: 24232704, + expectedChecksum: "4eabf613a4a5feeaa173e1375b62bde0", } : process.platform === "win32" ? { @@ -172,7 +172,7 @@ export const DownloadDetails: { [s in DownloadableEmulators]: EmulatorDownloadDe cacheDir: CACHE_DIR, remoteUrl: process.platform === "darwin" - ? `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-2?alt=media&token=48694c1f-5458-4044-8361-44d0f37193ce` + ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-macos-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` : process.platform === "win32" ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-windows-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` : `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-linux-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}`, @@ -294,7 +294,6 @@ const Commands: { [s in DownloadableEmulators]: DownloadableEmulatorCommand } = "config_dir", "enable_output_schema_extensions", "enable_output_generated_sdk", - "enable_dart", // Additional flags that CLI shouldn't pass: // rpc_retry_count, // resolvers_emulator, From 07d2b8d6a2cb8f056662da8d49e7e58e12357116 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 20 Aug 2024 13:40:45 -0700 Subject: [PATCH 3/8] temp --- src/emulator/downloadableEmulators.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/emulator/downloadableEmulators.ts b/src/emulator/downloadableEmulators.ts index c594dc0a0b8..756d50a8c6d 100755 --- a/src/emulator/downloadableEmulators.ts +++ b/src/emulator/downloadableEmulators.ts @@ -57,9 +57,9 @@ const EMULATOR_UPDATE_DETAILS: { [s in DownloadableEmulators]: EmulatorUpdateDet dataconnect: process.platform === "darwin" ? { - version: "1.3.5", - expectedSize: 24232704, - expectedChecksum: "4eabf613a4a5feeaa173e1375b62bde0", + version: "dart2", + expectedSize: 33772480, + expectedChecksum: "57b5592917db709cf2d73810affd4781", } : process.platform === "win32" ? { @@ -68,9 +68,9 @@ const EMULATOR_UPDATE_DETAILS: { [s in DownloadableEmulators]: EmulatorUpdateDet expectedChecksum: "c7b2b7168ff7226f4e5626ae7d13e0ca", } : { - version: "1.3.5", - expectedSize: 24146072, - expectedChecksum: "1457937751ce25fa332cdc16b561d64b", + version: "dart2", + expectedSize: 33780672, + expectedChecksum: "7acabaf19472714acb10436baee3f54d", }, }; @@ -172,10 +172,10 @@ export const DownloadDetails: { [s in DownloadableEmulators]: EmulatorDownloadDe cacheDir: CACHE_DIR, remoteUrl: process.platform === "darwin" - ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-macos-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` + ? `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-2?alt=media&token=48694c1f-5458-4044-8361-44d0f37193ce` : process.platform === "win32" ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-windows-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` - : `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-linux-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}`, + : `https://firebasestorage.googleapis.com/v0/b/firemat-preview-drop/o/emulator%2Fdart_emulator-2-linux.sh?alt=media&token=2302aed9-fa5d-40f1-b032-d540144252b5`, expectedSize: EMULATOR_UPDATE_DETAILS.dataconnect.expectedSize, expectedChecksum: EMULATOR_UPDATE_DETAILS.dataconnect.expectedChecksum, skipChecksumAndSize: false, @@ -294,6 +294,7 @@ const Commands: { [s in DownloadableEmulators]: DownloadableEmulatorCommand } = "config_dir", "enable_output_schema_extensions", "enable_output_generated_sdk", + "enable_dart", // Additional flags that CLI shouldn't pass: // rpc_retry_count, // resolvers_emulator, From f5021e0fcbfe2b3d2a01111dc17d90f838b30b68 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 3 Sep 2024 13:16:41 -0700 Subject: [PATCH 4/8] WIP --- firebase-vscode/package.json | 2 +- src/emulator/dataconnectEmulator.ts | 3 ++- src/emulator/downloadableEmulators.ts | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/firebase-vscode/package.json b/firebase-vscode/package.json index 1008491c9d3..5712b835405 100644 --- a/firebase-vscode/package.json +++ b/firebase-vscode/package.json @@ -4,7 +4,7 @@ "publisher": "firebase", "icon": "./resources/firebase_logo.png", "description": "VSCode Extension for Firebase", - "version": "0.5.4", + "version": "0.5.7-dart3", "engines": { "vscode": "^1.69.0" }, diff --git a/src/emulator/dataconnectEmulator.ts b/src/emulator/dataconnectEmulator.ts index 026e5b81478..6dbed8ec799 100644 --- a/src/emulator/dataconnectEmulator.ts +++ b/src/emulator/dataconnectEmulator.ts @@ -18,6 +18,7 @@ import { isVSCodeExtension } from "../utils"; import { Config } from "../config"; import { EventEmitter } from "events"; import * as experiments from "../experiments"; +import { askForAllowedEventTypes } from "../extensions/askUserForEventsConfig"; export interface DataConnectEmulatorArgs { projectId: string; @@ -89,7 +90,7 @@ export class DataConnectEmulator implements EmulatorInstance { config_dir: resolvedConfigDir, enable_output_schema_extensions: true, enable_output_generated_sdk: true, - enable_dart: experiments.isEnabled("fdcdart"), + enable_dart: true, }); this.usingExistingEmulator = false; } diff --git a/src/emulator/downloadableEmulators.ts b/src/emulator/downloadableEmulators.ts index 756d50a8c6d..6764144b622 100755 --- a/src/emulator/downloadableEmulators.ts +++ b/src/emulator/downloadableEmulators.ts @@ -68,9 +68,9 @@ const EMULATOR_UPDATE_DETAILS: { [s in DownloadableEmulators]: EmulatorUpdateDet expectedChecksum: "c7b2b7168ff7226f4e5626ae7d13e0ca", } : { - version: "dart2", - expectedSize: 33780672, - expectedChecksum: "7acabaf19472714acb10436baee3f54d", + version: "dart4", + expectedSize: 33730714, + expectedChecksum: "7b33a7435cb14a65395ae43d60c95e58", }, }; @@ -175,7 +175,7 @@ export const DownloadDetails: { [s in DownloadableEmulators]: EmulatorDownloadDe ? `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-2?alt=media&token=48694c1f-5458-4044-8361-44d0f37193ce` : process.platform === "win32" ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-windows-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` - : `https://firebasestorage.googleapis.com/v0/b/firemat-preview-drop/o/emulator%2Fdart_emulator-2-linux.sh?alt=media&token=2302aed9-fa5d-40f1-b032-d540144252b5`, + : `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-3-linux.sh?alt=media&token=36d788ec-e366-4bcd-9aeb-fb2929ccfeab`, expectedSize: EMULATOR_UPDATE_DETAILS.dataconnect.expectedSize, expectedChecksum: EMULATOR_UPDATE_DETAILS.dataconnect.expectedChecksum, skipChecksumAndSize: false, From 184c38dce21cde467789b2e3cd8190e6ef90ea26 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Mon, 23 Sep 2024 20:44:55 +0100 Subject: [PATCH 5/8] Included dart sdk --- src/dataconnect/fileUtils.spec.ts | 13 ++----------- src/dataconnect/fileUtils.ts | 2 -- src/emulator/downloadableEmulators.ts | 5 ++--- src/experiments.ts | 6 ------ src/init/features/dataconnect/sdk.ts | 4 +--- 5 files changed, 5 insertions(+), 25 deletions(-) diff --git a/src/dataconnect/fileUtils.spec.ts b/src/dataconnect/fileUtils.spec.ts index 1635cbccbd3..e2ebaa7bda4 100644 --- a/src/dataconnect/fileUtils.spec.ts +++ b/src/dataconnect/fileUtils.spec.ts @@ -3,7 +3,6 @@ import { getPlatformFromFolder, generateSdkYaml } from "./fileUtils"; import { ConnectorYaml, Platform } from "./types"; import * as mockfs from "mock-fs"; import FileSystem from "mock-fs/lib/filesystem"; -import { isEnabled, setEnabled } from "../experiments"; describe("getPlatformFromFolder", () => { const cases: { @@ -11,7 +10,6 @@ describe("getPlatformFromFolder", () => { folderName: string; folderItems: FileSystem.DirectoryItems; output: Platform; - enableDart?: boolean; }[] = [ { desc: "Empty folder", @@ -94,7 +92,6 @@ describe("getPlatformFromFolder", () => { file1: "contents", "pubspec.yaml": "my deps", }, - enableDart: true, output: Platform.DART, }, { @@ -103,16 +100,14 @@ describe("getPlatformFromFolder", () => { folderItems: { "pubspec.lock": "my deps", }, - enableDart: true, output: Platform.DART, }, { desc: "Dart identifier with experiment disabled", folderName: "is/this/a/dart/test", folderItems: { - "pubspec.lock": "my deps", + "pubspec.mispelled": "my deps", }, - enableDart: false, output: Platform.UNDETERMINED, }, { @@ -128,13 +123,9 @@ describe("getPlatformFromFolder", () => { ]; for (const c of cases) { it(c.desc, async () => { - const wasEnabledBefore = isEnabled("fdcdart"); - setEnabled("fdcdart", !!c.enableDart); mockfs({ [c.folderName]: c.folderItems }); const platform = await getPlatformFromFolder(c.folderName); expect(platform).to.equal(c.output); - // Reset experiment - setEnabled("fdcdart", wasEnabledBefore); }); afterEach(() => { mockfs.restore(); @@ -191,7 +182,7 @@ describe("generateSdkYaml", () => { }); }); - it("should add Dart SDK generation for DART platform when Dart is enabled", () => { + it("should add Dart SDK generation for DART platform", () => { const modifiedYaml = generateSdkYaml( Platform.DART, sampleConnectorYaml, diff --git a/src/dataconnect/fileUtils.ts b/src/dataconnect/fileUtils.ts index e6a96cd5aed..baf44088c3a 100644 --- a/src/dataconnect/fileUtils.ts +++ b/src/dataconnect/fileUtils.ts @@ -7,7 +7,6 @@ import { readFileFromDirectory, wrappedSafeLoad } from "../utils"; import { Config } from "../config"; import { DataConnectMultiple } from "../firebaseConfig"; import { load } from "./load"; -import * as experiments from "../experiments"; export function readFirebaseJson(config?: Config): DataConnectMultiple { if (!config?.has("dataconnect")) { @@ -134,7 +133,6 @@ export async function getPlatformFromFolder(dirPath: string) { IOS_INDICATORS.some((indicator) => indicator === cleanedFileName) || IOS_POSTFIX_INDICATORS.some((indicator) => cleanedFileName.endsWith(indicator)); hasDart ||= - experiments.isEnabled("fdcdart") && DART_INDICATORS.some((indicator) => indicator === cleanedFileName); } if (hasWeb && !hasAndroid && !hasIOS && !hasDart) { diff --git a/src/emulator/downloadableEmulators.ts b/src/emulator/downloadableEmulators.ts index 57883f15d6e..606d582a67d 100755 --- a/src/emulator/downloadableEmulators.ts +++ b/src/emulator/downloadableEmulators.ts @@ -173,10 +173,10 @@ export const DownloadDetails: { [s in DownloadableEmulators]: EmulatorDownloadDe cacheDir: CACHE_DIR, remoteUrl: process.platform === "darwin" - ? `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-2?alt=media&token=48694c1f-5458-4044-8361-44d0f37193ce` + ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-macos-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` : process.platform === "win32" ? `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-windows-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}` - : `https://firebasestorage.googleapis.com/v0/b/getting-started-dart-storage.appspot.com/o/dart_emulator-3-linux.sh?alt=media&token=36d788ec-e366-4bcd-9aeb-fb2929ccfeab`, + : `https://storage.googleapis.com/firemat-preview-drop/emulator/dataconnect-emulator-linux-v${EMULATOR_UPDATE_DETAILS.dataconnect.version}`, expectedSize: EMULATOR_UPDATE_DETAILS.dataconnect.expectedSize, expectedChecksum: EMULATOR_UPDATE_DETAILS.dataconnect.expectedChecksum, skipChecksumAndSize: false, @@ -295,7 +295,6 @@ const Commands: { [s in DownloadableEmulators]: DownloadableEmulatorCommand } = "config_dir", "enable_output_schema_extensions", "enable_output_generated_sdk", - "enable_dart", // Additional flags that CLI shouldn't pass: // rpc_retry_count, // resolvers_emulator, diff --git a/src/experiments.ts b/src/experiments.ts index a288b440345..bcf94ff1aa2 100644 --- a/src/experiments.ts +++ b/src/experiments.ts @@ -143,12 +143,6 @@ export const ALL_EXPERIMENTS = experiments({ fullDescription: "Enable Data Connect schema migrations in Compatible Mode", public: false, }, - // TODO(mtewani): Remove when Dart SDK Generation is supported. - fdcdart: { - shortDescription: "Enable Data Connect Dart SDK Generation", - fullDescription: "Enable Data Connect Dart SDK Generation", - public: false, - }, }); export type ExperimentName = keyof typeof ALL_EXPERIMENTS; diff --git a/src/init/features/dataconnect/sdk.ts b/src/init/features/dataconnect/sdk.ts index 016652bfd8e..283e3d3ebb4 100644 --- a/src/init/features/dataconnect/sdk.ts +++ b/src/init/features/dataconnect/sdk.ts @@ -93,10 +93,8 @@ async function askQuestions(setup: Setup, config: Config): Promise { { name: "iOS (Swift)", value: Platform.IOS }, { name: "Web (JavaScript)", value: Platform.WEB }, { name: "Android (Kotlin)", value: Platform.ANDROID }, + { name: "Flutter (Dart)", value: Platform.DART }, ]; - if (experiments.isEnabled("fdcdart")) { - platforms.push({ name: "Flutter (Dart)", value: Platform.DART }); - } targetPlatform = await promptOnce({ message: "Which platform do you want to set up a generated SDK for?", type: "list", From 7d9e016b35c5b74b8f140bb4cdff0d8e650868b7 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Mon, 23 Sep 2024 20:45:27 +0100 Subject: [PATCH 6/8] Removed experiment --- src/commands/dataconnect-sdk-generate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/dataconnect-sdk-generate.ts b/src/commands/dataconnect-sdk-generate.ts index 72a4aec73fe..7dd8a81c1e6 100644 --- a/src/commands/dataconnect-sdk-generate.ts +++ b/src/commands/dataconnect-sdk-generate.ts @@ -23,7 +23,7 @@ export const command = new Command("dataconnect:sdk:generate") c.connectorYaml.generate?.javascriptSdk || c.connectorYaml.generate?.kotlinSdk || c.connectorYaml.generate?.swiftSdk || - (experiments.isEnabled("fdcdart") && c.connectorYaml.generate?.dartSdk) + c.connectorYaml.generate?.dartSdk ); }); if (!hasGeneratables) { From 7a1732ee7d5caeb767f100f1e309c78a7107cc3a Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Mon, 23 Sep 2024 20:46:05 +0100 Subject: [PATCH 7/8] Removed unnecessary comment --- src/init/features/dataconnect/sdk.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/init/features/dataconnect/sdk.ts b/src/init/features/dataconnect/sdk.ts index 283e3d3ebb4..1f5e2504f6c 100644 --- a/src/init/features/dataconnect/sdk.ts +++ b/src/init/features/dataconnect/sdk.ts @@ -148,7 +148,6 @@ async function askQuestions(setup: Setup, config: Config): Promise { newConnectorYaml.generate.javascriptSdk = javascriptSdk; } - // We don't have to check if the experiment was enabled since we already made that check above. if (targetPlatform === Platform.DART) { const outputDir = newConnectorYaml.generate.dartSdk?.outputDir || From 4f91fe35cef922450310f113cf9746264f4be2d2 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Mon, 23 Sep 2024 20:53:27 +0100 Subject: [PATCH 8/8] Formatting fixes --- schema/connector-yaml.json | 14 ++++++++++++++ src/commands/dataconnect-sdk-generate.ts | 1 - src/dataconnect/fileUtils.ts | 3 +-- src/emulator/dataconnectEmulator.ts | 1 - src/init/features/dataconnect/sdk.ts | 1 - 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/schema/connector-yaml.json b/schema/connector-yaml.json index da8fc8eab64..127ff352d80 100644 --- a/schema/connector-yaml.json +++ b/schema/connector-yaml.json @@ -20,6 +20,20 @@ } } }, + "dartSdk": { + "additionalProperties": true, + "type": "object", + "properties": { + "outputDir": { + "type": "string", + "description": "Path to the directory where generated files should be written to." + }, + "package": { + "type": "string", + "description": "The package name to use for the generated code." + } + } + }, "kotlinSdk": { "additionalProperties": true, "type": "object", diff --git a/src/commands/dataconnect-sdk-generate.ts b/src/commands/dataconnect-sdk-generate.ts index 7dd8a81c1e6..71763253857 100644 --- a/src/commands/dataconnect-sdk-generate.ts +++ b/src/commands/dataconnect-sdk-generate.ts @@ -7,7 +7,6 @@ import { needProjectId } from "../projectUtils"; import { load } from "../dataconnect/load"; import { readFirebaseJson } from "../dataconnect/fileUtils"; import { logger } from "../logger"; -import * as experiments from "../experiments"; export const command = new Command("dataconnect:sdk:generate") .description("generates typed SDKs for your Data Connect connectors") diff --git a/src/dataconnect/fileUtils.ts b/src/dataconnect/fileUtils.ts index baf44088c3a..edb2e583c03 100644 --- a/src/dataconnect/fileUtils.ts +++ b/src/dataconnect/fileUtils.ts @@ -132,8 +132,7 @@ export async function getPlatformFromFolder(dirPath: string) { hasIOS ||= IOS_INDICATORS.some((indicator) => indicator === cleanedFileName) || IOS_POSTFIX_INDICATORS.some((indicator) => cleanedFileName.endsWith(indicator)); - hasDart ||= - DART_INDICATORS.some((indicator) => indicator === cleanedFileName); + hasDart ||= DART_INDICATORS.some((indicator) => indicator === cleanedFileName); } if (hasWeb && !hasAndroid && !hasIOS && !hasDart) { return Platform.WEB; diff --git a/src/emulator/dataconnectEmulator.ts b/src/emulator/dataconnectEmulator.ts index 6133165007b..e617a6d2dae 100644 --- a/src/emulator/dataconnectEmulator.ts +++ b/src/emulator/dataconnectEmulator.ts @@ -184,7 +184,6 @@ export class DataConnectEmulator implements EmulatorInstance { `--config_dir=${args.configDir}`, `--connector_id=${args.connectorId}`, ]; - const res = childProcess.spawnSync(commandInfo.binary, cmd, { encoding: "utf-8" }); logger.info(res.stderr); diff --git a/src/init/features/dataconnect/sdk.ts b/src/init/features/dataconnect/sdk.ts index 1f5e2504f6c..b9f5697e9d3 100644 --- a/src/init/features/dataconnect/sdk.ts +++ b/src/init/features/dataconnect/sdk.ts @@ -24,7 +24,6 @@ import { DataConnectEmulator } from "../../../emulator/dataconnectEmulator"; import { FirebaseError } from "../../../error"; import { camelCase, snakeCase, upperFirst } from "lodash"; import { logSuccess, logBullet } from "../../../utils"; -import * as experiments from "../../../experiments"; export type SDKInfo = { connectorYamlContents: string;