From bfaac061c851f10dfa9e8c8d625c482703b8da48 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Tue, 7 Jul 2015 19:51:49 -0600 Subject: [PATCH] Provide a debug loader for the library --- package.json | 3 +- tasks/.jshintrc | 1 + tasks/serve-lib.js | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 tasks/serve-lib.js diff --git a/package.json b/package.json index 1a5019c0fb..65e665e3bd 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "install": "node tasks/install.js", "postinstall": "closure-util update", "start": "node tasks/serve.js", - "test": "node tasks/test.js" + "test": "node tasks/test.js", + "debug-server": "node tasks/serve-lib.js" }, "main": "dist/ol.js", "repository": { diff --git a/tasks/.jshintrc b/tasks/.jshintrc index 501497c0b4..3c2c4aa041 100644 --- a/tasks/.jshintrc +++ b/tasks/.jshintrc @@ -12,6 +12,7 @@ "globals": { "Buffer": false, "__dirname": false, + "__filename": false, "exports": true, "module": false, "process": false, diff --git a/tasks/serve-lib.js b/tasks/serve-lib.js new file mode 100644 index 0000000000..88329285f6 --- /dev/null +++ b/tasks/serve-lib.js @@ -0,0 +1,83 @@ +/** + * This task starts a dev server that provides a script loader for the + * OpenLayers library. + */ + +var path = require('path'); +var url = require('url'); + +var closure = require('closure-util'); +var nomnom = require('nomnom'); + +var log = closure.log; +var name = path.basename(__filename, '.js'); + +/** + * Create a debug server for the OpenLayers and Closure Library sources. + * @param {function(Error, closure.Server)} callback Callback. + */ +var createServer = exports.createServer = function(callback) { + var server; + var manager = new closure.Manager({ + lib: [ + 'src/**/*.js', + 'build/ol.ext/*.js', + ] + }); + manager.on('error', function(err) { + if (server) { + log.error('serve', err.message); + } else { + callback(err); + } + }); + manager.on('ready', function() { + server = new closure.Server({ + manager: manager, + loader: '/loader.js' + }); + callback(null, server); + }); +}; + +/** + * If running this module directly start the server. + */ +if (require.main === module) { + var options = nomnom.options({ + port: { + abbr: 'p', + default: 3001, + help: 'Port for incoming connections', + metavar: 'PORT' + }, + loglevel: { + abbr: 'l', + choices: ['silly', 'verbose', 'info', 'warn', 'error'], + default: 'info', + help: 'Log level', + metavar: 'LEVEL' + } + }).parse(); + + /** @type {string} */ + log.level = options.loglevel; + + log.info(name, 'Parsing dependencies.'); + createServer(function(err, server) { + if (err) { + log.error(name, 'Parsing failed'); + log.error(name, err.message); + process.exit(1); + } + server.listen(options.port, function() { + log.info(name, 'Debug server running http://localhost:' + + options.port + '/loader.js (Ctrl+C to stop)'); + }); + server.on('error', function(err) { + log.error(name, 'Server failed to start: ' + err.message); + process.exit(1); + }); + }); + +}