build.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. 'use strict'
  2. var fs = require('fs')
  3. var rollup = require('rollup')
  4. var uglify = require('uglify-js')
  5. var babel = require('rollup-plugin-babel')
  6. var execSync = require('child_process').execSync
  7. bundle({
  8. minified: 'dist/jspdf.min.js',
  9. debug: 'dist/jspdf.debug.js'
  10. })
  11. // Monkey patching adler32 and filesaver
  12. function monkeyPatch() {
  13. return {
  14. transform: (code, id) => {
  15. var file = id.split('/').pop()
  16. if (file === 'adler32cs.js') {
  17. code = code.replace(/this, function/g, 'jsPDF, function')
  18. code = code.replace(/require\('buffer'\)/g, '{}')
  19. }
  20. return code
  21. }
  22. }
  23. }
  24. // Rollup removes local variables unless used within a module.
  25. // This plugin makes sure specified local variables are preserved
  26. // and kept local. This plugin wouldn't be necessary if es2015
  27. // modules would be used.
  28. function rawjs(opts) {
  29. opts = opts || {}
  30. return {
  31. transform: (code, id) => {
  32. var variable = opts[id.split('/').pop()]
  33. if (!variable) return code
  34. var keepStr = '/*rollup-keeper-start*/window.tmp=' + variable +
  35. ';/*rollup-keeper-end*/'
  36. return code + keepStr
  37. },
  38. transformBundle: (code) => {
  39. for (var file in opts) {
  40. var r = new RegExp(opts[file] + '\\$\\d+', 'g')
  41. code = code.replace(r, opts[file])
  42. }
  43. var re = /\/\*rollup-keeper-start\*\/.*\/\*rollup-keeper-end\*\//g
  44. return code.replace(re, '')
  45. }
  46. }
  47. }
  48. function bundle(paths) {
  49. rollup.rollup({
  50. entry: './main.js',
  51. plugins: [
  52. monkeyPatch(),
  53. rawjs({
  54. 'jspdf.js': 'jsPDF',
  55. 'filesaver.tmp.js': 'saveAs',
  56. 'deflate.js': 'Deflater',
  57. 'zlib.js': 'FlateStream',
  58. 'css_colors.js': 'CssColors',
  59. 'html2pdf.js': 'html2pdf'
  60. }),
  61. babel({
  62. presets: ['es2015-rollup'],
  63. exclude: ['node_modules/**', 'libs/**']
  64. })
  65. ]
  66. }).then((bundle) => {
  67. var code = bundle.generate({
  68. format: 'umd',
  69. moduleName: 'jspdf'
  70. }).code
  71. code = code.replace(
  72. /Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./,
  73. 'Licensed under the MIT License')
  74. code = code.replace(
  75. /Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./g,
  76. '')
  77. fs.writeFileSync(paths.debug, renew(code))
  78. var minified = uglify.minify(code, {
  79. fromString: true,
  80. output: {
  81. comments: /@preserve|@license|copyright/i
  82. }
  83. })
  84. fs.writeFileSync(paths.minified, renew(minified.code))
  85. }).catch((err) => {
  86. console.error(err)
  87. })
  88. }
  89. function renew(code) {
  90. var date = new Date().toISOString()
  91. var version = require('./package.json').version
  92. var whoami = execSync('whoami').toString().trim()
  93. var commit = execSync('git rev-parse --short=10 HEAD').toString().trim()
  94. code = code.replace('${versionID}', version + ' Built on ' + date)
  95. code = code.replace('${commitID}', commit)
  96. code = code.replace(/1\.0\.0-trunk/, version + ' ' + date + ':' + whoami)
  97. return code
  98. }