UNPKG

yosi.ai

Version:

AI-powered code generation tool using Google's Gemini API

257 lines (203 loc) 6.45 kB
# API Usage Guide for yosi.ai This guide explains how to use yosi.ai programmatically in your Node.js applications. ## Table of Contents - [Installation](#installation) - [Basic Code Generation](#basic-code-generation) - [Advanced Code Generation](#advanced-code-generation) - [Modifying Existing Code](#modifying-existing-code) - [Code Analysis](#code-analysis) - [Project Scaffolding](#project-scaffolding) - [Test Generation](#test-generation) ## Installation ```bash npm install yosi.ai ``` ## Basic Code Generation ```javascript const { generateCode } = require('yosi'); const { saveToFile, displayCode } = require('yosi/src/output-handler'); async function generateSimpleCode() { try { // Generate a simple function const command = "create a function that calculates the factorial of a number"; const language = "javascript"; const generatedCode = await generateCode(command, language); // Display the generated code displayCode(generatedCode, language); // Save the generated code to a file saveToFile(generatedCode, 'factorial.js'); } catch (error) { console.error('Error:', error.message); } } // Make sure to set the GEMINI_API_KEY environment variable generateSimpleCode(); ``` ## Advanced Code Generation ```javascript const { generateAdvancedCode } = require('yosi/src/advanced-ai-handler'); const { saveToFile } = require('yosi/src/output-handler'); async function generateAdvancedExample() { try { // Generate a React component const reactCode = await generateAdvancedCode({ command: "create a Button component with primary and secondary variants", language: "jsx", framework: "react", includeComments: true, model: "gemini-2.5-flash-preview-04-17" // Optional: specify the model }); saveToFile(reactCode, 'Button.jsx'); // Generate code with existing code as a base const existingCode = ` function UserProfile() { // TODO: Implement user profile } `; const extendedCode = await generateAdvancedCode({ command: "complete this UserProfile component to display user's name, email, and avatar", language: "jsx", framework: "react", existingCode: existingCode, includeComments: true }); saveToFile(extendedCode, 'UserProfile.jsx'); } catch (error) { console.error('Error:', error.message); } } ``` ## Modifying Existing Code yosi.js provides powerful capabilities for modifying existing code through its refactoring API. ### Basic Code Modification ```javascript const { refactorCode } = require('yosi/src/refactor'); async function modifyExistingCode() { try { // Refactor a file to ES6 syntax const refactoredCode = await refactorCode({ filePath: 'src/utils.js', command: 'convert to ES6', outputPath: 'src/utils.es6.js' }); console.log('Code refactored successfully!'); } catch (error) { console.error('Error:', error.message); } } ``` ### Targeted Code Modification You can target specific sections of code for modification: ```javascript const { refactorCode } = require('yosi/src/refactor'); async function targetedCodeModification() { try { // Add error handling to a specific function await refactorCode({ filePath: 'src/auth.js', command: 'add error handling', outputPath: 'src/auth.improved.js', targetSection: 'authenticateUser', // Target a specific function preserveStructure: true // Preserve the overall code structure }); console.log('Function updated with error handling!'); } catch (error) { console.error('Error:', error.message); } } ``` ### Complete Code Rewrite For more extensive changes, you can disable structure preservation: ```javascript const { refactorCode } = require('yosi/src/refactor'); async function completeCodeRewrite() { try { // Completely modernize a legacy file await refactorCode({ filePath: 'src/legacy.js', command: 'modernize with ES6+ features, promises, and async/await', outputPath: 'src/modern.js', preserveStructure: false // Allow complete rewrite }); console.log('Code completely modernized!'); } catch (error) { console.error('Error:', error.message); } } ``` ## Code Analysis ```javascript const { analyzeCode } = require('yosi/src/refactor'); async function analyzeMyCode() { try { // Analyze a file for potential improvements const analysis = await analyzeCode('src/utils.js'); console.log('Code Analysis:'); console.log(analysis); } catch (error) { console.error('Error:', error.message); } } ``` ## Project Scaffolding ```javascript const { scaffoldProject } = require('yosi/src/scaffold'); async function createProject() { try { // Scaffold a React project const projectDir = await scaffoldProject({ projectName: 'my-app', projectType: 'react', description: 'A sample React application', outputDir: './projects' }); console.log(`Project created at: ${projectDir}`); } catch (error) { console.error('Error:', error.message); } } ``` ## Test Generation ```javascript const { generateTests, generateTestSuite } = require('yosi/src/test-generator'); async function generateMyTests() { try { // Generate tests for a single file await generateTests({ filePath: 'src/utils.js', testFramework: 'jest', outputPath: 'tests/utils.test.js' }); // Generate tests for a directory const testFiles = await generateTestSuite({ directory: 'src/components', testFramework: 'jest', outputDirectory: 'tests/components', extensions: ['.js', '.jsx'] }); console.log(`Generated ${testFiles.length} test files`); } catch (error) { console.error('Error:', error.message); } } ``` ## Error Handling Always wrap your API calls in try-catch blocks to handle potential errors: ```javascript try { const result = await refactorCode({ filePath: 'src/utils.js', command: 'optimize', outputPath: 'src/utils.optimized.js' }); console.log('Success!'); } catch (error) { console.error('Error:', error.message); // Check for specific error types if (error.message.includes('API key')) { console.error('Please check your Gemini API key'); } else if (error.message.includes('File not found')) { console.error('The specified file does not exist'); } } ```