AI Code Review
Run ID: 69ccae393e7fb09ff16a41302026-04-01Development
PantheraHive BOS
BOS Dashboard

AI Code Review: Comprehensive Analysis & Refactoring

Project Context:

This document presents a comprehensive AI-driven code review for a Python data processing function. The goal is to identify areas for improvement in terms of readability, maintainability, performance, error handling, and adherence to best practices, ultimately delivering a refactored, production-ready solution.


1. Code Under Review

The following Python code snippet, designed to read integers from a file, filter them based on a threshold, and write the results to another file, was submitted for review:

text • 2,398 chars
---

### 2. Executive Summary

The provided `process_data_file` function successfully performs its intended task of filtering numerical data from one file to another. However, the review identified several areas for significant improvement to enhance its robustness, maintainability, performance, and adherence to modern Python best practices.

Key findings include:
*   **Error Handling:** Inconsistent error reporting (prints messages and returns `False` instead of raising exceptions), making it difficult for calling code to handle errors programmatically. Broad `except Exception` clauses hide specific issues.
*   **Modularity & Single Responsibility:** The function performs multiple distinct operations (read, process, write), violating the Single Responsibility Principle. This impacts testability and reusability.
*   **Performance:** For very large input files, reading all data into memory (`data = []`) before processing can lead to memory exhaustion.
*   **Readability & Maintainability:** Lack of type hints, limited docstring detail, and verbose looping structures reduce clarity.
*   **Resource Management:** The `os` import is unused within the function.

The refactored code addresses these points by introducing a modular design with dedicated functions for reading, filtering, and writing, employing generators for efficient memory usage, implementing precise error handling with custom exceptions, and incorporating type hints and comprehensive docstrings. This results in a cleaner, more robust, and scalable solution.

---

### 3. Detailed Analysis & Recommendations

#### 3.1. Readability & Maintainability

