UNPKG

pixel-forge

Version:

A comprehensive generator for social media previews, favicons, and visual assets across all platforms

128 lines (127 loc) 5.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LinkedInGenerator = void 0; const path_1 = __importDefault(require("path")); const image_processor_1 = require("../../core/image-processor"); class LinkedInGenerator { constructor(sourceImage, config) { this.config = config; this.sourceImage = sourceImage; } /** * Generate LinkedIn-optimized images */ async generate(options = {}) { const { includeStandard = true, includeCompany = false, title, description, template = 'basic' } = options; if (includeStandard) { await this.generateStandardImage(title, description, template); } if (includeCompany) { await this.generateCompanyImage(title, description, template); } } /** * Generate standard LinkedIn image (1200x627) */ async generateStandardImage(title, description, template) { const processor = new image_processor_1.ImageProcessor(this.sourceImage); const outputPath = path_1.default.join(this.config.output.path, 'linkedin-share.png'); const socialFile = await processor.createSocialPreview({ width: image_processor_1.ImageSizes.social.linkedin.width, height: image_processor_1.ImageSizes.social.linkedin.height, title, description, template, background: this.config.backgroundColor }); const finalProcessor = new image_processor_1.ImageProcessor(socialFile); await finalProcessor.save(outputPath); await processor.cleanup(); } /** * Generate LinkedIn company page image (1104x736) */ async generateCompanyImage(title, description, template) { const processor = new image_processor_1.ImageProcessor(this.sourceImage); const outputPath = path_1.default.join(this.config.output.path, 'linkedin-company.png'); const socialFile = await processor.createSocialPreview({ width: image_processor_1.ImageSizes.social.linkedinCompany.width, height: image_processor_1.ImageSizes.social.linkedinCompany.height, title, description, template, background: this.config.backgroundColor }); const finalProcessor = new image_processor_1.ImageProcessor(socialFile); await finalProcessor.save(outputPath); await processor.cleanup(); } /** * Generate square LinkedIn image (1200x1200) */ async generateSquareImage(title, description, template) { const processor = new image_processor_1.ImageProcessor(this.sourceImage); const outputPath = path_1.default.join(this.config.output.path, 'linkedin-square.png'); const socialFile = await processor.createSocialPreview({ width: 1200, height: 1200, title, description, template, background: this.config.backgroundColor }); const finalProcessor = new image_processor_1.ImageProcessor(socialFile); await finalProcessor.save(outputPath); await processor.cleanup(); } /** * Get HTML meta tags for LinkedIn */ getMetaTags() { const prefix = this.config.output.prefix || '/'; return [ `<meta property="og:image" content="${prefix}linkedin.png">`, `<meta property="og:image:width" content="${image_processor_1.ImageSizes.social.linkedin.width}">`, `<meta property="og:image:height" content="${image_processor_1.ImageSizes.social.linkedin.height}">`, `<meta property="og:image:type" content="image/png">`, `<meta property="og:title" content="${this.config.appName}">`, `<meta property="og:description" content="${this.config.description || ''}">`, `<meta property="og:type" content="article">`, // LinkedIn-specific meta tags `<meta property="article:author" content="">`, // Can be configured later `<meta property="og:site_name" content="${this.config.appName}">`, ]; } /** * Get Next.js metadata configuration for LinkedIn */ getNextMetadata() { const prefix = this.config.output.prefix || '/'; return { openGraph: { title: this.config.appName, description: this.config.description, images: [ { url: `${prefix}linkedin.png`, width: image_processor_1.ImageSizes.social.linkedin.width, height: image_processor_1.ImageSizes.social.linkedin.height, alt: this.config.appName, } ], type: 'article', siteName: this.config.appName, }, }; } /** * Get list of generated files */ getGeneratedFiles() { return ['linkedin.png', 'linkedin-company.png']; } } exports.LinkedInGenerator = LinkedInGenerator;