From 99978a61c7c0606e3e0e3ba6faf878db65008d69 Mon Sep 17 00:00:00 2001 From: Sam Olsen Date: Mon, 6 May 2024 15:34:05 -0700 Subject: [PATCH] Update init command to play nice with Functions eslint default settings --- .../config/firebase.index.ts.template | 16 +++---- genkit-tools/src/commands/init.ts | 44 ++++++++++++++++--- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/genkit-tools/config/firebase.index.ts.template b/genkit-tools/config/firebase.index.ts.template index 6b9a24027c..f140256958 100644 --- a/genkit-tools/config/firebase.index.ts.template +++ b/genkit-tools/config/firebase.index.ts.template @@ -1,27 +1,27 @@ -import { generate } from '@genkit-ai/ai'; -import { configureGenkit } from '@genkit-ai/core'; -import { firebaseAuth } from '@genkit-ai/firebase/auth'; -import { onFlow } from '@genkit-ai/firebase/functions'; +import {generate} from "@genkit-ai/ai"; +import {configureGenkit} from "@genkit-ai/core"; +import {firebaseAuth} from "@genkit-ai/firebase/auth"; +import {onFlow} from "@genkit-ai/firebase/functions"; $GENKIT_MODEL_IMPORT -import * as z from 'zod'; +import * as z from "zod"; $GENKIT_CONFIG_IMPORTS configureGenkit({ plugins: [ $GENKIT_CONFIG_PLUGINS ], - logLevel: 'debug', + logLevel: "debug", enableTracingAndMetrics: true, }); export const jokeFlow = onFlow( { - name: 'jokeFlow', + name: "jokeFlow", inputSchema: z.string(), outputSchema: z.string(), authPolicy: firebaseAuth((user) => { if (!user.email_verified) { - throw new Error('Verified email required to run flow'); + throw new Error("Verified email required to run flow"); } }), }, diff --git a/genkit-tools/src/commands/init.ts b/genkit-tools/src/commands/init.ts index a95e307028..a06fa7aa2d 100644 --- a/genkit-tools/src/commands/init.ts +++ b/genkit-tools/src/commands/init.ts @@ -59,6 +59,13 @@ interface InitOptions { distArchive: string; } +interface ImportOptions { + // Spacing around brackets in import + spacer: ' ' | ''; + // Single or double quotes for import + quotes: '"' | "'"; +} + /** Supported platform to plugin name. */ const platformOptions: Record = { firebase: { label: 'Firebase', plugin: '@genkit-ai/firebase' }, @@ -84,6 +91,13 @@ const modelOptions: Record = { none: { label: 'None', plugin: undefined }, }; +const platformImportOptions: Record = { + firebase: { spacer: '', quotes: '"' }, + googlecloud: { spacer: ' ', quotes: "'" }, + nodejs: { spacer: ' ', quotes: "'" }, + nextjs: { spacer: ' ', quotes: "'" }, +}; + /** External packages required to use Genkit. */ const externalPackages = ['zod', 'express']; @@ -323,12 +337,17 @@ function generateSampleFile( ) { const modelImport = modelPlugin && pluginToInfo[modelPlugin].model - ? `import { ${pluginToInfo[modelPlugin].model} } from '${modelPlugin}';` + ? generateImportStatement( + pluginToInfo[modelPlugin].model!, + modelPlugin, + platformImportOptions[platform] + ) : ''; const templatePath = path.join(__dirname, sampleTemplatePaths[platform]); let template = fs.readFileSync(templatePath, 'utf8'); const sample = renderConfig( configPlugins, + platform, template .replace('$GENKIT_MODEL_IMPORT', modelImport) .replace( @@ -356,11 +375,18 @@ function generateSampleFile( fs.writeFileSync(samplePath, sample, 'utf8'); } -function renderConfig(pluginNames: string[], template: string): string { +function renderConfig( + pluginNames: string[], + platform: Platform, + template: string +): string { const imports = pluginNames - .map( - (pluginName) => - `import { ${pluginToInfo[pluginName].imports} } from '${pluginName}';` + .map((pluginName) => + generateImportStatement( + pluginToInfo[pluginName].imports, + pluginName, + platformImportOptions[platform] + ) ) .join('\n'); const plugins = @@ -372,6 +398,14 @@ function renderConfig(pluginNames: string[], template: string): string { .replace('$GENKIT_CONFIG_PLUGINS', plugins); } +function generateImportStatement( + imports: string, + name: string, + opts: ImportOptions +): string { + return `import {${opts.spacer}${imports}${opts.spacer}} from ${opts.quotes}${name}${opts.quotes};`; +} + /** * Prompts for what type of write to perform when there is a conflict. */