UNPKG

dynamate-design-to-code

Version:

A powerful tool for converting Figma designs into high-quality, production-ready code with built-in best practices and customizable rulesets

108 lines 4.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CursorRulesetService = void 0; const promises_1 = require("fs/promises"); const path_1 = require("path"); const fs_1 = require("fs"); /** * Service to manage Cursor rulesets */ class CursorRulesetService { constructor(config) { this.ruleset = config.ruleset; this.projectRoot = config.projectRoot; this.rulesDir = (0, path_1.join)(this.projectRoot, '.cursor', 'rules'); this.configPath = config.cursorConfigPath || (0, path_1.join)(this.projectRoot, '.cursor', 'config.json'); } /** * Applies a ruleset to the Cursor configuration */ async applyRuleset(ruleset) { // Ensure rules directory exists if (!(0, fs_1.existsSync)(this.rulesDir)) { await (0, promises_1.mkdir)(this.rulesDir, { recursive: true }); } const rulesetDir = (0, path_1.join)(this.rulesDir, ruleset.name); if (!(0, fs_1.existsSync)(rulesetDir)) { await (0, promises_1.mkdir)(rulesetDir, { recursive: true }); } // Save ruleset configuration await (0, promises_1.writeFile)((0, path_1.join)(rulesetDir, 'ruleset.json'), JSON.stringify(ruleset, null, 2)); // Save example files const examplesDir = (0, path_1.join)(rulesetDir, 'examples'); if (!(0, fs_1.existsSync)(examplesDir)) { await (0, promises_1.mkdir)(examplesDir, { recursive: true }); } for (const [filename, content] of Object.entries(ruleset.examples)) { await (0, promises_1.writeFile)((0, path_1.join)(examplesDir, filename), content); } // Update Cursor config await this.updateCursorConfig(ruleset.name); } /** * Updates the main Cursor configuration to include the new ruleset */ async updateCursorConfig(rulesetName) { try { let config = { rulesets: [] }; try { const configContent = await (0, promises_1.readFile)(this.configPath, 'utf-8'); config = JSON.parse(configContent); } catch (error) { // Config doesn't exist yet, use default } if (!config.rulesets.includes(rulesetName)) { config.rulesets.push(rulesetName); } await (0, promises_1.mkdir)((0, path_1.join)(this.projectRoot, '.cursor'), { recursive: true }); await (0, promises_1.writeFile)(this.configPath, JSON.stringify(config, null, 2)); } catch (error) { throw new Error(`Failed to update Cursor config: ${error}`); } } /** * Removes a ruleset from Cursor configuration */ async removeRuleset(rulesetName) { const rulesetDir = (0, path_1.join)(this.rulesDir, rulesetName); if ((0, fs_1.existsSync)(rulesetDir)) { await (0, promises_1.rm)(rulesetDir, { recursive: true, force: true }); await this.removeFromConfig(rulesetName); } } /** * Removes a ruleset from the Cursor config file */ async removeFromConfig(rulesetName) { try { const configContent = await (0, promises_1.readFile)(this.configPath, 'utf-8'); const config = JSON.parse(configContent); config.rulesets = config.rulesets.filter(name => name !== rulesetName); await (0, promises_1.writeFile)(this.configPath, JSON.stringify(config, null, 2)); } catch (error) { // If config doesn't exist, nothing to remove } } async getRulesets() { if (!(0, fs_1.existsSync)(this.rulesDir)) { return []; } const entries = await (0, promises_1.readdir)(this.rulesDir, { withFileTypes: true }); return entries .filter(entry => entry.isDirectory()) .map(entry => entry.name); } async getRuleset(rulesetName) { const rulesetPath = (0, path_1.join)(this.rulesDir, rulesetName, 'ruleset.json'); if (!(0, fs_1.existsSync)(rulesetPath)) { return null; } const content = await (0, promises_1.readFile)(rulesetPath, 'utf-8'); return JSON.parse(content); } } exports.CursorRulesetService = CursorRulesetService; //# sourceMappingURL=cursor-ruleset.js.map