UNPKG

claude-statusline-powerline

Version:

Beautiful powerline-style statusline for Claude Code with git integration, session tracking, and cost monitoring

227 lines 9.89 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const node_child_process_1 = require("node:child_process"); const fs = __importStar(require("node:fs")); const font_profiles_1 = require("../font-profiles"); const themes_1 = require("../themes"); function generate_schema() { // Generate base schema using typescript-json-schema console.log('🔧 Generating base schema from TypeScript interfaces...'); (0, node_child_process_1.execSync)('npx typescript-json-schema src/types.ts StatuslineConfig --out statusline.schema.generated.json --required', { stdio: 'inherit', }); // Load the generated schema const generated_schema = JSON.parse(fs.readFileSync('statusline.schema.generated.json', 'utf8')); // Enhance with metadata, descriptions, and constraints const enhanced_schema = { $schema: 'http://json-schema.org/draft-07/schema#', $id: 'https://raw.githubusercontent.com/spences10/claude-statusline-powerline/main/statusline.schema.json', title: 'Claude Statusline Powerline Configuration', description: 'Configuration schema for Claude Code statusline with powerline symbols, git integration, and session tracking', ...generated_schema, // Add missing properties properties: { $schema: { type: 'string', description: 'JSON Schema reference for IntelliSense support', }, ...generated_schema.properties, }, }; // Add descriptions to main properties if (enhanced_schema.properties) { if (enhanced_schema.properties.separators) { enhanced_schema.properties.separators.description = 'Configure separator styles for different segments and states'; } if (enhanced_schema.properties.segments) { enhanced_schema.properties.segments.description = 'Control which segments are visible in the statusline'; } if (enhanced_schema.properties.color_theme) { enhanced_schema.properties.color_theme.description = 'Color theme for segment backgrounds and text'; enhanced_schema.properties.color_theme.enum = Object.keys(themes_1.THEMES); enhanced_schema.properties.color_theme.default = 'dark'; } if (enhanced_schema.properties.font_profile) { enhanced_schema.properties.font_profile.description = 'Font compatibility profile determining available separator symbols'; enhanced_schema.properties.font_profile.enum = Object.keys(font_profiles_1.FONT_PROFILES); enhanced_schema.properties.font_profile.default = 'powerline'; } if (enhanced_schema.properties.segment_config) { enhanced_schema.properties.segment_config.description = 'Advanced segment configuration with multiline layout, styling, and granular control'; } if (enhanced_schema.properties.current_theme) { enhanced_schema.properties.current_theme.description = 'Internal property populated with actual theme object - not for user configuration'; } } if (enhanced_schema.definitions?.SegmentStyleConfig) { const style_config = enhanced_schema.definitions.SegmentStyleConfig; if (style_config.properties?.bg_color) { style_config.properties.bg_color.pattern = '^#[0-9a-fA-F]{6}$'; style_config.properties.bg_color.description = 'Background color in hex format (e.g., #1e40af)'; style_config.properties.bg_color.examples = [ '#1e40af', '#059669', '#dc2626', ]; } if (style_config.properties?.fg_color) { style_config.properties.fg_color.pattern = '^#[0-9a-fA-F]{6}$'; style_config.properties.fg_color.description = 'Foreground (text) color in hex format (e.g., #ffffff)'; style_config.properties.fg_color.examples = [ '#ffffff', '#000000', ]; } if (style_config.properties?.separator?.properties?.color) { style_config.properties.separator.properties.color.pattern = '^#[0-9a-fA-F]{6}$'; style_config.properties.separator.properties.color.description = 'Separator color in hex format'; style_config.properties.separator.properties.color.examples = [ '#1e40af', '#059669', ]; } if (style_config.properties?.icons) { style_config.properties.icons.description = 'Custom icons for segment symbols'; style_config.properties.icons.additionalProperties = { type: 'string', description: 'Additional custom icon mappings', }; if (!style_config.properties.icons.properties) { style_config.properties.icons.properties = {}; } style_config.properties.icons.properties.folder = { type: 'string', description: 'Directory/folder icon', examples: ['📁', '🗂️', '📂', '\\uF07B'], }; style_config.properties.icons.properties.branch = { type: 'string', description: 'Git branch icon', examples: ['\\uE0A0', '🌿', '🌳', '\\uF126'], }; style_config.properties.icons.properties.clean = { type: 'string', description: 'Clean git status icon', examples: ['✓', '✅', '\\u2713', '\\uF00C'], }; style_config.properties.icons.properties.dirty = { type: 'string', description: 'Dirty git status icon', examples: ['±', '⚠️', '\\u00B1', '\\uF071'], }; style_config.properties.icons.properties.ai = { type: 'string', description: 'AI/Model icon', examples: ['⚡', '🤖', '🧠', '\\uE007'], }; style_config.properties.icons.properties.cost = { type: 'string', description: 'Session cost/usage icon', examples: ['💰', '💲', '🪙', '\\uF0D6'], }; } } // Add descriptions to definitions if (enhanced_schema.definitions?.SeparatorStyle) { enhanced_schema.definitions.SeparatorStyle.description = 'Visual style of powerline separators between segments'; } // Add additionalProperties: false to key objects (optional - makes schema stricter) enhanced_schema.additionalProperties = false; // Add examples enhanced_schema.examples = [ { color_theme: 'dark', segment_config: { segments: [ { type: 'model' }, { type: 'directory' }, { type: 'git' }, { type: 'session' }, ], }, }, { color_theme: 'electric', segment_config: { lines: [ { directory: true, git: true, model: true, }, { session: true, context: true, }, ], segments: [ { type: 'model' }, { type: 'directory' }, { type: 'git' }, { type: 'session' }, { type: 'context' }, ], }, }, ]; // Remove the old required constraint that makes all top-level properties required // Most config properties should be optional delete enhanced_schema.required; // Write the enhanced schema fs.writeFileSync('statusline.schema.json', JSON.stringify(enhanced_schema, null, 2)); // Clean up temporary file fs.unlinkSync('statusline.schema.generated.json'); console.log('✅ Enhanced schema generated successfully!'); console.log('📍 Schema written to statusline.schema.json'); } if (require.main === module) { generate_schema(); } //# sourceMappingURL=generate-schema.js.map