pixel-forge
Version:
A comprehensive generator for social media previews, favicons, and visual assets across all platforms
132 lines (131 loc) • 5.15 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OpenGraphGenerator = void 0;
const path_1 = __importDefault(require("path"));
const image_processor_1 = require("../../core/image-processor");
class OpenGraphGenerator {
constructor(sourceImage, config) {
this.config = config;
this.processor = new image_processor_1.ImageProcessor(sourceImage);
}
/**
* Generate OpenGraph images for various platforms
*/
async generate() {
const { socialPreview } = this.config;
const options = socialPreview || {};
// Generate Facebook/Default OpenGraph Image
await this.generateFacebookImage(options);
// Generate LinkedIn Image
await this.generateLinkedInImage(options);
// Generate Twitter Card Image
await this.generateTwitterImage(options);
}
/**
* Generate Facebook OpenGraph Image
*/
async generateFacebookImage(options) {
const { width, height } = image_processor_1.ImageSizes.social.facebook;
const outputPath = path_1.default.join(this.config.output.path, 'og-facebook.png');
await this.processor.createSocialPreview({
width,
height,
title: options.title || this.config.appName,
description: options.description,
template: options.template,
background: this.config.backgroundColor
});
await this.processor.save(outputPath, {
format: 'png',
quality: this.config.output.quality
});
}
/**
* Generate LinkedIn Image
*/
async generateLinkedInImage(options) {
const { width, height } = image_processor_1.ImageSizes.social.linkedin;
const outputPath = path_1.default.join(this.config.output.path, 'og-linkedin.png');
await this.processor.createSocialPreview({
width,
height,
title: options.title || this.config.appName,
description: options.description,
template: options.template,
background: this.config.backgroundColor
});
await this.processor.save(outputPath, {
format: 'png',
quality: this.config.output.quality
});
}
/**
* Generate Twitter Card Image
*/
async generateTwitterImage(options) {
const { width, height } = image_processor_1.ImageSizes.social.twitter;
const outputPath = path_1.default.join(this.config.output.path, 'twitter-card.png');
await this.processor.createSocialPreview({
width,
height,
title: options.title || this.config.appName,
description: options.description,
template: options.template,
background: this.config.backgroundColor
});
await this.processor.save(outputPath, {
format: 'png',
quality: this.config.output.quality
});
}
/**
* Get HTML meta tags for OpenGraph images
*/
getMetaTags() {
const { prefix = '/' } = this.config.output;
const tags = [
// Facebook
`<meta property="og:image" content="${prefix}og-facebook.png" />`,
`<meta property="og:image:width" content="${image_processor_1.ImageSizes.social.facebook.width}" />`,
`<meta property="og:image:height" content="${image_processor_1.ImageSizes.social.facebook.height}" />`,
// LinkedIn
`<meta property="og:image" content="${prefix}og-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}" />`,
// Twitter
`<meta name="twitter:card" content="summary_large_image" />`,
`<meta name="twitter:image" content="${prefix}twitter-card.png" />`
];
return tags;
}
/**
* Get Next.js metadata configuration
*/
getNextMetadata() {
const { prefix = '/' } = this.config.output;
return {
openGraph: {
images: [
{
url: `${prefix}og-facebook.png`,
width: image_processor_1.ImageSizes.social.facebook.width,
height: image_processor_1.ImageSizes.social.facebook.height
},
{
url: `${prefix}og-linkedin.png`,
width: image_processor_1.ImageSizes.social.linkedin.width,
height: image_processor_1.ImageSizes.social.linkedin.height
}
]
},
twitter: {
card: 'summary_large_image',
images: [`${prefix}twitter-card.png`]
}
};
}
}
exports.OpenGraphGenerator = OpenGraphGenerator;