UNPKG

tprompter

Version:
71 lines (70 loc) 3.62 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var PromptsEngine_1; import { Service } from 'typedi'; import { StdinDataReader } from '../utils/StdinDataReader.js'; import { TextDataEnricher } from '../textDataEnricher/TextDataEnricher.js'; let PromptsEngine = PromptsEngine_1 = class PromptsEngine { constructor(stdinReader, enricher) { this.stdinReader = stdinReader; this.enricher = enricher; } proceed(template) { return __awaiter(this, void 0, void 0, function* () { const compiledTemplate = PromptsEngine_1.compile(template); const result = yield compiledTemplate({ readStdin: (...args_1) => __awaiter(this, [...args_1], void 0, function* (placeholder = 'Input required') { const inputCodeRaw = yield this.stdinReader.readData(placeholder); return yield this.enricher.enrichRawInput(inputCodeRaw.trim()); }), }); return result.trim(); }); } static compile(rawTemplate) { const pieces = rawTemplate.split('${'); const parts = [pieces[0]]; for (let i = 1; i < pieces.length; i++) { const [expression, rest] = pieces[i].split('}'); const f = new Function('data', `with(data || {}) { return ${expression}; }`); parts.push(f); parts.push(rest); } return (data) => __awaiter(this, void 0, void 0, function* () { const partsPromises = parts.map((part) => __awaiter(this, void 0, void 0, function* () { if (typeof part === 'function') { const returns = part(data); if (returns && typeof returns.then === 'function') { return yield returns; } return returns; } return part; })); const resolvedParts = yield Promise.all(partsPromises); return resolvedParts.join(''); }); } }; PromptsEngine = PromptsEngine_1 = __decorate([ Service(), __metadata("design:paramtypes", [StdinDataReader, TextDataEnricher]) ], PromptsEngine); export { PromptsEngine };