UNPKG

@ewwmy/cv-builder

Version:

💻 A CLI utility to generate a well-formatted CV in PDF format 📕 based on JSON CV data and a Handlebars template

141 lines (140 loc) • 5.83 kB
"use strict"; 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 __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.HandlebarsService = void 0; const inversify_1 = require("inversify"); const markdown_service_1 = require("../markdown/markdown.service"); const dependency_types_1 = require("../types/dependency.types"); const handlebars_1 = __importDefault(require("handlebars")); let HandlebarsService = class HandlebarsService { constructor(markdown) { this.markdown = markdown; this.registerLogicalHelpers(); } registerHelpers() { this.registerMarkdownHelper(); this.registerImageHelper(); } unregisterHelpers() { this.unregisterDateHelper(); } compile(template, data) { if (typeof data === 'object' && data !== null) { return handlebars_1.default.compile(template)(Object.assign({}, data)); } else { return handlebars_1.default.compile(template)({ data, }); } } registerLogicalHelpers() { handlebars_1.default.registerHelper({ eq: (v1, v2) => v1 === v2, ne: (v1, v2) => v1 !== v2, lt: (v1, v2) => v1 < v2, gt: (v1, v2) => v1 > v2, lte: (v1, v2) => v1 <= v2, gte: (v1, v2) => v1 >= v2, and() { return Array.prototype.slice .call(arguments, 0, arguments.length - 1) .every(Boolean); }, or() { return Array.prototype.slice .call(arguments, 0, arguments.length - 1) .some(Boolean); }, }); } // handlebars: register `markdown` helper registerMarkdownHelper() { handlebars_1.default.registerHelper('markdown', (text) => { const markdowned = this.markdown.parseInline(text || ''); if (typeof markdowned === 'string') { return new handlebars_1.default.SafeString(markdowned); } else if (markdowned instanceof Promise) { throw new Error('Promises are not supported in Handlebars helpers'); } else { throw new Error('Unknown Handlebars error'); } }); } // handlebars: register `image` helper registerImageHelper() { handlebars_1.default.registerHelper('image', (img, opt) => { var _a, _b, _c; if (!img || !img.base64) { return ''; } const roundness = ((_a = opt === null || opt === void 0 ? void 0 : opt.hash) === null || _a === void 0 ? void 0 : _a.roundness) || 0; const width = ((_b = opt === null || opt === void 0 ? void 0 : opt.hash) === null || _b === void 0 ? void 0 : _b.width) || '100px'; const height = ((_c = opt === null || opt === void 0 ? void 0 : opt.hash) === null || _c === void 0 ? void 0 : _c.height) || width; return new handlebars_1.default.SafeString(` <div style=" width: ${width}; height: ${height}; border-radius: calc(50% * ${roundness}); overflow: hidden; display: inline-block;"> <img src="data:image/png;base64,${img.base64}" style=" width: 100%; height: 100%; object-fit: cover;" /> </div> `); }); } // date formatter function getDateFormatter(locale, options) { return (text) => { const date = new Date(text); return new handlebars_1.default.SafeString(new Intl.DateTimeFormat(locale, options).format(date)); }; } // handlebars: register `date` helper registerDateHelper(locale) { handlebars_1.default.registerHelper('date', this.getDateFormatter(locale, { year: 'numeric', month: 'short', })); } // handlebars: register `year` helper to extract the year from a date registerYearHelper(locale) { handlebars_1.default.registerHelper('year', this.getDateFormatter(locale, { year: 'numeric', })); } // handlebars: unregister `date` helper unregisterDateHelper() { handlebars_1.default.unregisterHelper('date'); } // handlebars: unregister `year` helper unregisterYearHelper() { handlebars_1.default.unregisterHelper('year'); } }; exports.HandlebarsService = HandlebarsService; exports.HandlebarsService = HandlebarsService = __decorate([ (0, inversify_1.injectable)(), __param(0, (0, inversify_1.inject)(dependency_types_1.DependencyTypes.Markdown)), __metadata("design:paramtypes", [markdown_service_1.MarkdownService]) ], HandlebarsService);