UNPKG

graphquire

Version:

module graph builder and installer.

53 lines (47 loc) 2.17 kB
/* vim:set ts=2 sw=2 sts=2 expandtab */ /*jshint asi: true undef: true es5: true node: true devel: true forin: true latedef: false globalstrict: true */ /*global define: true */ "use strict"; function isAbsolute(uri) { return uri && uri.charAt(0) !== '.' } function resolve(uri, base) { var path, paths, last if (isAbsolute(uri)) return uri paths = uri.split('/') base = base ? base.split('/') : [ '.' ] if (base.length > 1) base.pop() while ((path = paths.shift())) { if (path === '..') { if (base.length && base[base.length - 1] !== '..') { if (base.pop() === '.') base.push(path) } else base.push(path) } else if (path !== '.') { base.push(path) } } if (base[base.length - 1].substr(-1) === '.') base.push('') return base.join('/') } exports['test resolve'] = function(assert) { assert.equal(resolve('./'), './', './ @ => ./') assert.equal(resolve('.'), './', '. @ => ./') assert.equal(resolve('./a'), './a', './a @ => ./a') assert.equal(resolve('./a/b'), './a/b', './a/b @ => ./a/b') assert.equal(resolve('./a', './b'), './a', './a @ ./b => ./a') assert.equal(resolve('./a', '../b'), '../a', './a @ ../b => ../a') assert.equal(resolve('./a', '../b/c'), '../b/a', './a @ ../b/c => ../b/a') assert.equal(resolve('../b'), '../b', '../b @ => ../b') assert.equal(resolve('../../a', './b'), '../../a', '../../a @ ./b => ../../a') assert.equal(resolve('../../a', './b/c'), '../a', '../../a @ ./b/c => ../a') assert.equal(resolve('../..', './a/b/c'), './', '../.. @ ./a/b/c => ./') assert.equal(resolve('./', '../b'), '../', './ @ ../b => ../b') assert.equal(resolve('./a', '../b'), '../a', './a @ ../b => ../a') assert.equal(resolve('..', '..'), '../../', '.. @ .. => ../../') assert.equal(resolve('../', '..'), '../../', '../ @ .. => ../../') assert.equal(resolve('..', '../'), '../../', '.. @ ../ => ../../') assert.equal(resolve('../', '../'), '../../', '../ @ ../ => ../../') assert.equal(resolve('..', '../a/b'), '../', '.. @ ../a/b => ../') assert.equal(resolve('.', '..'), '../', '. @ .. => ../') } if (module == require.main) require("test").run(exports)