Skip to content

Commit

Permalink
Browser compatibility for renderer package
Browse files Browse the repository at this point in the history
We have to include the blob-stream package in the browser bundle because
it is an old commonjs module which is no longer trivially supported by
modern web bundlers.
  • Loading branch information
carlobeltrame committed Jun 16, 2022
1 parent 5c6eb7b commit 52251bb
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 25 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
"rollup": "^2.60.1",
"rollup-plugin-ignore": "^1.0.10",
"rollup-plugin-local-resolve": "^1.0.7",
"rollup-plugin-polyfill-node": "^0.9.0",
"rollup-plugin-sourcemaps": "^0.6.3",
"rollup-plugin-terser": "^7.0.2"
},
Expand Down
1 change: 0 additions & 1 deletion packages/pdfkit/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
"crypto-js": "^4.0.0"
},
"devDependencies": {
"blob-stream": "^0.1.2",
"iconv-lite": "^0.4.13"
}
}
55 changes: 32 additions & 23 deletions packages/renderer/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import replace from '@rollup/plugin-replace';
import ignore from 'rollup-plugin-ignore';
import { terser } from 'rollup-plugin-terser';
import sourceMaps from 'rollup-plugin-sourcemaps';

import commonjs from '@rollup/plugin-commonjs';
import nodePolyfills from 'rollup-plugin-polyfill-node';
import pkg from './package.json';

const globals = { react: 'React' };
Expand Down Expand Up @@ -49,66 +50,74 @@ const babelConfig = ({ browser }) => ({
],
});

const commonPlugins = [json(), nodeResolve(), sourceMaps()];
const input = './src/node/index.js';

const configBase = {
external: [
'@babel/runtime/helpers/extends',
'@babel/runtime/helpers/objectWithoutPropertiesLoose',
'@babel/runtime/helpers/asyncToGenerator',
'@babel/runtime/regenerator',
].concat(Object.keys(pkg.dependencies), Object.keys(pkg.peerDependencies)),
plugins: commonPlugins,
};
const getExternal = ({ browser }) => [
'@babel/runtime/helpers/extends',
'@babel/runtime/helpers/objectWithoutPropertiesLoose',
'@babel/runtime/helpers/asyncToGenerator',
'@babel/runtime/regenerator',
...(browser ? [] : ['fs', 'path', 'url']),
// For browsers, bundle the commonjs dependency blob-stream with react-pdf
...(Object.keys(pkg.dependencies).filter(dep => !browser || dep !== 'blob-stream')),
...(Object.keys(pkg.peerDependencies)),
];

const getPlugins = ({ browser }) => [
...configBase.plugins,
const getPlugins = ({ browser, minify = false }) => [
json(),
sourceMaps(),
...(browser ? [ignore(['fs', 'path', 'url'])] : []),
babel(babelConfig({ browser })),
commonjs(),
nodeResolve({ browser, preferBuiltins: !browser }),
...(browser ? [nodePolyfills()] : []),
replace({
preventAssignment: true,
values: {
BROWSER: JSON.stringify(browser),
},
}),
...(minify ? [terser()] : []),
];

const serverConfig = {
...configBase,
input: './src/node/index.js',
input,
output: [
getESM({ file: 'lib/react-pdf.es.js' }),
getCJS({ file: 'lib/react-pdf.cjs.js' }),
],
external: getExternal({ browser: false }),
plugins: getPlugins({ browser: false }),
external: configBase.external.concat(['fs', 'path', 'url']),
};

const serverProdConfig = {
...serverConfig,
input,
output: [
getESM({ file: 'lib/react-pdf.es.min.js' }),
getCJS({ file: 'lib/react-pdf.cjs.min.js' }),
],
plugins: serverConfig.plugins.concat(terser()),
external: getExternal({ browser: false }),
plugins: getPlugins({ browser: false, minify: true }),
};

const browserConfig = {
...configBase,
input: './src/dom/index.js',
input,
output: [
getESM({ file: 'lib/react-pdf.browser.es.js' }),
getCJS({ file: 'lib/react-pdf.browser.cjs.js' }),
],
plugins: [...getPlugins({ browser: true }), ignore(['fs', 'path', 'url'])],
external: getExternal({ browser: true }),
plugins: getPlugins({ browser: true }),
};

const browserProdConfig = {
...browserConfig,
input,
output: [
getESM({ file: 'lib/react-pdf.browser.es.min.js' }),
getCJS({ file: 'lib/react-pdf.browser.cjs.min.js' }),
],
plugins: browserConfig.plugins.concat(terser()),
external: getExternal({ browser: true }),
plugins: getPlugins({ browser: true, minify: true }),
};

export default [
Expand Down
18 changes: 17 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2337,6 +2337,15 @@
magic-string "^0.25.7"
resolve "^1.17.0"

"@rollup/plugin-inject@^4.0.0":
version "4.0.4"
resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz#fbeee66e9a700782c4f65c8b0edbafe58678fbc2"
integrity sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==
dependencies:
"@rollup/pluginutils" "^3.1.0"
estree-walker "^2.0.1"
magic-string "^0.25.7"

"@rollup/plugin-json@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"
Expand Down Expand Up @@ -3324,7 +3333,7 @@ bl@^4.0.3:
inherits "^2.0.4"
readable-stream "^3.4.0"

blob-stream@^0.1.2, blob-stream@^0.1.3:
blob-stream@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/blob-stream/-/blob-stream-0.1.3.tgz#98d668af6996e0f32ef666d06e215ccc7d77686c"
integrity sha1-mNZor2mW4PMu9mbQbiFczH13aGw=
Expand Down Expand Up @@ -9373,6 +9382,13 @@ rollup-plugin-local-resolve@^1.0.7:
resolved "https://registry.yarnpkg.com/rollup-plugin-local-resolve/-/rollup-plugin-local-resolve-1.0.7.tgz#c486701716c15add2127565c2eaa101123320887"
integrity sha1-xIZwFxbBWt0hJ1ZcLqoQESMyCIc=

rollup-plugin-polyfill-node@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.9.0.tgz#09cf1a74244a74a5c5007f5fd386d320610ec1d8"
integrity sha512-cVqm7LjgBqtZ77M9hLYayXrLz18nLIVPp3MPqNi2suStrFDg1LsA2cSdMIighr2yeuAQrphu8ymXTAsJNVABow==
dependencies:
"@rollup/plugin-inject" "^4.0.0"

rollup-plugin-sourcemaps@^0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed"
Expand Down

0 comments on commit 52251bb

Please sign in to comment.