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
JavaScript
;
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