You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

141 lines
5.3 KiB

  1. fs = require 'fs'
  2. path = require 'path'
  3. {exec} = require 'child_process'
  4. less = require 'less'
  5. handlebars = require 'handlebars'
  6. sourceFiles = [
  7. 'SwaggerUi'
  8. 'view/HeaderView'
  9. 'view/MainView'
  10. 'view/ResourceView'
  11. 'view/OperationView'
  12. 'view/StatusCodeView'
  13. 'view/ParameterView'
  14. 'view/SignatureView'
  15. 'view/ContentTypeView'
  16. 'view/ResponseContentTypeView'
  17. 'view/ParameterContentTypeView'
  18. 'view/ApiKeyButton'
  19. 'view/BasicAuthButton'
  20. ]
  21. task 'clean', 'Removes distribution', ->
  22. console.log 'Clearing dist...'
  23. exec 'rm -rf dist'
  24. task 'dist', 'Build a distribution', ->
  25. console.log "Build distribution in ./dist"
  26. fs.mkdirSync('dist') if not path.existsSync('dist')
  27. fs.mkdirSync('dist/lib') if not path.existsSync('dist/lib')
  28. appContents = new Array remaining = sourceFiles.length
  29. for file, index in sourceFiles then do (file, index) ->
  30. console.log " : Reading src/main/coffeescript/#{file}.coffee"
  31. fs.readFile "src/main/coffeescript/#{file}.coffee", 'utf8', (err, fileContents) ->
  32. throw err if err
  33. appContents[index] = fileContents
  34. precompileTemplates() if --remaining is 0
  35. precompileTemplates= ->
  36. console.log ' : Precompiling templates...'
  37. templateFiles = fs.readdirSync('src/main/template')
  38. templateContents = new Array remaining = templateFiles.length
  39. for file, index in templateFiles then do (file, index) ->
  40. console.log " : Compiling src/main/template/#{file}"
  41. fs.readFile "src/main/template/#{file}", 'utf8', (err, source) ->
  42. throw err if err
  43. compiled = handlebars.precompile(source)
  44. templateContents[index] = '(function() {\n var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};\ntemplates[\'' + file.replace('.handlebars', '') + '\'] = template(' + compiled + ');\n})();'
  45. fs.unlink 'dist/_' + file + '.js', (err) ->
  46. console.log "#{err.code}: #{err.path}" unless err.code == 'ENOENT'
  47. if --remaining is 0
  48. templateContents.push '\n\n'
  49. fs.writeFile 'dist/_swagger-ui-templates.js', templateContents.join('\n\n'), 'utf8', (err) ->
  50. throw err if err
  51. build()
  52. build = ->
  53. console.log ' : Collecting Coffeescript source...'
  54. appContents.push '\n\n'
  55. fs.writeFile 'dist/_swagger-ui.coffee', appContents.join('\n\n'), 'utf8', (err) ->
  56. throw err if err
  57. console.log ' : Compiling...'
  58. exec 'coffee --compile dist/_swagger-ui.coffee', (err, stdout, stderr) ->
  59. throw err if err
  60. fs.unlink 'dist/_swagger-ui.coffee'
  61. console.log ' : Combining with javascript...'
  62. fs.readFile 'package.json', 'utf8', (err, fileContents) ->
  63. obj = JSON.parse(fileContents)
  64. exec 'echo "// swagger-ui.js" > dist/swagger-ui.js'
  65. exec 'echo "// version ' + obj.version + '" >> dist/swagger-ui.js'
  66. exec 'cat src/main/javascript/doc.js dist/_swagger-ui-templates.js dist/_swagger-ui.js >> dist/swagger-ui.js', (err, stdout, stderr) ->
  67. throw err if err
  68. fs.unlink 'dist/_swagger-ui.js'
  69. fs.unlink 'dist/_swagger-ui-templates.js'
  70. console.log ' : Minifying all...'
  71. exec 'java -jar "./bin/yuicompressor-2.4.7.jar" --type js -o ' + 'dist/swagger-ui.min.js ' + 'dist/swagger-ui.js', (err, stdout, stderr) ->
  72. throw err if err
  73. lessc()
  74. lessc = ->
  75. # Someone who knows CoffeeScript should make this more Coffee-licious
  76. console.log ' : Compiling LESS...'
  77. less.render fs.readFileSync("src/main/less/screen.less", 'utf8'), (err, css) ->
  78. fs.writeFileSync("src/main/html/css/screen.css", css)
  79. less.render fs.readFileSync("src/main/less/reset.less", 'utf8'), (err, css) ->
  80. fs.writeFileSync("src/main/html/css/reset.css", css)
  81. pack()
  82. pack = ->
  83. console.log ' : Packaging...'
  84. exec 'cp -r lib dist'
  85. console.log ' : Copied swagger-ui libs'
  86. exec 'cp -r node_modules/swagger-client/lib/swagger.js dist/lib'
  87. console.log ' : Copied swagger dependencies'
  88. exec 'cp -r src/main/html/* dist'
  89. console.log ' : Copied html dependencies'
  90. console.log ' !'
  91. task 'spec', "Run the test suite", ->
  92. exec "open spec.html", (err, stdout, stderr) ->
  93. throw err if err
  94. task 'watch', 'Watch source files for changes and autocompile', ->
  95. # Function which watches all files in the passed directory
  96. watchFiles = (dir) ->
  97. files = fs.readdirSync(dir)
  98. for file, index in files then do (file, index) ->
  99. console.log " : " + dir + "/#{file}"
  100. fs.watchFile dir + "/#{file}", (curr, prev) ->
  101. if +curr.mtime isnt +prev.mtime
  102. invoke 'dist'
  103. notify "Watching source files for changes..."
  104. # Watch specific source files
  105. for file, index in sourceFiles then do (file, index) ->
  106. console.log " : " + "src/main/coffeescript/#{file}.coffee"
  107. fs.watchFile "src/main/coffeescript/#{file}.coffee", (curr, prev) ->
  108. if +curr.mtime isnt +prev.mtime
  109. invoke 'dist'
  110. # watch all files in these folders
  111. watchFiles("src/main/template")
  112. watchFiles("src/main/javascript")
  113. watchFiles("src/main/html")
  114. watchFiles("src/main/less")
  115. watchFiles("src/test")
  116. notify = (message) ->
  117. return unless message?
  118. console.log message
  119. # options =
  120. # title: 'CoffeeScript'
  121. # image: 'bin/CoffeeScript.png'
  122. # try require('growl') message, options