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.

58 lines
1.8 KiB

11 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
  1. #!/usr/bin/env node
  2. var connect = require("connect"),
  3. http = require("http"),
  4. Thing = require("nature").Thing,
  5. wodge = require("wodge");
  6. var usage = "usage: ws [--directory|-d <directory>] [--port|-p <port>] [--log-format|-f dev|default|short|tiny]";
  7. function halt(message){
  8. console.log(wodge.red("Error ") + message);
  9. console.log(usage);
  10. process.exit(1);
  11. var options = new Thing()
  12. .define({ name: "port", alias: "p", type: "number", defaultOption: true, value: 8000 })
  13. .define({ name: "log-format", alias: "f", type: "string", value: "dev" })
  14. .define({ name: "help", alias: "h", type: "boolean" })
  15. .define({ name: "directory", alias: "d", type: "string", value: process.cwd() })
  16. .on("error", function(err){
  17. halt(err.message);
  18. })
  19. .set(process.argv);
  20. if (!options.valid){
  21. halt(options.validationMessages);
  22. } else if (options.help){
  23. console.log(usage);
  24. } else {
  25. /**
  26. customised connect.logger :date token, purely to satisfy Logstalgia.
  27. */
  28. connect.logger.token("date", function(){
  29. var a = new Date();
  30. return (a.getDate() + "/" + a.getUTCMonth() + "/" + a.getFullYear() + ":" + a.toTimeString())
  31. .replace("GMT", "").replace(" (BST)", "");
  32. });
  33. var app = connect()
  34. .use(connect.logger(options["log-format"]))
  35. .use(connect.compress())
  36. .use(connect.static(options.directory))
  37. .use(connect.directory(options.directory, { icons: true }));
  38. http.createServer(app)
  39. .on("error", function(err){
  40. if (err.code === "EADDRINUSE"){
  41. halt("port " + options.port + " is already is use");
  42. } else {
  43. halt(err.message);
  44. }
  45. })
  46. .listen(options.port);
  47. process.stderr.write("serving at http://localhost:" + options.port + "\n");
  48. }