pdfkit
Version:
A JavaScript PDF generation library
194 lines (187 loc) • 4.66 kB
JavaScript
import { babel } from '@rollup/plugin-babel';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import asset from './tools/asset-plugin.mjs';
import binary from './tools/binary-plugin.mjs';
const iccProfilePath = 'lib/mixins/data/sRGB_IEC61966_2_1.icc';
const external = [
'module',
'stream',
'fs',
'zlib',
'fflate',
'fontkit',
'events',
'linebreak',
'png-js',
'js-md5',
'@noble/hashes/utils',
'@noble/hashes/sha256',
'@noble/ciphers/aes',
'crypto',
'saslprep',
];
const supportedBrowsers = [
'Firefox 115', // ESR from 2023
'iOS 16', // from 2022
'Safari 16', // from 2022
];
const standardFontInputs = {
Courier: 'lib/font/generated/Courier.js',
CourierBold: 'lib/font/generated/CourierBold.js',
CourierBoldOblique: 'lib/font/generated/CourierBoldOblique.js',
CourierOblique: 'lib/font/generated/CourierOblique.js',
Helvetica: 'lib/font/generated/Helvetica.js',
HelveticaBold: 'lib/font/generated/HelveticaBold.js',
HelveticaBoldOblique: 'lib/font/generated/HelveticaBoldOblique.js',
HelveticaOblique: 'lib/font/generated/HelveticaOblique.js',
Symbol: 'lib/font/generated/Symbol.js',
TimesBold: 'lib/font/generated/TimesBold.js',
TimesBoldItalic: 'lib/font/generated/TimesBoldItalic.js',
TimesItalic: 'lib/font/generated/TimesItalic.js',
TimesRoman: 'lib/font/generated/TimesRoman.js',
ZapfDingbats: 'lib/font/generated/ZapfDingbats.js',
};
const browserPlugins = () => [
binary('.icc'),
nodeResolve({
exportConditions: ['default'],
}),
babel({
babelHelpers: 'bundled',
babelrc: false,
targets: {
browsers: supportedBrowsers,
},
presets: [
[
'@babel/preset-env',
{
modules: false,
targets: {
browsers: supportedBrowsers,
},
},
],
],
comments: false,
}),
];
export default [
// CommonJS and ES builds for Node
{
input: 'lib/document.node.js',
external,
output: [
{
name: 'pdfkit',
file: 'js/pdfkit.js',
format: 'cjs',
sourcemap: true,
interop: 'default',
exports: 'named',
footer:
'module.exports = exports.default;\nmodule.exports.PDFDocument = exports.PDFDocument;\nmodule.exports.LineWrapper = exports.LineWrapper;\nmodule.exports.registerFile = exports.registerFile;',
},
{
file: 'js/pdfkit.node.mjs',
format: 'es',
sourcemap: true,
},
],
plugins: [
asset(iccProfilePath, 'data/sRGB_IEC61966_2_1.icc'),
nodeResolve({
exportConditions: ['node'],
}),
babel({
targets: {
node: '20',
},
babelHelpers: 'bundled',
babelrc: false,
presets: [
[
'@babel/preset-env',
{
modules: false,
targets: {
node: '20',
},
},
],
],
comments: false,
}),
],
},
// ES for green browsers
{
input: 'lib/document.browser.js',
external,
output: {
name: 'pdfkit.es',
file: 'js/pdfkit.browser.mjs',
format: 'es',
sourcemap: true,
},
plugins: browserPlugins(),
},
// CommonJS browser build consumed by Browserify for the standalone bundle.
{
input: 'lib/document.browser.standalone.js',
external,
output: {
file: 'js/pdfkit.browser.js',
format: 'cjs',
sourcemap: true,
interop: 'default',
exports: 'named',
footer:
'module.exports = exports.default;\nmodule.exports.PDFDocument = exports.PDFDocument;',
},
plugins: browserPlugins(),
},
// Experimental helpers for collecting document output.
{
input: 'lib/output.js',
output: [
{
file: 'js/output.cjs',
format: 'cjs',
exports: 'named',
},
{
file: 'js/output.mjs',
format: 'es',
},
],
plugins: browserPlugins(),
},
// Standard font data is kept outside the main bundles so it can be loaded
// individually on demand.
{
input: standardFontInputs,
output: [
{
dir: 'js/standard-fonts',
format: 'cjs',
entryFileNames: '[name].cjs',
chunkFileNames: 'chunks/[name]-[hash].cjs',
exports: 'default',
},
{
dir: 'js/standard-fonts',
format: 'es',
entryFileNames: '[name].mjs',
chunkFileNames: 'chunks/[name]-[hash].mjs',
},
],
plugins: [
babel({
babelHelpers: 'bundled',
babelrc: false,
comments: false,
}),
],
},
];