diff --git a/shell.js b/shell.js index 2bd97d5..ee5f89b 100644 --- a/shell.js +++ b/shell.js @@ -102,8 +102,8 @@ var sublevel = module.exports = function (nut, prefix, createStream, options) { } emitter.sublevel = function (name, opts) { - return emitter.sublevels[name] = - emitter.sublevels[name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts)) + return emitter.sublevels['$' + name] = + emitter.sublevels['$' + name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts)) } emitter.pre = function (key, hook) { diff --git a/test/special-names.js b/test/special-names.js new file mode 100644 index 0000000..1f90c0e --- /dev/null +++ b/test/special-names.js @@ -0,0 +1,45 @@ +var levelup = require('level-test')() + +var base = require('../')(levelup('test-sublevels')) + +var test = require('tape') + +test('special names', function (t) { + t.deepEqual(base.sublevels, {}) + + var cons = base.sublevel('constructor') + var proto = base.sublevel('__proto__') + var toString = base.sublevel('toString') + + t.deepEqual(base.sublevels, { + '$constructor': cons, + '$__proto__': proto, + '$toString': toString + }) + t.deepEqual(cons.sublevels, {}) + + t.strictEqual(base.sublevel('constructor'), cons) + t.strictEqual(base.sublevel('__proto__'), proto) + t.strictEqual(base.sublevel('toString'), toString) + + t.deepEqual(cons.prefix(), ['constructor']) + t.deepEqual(proto.prefix(), ['__proto__']) + t.deepEqual(toString.prefix(), ['toString']) + + var consBlerg = cons.sublevel('blerg') + t.deepEqual(cons.sublevels, {'$blerg': consBlerg}) + t.strictEqual(cons.sublevel('blerg'), consBlerg) + t.deepEqual(consBlerg.prefix(), ['constructor', 'blerg']) + + var consProto = cons.sublevel('__proto__') + t.deepEqual(cons.sublevels, {'$blerg': consBlerg, '$__proto__': consProto}) + t.strictEqual(cons.sublevel('__proto__'), consProto) + t.deepEqual(consProto.prefix(), ['constructor', '__proto__']) + + t.end() +}) + + + + + diff --git a/test/sublevels.js b/test/sublevels.js index bf3d5df..94a22f2 100644 --- a/test/sublevels.js +++ b/test/sublevels.js @@ -10,7 +10,7 @@ test('subsections', function (t) { var foo = base.sublevel('foo') var bar = base.sublevel('bar') - t.deepEqual(base.sublevels, {foo: foo, bar: bar}) + t.deepEqual(base.sublevels, {'$foo': foo, '$bar': bar}) t.deepEqual(foo.sublevels, {}) t.strictEqual(base.sublevel('foo'), foo) @@ -20,7 +20,7 @@ test('subsections', function (t) { console.log('prefix:', bar.prefix()) var fooBlerg = foo.sublevel('blerg') - t.deepEqual(foo.sublevels, {blerg: fooBlerg}) + t.deepEqual(foo.sublevels, {'$blerg': fooBlerg}) t.strictEqual(foo.sublevel('blerg'), fooBlerg)