couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <...@apache.org>
Subject Re: [1/2] git commit: updated refs/heads/1989-move-couchjs-node-to-extra to 6d66d5b
Date Sun, 05 Jan 2014 17:56:17 GMT
last commit fixed it.


On 05 Jan 2014, at 14:11 , Benoit Chesneau <bchesneau@gmail.com> wrote:

> mmm works here.... will recheck on a new vm.
> 
> - benoit
> 
> 
> On Sun, Jan 5, 2014 at 12:48 PM, Jan Lehnardt <jan@apache.org> wrote:
> 
>> 
>> On 05 Jan 2014, at 10:23 , benoitc@apache.org wrote:
>> 
>>> Updated Branches:
>>> refs/heads/1989-move-couchjs-node-to-extra [created] 6d66d5bf7
>>> 
>>> 
>>> move couchjs-node from src to extra
>>> 
>>> Since the build of couchjs-node is optional we should put it outside of
>>> the src/ folder and move it to an `extra` folder (and the same for all
>>> extras). The reasoning behind is that we should separate more clearly
>>> what is an addon from what is the core product.
>>> 
>>> fix #COUCHDB-1989
>> 
>> ./bootstrap ; ./configure ; make distcheck
>> ...
>> (cd couchjs-node &&
>> /Applications/Xcode.app/Contents/Developer/usr/bin/make
>> top_distdir=../../apache-couchdb-1.6.0+build.6d66d5b
>> distdir=../../apache-couchdb-1.6.0+build.6d66d5b/extra/couchjs-node \
>>     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=:
>> distdir)
>> Makefile:499: *** missing separator.  Stop.
>> make[2]: *** [distdir] Error 1
>> make[1]: *** [distdir] Error 1
>> make: *** [dist] Error 2
>> 
>> 
>>> 
>>> 
>>> Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
>>> Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/6d66d5bf
>>> Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/6d66d5bf
>>> Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/6d66d5bf
>>> 
>>> Branch: refs/heads/1989-move-couchjs-node-to-extra
>>> Commit: 6d66d5bf79327ce620c319e909d3c5f01ec0cd41
>>> Parents: 12c9ee0
>>> Author: Benoit Chesneau <benoitc@apache.org>
>>> Authored: Sun Jan 5 10:20:20 2014 +0100
>>> Committer: Benoit Chesneau <benoitc@apache.org>
>>> Committed: Sun Jan 5 10:22:53 2014 +0100
>>> 
>>> ----------------------------------------------------------------------
>>> Makefile.am                           |   2 +-
>>> configure.ac                          |  13 +--
>>> extra/Makefile.am                     |  13 +++
>>> extra/couchjs-node/Makefile.am        |  24 ++++++
>>> extra/couchjs-node/README.md          |  32 +++++++
>>> extra/couchjs-node/cli.js             |  89 +++++++++++++++++++
>>> extra/couchjs-node/console.js         |  66 ++++++++++++++
>>> extra/couchjs-node/couchdb.js         |  29 +++++++
>>> extra/couchjs-node/couchjs.js         | 133 +++++++++++++++++++++++++++++
>>> extra/couchjs-node/inspector.js       | 101 ++++++++++++++++++++++
>>> extra/couchjs-node/package.json       |  40 +++++++++
>>> extra/couchjs-node/sandbox.js         |  47 ++++++++++
>>> extra/couchjs-node/stream.js          | 115 +++++++++++++++++++++++++
>>> extra/couchjs-node/test/experiment.js | 125 +++++++++++++++++++++++++++
>>> extra/couchjs-node/xml.js             |  22 +++++
>>> license.skip                          |  12 +--
>>> share/doc/src/experimental.rst        |   2 +-
>>> src/Makefile.am                       |   3 +-
>>> src/couchjs-node/Makefile.am          |  24 ------
>>> src/couchjs-node/README.md            |  32 -------
>>> src/couchjs-node/cli.js               |  89 -------------------
>>> src/couchjs-node/console.js           |  66 --------------
>>> src/couchjs-node/couchdb.js           |  29 -------
>>> src/couchjs-node/couchjs.js           | 133 -----------------------------
>>> src/couchjs-node/inspector.js         | 101 ----------------------
>>> src/couchjs-node/package.json         |  40 ---------
>>> src/couchjs-node/sandbox.js           |  47 ----------
>>> src/couchjs-node/stream.js            | 115 -------------------------
>>> src/couchjs-node/test/experiment.js   | 125 ---------------------------
>>> src/couchjs-node/xml.js               |  22 -----
>>> 30 files changed, 853 insertions(+), 838 deletions(-)
>>> ----------------------------------------------------------------------
>>> 
>>> 
>>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/Makefile.am
>>> ----------------------------------------------------------------------
>>> diff --git a/Makefile.am b/Makefile.am
>>> index 22809f8..9dbfc12 100644
>>> --- a/Makefile.am
>>> +++ b/Makefile.am
>>> @@ -10,7 +10,7 @@
>>> ## License for the specific language governing permissions and
>> limitations under
>>> ## the License.
>>> 
>>> -SUBDIRS = bin etc src share test var utils
>>> +SUBDIRS = bin etc extra src share test var utils
>>> 
>>> ACLOCAL_AMFLAGS = -I m4
>>> 
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/configure.ac
>>> ----------------------------------------------------------------------
>>> diff --git a/configure.ac b/configure.ac
>>> index 57a4268..434c7df 100644
>>> --- a/configure.ac
>>> +++ b/configure.ac
>>> @@ -445,7 +445,7 @@ has_crypto=`\
>>> 
>>> if test -n "$has_crypto"; then
>>>    AC_MSG_ERROR([Could not find the Erlang crypto library.
>>> -
>>> +
>>> Has Erlang been compiled with OpenSSL support?])
>>> fi
>>> 
>>> @@ -453,7 +453,7 @@ AC_PATH_PROG([ERLC], [erlc])
>>> 
>>> if test x${ERLC} = x; then
>>>    AC_MSG_ERROR([Could not find the `erlc' executable.
>>> -
>>> +
>>> Is Erlang installed?])
>>> fi
>>> 
>>> @@ -566,7 +566,7 @@ AC_CHECK_PROG([HAS_PDFLATEX], [pdflatex], [yes])
>>> if test x${HAS_PDFLATEX} = x; then
>>>    if test x${strictness_enabled} = xyes; then
>>>        AC_MSG_ERROR([Could not find the `pdflatex' executable.
>>> -
>>> +
>>> Is LaTeX installed?])
>>>    else
>>>        AC_MSG_WARN([You will be unable to regenerate PDF
>> documentation.])
>>> @@ -578,7 +578,7 @@ AC_CHECK_PROG([HAS_MAKEINFO], [makeinfo], [yes])
>>> if test x${HAS_MAKEINFO} = x; then
>>>    if test x${strictness_enabled} = xyes; then
>>>        AC_MSG_ERROR([Could not find the `makeinfo' executable.
>>> -
>>> +
>>> Is GNU Texinfo installed?])
>>>    else
>>>        AC_MSG_WARN([You will be unable to regenerate info
>> documentation.])
>>> @@ -590,7 +590,7 @@ AC_CHECK_PROG([HAS_INSTALLINFO], [install-info],
>> [yes])
>>> if test x${HAS_INSTALLINFO} = x; then
>>>    if test x${strictness_enabled} = xyes; then
>>>        AC_MSG_ERROR([Could not find the `install-info' executable.
>>> -
>>> +
>>> Is GNU Texinfo installed?])
>>>    else
>>>        AC_MSG_WARN([You will be unable to install info documentation.])
>>> @@ -727,6 +727,8 @@ AC_CONFIG_FILES([etc/logrotate.d/couchdb.tpl])
>>> AC_CONFIG_FILES([etc/logrotate.d/Makefile])
>>> AC_CONFIG_FILES([etc/windows/Makefile])
>>> AC_CONFIG_FILES([etc/Makefile])
>>> +AC_CONFIG_FILES([extra/couchjs-node/Makefile])
>>> +AC_CONFIG_FILES([extra/Makefile])
>>> AC_CONFIG_FILES([share/Makefile])
>>> AC_CONFIG_FILES([share/doc/Makefile])
>>> AC_CONFIG_FILES([share/doc/build/Makefile])
>>> @@ -736,7 +738,6 @@ AC_CONFIG_FILES([src/couch_index/Makefile])
>>> AC_CONFIG_FILES([src/couch_mrview/Makefile])
>>> AC_CONFIG_FILES([src/couch_plugins/Makefile])
>>> AC_CONFIG_FILES([src/couch_replicator/Makefile])
>>> -AC_CONFIG_FILES([src/couchjs-node/Makefile])
>>> AC_CONFIG_FILES([src/couchdb/couch.app.tpl])
>>> AC_CONFIG_FILES([src/couchdb/Makefile])
>>> AC_CONFIG_FILES([src/couchdb/priv/Makefile])
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/Makefile.am
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/Makefile.am b/extra/Makefile.am
>>> new file mode 100644
>>> index 0000000..65b0da2
>>> --- /dev/null
>>> +++ b/extra/Makefile.am
>>> @@ -0,0 +1,13 @@
>>> +## Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +## use this file except in compliance with the License. You may obtain
>> a copy of
>>> +## the License at
>>> +##
>>> +##   http://www.apache.org/licenses/LICENSE-2.0
>>> +##
>>> +## Unless required by applicable law or agreed to in writing, software
>>> +## distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +## WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +## License for the specific language governing permissions and
>> limitations under
>>> +## the License.
>>> +
>>> +SUBDIRS = couchjs-node
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/Makefile.am
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/Makefile.am
>> b/extra/couchjs-node/Makefile.am
>>> new file mode 100644
>>> index 0000000..2e402ae
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/Makefile.am
>>> @@ -0,0 +1,24 @@
>>> +e# Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +## use this file except in compliance with the License. You may obtain
>> a copy of
>>> +## the License at
>>> +##
>>> +##   http://www.apache.org/licenses/LICENSE-2.0
>>> +##
>>> +## Unless required by applicable law or agreed to in writing, software
>>> +## distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +## WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +## License for the specific language governing permissions and
>> limitations under
>>> +## the License.
>>> +
>>> +EXTRA_DIST = \
>>> +  cli.js \
>>> +  console.js \
>>> +  couchdb.js \
>>> +  couchjs.js \
>>> +  inspector.js \
>>> +  package.json \
>>> +  README.md \
>>> +  sandbox.js \
>>> +  stream.js \
>>> +  test/experiment.js \
>>> +  xml.js
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/README.md
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/README.md b/extra/couchjs-node/README.md
>>> new file mode 100644
>>> index 0000000..551c3df
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/README.md
>>> @@ -0,0 +1,32 @@
>>> +# CouchJS
>>> +
>>> +## Drop-in replacement JavaScript engine for Apache CouchDB
>>> +
>>> +CouchJS is a command-line Node.js program. It is 100% compatible with
>> Apache CouchDB's built-in JavaScript system.
>>> +
>>> +By using CouchJS, you will get 100% CouchDB compatibility (the test
>> suite completely passes) but your JavaScript environment is V8, or Node.js.
>>> +
>>> +See share/doc/src/experimental.rst for installation instructions.
>>> +
>>> +## Idea
>>> +
>>> +JavaScript is decoupled from the CouchDB core. To do JavaScript stuff,
>> CouchDB runs a normal Unix subprocess, `couchjs`. This subprocess is just a
>> read-eval-print loop on standard i/o. CouchDB passes `couchjs` a file name,
>> and *that file* contains the view server  implementation.
>>> +
>>> +This tool duplicates the "REPL" look and feel of `couchjs` and supports
>> the exact same view server implementation.
>>> +
>>> +## Security
>>> +
>>> +I have no idea. I would not trust it for production use.
>>> +
>>> +## Log
>>> +
>>> +If you create a file, `/tmp/couchjs.log` then *couchjs* will output
>> debugging messages there.
>>> +
>>> +## License
>>> +
>>> +Apache 2.0
>>> +
>>> +See the [Apache 2.0 license](named/blob/master/LICENSE).
>>> +
>>> +[tap]: https://github.com/isaacs/node-tap
>>> +[def]: https://github.com/iriscouch/defaultable
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/cli.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/cli.js b/extra/couchjs-node/cli.js
>>> new file mode 100755
>>> index 0000000..5447dd5
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/cli.js
>>> @@ -0,0 +1,89 @@
>>> +#!/usr/bin/env node
>>> +
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +var fs = require('fs');
>>> +var Fiber = require('fibers');
>>> +var optimist = require('optimist');
>>> +
>>> +var couchjs = require('./couchjs');
>>> +var package_json = require('./package.json');
>>> +var LineStream = require('./stream');
>>> +var inspector = require('./inspector');
>>> +var log = require('./console').log;
>>> +
>>> +
>>> +var opts = optimist.boolean(['h', 'V', 'H'])
>>> +                   .describe({ 'h': 'display a short help message and
>> exit',
>>> +                             'V': 'display version information and
>> exit',
>>> +                             'H': 'enable couchjs cURL bindings (not
>> implemented)'
>>> +                             })
>>> +                   .usage('$0 <path to main.js>');
>>> +
>>> +
>>> +function main() {
>>> +
>>> +  'use strict';
>>> +
>>> +  var main_js = opts.argv._[0];
>>> +
>>> +  if (!main_js) {
>>> +    return console.error(opts.help());
>>> +  }
>>> +
>>> +  log('couchjs/%s %s: %s', package_json.version, process.pid, main_js);
>>> +
>>> +  if (process.env.COUCHJS_DEBUG_PORT) {
>>> +    inspector(+process.env.COUCHJS_DEBUG_PORT);
>>> +  }
>>> +
>>> +  fs.readFile(main_js, 'utf8', function(er, body) {
>>> +    if (er) {
>>> +      throw er;
>>> +    }
>>> +
>>> +    var stdin = new LineStream.v2();
>>> +
>>> +    stdin.on('readable', function() {
>>> +      var buf = stdin.read();
>>> +
>>> +      if (buf) {
>>> +        couchjs.stdin(buf);
>>> +      }
>>> +    });
>>> +
>>> +    stdin.on('end', function() {
>>> +      log('Terminate; connection to parent closed');
>>> +      process.exit(0);
>>> +    });
>>> +
>>> +    process.stdin.setEncoding('utf8');
>>> +    process.stdin.pipe(stdin);
>>> +
>>> +    var main_func = Function(['print', 'readline', 'evalcx', 'gc',
>> 'quit'], body);
>>> +
>>> +    log('Call main');
>>> +
>>> +    new Fiber(function() {
>>> +      main_func(couchjs.print, couchjs.readline, couchjs.evalcx,
>> couchjs.gc);
>>> +    }).run();
>>> +  });
>>> +
>>> +  process.on('uncaughtException', function(er) {
>>> +    log('Error:\n%s', er.stack);
>>> +  });
>>> +}
>>> +
>>> +if (require.main === module) {
>>> +  main();
>>> +}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/console.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/console.js
>> b/extra/couchjs-node/console.js
>>> new file mode 100644
>>> index 0000000..18e7241
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/console.js
>>> @@ -0,0 +1,66 @@
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +var fs = require('fs');
>>> +var util = require('util');
>>> +
>>> +var noop = function() {};
>>> +
>>> +module.exports = {};
>>> +module.exports.log = noop;
>>> +module.exports.debug = noop;
>>> +module.exports.info = noop;
>>> +module.exports.warn = noop;
>>> +module.exports.error = noop;
>>> +
>>> +var LOG_PATH = '/tmp/couchjs.log';
>>> +var stat = null;
>>> +var LOG = null;
>>> +
>>> +try {
>>> +  stat = fs.statSync(LOG_PATH);
>>> +} catch(er) {}
>>> +
>>> +if (stat) {
>>> +  LOG = fs.createWriteStream(LOG_PATH, {
>>> +    'flags':'a'
>>> +  });
>>> +
>>> +  var log = function () {
>>> +    var str = util.format.apply(this, arguments);
>>> +    LOG.write(str + '\n');
>>> +  };
>>> +
>>> +  var on_err = function (er) {
>>> +    module.exports.error('Uncaught error:\n%s', er.stack || er.message
>> || JSON.stringify(er));
>>> +
>>> +    if (er.stack) {
>>> +      er = ['fatal', 'unknown_error', er.stack];
>>> +    }
>>> +
>>> +    process.stdout.write(JSON.stringify(er) + '\n');
>>> +    process.exit(1);
>>> +  };
>>> +
>>> +  module.exports.log = log;
>>> +  module.exports.debug = log;
>>> +  module.exports.info = log;
>>> +  module.exports.warn = log;
>>> +  module.exports.error = log;
>>> +
>>> +  process.on('exit', function() {
>>> +    module.exports.log('Exit %d', process.pid);
>>> +  });
>>> +
>>> +  process.on('uncaughtException', on_err);
>>> +}
>>> +
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/couchdb.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/couchdb.js
>> b/extra/couchjs-node/couchdb.js
>>> new file mode 100755
>>> index 0000000..d420540
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/couchdb.js
>>> @@ -0,0 +1,29 @@
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +
>>> +var http = require('http');
>>> +
>>> +function handler(req, res) {
>>> +  res.writeHead(200);
>>> +  res.end('Hello: ' + req.url + '\n');
>>> +}
>>> +
>>> +if (require.main === module) {
>>> +  var http = require('http');
>>> +  var server = http.createServer(handler);
>>> +
>>> +  server.listen(3000);
>>> +  console.log('Listening on :3000');
>>> +}
>>> +
>>> +module.exports = handler;
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/couchjs.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/couchjs.js
>> b/extra/couchjs-node/couchjs.js
>>> new file mode 100644
>>> index 0000000..ccc1aa9
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/couchjs.js
>>> @@ -0,0 +1,133 @@
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +
>>> +
>>> +var vm = require('vm');
>>> +var Fiber = require('fibers');
>>> +var util = require('util');
>>> +
>>> +var XML = require('./xml');
>>> +var log = require('./console').log;
>>> +
>>> +var INPUT = {
>>> +  'queue':[],
>>> +  'waiting':null
>>> +};
>>> +
>>> +
>>> +function print(line) {
>>> +  log('STDOUT %s: %s', process.pid, line);
>>> +  process.stdout.write(line + '\n');
>>> +
>>> +  try {
>>> +    line = JSON.parse(line);
>>> +  } catch(er) {
>>> +    return;
>>> +  }
>>> +
>>> +  if (line[0] === 'log') {
>>> +    log('LOG: %s', line[1]);
>>> +  }
>>> +}
>>> +
>>> +function stdin (line) {
>>> +  log('STDIN %s: %s', process.pid, line.trim());
>>> +
>>> +  if (INPUT.waiting) {
>>> +    INPUT.waiting.run(line);
>>> +  } else {
>>> +    INPUT.queue.push(line);
>>> +  }
>>> +}
>>> +
>>> +function readline () {
>>> +  var line = INPUT.queue.shift();
>>> +
>>> +  if (line) {
>>> +    return line;
>>> +  }
>>> +
>>> +  INPUT.waiting = Fiber.current;
>>> +  line = Fiber.yield();
>>> +  INPUT.waiting = null;
>>> +
>>> +  return line;
>>> +}
>>> +
>>> +
>>> +function evalcx (source, sandbox) {
>>> +  sandbox = sandbox || {};
>>> +  var func;
>>> +  //log('evalcx in %j: %j', Object.keys(sandbox), source)
>>> +
>>> +  if (source === '') {
>>> +    return sandbox;
>>> +  }
>>> +
>>> +  // source might be "function(doc) { emit(doc._id, 1) }"
>>> +  source = source.replace(/;+$/, '');
>>> +
>>> +  sandbox.XML = sandbox.XML || XML;
>>> +  source = '(' + source + ')';
>>> +
>>> +  try {
>>> +    var id = Math.floor(Math.random() * 1000*1000);
>>> +    var filename = '_couchdb:' + id + '.js';
>>> +    var script = vm.createScript(source, filename);
>>> +    func = script.runInNewContext(sandbox);
>>> +  } catch (er) {
>>> +    log('Error making code: %s', er.stack);
>>> +    return sandbox;
>>> +  }
>>> +
>>> +  return func;
>>> +}
>>> +
>>> +function quit(code) {
>>> +  code = code || 1;
>>> +  if (code < 0) {
>>> +    code = -code;
>>> +  }
>>> +
>>> +  process.exit(code);
>>> +}
>>> +
>>> +function gc() { }
>>> +
>>> +
>>> +function toSource() {
>>> +  if (typeof this === 'function') {
>>> +    return '' + this;
>>> +  }
>>> +
>>> +  if (this instanceof Error) {
>>> +    return this.stack;
>>> +  }
>>> +
>>> +  return util.inspect(this);
>>> +}
>>> +
>>> +Error.prototype.toSource = Error.prototype.toSource || toSource;
>>> +Error.prototype.toString = Error.prototype.toString || toSource;
>>> +Function.prototype.toSource = Function.prototype.toSource || toSource;
>>> +Function.prototype.toString = Function.prototype.toString || toSource;
>>> +
>>> +module.exports = {
>>> +  'print': print,
>>> +  'readline': readline,
>>> +  'stdin': stdin,
>>> +  'evalcx': evalcx,
>>> +  'quit': quit,
>>> +  'gc': gc
>>> +};
>>> +
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/inspector.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/inspector.js
>> b/extra/couchjs-node/inspector.js
>>> new file mode 100755
>>> index 0000000..48182e5
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/inspector.js
>>> @@ -0,0 +1,101 @@
>>> +#!/usr/bin/env node
>>> +
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +
>>> +
>>> +var cp = require('child_process');
>>> +var log = require('./console').log;
>>> +
>>> +function watchInspector(child) {
>>> +
>>> +  child.stderr.on('data', function(body) {
>>> +    log('Inspector STDERR: %s', body);
>>> +  });
>>> +
>>> +  child.stdout.on('data', function(body) {
>>> +    log('Inspector STDOUT: %s', body);
>>> +  });
>>> +
>>> +  child.on('exit', function(code, signal) {
>>> +    log('Inspector exited %d signal=%j', code, signal);
>>> +    process.exit(code);
>>> +  });
>>> +
>>> +  process.on('exit', function() {
>>> +    log('Kill inspector upon exit: %d', child.pid);
>>> +    process.kill(child.pid, 'SIGTERM');
>>> +  });
>>> +
>>> +}
>>> +
>>> +function start (debugPort) {
>>> +
>>> +  if (!debugPort || typeof debugPort !== 'number') {
>>> +    throw new Error('Need a listen debugPort');
>>> +  }
>>> +
>>> +  var webPort = debugPort + 1;
>>> +  var cmd = __filename;
>>> +  var args = [debugPort, webPort];
>>> +  var opts = {
>>> +    'cwd': __dirname,
>>> +    'stdio': 'pipe',
>>> +    'detached': false
>>> +  };
>>> +
>>> +  log('Start inspector: %s %j %j', cmd, args, opts);
>>> +
>>> +  var inspector = cp.spawn(cmd, args, opts);
>>> +
>>> +  watchInspector(inspector);
>>> +
>>> +  log('Enable remote debug pid=%d port=%d', process.pid, debugPort);
>>> +
>>> +  process.debugPort = debugPort;
>>> +  process.kill(process.pid, 'SIGUSR1');
>>> +}
>>> +
>>> +function main() {
>>> +  var debugPort = +process.argv[2];
>>> +  var webPort = +process.argv[3];
>>> +
>>> +  if (!debugPort || !webPort) {
>>> +    throw new Error('Bad arguments: need debugPort and webPort');
>>> +  }
>>> +
>>> +  console.log('Start inspector debugPort=%j webPort=%j', debugPort,
>> webPort);
>>> +
>>> +  var DebugServer = require('node-inspector/lib/debug-server');
>>> +  var server = new DebugServer();
>>> +
>>> +  server.on('close', function() {
>>> +    console.log('Server closed');
>>> +    process.exit(0);
>>> +  });
>>> +
>>> +  server.start({
>>> +    'webPort':webPort,
>>> +    'debugPort':debugPort
>>> +  });
>>> +
>>> +  process.on('uncaughtException', function(er) {
>>> +    console.log('Error:\n%s', er.stack);
>>> +  });
>>> +}
>>> +
>>> +module.exports = start;
>>> +
>>> +if (require.main === module) {
>>> +  main();
>>> +}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/package.json
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/package.json
>> b/extra/couchjs-node/package.json
>>> new file mode 100644
>>> index 0000000..445f3b9
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/package.json
>>> @@ -0,0 +1,40 @@
>>> +{
>>> +  "name": "couchjs",
>>> +  "description": "Drop-in replacement for CouchDB JavaScript view
>> server",
>>> +  "keywords": [ "couchdb", "couchjs" ],
>>> +  "version": "0.3.2",
>>> +  "author": "Jason Smith <jhs@iriscouch.com> (http://www.iriscouch.com
>> )",
>>> +  "repository": {
>>> +    "type":"git",
>>> +    "url":"https://github.com/iriscouch/couchjs"
>>> +  },
>>> +  "engines": {
>>> +    "node": ">= 0.8"
>>> +  },
>>> +  "main": "./couchjs.js",
>>> +  "bin": {
>>> +    "couchjs-node":"./cli.js"
>>> +  },
>>> +  "couchdb": {
>>> +    "main":"./couchdb.js",
>>> +    "vhosts": [
>>> +      "127.0.0.1.xip.io"
>>> +    ]
>>> +  },
>>> +  "bundledDependencies": [
>>> +    "node-inspector"
>>> +  ],
>>> +  "dependencies": {
>>> +    "optimist": "~0.3.4",
>>> +    "async"   : "~0.2.5",
>>> +    "mkdirp"  : "~0.3.4",
>>> +    "fibers"  : "~1.0.0",
>>> +    "request" : "~2.9.203",
>>> +    "pushover": "~1.2.1",
>>> +    "defaultable": "~0.7.2",
>>> +    "node-inspector": "git://
>> github.com/iriscouch/node-inspector#couchjs"
>>> +  },
>>> +  "devDependencies": {
>>> +    "tap": "~0.2.5"
>>> +  }
>>> +}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/sandbox.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/sandbox.js
>> b/extra/couchjs-node/sandbox.js
>>> new file mode 100644
>>> index 0000000..5c18ef4
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/sandbox.js
>>> @@ -0,0 +1,47 @@
>>> +// from https://github.com/KlausTrainer/sandbox.js
>>> +exports.runInSandbox = function(src, ctx, whitelist) {
>>> +  var vm = require('vm');
>>> +  var sandbox;
>>> +
>>> +  if (ctx && ctx.require) {
>>> +
>>> +    whitelist = whitelist || [];
>>> +
>>> +    var insecureRequire = ctx.require;
>>> +    var module = require('module');
>>> +    var oldModulePrototype = module.prototype;
>>> +
>>> +    var secureRequire = function(moduleName) {
>>> +
>>> +      if (whitelist.indexOf(moduleName) === -1) {
>>> +        module.prototype = oldModulePrototype;
>>> +
>>> +        throw new Error("'" + moduleName + "' is not whitelisted");
>>> +
>>> +      } else {
>>> +        var requiredModule = insecureRequire(moduleName);
>>> +
>>> +        module.prototype = oldModulePrototype;
>>> +
>>> +        return requiredModule;
>>> +      }
>>> +    };
>>> +
>>> +    module.prototype = {
>>> +      require: secureRequire,
>>> +      load: module.prototype.load,
>>> +      _compile: module.prototype._compile
>>> +    };
>>> +
>>> +    module._cache = {};
>>> +
>>> +    ctx.require = secureRequire;
>>> +    sandbox = Object.freeze(vm.createContext(ctx));
>>> +    ctx.require = insecureRequire;
>>> +
>>> +  } else {
>>> +    sandbox = Object.freeze(vm.createContext(ctx || {}));
>>> +  }
>>> +
>>> +  return vm.createScript('(function() {"use strict"; return (' + src +
>> ')()}())').runInContext(sandbox);
>>> +};
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/stream.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/stream.js b/extra/couchjs-node/stream.js
>>> new file mode 100644
>>> index 0000000..ebffc30
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/stream.js
>>> @@ -0,0 +1,115 @@
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +// Text line stream
>>> +
>>> +var stream = require('stream');
>>> +var util = require('util');
>>> +
>>> +
>>> +function LineStream() {
>>> +
>>> +  var self = this;
>>> +  stream.call(self);
>>> +
>>> +  self.readable = true;
>>> +  self.writable = true;
>>> +
>>> +  self.buffer = '';
>>> +  self.downstream = null;
>>> +
>>> +  self.on('pipe', function(upstream) {
>>> +    upstream.on('end', function(data, encoding) {
>>> +      self.emit('end', data, encoding);
>>> +    });
>>> +  });
>>> +}
>>> +
>>> +function LineStream2() {
>>> +
>>> +  if (!(this instanceof LineStream2)) {
>>> +    return new LineStream2();
>>> +  }
>>> +
>>> +  stream.Transform.call(this);
>>> +  this.setEncoding('utf8');
>>> +}
>>> +
>>> +util.inherits(LineStream2, stream.Transform);
>>> +
>>> +LineStream2.prototype._transform = function(message, encoding, done) {
>>> +  var self = this;
>>> +
>>> +  message = message.toString(encoding);
>>> +  var lines = message.split(/\n/);
>>> +
>>> +  // If the data ends in "\n" this will be ""; otherwise the final
>> partial line.
>>> +  var remainder = lines.pop();
>>> +  if (remainder) {
>>> +    this.unshift(remainder);
>>> +  }
>>> +
>>> +  lines.forEach(function(line) {
>>> +    self.push(line);
>>> +  });
>>> +
>>> +  done();
>>> +};
>>> +
>>> +util.inherits(LineStream, stream);
>>> +
>>> +
>>> +
>>> +LineStream.prototype.write = function(data) {
>>> +  var self = this;
>>> +
>>> +  data = data || '';
>>> +  if (typeof data !== 'string') {
>>> +    return self.error(new Error('Data was not a string: ' +
>> util.inspect(data)));
>>> +  }
>>> +
>>> +  self.buffer += data;
>>> +  var lines = self.buffer.split(/\n/);
>>> +  self.buffer = lines.pop(); // If the data ended in "\n" this will be
>> ""; otherwise the final partial line.
>>> +
>>> +  lines.forEach(function(line) {
>>> +    self.emit('data', line);
>>> +  });
>>> +};
>>> +
>>> +
>>> +LineStream.prototype.end = function(data) {
>>> +  var self = this;
>>> +
>>> +  self.is_ending = true;
>>> +  self.writable = false;
>>> +
>>> +  // Always call write, even with no data, so it can fire the "end"
>> event.
>>> +  self.write(data);
>>> +};
>>> +
>>> +
>>> +LineStream.prototype.error = function(er) {
>>> +  var self = this;
>>> +
>>> +  self.readable = false;
>>> +  self.writable = false;
>>> +  self.emit('error', er);
>>> +
>>> +  // The write() method sometimes returns this value, so if there was
>> an error, make write() return false.
>>> +  return false;
>>> +};
>>> +
>>> +
>>> +module.exports = LineStream;
>>> +module.exports.v2 = LineStream2;
>>> +
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/test/experiment.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/test/experiment.js
>> b/extra/couchjs-node/test/experiment.js
>>> new file mode 100644
>>> index 0000000..9197ec6
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/test/experiment.js
>>> @@ -0,0 +1,125 @@
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +var vm = require('vm');
>>> +var util = require('util');
>>> +
>>> +var STATE = 'wait';
>>> +
>>> +function main() {
>>> +  process.debugPort = 5859;
>>> +  process.kill(process.pid, 'SIGUSR1');
>>> +
>>> +  setTimeout(function() {
>>> +    stuff(0);
>>> +  }, 1000);
>>> +}
>>> +
>>> +function stuff(count) {
>>> +
>>> +  console.log('Doing stuff: %d', count);
>>> +  STATE = 'vm';
>>> +  console.log('More stuff: %d', count);
>>> +
>>> +  if (STATE === 'done') {
>>> +    console.log('Done');
>>> +  } else if (STATE === 'code') {
>>> +    setTimeout(code, 1000);
>>> +  } else if(STATE === 'eval') {
>>> +    test_eval();
>>> +  } else if(STATE === 'vm') {
>>> +    test_vm();
>>> +  } else if(STATE === 'wait') {
>>> +    setTimeout(function() {
>>> +      stuff(count+1);
>>> +    }, 1000);
>>> +  } else {
>>> +    throw new Error('Unknown state: ' + STATE);
>>> +  }
>>> +}
>>> +
>>> +function code() {
>>> +  var code = [
>>> +    'var foo = "in the code"',
>>> +    'console.log("This is some code")',
>>> +    'debugger',
>>> +    'console.log("foo = " + foo)'
>>> +    ].join('\n');
>>> +
>>> +  var runner = Function([], code);
>>> +
>>> +  console.log('Run runner in 1s');
>>> +
>>> +  setTimeout(run_runner, 1000)
>>> +
>>> +  function run_runner() {
>>> +    console.log('About to run runner');
>>> +    debugger;
>>> +    runner();
>>> +    console.log('Runner done');
>>> +  }
>>> +}
>>> +
>>> +function test_eval() {
>>> +  console.log('Test eval in 1s');
>>> +  setTimeout(run_eval, 1000);
>>> +
>>> +  var code = [
>>> +    'var foo = "in eval"',
>>> +    'console.log("This is eval")',
>>> +    'debugger',
>>> +    'console.log("foo = " + foo)'
>>> +    ].join('\n');
>>> +
>>> +  function run_eval() {
>>> +    console.log('Run eval now');
>>> +    debugger;
>>> +    eval(code);
>>> +  }
>>> +}
>>> +
>>> +function test_vm() {
>>> +  console.log('Test vm');
>>> +
>>> +  var code = [
>>> +    'var i = 10',
>>> +    'setTimeout(hello, 1000)',
>>> +    '',
>>> +    'function hello() {',
>>> +    '  debugger',
>>> +    '  console.log("Hello: " + i)',
>>> +    '  if(--i)',
>>> +    '    setTimeout(hello, 1000)',
>>> +    '}'
>>> +  ].join('\n');
>>> +
>>> +  console.log('Run vm now');
>>> +  var filename = '_couchdb:code.js';
>>> +
>>> +  var sandbox = {};
>>> +  var ok = ['console', 'setTimeout'];
>>> +
>>> +  ok.forEach(function(key) {
>>> +    sandbox[key] = global[key];
>>> +  });
>>> +
>>> +  var ctx = vm.createContext(sandbox);
>>> +  var script = vm.createScript(code, filename);
>>> +
>>> +  var r = script.runInNewContext(sandbox);
>>> +  console.log('Result:\n%s', util.inspect(r, false, 10));
>>> +  return r;
>>> +}
>>> +
>>> +if (require.main === module) {
>>> +  main();
>>> +}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/extra/couchjs-node/xml.js
>>> ----------------------------------------------------------------------
>>> diff --git a/extra/couchjs-node/xml.js b/extra/couchjs-node/xml.js
>>> new file mode 100644
>>> index 0000000..b64d221
>>> --- /dev/null
>>> +++ b/extra/couchjs-node/xml.js
>>> @@ -0,0 +1,22 @@
>>> +// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> +// use this file except in compliance with the License. You may obtain
>> a copy of
>>> +// the License at
>>> +//
>>> +//   http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +// Unless required by applicable law or agreed to in writing, software
>>> +// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> +// License for the specific language governing permissions and
>> limitations under
>>> +// the License.
>>> +
>>> +
>>> +function XML () {
>>> +  this.foo = 'bar';
>>> +}
>>> +
>>> +XML.prototype.toXMLString = function() {
>>> +  return '<xml>\n  <title>test</title>\n</xml>';
>>> +};
>>> +
>>> +module.exports = XML;
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/license.skip
>>> ----------------------------------------------------------------------
>>> diff --git a/license.skip b/license.skip
>>> index 0895cf8..5009532 100644
>>> --- a/license.skip
>>> +++ b/license.skip
>>> @@ -52,6 +52,13 @@
>>> ^etc/logrotate.d/couchdb.*
>>> ^etc/windows/Makefile
>>> ^etc/windows/README.txt.tpl
>>> +^extra/Makefile
>>> +^extra/Makefile.in
>>> +^extra/couchjs-node/package.json
>>> +^extra/couchjs-node/sandbox.js
>>> +^extra/couchjs-node/README.md
>>> +^extra/couchjs-node/Makefile
>>> +^extra/couchjs-node/Makefile.in
>>> ^libtool
>>> ^license.skip
>>> ^m4/.*
>>> @@ -114,11 +121,6 @@
>>> ^src/couchdb/priv/couchjs
>>> ^src/couchdb/priv/couchspawnkillable
>>> ^src/couchdb/priv/stat_descriptions.cfg
>>> -^src/couchjs-node/package.json
>>> -^src/couchjs-node/sandbox.js
>>> -^src/couchjs-node/README.md
>>> -^src/couchjs-node/Makefile
>>> -^src/couchjs-node/Makefile.in
>>> ^src/erlang-oauth/.*
>>> ^src/couch_dbupdates
>>> ^src/ejson/.*
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/share/doc/src/experimental.rst
>>> ----------------------------------------------------------------------
>>> diff --git a/share/doc/src/experimental.rst
>> b/share/doc/src/experimental.rst
>>> index 3157f53..8cd5765 100644
>>> --- a/share/doc/src/experimental.rst
>>> +++ b/share/doc/src/experimental.rst
>>> @@ -40,7 +40,7 @@ Downloads <http://nodejs.org/download/>`_ for options.
>>> 
>>> 1. Install the `couchjs-node` binary. Either from the CouchDB sources::
>>> 
>>> -    cd src/couchjs-node
>>> +    cd extra/couchjs-node
>>>    npm link
>>> 
>>> Or via NPM::
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/Makefile.am
>>> ----------------------------------------------------------------------
>>> diff --git a/src/Makefile.am b/src/Makefile.am
>>> index 378f82b..c06a091 100644
>>> --- a/src/Makefile.am
>>> +++ b/src/Makefile.am
>>> @@ -22,8 +22,7 @@ SUBDIRS = \
>>>    etap \
>>>    ibrowse \
>>>    mochiweb \
>>> -    snappy \
>>> -    couchjs-node
>>> +    snappy
>>> 
>>> EXTRA_DIST = \
>>>    $(MY_FIRST_COUCHDB_PLUGIN_FILES) \
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/Makefile.am
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/Makefile.am b/src/couchjs-node/Makefile.am
>>> deleted file mode 100644
>>> index 2144970..0000000
>>> --- a/src/couchjs-node/Makefile.am
>>> +++ /dev/null
>>> @@ -1,24 +0,0 @@
>>> -## Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -## use this file except in compliance with the License. You may obtain
>> a copy of
>>> -## the License at
>>> -##
>>> -##   http://www.apache.org/licenses/LICENSE-2.0
>>> -##
>>> -## Unless required by applicable law or agreed to in writing, software
>>> -## distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -## WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -## License for the specific language governing permissions and
>> limitations under
>>> -## the License.
>>> -
>>> -EXTRA_DIST = \
>>> -  cli.js \
>>> -  console.js \
>>> -  couchdb.js \
>>> -  couchjs.js \
>>> -  inspector.js \
>>> -  package.json \
>>> -  README.md \
>>> -  sandbox.js \
>>> -  stream.js \
>>> -  test/experiment.js \
>>> -  xml.js
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/README.md
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/README.md b/src/couchjs-node/README.md
>>> deleted file mode 100644
>>> index 551c3df..0000000
>>> --- a/src/couchjs-node/README.md
>>> +++ /dev/null
>>> @@ -1,32 +0,0 @@
>>> -# CouchJS
>>> -
>>> -## Drop-in replacement JavaScript engine for Apache CouchDB
>>> -
>>> -CouchJS is a command-line Node.js program. It is 100% compatible with
>> Apache CouchDB's built-in JavaScript system.
>>> -
>>> -By using CouchJS, you will get 100% CouchDB compatibility (the test
>> suite completely passes) but your JavaScript environment is V8, or Node.js.
>>> -
>>> -See share/doc/src/experimental.rst for installation instructions.
>>> -
>>> -## Idea
>>> -
>>> -JavaScript is decoupled from the CouchDB core. To do JavaScript stuff,
>> CouchDB runs a normal Unix subprocess, `couchjs`. This subprocess is just a
>> read-eval-print loop on standard i/o. CouchDB passes `couchjs` a file name,
>> and *that file* contains the view server  implementation.
>>> -
>>> -This tool duplicates the "REPL" look and feel of `couchjs` and supports
>> the exact same view server implementation.
>>> -
>>> -## Security
>>> -
>>> -I have no idea. I would not trust it for production use.
>>> -
>>> -## Log
>>> -
>>> -If you create a file, `/tmp/couchjs.log` then *couchjs* will output
>> debugging messages there.
>>> -
>>> -## License
>>> -
>>> -Apache 2.0
>>> -
>>> -See the [Apache 2.0 license](named/blob/master/LICENSE).
>>> -
>>> -[tap]: https://github.com/isaacs/node-tap
>>> -[def]: https://github.com/iriscouch/defaultable
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/cli.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/cli.js b/src/couchjs-node/cli.js
>>> deleted file mode 100755
>>> index 5447dd5..0000000
>>> --- a/src/couchjs-node/cli.js
>>> +++ /dev/null
>>> @@ -1,89 +0,0 @@
>>> -#!/usr/bin/env node
>>> -
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -var fs = require('fs');
>>> -var Fiber = require('fibers');
>>> -var optimist = require('optimist');
>>> -
>>> -var couchjs = require('./couchjs');
>>> -var package_json = require('./package.json');
>>> -var LineStream = require('./stream');
>>> -var inspector = require('./inspector');
>>> -var log = require('./console').log;
>>> -
>>> -
>>> -var opts = optimist.boolean(['h', 'V', 'H'])
>>> -                   .describe({ 'h': 'display a short help message and
>> exit',
>>> -                             'V': 'display version information and
>> exit',
>>> -                             'H': 'enable couchjs cURL bindings (not
>> implemented)'
>>> -                             })
>>> -                   .usage('$0 <path to main.js>');
>>> -
>>> -
>>> -function main() {
>>> -
>>> -  'use strict';
>>> -
>>> -  var main_js = opts.argv._[0];
>>> -
>>> -  if (!main_js) {
>>> -    return console.error(opts.help());
>>> -  }
>>> -
>>> -  log('couchjs/%s %s: %s', package_json.version, process.pid, main_js);
>>> -
>>> -  if (process.env.COUCHJS_DEBUG_PORT) {
>>> -    inspector(+process.env.COUCHJS_DEBUG_PORT);
>>> -  }
>>> -
>>> -  fs.readFile(main_js, 'utf8', function(er, body) {
>>> -    if (er) {
>>> -      throw er;
>>> -    }
>>> -
>>> -    var stdin = new LineStream.v2();
>>> -
>>> -    stdin.on('readable', function() {
>>> -      var buf = stdin.read();
>>> -
>>> -      if (buf) {
>>> -        couchjs.stdin(buf);
>>> -      }
>>> -    });
>>> -
>>> -    stdin.on('end', function() {
>>> -      log('Terminate; connection to parent closed');
>>> -      process.exit(0);
>>> -    });
>>> -
>>> -    process.stdin.setEncoding('utf8');
>>> -    process.stdin.pipe(stdin);
>>> -
>>> -    var main_func = Function(['print', 'readline', 'evalcx', 'gc',
>> 'quit'], body);
>>> -
>>> -    log('Call main');
>>> -
>>> -    new Fiber(function() {
>>> -      main_func(couchjs.print, couchjs.readline, couchjs.evalcx,
>> couchjs.gc);
>>> -    }).run();
>>> -  });
>>> -
>>> -  process.on('uncaughtException', function(er) {
>>> -    log('Error:\n%s', er.stack);
>>> -  });
>>> -}
>>> -
>>> -if (require.main === module) {
>>> -  main();
>>> -}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/console.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/console.js b/src/couchjs-node/console.js
>>> deleted file mode 100644
>>> index 18e7241..0000000
>>> --- a/src/couchjs-node/console.js
>>> +++ /dev/null
>>> @@ -1,66 +0,0 @@
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -var fs = require('fs');
>>> -var util = require('util');
>>> -
>>> -var noop = function() {};
>>> -
>>> -module.exports = {};
>>> -module.exports.log = noop;
>>> -module.exports.debug = noop;
>>> -module.exports.info = noop;
>>> -module.exports.warn = noop;
>>> -module.exports.error = noop;
>>> -
>>> -var LOG_PATH = '/tmp/couchjs.log';
>>> -var stat = null;
>>> -var LOG = null;
>>> -
>>> -try {
>>> -  stat = fs.statSync(LOG_PATH);
>>> -} catch(er) {}
>>> -
>>> -if (stat) {
>>> -  LOG = fs.createWriteStream(LOG_PATH, {
>>> -    'flags':'a'
>>> -  });
>>> -
>>> -  var log = function () {
>>> -    var str = util.format.apply(this, arguments);
>>> -    LOG.write(str + '\n');
>>> -  };
>>> -
>>> -  var on_err = function (er) {
>>> -    module.exports.error('Uncaught error:\n%s', er.stack || er.message
>> || JSON.stringify(er));
>>> -
>>> -    if (er.stack) {
>>> -      er = ['fatal', 'unknown_error', er.stack];
>>> -    }
>>> -
>>> -    process.stdout.write(JSON.stringify(er) + '\n');
>>> -    process.exit(1);
>>> -  };
>>> -
>>> -  module.exports.log = log;
>>> -  module.exports.debug = log;
>>> -  module.exports.info = log;
>>> -  module.exports.warn = log;
>>> -  module.exports.error = log;
>>> -
>>> -  process.on('exit', function() {
>>> -    module.exports.log('Exit %d', process.pid);
>>> -  });
>>> -
>>> -  process.on('uncaughtException', on_err);
>>> -}
>>> -
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/couchdb.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/couchdb.js b/src/couchjs-node/couchdb.js
>>> deleted file mode 100755
>>> index d420540..0000000
>>> --- a/src/couchjs-node/couchdb.js
>>> +++ /dev/null
>>> @@ -1,29 +0,0 @@
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -
>>> -var http = require('http');
>>> -
>>> -function handler(req, res) {
>>> -  res.writeHead(200);
>>> -  res.end('Hello: ' + req.url + '\n');
>>> -}
>>> -
>>> -if (require.main === module) {
>>> -  var http = require('http');
>>> -  var server = http.createServer(handler);
>>> -
>>> -  server.listen(3000);
>>> -  console.log('Listening on :3000');
>>> -}
>>> -
>>> -module.exports = handler;
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/couchjs.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/couchjs.js b/src/couchjs-node/couchjs.js
>>> deleted file mode 100644
>>> index ccc1aa9..0000000
>>> --- a/src/couchjs-node/couchjs.js
>>> +++ /dev/null
>>> @@ -1,133 +0,0 @@
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -
>>> -
>>> -var vm = require('vm');
>>> -var Fiber = require('fibers');
>>> -var util = require('util');
>>> -
>>> -var XML = require('./xml');
>>> -var log = require('./console').log;
>>> -
>>> -var INPUT = {
>>> -  'queue':[],
>>> -  'waiting':null
>>> -};
>>> -
>>> -
>>> -function print(line) {
>>> -  log('STDOUT %s: %s', process.pid, line);
>>> -  process.stdout.write(line + '\n');
>>> -
>>> -  try {
>>> -    line = JSON.parse(line);
>>> -  } catch(er) {
>>> -    return;
>>> -  }
>>> -
>>> -  if (line[0] === 'log') {
>>> -    log('LOG: %s', line[1]);
>>> -  }
>>> -}
>>> -
>>> -function stdin (line) {
>>> -  log('STDIN %s: %s', process.pid, line.trim());
>>> -
>>> -  if (INPUT.waiting) {
>>> -    INPUT.waiting.run(line);
>>> -  } else {
>>> -    INPUT.queue.push(line);
>>> -  }
>>> -}
>>> -
>>> -function readline () {
>>> -  var line = INPUT.queue.shift();
>>> -
>>> -  if (line) {
>>> -    return line;
>>> -  }
>>> -
>>> -  INPUT.waiting = Fiber.current;
>>> -  line = Fiber.yield();
>>> -  INPUT.waiting = null;
>>> -
>>> -  return line;
>>> -}
>>> -
>>> -
>>> -function evalcx (source, sandbox) {
>>> -  sandbox = sandbox || {};
>>> -  var func;
>>> -  //log('evalcx in %j: %j', Object.keys(sandbox), source)
>>> -
>>> -  if (source === '') {
>>> -    return sandbox;
>>> -  }
>>> -
>>> -  // source might be "function(doc) { emit(doc._id, 1) }"
>>> -  source = source.replace(/;+$/, '');
>>> -
>>> -  sandbox.XML = sandbox.XML || XML;
>>> -  source = '(' + source + ')';
>>> -
>>> -  try {
>>> -    var id = Math.floor(Math.random() * 1000*1000);
>>> -    var filename = '_couchdb:' + id + '.js';
>>> -    var script = vm.createScript(source, filename);
>>> -    func = script.runInNewContext(sandbox);
>>> -  } catch (er) {
>>> -    log('Error making code: %s', er.stack);
>>> -    return sandbox;
>>> -  }
>>> -
>>> -  return func;
>>> -}
>>> -
>>> -function quit(code) {
>>> -  code = code || 1;
>>> -  if (code < 0) {
>>> -    code = -code;
>>> -  }
>>> -
>>> -  process.exit(code);
>>> -}
>>> -
>>> -function gc() { }
>>> -
>>> -
>>> -function toSource() {
>>> -  if (typeof this === 'function') {
>>> -    return '' + this;
>>> -  }
>>> -
>>> -  if (this instanceof Error) {
>>> -    return this.stack;
>>> -  }
>>> -
>>> -  return util.inspect(this);
>>> -}
>>> -
>>> -Error.prototype.toSource = Error.prototype.toSource || toSource;
>>> -Error.prototype.toString = Error.prototype.toString || toSource;
>>> -Function.prototype.toSource = Function.prototype.toSource || toSource;
>>> -Function.prototype.toString = Function.prototype.toString || toSource;
>>> -
>>> -module.exports = {
>>> -  'print': print,
>>> -  'readline': readline,
>>> -  'stdin': stdin,
>>> -  'evalcx': evalcx,
>>> -  'quit': quit,
>>> -  'gc': gc
>>> -};
>>> -
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/inspector.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/inspector.js
>> b/src/couchjs-node/inspector.js
>>> deleted file mode 100755
>>> index 48182e5..0000000
>>> --- a/src/couchjs-node/inspector.js
>>> +++ /dev/null
>>> @@ -1,101 +0,0 @@
>>> -#!/usr/bin/env node
>>> -
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -
>>> -
>>> -var cp = require('child_process');
>>> -var log = require('./console').log;
>>> -
>>> -function watchInspector(child) {
>>> -
>>> -  child.stderr.on('data', function(body) {
>>> -    log('Inspector STDERR: %s', body);
>>> -  });
>>> -
>>> -  child.stdout.on('data', function(body) {
>>> -    log('Inspector STDOUT: %s', body);
>>> -  });
>>> -
>>> -  child.on('exit', function(code, signal) {
>>> -    log('Inspector exited %d signal=%j', code, signal);
>>> -    process.exit(code);
>>> -  });
>>> -
>>> -  process.on('exit', function() {
>>> -    log('Kill inspector upon exit: %d', child.pid);
>>> -    process.kill(child.pid, 'SIGTERM');
>>> -  });
>>> -
>>> -}
>>> -
>>> -function start (debugPort) {
>>> -
>>> -  if (!debugPort || typeof debugPort !== 'number') {
>>> -    throw new Error('Need a listen debugPort');
>>> -  }
>>> -
>>> -  var webPort = debugPort + 1;
>>> -  var cmd = __filename;
>>> -  var args = [debugPort, webPort];
>>> -  var opts = {
>>> -    'cwd': __dirname,
>>> -    'stdio': 'pipe',
>>> -    'detached': false
>>> -  };
>>> -
>>> -  log('Start inspector: %s %j %j', cmd, args, opts);
>>> -
>>> -  var inspector = cp.spawn(cmd, args, opts);
>>> -
>>> -  watchInspector(inspector);
>>> -
>>> -  log('Enable remote debug pid=%d port=%d', process.pid, debugPort);
>>> -
>>> -  process.debugPort = debugPort;
>>> -  process.kill(process.pid, 'SIGUSR1');
>>> -}
>>> -
>>> -function main() {
>>> -  var debugPort = +process.argv[2];
>>> -  var webPort = +process.argv[3];
>>> -
>>> -  if (!debugPort || !webPort) {
>>> -    throw new Error('Bad arguments: need debugPort and webPort');
>>> -  }
>>> -
>>> -  console.log('Start inspector debugPort=%j webPort=%j', debugPort,
>> webPort);
>>> -
>>> -  var DebugServer = require('node-inspector/lib/debug-server');
>>> -  var server = new DebugServer();
>>> -
>>> -  server.on('close', function() {
>>> -    console.log('Server closed');
>>> -    process.exit(0);
>>> -  });
>>> -
>>> -  server.start({
>>> -    'webPort':webPort,
>>> -    'debugPort':debugPort
>>> -  });
>>> -
>>> -  process.on('uncaughtException', function(er) {
>>> -    console.log('Error:\n%s', er.stack);
>>> -  });
>>> -}
>>> -
>>> -module.exports = start;
>>> -
>>> -if (require.main === module) {
>>> -  main();
>>> -}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/package.json
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/package.json
>> b/src/couchjs-node/package.json
>>> deleted file mode 100644
>>> index 445f3b9..0000000
>>> --- a/src/couchjs-node/package.json
>>> +++ /dev/null
>>> @@ -1,40 +0,0 @@
>>> -{
>>> -  "name": "couchjs",
>>> -  "description": "Drop-in replacement for CouchDB JavaScript view
>> server",
>>> -  "keywords": [ "couchdb", "couchjs" ],
>>> -  "version": "0.3.2",
>>> -  "author": "Jason Smith <jhs@iriscouch.com> (http://www.iriscouch.com
>> )",
>>> -  "repository": {
>>> -    "type":"git",
>>> -    "url":"https://github.com/iriscouch/couchjs"
>>> -  },
>>> -  "engines": {
>>> -    "node": ">= 0.8"
>>> -  },
>>> -  "main": "./couchjs.js",
>>> -  "bin": {
>>> -    "couchjs-node":"./cli.js"
>>> -  },
>>> -  "couchdb": {
>>> -    "main":"./couchdb.js",
>>> -    "vhosts": [
>>> -      "127.0.0.1.xip.io"
>>> -    ]
>>> -  },
>>> -  "bundledDependencies": [
>>> -    "node-inspector"
>>> -  ],
>>> -  "dependencies": {
>>> -    "optimist": "~0.3.4",
>>> -    "async"   : "~0.2.5",
>>> -    "mkdirp"  : "~0.3.4",
>>> -    "fibers"  : "~1.0.0",
>>> -    "request" : "~2.9.203",
>>> -    "pushover": "~1.2.1",
>>> -    "defaultable": "~0.7.2",
>>> -    "node-inspector": "git://
>> github.com/iriscouch/node-inspector#couchjs"
>>> -  },
>>> -  "devDependencies": {
>>> -    "tap": "~0.2.5"
>>> -  }
>>> -}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/sandbox.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/sandbox.js b/src/couchjs-node/sandbox.js
>>> deleted file mode 100644
>>> index 5c18ef4..0000000
>>> --- a/src/couchjs-node/sandbox.js
>>> +++ /dev/null
>>> @@ -1,47 +0,0 @@
>>> -// from https://github.com/KlausTrainer/sandbox.js
>>> -exports.runInSandbox = function(src, ctx, whitelist) {
>>> -  var vm = require('vm');
>>> -  var sandbox;
>>> -
>>> -  if (ctx && ctx.require) {
>>> -
>>> -    whitelist = whitelist || [];
>>> -
>>> -    var insecureRequire = ctx.require;
>>> -    var module = require('module');
>>> -    var oldModulePrototype = module.prototype;
>>> -
>>> -    var secureRequire = function(moduleName) {
>>> -
>>> -      if (whitelist.indexOf(moduleName) === -1) {
>>> -        module.prototype = oldModulePrototype;
>>> -
>>> -        throw new Error("'" + moduleName + "' is not whitelisted");
>>> -
>>> -      } else {
>>> -        var requiredModule = insecureRequire(moduleName);
>>> -
>>> -        module.prototype = oldModulePrototype;
>>> -
>>> -        return requiredModule;
>>> -      }
>>> -    };
>>> -
>>> -    module.prototype = {
>>> -      require: secureRequire,
>>> -      load: module.prototype.load,
>>> -      _compile: module.prototype._compile
>>> -    };
>>> -
>>> -    module._cache = {};
>>> -
>>> -    ctx.require = secureRequire;
>>> -    sandbox = Object.freeze(vm.createContext(ctx));
>>> -    ctx.require = insecureRequire;
>>> -
>>> -  } else {
>>> -    sandbox = Object.freeze(vm.createContext(ctx || {}));
>>> -  }
>>> -
>>> -  return vm.createScript('(function() {"use strict"; return (' + src +
>> ')()}())').runInContext(sandbox);
>>> -};
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/stream.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/stream.js b/src/couchjs-node/stream.js
>>> deleted file mode 100644
>>> index ebffc30..0000000
>>> --- a/src/couchjs-node/stream.js
>>> +++ /dev/null
>>> @@ -1,115 +0,0 @@
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -// Text line stream
>>> -
>>> -var stream = require('stream');
>>> -var util = require('util');
>>> -
>>> -
>>> -function LineStream() {
>>> -
>>> -  var self = this;
>>> -  stream.call(self);
>>> -
>>> -  self.readable = true;
>>> -  self.writable = true;
>>> -
>>> -  self.buffer = '';
>>> -  self.downstream = null;
>>> -
>>> -  self.on('pipe', function(upstream) {
>>> -    upstream.on('end', function(data, encoding) {
>>> -      self.emit('end', data, encoding);
>>> -    });
>>> -  });
>>> -}
>>> -
>>> -function LineStream2() {
>>> -
>>> -  if (!(this instanceof LineStream2)) {
>>> -    return new LineStream2();
>>> -  }
>>> -
>>> -  stream.Transform.call(this);
>>> -  this.setEncoding('utf8');
>>> -}
>>> -
>>> -util.inherits(LineStream2, stream.Transform);
>>> -
>>> -LineStream2.prototype._transform = function(message, encoding, done) {
>>> -  var self = this;
>>> -
>>> -  message = message.toString(encoding);
>>> -  var lines = message.split(/\n/);
>>> -
>>> -  // If the data ends in "\n" this will be ""; otherwise the final
>> partial line.
>>> -  var remainder = lines.pop();
>>> -  if (remainder) {
>>> -    this.unshift(remainder);
>>> -  }
>>> -
>>> -  lines.forEach(function(line) {
>>> -    self.push(line);
>>> -  });
>>> -
>>> -  done();
>>> -};
>>> -
>>> -util.inherits(LineStream, stream);
>>> -
>>> -
>>> -
>>> -LineStream.prototype.write = function(data) {
>>> -  var self = this;
>>> -
>>> -  data = data || '';
>>> -  if (typeof data !== 'string') {
>>> -    return self.error(new Error('Data was not a string: ' +
>> util.inspect(data)));
>>> -  }
>>> -
>>> -  self.buffer += data;
>>> -  var lines = self.buffer.split(/\n/);
>>> -  self.buffer = lines.pop(); // If the data ended in "\n" this will be
>> ""; otherwise the final partial line.
>>> -
>>> -  lines.forEach(function(line) {
>>> -    self.emit('data', line);
>>> -  });
>>> -};
>>> -
>>> -
>>> -LineStream.prototype.end = function(data) {
>>> -  var self = this;
>>> -
>>> -  self.is_ending = true;
>>> -  self.writable = false;
>>> -
>>> -  // Always call write, even with no data, so it can fire the "end"
>> event.
>>> -  self.write(data);
>>> -};
>>> -
>>> -
>>> -LineStream.prototype.error = function(er) {
>>> -  var self = this;
>>> -
>>> -  self.readable = false;
>>> -  self.writable = false;
>>> -  self.emit('error', er);
>>> -
>>> -  // The write() method sometimes returns this value, so if there was
>> an error, make write() return false.
>>> -  return false;
>>> -};
>>> -
>>> -
>>> -module.exports = LineStream;
>>> -module.exports.v2 = LineStream2;
>>> -
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/test/experiment.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/test/experiment.js
>> b/src/couchjs-node/test/experiment.js
>>> deleted file mode 100644
>>> index 9197ec6..0000000
>>> --- a/src/couchjs-node/test/experiment.js
>>> +++ /dev/null
>>> @@ -1,125 +0,0 @@
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -var vm = require('vm');
>>> -var util = require('util');
>>> -
>>> -var STATE = 'wait';
>>> -
>>> -function main() {
>>> -  process.debugPort = 5859;
>>> -  process.kill(process.pid, 'SIGUSR1');
>>> -
>>> -  setTimeout(function() {
>>> -    stuff(0);
>>> -  }, 1000);
>>> -}
>>> -
>>> -function stuff(count) {
>>> -
>>> -  console.log('Doing stuff: %d', count);
>>> -  STATE = 'vm';
>>> -  console.log('More stuff: %d', count);
>>> -
>>> -  if (STATE === 'done') {
>>> -    console.log('Done');
>>> -  } else if (STATE === 'code') {
>>> -    setTimeout(code, 1000);
>>> -  } else if(STATE === 'eval') {
>>> -    test_eval();
>>> -  } else if(STATE === 'vm') {
>>> -    test_vm();
>>> -  } else if(STATE === 'wait') {
>>> -    setTimeout(function() {
>>> -      stuff(count+1);
>>> -    }, 1000);
>>> -  } else {
>>> -    throw new Error('Unknown state: ' + STATE);
>>> -  }
>>> -}
>>> -
>>> -function code() {
>>> -  var code = [
>>> -    'var foo = "in the code"',
>>> -    'console.log("This is some code")',
>>> -    'debugger',
>>> -    'console.log("foo = " + foo)'
>>> -    ].join('\n');
>>> -
>>> -  var runner = Function([], code);
>>> -
>>> -  console.log('Run runner in 1s');
>>> -
>>> -  setTimeout(run_runner, 1000)
>>> -
>>> -  function run_runner() {
>>> -    console.log('About to run runner');
>>> -    debugger;
>>> -    runner();
>>> -    console.log('Runner done');
>>> -  }
>>> -}
>>> -
>>> -function test_eval() {
>>> -  console.log('Test eval in 1s');
>>> -  setTimeout(run_eval, 1000);
>>> -
>>> -  var code = [
>>> -    'var foo = "in eval"',
>>> -    'console.log("This is eval")',
>>> -    'debugger',
>>> -    'console.log("foo = " + foo)'
>>> -    ].join('\n');
>>> -
>>> -  function run_eval() {
>>> -    console.log('Run eval now');
>>> -    debugger;
>>> -    eval(code);
>>> -  }
>>> -}
>>> -
>>> -function test_vm() {
>>> -  console.log('Test vm');
>>> -
>>> -  var code = [
>>> -    'var i = 10',
>>> -    'setTimeout(hello, 1000)',
>>> -    '',
>>> -    'function hello() {',
>>> -    '  debugger',
>>> -    '  console.log("Hello: " + i)',
>>> -    '  if(--i)',
>>> -    '    setTimeout(hello, 1000)',
>>> -    '}'
>>> -  ].join('\n');
>>> -
>>> -  console.log('Run vm now');
>>> -  var filename = '_couchdb:code.js';
>>> -
>>> -  var sandbox = {};
>>> -  var ok = ['console', 'setTimeout'];
>>> -
>>> -  ok.forEach(function(key) {
>>> -    sandbox[key] = global[key];
>>> -  });
>>> -
>>> -  var ctx = vm.createContext(sandbox);
>>> -  var script = vm.createScript(code, filename);
>>> -
>>> -  var r = script.runInNewContext(sandbox);
>>> -  console.log('Result:\n%s', util.inspect(r, false, 10));
>>> -  return r;
>>> -}
>>> -
>>> -if (require.main === module) {
>>> -  main();
>>> -}
>>> 
>>> 
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/6d66d5bf/src/couchjs-node/xml.js
>>> ----------------------------------------------------------------------
>>> diff --git a/src/couchjs-node/xml.js b/src/couchjs-node/xml.js
>>> deleted file mode 100644
>>> index b64d221..0000000
>>> --- a/src/couchjs-node/xml.js
>>> +++ /dev/null
>>> @@ -1,22 +0,0 @@
>>> -// Licensed under the Apache License, Version 2.0 (the "License"); you
>> may not
>>> -// use this file except in compliance with the License. You may obtain
>> a copy of
>>> -// the License at
>>> -//
>>> -//   http://www.apache.org/licenses/LICENSE-2.0
>>> -//
>>> -// Unless required by applicable law or agreed to in writing, software
>>> -// distributed under the License is distributed on an "AS IS" BASIS,
>> WITHOUT
>>> -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
>> the
>>> -// License for the specific language governing permissions and
>> limitations under
>>> -// the License.
>>> -
>>> -
>>> -function XML () {
>>> -  this.foo = 'bar';
>>> -}
>>> -
>>> -XML.prototype.toXMLString = function() {
>>> -  return '<xml>\n  <title>test</title>\n</xml>';
>>> -};
>>> -
>>> -module.exports = XML;
>>> 
>> 
>> 


Mime
View raw message