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

AI Code Review: Comprehensive Analysis & Refactoring Suggestions

Workflow Step: 1 of 2 (collab → analyze_code)

Description: This deliverable provides a comprehensive, detailed code review for the submitted code, identifying areas for improvement in terms of readability, maintainability, performance, error handling, security, and adherence to best practices. Each finding is accompanied by specific, actionable suggestions and refactored code examples.


1. Overview of Code Under Review

The following Python function, process_user_data, was submitted for review. It aims to process a JSON string containing user records, calculate user ages, determine activity status, extract email domains, and log processing activities.

text • 1,307 chars
### 2. Summary of Findings

The `process_user_data` function provides basic functionality for processing user data. However, our review highlights several critical areas for improvement:

*   **Performance Bottleneck:** Excessive file I/O within a loop significantly impacts performance.
*   **Fragile Date Parsing:** Manual string splitting for dates is prone to errors.
*   **Inconsistent Error Handling:** Errors are logged but not always clearly propagated or handled gracefully.
*   **Lack of Robust Validation:** Email and DOB parsing lack comprehensive validation, leading to potential data quality issues.
*   **Suboptimal Logging:** Manual logging is less flexible and harder to manage than using Python's `logging` module.
*   **Readability & Maintainability:** Some patterns could be simplified for better clarity.

### 3. Detailed Review & Refactoring Suggestions

This section provides a categorized breakdown of findings, including problematic code snippets and recommended refactored versions.

#### 3.1. Performance & Resource Management

**Finding:** The function opens and closes the log file (`app.log`) for *each* user record processed within the loop. This causes significant I/O overhead, especially with a large number of records, leading to poor performance.

**Problematic Code:**
Sandboxed live preview

python

import re # Import regular expression module

... within the loop ...

email_domain = None

if email and isinstance(email, str): # Ensure email is a non-empty string

# Basic check for single '@' and non-empty parts

if email.count('@') == 1:

parts = email.split('@')

if parts[0] and parts[1]: # Ensure both local part and domain exist

email_domain = parts[1]

if not

collab Output

Step 2 of 2: AI Code Review - collab → ai_refactor

Overview

Welcome to the final step of your "AI Code Review" workflow. This phase, collab → ai_refactor, focuses on delivering a comprehensive, detailed, and actionable code review. Our AI will analyze your submitted code for quality, performance, security, maintainability, and scalability, providing specific suggestions and refactoring opportunities to enhance your codebase.

The goal is to not only identify areas for improvement but also to offer concrete, implementable solutions and best practice recommendations, enabling your team to build more robust, efficient, and maintainable software.


How to Submit Your Code for Review

To proceed with this detailed AI Code Review, please provide the code you wish to have analyzed. You can submit your code by:

  • Pasting the code directly into the chat interface.
  • Providing a link to a public repository (e.g., GitHub, GitLab) or a specific file within it.
  • Attaching a file (e.g., .zip, .tar.gz, .txt, .py, .js, etc.) containing your codebase.

Please specify the primary language(s) used and any relevant frameworks or libraries, as this helps the AI tailor its analysis.


Illustrative Code Review Structure (Awaiting Code Submission)

Below is the detailed structure our AI will follow to deliver your comprehensive code review once your code is submitted. Each section will contain specific findings, explanations, and actionable recommendations tailored to your codebase.


1. Executive Summary & Key Observations

  • High-Level Assessment: An overall summary of the codebase's strengths and weaknesses.
  • Critical Issues Identified: A concise list of the most pressing concerns (e.g., major security flaws, performance bottlenecks, architectural debt).
  • Refactoring Potential: An overview of the most significant opportunities for code improvement.
  • Overall Code Health Score: (If applicable and measurable) A qualitative or quantitative assessment of the codebase's current state.

2. Code Quality & Readability

  • Naming Conventions: Analysis of variable, function, class, and file naming for clarity, consistency, and adherence to language-specific conventions.

Example:* "Function util_proc_data could be renamed to process_data_utility for better clarity."

  • Code Clarity & Simplicity: Evaluation of logical flow, use of comments, and overall ease of understanding.

Example:* "Complex nested if-else statements in calculate_discount could be refactored using a Strategy pattern for improved readability."

  • Documentation: Assessment of inline comments, docstrings, and external documentation (if provided).
  • Code Duplication (DRY Principle): Identification of repeated code blocks and suggestions for abstraction.

Example:* "The data validation logic in user_signup and user_profile_update is identical; consider extracting it into a shared validate_user_input function."

  • Function/Method Size & Complexity: Analysis of function length and cyclomatic complexity.

Example:* "Function process_large_report exceeds ideal complexity thresholds; break it down into smaller, more focused functions like fetch_report_data, transform_report_data, and generate_report_output."

3. Performance Considerations

  • Algorithmic Efficiency: Review of algorithms for time and space complexity, identifying potential bottlenecks.

Example:* "The current implementation of search_database_records uses a linear scan on a large dataset; consider indexing the item_id column or using a more efficient data structure."

  • Resource Utilization: Analysis of memory usage, CPU cycles, and I/O operations.

