165 lines
5.0 KiB
Python
165 lines
5.0 KiB
Python
from typing import List, Optional
|
|
from pydantic import BaseModel
|
|
|
|
class ToolMetadata(BaseModel):
|
|
id: str
|
|
name: str
|
|
description: str
|
|
category: str
|
|
tags: List[str]
|
|
type: str # 'client' or 'server'
|
|
endpoint: Optional[str] = None # Only for server type
|
|
|
|
# === 도구 등록소 ===
|
|
# 새로운 기능을 추가할 때 여기만 수정하면 검색/메뉴에 자동 반영되도록 구성합니다.
|
|
TOOLS_REGISTRY = [
|
|
ToolMetadata(
|
|
id="url-parser",
|
|
name="URL Encoder/Decoder",
|
|
description="Encodes or decodes a URL string.",
|
|
category="Web",
|
|
tags=["url", "encode", "decode", "percent-encoding"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="json-formatter",
|
|
name="JSON Formatter",
|
|
description="Prettify or minify JSON data.",
|
|
category="Data",
|
|
tags=["json", "pretty", "minify", "format"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="py-uuid",
|
|
name="UUID Generator",
|
|
description="Generates UUIDs locally (v1/v4).",
|
|
category="Development",
|
|
tags=["uuid", "guid", "random", "client-side"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="png-compressor",
|
|
name="PNG Compressor",
|
|
description="Compress PNG images using pngquant (Lossy, 60-80% reduction).",
|
|
category="Image",
|
|
tags=["image", "png", "compress", "pngquant", "optimize"],
|
|
type="server",
|
|
endpoint="/api/tools/png-compress"
|
|
),
|
|
ToolMetadata(
|
|
id="password-generator",
|
|
name="Password Generator",
|
|
description="Generate secure random passwords locally (Client-side).",
|
|
category="Security",
|
|
tags=["password", "random", "secure", "generator", "client-side"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="jwt-debugger",
|
|
name="JWT Debugger",
|
|
description="Decode and inspect JSON Web Tokens.",
|
|
category="Security",
|
|
tags=["jwt", "token", "decode", "security"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="cron-generator",
|
|
name="Cron Schedule Generator",
|
|
description="Generate and explain cron expressions.",
|
|
category="Utility",
|
|
tags=["cron", "schedule", "time", "generator"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="sql-formatter",
|
|
name="SQL Formatter",
|
|
description="Beautify and format SQL queries.",
|
|
category="Formatters",
|
|
tags=["sql", "format", "database", "query"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="diff-viewer",
|
|
name="Diff Viewer",
|
|
description="Compare text and see differences side-by-side.",
|
|
category="Text",
|
|
tags=["diff", "compare", "text", "code"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="qr-generator",
|
|
name="QR Code Generator",
|
|
description="Generate QR codes from text or URLs.",
|
|
category="Generators",
|
|
tags=["qr", "code", "generator", "image"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="base64-encoder",
|
|
name="Base64 File Encoder",
|
|
description="Convert files to Base64 strings.",
|
|
category="Encoders",
|
|
tags=["base64", "encode", "file", "image"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="json-converter",
|
|
name="JSON Converter",
|
|
description="Convert between JSON, CSV, and YAML.",
|
|
category="Converters",
|
|
tags=["json", "csv", "yaml", "convert"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="regex-tester",
|
|
name="Regex Tester",
|
|
description="Test regular expressions in real-time.",
|
|
category="Text",
|
|
tags=["regex", "test", "pattern", "match"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="docker-converter",
|
|
name="Docker Converter",
|
|
description="Convert between Docker Run and Docker Compose.",
|
|
category="DevOps",
|
|
tags=["docker", "compose", "convert", "devops"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="mock-data-generator",
|
|
name="Mock Data Generator",
|
|
description="Generate random user data for testing.",
|
|
category="Generators",
|
|
tags=["mock", "data", "fake", "generator"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="svg-optimizer",
|
|
name="SVG Optimizer",
|
|
description="Optimize and minify SVG code.",
|
|
category="Image",
|
|
tags=["svg", "optimize", "minify", "image"],
|
|
type="client"
|
|
),
|
|
ToolMetadata(
|
|
id="video-to-gif",
|
|
name="Video to GIF",
|
|
description="Convert video clips to GIF format.",
|
|
category="Video",
|
|
tags=["video", "gif", "convert", "ffmpeg"],
|
|
type="server",
|
|
endpoint="/api/tools/video/gif"
|
|
)
|
|
]
|
|
|
|
def search_tools(query: str = "") -> List[ToolMetadata]:
|
|
if not query:
|
|
return TOOLS_REGISTRY
|
|
|
|
q = query.lower()
|
|
return [
|
|
t for t in TOOLS_REGISTRY
|
|
if q in t.name.lower() or q in t.description.lower() or any(q in tag for tag in t.tags)
|
|
]
|