rollup.config.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. const generate = require('videojs-generate-rollup-config');
  2. const worker = require('rollup-plugin-worker-factory');
  3. const {terser} = require('rollup-plugin-terser');
  4. const createTestData = require('./create-test-data.js');
  5. const replace = require('@rollup/plugin-replace');
  6. const strip = require('@rollup/plugin-strip');
  7. const CI_TEST_TYPE = process.env.CI_TEST_TYPE || '';
  8. let syncWorker;
  9. // see https://github.com/videojs/videojs-generate-rollup-config
  10. // for options
  11. const options = {
  12. input: 'src/videojs-http-streaming.js',
  13. distName: 'videojs-http-streaming',
  14. excludeCoverage(defaults) {
  15. defaults.push(/^rollup-plugin-worker-factory/);
  16. defaults.push(/^create-test-data!/);
  17. return defaults;
  18. },
  19. globals(defaults) {
  20. defaults.browser['@xmldom/xmldom'] = 'window';
  21. defaults.test['@xmldom/xmldom'] = 'window';
  22. return defaults;
  23. },
  24. externals(defaults) {
  25. return Object.assign(defaults, {
  26. module: defaults.module.concat([
  27. 'aes-decrypter',
  28. 'm3u8-parser',
  29. 'mpd-parser',
  30. 'mux.js',
  31. '@videojs/vhs-utils'
  32. ])
  33. });
  34. },
  35. plugins(defaults) {
  36. // add worker and createTestData to the front of plugin lists
  37. defaults.module.unshift('worker');
  38. defaults.browser.unshift('worker');
  39. // change this to `syncWorker` for syncronous web worker
  40. // during unit tests
  41. if (CI_TEST_TYPE === 'coverage') {
  42. defaults.test.unshift('syncWorker');
  43. } else {
  44. defaults.test.unshift('worker');
  45. }
  46. defaults.test.unshift('createTestData');
  47. if (CI_TEST_TYPE === 'playback-min') {
  48. defaults.test.push('uglify');
  49. }
  50. // istanbul is only in the list for regular builds and not watch
  51. if (CI_TEST_TYPE !== 'coverage' && defaults.test.indexOf('istanbul') !== -1) {
  52. defaults.test.splice(defaults.test.indexOf('istanbul'), 1);
  53. }
  54. defaults.module.unshift('replace');
  55. defaults.module.unshift('strip');
  56. defaults.browser.unshift('strip');
  57. return defaults;
  58. },
  59. primedPlugins(defaults) {
  60. defaults = Object.assign(defaults, {
  61. replace: replace({
  62. // single quote replace
  63. "require('@videojs/vhs-utils/es": "require('@videojs/vhs-utils/cjs",
  64. // double quote replace
  65. 'require("@videojs/vhs-utils/es': 'require("@videojs/vhs-utils/cjs'
  66. }),
  67. uglify: terser({
  68. output: {comments: 'some'},
  69. compress: {passes: 2}
  70. }),
  71. strip: strip({
  72. functions: ['TEST_ONLY_*'],
  73. debugger: false,
  74. sourceMap: false
  75. }),
  76. createTestData: createTestData()
  77. });
  78. defaults.worker = worker({type: 'browser', plugins: [
  79. defaults.resolve,
  80. defaults.json,
  81. defaults.commonjs,
  82. defaults.babel
  83. ]});
  84. defaults.syncWorker = syncWorker = worker({type: 'mock', plugins: [
  85. defaults.resolve,
  86. defaults.json,
  87. defaults.commonjs,
  88. defaults.babel
  89. ]});
  90. return defaults;
  91. },
  92. babel(defaults) {
  93. const presetEnvSettings = defaults.presets[0][1];
  94. presetEnvSettings.exclude = presetEnvSettings.exclude || [];
  95. presetEnvSettings.exclude.push('@babel/plugin-transform-typeof-symbol');
  96. return defaults;
  97. }
  98. };
  99. if (CI_TEST_TYPE === 'playback' || CI_TEST_TYPE === 'playback-min') {
  100. options.testInput = 'test/playback.test.js';
  101. } else if (CI_TEST_TYPE === 'unit' || CI_TEST_TYPE === 'coverage') {
  102. options.testInput = {include: ['test/**/*.test.js'], exclude: ['test/playback.test.js']};
  103. }
  104. const config = generate(options);
  105. if (config.builds.browser) {
  106. config.builds.syncWorkers = config.makeBuild('browser', {
  107. output: {
  108. name: 'httpStreaming',
  109. format: 'umd',
  110. file: 'dist/videojs-http-streaming-sync-workers.js'
  111. }
  112. });
  113. config.builds.syncWorkers.plugins[0] = syncWorker;
  114. }
  115. // Add additonal builds/customization here!
  116. // export the builds to rollup
  117. export default Object.values(config.builds);