Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

Cakefile 5.3 KiB

12 år sedan
12 år sedan
12 år sedan
10 år sedan
12 år sedan
12 år sedan
12 år sedan
12 år sedan
12 år sedan
12 år sedan
12 år sedan
12 år sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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