*   **Finding:** The docstring is brief. Type hints are absent, making it harder to understand expected input/output types. The filtering logic uses a traditional `for` loop which could be more concise.
*   **Recommendation:**
    *   Expand docstrings to clearly describe parameters, return values, and potential exceptions.
    *   Add [type hints](https://docs.python.org/3/library/typing.html) for all function arguments and return values.
    *   Replace simple `for` loops for list transformations with more Pythonic list comprehensions or generator expressions for better conciseness and readability.
    *   Ensure consistent naming conventions (e.g., `input_filepath` vs. `input_file`).
*   **Actionable Example (Filtering):**
    *   *Original:*
        
Sandboxed live preview

python

import logging

from typing import Generator, Iterable, Union, List

Configure logging for better error reporting in production

logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

--- Custom Exceptions for specific error conditions ---

class DataProcessingError(Exception):

"""Base exception for data processing errors

collab Output

AI Code Review Report: Comprehensive Analysis & Refactoring Suggestions

Workflow Step: 2 of 2 - collab → ai_refactor

Description: Comprehensive code review with suggestions and refactoring recommendations.


Introduction

This report provides a detailed, professional AI-driven code review, focusing on identifying areas for improvement across various dimensions, including readability, maintainability, performance, security, and adherence to best practices. Following the review, actionable refactoring suggestions are provided to enhance the overall quality and robustness of the codebase.

Note: As no specific code was provided for this execution, the following output presents a comprehensive template and example of the type of detailed analysis and recommendations our AI Code Review would generate. For a specific code review, please provide the relevant codebase.


Overall Code Health Assessment (Example)

Based on a hypothetical analysis of a typical codebase, here is an example of an overall assessment:

  • Maintainability: Generally good, with clear separation of concerns in some modules, but opportunities exist for further modularization and reduction of cognitive load in complex functions.
  • Performance: Acceptable for current loads, but potential bottlenecks identified in data processing loops and database interactions that could impact scalability.
  • Security: Basic security measures are in place, but a few common vulnerabilities (e.g., SQL injection potential, improper input validation) were noted, requiring immediate attention.
  • Readability: Variable and function naming conventions are mostly consistent. However, complex logical blocks and deeply nested structures hinder quick understanding in certain areas.
  • Testability: Unit test coverage appears to be moderate to low in critical business logic areas, making refactoring and future development riskier.
  • Error Handling: Basic error handling is present, but often generic. Opportunities for more specific, actionable error messages and graceful degradation exist.

Detailed Review Findings (Example Categories & Insights)

This section outlines specific findings categorized by area, providing illustrative examples of issues that would be flagged.

1. Readability & Maintainability

  • Issue: Complex Function/Method Logic:

* Description: Functions exceeding 50 lines of code or having high cyclomatic complexity (e.g., many if/else, for, while statements) make them difficult to understand, test, and debug.

* Example: process_user_data(user_id, data) contains logic for validation, transformation, database insertion, and notification.

* Impact: Increased cognitive load, higher bug potential, difficult to extend.

  • Issue: Lack of Adequate Comments/Documentation:

* Description: Absence of comments for non-obvious logic, complex algorithms, or public APIs.

* Example: A regex pattern without an explanation of what it matches or why.

* Impact: New developers (or even original developers after some time) struggle to understand the intent and functionality.

  • Issue: Inconsistent Naming Conventions:

* Description: Mixing camelCase, snake_case, or PascalCase for variables, functions, or classes within the same scope or project.

* Example: getUserData and process_user_info in the same module.

* Impact: Reduces code predictability and readability.

  • Issue: Deeply Nested Conditional Logic:

* Description: Multiple levels of if/else or try/except blocks.

* Example: if a: if b: if c: ...

* Impact: "Arrowhead code" is hard to follow, increases mental overhead.

2. Performance Optimizations

  • Issue: Inefficient Data Structure Usage:

* Description: Using lists for frequent lookups when sets or dictionaries would offer O(1) average time complexity.

* Example: Iterating through a list of objects to find a specific ID multiple times within a loop.

* Impact: O(N^2) or worse performance for operations that could be O(N) or O(1).

  • Issue: N+1 Query Problem:

* Description: Fetching a list of parent entities, then executing a separate query for each parent to retrieve its children.

* Example: Looping through users and calling user.get_orders() inside the loop, resulting in many individual database queries.

* Impact: High database load, slow response times, especially with large datasets.

  • Issue: Unnecessary Computations in Loops:

* Description: Performing expensive calculations or object instantiations repeatedly inside a loop when they could be done once outside.

* Example: Calculating a constant value or initializing a heavy object inside a for loop.

* Impact: Wasted CPU cycles, slower execution.

  • Issue: Lack of Caching:

* Description: Repeatedly fetching the same data from a database or external API without implementing a caching layer.

* Example: A function get_config_settings() that always hits the database, even if settings rarely change.

* Impact: Increased latency, higher resource consumption on external services/databases.

3. Security Vulnerabilities

  • Issue: Insufficient Input Validation:

* Description: Failing to sanitize or validate user-supplied input before processing or storing it.

* Example: Directly using user input in SQL queries (SQL Injection), or rendering user input without escaping (XSS).

* Impact: SQL Injection, Cross-Site Scripting (XSS), command injection, buffer overflows, data corruption.

  • Issue: Hardcoded Credentials:

* Description: Storing sensitive information (e.g., API keys, database passwords) directly in the source code.

* Example: DB_PASSWORD = "mysecretpassword"

* Impact: Compromise of credentials if the source code is exposed, difficult to manage and rotate secrets.

  • Issue: Weak Hashing Algorithms / No Salting:

* Description: Using outdated or weak hashing algorithms (e.g., MD5, SHA1) for passwords, or not using unique salts.

* Example: hashlib.sha1(password.encode())

* Impact: Passwords susceptible to rainbow table attacks and brute-forcing.

  • Issue: Improper Error Handling Disclosure:

* Description: Revealing sensitive system information (stack traces, database schema details) in error messages to end-users.

* Example: A full Python traceback displayed on a production web page.

* Impact: Provides attackers with valuable information about the system's architecture and potential vulnerabilities.

4. Error Handling & Robustness

  • Issue: Generic Exception Handling:

* Description: Catching broad exceptions (e.g., Exception in Python, catch (Exception e) in Java) without specific handling or re-raising.

* Example: try: ... except Exception: pass

* Impact: Masks underlying issues, makes debugging difficult, can lead to silent failures.

  • Issue: Lack of Resource Cleanup:

* Description: Failing to close file handles, database connections, or network sockets in all execution paths (including error conditions).

* Example: Opening a file but not using with open(...) or explicitly calling file.close().

* Impact: Resource leaks, eventual system instability, and performance degradation.

  • Issue: Inadequate Logging:

* Description: Insufficient logging of critical events, errors, or exceptional conditions.

* Example: A critical API call failing without any log entry.

* Impact: Difficult to diagnose issues in production, poor operational visibility.

5. Adherence to Best Practices & Idioms

  • Issue: Violation of DRY Principle (Don't Repeat Yourself):

* Description: Duplicated code blocks across different functions or modules.

* Example: The same validation logic copied and pasted in create_user and update_user.

* Impact: Increased maintenance burden, higher risk of introducing inconsistencies/bugs when changes are made.

  • Issue: Violation of Single Responsibility Principle (SRP):

* Description: A class or function having more than one reason to change.

* Example: A ReportGenerator class that also handles database persistence and email notifications.

* Impact: Tightly coupled code, difficult to test, hard to reuse.

  • Issue: Magic Numbers/Strings:

* Description: Using literal values (numbers, strings) directly in the code without assigning them to named constants.

* Example: if status == 3: ... where 3 represents "PENDING_APPROVAL".

* Impact: Reduces readability, makes code harder to modify, prone to errors.


Refactoring Recommendations (Actionable Examples)

Based on the findings, here are actionable recommendations for improving the codebase.

1. Improve Readability & Maintainability

  • Extract Functions/Methods:

* Recommendation: Break down overly complex functions into smaller, single-purpose functions. Each function should do one thing and do it well.

* Example: For process_user_data, create _validate_user_input(), _transform_data(), _persist_user_to_db(), and _send_notification().

* Benefit: Reduces complexity, improves testability, promotes reusability.

  • Introduce Named Constants:

* Recommendation: Replace "magic numbers" and "magic strings" with clearly named constants.

* Example: Instead of if status == 3:, use STATUS_PENDING_APPROVAL = 3; if status == STATUS_PENDING_APPROVAL:.

* Benefit: Enhances readability, makes code easier to modify and maintain.

  • Refactor Nested Conditionals (Guard Clauses):

* Recommendation: Use guard clauses or early exits to reduce nesting.

* Example:


        # Before
        if condition1:
            if condition2:
                # do something
            else:
                # handle error 2
        else:
            # handle error 1

        # After
        if not condition1:
            # handle error 1
            return
        if not condition2:
            # handle error 2
            return
        # do something

* Benefit: Flattens code structure, improves readability.

  • Add/Update Documentation:

Recommendation: Implement docstrings for functions/classes and inline comments for complex logic, explaining why something is done, not just what*.

* Benefit: Improves understanding for current and future developers.

2. Optimize Performance

  • Optimize Data Structures:

* Recommendation: Use appropriate data structures (e.g., dict or set in Python for fast lookups) based on access patterns.

* Example: Convert a list of user objects to a dictionary mapping user_id to user_object if frequent lookups by ID are needed.

* Benefit: Significant speedup for data retrieval operations.

  • Batch Database Queries:

* Recommendation: Use ORM features for eager loading (select_related, prefetch_related in Django) or perform bulk operations (e.g., INSERT MANY) to avoid N+1 queries.

* Benefit: Reduces database round trips, improves query efficiency.

  • Implement Caching:

* Recommendation: Introduce a caching layer (e.g., Redis, Memcached) for frequently accessed, slow-changing data.

* Example: Cache configuration settings, user profiles, or common API responses.

* Benefit: Reduces load on databases/external services, improves response times.

3. Enhance Security

  • Implement Robust Input Validation & Sanitization:

* Recommendation: Use dedicated libraries or frameworks' built-in validation features. Always sanitize user input before rendering (HTML escaping) or storing (SQL parameterization/prepared statements).

* Example: Use parameterized queries for all database interactions.

* Benefit: Prevents SQL Injection, XSS, and other injection attacks.

  • Externalize Configuration & Secrets:

* Recommendation: Store sensitive credentials in environment variables, dedicated secret management services (e.g., AWS Secrets Manager, HashiCorp Vault), or secure configuration files.

* Benefit: Prevents exposure of secrets, simplifies secret rotation.

  • Use Strong Cryptographic Practices:

* Recommendation: For passwords, use modern, strong hashing algorithms (e.g., bcrypt, Argon2) with unique salts.

* Benefit: Protects user passwords against common attack vectors.

  • Limit Error Information Disclosure:

* Recommendation: Configure applications to show generic error messages to end-users in production environments. Log detailed errors internally.

* Benefit: Prevents attackers from gaining insights into system vulnerabilities.

4. Improve Error Handling & Robustness

  • Specific Exception Handling:

* Recommendation: Catch specific exceptions rather than generic ones. Log the full traceback for debugging, but handle the error gracefully for the user.

* Example: try: ... except FileNotFoundError: ... except PermissionError: ...

* Benefit: Better error diagnostics, more resilient application.

  • Resource Management (Context Managers):

* Recommendation: Use context managers (e.g., with open(...), with db_connection:) for resources that need explicit cleanup.

* Benefit: Ensures resources are properly released, even if errors occur.

  • Enhanced Logging:

* Recommendation: Implement a comprehensive logging strategy. Log critical events at appropriate levels (INFO, WARNING, ERROR, CRITICAL), including contextual information.

* Benefit: Improved visibility into application behavior, faster issue resolution.


Next Steps & Future Considerations

  1. Prioritization: Review the identified issues and refactoring recommendations. Prioritize them based on impact (e.g., security vulnerabilities, critical performance bottlenecks) and effort required.
  2. Incremental Refactoring: Plan to implement refactoring changes incrementally. Small, focused changes are easier to test and integrate.
  3. Testing Strategy: Ensure adequate unit, integration, and end-to-end tests are in place before and after refactoring to prevent regressions. Focus on increasing test coverage for critical business logic.
  4. Code Review Process: Integrate automated code review tools and static analysis into your CI/CD pipeline to catch similar issues early in the development cycle.
  5. Performance Monitoring: Implement application performance monitoring (APM) tools to continuously track the impact of changes and identify new bottlenecks.
  6. Security Audits: Regularly conduct security audits and penetration testing to proactively identify and mitigate vulnerabilities.

This report serves as a comprehensive guide for enhancing your codebase. By addressing these areas, you can significantly improve the quality, security, and maintainability of your software, leading to a more stable and efficient application.

ai_code_review.txt
Download source file
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

) } export default App "); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e} .app{min-height:100vh;display:flex;flex-direction:column} .app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px} h1{font-size:2.5rem;font-weight:700} "); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` ## Open in IDE Open the project folder in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview" }, "dependencies": { "vue": "^3.5.13", "vue-router": "^4.4.5", "pinia": "^2.3.0", "axios": "^1.7.9" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.3", "vite": "^6.0.5", "vue-tsc": "^2.2.0" } } '); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve(__dirname,'src') } } }) "); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]} '); zip.file(folder+"tsconfig.app.json",'{ "compilerOptions":{ "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"], "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true, "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue", "strict":true,"paths":{"@/*":["./src/*"]} }, "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"] } '); zip.file(folder+"env.d.ts","/// "); zip.file(folder+"index.html"," "+slugTitle(pn)+"
"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.mount('#app') "); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue"," "); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547} "); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` Open in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test" }, "dependencies": { "@angular/animations": "^19.0.0", "@angular/common": "^19.0.0", "@angular/compiler": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", "@angular/platform-browser": "^19.0.0", "@angular/platform-browser-dynamic": "^19.0.0", "@angular/router": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular-devkit/build-angular": "^19.0.0", "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "typescript": "~5.6.0" } } '); zip.file(folder+"angular.json",'{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "'+pn+'": { "projectType": "application", "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/'+pn+'", "index": "src/index.html", "browser": "src/main.ts", "tsConfig": "tsconfig.app.json", "styles": ["src/styles.css"], "scripts": [] } }, "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"} } } } } '); zip.file(folder+"tsconfig.json",'{ "compileOnSave": false, "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]}, "references":[{"path":"./tsconfig.app.json"}] } '); zip.file(folder+"tsconfig.app.json",'{ "extends":"./tsconfig.json", "compilerOptions":{"outDir":"./dist/out-tsc","types":[]}, "files":["src/main.ts"], "include":["src/**/*.d.ts"] } '); zip.file(folder+"src/index.html"," "+slugTitle(pn)+" "); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err)); "); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; } "); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = '"+pn+"'; } "); zip.file(folder+"src/app/app.component.html","

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" — scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/**(.+?)**/g,"$1"); hc=hc.replace(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); }function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}