@geenius/tools 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +62 -3
- package/packages/convex/shared/README.md +1 -1
- package/packages/devtools/dist/index.d.ts +204 -0
- package/packages/devtools/dist/index.js +186 -0
- package/packages/devtools/dist/index.js.map +1 -0
- package/packages/devtools/react/README.md +1 -1
- package/packages/devtools/solidjs/README.md +1 -1
- package/packages/devtools/solidjs/dist/index.js +1830 -0
- package/packages/devtools/solidjs/dist/index.js.map +1 -0
- package/packages/env/dist/index.d.ts +151 -0
- package/packages/env/dist/index.js +93 -0
- package/packages/env/dist/index.js.map +1 -0
- package/packages/errors/dist/index.d.ts +177 -0
- package/packages/errors/dist/index.js +187 -0
- package/packages/errors/dist/index.js.map +1 -0
- package/packages/errors/react/README.md +1 -1
- package/packages/errors/solidjs/README.md +1 -1
- package/packages/logger/dist/index.d.ts +171 -0
- package/packages/logger/dist/index.js +216 -0
- package/packages/logger/dist/index.js.map +1 -0
- package/packages/logger/react/README.md +1 -1
- package/packages/logger/solidjs/README.md +1 -1
- package/packages/perf/dist/index.d.ts +168 -0
- package/packages/perf/dist/index.js +265 -0
- package/packages/perf/dist/index.js.map +1 -0
- package/packages/perf/react/README.md +1 -1
- package/packages/perf/solidjs/README.md +1 -1
- package/packages/shared/dist/index.d.ts +253 -0
- package/packages/shared/dist/index.js +278 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/.changeset/config.json +0 -11
- package/.env.example +0 -2
- package/.github/CODEOWNERS +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -23
- package/.github/workflows/release.yml +0 -29
- package/.node-version +0 -1
- package/.nvmrc +0 -1
- package/.prettierrc +0 -7
- package/.project/ACCOUNT.yaml +0 -4
- package/.project/IDEAS.yaml +0 -7
- package/.project/PROJECT.yaml +0 -11
- package/.project/ROADMAP.yaml +0 -15
- package/CODE_OF_CONDUCT.md +0 -26
- package/CONTRIBUTING.md +0 -69
- package/SECURITY.md +0 -18
- package/SUPPORT.md +0 -14
- package/packages/convex/shared/package.json +0 -42
- package/packages/convex/shared/src/audit/index.ts +0 -5
- package/packages/convex/shared/src/audit/presets.ts +0 -165
- package/packages/convex/shared/src/audit/schema.ts +0 -85
- package/packages/convex/shared/src/audit/write.ts +0 -102
- package/packages/convex/shared/src/extract.ts +0 -75
- package/packages/convex/shared/src/index.ts +0 -41
- package/packages/convex/shared/src/messages.ts +0 -45
- package/packages/convex/shared/src/security.ts +0 -112
- package/packages/convex/shared/src/throw.ts +0 -184
- package/packages/convex/shared/src/types.ts +0 -57
- package/packages/convex/shared/src/utils.ts +0 -58
- package/packages/convex/shared/tsconfig.json +0 -28
- package/packages/convex/shared/tsup.config.ts +0 -12
- package/packages/devtools/package.json +0 -27
- package/packages/devtools/react/package.json +0 -53
- package/packages/devtools/react/src/components/DesignPreview.tsx +0 -59
- package/packages/devtools/react/src/components/DesignSwitcherDropdown.tsx +0 -99
- package/packages/devtools/react/src/components/DevSidebar.tsx +0 -247
- package/packages/devtools/react/src/components/DevToolbar.tsx +0 -242
- package/packages/devtools/react/src/components/GitHubIssueDialog.tsx +0 -402
- package/packages/devtools/react/src/components/InspectorOverlay.tsx +0 -312
- package/packages/devtools/react/src/components/PageLoadWaterfall.tsx +0 -144
- package/packages/devtools/react/src/components/PerformancePanel.tsx +0 -330
- package/packages/devtools/react/src/context/DevModeContext.tsx +0 -226
- package/packages/devtools/react/src/context/PerformanceContext.tsx +0 -143
- package/packages/devtools/react/src/data/designs.ts +0 -13
- package/packages/devtools/react/src/hooks/useGitHubLabels.ts +0 -47
- package/packages/devtools/react/src/hooks/useVirtualList.ts +0 -124
- package/packages/devtools/react/src/index.ts +0 -77
- package/packages/devtools/react/src/panels/ConvexSpy.tsx +0 -130
- package/packages/devtools/react/src/panels/DatabaseSeeder.tsx +0 -116
- package/packages/devtools/react/src/panels/DevModePhase2.tsx +0 -191
- package/packages/devtools/react/src/panels/DevModePhase3.tsx +0 -234
- package/packages/devtools/react/src/panels/FeatureFlagsToggle.tsx +0 -104
- package/packages/devtools/react/src/panels/QuickRouteJump.tsx +0 -152
- package/packages/devtools/react/src/services/github-service.ts +0 -247
- package/packages/devtools/react/tsconfig.json +0 -31
- package/packages/devtools/react/tsup.config.ts +0 -18
- package/packages/devtools/solidjs/package.json +0 -49
- package/packages/devtools/solidjs/src/components/DesignPreview.tsx +0 -51
- package/packages/devtools/solidjs/src/components/DesignSwitcherDropdown.tsx +0 -95
- package/packages/devtools/solidjs/src/components/DevSidebar.tsx +0 -247
- package/packages/devtools/solidjs/src/components/DevToolbar.tsx +0 -242
- package/packages/devtools/solidjs/src/components/GitHubIssueDialog.tsx +0 -400
- package/packages/devtools/solidjs/src/components/InspectorOverlay.tsx +0 -311
- package/packages/devtools/solidjs/src/components/PageLoadWaterfall.tsx +0 -144
- package/packages/devtools/solidjs/src/components/PerformancePanel.tsx +0 -330
- package/packages/devtools/solidjs/src/context/DevModeContext.tsx +0 -216
- package/packages/devtools/solidjs/src/context/PerformanceContext.tsx +0 -135
- package/packages/devtools/solidjs/src/data/designs.ts +0 -13
- package/packages/devtools/solidjs/src/hooks/createGitHubLabels.ts +0 -47
- package/packages/devtools/solidjs/src/index.ts +0 -64
- package/packages/devtools/solidjs/src/services/github-service.ts +0 -247
- package/packages/devtools/solidjs/tsconfig.json +0 -21
- package/packages/devtools/src/index.ts +0 -377
- package/packages/devtools/tsup.config.ts +0 -12
- package/packages/env/package.json +0 -30
- package/packages/env/src/index.ts +0 -264
- package/packages/env/tsup.config.ts +0 -12
- package/packages/errors/package.json +0 -27
- package/packages/errors/react/package.json +0 -72
- package/packages/errors/react/src/analytics.ts +0 -16
- package/packages/errors/react/src/components/ErrorBoundary.tsx +0 -248
- package/packages/errors/react/src/components/ErrorDisplay.tsx +0 -328
- package/packages/errors/react/src/components/ValidationErrors.tsx +0 -102
- package/packages/errors/react/src/config.ts +0 -199
- package/packages/errors/react/src/constants.ts +0 -74
- package/packages/errors/react/src/hooks/useErrorBoundary.ts +0 -92
- package/packages/errors/react/src/hooks/useErrorHandler.ts +0 -87
- package/packages/errors/react/src/index.ts +0 -96
- package/packages/errors/react/src/types.ts +0 -102
- package/packages/errors/react/src/utils/errorMessages.ts +0 -35
- package/packages/errors/react/src/utils/errorPolicy.ts +0 -139
- package/packages/errors/react/src/utils/extractAppError.ts +0 -174
- package/packages/errors/react/src/utils/formatError.ts +0 -112
- package/packages/errors/react/tsconfig.json +0 -25
- package/packages/errors/react/tsup.config.ts +0 -24
- package/packages/errors/solidjs/package.json +0 -46
- package/packages/errors/solidjs/src/components/ErrorDisplay.tsx +0 -179
- package/packages/errors/solidjs/src/config.ts +0 -98
- package/packages/errors/solidjs/src/hooks/createErrorHandler.ts +0 -107
- package/packages/errors/solidjs/src/index.ts +0 -61
- package/packages/errors/solidjs/src/types.ts +0 -34
- package/packages/errors/solidjs/src/utils/errorPolicy.ts +0 -56
- package/packages/errors/solidjs/src/utils/extractAppError.ts +0 -94
- package/packages/errors/solidjs/src/utils/formatError.ts +0 -33
- package/packages/errors/solidjs/tsconfig.json +0 -26
- package/packages/errors/solidjs/tsup.config.ts +0 -21
- package/packages/errors/src/index.ts +0 -320
- package/packages/errors/tsup.config.ts +0 -12
- package/packages/logger/package.json +0 -27
- package/packages/logger/react/package.json +0 -46
- package/packages/logger/react/src/index.ts +0 -4
- package/packages/logger/react/src/useMetrics.ts +0 -42
- package/packages/logger/react/src/usePerformanceLog.ts +0 -61
- package/packages/logger/react/tsconfig.json +0 -31
- package/packages/logger/react/tsup.config.ts +0 -12
- package/packages/logger/solidjs/package.json +0 -45
- package/packages/logger/solidjs/src/createMetrics.ts +0 -37
- package/packages/logger/solidjs/src/createPerformanceLog.ts +0 -58
- package/packages/logger/solidjs/src/index.ts +0 -4
- package/packages/logger/solidjs/tsconfig.json +0 -32
- package/packages/logger/solidjs/tsup.config.ts +0 -12
- package/packages/logger/src/index.ts +0 -363
- package/packages/logger/tsup.config.ts +0 -12
- package/packages/perf/package.json +0 -27
- package/packages/perf/react/package.json +0 -59
- package/packages/perf/react/src/components/PerformanceDashboard.tsx +0 -257
- package/packages/perf/react/src/hooks/useMonitoredQuery.ts +0 -89
- package/packages/perf/react/src/hooks/usePerformanceMetrics.ts +0 -78
- package/packages/perf/react/src/index.ts +0 -33
- package/packages/perf/react/src/services/PerformanceMonitor.ts +0 -313
- package/packages/perf/react/src/types.ts +0 -77
- package/packages/perf/react/tsconfig.json +0 -25
- package/packages/perf/react/tsup.config.ts +0 -19
- package/packages/perf/solidjs/package.json +0 -41
- package/packages/perf/solidjs/src/components/PerformanceDashboard.tsx +0 -207
- package/packages/perf/solidjs/src/hooks/createPerformanceMetrics.ts +0 -73
- package/packages/perf/solidjs/src/index.ts +0 -31
- package/packages/perf/solidjs/src/services/PerformanceMonitor.ts +0 -134
- package/packages/perf/solidjs/src/types.ts +0 -78
- package/packages/perf/solidjs/tsconfig.json +0 -26
- package/packages/perf/solidjs/tsup.config.ts +0 -14
- package/packages/perf/src/index.ts +0 -410
- package/packages/perf/tsup.config.ts +0 -12
- package/pnpm-workspace.yaml +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context/DevModeContext.tsx","../src/context/PerformanceContext.tsx","../src/services/github-service.ts","../src/hooks/createGitHubLabels.ts","../src/components/GitHubIssueDialog.tsx","../src/components/PerformancePanel.tsx","../src/components/DevToolbar.tsx","../src/components/DevSidebar.tsx","../src/components/InspectorOverlay.tsx","../src/components/DesignPreview.tsx","../src/components/DesignSwitcherDropdown.tsx","../src/components/PageLoadWaterfall.tsx","../src/data/designs.ts"],"names":["DevModeProvider","createContext","useContext","PerformanceProvider","createSignal","createEffect","jsx","GitHubIssueDialog","MiniBar","cn","MetricRow","jsxs","StatCard","FilterToggle","PerformancePanel","ToolbarButton","Fragment","ExpandableSection","DevToolbar","Activity","Bug","Lightbulb","IssueCard","createMemo","Clock","ExternalLink","DevSidebar","bugs","features","X","onCleanup","designs","onMount"],"mappings":"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","file":"index.js","sourcesContent":["// @geenius/tools-devtools-solidjs — src/context/DevModeContext.tsx\n\nimport { createContext, useContext, createSignal, createEffect, type JSX } from 'solid-js'\n\nconst DEV_MODE_STORAGE_KEY = 'geenius-dev-mode-state'\n\nexport interface ComponentDetails {\n name: string\n file?: string\n selector: string\n key?: string\n props?: Record<string, unknown>\n}\n\ninterface DevModeState {\n isDevMode: boolean\n isSidebarOpen: boolean\n isInspectorMode: boolean\n issueDialog: {\n isOpen: boolean\n type: 'bug' | 'feature'\n initialDescription?: string\n componentDetails?: ComponentDetails[]\n }\n}\n\nexport interface DevModeContextValue extends DevModeState {\n toggleDevMode: () => void\n toggleSidebar: () => void\n toggleInspector: () => void\n setDevMode: (enabled: boolean) => void\n setSidebarOpen: (open: boolean) => void\n setInspectorMode: (enabled: boolean) => void\n openIssueDialog: (\n type: 'bug' | 'feature',\n description?: string,\n componentDetails?: ComponentDetails[],\n ) => void\n closeIssueDialog: () => void\n}\n\nconst defaultState: DevModeState = {\n isDevMode: false,\n isSidebarOpen: false,\n isInspectorMode: false,\n issueDialog: {\n isOpen: false,\n type: 'bug',\n initialDescription: '',\n },\n}\n\nconst DevModeContext = createContext<DevModeContextValue | undefined>(undefined)\n\nexport function createDevMode() {\n const context = useContext(DevModeContext)\n if (!context) {\n throw new Error('createDevMode must be used within a DevModeProvider')\n }\n return context\n}\n\nexport function createDevModeOptional(): DevModeContextValue | null {\n return useContext(DevModeContext) ?? null\n}\n\nexport interface DevModeProviderProps {\n children: JSX.Element\n /** Whether dev tools are allowed. Default: checks import.meta.env.DEV */\n isAllowed?: boolean\n}\n\nexport const DevModeProvider = memo(function DevModeProvider({\n children,\n isAllowed,\n}: DevModeProviderProps) {\n const resolvedAllowed = isAllowed ?? resolveDevAllowed()\n\n const [state, setState] = createSignal<DevModeState>(() => {\n if (!resolvedAllowed || typeof window === 'undefined') return defaultState\n\n try {\n const stored = localStorage.getItem(DEV_MODE_STORAGE_KEY)\n if (stored) {\n const parsed = JSON.parse(stored) as Partial<DevModeState>\n return {\n isDevMode: parsed.isDevMode ?? false,\n isSidebarOpen: false,\n isInspectorMode: false,\n issueDialog: defaultState.issueDialog,\n }\n }\n } catch {\n // Ignore parse errors\n }\n return defaultState\n })\n\n createEffect(() => {\n if (!resolvedAllowed || typeof window === 'undefined') return\n\n try {\n localStorage.setItem(\n DEV_MODE_STORAGE_KEY,\n JSON.stringify({ isDevMode: state.isDevMode }),\n )\n } catch {\n // Ignore storage errors\n }\n }, [state.isDevMode, resolvedAllowed])\n\n const toggleDevMode = () => {\n setState((prev) => ({\n ...prev,\n isDevMode: !prev.isDevMode,\n isSidebarOpen: prev.isDevMode ? false : prev.isSidebarOpen,\n isInspectorMode: prev.isDevMode ? false : prev.isInspectorMode,\n }))\n }\n\n const toggleSidebar = () => {\n setState((prev) => ({ ...prev, isSidebarOpen: !prev.isSidebarOpen }))\n }\n\n const toggleInspector = () => {\n setState((prev) => ({\n ...prev,\n isInspectorMode: !prev.isInspectorMode,\n }))\n }\n\n const setDevMode = (enabled: boolean) => {\n setState((prev) => ({\n ...prev,\n isDevMode: enabled,\n isSidebarOpen: enabled ? prev.isSidebarOpen : false,\n isInspectorMode: enabled ? prev.isInspectorMode : false,\n }))\n }\n\n const setSidebarOpen = (open: boolean) => {\n setState((prev) => ({ ...prev, isSidebarOpen: open }))\n }\n\n const setInspectorMode = (enabled: boolean) => {\n setState((prev) => ({ ...prev, isInspectorMode: enabled }))\n }\n\n const openIssueDialog = (\n type: 'bug' | 'feature',\n description?: string,\n componentDetails?: ComponentDetails[],\n ) => {\n setState((prev) => ({\n ...prev,\n issueDialog: {\n isOpen: true,\n type,\n initialDescription: description,\n componentDetails,\n },\n }))\n }\n\n const closeIssueDialog = () => {\n setState((prev) => ({\n ...prev,\n issueDialog: { ...prev.issueDialog, isOpen: false },\n }))\n }\n\n if (!resolvedAllowed) {\n return <>{children}</>\n }\n\n return (\n <DevModeContext.Provider\n value={{\n ...state,\n toggleDevMode,\n toggleSidebar,\n toggleInspector,\n setDevMode,\n setSidebarOpen,\n setInspectorMode,\n openIssueDialog,\n closeIssueDialog,\n }}\n >\n {children}\n </DevModeContext.Provider>\n )\n})\n\nexport function createIsDevToolsVisible(): boolean {\n const context = createDevModeOptional()\n if (!context) return false\n return context.isDevMode\n}\n\nexport function createIsDevAllowed(isAllowed?: boolean): boolean {\n return isAllowed ?? resolveDevAllowed()\n}\n\nfunction resolveDevAllowed(): boolean {\n try {\n // @ts-expect-error — Vite env\n if (import.meta?.env?.VITE_CONVEX_IS_DEV === 'true') return true\n // @ts-expect-error — Vite env\n if (import.meta?.env?.DEV) return true\n } catch {\n // Not in Vite\n }\n return false\n}\n","// @geenius/tools-devtools-solidjs — src/context/PerformanceContext.tsx\n\nimport { createContext, useContext, createSignal, createEffect, type JSX } from 'solid-js'\nimport { metricsStore, type PerformanceMetric } from '@geenius/tools-logger'\n\nconst MAX_METRICS = 100\n\ninterface PerformanceContextValue {\n isPerformancePanelOpen: boolean\n metrics: PerformanceMetric[]\n filters: {\n network: boolean\n query: boolean\n mutation: boolean\n render: boolean\n route: boolean\n }\n stats: {\n totalRequests: number\n avgDuration: number\n slowRequests: number\n fastRequests: number\n }\n togglePerformancePanel: () => void\n clearMetrics: () => void\n toggleFilter: (filter: keyof PerformanceContextValue['filters']) => void\n}\n\nconst PerformanceContext = createContext<PerformanceContextValue | undefined>(\n undefined,\n)\n\nexport function createPerformanceContext() {\n const context = useContext(PerformanceContext)\n if (!context) {\n throw new Error(\n 'createPerformanceContext must be used within PerformanceProvider',\n )\n }\n return context\n}\n\nexport function createPerformanceContextOptional(): PerformanceContextValue | null {\n return useContext(PerformanceContext) ?? null\n}\n\ninterface PerformanceProviderProps {\n children: JSX.Element\n}\n\nexport const PerformanceProvider = memo(function PerformanceProvider({\n children,\n}: PerformanceProviderProps) {\n const [isPerformancePanelOpen, setIsPerformancePanelOpen] = createSignal(false)\n const [metrics, setMetrics] = createSignal<PerformanceMetric[]>([])\n const [filters, setFilters] = createSignal({\n network: true,\n query: true,\n mutation: true,\n render: true,\n route: true,\n })\n\n createEffect(() => {\n const unsubscribe = metricsStore.subscribe((newMetrics) => {\n setMetrics((prev) => {\n const combined = [...prev, ...newMetrics]\n if (combined.length > MAX_METRICS) {\n return combined.slice(-MAX_METRICS)\n }\n return combined\n })\n })\n\n return () => unsubscribe()\n })\n\n const stats = () => {\n const filtered = metrics.filter((m) => m.duration !== undefined)\n const total = filtered.length\n\n if (total === 0) {\n return {\n totalRequests: 0,\n avgDuration: 0,\n slowRequests: 0,\n fastRequests: 0,\n }\n }\n\n const durations = filtered.map((m) => m.duration!)\n const avg = durations.reduce((a, b) => a + b, 0) / total\n const slow = durations.filter((d) => d > 100).length\n const fast = durations.filter((d) => d < 50).length\n\n return {\n totalRequests: total,\n avgDuration: Math.round(avg * 100) / 100,\n slowRequests: slow,\n fastRequests: fast,\n }\n }\n\n const togglePerformancePanel = () => {\n setIsPerformancePanelOpen((prev) => !prev)\n }\n\n const clearMetrics = () => {\n setMetrics([])\n metricsStore.clear()\n }\n\n const toggleFilter = (filter: keyof typeof filters) => {\n setFilters((prev) => ({\n ...prev,\n [filter]: !prev[filter],\n }))\n }\n\n return (\n <PerformanceContext.Provider\n value={{\n isPerformancePanelOpen,\n metrics,\n filters,\n stats: stats(),\n togglePerformancePanel,\n clearMetrics,\n toggleFilter,\n }}\n >\n {children}\n </PerformanceContext.Provider>\n )\n})\n","// @geenius/tools-devtools-react — src/services/github-service.ts\n// GitHub API service for creating issues — adapted from geenius-react\n\nexport interface GitHubIssue {\n title: string\n body: string\n labels?: string[]\n}\n\nexport interface GitHubLabel {\n id: number\n name: string\n color: string\n description: string | null\n}\n\nexport interface CreateIssueResponse {\n id: number\n number: number\n html_url: string\n title: string\n}\n\nexport interface GitHubIssueListItem {\n id: number\n number: number\n title: string\n body: string | null\n html_url: string\n state: 'open' | 'closed'\n created_at: string\n updated_at: string\n labels: GitHubLabel[]\n user: {\n login: string\n avatar_url: string\n } | null\n}\n\nexport type IssueFilter = 'all' | 'bug' | 'enhancement'\n\n/**\n * GitHub configuration. Provide via `configureGitHub()` or env vars.\n */\nexport interface GitHubConfig {\n owner: string\n repo: string\n branch?: string\n token: string\n}\n\nlet _config: GitHubConfig | null = null\n\n/**\n * Configure GitHub integration.\n *\n * @example\n * ```ts\n * configureGitHub({\n * owner: 'my-org',\n * repo: 'my-app',\n * token: import.meta.env.VITE_GITHUB_TOKEN,\n * })\n * ```\n */\nexport function configureGitHub(config: GitHubConfig): void {\n _config = config\n}\n\nexport function getGitHubConfig(): GitHubConfig {\n if (_config) return _config\n\n // Fallback: try env vars (Vite convention)\n let owner = ''\n let repo = ''\n let branch = 'main'\n let token = ''\n try {\n // @ts-expect-error — Vite env\n owner = import.meta?.env?.VITE_GITHUB_OWNER ?? ''\n // @ts-expect-error — Vite env\n repo = import.meta?.env?.VITE_GITHUB_REPO ?? ''\n // @ts-expect-error — Vite env\n branch = import.meta?.env?.VITE_GITHUB_BRANCH ?? 'main'\n // @ts-expect-error — Vite env\n token = import.meta?.env?.VITE_GITHUB_TOKEN ?? ''\n } catch {\n // Not in Vite\n }\n\n return { owner, repo, branch, token }\n}\n\nexport function isGitHubConfigured(): boolean {\n const { owner, repo, token } = getGitHubConfig()\n const isPlaceholder =\n !token || token === 'ghp_your_personal_access_token_here'\n return Boolean(owner && repo && token && !isPlaceholder)\n}\n\nexport async function createGitHubIssue(\n issue: GitHubIssue,\n): Promise<CreateIssueResponse> {\n const { owner, repo, token } = getGitHubConfig()\n\n if (!owner || !repo || !token) {\n throw new Error(\n 'GitHub configuration is incomplete. Call configureGitHub() or set VITE_GITHUB_* env vars.',\n )\n }\n\n const response = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/issues`,\n {\n method: 'POST',\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${token}`,\n 'X-GitHub-Api-Version': '2022-11-28',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n title: issue.title,\n body: issue.body,\n labels: issue.labels || [],\n }),\n },\n )\n\n if (!response.ok) {\n const error = await response\n .json()\n .catch(() => ({ message: 'Unknown error' }))\n throw new Error(\n `Failed to create issue: ${error.message || response.statusText}`,\n )\n }\n\n return response.json()\n}\n\nexport async function getRepositoryLabels(): Promise<GitHubLabel[]> {\n const { owner, repo, token } = getGitHubConfig()\n\n if (!owner || !repo || !token) return []\n\n try {\n const response = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/labels`,\n {\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${token}`,\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n },\n )\n\n if (!response.ok) return []\n return response.json()\n } catch {\n return []\n }\n}\n\nexport async function getGitHubIssues(\n filter: IssueFilter = 'all',\n state: 'open' | 'closed' | 'all' = 'open',\n): Promise<GitHubIssueListItem[]> {\n const { owner, repo, token } = getGitHubConfig()\n\n if (!owner || !repo || !token) return []\n\n try {\n const params = new URLSearchParams({\n state,\n per_page: '50',\n sort: 'updated',\n direction: 'desc',\n })\n\n if (filter !== 'all') {\n params.set('labels', filter)\n }\n\n const response = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/issues?${params.toString()}`,\n {\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${token}`,\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n },\n )\n\n if (!response.ok) return []\n\n const issues: GitHubIssueListItem[] = await response.json()\n return issues.filter((issue) => !('pull_request' in issue))\n } catch {\n return []\n }\n}\n\nexport function generateContextInfo(): string {\n const lines: string[] = [\n '---',\n '### Context',\n '',\n `**Page URL:** ${window.location.href}`,\n `**Timestamp:** ${new Date().toISOString()}`,\n `**User Agent:** ${navigator.userAgent}`,\n `**Branch:** ${getGitHubConfig().branch ?? 'main'}`,\n ]\n\n if (typeof window !== 'undefined') {\n lines.push(`**Screen:** ${window.innerWidth}x${window.innerHeight}`)\n }\n\n return lines.join('\\n')\n}\n\nexport function getIssueType(\n issue: GitHubIssueListItem,\n): 'bug' | 'feature' | 'other' {\n const labelNames = issue.labels.map((l) => l.name.toLowerCase())\n if (labelNames.includes('bug')) return 'bug'\n if (labelNames.includes('enhancement') || labelNames.includes('feature'))\n return 'feature'\n return 'other'\n}\n\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString)\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffMins = Math.floor(diffMs / 60000)\n const diffHours = Math.floor(diffMs / 3600000)\n const diffDays = Math.floor(diffMs / 86400000)\n\n if (diffMins < 1) return 'just now'\n if (diffMins < 60) return `${diffMins}m ago`\n if (diffHours < 24) return `${diffHours}h ago`\n if (diffDays < 7) return `${diffDays}d ago`\n return date.toLocaleDateString()\n}\n","// @geenius/tools-devtools-solidjs — src/hooks/createGitHubLabels.ts\n\nimport { createSignal, createEffect } from 'solid-js'\nimport {\n getRepositoryLabels,\n isGitHubConfigured,\n type GitHubLabel,\n} from '../services/github-service'\n\n/**\n * Hook to fetch GitHub repository labels.\n * Fetches once on mount if GitHub is configured.\n * No external dependencies (no react-query).\n */\nexport function createGitHubLabels() {\n const [data, setData] = createSignal<GitHubLabel[] | undefined>(undefined)\n const [isLoading, setIsLoading] = createSignal(false)\n const [error, setError] = createSignal<Error | null>(null)\n const isConfigured = isGitHubConfigured()\n\n createEffect(() => {\n if (!isConfigured) return\n\n let cancelled = false\n setIsLoading(true)\n\n getRepositoryLabels()\n .then((labels) => {\n if (!cancelled) {\n setData(labels)\n setIsLoading(false)\n }\n })\n .catch((err) => {\n if (!cancelled) {\n setError(err)\n setIsLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n })\n\n return { data, isLoading, error, isConfigured }\n}\n","// @geenius/tools-devtools-solidjs — src/components/GitHubIssueDialog.tsx\n\nimport { createSignal, createEffect } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport {\n Bug,\n Lightbulb,\n ExternalLink,\n AlertCircle,\n CheckCircle2,\n Github,\n Component,\n} from 'lucide-solid'\nimport type { ComponentDetails } from '../context/DevModeContext'\nimport { createGitHubLabels } from '../hooks/createGitHubLabels'\nimport {\n createGitHubIssue,\n isGitHubConfigured,\n type CreateIssueResponse,\n} from '../services/github-service'\n\ntype IssueType = 'bug' | 'feature'\n\ninterface FormState {\n type: IssueType\n title: string\n description: string\n selectedLabel: string\n}\n\nconst initialFormState: FormState = {\n type: 'feature',\n title: '',\n description: '',\n selectedLabel: '',\n}\n\nexport interface GitHubIssueDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n initialType?: IssueType\n initialDescription?: string\n componentDetails?: ComponentDetails[]\n}\n\nexport const GitHubIssueDialog = memo(function GitHubIssueDialog({\n open,\n onOpenChange,\n initialType = 'feature',\n initialDescription = '',\n componentDetails,\n}: GitHubIssueDialogProps) {\n const [form, setForm] = createSignal<FormState>({\n ...initialFormState,\n type: initialType,\n description: initialDescription,\n })\n const [loading, setLoading] = createSignal(false)\n const [success, setSuccess] = createSignal<CreateIssueResponse | null>(null)\n const [error, setError] = createSignal<string | null>(null)\n const { data: labels } = createGitHubLabels()\n const configured = isGitHubConfigured()\n let dialogRef: HTMLDivElement | undefined\n\n createEffect(() => {\n if (open) {\n setForm({\n ...initialFormState,\n type: initialType,\n description: initialDescription,\n })\n setError(null)\n setSuccess(null)\n }\n })\n\n // Close on Escape\n createEffect(() => {\n if (!open) return\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange(false)\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n })\n\n const handleSubmit = async () => {\n if (!form.title.trim()) {\n setError('Please provide a title for the issue.')\n return\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const typePrefix =\n form.type === 'bug' ? '🐛 Bug Report' : '✨ Feature Request'\n\n let componentSection = ''\n if (componentDetails && componentDetails.length > 0) {\n componentSection = `\\n### Components\\n${componentDetails\n .map((detail, index) => {\n let propsBlock = ''\n if (detail.props) {\n try {\n propsBlock = `\\n- **Props:**\\n\\`\\`\\`json\\n${JSON.stringify(detail.props, null, 2)}\\n\\`\\`\\``\n } catch {\n propsBlock = '\\n- **Props:** (Complex Object)'\n }\n }\n return `\n**Component ${index + 1}**\n- **Name:** \\`${detail.name}\\`\n${detail.key ? `- **Key:** \\`${detail.key}\\`` : ''}\n${detail.file ? `- **File:** \\`${detail.file}\\`` : ''}\n- **Selector:** \\`${detail.selector}\\`${propsBlock}\n`\n })\n .join('\\n')}`\n }\n\n const descriptionSection = form.description\n ? `## Description\\n${form.description}`\n : ''\n\n const timestamp = new Date().toISOString()\n const theme =\n typeof document !== 'undefined' &&\n document.documentElement.classList.contains('dark')\n ? 'dark'\n : 'light'\n const viewport =\n typeof window !== 'undefined'\n ? `${window.innerWidth}x${window.innerHeight}`\n : 'unknown'\n const userAgent =\n typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown'\n const url =\n typeof window !== 'undefined' ? window.location.href : 'unknown'\n\n const contextSection = `\n-----\n**Context Information**\n- **URL:** ${url}\n- **Time:** ${timestamp}\n- **Theme:** ${theme}\n- **Viewport:** ${viewport}\n- **User Agent:** ${userAgent}\n`.trim()\n\n const body = [\n `# ${typePrefix}`,\n '',\n descriptionSection,\n componentSection,\n '',\n contextSection,\n ]\n .filter(Boolean)\n .join('\\n')\n\n const issueLabels: string[] = []\n if (form.type === 'bug') issueLabels.push('bug')\n if (form.type === 'feature') issueLabels.push('enhancement')\n if (form.selectedLabel) issueLabels.push(form.selectedLabel)\n\n const result = await createGitHubIssue({\n title: `[${form.type === 'bug' ? 'Bug' : 'Feature'}] ${form.title}`,\n body,\n labels: issueLabels,\n })\n\n setSuccess(result)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred')\n } finally {\n setLoading(false)\n }\n }\n\n const handleFieldChange = <K extends keyof FormState>(field: K, value: FormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value }))\n setError(null)\n }\n\n if (!open) return null\n\n return (\n <div class=\"fixed inset-0 z-[10000] flex items-center justify-center\" data-dev-tool=\"true\">\n {/* Backdrop */}\n <div\n class=\"absolute inset-0 bg-black/60 backdrop-blur-sm\"\n onClick={() => onOpenChange(false)}\n />\n\n {/* Dialog */}\n <div\n ref={dialogRef}\n class={cn(\n 'relative z-10 w-full max-w-[500px] mx-4',\n 'bg-gradient-to-br from-slate-900 to-slate-800',\n 'border border-white/10 rounded-2xl shadow-2xl',\n 'max-h-[90vh] overflow-y-auto',\n 'animate-in fade-in zoom-in-95 duration-200',\n )}\n >\n {/* Header */}\n <div class=\"flex items-center gap-2 px-6 py-4 border-b border-white/10\">\n <Github class=\"h-5 w-5 text-primary\" />\n <h2 class=\"text-lg font-bold text-white\">Create GitHub Issue</h2>\n </div>\n\n <div class=\"px-6 py-4\">\n {!configured ? (\n <div class=\"py-6\">\n <div class=\"text-center space-y-3\">\n <div class=\"mx-auto w-12 h-12 rounded-full bg-yellow-500/10 flex items-center justify-center\">\n <AlertCircle class=\"h-6 w-6 text-yellow-500\" />\n </div>\n <p class=\"text-sm text-white/60\">\n GitHub integration is not configured. Call{' '}\n <code class=\"text-xs bg-white/10 px-1.5 py-0.5 rounded\">\n configureGitHub()\n </code>{' '}\n or set VITE_GITHUB_TOKEN to enable issue creation.\n </p>\n </div>\n </div>\n ) : success ? (\n <div class=\"py-6\">\n <div class=\"text-center space-y-4\">\n <CheckCircle2 class=\"mx-auto h-12 w-12 text-green-500\" />\n <div>\n <p class=\"font-medium text-white\">Issue Created!</p>\n <p class=\"text-sm text-white/60 mt-1\">{success.title}</p>\n </div>\n <a\n href={success.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"inline-flex items-center gap-2 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/80 transition-colors\"\n >\n <ExternalLink class=\"h-4 w-4\" />\n View on GitHub\n </a>\n </div>\n </div>\n ) : (\n <div class=\"space-y-4 py-2\">\n {/* Issue Type Selector */}\n <div class=\"grid grid-cols-2 gap-2\">\n <button\n type=\"button\"\n onClick={() => handleFieldChange('type', 'feature')}\n class={cn(\n 'flex items-center gap-2 p-3 rounded-lg border-2 transition-all',\n form.type === 'feature'\n ? 'border-emerald-500 bg-emerald-500/10 text-emerald-400'\n : 'border-white/10 text-white/60 hover:border-white/20',\n )}\n >\n <Lightbulb class=\"h-4 w-4\" />\n <span class=\"font-medium text-sm\">Feature</span>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFieldChange('type', 'bug')}\n class={cn(\n 'flex items-center gap-2 p-3 rounded-lg border-2 transition-all',\n form.type === 'bug'\n ? 'border-red-500 bg-red-500/10 text-red-400'\n : 'border-white/10 text-white/60 hover:border-white/20',\n )}\n >\n <Bug class=\"h-4 w-4\" />\n <span class=\"font-medium text-sm\">Bug Report</span>\n </button>\n </div>\n\n {/* Component Details */}\n {componentDetails && componentDetails.length > 0 && (\n <div class=\"p-3 rounded-lg bg-white/5 border border-white/10\">\n <div class=\"flex items-center gap-1.5 text-xs text-white/50 mb-2\">\n <Component class=\"h-3 w-3\" />\n <span>\n {componentDetails.length} component\n {componentDetails.length > 1 ? 's' : ''} attached\n </span>\n </div>\n <div class=\"space-y-1\">\n {componentDetails.map((c, i) => (\n <div key={i} class=\"text-xs font-mono text-white/80\">\n {c.name}\n {c.key && (\n <span class=\"text-white/40 ml-1\">\n key={c.key}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Title */}\n <div>\n <label class=\"block text-xs font-medium text-white/60 mb-1\">\n Title\n </label>\n <input\n type=\"text\"\n value={form.title}\n onChange={(e) => handleFieldChange('title', e.target.value)}\n placeholder={\n form.type === 'bug'\n ? 'Describe the bug...'\n : 'Feature idea...'\n }\n class=\"w-full px-3 py-2 bg-white/5 border border-white/10 rounded-lg text-sm text-white placeholder:text-white/30 focus:outline-none focus:ring-2 focus:ring-primary/50\"\n autoFocus\n />\n </div>\n\n {/* Description */}\n <div>\n <label class=\"block text-xs font-medium text-white/60 mb-1\">\n Description\n </label>\n <textarea\n value={form.description}\n onChange={(e) =>\n handleFieldChange('description', e.target.value)\n }\n placeholder=\"Provide more details...\"\n rows={4}\n class=\"w-full px-3 py-2 bg-white/5 border border-white/10 rounded-lg text-sm text-white placeholder:text-white/30 focus:outline-none focus:ring-2 focus:ring-primary/50 resize-none\"\n />\n </div>\n\n {/* Label Selector */}\n {labels && labels.length > 0 && (\n <div>\n <label class=\"block text-xs font-medium text-white/60 mb-1\">\n Label\n </label>\n <select\n value={form.selectedLabel}\n onChange={(e) =>\n handleFieldChange('selectedLabel', e.target.value)\n }\n class=\"w-full px-3 py-2 bg-white/5 border border-white/10 rounded-lg text-sm text-white focus:outline-none focus:ring-2 focus:ring-primary/50\"\n >\n <option value=\"\">No label</option>\n {labels.map((label) => (\n <option key={label.id} value={label.name}>\n {label.name}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Error */}\n {error && (\n <div class=\"flex items-center gap-2 p-3 bg-red-500/10 border border-red-500/20 rounded-lg\">\n <AlertCircle class=\"h-4 w-4 text-red-400 flex-shrink-0\" />\n <p class=\"text-xs text-red-300\">{error}</p>\n </div>\n )}\n\n {/* Actions */}\n <div class=\"flex justify-end gap-2 pt-2\">\n <button\n onClick={() => onOpenChange(false)}\n class=\"px-4 py-2 text-sm text-white/60 hover:text-white transition-colors\"\n >\n Cancel\n </button>\n <button\n onClick={handleSubmit}\n disabled={loading || !form.title.trim()}\n class={cn(\n 'px-4 py-2 text-sm font-medium rounded-lg transition-all',\n loading || !form.title.trim()\n ? 'bg-white/10 text-white/30 cursor-not-allowed'\n : 'bg-primary text-white hover:bg-primary/80',\n )}\n >\n {loading ? 'Creating...' : 'Create Issue'}\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/PerformancePanel.tsx\n\nimport { createMemo, createEffect } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport { X, Trash2, Activity, Zap, Clock, AlertTriangle } from 'lucide-solid'\nimport { createPerformanceContext } from '../context/PerformanceContext'\nimport type { PerformanceMetric } from '@geenius/tools-logger'\n\nfunction getDurationColor(duration: number | undefined): string {\n if (duration === undefined) return 'text-white/40'\n if (duration > 100) return 'text-red-400'\n if (duration > 50) return 'text-yellow-400'\n return 'text-green-400'\n}\n\nfunction getDurationBgColor(duration: number | undefined): string {\n if (duration === undefined) return 'bg-white/20'\n if (duration > 100) return 'bg-red-500'\n if (duration > 50) return 'bg-yellow-500'\n return 'bg-green-500'\n}\n\nfunction getTypeColor(type: string): string {\n switch (type) {\n case 'network':\n return 'text-blue-400'\n case 'query':\n return 'text-orange-400'\n case 'mutation':\n return 'text-red-400'\n case 'render':\n return 'text-purple-400'\n case 'route':\n return 'text-green-400'\n case 'component':\n return 'text-cyan-400'\n case 'effect':\n return 'text-teal-400'\n default:\n return 'text-white/60'\n }\n}\n\nfunction getTypeIcon(type: string) {\n switch (type) {\n case 'network':\n return '🌐'\n case 'query':\n return '🔍'\n case 'mutation':\n return '✏️'\n case 'render':\n return '🎨'\n case 'route':\n return '🧭'\n case 'component':\n return '📦'\n case 'effect':\n return '⚡'\n default:\n return '📝'\n }\n}\n\nconst MiniBar = memo(function MiniBar({\n height,\n color,\n label,\n}: {\n height: number\n color: string\n label: string\n}) {\n return (\n <div class=\"flex flex-col items-center gap-0.5 flex-1 min-w-0\">\n <div class=\"w-full h-12 flex items-end\">\n <div\n class={cn('w-full rounded-t-sm transition-all duration-300', color)}\n style={{ height: `${Math.min(height, 100)}%` }}\n title={label}\n />\n </div>\n </div>\n )\n})\n\nconst MetricRow = memo(function MetricRow({\n metric,\n}: {\n metric: PerformanceMetric\n}) {\n const duration = metric.duration\n const durationStr = duration ? `${duration.toFixed(1)}ms` : 'pending...'\n\n return (\n <div\n class={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-lg',\n 'bg-white/5 hover:bg-white/10 transition-colors',\n )}\n >\n <span class=\"text-sm\">{getTypeIcon(metric.type)}</span>\n <div class=\"flex-1 min-w-0\">\n <div class={cn('text-xs font-medium truncate', getTypeColor(metric.type))}>\n {metric.name}\n </div>\n </div>\n <div\n class={cn(\n 'text-xs font-mono font-bold',\n getDurationColor(duration),\n )}\n >\n {durationStr}\n </div>\n </div>\n )\n})\n\nconst StatCard = memo(function StatCard({\n icon: Icon,\n label,\n value,\n color = 'text-white',\n}: {\n icon: React.ElementType\n label: string\n value: string | number\n color?: string\n}) {\n return (\n <div class=\"flex items-center gap-2 px-3 py-2 rounded-lg bg-white/5\">\n <Icon class={cn('w-4 h-4', color)} />\n <div class=\"flex flex-col\">\n <span class=\"text-[10px] text-white/50 uppercase\">{label}</span>\n <span class=\"text-sm font-bold text-white\">{value}</span>\n </div>\n </div>\n )\n})\n\nconst FilterToggle = memo(function FilterToggle({\n label,\n active,\n color,\n onClick,\n}: {\n label: string\n active: boolean\n color: string\n onClick: () => void\n}) {\n return (\n <button\n onClick={onClick}\n class={cn(\n 'px-2 py-1 rounded text-xs font-medium transition-all',\n active\n ? `${color} text-white`\n : 'bg-white/10 text-white/50 hover:bg-white/20',\n )}\n >\n {label}\n </button>\n )\n})\n\nexport const PerformancePanel = memo(function PerformancePanel() {\n const {\n isPerformancePanelOpen,\n metrics,\n filters,\n stats,\n togglePerformancePanel,\n clearMetrics,\n toggleFilter,\n } = createPerformanceContext()\n\n let listRef: HTMLDivElement | undefined\n\n const filteredMetrics = createMemo(() => {\n return metrics.filter((m) => {\n if (m.type === 'network' && !filters.network) return false\n if (m.type === 'query' && !filters.query) return false\n if (m.type === 'mutation' && !filters.mutation) return false\n if (m.type === 'render' && !filters.render) return false\n if (m.type === 'route' && !filters.route) return false\n return true\n })\n })\n\n const chartMetrics = createMemo(() => {\n return filteredMetrics.filter((m) => m.duration !== undefined).slice(-20)\n })\n\n const maxDuration = createMemo(() => {\n if (chartMetrics.length === 0) return 100\n const max = Math.max(...chartMetrics.map((m) => m.duration || 0))\n return Math.max(max, 100)\n })\n\n createEffect(() => {\n if (listRef) {\n listRef.scrollTop = listRef.scrollHeight\n }\n }, [filteredMetrics.length])\n\n if (!isPerformancePanelOpen) return null\n\n return (\n <div\n data-dev-tool=\"true\"\n class={cn(\n 'fixed bottom-20 left-1/2 -translate-x-1/2 z-50',\n 'w-[440px] max-h-[400px]',\n 'rounded-2xl border border-white/10',\n 'bg-gradient-to-b from-slate-900/95 via-slate-800/95 to-slate-900/95',\n 'backdrop-blur-xl shadow-2xl shadow-black/50',\n 'flex flex-col overflow-hidden',\n 'animate-in slide-in-from-bottom-4 fade-in duration-300',\n )}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-white/10\">\n <div class=\"flex items-center gap-2\">\n <Activity class=\"w-4 h-4 text-primary\" />\n <span class=\"text-sm font-bold text-white\">Performance</span>\n <span class=\"text-xs text-white/40\">\n ({filteredMetrics.length} events)\n </span>\n </div>\n <div class=\"flex items-center gap-1\">\n <button\n onClick={clearMetrics}\n class=\"p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n title=\"Clear metrics\"\n >\n <Trash2 class=\"w-3.5 h-3.5\" />\n </button>\n <button\n onClick={togglePerformancePanel}\n class=\"p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n title=\"Close panel\"\n >\n <X class=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Stats Bar */}\n <div class=\"flex gap-2 px-4 py-3 border-b border-white/10 overflow-x-auto\">\n <StatCard\n icon={Activity}\n label=\"Requests\"\n value={stats.totalRequests}\n color=\"text-blue-400\"\n />\n <StatCard\n icon={Clock}\n label=\"Avg\"\n value={`${stats.avgDuration}ms`}\n color={\n stats.avgDuration > 100\n ? 'text-red-400'\n : stats.avgDuration > 50\n ? 'text-yellow-400'\n : 'text-green-400'\n }\n />\n <StatCard\n icon={Zap}\n label=\"Fast\"\n value={stats.fastRequests}\n color=\"text-green-400\"\n />\n <StatCard\n icon={AlertTriangle}\n label=\"Slow\"\n value={stats.slowRequests}\n color={stats.slowRequests > 0 ? 'text-red-400' : 'text-white/50'}\n />\n </div>\n\n {/* Mini Chart */}\n {chartMetrics.length > 0 && (\n <div class=\"px-4 py-3 border-b border-white/10\">\n <div class=\"flex items-end gap-1 h-16\">\n {chartMetrics.map((metric) => (\n <MiniBar\n key={metric.id}\n height={((metric.duration || 0) / maxDuration) * 100}\n color={getDurationBgColor(metric.duration)}\n label={`${metric.name}: ${metric.duration?.toFixed(1)}ms`}\n />\n ))}\n </div>\n <div class=\"flex justify-between mt-1 text-xs text-white/40\">\n <span>Recent requests</span>\n <span>0-{maxDuration.toFixed(0)}ms</span>\n </div>\n </div>\n )}\n\n {/* Filters */}\n <div class=\"flex gap-1 px-4 py-2 border-b border-white/10\">\n <FilterToggle label=\"Network\" active={filters.network} color=\"bg-blue-500\" onClick={() => toggleFilter('network')} />\n <FilterToggle label=\"Query\" active={filters.query} color=\"bg-orange-500\" onClick={() => toggleFilter('query')} />\n <FilterToggle label=\"Mutation\" active={filters.mutation} color=\"bg-red-500\" onClick={() => toggleFilter('mutation')} />\n <FilterToggle label=\"Render\" active={filters.render} color=\"bg-purple-500\" onClick={() => toggleFilter('render')} />\n <FilterToggle label=\"Route\" active={filters.route} color=\"bg-green-500\" onClick={() => toggleFilter('route')} />\n </div>\n\n {/* Metrics List */}\n <div\n ref={listRef}\n class=\"flex-1 overflow-y-auto px-3 py-2 space-y-1 min-h-[100px] max-h-[180px]\"\n >\n {filteredMetrics.length === 0 ? (\n <div class=\"flex items-center justify-center py-8 text-sm text-white/30\">\n No metrics recorded yet\n </div>\n ) : (\n filteredMetrics.map((metric) => (\n <MetricRow key={metric.id} metric={metric} />\n ))\n )}\n </div>\n </div>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/DevToolbar.tsx\n\nimport { createSignal, createEffect } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport {\n Power,\n PanelRight,\n Bug,\n Lightbulb,\n Target,\n Activity,\n} from 'lucide-solid'\nimport { createDevModeOptional, createIsDevAllowed } from '../context/DevModeContext'\nimport { createPerformanceContextOptional } from '../context/PerformanceContext'\nimport { GitHubIssueDialog } from './GitHubIssueDialog'\nimport { PerformancePanel } from './PerformancePanel'\n\ninterface ToolbarButtonProps {\n icon: React.JSX.Element\n label: string\n onClick?: () => void\n active?: boolean\n variant?: 'default' | 'primary' | 'success' | 'danger'\n showLabel?: boolean\n disabled?: boolean\n}\n\nconst ToolbarButton = memo(function ToolbarButton({\n icon,\n label,\n onClick,\n active = false,\n variant = 'default',\n showLabel = true,\n disabled = false,\n}: ToolbarButtonProps) {\n const variantStyles = {\n default: active\n ? 'bg-white/20 text-white'\n : 'text-white/70 hover:text-white hover:bg-white/10',\n primary: active\n ? 'bg-primary/30 text-primary-foreground'\n : 'text-white/70 hover:text-primary hover:bg-primary/10',\n success: 'text-white/70 hover:text-emerald-400 hover:bg-emerald-500/10',\n danger: 'text-white/70 hover:text-red-400 hover:bg-red-500/10',\n }\n\n const content = (\n <>\n {icon}\n {showLabel && (\n <span class=\"hidden sm:inline text-xs font-medium\">{label}</span>\n )}\n </>\n )\n\n const className = cn(\n 'flex items-center gap-2 px-3 py-2 rounded-lg transition-all duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-white/20',\n disabled\n ? 'opacity-40 cursor-not-allowed text-white'\n : variantStyles[variant],\n )\n\n return (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n class={cn(className, !disabled && 'cursor-pointer')}\n title={label}\n disabled={disabled}\n >\n {content}\n </button>\n )\n})\n\ninterface ExpandableSectionProps {\n show: boolean\n children: React.JSX.Element\n}\n\nconst ExpandableSection = memo(function ExpandableSection({\n show,\n children,\n}: ExpandableSectionProps) {\n let contentRef: HTMLDivElement | undefined\n const [width, setWidth] = createSignal(0)\n\n createEffect(() => {\n if (contentRef) {\n setWidth(show ? contentRef.scrollWidth : 0)\n }\n })\n\n return (\n <div\n class=\"overflow-hidden transition-all duration-300 ease-out\"\n style={{ width: show ? width : 0, opacity: show ? 1 : 0 }}\n >\n <div\n ref={contentRef}\n class={cn(\n 'flex items-center gap-1 whitespace-nowrap',\n 'transition-transform duration-300 ease-out',\n show ? 'translate-x-0' : '-translate-x-2',\n )}\n >\n {children}\n </div>\n </div>\n )\n})\n\nexport interface DevToolbarProps {\n /** Whether dev tools are allowed. Default: auto-detects from env */\n isAllowed?: boolean\n}\n\nexport const DevToolbar = memo(function DevToolbar({\n isAllowed,\n}: DevToolbarProps = {}) {\n const isDevAllowed = createIsDevAllowed(isAllowed)\n const devMode = createDevModeOptional()\n const performanceContext = createPerformanceContextOptional()\n\n const [isReady, setIsReady] = createSignal(false)\n createEffect(() => {\n const timer = setTimeout(() => setIsReady(true), 1000)\n return () => clearTimeout(timer)\n })\n\n if (!isDevAllowed || !devMode) return null\n\n const {\n isDevMode,\n isSidebarOpen,\n toggleDevMode,\n toggleSidebar,\n openIssueDialog,\n issueDialog,\n closeIssueDialog,\n } = devMode\n\n const showContent = isDevMode && isReady\n\n return (\n <>\n {/* Floating Toolbar */}\n <div\n data-dev-tool=\"true\"\n class={cn(\n 'fixed bottom-4 left-1/2 -translate-x-1/2 z-50',\n 'flex items-center px-2 py-1',\n showContent ? 'gap-2' : 'gap-0',\n 'rounded-2xl border border-white/10',\n 'bg-gradient-to-r from-slate-900/95 via-slate-800/95 to-slate-900/95',\n 'backdrop-blur-xl shadow-2xl shadow-black/50',\n 'transition-all duration-300 ease-out',\n )}\n >\n {/* Power / Toggle Dev Mode */}\n <ToolbarButton\n icon={<Power class=\"w-4 h-4\" />}\n label={isDevMode ? 'Dev Mode On' : 'Dev Mode Off'}\n onClick={toggleDevMode}\n active={isDevMode}\n variant={isDevMode ? 'primary' : 'default'}\n />\n\n <ExpandableSection show={showContent}>\n {/* Separator */}\n <div class=\"shrink-0 w-px h-6 bg-white/20 mx-1 my-2\" />\n\n {/* Inspector Mode Toggle */}\n <ToolbarButton\n icon={<Target class=\"w-4 h-4\" />}\n label=\"Inspector\"\n onClick={devMode.toggleInspector}\n active={devMode.isInspectorMode}\n variant={devMode.isInspectorMode ? 'primary' : 'default'}\n />\n\n {/* Performance Monitor Toggle */}\n {performanceContext && (\n <ToolbarButton\n icon={<Activity class=\"w-4 h-4\" />}\n label=\"Perf\"\n onClick={performanceContext.togglePerformancePanel}\n active={performanceContext.isPerformancePanelOpen}\n variant={\n performanceContext.isPerformancePanelOpen\n ? 'primary'\n : 'default'\n }\n />\n )}\n\n {/* Sidebar Toggle (Desktop only) */}\n <div class=\"hidden md:block\">\n <ToolbarButton\n icon={<PanelRight class=\"w-4 h-4\" />}\n label=\"Issues\"\n onClick={toggleSidebar}\n active={isSidebarOpen}\n />\n </div>\n\n {/* Create Bug */}\n <ToolbarButton\n icon={<Bug class=\"w-4 h-4\" />}\n label=\"Bug\"\n onClick={() => openIssueDialog('bug')}\n variant=\"danger\"\n />\n\n {/* Create Feature */}\n <ToolbarButton\n icon={<Lightbulb class=\"w-4 h-4\" />}\n label=\"Feature\"\n onClick={() => openIssueDialog('feature')}\n variant=\"success\"\n />\n </ExpandableSection>\n </div>\n\n {/* Performance Panel */}\n {performanceContext && <PerformancePanel />}\n\n {/* Issue Dialog */}\n <div data-dev-tool=\"true\">\n <GitHubIssueDialog\n open={issueDialog.isOpen}\n onOpenChange={(open) => !open && closeIssueDialog()}\n initialType={issueDialog.type}\n initialDescription={issueDialog.initialDescription}\n componentDetails={issueDialog.componentDetails}\n />\n </div>\n </>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/DevSidebar.tsx\n\nimport { createSignal, createEffect, createMemo } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport {\n Bug,\n Lightbulb,\n ExternalLink,\n Clock,\n X,\n RefreshCw,\n Maximize2,\n Minimize2,\n} from 'lucide-solid'\nimport { createDevModeOptional } from '../context/DevModeContext'\nimport {\n getGitHubIssues,\n getGitHubConfig,\n getIssueType,\n formatRelativeTime,\n type GitHubIssueListItem,\n} from '../services/github-service'\n\ninterface IssueCardProps {\n issue: GitHubIssueListItem\n expandedView: boolean\n}\n\nconst IssueCard = memo(function IssueCard({\n issue,\n expandedView,\n}: IssueCardProps) {\n const issueType = getIssueType(issue)\n\n const linkedComponent = createMemo(() => {\n if (!issue.body) return null\n const match = issue.body.match(/\\*\\*Name:\\*\\*\\s*`([^`]+)`/)\n return match ? match[1] : null\n }, [issue.body])\n\n return (\n <a\n href={issue.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class={cn(\n 'block p-3 rounded-lg border transition-all duration-200',\n 'hover:bg-white/5 hover:border-white/20',\n 'border-white/10 bg-white/[0.02]',\n )}\n >\n <div class=\"flex items-start gap-3\">\n <div\n class={cn(\n 'flex-shrink-0 w-8 h-8 rounded-lg flex items-center justify-center',\n issueType === 'bug' && 'bg-red-500/10 text-red-500',\n issueType === 'feature' && 'bg-emerald-500/10 text-emerald-500',\n issueType === 'other' && 'bg-blue-500/10 text-blue-500',\n )}\n >\n {issueType === 'bug' ? (\n <Bug class=\"w-4 h-4\" />\n ) : (\n <Lightbulb class=\"w-4 h-4\" />\n )}\n </div>\n\n <div class=\"flex-1 min-w-0\">\n <p class=\"font-medium text-sm text-white line-clamp-2\">\n {issue.title}\n </p>\n\n {linkedComponent && (\n <span class=\"inline-flex items-center gap-1 mt-1 text-[10px] px-1.5 py-0.5 bg-white/5 border border-white/10 rounded text-white/60\">\n {linkedComponent}\n </span>\n )}\n\n <div class=\"flex items-center gap-3 mt-2 text-xs text-white/40\">\n <span>#{issue.number}</span>\n <span class=\"flex items-center gap-1\">\n <Clock class=\"w-3 h-3\" />\n {formatRelativeTime(issue.updated_at)}\n </span>\n </div>\n\n {expandedView && issue.body && (\n <div class=\"mt-3 text-xs text-white/40 border-l-2 border-white/10 pl-2 line-clamp-6 whitespace-pre-line font-mono bg-white/[0.02] p-2 rounded-sm\">\n {issue.body.substring(0, 300)}\n {issue.body.length > 300 ? '...' : ''}\n </div>\n )}\n </div>\n <ExternalLink class=\"w-4 h-4 text-white/30 flex-shrink-0\" />\n </div>\n </a>\n )\n})\n\nexport const DevSidebar = memo(function DevSidebar() {\n const devMode = createDevModeOptional()\n const [issues, setIssues] = createSignal<GitHubIssueListItem[]>([])\n const [loading, setLoading] = createSignal(false)\n const [tab, setTab] = createSignal<'bugs' | 'features'>('bugs')\n const [isExpanded, setIsExpanded] = createSignal(false)\n\n const isSidebarOpen = devMode?.isSidebarOpen ?? false\n const setSidebarOpen = devMode?.setSidebarOpen ?? (() => { })\n\n createEffect(() => {\n if (isSidebarOpen && issues.length === 0 && !loading) {\n fetchIssues()\n }\n })\n\n const fetchIssues = async () => {\n setLoading(true)\n try {\n const result = await getGitHubIssues('all', 'open')\n setIssues(result)\n } catch {\n // Silently fail\n } finally {\n setLoading(false)\n }\n }\n\n const handleRefresh = () => fetchIssues()\n const toggleExpand = () => setIsExpanded((prev) => !prev)\n\n const { bugs, features } = createMemo(() => {\n const bugs: GitHubIssueListItem[] = []\n const features: GitHubIssueListItem[] = []\n\n issues.forEach((issue) => {\n const type = getIssueType(issue)\n if (type === 'bug') bugs.push(issue)\n else features.push(issue)\n })\n\n return { bugs, features }\n })\n\n const currentIssues = tab === 'bugs' ? bugs : features\n\n if (!devMode || !isSidebarOpen) return null\n\n const config = getGitHubConfig()\n\n return (\n <div\n data-dev-tool=\"true\"\n class={cn(\n 'fixed top-0 right-0 h-full z-50',\n 'flex flex-col',\n 'bg-gradient-to-b from-slate-900/98 to-slate-950/98',\n 'backdrop-blur-xl border-l border-white/10',\n 'shadow-2xl shadow-black/50',\n 'transition-all duration-300 ease-in-out',\n isExpanded ? 'w-full sm:max-w-[50vw]' : 'w-full sm:max-w-md',\n 'animate-in slide-in-from-right duration-300',\n )}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-white/10\">\n <div class=\"flex items-center gap-2\">\n <Bug class=\"w-4 h-4 text-primary\" />\n <span class=\"text-sm font-bold text-white\">GitHub Issues</span>\n <span class=\"text-xs text-white/40\">\n ({config.owner}/{config.repo})\n </span>\n </div>\n <div class=\"flex items-center gap-1\">\n <button\n onClick={handleRefresh}\n disabled={loading}\n class={cn(\n 'p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors',\n loading && 'animate-spin',\n )}\n >\n <RefreshCw class=\"w-3.5 h-3.5\" />\n </button>\n <button\n onClick={toggleExpand}\n class=\"hidden sm:block p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n >\n {isExpanded ? (\n <Minimize2 class=\"w-3.5 h-3.5\" />\n ) : (\n <Maximize2 class=\"w-3.5 h-3.5\" />\n )}\n </button>\n <button\n onClick={() => setSidebarOpen(false)}\n class=\"p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n >\n <X class=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Tabs */}\n <div class=\"flex border-b border-white/10\">\n <button\n onClick={() => setTab('bugs')}\n class={cn(\n 'flex-1 px-4 py-2.5 text-xs font-medium transition-colors',\n tab === 'bugs'\n ? 'text-red-400 border-b-2 border-red-500'\n : 'text-white/40 hover:text-white/70',\n )}\n >\n 🐛 Bugs ({bugs.length})\n </button>\n <button\n onClick={() => setTab('features')}\n class={cn(\n 'flex-1 px-4 py-2.5 text-xs font-medium transition-colors',\n tab === 'features'\n ? 'text-emerald-400 border-b-2 border-emerald-500'\n : 'text-white/40 hover:text-white/70',\n )}\n >\n ✨ Features ({features.length})\n </button>\n </div>\n\n {/* Content */}\n <div class=\"flex-1 overflow-y-auto p-3 space-y-2\">\n {loading ? (\n <div class=\"flex items-center justify-center py-12\">\n <div class=\"w-6 h-6 border-2 border-white/20 border-t-primary rounded-full animate-spin\" />\n </div>\n ) : currentIssues.length === 0 ? (\n <div class=\"text-center py-12 text-sm text-white/30\">\n No {tab === 'bugs' ? 'bugs' : 'features'} found\n </div>\n ) : (\n currentIssues.map((issue) => (\n <IssueCard key={issue.id} issue={issue} expandedView={isExpanded} />\n ))\n )}\n </div>\n </div>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/InspectorOverlay.tsx\n\nimport { createSignal, createEffect, createMemo, onCleanup, type JSX } from 'solid-js'\nimport { Portal } from 'solid-js/web'\nimport { createDevModeOptional } from '../context/DevModeContext'\nimport { cn } from '@geenius/ui-solid'\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\ninterface ComponentInfo {\n name: string\n file?: string\n key?: string\n props?: Record<string, unknown>\n}\n\nfunction getComponentInfo(element: HTMLElement): ComponentInfo | null {\n let fiberNode: any = null\n const key = Object.keys(element).find((k) => k.startsWith('__reactFiber$'))\n if (key) {\n fiberNode = (element as any)[key]\n }\n if (!fiberNode) return null\n\n const elementKey = fiberNode.key !== null ? String(fiberNode.key) : undefined\n\n let node = fiberNode\n while (node) {\n if (node.tag === 0 || node.tag === 1) {\n if (node.type && (node.type.displayName || node.type.name)) {\n return {\n name: node.type.displayName || node.type.name,\n file: node._debugSource?.fileName,\n key:\n elementKey !== undefined\n ? elementKey\n : node.key !== null\n ? String(node.key)\n : undefined,\n }\n }\n }\n node = node.return\n }\n\n return { name: element.tagName.toLowerCase() }\n}\n\nexport function InspectorOverlay() {\n const devMode = createDevModeOptional()\n const [hoveredRect, setHoveredRect] = createSignal<Rect | null>(null)\n const [selectedComponents, setSelectedComponents] = createSignal<\n { rect: Rect; info: ComponentInfo }[]\n >([])\n const [hoveredComponent, setHoveredComponent] = createSignal<ComponentInfo | null>(null)\n const [cursorPos, setCursorPos] = createSignal({ x: 0, y: 0 })\n let overlayRef: HTMLDivElement | undefined\n\n const isInspectorMode = devMode?.isInspectorMode ?? false\n const setInspectorMode = devMode?.setInspectorMode ?? (() => { })\n const openIssueDialog = devMode?.openIssueDialog ?? (() => { })\n\n createEffect(() => {\n if (!isInspectorMode) {\n setHoveredRect(null)\n setSelectedComponents([])\n return\n }\n\n const isDevTool = (element: Element | null) => {\n if (!element) return false\n return !!element.closest('[data-dev-tool=\"true\"]')\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n setCursorPos({ x: e.clientX, y: e.clientY })\n const elements = document.elementsFromPoint(e.clientX, e.clientY)\n\n if (elements.length > 0 && isDevTool(elements[0])) {\n setHoveredRect(null)\n setHoveredComponent(null)\n return\n }\n\n let target: HTMLElement | null = null\n for (const el of elements) {\n if (!isDevTool(el)) {\n target = el as HTMLElement\n break\n }\n }\n\n if (\n target &&\n target !== document.body &&\n target !== document.documentElement\n ) {\n const rect = target.getBoundingClientRect()\n setHoveredRect({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n })\n setHoveredComponent(getComponentInfo(target))\n } else {\n setHoveredRect(null)\n setHoveredComponent(null)\n }\n }\n\n const handleClick = (e: MouseEvent) => {\n const elements = document.elementsFromPoint(e.clientX, e.clientY)\n if (elements.length > 0 && isDevTool(elements[0])) return\n\n let target: HTMLElement | null = null\n for (const el of elements) {\n if (!isDevTool(el)) {\n target = el as HTMLElement\n break\n }\n }\n\n if (target) {\n e.preventDefault()\n e.stopPropagation()\n\n const info = getComponentInfo(target)\n const rect = target.getBoundingClientRect()\n\n if (info) {\n setSelectedComponents((prev) => {\n const existsIndex = prev.findIndex(\n (p) =>\n p.info.name === info.name &&\n p.info.key === info.key &&\n p.info.file === info.file,\n )\n\n if (existsIndex >= 0) {\n const newSelection = [...prev]\n newSelection.splice(existsIndex, 1)\n return newSelection\n } else {\n return [\n ...prev,\n {\n rect: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n info,\n },\n ]\n }\n })\n }\n }\n }\n\n window.addEventListener('mousemove', handleMouseMove, { capture: true })\n window.addEventListener('click', handleClick, { capture: true })\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove, { capture: true })\n window.removeEventListener('click', handleClick, { capture: true })\n }\n })\n\n if (!devMode || !isInspectorMode) return null\n\n return /* Portal: */ (\n <div\n ref={overlayRef}\n class=\"fixed inset-0 z-[9999] pointer-events-none cursor-crosshair\"\n style={{ background: 'transparent' }}\n data-dev-tool=\"true\"\n >\n {/* Desktop Debug Panel */}\n <div class=\"hidden md:block fixed top-0 left-0 z-[10000] p-2 text-xs font-mono text-white pointer-events-auto transition-all duration-300\">\n <div\n class={cn(\n 'group flex flex-col gap-1 min-w-[150px] p-2 rounded-lg backdrop-blur-sm transition-all duration-300',\n 'bg-blue-500/10 hover:bg-blue-950/90',\n 'border border-blue-500/30',\n 'text-black hover:text-white',\n )}\n >\n <div class=\"flex justify-between items-center opacity-80\">\n <span class=\"font-bold opacity-100 group-hover:text-white/90\">\n INSPECTOR\n </span>\n <span class=\"opacity-70 group-hover:text-white/70\">\n {Math.round(cursorPos.x)}, {Math.round(cursorPos.y)}\n </span>\n </div>\n {hoveredComponent && (\n <div class=\"font-bold drop-shadow-sm truncate text-blue-700 group-hover:text-blue-300\">\n {hoveredComponent.name}\n </div>\n )}\n {selectedComponents.length > 0 && (\n <div class=\"truncate text-[10px] opacity-80 text-green-700 group-hover:text-green-300 border-t border-white/10 pt-1 mt-1\">\n {selectedComponents.length} Selected\n </div>\n )}\n </div>\n </div>\n\n {/* Hover Highlight */}\n {hoveredRect && (\n <div\n class=\"absolute border-2 border-blue-500 bg-blue-500/10 pointer-events-none transition-all duration-75 ease-out\"\n style={{\n top: hoveredRect.top,\n left: hoveredRect.left,\n width: hoveredRect.width,\n height: hoveredRect.height,\n }}\n >\n <div class=\"absolute -top-6 left-0 bg-blue-500 text-white text-[10px] px-1.5 py-0.5 rounded-sm whitespace-nowrap\">\n {hoveredComponent?.name} ({Math.round(hoveredRect.width)} x{' '}\n {Math.round(hoveredRect.height)})\n </div>\n </div>\n )}\n\n {/* Selection Highlights */}\n {selectedComponents.map((comp, i) => (\n <div\n key={i}\n class=\"absolute border-2 border-green-500 bg-green-500/20 pointer-events-none transition-all duration-75 ease-out\"\n style={{\n top: comp.rect.top,\n left: comp.rect.left,\n width: comp.rect.width,\n height: comp.rect.height,\n }}\n >\n <div class=\"absolute -top-6 left-0 bg-green-600 text-white text-[10px] px-1.5 py-0.5 rounded-sm whitespace-nowrap z-[10001]\">\n {comp.info.name}\n </div>\n </div>\n ))}\n\n {/* Floating Toolbar */}\n {selectedComponents.length > 0 &&\n (() => {\n const lastSelected = selectedComponents[selectedComponents.length - 1]\n return (\n <div\n class=\"fixed z-[10002] flex items-center gap-1 p-1 bg-slate-900 border border-slate-700 rounded-md shadow-xl animate-in fade-in zoom-in-95 pointer-events-auto\"\n style={{\n top: Math.max(10, lastSelected.rect.top - 45),\n left: Math.max(10, lastSelected.rect.left),\n }}\n >\n <button\n onClick={() => {\n const allDetails = selectedComponents.map((c) => ({\n name: c.info.name,\n file: c.info.file,\n key: c.info.key,\n props: c.info.props,\n selector: 'Multi-select',\n }))\n openIssueDialog('feature', '', allDetails as any)\n setInspectorMode(false)\n }}\n class=\"px-2 py-1 text-xs font-medium text-white hover:bg-white/10 rounded transition-colors\"\n >\n Feature\n </button>\n <div class=\"w-px h-3 bg-white/20 mx-0.5\" />\n <button\n onClick={() => {\n const allDetails = selectedComponents.map((c) => ({\n name: c.info.name,\n file: c.info.file,\n key: c.info.key,\n props: c.info.props,\n selector: 'Multi-select',\n }))\n openIssueDialog('bug', '', allDetails as any)\n setInspectorMode(false)\n }}\n class=\"px-2 py-1 text-xs font-medium text-red-400 hover:bg-red-500/10 rounded transition-colors\"\n >\n Bug\n </button>\n <div class=\"w-px h-3 bg-white/20 mx-0.5\" />\n <button\n onClick={() => setSelectedComponents([])}\n class=\"px-2 py-1 text-xs text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors\"\n >\n Deselect all\n </button>\n </div>\n )\n })()}\n </div>,\n document.body,\n )\n}\n","// @geenius/tools-devtools-solidjs — components/DesignPreview.tsx\nimport { createEffect, onMount } from 'solid-js'\nimport type { Design } from '../data/designs'\n\nexport type DesignPreviewProps = {\n designNumber: number\n showGrid?: boolean\n theme?: 'light' | 'dark'\n}\n\n/**\n * DesignPreview — renders an HTML design file in an iframe with grid overlay + theme control.\n *\n * Uses Tailwind CSS utility classes.\n */\nexport function DesignPreview(props: DesignPreviewProps) {\n let iframeRef: HTMLIFrameElement | undefined\n\n const applyTheme = () => {\n try {\n if (iframeRef?.contentDocument) {\n const action = (props.theme ?? 'light') === 'dark' ? 'add' : 'remove'\n iframeRef.contentDocument.documentElement.classList[action]('dark')\n iframeRef.contentDocument.body?.classList[action]('dark')\n }\n } catch {\n // Cross-origin restrictions\n }\n }\n\n createEffect(applyTheme)\n\n return (\n <div class=\"relative w-full h-screen\">\n {(props.showGrid ?? false) && (\n <div class=\"absolute inset-0 pointer-events-none z-[100] flex justify-between px-4 max-w-[1400px] mx-auto w-full\">\n {Array.from({ length: 12 }).map((_, i) => (\n <div class=\"h-full w-[calc(100%/12)] border-x border-red-500/20 bg-red-500/5 mx-2\" />\n ))}\n </div>\n )}\n <iframe\n ref={iframeRef}\n src={`/designs/design-${props.designNumber}.html`}\n class=\"w-full h-full border-0\"\n title={`Design ${props.designNumber} Preview`}\n onLoad={applyTheme}\n />\n </div>\n )\n}\n","// @geenius/tools-devtools-solidjs — components/DesignSwitcherDropdown.tsx\nimport { createSignal, createEffect, onCleanup } from 'solid-js'\nimport { For, Show } from 'solid-js/web'\n\nexport type DesignSwitcherDropdownProps = {\n /** Current active path — used to highlight the active design */\n currentPath: string\n /** Called when user selects a design */\n onNavigate: (path: string) => void\n /** Total number of designs */\n designCount?: number\n}\n\n/**\n * DesignSwitcherDropdown — dropdown menu for switching between design previews.\n *\n * Router-agnostic: caller provides currentPath and onNavigate.\n * Uses Tailwind CSS utility classes.\n */\nexport function DesignSwitcherDropdown(props: DesignSwitcherDropdownProps) {\n const [isOpen, setIsOpen] = createSignal(false)\n let dropdownRef: HTMLDivElement | undefined\n\n const getCurrentDesign = () => {\n const match = props.currentPath.match(/\\/dev\\/design\\/(\\d+)/)\n return match ? `Design ${match[1]}` : 'Current Design'\n }\n\n createEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef && !dropdownRef.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n onCleanup(() => document.removeEventListener('mousedown', handleClickOutside))\n })\n\n const handleDesignChange = (path: string) => {\n props.onNavigate(path)\n setIsOpen(false)\n }\n\n const designs = () => [\n { label: 'Current Design', path: '/' },\n ...Array.from({ length: props.designCount ?? 21 }, (_, i) => ({\n label: `Design ${i + 1}`,\n path: `/dev/design/${i + 1}`,\n })),\n ]\n\n return (\n <div ref={dropdownRef} class=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen())}\n aria-label=\"Switch Design\"\n class=\"flex items-center gap-2 px-3 py-2 rounded-lg text-foreground hover:bg-bg-muted transition-colors text-sm font-medium\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2}><circle cx=\"13.5\" cy=\"6.5\" r=\"0.5\" /><circle cx=\"17.5\" cy=\"10.5\" r=\"0.5\" /><circle cx=\"8.5\" cy=\"7.5\" r=\"0.5\" /><circle cx=\"6.5\" cy=\"12\" r=\"0.5\" /><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z\" /></svg>\n <span class=\"hidden sm:inline\">{getCurrentDesign()}</span>\n <svg\n class={`w-4 h-4 transition-transform duration-200 ${isOpen() ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <Show when={isOpen()}>\n <div class=\"absolute right-0 mt-2 py-2 bg-card border border-border rounded-lg shadow-xl overflow-hidden min-w-[180px] max-h-[400px] overflow-y-auto z-50\">\n <For each={designs()}>\n {(design) => (\n <button\n type=\"button\"\n onClick={() => handleDesignChange(design.path)}\n class={`w-full px-4 py-2.5 text-left text-sm transition-colors ${getCurrentDesign() === design.label\n ? 'bg-primary/10 text-primary font-medium'\n : 'hover:bg-bg-muted text-foreground'\n }`}\n >\n {design.label}\n <Show when={getCurrentDesign() === design.label}>\n <span class=\"ml-2 text-primary\">✓</span>\n </Show>\n </button>\n )}\n </For>\n </div>\n </Show>\n </div>\n )\n}\n","// @geenius/tools-devtools-solidjs — components/PageLoadWaterfall.tsx\nimport { onMount } from 'solid-js'\n\nexport type SsrTiming = {\n ssrStart: number\n getAuthStart: number\n getAuthEnd: number\n translationsStart: number\n translationsEnd: number\n userPrefsStart: number\n userPrefsEnd: number\n ssrEnd: number\n isCachedAuth: boolean\n}\n\n/**\n * PageLoadWaterfall — invisible component that logs detailed performance\n * waterfall data to the browser console on first mount.\n *\n * Includes: network timing, SSR breakdown, FCP, resource loading, top-5 slowest JS bundles.\n * Returns `null` — no UI.\n */\nexport function PageLoadWaterfall(props: { ssrTiming?: SsrTiming | null }) {\n let hasLogged = false\n\n onMount(() => {\n if (hasLogged) return\n hasLogged = true\n logWaterfall(props.ssrTiming)\n })\n\n return null\n}\n\n/** @internal Shared waterfall logging logic — framework-agnostic */\nexport function logWaterfall(ssrTiming?: SsrTiming | null) {\n const clientStart = performance.now()\n\n const run = () => {\n const navEntry = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined\n const fcp = performance.getEntriesByType('paint').find((e) => e.name === 'first-contentful-paint')\n\n console.log('\\n')\n console.log('%c╔══════════════════════════════════════════════════════╗', 'color: #4CAF50; font-weight: bold')\n console.log('%c║ PAGE LOAD PERFORMANCE WATERFALL ║', 'color: #4CAF50; font-weight: bold')\n console.log('%c╚══════════════════════════════════════════════════════╝', 'color: #4CAF50; font-weight: bold')\n\n if (navEntry) {\n const dns = navEntry.domainLookupEnd - navEntry.domainLookupStart\n const tcp = navEntry.connectEnd - navEntry.connectStart\n const ttfb = navEntry.responseStart - navEntry.requestStart\n const download = navEntry.responseEnd - navEntry.responseStart\n const domParsing = navEntry.domInteractive - navEntry.responseEnd\n const domComplete = navEntry.domComplete - navEntry.domInteractive\n const totalLoad = navEntry.loadEventEnd - navEntry.startTime\n\n console.log('%c\\n── Network & Browser Timing ──', 'color: #FF9800; font-weight: bold')\n console.table({\n 'DNS Lookup': { ms: Math.round(dns), bar: '█'.repeat(Math.max(1, Math.round(dns / 20))) },\n 'TCP Connect': { ms: Math.round(tcp), bar: '█'.repeat(Math.max(1, Math.round(tcp / 20))) },\n 'TTFB (Time to First Byte)': { ms: Math.round(ttfb), bar: '█'.repeat(Math.max(1, Math.round(ttfb / 20))) },\n 'Response Download': { ms: Math.round(download), bar: '█'.repeat(Math.max(1, Math.round(download / 20))) },\n 'DOM Parsing': { ms: Math.round(domParsing), bar: '█'.repeat(Math.max(1, Math.round(domParsing / 20))) },\n 'DOM Complete': { ms: Math.round(domComplete), bar: '█'.repeat(Math.max(1, Math.round(domComplete / 20))) },\n 'Total Page Load': { ms: Math.round(totalLoad), bar: '█'.repeat(Math.max(1, Math.round(totalLoad / 20))) },\n })\n\n console.log(\n `%c\\n⚡ TTFB: ${Math.round(ttfb)}ms — This includes all SSR processing time`,\n ttfb > 500 ? 'color: #F44336; font-weight: bold; font-size: 14px' : 'color: #4CAF50; font-weight: bold; font-size: 14px',\n )\n }\n\n if (ssrTiming) {\n console.log('%c\\n── SSR beforeLoad Breakdown ──', 'color: #2196F3; font-weight: bold')\n const total = ssrTiming.ssrEnd - ssrTiming.ssrStart\n const auth = ssrTiming.getAuthEnd ? ssrTiming.getAuthEnd - ssrTiming.getAuthStart : 0\n const prefs = ssrTiming.userPrefsEnd ? ssrTiming.userPrefsEnd - ssrTiming.userPrefsStart : 0\n const trans = ssrTiming.translationsEnd ? ssrTiming.translationsEnd - ssrTiming.translationsStart : 0\n\n console.table({\n 'getAuth()': { ms: auth, bar: '█'.repeat(Math.max(1, Math.round(auth / 20))), note: ssrTiming.isCachedAuth ? '(cached)' : '(server call)' },\n 'User Prefs': { ms: prefs, bar: '█'.repeat(Math.max(1, Math.round(prefs / 20))) },\n 'loadTranslations()': { ms: trans, bar: '█'.repeat(Math.max(1, Math.round(trans / 20))) },\n 'Total SSR beforeLoad': { ms: total, bar: '█'.repeat(Math.max(1, Math.round(total / 20))) },\n })\n } else {\n console.log('%c\\n── SSR Timing: Not available (client-side navigation) ──', 'color: #9E9E9E')\n }\n\n if (fcp) {\n console.log(\n `%c\\n🎨 First Contentful Paint: ${Math.round(fcp.startTime)}ms`,\n fcp.startTime > 1500 ? 'color: #F44336; font-weight: bold; font-size: 14px' : 'color: #4CAF50; font-weight: bold; font-size: 14px',\n )\n }\n\n console.log(\n `%c\\n🧩 Component mounted at: ${Math.round(clientStart)}ms from page start`,\n 'color: #2c4f7c; font-weight: bold',\n )\n\n const resources = performance.getEntriesByType('resource') as PerformanceResourceTiming[]\n const jsResources = resources.filter((r) => r.name.endsWith('.js') || r.name.endsWith('.mjs') || r.name.includes('.js?'))\n const cssResources = resources.filter((r) => r.name.endsWith('.css') || r.name.includes('.css?'))\n const fontResources = resources.filter((r) => r.name.includes('fonts.googleapis') || r.name.includes('fonts.gstatic'))\n const imgResources = resources.filter((r) => r.initiatorType === 'img')\n\n const totalJsSize = jsResources.reduce((sum, r) => sum + (r.transferSize || 0), 0)\n const slowestJs = [...jsResources].sort((a, b) => b.duration - a.duration).slice(0, 5)\n\n console.log('%c\\n── Resource Loading ──', 'color: #9C27B0; font-weight: bold')\n console.table({\n 'JS bundles': { count: jsResources.length, totalKB: Math.round(totalJsSize / 1024), slowest_ms: Math.round(slowestJs[0]?.duration ?? 0) },\n 'CSS files': { count: cssResources.length, totalKB: Math.round(cssResources.reduce((s, r) => s + (r.transferSize || 0), 0) / 1024) },\n 'Font resources': { count: fontResources.length, slowest_ms: Math.round([...fontResources].sort((a, b) => b.duration - a.duration)[0]?.duration ?? 0) },\n 'Images': { count: imgResources.length, totalKB: Math.round(imgResources.reduce((s, r) => s + (r.transferSize || 0), 0) / 1024) },\n })\n\n if (slowestJs.length > 0) {\n console.log('%c\\n── Top 5 Slowest JS Bundles ──', 'color: #E91E63; font-weight: bold')\n console.table(\n Object.fromEntries(\n slowestJs.map((r, i) => [\n `#${i + 1}`,\n {\n file: r.name.split('/').pop()?.split('?')[0] ?? r.name,\n duration_ms: Math.round(r.duration),\n size_KB: Math.round((r.transferSize || 0) / 1024),\n },\n ]),\n ),\n )\n }\n\n console.log('%c\\n══════════════════════════════════════════════════════', 'color: #4CAF50; font-weight: bold')\n }\n\n if (document.readyState === 'complete') {\n setTimeout(run, 500)\n } else {\n window.addEventListener('load', () => setTimeout(run, 500))\n }\n}\n","// @geenius/tools-devtools — data/designs.ts\n\nexport interface Design {\n id: string\n name: string\n path: string\n}\n\nexport const designs: Design[] = Array.from({ length: 21 }, (_, i) => ({\n id: String(i + 1),\n name: `Design ${i + 1}`,\n path: `/dev/design/${i + 1}`,\n}))\n"]}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { ZodSchema } from 'zod/v4';
|
|
2
|
+
export { ZodSchema } from 'zod/v4';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @geenius/tools-env — Environment variable validation and management
|
|
6
|
+
*
|
|
7
|
+
* Provides schema-based environment variable validation using Zod.
|
|
8
|
+
* Validates at runtime and provides type-safe access to env vars.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Environment variable schema definition
|
|
13
|
+
*/
|
|
14
|
+
type EnvSchema = Record<string, ZodSchema>;
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for environment validation
|
|
17
|
+
*/
|
|
18
|
+
interface EnvConfig {
|
|
19
|
+
/** Whether to throw on validation error (default: true) */
|
|
20
|
+
throw?: boolean;
|
|
21
|
+
/** Prefix to add to all env var names (e.g., 'REACT_APP_') */
|
|
22
|
+
prefix?: string;
|
|
23
|
+
/** Default values for optional variables */
|
|
24
|
+
defaults?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Validates environment variables against a Zod schema
|
|
28
|
+
*
|
|
29
|
+
* @param schema Zod schema defining expected environment variables
|
|
30
|
+
* @param config Validation configuration options
|
|
31
|
+
* @returns Validated environment variables as typed object
|
|
32
|
+
* @throws Error if validation fails and throw option is true
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const envSchema = {
|
|
37
|
+
* DATABASE_URL: z.string().url(),
|
|
38
|
+
* API_KEY: z.string(),
|
|
39
|
+
* DEBUG: z.enum(['true', 'false']).optional(),
|
|
40
|
+
* }
|
|
41
|
+
*
|
|
42
|
+
* const env = validateEnv(envSchema, { throw: true })
|
|
43
|
+
* // env is now { DATABASE_URL: string, API_KEY: string, DEBUG?: string }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare function validateEnv<T extends EnvSchema>(schema: T, config?: EnvConfig): Partial<{
|
|
47
|
+
[K in keyof T]: unknown;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Creates a reusable environment validator
|
|
51
|
+
*
|
|
52
|
+
* @param schema Zod schema
|
|
53
|
+
* @param config Default configuration
|
|
54
|
+
* @returns Validator function
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const validator = createEnvValidator(
|
|
59
|
+
* { DATABASE_URL: z.string().url() },
|
|
60
|
+
* { throw: true }
|
|
61
|
+
* )
|
|
62
|
+
* const env = validator()
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
declare function createEnvValidator<T extends EnvSchema>(schema: T, config?: EnvConfig): () => Partial<{ [K in keyof T]: unknown; }>;
|
|
66
|
+
/**
|
|
67
|
+
* Gets a single environment variable with optional validation
|
|
68
|
+
*
|
|
69
|
+
* @param key Environment variable key
|
|
70
|
+
* @param schema Optional Zod schema for validation
|
|
71
|
+
* @param defaultValue Default value if not found
|
|
72
|
+
* @returns Environment variable value or default
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const apiKey = getEnv('API_KEY', z.string().min(1))
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
declare function getEnv<T = string>(key: string, schema?: ZodSchema, defaultValue?: T): T | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Checks if environment variable exists and is set
|
|
82
|
+
*
|
|
83
|
+
* @param key Variable name
|
|
84
|
+
* @returns True if variable exists
|
|
85
|
+
*/
|
|
86
|
+
declare function hasEnv(key: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Gets multiple environment variables at once
|
|
89
|
+
*
|
|
90
|
+
* @param keys List of environment variable keys
|
|
91
|
+
* @returns Object with available values
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* const { API_KEY, DEBUG } = getEnvs(['API_KEY', 'DEBUG'])
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
declare function getEnvs(keys: string[]): Record<string, string | undefined>;
|
|
99
|
+
/**
|
|
100
|
+
* Asserts that all required environment variables are set
|
|
101
|
+
*
|
|
102
|
+
* @param requiredKeys List of required variable names
|
|
103
|
+
* @throws Error if any required variable is missing
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* requireEnv(['DATABASE_URL', 'API_KEY'])
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
declare function requireEnv(requiredKeys: string[]): void;
|
|
111
|
+
/**
|
|
112
|
+
* Parses environment variable as JSON
|
|
113
|
+
*
|
|
114
|
+
* @param key Environment variable key
|
|
115
|
+
* @param defaultValue Default object if parsing fails
|
|
116
|
+
* @returns Parsed JSON object
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* const config = parseEnvJson('APP_CONFIG', { theme: 'light' })
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
declare function parseEnvJson<T = unknown>(key: string, defaultValue?: T): T | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* Parses environment variable as boolean
|
|
126
|
+
*
|
|
127
|
+
* @param key Environment variable key
|
|
128
|
+
* @param defaultValue Default value
|
|
129
|
+
* @returns Boolean value
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* const debug = parseEnvBool('DEBUG', false)
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
declare function parseEnvBool(key: string, defaultValue?: boolean): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Parses environment variable as number
|
|
139
|
+
*
|
|
140
|
+
* @param key Environment variable key
|
|
141
|
+
* @param defaultValue Default value
|
|
142
|
+
* @returns Numeric value
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts
|
|
146
|
+
* const port = parseEnvNumber('PORT', 3000)
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
declare function parseEnvNumber(key: string, defaultValue?: number): number;
|
|
150
|
+
|
|
151
|
+
export { type EnvConfig, type EnvSchema, createEnvValidator, getEnv, getEnvs, hasEnv, parseEnvBool, parseEnvJson, parseEnvNumber, requireEnv, validateEnv };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { z } from "zod/v4";
|
|
3
|
+
function validateEnv(schema, config = {}) {
|
|
4
|
+
const { prefix = "", defaults = {}, throw: shouldThrow = true } = config;
|
|
5
|
+
const envVars = {};
|
|
6
|
+
for (const key of Object.keys(schema)) {
|
|
7
|
+
const prefixedKey = prefix ? `${prefix}${key}` : key;
|
|
8
|
+
const value = process.env[prefixedKey] ?? defaults[key];
|
|
9
|
+
if (value !== void 0) {
|
|
10
|
+
envVars[key] = value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const schemaObj = z.object(schema);
|
|
14
|
+
const result = schemaObj.safeParse(envVars);
|
|
15
|
+
if (!result.success) {
|
|
16
|
+
const errors = result.error.issues.map((e) => `${e.path.join(".")}: ${e.message}`).join(", ");
|
|
17
|
+
const message = `Environment validation failed: ${errors}`;
|
|
18
|
+
if (shouldThrow) {
|
|
19
|
+
throw new Error(message);
|
|
20
|
+
}
|
|
21
|
+
console.error(message);
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
return result.data;
|
|
25
|
+
}
|
|
26
|
+
function createEnvValidator(schema, config = {}) {
|
|
27
|
+
return () => validateEnv(schema, config);
|
|
28
|
+
}
|
|
29
|
+
function getEnv(key, schema, defaultValue) {
|
|
30
|
+
const value = process.env[key] ?? defaultValue;
|
|
31
|
+
if (!value) return void 0;
|
|
32
|
+
if (schema) {
|
|
33
|
+
const result = schema.safeParse(value);
|
|
34
|
+
if (!result.success) {
|
|
35
|
+
throw new Error(`Invalid env var ${key}: ${result.error.message}`);
|
|
36
|
+
}
|
|
37
|
+
return result.data;
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function hasEnv(key) {
|
|
42
|
+
return key in process.env;
|
|
43
|
+
}
|
|
44
|
+
function getEnvs(keys) {
|
|
45
|
+
return keys.reduce(
|
|
46
|
+
(acc, key) => {
|
|
47
|
+
acc[key] = process.env[key];
|
|
48
|
+
return acc;
|
|
49
|
+
},
|
|
50
|
+
{}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function requireEnv(requiredKeys) {
|
|
54
|
+
const missing = requiredKeys.filter((key) => !(key in process.env));
|
|
55
|
+
if (missing.length > 0) {
|
|
56
|
+
throw new Error(
|
|
57
|
+
`Missing required environment variables: ${missing.join(", ")}`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function parseEnvJson(key, defaultValue) {
|
|
62
|
+
const value = process.env[key];
|
|
63
|
+
if (!value) return defaultValue;
|
|
64
|
+
try {
|
|
65
|
+
return JSON.parse(value);
|
|
66
|
+
} catch {
|
|
67
|
+
console.warn(`Failed to parse ${key} as JSON`);
|
|
68
|
+
return defaultValue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function parseEnvBool(key, defaultValue = false) {
|
|
72
|
+
const value = process.env[key];
|
|
73
|
+
if (!value) return defaultValue;
|
|
74
|
+
return ["true", "1", "yes", "on"].includes(value.toLowerCase());
|
|
75
|
+
}
|
|
76
|
+
function parseEnvNumber(key, defaultValue = 0) {
|
|
77
|
+
const value = process.env[key];
|
|
78
|
+
if (!value) return defaultValue;
|
|
79
|
+
const num = Number(value);
|
|
80
|
+
return isNaN(num) ? defaultValue : num;
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
createEnvValidator,
|
|
84
|
+
getEnv,
|
|
85
|
+
getEnvs,
|
|
86
|
+
hasEnv,
|
|
87
|
+
parseEnvBool,
|
|
88
|
+
parseEnvJson,
|
|
89
|
+
parseEnvNumber,
|
|
90
|
+
requireEnv,
|
|
91
|
+
validateEnv
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=index.js.map
|