rollup.locales.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. const path = require('path')
  2. const globby = require('globby')
  3. const esbuild = require('rollup-plugin-esbuild').default
  4. const { externalizeRelative } = require('./scripts/lib/new-rollup')
  5. /*
  6. needs locales-all to run first
  7. compiles from *SRC* files.
  8. we use sucrase to transpile the ts files.
  9. normally we wouldn't use sucrase because it produces JS that's too advanced for the browsers we want to support,
  10. but the locale files are simple so it'll be fine.
  11. */
  12. let srcLocaleFiles = globby.sync('packages/core/src/locales/*.ts')
  13. let bundleDirs = globby.sync('packages?(-premium)/bundle', { onlyDirectories: true })
  14. let esbuildInstance = esbuild({
  15. target: 'ie11',
  16. })
  17. module.exports = [
  18. // locales-all.js, for CORE
  19. {
  20. input: 'packages/core/src/locales-all.ts',
  21. output: {
  22. format: 'cjs',
  23. exports: 'named',
  24. file: 'packages/core/locales-all.js'
  25. },
  26. plugins: [
  27. externalizeRelative(), // resulting bundle will import the individual locales
  28. dumbDownInputForIE11(),
  29. esbuildInstance
  30. ]
  31. },
  32. // locales-all.js, for BUNDLES
  33. {
  34. input: 'packages/core/src/locales-all.ts',
  35. output: bundleDirs.map((bundleDir) => ({
  36. format: 'iife',
  37. name: 'FullCalendar', // for bundleWrapLocalesAll
  38. file: path.join(bundleDir, 'locales-all.js')
  39. })).concat({
  40. format: 'iife',
  41. name: 'FullCalendar', // for bundleWrapLocalesAll
  42. file: path.join('packages/core/locales-all.global.js') // FOR CORE
  43. }),
  44. plugins: [
  45. dumbDownInputForIE11(),
  46. esbuildInstance,
  47. bundleWrapLocalesAll()
  48. ]
  49. },
  50. // locales/*.js, for CORE
  51. ...srcLocaleFiles.map((srcLocaleFile) => ({
  52. input: srcLocaleFile,
  53. output: {
  54. format: 'cjs',
  55. exports: 'named',
  56. file: path.join('packages/core/locales', path.basename(srcLocaleFile, '.ts') + '.js')
  57. },
  58. plugins: [
  59. dumbDownInputForIE11(),
  60. esbuildInstance
  61. ]
  62. })),
  63. // locales/*.js, for BUNDLES
  64. ...srcLocaleFiles.map((srcLocaleFile) => ({
  65. input: srcLocaleFile,
  66. output: bundleDirs.map((bundleDir) => ({
  67. format: 'iife',
  68. name: 'FullCalendar', // for bundleWrapLocalesAll
  69. file: path.join(bundleDir, 'locales', path.basename(srcLocaleFile, '.ts') + '.js')
  70. })).concat({
  71. format: 'iife',
  72. name: 'FullCalendar', // for bundleWrapLocalesAll
  73. file: path.join('packages/core/locales', path.basename(srcLocaleFile, '.ts') + '.global.js') // FOR CORE
  74. }),
  75. plugins: [
  76. dumbDownInputForIE11(),
  77. esbuildInstance,
  78. bundleWrapLocalesEach()
  79. ]
  80. }))
  81. ]
  82. function bundleWrapLocalesAll() {
  83. return {
  84. renderChunk(code) {
  85. return code.replace(/^var FullCalendar = \(/, '[].push.apply(FullCalendar.globalLocales, ') // needs to be by-reference. can't reassign
  86. }
  87. }
  88. }
  89. function bundleWrapLocalesEach() {
  90. return {
  91. renderChunk(code) {
  92. return code.replace(/^var FullCalendar = /, 'FullCalendar.globalLocales.push')
  93. }
  94. }
  95. }
  96. // needs to go before esbuild
  97. function dumbDownInputForIE11() {
  98. return {
  99. transform(code) {
  100. code = code.replace(/\bconst\b/g, 'var')
  101. code = code.replace(/(\w+)(\([\w:, ]*\)\s*{)/g, '$1: function$2')
  102. return code
  103. }
  104. }
  105. }