build.lua 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. --- Horrible script to concatenate everything in /src into a single rx.lua file.
  2. -- @usage lua tools/build.lua [distribution=base]
  3. -- @arg {string='base'} distribution - Type of distribution to build, either 'base' or 'luvit'.
  4. local files = {
  5. 'src/util.lua',
  6. 'src/subscription.lua',
  7. 'src/observer.lua',
  8. 'src/observable.lua',
  9. 'src/operators/all.lua',
  10. 'src/operators/amb.lua',
  11. 'src/operators/average.lua',
  12. 'src/operators/buffer.lua',
  13. 'src/operators/catch.lua',
  14. 'src/operators/combineLatest.lua',
  15. 'src/operators/compact.lua',
  16. 'src/operators/concat.lua',
  17. 'src/operators/contains.lua',
  18. 'src/operators/count.lua',
  19. 'src/operators/debounce.lua',
  20. 'src/operators/defaultIfEmpty.lua',
  21. 'src/operators/delay.lua',
  22. 'src/operators/distinct.lua',
  23. 'src/operators/distinctUntilChanged.lua',
  24. 'src/operators/elementAt.lua',
  25. 'src/operators/filter.lua',
  26. 'src/operators/find.lua',
  27. 'src/operators/first.lua',
  28. 'src/operators/flatMap.lua',
  29. 'src/operators/flatMapLatest.lua',
  30. 'src/operators/flatten.lua',
  31. 'src/operators/ignoreElements.lua',
  32. 'src/operators/last.lua',
  33. 'src/operators/map.lua',
  34. 'src/operators/max.lua',
  35. 'src/operators/merge.lua',
  36. 'src/operators/min.lua',
  37. 'src/operators/pack.lua',
  38. 'src/operators/partition.lua',
  39. 'src/operators/pluck.lua',
  40. 'src/operators/reduce.lua',
  41. 'src/operators/reject.lua',
  42. 'src/operators/retry.lua',
  43. 'src/operators/sample.lua',
  44. 'src/operators/scan.lua',
  45. 'src/operators/skip.lua',
  46. 'src/operators/skipLast.lua',
  47. 'src/operators/skipUntil.lua',
  48. 'src/operators/skipWhile.lua',
  49. 'src/operators/startWith.lua',
  50. 'src/operators/sum.lua',
  51. 'src/operators/switch.lua',
  52. 'src/operators/take.lua',
  53. 'src/operators/takeLast.lua',
  54. 'src/operators/takeUntil.lua',
  55. 'src/operators/takeWhile.lua',
  56. 'src/operators/tap.lua',
  57. 'src/operators/unpack.lua',
  58. 'src/operators/unwrap.lua',
  59. 'src/operators/window.lua',
  60. 'src/operators/with.lua',
  61. 'src/operators/zip.lua',
  62. 'src/schedulers/immediatescheduler.lua',
  63. 'src/schedulers/cooperativescheduler.lua',
  64. 'src/schedulers/timeoutscheduler.lua',
  65. 'src/subjects/subject.lua',
  66. 'src/subjects/asyncsubject.lua',
  67. 'src/subjects/behaviorsubject.lua',
  68. 'src/subjects/replaysubject.lua',
  69. 'src/aliases.lua'
  70. }
  71. local header = [[
  72. -- RxLua v0.0.3
  73. -- https://github.com/bjornbytes/rxlua
  74. -- MIT License
  75. ]]
  76. local exports = [[
  77. exports.name = 'bjornbytes/rx'
  78. exports.version = '0.0.3'
  79. exports.description = 'Reactive Extensions for Lua'
  80. exports.license = 'MIT'
  81. exports.author = { url = 'https://github.com/bjornbytes' }
  82. exports.homepage = 'https://github.com/bjornbytes/rxlua'
  83. ]]
  84. local footer = [[return {
  85. util = util,
  86. Subscription = Subscription,
  87. Observer = Observer,
  88. Observable = Observable,
  89. ImmediateScheduler = ImmediateScheduler,
  90. CooperativeScheduler = CooperativeScheduler,
  91. TimeoutScheduler = TimeoutScheduler,
  92. Subject = Subject,
  93. AsyncSubject = AsyncSubject,
  94. BehaviorSubject = BehaviorSubject,
  95. ReplaySubject = ReplaySubject
  96. }]]
  97. local output = ''
  98. for _, filename in ipairs(files) do
  99. local file = io.open(filename)
  100. if not file then
  101. error('error opening "' .. filename .. '"')
  102. end
  103. local str = file:read('*all')
  104. file:close()
  105. str = '\n' .. str .. '\n'
  106. str = str:gsub('\n(local[^\n]+require.[^\n]+)', '')
  107. str = str:gsub('\n(return[^\n]+)', '')
  108. str = str:gsub('^%s+', ''):gsub('%s+$', '')
  109. output = output .. str .. '\n\n'
  110. end
  111. local distribution = arg[1] or 'base'
  112. local destination, components
  113. if distribution == 'base' then
  114. destination = 'rx.lua'
  115. components = { header, output, footer }
  116. elseif distribution == 'luvit' then
  117. destination = 'rx-luvit.lua'
  118. components = { header, exports, output, footer }
  119. else
  120. error('Invalid distribution specified.')
  121. end
  122. local file = io.open(destination, 'w')
  123. if file then
  124. file:write(table.concat(components, ''))
  125. file:close()
  126. end