Skip to content

Commit de8439c

Browse files
carlobeltramediegomura
authored andcommitted
Add node polyfills for pdfkit package in the browser
1 parent 6df72c3 commit de8439c

3 files changed

Lines changed: 72 additions & 53 deletions

File tree

packages/pdfkit/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
"@babel/runtime": "^7.16.4",
3232
"@react-pdf/png-js": "^2.1.0",
3333
"crypto-js": "^4.0.0",
34-
"fontkit": "^2.0.2"
34+
"fontkit": "^2.0.2",
35+
"vite-compatible-readable-stream": "^3.6.1"
3536
},
3637
"devDependencies": {
3738
"iconv-lite": "^0.4.13"

packages/pdfkit/rollup.config.js

Lines changed: 61 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import replace from '@rollup/plugin-replace';
44
import nodeResolve from '@rollup/plugin-node-resolve';
55
import { terser } from 'rollup-plugin-terser';
66
import ignore from 'rollup-plugin-ignore';
7-
7+
import alias from '@rollup/plugin-alias';
8+
import nodePolyfills from 'rollup-plugin-polyfill-node';
9+
import commonjs from '@rollup/plugin-commonjs';
810
import pkg from './package.json';
911

1012
const cjs = {
@@ -19,6 +21,8 @@ const esm = {
1921
const getCJS = override => Object.assign({}, cjs, override);
2022
const getESM = override => Object.assign({}, esm, override);
2123

24+
const input = 'src/index.js';
25+
2226
const babelConfig = ({ browser }) => ({
2327
babelrc: false,
2428
exclude: 'node_modules/**',
@@ -38,79 +42,84 @@ const babelConfig = ({ browser }) => ({
3842
plugins: [['@babel/plugin-transform-runtime', { version: '^7.16.4' }]]
3943
});
4044

41-
const configBase = {
42-
input: 'src/index.js',
43-
external: Object.keys(pkg.dependencies)
44-
.map(dep => (dep === 'crypto-js' ? 'crypto-js/md5' : dep))
45-
.concat(
46-
'@babel/runtime/helpers/inheritsLoose',
47-
'@babel/runtime/helpers/assertThisInitialized',
48-
'@babel/runtime/helpers/createForOfIteratorHelperLoose',
49-
'@babel/runtime/helpers/extends',
50-
'stream',
51-
'zlib'
52-
),
53-
onwarn: (warning, rollupWarn) => {
54-
if (warning.code !== 'CIRCULAR_DEPENDENCY') {
55-
rollupWarn(warning);
45+
const getExternal = ({ browser }) => [
46+
...(Object.keys(pkg.dependencies)
47+
.filter(dep => 'crypto-js' !== dep)
48+
.filter(dep => !browser || 'vite-compatible-readable-stream' !== dep)
49+
),
50+
'crypto-js/md5',
51+
'@babel/runtime/helpers/inheritsLoose',
52+
'@babel/runtime/helpers/assertThisInitialized',
53+
'@babel/runtime/helpers/createForOfIteratorHelperLoose',
54+
'@babel/runtime/helpers/extends',
55+
'zlib',
56+
...(browser ? [] : ['fs']),
57+
];
58+
59+
const getPlugins = ({ browser, minify = false }) => [
60+
json(),
61+
...(browser ? [
62+
ignore(['fs']),
63+
alias({
64+
entries: [
65+
{ find: 'stream', replacement: 'vite-compatible-readable-stream' },
66+
{ find: 'zlib', replacement: 'browserify-zlib' },
67+
]
68+
}),
69+
commonjs(),
70+
nodeResolve({ browser, preferBuiltins: !browser }),
71+
nodePolyfills({ include: [ /node_modules\/.+\.js/, /pdfkit\/src\/.*\.js/ ] }),
72+
] : [
73+
nodeResolve({ browser, preferBuiltins: !browser }),
74+
]),
75+
replace({
76+
preventAssignment: true,
77+
values: {
78+
BROWSER: JSON.stringify(browser)
5679
}
57-
}
58-
};
80+
}),
81+
babel(babelConfig({ browser })),
82+
...(minify ? [terser()] : []),
83+
];
5984

60-
const serverConfig = Object.assign({}, configBase, {
85+
const serverConfig = {
86+
input,
6187
output: [
6288
getESM({ file: 'lib/pdfkit.es.js' }),
6389
getCJS({ file: 'lib/pdfkit.cjs.js' })
6490
],
65-
plugins: [
66-
json(),
67-
nodeResolve(),
68-
replace({
69-
preventAssignment: true,
70-
values: {
71-
BROWSER: JSON.stringify(false)
72-
}
73-
}),
74-
babel(babelConfig({ browser: false }))
75-
],
76-
external: configBase.external.concat(['fs'])
77-
});
91+
external: getExternal({ browser: false }),
92+
plugins: getPlugins({ browser: false }),
93+
};
7894

79-
const serverProdConfig = Object.assign({}, serverConfig, {
95+
const serverProdConfig = {
96+
input,
8097
output: [
8198
getESM({ file: 'lib/pdfkit.es.min.js' }),
8299
getCJS({ file: 'lib/pdfkit.cjs.min.js' })
83100
],
84-
plugins: serverConfig.plugins.concat(terser())
85-
});
101+
external: getExternal({ browser: false }),
102+
plugins: getPlugins({ browser: false, minify: true }),
103+
};
86104

87-
const browserConfig = Object.assign({}, configBase, {
105+
const browserConfig = {
106+
input,
88107
output: [
89108
getESM({ file: 'lib/pdfkit.browser.es.js' }),
90109
getCJS({ file: 'lib/pdfkit.browser.cjs.js' })
91110
],
92-
plugins: [
93-
ignore(['fs']),
94-
95-
json(),
96-
nodeResolve(),
97-
98-
replace({
99-
preventAssignment: true,
100-
values: {
101-
BROWSER: JSON.stringify(true)
102-
}
103-
}),
104-
babel(babelConfig({ browser: true }))
105-
]
106-
});
111+
external: getExternal({ browser: true }),
112+
plugins: getPlugins({ browser: true }),
113+
};
107114

108115
const browserProdConfig = Object.assign({}, browserConfig, {
116+
input,
109117
output: [
110118
getESM({ file: 'lib/pdfkit.browser.es.min.js' }),
111119
getCJS({ file: 'lib/pdfkit.browser.cjs.min.js' })
112120
],
113-
plugins: browserConfig.plugins.concat(terser())
121+
external: getExternal({ browser: true }),
122+
plugins: getPlugins({ browser: true, minify: true }),
114123
});
115124

116125
export default [

yarn.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10751,6 +10751,15 @@ verror@1.10.0:
1075110751
core-util-is "1.0.2"
1075210752
extsprintf "^1.2.0"
1075310753

10754+
vite-compatible-readable-stream@^3.6.1:
10755+
version "3.6.1"
10756+
resolved "https://registry.yarnpkg.com/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz#27267aebbdc9893c0ddf65a421279cbb1e31d8cd"
10757+
integrity sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==
10758+
dependencies:
10759+
inherits "^2.0.3"
10760+
string_decoder "^1.1.1"
10761+
util-deprecate "^1.0.1"
10762+
1075410763
w3c-hr-time@^1.0.1:
1075510764
version "1.0.2"
1075610765
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"

0 commit comments

Comments
 (0)