Example:* "Multiple database queries are executed within a loop in fetch_related_items; consider batching these queries or using an ORM's eager loading feature to reduce database roundtrips."

  • Concurrency & Parallelism: Suggestions for utilizing concurrent programming constructs where appropriate to improve throughput.
  • Caching Opportunities: Identification of areas where caching could reduce computation or data retrieval times.

4. Security Vulnerabilities & Best Practices

  • Input Validation: Identification of insufficient input validation leading to potential injection attacks (SQL, XSS, Command Injection).

Example:* "User-supplied input in query_database_by_id is directly concatenated into the SQL query without parameterization, creating a SQL injection vulnerability."

  • Authentication & Authorization: Review of security mechanisms for user authentication and access control.
  • Sensitive Data Handling: Assessment of how sensitive information (e.g., passwords, API keys) is stored, transmitted, and processed.
  • Dependency Vulnerabilities: (If dependencies are provided) Flagging known vulnerabilities in third-party libraries.
  • Error Message Disclosure: Checking for overly verbose error messages that could leak sensitive system information.

5. Maintainability & Scalability

  • Modularity & Decoupling: Evaluation of how well components are separated and interact.

Example:* "The User model directly handles both data persistence and business logic; separate these concerns by introducing a UserRepository or UserService."

  • Testability: Assessment of how easily the code can be unit, integration, and end-to-end tested.
  • Extensibility: Identification of areas where adding new features or modifying existing ones could be challenging.
  • Configuration Management: Review of how configurations are managed and if they support different environments.

6. Error Handling & Robustness

  • Exception Handling: Analysis of try-catch blocks, error propagation, and custom exception usage.

Example:* "Many functions return null or false on failure without clear error messages; consider throwing specific exceptions for different error conditions."

  • Edge Case Management: Identification of unhandled edge cases that could lead to crashes or unexpected behavior.
  • Logging: Review of logging practices for consistency, detail, and appropriateness.

7. Refactoring Suggestions (Detailed & Actionable)

This section will be highly specific to your submitted code. It will pinpoint exact code blocks and provide suggested improvements.

  • Extract Method/Function:

Original Code Snippet:* (Provided by user)

Issue:* "This block of code performs multiple distinct operations and reduces readability."

Refactored Suggestion:* "Extract the data validation logic into a new private method _validate_input_parameters(). Extract the database interaction into _save_user_data()."

Example Code (Illustrative):*


        # BEFORE
        def process_request(data):
            # ... validation logic ...
            if not is_valid:
                return error
            # ... database save logic ...
            db.save(data)
            # ... response generation ...
            return success_response

        # AFTER
        def _validate_input_parameters(data):
            # ... validation logic ...
            return is_valid, error_message

        def _save_user_data(data):
            # ... database save logic ...
            db.save(data)

        def process_request(data):
            is_valid, error_message = _validate_input_parameters(data)
            if not is_valid:
                return error_message
            _save_user_data(data)
            return success_response
  • Introduce Strategy/Factory Pattern:

Issue:* "A large conditional block (if-elif-else) determines behavior based on a type parameter, violating the Open/Closed Principle."

Refactored Suggestion:* "Implement a Strategy pattern where each 'type' is a separate strategy class, and a factory creates the appropriate strategy object."

  • Replace Magic Numbers/Strings with Constants:

Issue:* "Hardcoded values like 3.14159 or 'admin' are scattered throughout the codebase."

Refactored Suggestion:* "Define these values as named constants (e.g., MATH_PI, ROLE_ADMIN) in a dedicated constants file or class."

  • Simplify Conditional Expressions:

Issue:* "Overly complex boolean logic makes conditions hard to understand."

Refactored Suggestion:* "Break down complex conditions into smaller, named boolean variables or use guard clauses."

  • Apply Dependency Injection:

Issue:* "Classes directly instantiate their dependencies, making them tightly coupled and hard to test."

Refactored Suggestion:* "Inject dependencies through constructors or setter methods."

8. Best Practices & Design Pattern Alignment

  • Adherence to SOLID Principles: Evaluation of Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion Principles.
  • Common Design Patterns: Suggestions for applying relevant design patterns (e.g., Observer, Decorator, Adapter, Builder) to improve structure and flexibility.
  • Language/Framework Specific Best Practices: Recommendations aligned with the idiomatic usage of the chosen programming language and frameworks.

9. Actionable Recommendations & Prioritization

  • Prioritized List: A clear list of all identified issues and refactoring suggestions, categorized by priority (e.g., Critical, High, Medium, Low).
  • Estimated Effort (Optional): A high-level estimate of the effort required for each recommendation (if sufficient context is provided).
  • Impact Assessment: Explanation of the potential benefits of implementing each recommendation.

10. Next Steps

  • Review and Feedback: Encouragement to review the provided analysis and ask any clarifying questions.
  • Implementation Guidance: Offer to provide more detailed code examples or further consultation on specific refactoring tasks.

Please provide your code now to initiate this comprehensive AI-driven code review.

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);}});}