@meldscience/meld
Version:
pipeable one-shot prompt scripting toolkit
95 lines • 3.56 kB
JavaScript
;
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