UNPKG

@meldscience/meld

Version:

pipeable one-shot prompt scripting toolkit

95 lines 3.56 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Meld = void 0; exports.processMeldFile = processMeldFile; const fs_1 = require("fs"); const path_1 = require("path"); const unified_1 = require("unified"); const remark_parse_1 = __importDefault(require("remark-parse")); const remark_stringify_1 = __importDefault(require("remark-stringify")); const remarkMeldDirectives_1 = require("./plugins/remarkMeldDirectives"); const remarkProcessMeldNodes_1 = require("./plugins/remarkProcessMeldNodes"); const remarkMeldDirectiveHandler_1 = require("./plugins/remarkMeldDirectiveHandler"); async function processMeldFile(options) { const { inputPath, workspacePath, debug } = options; try { const content = (0, fs_1.readFileSync)(inputPath, 'utf-8'); // Process the file through our remark pipeline const file = await (0, unified_1.unified)() .use(remark_parse_1.default) .use(() => (tree) => { if (debug) console.log('After parse:', JSON.stringify(tree, null, 2)); return tree; }) .use(remarkMeldDirectives_1.remarkMeldDirectives) .use(() => (tree) => { if (debug) console.log('After meldDirectives:', JSON.stringify(tree, null, 2)); return tree; }) .use(remarkProcessMeldNodes_1.remarkProcessMeldNodes, { currentFileDir: (0, path_1.dirname)(inputPath), debug }) .use(() => (tree) => { if (debug) console.log('After processMeldNodes:', JSON.stringify(tree, null, 2)); return tree; }) .use(remarkMeldDirectiveHandler_1.remarkMeldDirectiveHandler) .use(() => (tree) => { if (debug) console.log('After meldDirectiveHandler:', JSON.stringify(tree, null, 2)); return tree; }) .use(remark_stringify_1.default, { // Disable escaping and other markdown processing entities: false, bullet: '-', fence: '`', fences: true, incrementListMarker: true, rule: '-', ruleRepetition: 3, ruleSpaces: false, setext: false, quote: '"', strong: '*', emphasis: '_' }) .process(content); const meldErrors = file.data.meldErrors || []; // Clean up any double newlines and trailing whitespace let processedContent = String(file); processedContent = processedContent.split('\n').map(line => line.trimRight()).join('\n'); processedContent = processedContent.replace(/\n{3,}/g, '\n\n'); processedContent = processedContent.replace(/\n+$/, '\n'); return { content: processedContent, errors: meldErrors }; } catch (error) { if (error.code === 'ENOENT') { return { content: '', errors: ['Input file not found'] }; } return { content: '', errors: [`Error processing file: ${error.message}`] }; } } class Meld { constructor(options) { this.options = options; } async process() { return processMeldFile(this.options); } } exports.Meld = Meld; //# sourceMappingURL=meld.js.map